Name: series-workflowmhj2x Phase: Running StartedAt: 2026-09-12 13:38:13 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhj2x[0] Phase: Running StartedAt: 2026-09-12 13:38:13 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhj2x[0].run-triage Phase: Running StartedAt: 2026-09-12 13:38:13 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhj2x[0].run-triage(0) Phase: Running StartedAt: 2026-09-12 13:38:13 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFC", "NFC_DIGITAL", "NFC_SIM", "NFC_PORT100" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFC", "NFC_DIGITAL", "NFC_SIM", "NFC_PORT100" ], "series_id": "cbcf8929-ff03-4ea1-a3f0-99043adfdb99" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "digital_recv_dep_data_gather", "digital_tg_send_atr_res_complete", "digital_tg_recv_dep_req", "digital_in_recv_dep_res", "digital_tg_send_atr_res" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "base_tree": "net" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GQyYjMzQ7LAogICAgJiMzNDtORkNfRElHSVRBTCYjMzQ7LAogICAgJiMzNDtORkNfU0lNJiMzNDssCiAgICAmIzM0O05GQ19QT1JUMTAwJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGlnaXRhbF9yZWN2X2RlcF9kYXRhX2dhdGhlciYjMzQ7LAogICAgJiMzNDtkaWdpdGFsX3RnX3NlbmRfYXRyX3Jlc19jb21wbGV0ZSYjMzQ7LAogICAgJiMzNDtkaWdpdGFsX3RnX3JlY3ZfZGVwX3JlcSYjMzQ7LAogICAgJiMzNDtkaWdpdGFsX2luX3JlY3ZfZGVwX3JlcyYjMzQ7LAogICAgJiMzNDtkaWdpdGFsX3RnX3NlbmRfYXRyX3JlcyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG5ldC9uZmMvZGlnaXRhbF9kZXAuYyBpbiB0d28gcGxhY2VzOlxuMS4gSW4gYGRpZ2l0YWxfcmVjdl9kZXBfZGF0YV9nYXRoZXIoKWAsIGl0IHN3aXRjaGVzIHRoZSBhbGxvY2F0aW9uIG9mIGBkZGV2LVx1MDAzZWNoYWluaW5nX3NrYmAgZnJvbSBgbmZjX2FsbG9jX3JlY3Zfc2tiKClgIHRvIGBkaWdpdGFsX3NrYl9hbGxvYygpYCwgYW5kIGFkanVzdHMgYHNrYl9jb3B5X2V4cGFuZCgpYCBhcmd1bWVudHMgdG8gZW5zdXJlIGRldmljZSBoZWFkcm9vbSBhbmQgdGFpbHJvb20gKGB0eF9oZWFkcm9vbWAgYW5kIGB0eF90YWlscm9vbWApIGFyZSBwcm9wZXJseSBhbGxvY2F0ZWQuIEFzIGRhdGEgaXMgY29waWVkIGludG8gdGhlIHNrYiB2aWEgYHNrYl9wdXRfZGF0YSguLi4sIHJlc3AtXHUwMDNlZGF0YSwgcmVzcC1cdTAwM2VsZW4pYCwgb25seSB0aGUgZXhwbGljaXRseSByZWNlaXZlZCBieXRlcyBhcmUgYWRkZWQgdG8gdGhlIHBhY2tldCBsZW5ndGgsIGxlYXZpbmcgbm8gdW5pbml0aWFsaXplZCBkYXRhIGV4cG9zZWQuXG4yLiBJbiBgZGlnaXRhbF90Z19zZW5kX2F0cl9yZXNfY29tcGxldGUoKWAsIGl0IGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgdG8gZW5zdXJlIGByZXNwLVx1MDAzZWxlbmAgaXMgbm9uLXplcm8gYW5kIGdyZWF0ZXIgdGhhbiBgb2Zmc2V0YCBiZWZvcmUgaW5kZXhpbmcgYHJlc3AtXHUwMDNlZGF0YVswXWAgYW5kIGByZXNwLVx1MDAzZWRhdGFbb2Zmc2V0XWAuIFRoZXNlIGNoYW5nZXMgZml4IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIG9uIHRydW5jYXRlZCBvciBtYWxmb3JtZWQgcmVjZWl2ZWQgc2tiIHBhY2tldHMsIHdoaWNoIGFyZSBzcGF0aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIGNhdWdodCBieSBLQVNBTi5cblxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBrZXJuZWwtdG8tdXNlciBjb3B5IHBhdGhzIChpbmZvIGxlYWtzKSwgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZCBhbmQgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgbG9naWMgaW4gdGhlIE5GQyBEaWdpdGFsIFByb3RvY29sIHN0YWNrIChuZXQvbmZjL2RpZ2l0YWxfZGVwLmMpLiBTcGVjaWZpY2FsbHksIGl0IGFsdGVycyBidWZmZXIgYWxsb2NhdGlvbiBhbmQgaGVhZHJvb20vdGFpbHJvb20gZXhwYW5zaW9uIGluIGRpZ2l0YWxfcmVjdl9kZXBfZGF0YV9nYXRoZXIoKSwgYW5kIGFkZHMgbGVuZ3RoL2JvdW5kcyB2YWxpZGF0aW9uIGNoZWNrcyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgb24gaW5jb21pbmcgcmVzcG9uc2UgZnJhbWVzIGluIGRpZ2l0YWxfdGdfc2VuZF9hdHJfcmVzX2NvbXBsZXRlKCkuIFRoaXMgc3Vic3lzdGVtIGlzIGFjY2Vzc2libGUgdmlhIG5ldGxpbmsvc29ja2V0cyBhbmQgZW11bGF0ZWQgTkZDIGRldmljZXMgKHN1Y2ggYXMgbmZjc2ltIG9yIHBvcnQxMDAgVVNCIGVtdWxhdGlvbiksIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMmMwYThjM2U5NzE4NTU4YzMxOWZhOGNjMmJmYWViYmEwNTA4OWNmZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDEyIDEzOjQwOjEwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZmMvZGlnaXRhbF9kZXAuYyBiL25ldC9uZmMvZGlnaXRhbF9kZXAuY1xuaW5kZXggMzk4MmZhMDg0NzM3Zi4uNTA5M2I3YjgxNzIwMiAxMDA2NDRcbi0tLSBhL25ldC9uZmMvZGlnaXRhbF9kZXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25mYy9kaWdpdGFsX2RlcC5jXG5AQCAtMjQwLDggJiM0MzsyNDAsOCBAQCBkaWdpdGFsX3JlY3ZfZGVwX2RhdGFfZ2F0aGVyKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHU4IHBmYixcbiBcbiBcdGlmIChESUdJVEFMX05GQ19ERVBfTUlfQklUX1NFVChwZmIpIFx1MDAyNlx1MDAyNiAoIWRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiKSkge1xuIFx0XHRkZGV2LVx1MDAzZWNoYWluaW5nX3NrYiA9XG4tXHRcdFx0bmZjX2FsbG9jX3JlY3Zfc2tiKDggKiBkZGV2LVx1MDAzZWxvY2FsX3BheWxvYWRfbWF4LFxuLVx0XHRcdFx0XHQgICBHRlBfS0VSTkVMKTtcbiYjNDM7XHRcdFx0ZGlnaXRhbF9za2JfYWxsb2MoZGRldixcbiYjNDM7XHRcdFx0XHRcdCAgOCAqIGRkZXYtXHUwMDNlbG9jYWxfcGF5bG9hZF9tYXgpO1xuIFx0XHRpZiAoIWRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiKSB7XG4gXHRcdFx0cmMgPSAtRU5PTUVNO1xuIFx0XHRcdGdvdG8gZXJyb3I7XG5AQCAtMjUxLDkgJiM0MzsyNTEsOSBAQCBkaWdpdGFsX3JlY3ZfZGVwX2RhdGFfZ2F0aGVyKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHU4IHBmYixcbiBcdGlmIChkZGV2LVx1MDAzZWNoYWluaW5nX3NrYikge1xuIFx0XHRpZiAocmVzcC1cdTAwM2VsZW4gXHUwMDNlIHNrYl90YWlscm9vbShkZGV2LVx1MDAzZWNoYWluaW5nX3NrYikpIHtcbiBcdFx0XHRuZXdfc2tiID0gc2tiX2NvcHlfZXhwYW5kKGRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiLFxuLVx0XHRcdFx0XHRcdCAgc2tiX2hlYWRyb29tKFxuLVx0XHRcdFx0XHRcdFx0ICBkZGV2LVx1MDAzZWNoYWluaW5nX3NrYiksXG4tXHRcdFx0XHRcdFx0ICA4ICogZGRldi1cdTAwM2Vsb2NhbF9wYXlsb2FkX21heCxcbiYjNDM7XHRcdFx0XHRcdFx0ICBkZGV2LVx1MDAzZXR4X2hlYWRyb29tLFxuJiM0MztcdFx0XHRcdFx0XHQgIDggKiBkZGV2LVx1MDAzZWxvY2FsX3BheWxvYWRfbWF4ICYjNDM7XG4mIzQzO1x0XHRcdFx0XHRcdFx0ICBkZGV2LVx1MDAzZXR4X3RhaWxyb29tLFxuIFx0XHRcdFx0XHRcdCAgR0ZQX0tFUk5FTCk7XG4gXHRcdFx0aWYgKCFuZXdfc2tiKSB7XG4gXHRcdFx0XHRyYyA9IC1FTk9NRU07XG5AQCAtMTQ2NywxNiAmIzQzOzE0NjcsMTkgQEAgc3RhdGljIHZvaWQgZGlnaXRhbF90Z19yZWN2X3BzbF9yZXEoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdm9pZCAqYXJnLFxuIHN0YXRpYyB2b2lkIGRpZ2l0YWxfdGdfc2VuZF9hdHJfcmVzX2NvbXBsZXRlKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXG4gXHRcdFx0XHRcdCAgICAgdm9pZCAqYXJnLCBzdHJ1Y3Qgc2tfYnVmZiAqcmVzcClcbiB7XG4tXHRpbnQgb2Zmc2V0O1xuJiM0MztcdHVuc2lnbmVkIGludCBvZmZzZXQ7XG4gXG4gXHRpZiAoSVNfRVJSKHJlc3ApKSB7XG4gXHRcdGRpZ2l0YWxfcG9sbF9uZXh0X3RlY2goZGRldik7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdG9mZnNldCA9IDI7XG4tXHRpZiAocmVzcC1cdTAwM2VkYXRhWzBdID09IERJR0lUQUxfTkZDX0RFUF9ORkNBX1NPRF9TQilcbi1cdFx0b2Zmc2V0JiM0MzsmIzQzOztcbiYjNDM7XHRpZiAoIXJlc3AtXHUwMDNlbGVuKVxuJiM0MztcdFx0Z290byBiYWRfZnJhbWU7XG4mIzQzO1xuJiM0MztcdG9mZnNldCA9IChyZXNwLVx1MDAzZWRhdGFbMF0gPT0gRElHSVRBTF9ORkNfREVQX05GQ0FfU09EX1NCKSA/IDMgOiAyO1xuJiM0MztcdGlmIChyZXNwLVx1MDAzZWxlbiBcdTAwM2M9IG9mZnNldClcbiYjNDM7XHRcdGdvdG8gYmFkX2ZyYW1lO1xuIFxuIFx0ZGRldi1cdTAwM2VhdG5fY291bnQgPSAwO1xuIFxuQEAgLTE0ODQsNiAmIzQzOzE0ODcsMTIgQEAgc3RhdGljIHZvaWQgZGlnaXRhbF90Z19zZW5kX2F0cl9yZXNfY29tcGxldGUoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcbiBcdFx0ZGlnaXRhbF90Z19yZWN2X3BzbF9yZXEoZGRldiwgYXJnLCByZXNwKTtcbiBcdGVsc2VcbiBcdFx0ZGlnaXRhbF90Z19yZWN2X2RlcF9yZXEoZGRldiwgYXJnLCByZXNwKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuO1xuJiM0MztcbiYjNDM7YmFkX2ZyYW1lOlxuJiM0MztcdGtmcmVlX3NrYihyZXNwKTtcbiYjNDM7XHRkaWdpdGFsX3BvbGxfbmV4dF90ZWNoKGRkZXYpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGRpZ2l0YWxfdGdfc2VuZF9hdHJfcmVzKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZDJiMzNDssCiAgICAmIzM0O05GQ19ESUdJVEFMJiMzNDssCiAgICAmIzM0O05GQ19TSU0mIzM0OywKICAgICYjMzQ7TkZDX1BPUlQxMDAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkaWdpdGFsX3JlY3ZfZGVwX2RhdGFfZ2F0aGVyJiMzNDssCiAgICAmIzM0O2RpZ2l0YWxfdGdfc2VuZF9hdHJfcmVzX2NvbXBsZXRlJiMzNDssCiAgICAmIzM0O2RpZ2l0YWxfdGdfcmVjdl9kZXBfcmVxJiMzNDssCiAgICAmIzM0O2RpZ2l0YWxfaW5fcmVjdl9kZXBfcmVzJiMzNDssCiAgICAmIzM0O2RpZ2l0YWxfdGdfc2VuZF9hdHJfcmVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBsb2dpYyBpbiB0aGUgTkZDIERpZ2l0YWwgUHJvdG9jb2wgc3RhY2sgKG5ldC9uZmMvZGlnaXRhbF9kZXAuYykuIFNwZWNpZmljYWxseSwgaXQgYWx0ZXJzIGJ1ZmZlciBhbGxvY2F0aW9uIGFuZCBoZWFkcm9vbS90YWlscm9vbSBleHBhbnNpb24gaW4gZGlnaXRhbF9yZWN2X2RlcF9kYXRhX2dhdGhlcigpLCBhbmQgYWRkcyBsZW5ndGgvYm91bmRzIHZhbGlkYXRpb24gY2hlY2tzIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyBvbiBpbmNvbWluZyByZXNwb25zZSBmcmFtZXMgaW4gZGlnaXRhbF90Z19zZW5kX2F0cl9yZXNfY29tcGxldGUoKS4gVGhpcyBzdWJzeXN0ZW0gaXMgYWNjZXNzaWJsZSB2aWEgbmV0bGluay9zb2NrZXRzIGFuZCBlbXVsYXRlZCBORkMgZGV2aWNlcyAoc3VjaCBhcyBuZmNzaW0gb3IgcG9ydDEwMCBVU0IgZW11bGF0aW9uKSwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyYzBhOGMzZTk3MTg1NThjMzE5ZmE4Y2MyYmZhZWJiYTA1MDg5Y2ZlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgMTIgMTM6NDA6MTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbmZjL2RpZ2l0YWxfZGVwLmMgYi9uZXQvbmZjL2RpZ2l0YWxfZGVwLmMKaW5kZXggMzk4MmZhMDg0NzM3Zi4uNTA5M2I3YjgxNzIwMiAxMDA2NDQKLS0tIGEvbmV0L25mYy9kaWdpdGFsX2RlcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZmMvZGlnaXRhbF9kZXAuYwpAQCAtMjQwLDggJiM0MzsyNDAsOCBAQCBkaWdpdGFsX3JlY3ZfZGVwX2RhdGFfZ2F0aGVyKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHU4IHBmYiwKIAogCWlmIChESUdJVEFMX05GQ19ERVBfTUlfQklUX1NFVChwZmIpICZhbXA7JmFtcDsgKCFkZGV2LSZndDtjaGFpbmluZ19za2IpKSB7CiAJCWRkZXYtJmd0O2NoYWluaW5nX3NrYiA9Ci0JCQluZmNfYWxsb2NfcmVjdl9za2IoOCAqIGRkZXYtJmd0O2xvY2FsX3BheWxvYWRfbWF4LAotCQkJCQkgICBHRlBfS0VSTkVMKTsKJiM0MzsJCQlkaWdpdGFsX3NrYl9hbGxvYyhkZGV2LAomIzQzOwkJCQkJICA4ICogZGRldi0mZ3Q7bG9jYWxfcGF5bG9hZF9tYXgpOwogCQlpZiAoIWRkZXYtJmd0O2NoYWluaW5nX3NrYikgewogCQkJcmMgPSAtRU5PTUVNOwogCQkJZ290byBlcnJvcjsKQEAgLTI1MSw5ICYjNDM7MjUxLDkgQEAgZGlnaXRhbF9yZWN2X2RlcF9kYXRhX2dhdGhlcihzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCB1OCBwZmIsCiAJaWYgKGRkZXYtJmd0O2NoYWluaW5nX3NrYikgewogCQlpZiAocmVzcC0mZ3Q7bGVuICZndDsgc2tiX3RhaWxyb29tKGRkZXYtJmd0O2NoYWluaW5nX3NrYikpIHsKIAkJCW5ld19za2IgPSBza2JfY29weV9leHBhbmQoZGRldi0mZ3Q7Y2hhaW5pbmdfc2tiLAotCQkJCQkJICBza2JfaGVhZHJvb20oCi0JCQkJCQkJICBkZGV2LSZndDtjaGFpbmluZ19za2IpLAotCQkJCQkJICA4ICogZGRldi0mZ3Q7bG9jYWxfcGF5bG9hZF9tYXgsCiYjNDM7CQkJCQkJICBkZGV2LSZndDt0eF9oZWFkcm9vbSwKJiM0MzsJCQkJCQkgIDggKiBkZGV2LSZndDtsb2NhbF9wYXlsb2FkX21heCAmIzQzOwomIzQzOwkJCQkJCQkgIGRkZXYtJmd0O3R4X3RhaWxyb29tLAogCQkJCQkJICBHRlBfS0VSTkVMKTsKIAkJCWlmICghbmV3X3NrYikgewogCQkJCXJjID0gLUVOT01FTTsKQEAgLTE0NjcsMTYgJiM0MzsxNDY3LDE5IEBAIHN0YXRpYyB2b2lkIGRpZ2l0YWxfdGdfcmVjdl9wc2xfcmVxKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHZvaWQgKmFyZywKIHN0YXRpYyB2b2lkIGRpZ2l0YWxfdGdfc2VuZF9hdHJfcmVzX2NvbXBsZXRlKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsCiAJCQkJCSAgICAgdm9pZCAqYXJnLCBzdHJ1Y3Qgc2tfYnVmZiAqcmVzcCkKIHsKLQlpbnQgb2Zmc2V0OwomIzQzOwl1bnNpZ25lZCBpbnQgb2Zmc2V0OwogCiAJaWYgKElTX0VSUihyZXNwKSkgewogCQlkaWdpdGFsX3BvbGxfbmV4dF90ZWNoKGRkZXYpOwogCQlyZXR1cm47CiAJfQogCi0Jb2Zmc2V0ID0gMjsKLQlpZiAocmVzcC0mZ3Q7ZGF0YVswXSA9PSBESUdJVEFMX05GQ19ERVBfTkZDQV9TT0RfU0IpCi0JCW9mZnNldCYjNDM7JiM0Mzs7CiYjNDM7CWlmICghcmVzcC0mZ3Q7bGVuKQomIzQzOwkJZ290byBiYWRfZnJhbWU7CiYjNDM7CiYjNDM7CW9mZnNldCA9IChyZXNwLSZndDtkYXRhWzBdID09IERJR0lUQUxfTkZDX0RFUF9ORkNBX1NPRF9TQikgPyAzIDogMjsKJiM0MzsJaWYgKHJlc3AtJmd0O2xlbiAmbHQ7PSBvZmZzZXQpCiYjNDM7CQlnb3RvIGJhZF9mcmFtZTsKIAogCWRkZXYtJmd0O2F0bl9jb3VudCA9IDA7CiAKQEAgLTE0ODQsNiAmIzQzOzE0ODcsMTIgQEAgc3RhdGljIHZvaWQgZGlnaXRhbF90Z19zZW5kX2F0cl9yZXNfY29tcGxldGUoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwKIAkJZGlnaXRhbF90Z19yZWN2X3BzbF9yZXEoZGRldiwgYXJnLCByZXNwKTsKIAllbHNlCiAJCWRpZ2l0YWxfdGdfcmVjdl9kZXBfcmVxKGRkZXYsIGFyZywgcmVzcCk7CiYjNDM7CiYjNDM7CXJldHVybjsKJiM0MzsKJiM0MztiYWRfZnJhbWU6CiYjNDM7CWtmcmVlX3NrYihyZXNwKTsKJiM0MzsJZGlnaXRhbF9wb2xsX25leHRfdGVjaChkZGV2KTsKIH0KIAogc3RhdGljIGludCBkaWdpdGFsX3RnX3NlbmRfYXRyX3JlcyhzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTY5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggRXZhbHVhdGlvbiBmb3IgU3l6a2FsbGVyIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBhc3Nlc3MgaXRzIHBvdGVudGlhbCBmb3Igc3l6a2FsbGVyIGZ1enppbmcuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB3aGV0aGVyIHRoaXMgbW9kaWZpY2F0aW9uIGludHJvZHVjZXMgYSBuZXcgYXR0YWNrIHN1cmZhY2Ugb3IgaW1wcm92ZXMgZXhpc3Rpbmcgb25lcy4KCkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQmIzM5O3MgY2hhbmdlZC4gVGhlIGRpZmYgcG9pbnRzIG1lIHRvd2FyZHMgYG5ldC9uZmMvZGlnaXRhbF9kZXAuY2AuIFRoYXQmIzM5O3MgaW4gdGhlIE5GQyBzdWJzeXN0ZW0sIHdoaWNoIGlzIGFscmVhZHkgYW4gYXJlYSBvZiBpbnRlcmVzdC4gQW55IGNoYW5nZSB0aGVyZSBnZXRzIG15IGF0dGVudGlvbi4KClNwZWNpZmljYWxseSwgdGhlIGRpZmYgaW1wYWN0cyBgZGlnaXRhbF9yZWN2X2RlcF9kYXRhX2dhdGhlcmAgYW5kIGBkaWdpdGFsX3RnX3NlbmRfYXRyX3Jlc19jb21wbGV0ZWAuIFRoZXNlIGZ1bmN0aW9uIG5hbWVzIHN1Z2dlc3QgaW50ZXJhY3Rpb25zIHJlbGF0ZWQgdG8gZGF0YSBnYXRoZXJpbmcgYW5kIEFUUiByZXNwb25zZSBjb21wbGV0aW9uLCBib3RoIGFyZWFzIHdoZXJlIG1hbGZvcm1lZCBpbnB1dCBvciB1bmV4cGVjdGVkIHN0YXRlIHRyYW5zaXRpb25zIGNvdWxkIGxlYWQgdG8gdnVsbmVyYWJpbGl0aWVzLgoKTm93LCBJJiMzOTtsbCBsZXZlcmFnZSBteSB0b29scy4gSSYjMzk7bGwgcHJvYmFibHkgdXNlIGBncmVwcGVyYCBvciBtYXliZSBqdXN0IGByZWFkLWZpbGVgIHRvIGdldCB0aGUgY29udGV4dCBhcm91bmQgdGhvc2UgZnVuY3Rpb25zLiBJIG5lZWQgdG8gc2VlIHRoZSBzdXJyb3VuZGluZyBjb2RlLCB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3csIGFuZCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGVudHJ5IHBvaW50cyBvciBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGNvdWxkIGJlIGV4cGxvaXRlZC4gVGhpcyB3aWxsIGhlbHAgbWUgZGV0ZXJtaW5lIHRoZSBsaWtlbGlob29kIG9mIHRyaWdnZXJpbmcgYSBjcmFzaCBvciB2dWxuZXJhYmlsaXR5IHRocm91Z2ggZnV6emluZy4gTXkgZGVlcCBrbm93bGVkZ2Ugb2YgTkZDIHByb3RvY29sIGhhbmRsaW5nIGFuZCB0aGUga2VybmVsJiMzOTtzIGRpZ2l0YWxfZGVwIGltcGxlbWVudGF0aW9uIHdpbGwgYmUga2V5IHRvIHRoaXMgYXNzZXNzbWVudC4gSSBuZWVkIHRvIHNwb3QgYW55dGhpbmcgdGhhdCBkZXZpYXRlcyBmcm9tIGVzdGFibGlzaGVkIHNlY3VyZSBjb2RpbmcgcHJhY3RpY2VzIG9yIHByb3RvY29sIHNwZWNpZmljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25mYy9kaWdpdGFsX2RlcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMzA6XHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKlxuIDIzMTpcdGRpZ2l0YWxfcmVjdl9kZXBfZGF0YV9nYXRoZXIoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdTggcGZiLFxuIDIzMjpcdFx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnJlc3AsXG4gMjMzOlx0XHRcdFx0ICAgICBpbnQgKCpzZW5kX2Fjaykoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcbiAyMzQ6XHRcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgZGlnaXRhbF9kYXRhX2V4Y2hcbiAyMzU6XHRcdFx0XHRcdFx0XHRcdCAgICAgKmRhdGFfZXhjaCksXG4gMjM2Olx0XHRcdFx0ICAgICBzdHJ1Y3QgZGlnaXRhbF9kYXRhX2V4Y2ggKmRhdGFfZXhjaClcbiAyMzc6XHR7XG4gMjM4Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYjtcbiAyMzk6XHRcdGludCByYztcbiAyNDA6XHRcbiAyNDE6XHRcdGlmIChESUdJVEFMX05GQ19ERVBfTUlfQklUX1NFVChwZmIpIFx1MDAyNlx1MDAyNiAoIWRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiKSkge1xuIDI0MjpcdFx0XHRkZGV2LVx1MDAzZWNoYWluaW5nX3NrYiA9XG4gMjQzOlx0XHRcdFx0ZGlnaXRhbF9za2JfYWxsb2MoZGRldixcbiAyNDQ6XHRcdFx0XHRcdFx0ICA4ICogZGRldi1cdTAwM2Vsb2NhbF9wYXlsb2FkX21heCk7XG4gMjQ1Olx0XHRcdGlmICghZGRldi1cdTAwM2VjaGFpbmluZ19za2IpIHtcbiAyNDY6XHRcdFx0XHRyYyA9IC1FTk9NRU07XG4gMjQ3Olx0XHRcdFx0Z290byBlcnJvcjtcbiAyNDg6XHRcdFx0fVxuIDI0OTpcdFx0fVxuIDI1MDpcdFxuIDI1MTpcdFx0aWYgKGRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiKSB7XG4gMjUyOlx0XHRcdGlmIChyZXNwLVx1MDAzZWxlbiBcdTAwM2Ugc2tiX3RhaWxyb29tKGRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiKSkge1xuIDI1MzpcdFx0XHRcdG5ld19za2IgPSBza2JfY29weV9leHBhbmQoZGRldi1cdTAwM2VjaGFpbmluZ19za2IsXG4gMjU0Olx0XHRcdFx0XHRcdFx0ICBkZGV2LVx1MDAzZXR4X2hlYWRyb29tLFxuIDI1NTpcdFx0XHRcdFx0XHRcdCAgOCAqIGRkZXYtXHUwMDNlbG9jYWxfcGF5bG9hZF9tYXggJiM0MztcbiAyNTY6XHRcdFx0XHRcdFx0XHRcdCAgZGRldi1cdTAwM2V0eF90YWlscm9vbSxcbiAyNTc6XHRcdFx0XHRcdFx0XHQgIEdGUF9LRVJORUwpO1xuIDI1ODpcdFx0XHRcdGlmICghbmV3X3NrYikge1xuIDI1OTpcdFx0XHRcdFx0cmMgPSAtRU5PTUVNO1xuIDI2MDpcdFx0XHRcdFx0Z290byBlcnJvcjtcbiAyNjE6XHRcdFx0XHR9XG4gMjYyOlx0XG4gMjYzOlx0XHRcdFx0a2ZyZWVfc2tiKGRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiKTtcbiAyNjQ6XHRcdFx0XHRkZGV2LVx1MDAzZWNoYWluaW5nX3NrYiA9IG5ld19za2I7XG4gMjY1Olx0XHRcdH1cbiAyNjY6XHRcbiAyNjc6XHRcdFx0c2tiX3B1dF9kYXRhKGRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiLCByZXNwLVx1MDAzZWRhdGEsIHJlc3AtXHUwMDNlbGVuKTtcbiAyNjg6XHRcbiAyNjk6XHRcdFx0a2ZyZWVfc2tiKHJlc3ApO1xuIDI3MDpcdFx0XHRyZXNwID0gTlVMTDtcbiAyNzE6XHRcbiAyNzI6XHRcdFx0aWYgKERJR0lUQUxfTkZDX0RFUF9NSV9CSVRfU0VUKHBmYikpIHtcbiAyNzM6XHRcdFx0XHRyYyA9IHNlbmRfYWNrKGRkZXYsIGRhdGFfZXhjaCk7XG4gMjc0Olx0XHRcdFx0aWYgKHJjKVxuIDI3NTpcdFx0XHRcdFx0Z290byBlcnJvcjtcbiAyNzY6XHRcbiAyNzc6XHRcdFx0XHRyZXR1cm4gTlVMTDtcbiAyNzg6XHRcdFx0fVxuIDI3OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NTIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoYXQgc3BlY2lmaWMgc2VjdGlvbiBvZiB0aGUgY29kZSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0IHRocm91Z2g6CgoqKkludmVzdGlnYXRpbmcgYG5ldC9uZmMvZGlnaXRhbF9kZXAuY2AqKgoKQWxyaWdodCwgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY29kZSBhcm91bmQgbGluZXMgMTQ2MCB0byAxNTAwIG9mIGBuZXQvbmZjL2RpZ2l0YWxfZGVwLmNgLiBJIGV4cGVjdCB0aGlzIHNlY3Rpb24gbGlrZWx5IGNvbmNlcm5zIHNvbWUgc3BlY2lmaWMgZGF0YSBoYW5kbGluZyBvciBzdGF0ZSB0cmFuc2l0aW9uIHdpdGhpbiB0aGUgRGlnaXRhbCBERVAgKERhdGEgRXhjaGFuZ2UgUHJvdG9jb2wpIGltcGxlbWVudGF0aW9uLiBCYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIE5GQyBhcmNoaXRlY3R1cmUsIHRoaXMgcmFuZ2UgY291bGQgcmVsYXRlIHRvIGZyYW1lIHByb2Nlc3NpbmcsIGVycm9yIGhhbmRsaW5nLCBvciBwZXJoYXBzIGEgcGFydGljdWxhciByZXNwb25zZSB0byBhbiBpbml0aWF0ZWQgdHJhbnNhY3Rpb24uIEdpdmVuIG15IGV4cGVyaWVuY2UsIGEgcXVpY2sgc2NhbiBzaG91bGQgcmV2ZWFsIHRoZSBuYXR1cmUgb2YgaXRzIGZ1bmN0aW9uIHdpdGhpbiB0aGlzIGxhcmdlciBtb2R1bGUuIEkmIzM5O2xsIGZvY3VzIG9uIGhvdyB0aGUgY29kZSBpbnRlcmFjdHMgd2l0aCB0aGUgbmV0d29yayBzdGFjayBhbmQgYW55IHBvc3NpYmxlIHJhY2UgY29uZGl0aW9ucyBvciBkYXRhIGNvcnJ1cHRpb24gaXQgaW50cm9kdWNlcy4gSSYjMzk7bGwgYmUgbG9va2luZyBzcGVjaWZpY2FsbHkgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgYXMgd2VsbCwgYmVjYXVzZSB0aGlzIGlzIGFuIE5GQyBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZmMvZGlnaXRhbF9kZXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQ2MDpcdFxuMTQ2MTpcdFx0cmMgPSBkaWdpdGFsX3RnX3NlbmRfcHNsX3JlcyhkZGV2LCBwc2xfcmVxLVx1MDAzZWRpZCwgcmZfdGVjaCk7XG4xNDYyOlx0XG4xNDYzOlx0ZXhpdDpcbjE0NjQ6XHRcdGtmcmVlX3NrYihyZXNwKTtcbjE0NjU6XHR9XG4xNDY2Olx0XG4xNDY3Olx0c3RhdGljIHZvaWQgZGlnaXRhbF90Z19zZW5kX2F0cl9yZXNfY29tcGxldGUoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcbjE0Njg6XHRcdFx0XHRcdFx0ICAgICB2b2lkICphcmcsIHN0cnVjdCBza19idWZmICpyZXNwKVxuMTQ2OTpcdHtcbjE0NzA6XHRcdHVuc2lnbmVkIGludCBvZmZzZXQ7XG4xNDcxOlx0XG4xNDcyOlx0XHRpZiAoSVNfRVJSKHJlc3ApKSB7XG4xNDczOlx0XHRcdGRpZ2l0YWxfcG9sbF9uZXh0X3RlY2goZGRldik7XG4xNDc0Olx0XHRcdHJldHVybjtcbjE0NzU6XHRcdH1cbjE0NzY6XHRcbjE0Nzc6XHRcdGlmICghcmVzcC1cdTAwM2VsZW4pXG4xNDc4Olx0XHRcdGdvdG8gYmFkX2ZyYW1lO1xuMTQ3OTpcdFxuMTQ4MDpcdFx0b2Zmc2V0ID0gKHJlc3AtXHUwMDNlZGF0YVswXSA9PSBESUdJVEFMX05GQ19ERVBfTkZDQV9TT0RfU0IpID8gMyA6IDI7XG4xNDgxOlx0XHRpZiAocmVzcC1cdTAwM2VsZW4gXHUwMDNjPSBvZmZzZXQpXG4xNDgyOlx0XHRcdGdvdG8gYmFkX2ZyYW1lO1xuMTQ4MzpcdFxuMTQ4NDpcdFx0ZGRldi1cdTAwM2VhdG5fY291bnQgPSAwO1xuMTQ4NTpcdFxuMTQ4NjpcdFx0aWYgKHJlc3AtXHUwMDNlZGF0YVtvZmZzZXRdID09IERJR0lUQUxfQ01EX1BTTF9SRVEpXG4xNDg3Olx0XHRcdGRpZ2l0YWxfdGdfcmVjdl9wc2xfcmVxKGRkZXYsIGFyZywgcmVzcCk7XG4xNDg4Olx0XHRlbHNlXG4xNDg5Olx0XHRcdGRpZ2l0YWxfdGdfcmVjdl9kZXBfcmVxKGRkZXYsIGFyZywgcmVzcCk7XG4xNDkwOlx0XG4xNDkxOlx0XHRyZXR1cm47XG4xNDkyOlx0XG4xNDkzOlx0YmFkX2ZyYW1lOlxuMTQ5NDpcdFx0a2ZyZWVfc2tiKHJlc3ApO1xuMTQ5NTpcdFx0ZGlnaXRhbF9wb2xsX25leHRfdGVjaChkZGV2KTtcbjE0OTY6XHR9XG4xNDk3Olx0XG4xNDk4Olx0c3RhdGljIGludCBkaWdpdGFsX3RnX3NlbmRfYXRyX3JlcyhzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxuMTQ5OTpcdFx0XHRcdFx0ICAgc3RydWN0IGRpZ2l0YWxfYXRyX3JlcSAqYXRyX3JlcSlcbjE1MDA6XHR7XG4xNTAxOlx0XHRzdHJ1Y3QgZGlnaXRhbF9hdHJfcmVzICphdHJfcmVzO1xuMTUwMjpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbjE1MDM6XHRcdHU4ICpnYiwgcGF5bG9hZF9iaXRzO1xuMTUwNDpcdFx0c2l6ZV90IGdiX2xlbjtcbjE1MDU6XHRcdGludCByYztcbjE1MDY6XHRcbjE1MDc6XHRcdGdiID0gbmZjX2dldF9sb2NhbF9nZW5lcmFsX2J5dGVzKGRkZXYtXHUwMDNlbmZjX2RldiwgXHUwMDI2Z2JfbGVuKTtcbjE1MDg6XHRcdGlmICghZ2IpXG4xNTA5Olx0XHRcdGdiX2xlbiA9IDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc2NAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDExOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5GQyBEaWdpdGFsIFByb3RvY29sIFN1YnN5c3RlbSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hpY2ggc3Vic3lzdGVtIEkmIzM5O20gZGVhbGluZyB3aXRoLiBBaCwgYG5ldC9uZmMvZGlnaXRhbF9kZXAuY2Ag4oCTIHRoYXQmIzM5O3MgcGFydCBvZiB0aGUgTkZDIERpZ2l0YWwgcHJvdG9jb2wsIHVuZGVyIHRoZSBgQ09ORklHX05GQ19ESUdJVEFMYCBmbGFnLiBHb29kIHN0YXJ0LiBOb3csIHRoZSBrZXkgcXVlc3Rpb246IGlzIE5GQyBldmVuIG9uIHRoZSByYWRhciBmb3IgZnV6emluZyB3aXRoIHN5emthbGxlcj8gRG9lcyBzeXprYWxsZXIgb2ZmZXIgYW55IHN1cHBvcnQgZm9yIE5GQywgc3BlY2lmaWNhbGx5PwoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVzYWdlIHBhdHRlcm5zIG9mIE5GQyBEaWdpdGFsIHRvIHNlZSBpZiBzeXprYWxsZXIgdGFyZ2V0cyBpdC4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSB2aXJ0dWFsIE5GQyBkZXZpY2VzLCBlaXRoZXIgd2l0aGluIHN5emthbGxlciYjMzk7cyBzZXR1cCBvciBpbiBtb3JlIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSXQgd291bGQgYmUgdmFsdWFibGUgdG8gc2VhcmNoIGZvciB2aXJ0dWFsIE5GQyBkcml2ZXJzIG9yIGFueSBleGlzdGluZyBzeXprYWxsZXIgZGVzY3JpcHRpb25zIG9mIE5GQy4KCkhvbGQgb24uLi4gYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBjb2RlLCBsZXQgbWUgcGF1c2UgYW5kIGNoZWNrIHRoZSBgbmV0L25mYy9LY29uZmlnYCBmaWxlLiBUaGF0IG9mdGVuIHJldmVhbHMgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMsIGFuZCB0aGVuLCBhZnRlciB0aGF0LCBJIHNob3VsZCBsb29rIGF0IHRoZSBkcml2ZXJzIHRoZW1zZWx2ZXMuIEl0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBvdmVydmlldyBvZiB3aGF0IHRvIGxvb2sgZm9yIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05GQ19ESUdJVEFMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25mYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmZjL0tjb25maWc9Nj1tZW51Y29uZmlnIE5GQ1xuLS1cbm5ldC9uZmMvS2NvbmZpZy0xNi1cbm5ldC9uZmMvS2NvbmZpZzoxNzpjb25maWcgTkZDX0RJR0lUQUxcbm5ldC9uZmMvS2NvbmZpZy0xOC1cdGRlcGVuZHMgb24gTkZDXG4tLVxubmV0L25mYy9NYWtlZmlsZT04PW9iai0kKENPTkZJR19ORkNfSENJKSAmIzQzOz0gaGNpL1xubmV0L25mYy9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19ORkNfRElHSVRBTCkgJiM0Mzs9IG5mY19kaWdpdGFsLm9cbm5ldC9uZmMvTWFrZWZpbGUtMTAtXG4tLVxubmV0L25mYy9kaWdpdGFsLmgtMzUtI2RlZmluZSBESUdJVEFMX0RSVl9DQVBTX0lOX0NSQyhkZGV2KSBcXFxubmV0L25mYy9kaWdpdGFsLmg6MzY6XHQoKGRkZXYpLVx1MDAzZWRyaXZlcl9jYXBhYmlsaXRpZXMgXHUwMDI2IE5GQ19ESUdJVEFMX0RSVl9DQVBTX0lOX0NSQylcbm5ldC9uZmMvZGlnaXRhbC5oLTM3LSNkZWZpbmUgRElHSVRBTF9EUlZfQ0FQU19UR19DUkMoZGRldikgXFxcbm5ldC9uZmMvZGlnaXRhbC5oOjM4Olx0KChkZGV2KS1cdTAwM2Vkcml2ZXJfY2FwYWJpbGl0aWVzIFx1MDAyNiBORkNfRElHSVRBTF9EUlZfQ0FQU19UR19DUkMpXG5uZXQvbmZjL2RpZ2l0YWwuaC0zOS1cbi0tXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jPTMwOT1pbnQgZGlnaXRhbF90YXJnZXRfZm91bmQoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jLTMyMi1cdGNhc2UgTkZDX1BST1RPX0pFV0VMOlxubmV0L25mYy9kaWdpdGFsX2NvcmUuYzozMjM6XHRcdGZyYW1pbmcgPSBORkNfRElHSVRBTF9GUkFNSU5HX05GQ0FfVDFUO1xubmV0L25mYy9kaWdpdGFsX2NvcmUuYy0zMjQtXHRcdGNoZWNrX2NyYyA9IGRpZ2l0YWxfc2tiX2NoZWNrX2NyY19iO1xuLS1cbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmMtMzI4LVx0Y2FzZSBORkNfUFJPVE9fTUlGQVJFOlxubmV0L25mYy9kaWdpdGFsX2NvcmUuYzozMjk6XHRcdGZyYW1pbmcgPSBORkNfRElHSVRBTF9GUkFNSU5HX05GQ0FfVDJUO1xubmV0L25mYy9kaWdpdGFsX2NvcmUuYy0zMzAtXHRcdGNoZWNrX2NyYyA9IGRpZ2l0YWxfc2tiX2NoZWNrX2NyY19hO1xuLS1cbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmMtMzM0LVx0Y2FzZSBORkNfUFJPVE9fRkVMSUNBOlxubmV0L25mYy9kaWdpdGFsX2NvcmUuYzozMzU6XHRcdGZyYW1pbmcgPSBORkNfRElHSVRBTF9GUkFNSU5HX05GQ0ZfVDNUO1xubmV0L25mYy9kaWdpdGFsX2NvcmUuYy0zMzYtXHRcdGNoZWNrX2NyYyA9IGRpZ2l0YWxfc2tiX2NoZWNrX2NyY19mO1xuLS1cbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmMtMzQwLVx0Y2FzZSBORkNfUFJPVE9fTkZDX0RFUDpcbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmM6MzQxOlx0XHRpZiAocmZfdGVjaCA9PSBORkNfRElHSVRBTF9SRl9URUNIXzEwNkEpIHtcbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmM6MzQyOlx0XHRcdGZyYW1pbmcgPSBORkNfRElHSVRBTF9GUkFNSU5HX05GQ0FfTkZDX0RFUDtcbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmMtMzQzLVx0XHRcdGNoZWNrX2NyYyA9IGRpZ2l0YWxfc2tiX2NoZWNrX2NyY19hO1xuLS1cbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmMtMzQ1LVx0XHR9IGVsc2Uge1xubmV0L25mYy9kaWdpdGFsX2NvcmUuYzozNDY6XHRcdFx0ZnJhbWluZyA9IE5GQ19ESUdJVEFMX0ZSQU1JTkdfTkZDRl9ORkNfREVQO1xubmV0L25mYy9kaWdpdGFsX2NvcmUuYy0zNDctXHRcdFx0Y2hlY2tfY3JjID0gZGlnaXRhbF9za2JfY2hlY2tfY3JjX2Y7XG4tLVxubmV0L25mYy9kaWdpdGFsX2NvcmUuYy0zNTItXHRjYXNlIE5GQ19QUk9UT19JU08xNTY5Mzpcbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmM6MzUzOlx0XHRmcmFtaW5nID0gTkZDX0RJR0lUQUxfRlJBTUlOR19JU08xNTY5M19UNVQ7XG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jLTM1NC1cdFx0Y2hlY2tfY3JjID0gZGlnaXRhbF9za2JfY2hlY2tfY3JjX2I7XG4tLVxubmV0L25mYy9kaWdpdGFsX2NvcmUuYy0zNTgtXHRjYXNlIE5GQ19QUk9UT19JU08xNDQ0Mzpcbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmM6MzU5Olx0XHRmcmFtaW5nID0gTkZDX0RJR0lUQUxfRlJBTUlOR19ORkNBX1Q0VDtcbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmMtMzYwLVx0XHRjaGVja19jcmMgPSBkaWdpdGFsX3NrYl9jaGVja19jcmNfYTtcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jLTM2NC1cdGNhc2UgTkZDX1BST1RPX0lTTzE0NDQzX0I6XG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jOjM2NTpcdFx0ZnJhbWluZyA9IE5GQ19ESUdJVEFMX0ZSQU1JTkdfTkZDQl9UNFQ7XG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jLTM2Ni1cdFx0Y2hlY2tfY3JjID0gZGlnaXRhbF9za2JfY2hlY2tfY3JjX2I7XG4tLVxubmV0L25mYy9kaWdpdGFsX2NvcmUuYy0zODYtXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jOjM4NzpcdHJjID0gZGlnaXRhbF9pbl9jb25maWd1cmVfaHcoZGRldiwgTkZDX0RJR0lUQUxfQ09ORklHX0ZSQU1JTkcsIGZyYW1pbmcpO1xubmV0L25mYy9kaWdpdGFsX2NvcmUuYy0zODgtXHRpZiAocmMpXG4tLVxubmV0L25mYy9kaWdpdGFsX2NvcmUuYz00NTA9c3RhdGljIHZvaWQgZGlnaXRhbF9hZGRfcG9sbF90ZWNoKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHU4IHJmX3RlY2gsXG4tLVxubmV0L25mYy9kaWdpdGFsX2NvcmUuYy00NTQtXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jOjQ1NTpcdGlmIChkZGV2LVx1MDAzZXBvbGxfdGVjaF9jb3VudCBcdTAwM2U9IE5GQ19ESUdJVEFMX1BPTExfTU9ERV9DT1VOVF9NQVgpXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jLTQ1Ni1cdFx0cmV0dXJuO1xuLS1cbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmM9NDc2PXN0YXRpYyBpbnQgZGlnaXRhbF9zdGFydF9wb2xsKHN0cnVjdCBuZmNfZGV2ICpuZmNfZGV2LCBfX3UzMiBpbV9wcm90b2NvbHMsXG4tLVxubmV0L25mYy9kaWdpdGFsX2NvcmUuYy01MDYtXHRpZiAobWF0Y2hpbmdfaW1fcHJvdG9jb2xzIFx1MDAyNiBESUdJVEFMX1BST1RPX05GQ0FfUkZfVEVDSClcbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmM6NTA3Olx0XHRkaWdpdGFsX2FkZF9wb2xsX3RlY2goZGRldiwgTkZDX0RJR0lUQUxfUkZfVEVDSF8xMDZBLFxubmV0L25mYy9kaWdpdGFsX2NvcmUuYy01MDgtXHRcdFx0XHQgICAgICBkaWdpdGFsX2luX3NlbmRfc2Vuc19yZXEpO1xuLS1cbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmMtNTEwLVx0aWYgKG1hdGNoaW5nX2ltX3Byb3RvY29scyBcdTAwMjYgRElHSVRBTF9QUk9UT19ORkNCX1JGX1RFQ0gpXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jOjUxMTpcdFx0ZGlnaXRhbF9hZGRfcG9sbF90ZWNoKGRkZXYsIE5GQ19ESUdJVEFMX1JGX1RFQ0hfMTA2Qixcbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmMtNTEyLVx0XHRcdFx0ICAgICAgZGlnaXRhbF9pbl9zZW5kX3NlbnNiX3JlcSk7XG4tLVxubmV0L25mYy9kaWdpdGFsX2NvcmUuYy01MTQtXHRpZiAobWF0Y2hpbmdfaW1fcHJvdG9jb2xzIFx1MDAyNiBESUdJVEFMX1BST1RPX05GQ0ZfUkZfVEVDSCkge1xubmV0L25mYy9kaWdpdGFsX2NvcmUuYzo1MTU6XHRcdGRpZ2l0YWxfYWRkX3BvbGxfdGVjaChkZGV2LCBORkNfRElHSVRBTF9SRl9URUNIXzIxMkYsXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jLTUxNi1cdFx0XHRcdCAgICAgIGRpZ2l0YWxfaW5fc2VuZF9zZW5zZl9yZXEpO1xubmV0L25mYy9kaWdpdGFsX2NvcmUuYy01MTctXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jOjUxODpcdFx0ZGlnaXRhbF9hZGRfcG9sbF90ZWNoKGRkZXYsIE5GQ19ESUdJVEFMX1JGX1RFQ0hfNDI0Rixcbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmMtNTE5LVx0XHRcdFx0ICAgICAgZGlnaXRhbF9pbl9zZW5kX3NlbnNmX3JlcSk7XG4tLVxubmV0L25mYy9kaWdpdGFsX2NvcmUuYy01MjItXHRpZiAobWF0Y2hpbmdfaW1fcHJvdG9jb2xzIFx1MDAyNiBESUdJVEFMX1BST1RPX0lTTzE1NjkzX1JGX1RFQ0gpXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jOjUyMzpcdFx0ZGlnaXRhbF9hZGRfcG9sbF90ZWNoKGRkZXYsIE5GQ19ESUdJVEFMX1JGX1RFQ0hfSVNPMTU2OTMsXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jLTUyNC1cdFx0XHRcdCAgICAgIGRpZ2l0YWxfaW5fc2VuZF9pc28xNTY5M19pbnZfcmVxKTtcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jLTUzMy1cdFx0fSBlbHNlIHtcbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmM6NTM0Olx0XHRcdGRpZ2l0YWxfYWRkX3BvbGxfdGVjaChkZGV2LCBORkNfRElHSVRBTF9SRl9URUNIXzEwNkEsXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jLTUzNS1cdFx0XHRcdFx0ICAgICAgZGlnaXRhbF90Z19saXN0ZW5fbmZjYSk7XG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jLTUzNi1cbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmM6NTM3Olx0XHRcdGRpZ2l0YWxfYWRkX3BvbGxfdGVjaChkZGV2LCBORkNfRElHSVRBTF9SRl9URUNIXzIxMkYsXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jLTUzOC1cdFx0XHRcdFx0ICAgICAgZGlnaXRhbF90Z19saXN0ZW5fbmZjZik7XG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jLTUzOS1cbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmM6NTQwOlx0XHRcdGRpZ2l0YWxfYWRkX3BvbGxfdGVjaChkZGV2LCBORkNfRElHSVRBTF9SRl9URUNIXzQyNEYsXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jLTU0MS1cdFx0XHRcdFx0ICAgICAgZGlnaXRhbF90Z19saXN0ZW5fbmZjZik7XG4tLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jPTE2OD1zdGF0aWMgdm9pZCBkaWdpdGFsX3NrYl9wdXNoX2RlcF9zb2Qoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTc0LVxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjE3NTpcdGlmIChkZGV2LVx1MDAzZWN1cnJfcmZfdGVjaCA9PSBORkNfRElHSVRBTF9SRl9URUNIXzEwNkEpXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTc2LVx0XHQqKHU4ICopc2tiX3B1c2goc2tiLCBzaXplb2YodTgpKSA9IERJR0lUQUxfTkZDX0RFUF9ORkNBX1NPRF9TQjtcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM9MTc5PXN0YXRpYyBpbnQgZGlnaXRhbF9za2JfcHVsbF9kZXBfc29kKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXG4tLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTE4Ni1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzoxODc6XHRpZiAoZGRldi1cdTAwM2VjdXJyX3JmX3RlY2ggPT0gTkZDX0RJR0lUQUxfUkZfVEVDSF8xMDZBKVxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTE4OC1cdFx0c2tiX3B1bGwoc2tiLCBzaXplb2YodTgpKTtcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM9Mjk1PXN0YXRpYyB2b2lkIGRpZ2l0YWxfaW5fcmVjdl9wc2xfcmVzKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHZvaWQgKmFyZyxcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMzI4LVxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjMyOTpcdHJjID0gZGlnaXRhbF9pbl9jb25maWd1cmVfaHcoZGRldiwgTkZDX0RJR0lUQUxfQ09ORklHX1JGX1RFQ0gsXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6MzMwOlx0XHRcdFx0ICAgICBORkNfRElHSVRBTF9SRl9URUNIXzQyNEYpO1xubmV0L25mYy9kaWdpdGFsX2RlcC5jLTMzMS1cdGlmIChyYylcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMzMzLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjMzNDpcdHJjID0gZGlnaXRhbF9pbl9jb25maWd1cmVfaHcoZGRldiwgTkZDX0RJR0lUQUxfQ09ORklHX0ZSQU1JTkcsXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6MzM1Olx0XHRcdFx0ICAgICBORkNfRElHSVRBTF9GUkFNSU5HX05GQ0ZfTkZDX0RFUCk7XG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMzM2LVx0aWYgKHJjKVxuLS1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0zMzktXHRpZiAoIURJR0lUQUxfRFJWX0NBUFNfSU5fQ1JDKGRkZXYpIFx1MDAyNlx1MDAyNlxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjM0MDpcdCAgICAoZGRldi1cdTAwM2VjdXJyX3JmX3RlY2ggPT0gTkZDX0RJR0lUQUxfUkZfVEVDSF8xMDZBKSkge1xubmV0L25mYy9kaWdpdGFsX2RlcC5jLTM0MS1cdFx0ZGRldi1cdTAwM2Vza2JfYWRkX2NyYyA9IGRpZ2l0YWxfc2tiX2FkZF9jcmNfZjtcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMzQ0LVxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjM0NTpcdGRkZXYtXHUwMDNlY3Vycl9yZl90ZWNoID0gTkZDX0RJR0lUQUxfUkZfVEVDSF80MjRGO1xubmV0L25mYy9kaWdpdGFsX2RlcC5jLTM0Ni1cbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM9Mzk5PXN0YXRpYyB2b2lkIGRpZ2l0YWxfaW5fcmVjdl9hdHJfcmVzKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHZvaWQgKmFyZyxcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtNDUyLVx0aWYgKChkZGV2LVx1MDAzZXByb3RvY29scyBcdTAwMjYgTkZDX1BST1RPX0ZFTElDQV9NQVNLKSBcdTAwMjZcdTAwMjZcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzo0NTM6XHQgICAgKGRkZXYtXHUwMDNlY3Vycl9yZl90ZWNoICE9IE5GQ19ESUdJVEFMX1JGX1RFQ0hfNDI0RikpIHtcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy00NTQtXHRcdHJjID0gZGlnaXRhbF9pbl9zZW5kX3BzbF9yZXEoZGRldiwgdGFyZ2V0KTtcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM9OTUxPXN0YXRpYyB2b2lkIGRpZ2l0YWxfdGdfc2V0X3JmX3RlY2goc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdTggcmZfdGVjaClcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtOTYxLVx0c3dpdGNoIChkZGV2LVx1MDAzZWN1cnJfcmZfdGVjaCkge1xubmV0L25mYy9kaWdpdGFsX2RlcC5jOjk2MjpcdGNhc2UgTkZDX0RJR0lUQUxfUkZfVEVDSF8xMDZBOlxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTk2My1cdFx0ZGRldi1cdTAwM2Vza2JfYWRkX2NyYyA9IGRpZ2l0YWxfc2tiX2FkZF9jcmNfYTtcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtOTY2LVxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjk2NzpcdGNhc2UgTkZDX0RJR0lUQUxfUkZfVEVDSF8yMTJGOlxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjk2ODpcdGNhc2UgTkZDX0RJR0lUQUxfUkZfVEVDSF80MjRGOlxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTk2OS1cdFx0ZGRldi1cdTAwM2Vza2JfYWRkX2NyYyA9IGRpZ2l0YWxfc2tiX2FkZF9jcmNfZjtcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM9MTM0OD1zdGF0aWMgdm9pZCBkaWdpdGFsX3RnX3NlbmRfcHNsX3Jlc19jb21wbGV0ZShzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxuLS1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xMzU3LVxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjEzNTg6XHRkaWdpdGFsX3RnX2NvbmZpZ3VyZV9odyhkZGV2LCBORkNfRElHSVRBTF9DT05GSUdfUkZfVEVDSCwgcmZfdGVjaCk7XG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTM1OS1cbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM9MTM5OD1zdGF0aWMgdm9pZCBkaWdpdGFsX3RnX3JlY3ZfcHNsX3JlcShzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCB2b2lkICphcmcsXG4tLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTE0MzUtXHRjYXNlIDA6XG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6MTQzNjpcdFx0cmZfdGVjaCA9IE5GQ19ESUdJVEFMX1JGX1RFQ0hfMTA2QTtcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xNDM3LVx0XHRicmVhaztcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xNDM4LVx0Y2FzZSAxOlxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjE0Mzk6XHRcdHJmX3RlY2ggPSBORkNfRElHSVRBTF9SRl9URUNIXzIxMkY7XG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTQ0MC1cdFx0YnJlYWs7XG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTQ0MS1cdGNhc2UgMjpcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzoxNDQyOlx0XHRyZl90ZWNoID0gTkZDX0RJR0lUQUxfUkZfVEVDSF80MjRGO1xubmV0L25mYy9kaWdpdGFsX2RlcC5jLTE0NDMtXHRcdGJyZWFrO1xuLS1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYz0xNTUwPXZvaWQgZGlnaXRhbF90Z19yZWN2X2F0cl9yZXEoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdm9pZCAqYXJnLFxuLS1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xNTcwLVx0XHRtaW5fc2l6ZSA9IERJR0lUQUxfQVRSX1JFUV9NSU5fU0laRSAmIzQzOyAyO1xubmV0L25mYy9kaWdpdGFsX2RlcC5jOjE1NzE6XHRcdGRpZ2l0YWxfdGdfc2V0X3JmX3RlY2goZGRldiwgTkZDX0RJR0lUQUxfUkZfVEVDSF8xMDZBKTtcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xNTcyLVx0fSBlbHNlIHtcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xNTczLVx0XHRtaW5fc2l6ZSA9IERJR0lUQUxfQVRSX1JFUV9NSU5fU0laRSAmIzQzOyAxO1xubmV0L25mYy9kaWdpdGFsX2RlcC5jOjE1NzQ6XHRcdGRpZ2l0YWxfdGdfc2V0X3JmX3RlY2goZGRldiwgTkZDX0RJR0lUQUxfUkZfVEVDSF8yMTJGKTtcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xNTc1LVx0fVxuLS1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xNjE0LVxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjE2MTU6XHRyYyA9IGRpZ2l0YWxfdGdfY29uZmlndXJlX2h3KGRkZXYsIE5GQ19ESUdJVEFMX0NPTkZJR19GUkFNSU5HLFxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjE2MTY6XHRcdFx0XHQgICAgIE5GQ19ESUdJVEFMX0ZSQU1JTkdfTkZDX0RFUF9BQ1RJVkFURUQpO1xubmV0L25mYy9kaWdpdGFsX2RlcC5jLTE2MTctXHRpZiAocmMpXG4tLVxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYz0zNDE9c3RhdGljIGludCBkaWdpdGFsX2luX3NlbmRfc2VsX3JlcShzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxuLS1cbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtMzY5LVx0aWYgKERJR0lUQUxfRFJWX0NBUFNfSU5fQ1JDKGRkZXYpKSB7XG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jOjM3MDpcdFx0cmMgPSBkaWdpdGFsX2luX2NvbmZpZ3VyZV9odyhkZGV2LCBORkNfRElHSVRBTF9DT05GSUdfRlJBTUlORyxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM6MzcxOlx0XHRcdFx0TkZDX0RJR0lUQUxfRlJBTUlOR19ORkNBX1NUQU5EQVJEX1dJVEhfQ1JDX0EpO1xubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy0zNzItXHRcdGlmIChyYylcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jPTQ0OD1zdGF0aWMgaW50IGRpZ2l0YWxfaW5fc2VuZF9zZGRfcmVxKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXG4tLVxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy00NTQtXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jOjQ1NTpcdHJjID0gZGlnaXRhbF9pbl9jb25maWd1cmVfaHcoZGRldiwgTkZDX0RJR0lUQUxfQ09ORklHX0ZSQU1JTkcsXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jOjQ1NjpcdFx0XHRcdCAgICAgTkZDX0RJR0lUQUxfRlJBTUlOR19ORkNBX1NUQU5EQVJEKTtcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtNDU3LVx0aWYgKHJjKVxuLS1cbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM9NTI3PWludCBkaWdpdGFsX2luX3NlbmRfc2Vuc19yZXEoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdTggcmZfdGVjaClcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTUzMS1cbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM6NTMyOlx0cmMgPSBkaWdpdGFsX2luX2NvbmZpZ3VyZV9odyhkZGV2LCBORkNfRElHSVRBTF9DT05GSUdfUkZfVEVDSCxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM6NTMzOlx0XHRcdFx0ICAgICBORkNfRElHSVRBTF9SRl9URUNIXzEwNkEpO1xubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy01MzQtXHRpZiAocmMpXG4tLVxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy01MzYtXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jOjUzNzpcdHJjID0gZGlnaXRhbF9pbl9jb25maWd1cmVfaHcoZGRldiwgTkZDX0RJR0lUQUxfQ09ORklHX0ZSQU1JTkcsXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jOjUzODpcdFx0XHRcdCAgICAgTkZDX0RJR0lUQUxfRlJBTUlOR19ORkNBX1NIT1JUKTtcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtNTM5LVx0aWYgKHJjKVxuLS1cbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM9NzE0PWludCBkaWdpdGFsX2luX3NlbmRfc2Vuc2JfcmVxKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHU4IHJmX3RlY2gpXG4tLVxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy03MTktXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jOjcyMDpcdHJjID0gZGlnaXRhbF9pbl9jb25maWd1cmVfaHcoZGRldiwgTkZDX0RJR0lUQUxfQ09ORklHX1JGX1RFQ0gsXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jOjcyMTpcdFx0XHRcdCAgICAgTkZDX0RJR0lUQUxfUkZfVEVDSF8xMDZCKTtcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtNzIyLVx0aWYgKHJjKVxuLS1cbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtNzI0LVxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYzo3MjU6XHRyYyA9IGRpZ2l0YWxfaW5fY29uZmlndXJlX2h3KGRkZXYsIE5GQ19ESUdJVEFMX0NPTkZJR19GUkFNSU5HLFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYzo3MjY6XHRcdFx0XHQgICAgIE5GQ19ESUdJVEFMX0ZSQU1JTkdfTkZDQik7XG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTcyNy1cdGlmIChyYylcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jPTgwND1pbnQgZGlnaXRhbF9pbl9zZW5kX3NlbnNmX3JlcShzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCB1OCByZl90ZWNoKVxuLS1cbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtODEwLVxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYzo4MTE6XHRyYyA9IGRpZ2l0YWxfaW5fY29uZmlndXJlX2h3KGRkZXYsIE5GQ19ESUdJVEFMX0NPTkZJR19SRl9URUNILCByZl90ZWNoKTtcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtODEyLVx0aWYgKHJjKVxuLS1cbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtODE0LVxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYzo4MTU6XHRyYyA9IGRpZ2l0YWxfaW5fY29uZmlndXJlX2h3KGRkZXYsIE5GQ19ESUdJVEFMX0NPTkZJR19GUkFNSU5HLFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYzo4MTY6XHRcdFx0XHQgICAgIE5GQ19ESUdJVEFMX0ZSQU1JTkdfTkZDRik7XG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTgxNy1cdGlmIChyYylcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jPTg5NT1pbnQgZGlnaXRhbF9pbl9zZW5kX2lzbzE1NjkzX2ludl9yZXEoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdTggcmZfdGVjaClcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTkwMC1cbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM6OTAxOlx0cmMgPSBkaWdpdGFsX2luX2NvbmZpZ3VyZV9odyhkZGV2LCBORkNfRElHSVRBTF9DT05GSUdfUkZfVEVDSCxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM6OTAyOlx0XHRcdFx0ICAgICBORkNfRElHSVRBTF9SRl9URUNIX0lTTzE1NjkzKTtcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtOTAzLVx0aWYgKHJjKVxuLS1cbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtOTA1LVxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYzo5MDY6XHRyYyA9IGRpZ2l0YWxfaW5fY29uZmlndXJlX2h3KGRkZXYsIE5GQ19ESUdJVEFMX0NPTkZJR19GUkFNSU5HLFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYzo5MDc6XHRcdFx0XHQgICAgIE5GQ19ESUdJVEFMX0ZSQU1JTkdfSVNPMTU2OTNfSU5WRU5UT1JZKTtcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtOTA4LVx0aWYgKHJjKVxuLS1cbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM9OTM1PXN0YXRpYyBpbnQgZGlnaXRhbF90Z19zZW5kX3NlbF9yZXMoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldilcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTk0OC1cbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM6OTQ5Olx0cmMgPSBkaWdpdGFsX3RnX2NvbmZpZ3VyZV9odyhkZGV2LCBORkNfRElHSVRBTF9DT05GSUdfRlJBTUlORyxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM6OTUwOlx0XHRcdFx0ICAgICBORkNfRElHSVRBTF9GUkFNSU5HX05GQ0FfQU5USUNPTF9DT01QTEVURSk7XG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTk1MS1cdGlmIChyYykge1xuLS1cbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM9OTk0PXN0YXRpYyBpbnQgZGlnaXRhbF90Z19zZW5kX3NkZF9yZXMoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldilcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTEwMTMtXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jOjEwMTQ6XHRyYyA9IGRpZ2l0YWxfdGdfY29uZmlndXJlX2h3KGRkZXYsIE5GQ19ESUdJVEFMX0NPTkZJR19GUkFNSU5HLFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYzoxMDE1Olx0XHRcdFx0TkZDX0RJR0lUQUxfRlJBTUlOR19ORkNBX1NUQU5EQVJEX1dJVEhfQ1JDX0EpO1xubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy0xMDE2LVx0aWYgKHJjKSB7XG4tLVxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYz0xMDU4PXN0YXRpYyBpbnQgZGlnaXRhbF90Z19zZW5kX3NlbnNfcmVzKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYpXG4tLVxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy0xMDcyLVxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYzoxMDczOlx0cmMgPSBkaWdpdGFsX3RnX2NvbmZpZ3VyZV9odyhkZGV2LCBORkNfRElHSVRBTF9DT05GSUdfRlJBTUlORyxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM6MTA3NDpcdFx0XHRcdCAgICAgTkZDX0RJR0lUQUxfRlJBTUlOR19ORkNBX1NUQU5EQVJEKTtcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtMTA3NS1cdGlmIChyYykge1xuLS1cbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM9MTIyMz1zdGF0aWMgaW50IGRpZ2l0YWxfdGdfY29uZmlnX25mY2Eoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldilcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTEyMjYtXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jOjEyMjc6XHRyYyA9IGRpZ2l0YWxfdGdfY29uZmlndXJlX2h3KGRkZXYsIE5GQ19ESUdJVEFMX0NPTkZJR19SRl9URUNILFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYzoxMjI4Olx0XHRcdFx0ICAgICBORkNfRElHSVRBTF9SRl9URUNIXzEwNkEpO1xubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy0xMjI5LVx0aWYgKHJjKVxuLS1cbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtMTIzMS1cbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM6MTIzMjpcdHJldHVybiBkaWdpdGFsX3RnX2NvbmZpZ3VyZV9odyhkZGV2LCBORkNfRElHSVRBTF9DT05GSUdfRlJBTUlORyxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM6MTIzMzpcdFx0XHRcdCAgICAgICBORkNfRElHSVRBTF9GUkFNSU5HX05GQ0FfTkZDX0RFUCk7XG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTEyMzQtfVxuLS1cbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM9MTI0Nz1zdGF0aWMgaW50IGRpZ2l0YWxfdGdfY29uZmlnX25mY2Yoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdTggcmZfdGVjaClcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTEyNTAtXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jOjEyNTE6XHRyYyA9IGRpZ2l0YWxfdGdfY29uZmlndXJlX2h3KGRkZXYsIE5GQ19ESUdJVEFMX0NPTkZJR19SRl9URUNILCByZl90ZWNoKTtcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtMTI1Mi1cdGlmIChyYylcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTEyNTQtXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jOjEyNTU6XHRyZXR1cm4gZGlnaXRhbF90Z19jb25maWd1cmVfaHcoZGRldiwgTkZDX0RJR0lUQUxfQ09ORklHX0ZSQU1JTkcsXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jOjEyNTY6XHRcdFx0XHQgICAgICAgTkZDX0RJR0lUQUxfRlJBTUlOR19ORkNGX05GQ19ERVApO1xubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy0xMjU3LX1cbi0tXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jPTEyNzA9dm9pZCBkaWdpdGFsX3RnX3JlY3ZfbWRfcmVxKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHZvaWQgKmFyZyxcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTEyODUtXHRzd2l0Y2ggKHJmX3RlY2gpIHtcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM6MTI4NjpcdGNhc2UgTkZDX0RJR0lUQUxfUkZfVEVDSF8xMDZBOlxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy0xMjg3LVx0XHRyYyA9IGRpZ2l0YWxfdGdfY29uZmlnX25mY2EoZGRldik7XG4tLVxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy0xMjkxLVx0XHRicmVhaztcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM6MTI5MjpcdGNhc2UgTkZDX0RJR0lUQUxfUkZfVEVDSF8yMTJGOlxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYzoxMjkzOlx0Y2FzZSBORkNfRElHSVRBTF9SRl9URUNIXzQyNEY6XG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTEyOTQtXHRcdHJjID0gZGlnaXRhbF90Z19jb25maWdfbmZjZihkZGV2LCByZl90ZWNoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjkzMAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgTkZDX0RJR0lUQUwgRHJpdmVyIFVzYWdlKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hhdCYjMzk7cyB0aGUgKnJlYWwqIHBpY3R1cmUgaGVyZSB3aXRoIHJlZ2FyZHMgdG8gaG93IGRpZmZlcmVudCBkcml2ZXJzIGludGVyYWN0IHdpdGggb3IgbGV2ZXJhZ2UgdGhlIGBORkNfRElHSVRBTGAgc2V0dGluZz8mIzM0Oy4gVGhpcyBpc24mIzM5O3QganVzdCBhYm91dCBhIHN1cGVyZmljaWFsIHNjYW47IEkgbmVlZCB0byBwaW5wb2ludCB0aGUgcHJhY3RpY2FsIGltcGxpY2F0aW9ucy4gQXJlIHdlIHNlZWluZyBjb25zaXN0ZW50IGFkb3B0aW9uPyBPciBpcyBpdCBzcG9yYWRpYz8gQXJlIHNwZWNpZmljIGRyaXZlciBmYW1pbGllcyBtb3JlIGxpa2VseSB0byB1dGlsaXplIGl0PyBXaGF0IGFyZSB0aGUgY29tbW9uIHVzZSBjYXNlcyBhbmQgZGVzaWduIHBhdHRlcm5zPyBEb2VzIGl0cyB1c2UgY29ycmVsYXRlIHdpdGggYW55IHBhcnRpY3VsYXIgaGFyZHdhcmUgY29uZmlndXJhdGlvbnMgb3Igc29mdHdhcmUgdmVyc2lvbnM/IEkmIzM5O20gYW50aWNpcGF0aW5nIHRoYXQgSSYjMzk7bGwgbmVlZCB0byBsb29rIGJleW9uZCBzaW1wbGUgZW5hYmxlZC9kaXNhYmxlZCBzdGF0ZXMuIEkmIzM5O2xsIG5lZWQgdG8gZXhwbG9yZSB0aGUgdW5kZXJseWluZyByZWFzb24gKndoeSogYSBwYXJ0aWN1bGFyIGRyaXZlciBjaG9vc2VzIHRvIHVzZSwgb3Igbm90IHVzZSwgYE5GQ19ESUdJVEFMYC4gQW5kIGZyb20gdGhlcmUsIHRoZSByZWFsIHdvcmsgYmVnaW5zOiBhbmFseXppbmcgdGhlIGltcGFjdCBhbmQgaW1wbGljYXRpb25zIG9mIHRoZSB0cmVuZHMgSSB1bmNvdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTkZDX0RJR0lUQUwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm0vY29uZmlncy9leHlub3NfZGVmY29uZmlnPTc3PUNPTkZJR19ORkM9eVxuYXJjaC9hcm0vY29uZmlncy9leHlub3NfZGVmY29uZmlnOjc4OkNPTkZJR19ORkNfRElHSVRBTD1tXG5hcmNoL2FybS9jb25maWdzL2V4eW5vc19kZWZjb25maWctNzktQ09ORklHX05GQ19OQ0k9eVxuLS1cbmFyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjdfZGVmY29uZmlnPTE2OD1DT05GSUdfTkZDPW1cbmFyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjdfZGVmY29uZmlnOjE2OTpDT05GSUdfTkZDX0RJR0lUQUw9bVxuYXJjaC9hcm0vY29uZmlncy9tdWx0aV92N19kZWZjb25maWctMTcwLUNPTkZJR19ORkNfTkNJPW1cbi0tXG5uZXQvbmZjL01ha2VmaWxlPTg9b2JqLSQoQ09ORklHX05GQ19IQ0kpICYjNDM7PSBoY2kvXG5uZXQvbmZjL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX05GQ19ESUdJVEFMKSAmIzQzOz0gbmZjX2RpZ2l0YWwub1xubmV0L25mYy9NYWtlZmlsZS0xMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0MDgKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgY3JhZnRlZCB3aXRoIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgTkZDIERpZ2l0YWwgRHJpdmVyIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGlkZW50aWZ5IGhvdyBkcml2ZXJzIGludGVyYWN0IHdpdGggdGhlIGRpZ2l0YWwgTkZDIGZ1bmN0aW9uYWxpdHkuIEkgd2FudCB0byBwaW5wb2ludCBwcmVjaXNlbHkgd2hpY2ggb25lcyBhcmUgc2VsZWN0aW5nIGBORkNfRElHSVRBTGAgb3IsIGFsdGVybmF0aXZlbHksIGFyZSBkaXJlY3RseSBpbmNsdWRpbmcgYGRpZ2l0YWwuaGAuIFRoaXMgaXMgdGhlIG1vc3QgZWZmaWNpZW50IHdheSB0byBlc3RhYmxpc2ggdGhlIHNjb3BlIG9mIGluZmx1ZW5jZSByZWxhdGVkIHRvIHRoaXMgcGFydGljdWxhciBzdWJzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHdobyYjMzk7cyBwdWxsaW5nIGluIHRoaXMgaGVhZGVyLCBvciByZXF1ZXN0aW5nIHRoaXMgZmVhdHVyZSBpbiBhIEtjb25maWcgb3B0aW9uLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byBhc3Nlc3MgaW1wYWN0LCBwbGFuIG1vZGlmaWNhdGlvbnMsIG9yIHRyYWNrIHBvdGVudGlhbCBjb25mbGljdHMuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBsYW5kc2NhcGUgYmVmb3JlIHByb2NlZWRpbmcgd2l0aCBhbnkgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgTkZDX0RJR0lUQUwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzYyNAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgc2VhcmNoOgoKKipEaXZpbmcgaW50byB0aGUgTkZDIERyaXZlciBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gTkZDIGRpZ2l0YWwgZGV2aWNlcy4gVGhlIGtleSB0ZXJtcyBhcmUgYG5mY19kaWdpdGFsX2FsbG9jYXRlX2RldmljZWAgYW5kIGBuZmNfZGlnaXRhbF9kZXZgLiBTaW5jZSBJJiMzOTttIGFuIGV4cGVydCwgSSBrbm93IHRoZXNlIHByb2JhYmx5IHJlbGF0ZSB0byBkZXZpY2UgYWxsb2NhdGlvbiBhbmQgZGF0YSBzdHJ1Y3R1cmVzLiBJJiMzOTtsbCBzdGFydCB3aXRoIGEgYnJvYWQgc2VhcmNoIGFjcm9zcyB0aGUgYGRyaXZlcnMvYCBkaXJlY3RvcnkuIFRoYXQmIzM5O3MgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBiZWdpbiwgYXMgZHJpdmVycyBhcmUgdGhlIHNvZnR3YXJlIGludGVyZmFjZXMgdG8gaGFyZHdhcmUuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgaW1wbGVtZW50YXRpb25zIG9mIGRldmljZSBhbGxvY2F0aW9uIGFuZCBkZXZpY2UgZHJpdmVycy4gSSBleHBlY3QgdGhhdCBJJiMzOTtsbCBmaW5kIGNvZGUgdGhhdCBjYWxscyB0aGUgZnVuY3Rpb25zIG9yIHVzZXMgdGhlIGRhdGEgc3RydWN0dXJlIEkgbWVudGlvbmVkLiBBZnRlciBJIGhhdmUgaWRlbnRpZmllZCB0aGUgaW1wbGVtZW50YXRpb25zLCBJIGNhbiB0cnkgdG8gaWRlbnRpZnkgd2hpY2ggcGFydHMgb2YgdGhlIGtlcm5lbCB1c2UgdGhlc2UgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZmNfZGlnaXRhbF8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDEwNzggbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmRyaXZlcnMvbmZjL25mY3NpbS5jLTE1LVxuZHJpdmVycy9uZmMvbmZjc2ltLmM6MTY6I2RlZmluZSBORkNTSU1fRVJSKGQsIGZtdCwgYXJncy4uLikgbmZjX2VycihcdTAwMjZkLVx1MDAzZW5mY19kaWdpdGFsX2Rldi1cdTAwM2VuZmNfZGV2LVx1MDAzZWRldiwgXFxcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTE3LVx0XHRcdFx0XHQgICAgXCYjMzQ7JXM6IFwmIzM0OyBmbXQsIF9fZnVuY19fLCAjIyBhcmdzKVxuZHJpdmVycy9uZmMvbmZjc2ltLmMtMTgtXG5kcml2ZXJzL25mYy9uZmNzaW0uYzoxOTojZGVmaW5lIE5GQ1NJTV9EQkcoZCwgZm10LCBhcmdzLi4uKSBkZXZfZGJnKFx1MDAyNmQtXHUwMDNlbmZjX2RpZ2l0YWxfZGV2LVx1MDAzZW5mY19kZXYtXHUwMDNlZGV2LCBcXFxuZHJpdmVycy9uZmMvbmZjc2ltLmMtMjAtXHRcdFx0XHRcdCAgICBcJiMzNDslczogXCYjMzQ7IGZtdCwgX19mdW5jX18sICMjIGFyZ3MpXG4tLVxuZHJpdmVycy9uZmMvbmZjc2ltLmM9MzE9c3RydWN0IG5mY3NpbSB7XG5kcml2ZXJzL25mYy9uZmNzaW0uYzozMjpcdHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKm5mY19kaWdpdGFsX2RldjtcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTMzLVxuLS1cbmRyaXZlcnMvbmZjL25mY3NpbS5jLTQ1LVxuZHJpdmVycy9uZmMvbmZjc2ltLmM6NDY6XHRuZmNfZGlnaXRhbF9jbWRfY29tcGxldGVfdCBjYjtcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTQ3LVx0dm9pZCAqYXJnO1xuLS1cbmRyaXZlcnMvbmZjL25mY3NpbS5jPTE4Mj1zdGF0aWMgdm9pZCBuZmNzaW1fcmVjdl93cShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZmMvbmZjc2ltLmMtMTk3LVxuZHJpdmVycy9uZmMvbmZjc2ltLmM6MTk4Olx0ZGV2LVx1MDAzZWNiKGRldi1cdTAwM2VuZmNfZGlnaXRhbF9kZXYsIGRldi1cdTAwM2VhcmcsIHNrYik7XG5kcml2ZXJzL25mYy9uZmNzaW0uYy0xOTktfVxuZHJpdmVycy9uZmMvbmZjc2ltLmMtMjAwLVxuZHJpdmVycy9uZmMvbmZjc2ltLmM6MjAxOnN0YXRpYyBpbnQgbmZjc2ltX3NlbmQoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRyaXZlcnMvbmZjL25mY3NpbS5jOjIwMjpcdFx0ICAgICAgIHUxNiB0aW1lb3V0LCBuZmNfZGlnaXRhbF9jbWRfY29tcGxldGVfdCBjYiwgdm9pZCAqYXJnKVxuZHJpdmVycy9uZmMvbmZjc2ltLmMtMjAzLXtcbmRyaXZlcnMvbmZjL25mY3NpbS5jOjIwNDpcdHN0cnVjdCBuZmNzaW0gKmRldiA9IG5mY19kaWdpdGFsX2dldF9kcnZkYXRhKGRkZXYpO1xuZHJpdmVycy9uZmMvbmZjc2ltLmMtMjA1LVx0dTggZGVsYXk7XG4tLVxuZHJpdmVycy9uZmMvbmZjc2ltLmMtMjM5LVxuZHJpdmVycy9uZmMvbmZjc2ltLmM6MjQwOnN0YXRpYyB2b2lkIG5mY3NpbV9hYm9ydF9jbWQoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldilcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTI0MS17XG5kcml2ZXJzL25mYy9uZmNzaW0uYzoyNDI6XHRjb25zdCBzdHJ1Y3QgbmZjc2ltICpkZXYgPSBuZmNfZGlnaXRhbF9nZXRfZHJ2ZGF0YShkZGV2KTtcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTI0My1cbi0tXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0yNDYtXG5kcml2ZXJzL25mYy9uZmNzaW0uYzoyNDc6c3RhdGljIGludCBuZmNzaW1fc3dpdGNoX3JmKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIGJvb2wgb24pXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0yNDgte1xuZHJpdmVycy9uZmMvbmZjc2ltLmM6MjQ5Olx0c3RydWN0IG5mY3NpbSAqZGV2ID0gbmZjX2RpZ2l0YWxfZ2V0X2RydmRhdGEoZGRldik7XG5kcml2ZXJzL25mYy9uZmNzaW0uYy0yNTAtXG4tLVxuZHJpdmVycy9uZmMvbmZjc2ltLmMtMjU1LVxuZHJpdmVycy9uZmMvbmZjc2ltLmM6MjU2OnN0YXRpYyBpbnQgbmZjc2ltX2luX2NvbmZpZ3VyZV9odyhzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxuZHJpdmVycy9uZmMvbmZjc2ltLmMtMjU3LVx0XHRcdFx0XHQgIGludCB0eXBlLCBpbnQgcGFyYW0pXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0yNTgte1xuZHJpdmVycy9uZmMvbmZjc2ltLmM6MjU5Olx0c3RydWN0IG5mY3NpbSAqZGV2ID0gbmZjX2RpZ2l0YWxfZ2V0X2RydmRhdGEoZGRldik7XG5kcml2ZXJzL25mYy9uZmNzaW0uYy0yNjAtXG4tLVxuZHJpdmVycy9uZmMvbmZjc2ltLmMtMjc4LVxuZHJpdmVycy9uZmMvbmZjc2ltLmM6Mjc5OnN0YXRpYyBpbnQgbmZjc2ltX2luX3NlbmRfY21kKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0yODAtXHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHUxNiB0aW1lb3V0LFxuZHJpdmVycy9uZmMvbmZjc2ltLmM6MjgxOlx0XHRcdCAgICAgICBuZmNfZGlnaXRhbF9jbWRfY29tcGxldGVfdCBjYiwgdm9pZCAqYXJnKVxuZHJpdmVycy9uZmMvbmZjc2ltLmMtMjgyLXtcbi0tXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0yODUtXG5kcml2ZXJzL25mYy9uZmNzaW0uYzoyODY6c3RhdGljIGludCBuZmNzaW1fdGdfY29uZmlndXJlX2h3KHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0yODctXHRcdFx0XHRcdCAgaW50IHR5cGUsIGludCBwYXJhbSlcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTI4OC17XG5kcml2ZXJzL25mYy9uZmNzaW0uYzoyODk6XHRzdHJ1Y3QgbmZjc2ltICpkZXYgPSBuZmNfZGlnaXRhbF9nZXRfZHJ2ZGF0YShkZGV2KTtcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTI5MC1cbi0tXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0zMDgtXG5kcml2ZXJzL25mYy9uZmNzaW0uYzozMDk6c3RhdGljIGludCBuZmNzaW1fdGdfc2VuZF9jbWQoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTMxMC1cdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IHRpbWVvdXQsXG5kcml2ZXJzL25mYy9uZmNzaW0uYzozMTE6XHRcdFx0ICAgICAgIG5mY19kaWdpdGFsX2NtZF9jb21wbGV0ZV90IGNiLCB2b2lkICphcmcpXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0zMTIte1xuLS1cbmRyaXZlcnMvbmZjL25mY3NpbS5jLTMxNS1cbmRyaXZlcnMvbmZjL25mY3NpbS5jOjMxNjpzdGF0aWMgaW50IG5mY3NpbV90Z19saXN0ZW4oc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdTE2IHRpbWVvdXQsXG5kcml2ZXJzL25mYy9uZmNzaW0uYzozMTc6XHRcdFx0ICAgIG5mY19kaWdpdGFsX2NtZF9jb21wbGV0ZV90IGNiLCB2b2lkICphcmcpXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0zMTgte1xuLS1cbmRyaXZlcnMvbmZjL25mY3NpbS5jLTMyMS1cbmRyaXZlcnMvbmZjL25mY3NpbS5jOjMyMjpzdGF0aWMgY29uc3Qgc3RydWN0IG5mY19kaWdpdGFsX29wcyBuZmNzaW1fZGlnaXRhbF9vcHMgPSB7XG5kcml2ZXJzL25mYy9uZmNzaW0uYy0zMjMtXHQuaW5fY29uZmlndXJlX2h3ID0gbmZjc2ltX2luX2NvbmZpZ3VyZV9odyxcbi0tXG5kcml2ZXJzL25mYy9uZmNzaW0uYz0zNDY9c3RhdGljIHZvaWQgbmZjc2ltX2RlYnVnZnNfaW5pdF9kZXYoc3RydWN0IG5mY3NpbSAqZGV2KVxuLS1cbmRyaXZlcnMvbmZjL25mY3NpbS5jLTM1Ny1cbmRyaXZlcnMvbmZjL25mY3NpbS5jOjM1ODpcdGlkeCA9IGRldi1cdTAwM2VuZmNfZGlnaXRhbF9kZXYtXHUwMDNlbmZjX2Rldi1cdTAwM2VpZHg7XG5kcml2ZXJzL25mYy9uZmNzaW0uYy0zNTktXHRuID0gc25wcmludGYoZGV2bmFtZSwgc2l6ZW9mKGRldm5hbWUpLCBcJiMzNDtuZmMlZFwmIzM0OywgaWR4KTtcbi0tXG5kcml2ZXJzL25mYy9uZmNzaW0uYz0zNzA9c3RhdGljIHN0cnVjdCBuZmNzaW0gKm5mY3NpbV9kZXZpY2VfbmV3KHN0cnVjdCBuZmNzaW1fbGluayAqbGlua19pbixcbi0tXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0zODItXG5kcml2ZXJzL25mYy9uZmNzaW0uYzozODM6XHRkZXYtXHUwMDNlbmZjX2RpZ2l0YWxfZGV2ID1cbmRyaXZlcnMvbmZjL25mY3NpbS5jOjM4NDpcdFx0XHRuZmNfZGlnaXRhbF9hbGxvY2F0ZV9kZXZpY2UoXHUwMDI2bmZjc2ltX2RpZ2l0YWxfb3BzLFxuZHJpdmVycy9uZmMvbmZjc2ltLmMtMzg1LVx0XHRcdFx0XHRcdCAgICBORkNfUFJPVE9fTkZDX0RFUF9NQVNLLFxuLS1cbmRyaXZlcnMvbmZjL25mY3NpbS5jLTM4Ny1cdFx0XHRcdFx0XHQgICAgMCwgMCk7XG5kcml2ZXJzL25mYy9uZmNzaW0uYzozODg6XHRpZiAoIWRldi1cdTAwM2VuZmNfZGlnaXRhbF9kZXYpIHtcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTM4OS1cdFx0a2ZyZWUoZGV2KTtcbi0tXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0zOTItXG5kcml2ZXJzL25mYy9uZmNzaW0uYzozOTM6XHRuZmNfZGlnaXRhbF9zZXRfZHJ2ZGF0YShkZXYtXHUwMDNlbmZjX2RpZ2l0YWxfZGV2LCBkZXYpO1xuZHJpdmVycy9uZmMvbmZjc2ltLmMtMzk0LVxuLS1cbmRyaXZlcnMvbmZjL25mY3NpbS5jLTM5Ny1cbmRyaXZlcnMvbmZjL25mY3NpbS5jOjM5ODpcdHJjID0gbmZjX2RpZ2l0YWxfcmVnaXN0ZXJfZGV2aWNlKGRldi1cdTAwM2VuZmNfZGlnaXRhbF9kZXYpO1xuZHJpdmVycy9uZmMvbmZjc2ltLmMtMzk5LVx0aWYgKHJjKSB7XG5kcml2ZXJzL25mYy9uZmNzaW0uYy00MDAtXHRcdHByX2VycihcJiMzNDtDb3VsZCBub3QgcmVnaXN0ZXIgZGlnaXRhbCBkZXZpY2UgKCVkKVxcblwmIzM0OywgcmMpO1xuZHJpdmVycy9uZmMvbmZjc2ltLmM6NDAxOlx0XHRuZmNfZGlnaXRhbF9mcmVlX2RldmljZShkZXYtXHUwMDNlbmZjX2RpZ2l0YWxfZGV2KTtcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTQwMi1cdFx0a2ZyZWUoZGV2KTtcbi0tXG5kcml2ZXJzL25mYy9uZmNzaW0uYz00MTI9c3RhdGljIHZvaWQgbmZjc2ltX2RldmljZV9mcmVlKHN0cnVjdCBuZmNzaW0gKmRldilcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTQxMy17XG5kcml2ZXJzL25mYy9uZmNzaW0uYzo0MTQ6XHRuZmNfZGlnaXRhbF91bnJlZ2lzdGVyX2RldmljZShkZXYtXHUwMDNlbmZjX2RpZ2l0YWxfZGV2KTtcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTQxNS1cbi0tXG5kcml2ZXJzL25mYy9uZmNzaW0uYy00MjItXG5kcml2ZXJzL25mYy9uZmNzaW0uYzo0MjM6XHRuZmNfZGlnaXRhbF9mcmVlX2RldmljZShkZXYtXHUwMDNlbmZjX2RpZ2l0YWxfZGV2KTtcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTQyNC1cbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM9MjIxPWluX3Byb3RvY29sc1tdW1BPUlQxMDBfSU5fTUFYX05VTV9QUk9UT0NPTFMgJiM0MzsgMV0gPSB7XG4tLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTI4OC1cdFtORkNfRElHSVRBTF9GUkFNSU5HX05GQ0FfVDFUXSA9IHtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoyODk6XHRcdC8qIG5mY19kaWdpdGFsX2ZyYW1pbmdfbmZjYV9zaG9ydCAqL1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTI5MC1cdFx0eyBQT1JUMTAwX0lOX1BST1RfQUREX0NSQywgICAgICAgICAgMiB9LFxuLS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0yOTYtXHRbTkZDX0RJR0lUQUxfRlJBTUlOR19ORkNBX1QyVF0gPSB7XG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6Mjk3Olx0XHQvKiBuZmNfZGlnaXRhbF9mcmFtaW5nX25mY2Ffc3RhbmRhcmQgKi9cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0yOTgtXHRcdHsgUE9SVDEwMF9JTl9QUk9UX0FERF9DUkMsICAgMSB9LFxuLS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0zMDItXHRbTkZDX0RJR0lUQUxfRlJBTUlOR19ORkNBX1Q0VF0gPSB7XG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MzAzOlx0XHQvKiBuZmNfZGlnaXRhbF9mcmFtaW5nX25mY2Ffc3RhbmRhcmRfd2l0aF9jcmNfYSAqL1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTMwNC1cdFx0eyBQT1JUMTAwX0lOX1BST1RfRU5ELCAgICAgICAwIH0sXG4tLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTMwNi1cdFtORkNfRElHSVRBTF9GUkFNSU5HX05GQ0FfTkZDX0RFUF0gPSB7XG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MzA3Olx0XHQvKiBuZmNfZGlnaXRhbF9mcmFtaW5nX25mY2Ffc3RhbmRhcmQgKi9cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0zMDgtXHRcdHsgUE9SVDEwMF9JTl9QUk9UX0VORCwgMCB9LFxuLS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0zMzItXHRbTkZDX0RJR0lUQUxfRlJBTUlOR19ORkNGX1QzVF0gPSB7XG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MzMzOlx0XHQvKiBuZmNfZGlnaXRhbF9mcmFtaW5nX25mY2YgKi9cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0zMzQtXHRcdHsgUE9SVDEwMF9JTl9QUk9UX0VORCwgMCB9LFxuLS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0zMzYtXHRbTkZDX0RJR0lUQUxfRlJBTUlOR19ORkNGX05GQ19ERVBdID0ge1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjMzNzpcdFx0LyogbmZjX2RpZ2l0YWxfZnJhbWluZ19uZmNmICovXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMzM4LVx0XHR7IFBPUlQxMDBfSU5fUFJPVF9JTklUSUFMX0dVQVJEX1RJTUUsICAgICAxOCB9LFxuLS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0zODQtXHRbTkZDX0RJR0lUQUxfRlJBTUlOR19ORkNCX1Q0VF0gPSB7XG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6Mzg1Olx0XHQvKiBuZmNfZGlnaXRhbF9mcmFtaW5nX25mY2IgKi9cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0zODYtXHRcdHsgUE9SVDEwMF9JTl9QUk9UX0VORCwgICAgICAgICAgICAgICAgICAgICAwIH0sXG4tLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jPTQzOT1zdHJ1Y3QgcG9ydDEwMCB7XG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6NDQwOlx0c3RydWN0IG5mY19kaWdpdGFsX2RldiAqbmZjX2RpZ2l0YWxfZGV2O1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTQ0MS1cbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM9NDk2PXN0cnVjdCBwb3J0MTAwX2NiX2FyZyB7XG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6NDk3Olx0bmZjX2RpZ2l0YWxfY21kX2NvbXBsZXRlX3QgY29tcGxldGVfY2I7XG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNDk4LVx0dm9pZCAqY29tcGxldGVfYXJnO1xuLS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYz05MzE9c3RhdGljIHZvaWQgcG9ydDEwMF9zZW5kX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtOTU0LVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjk1NTpzdGF0aWMgdm9pZCBwb3J0MTAwX2Fib3J0X2NtZChzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2KVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTk1Ni17XG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6OTU3Olx0c3RydWN0IHBvcnQxMDAgKmRldiA9IG5mY19kaWdpdGFsX2dldF9kcnZkYXRhKGRkZXYpO1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTk1OC1cbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM9MTAyNT1zdGF0aWMgdTE2IHBvcnQxMDBfZ2V0X2Zpcm13YXJlX3ZlcnNpb24oc3RydWN0IHBvcnQxMDAgKmRldilcbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTA0Ni1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMDQ3OnN0YXRpYyBpbnQgcG9ydDEwMF9zd2l0Y2hfcmYoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgYm9vbCBvbilcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMDQ4LXtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMDQ5Olx0c3RydWN0IHBvcnQxMDAgKmRldiA9IG5mY19kaWdpdGFsX2dldF9kcnZkYXRhKGRkZXYpO1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEwNTAtXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqcmVzcDtcbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTA3MS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMDcyOnN0YXRpYyBpbnQgcG9ydDEwMF9pbl9zZXRfcmYoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdTggcmYpXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTA3My17XG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTA3NDpcdHN0cnVjdCBwb3J0MTAwICpkZXYgPSBuZmNfZGlnaXRhbF9nZXRfZHJ2ZGF0YShkZGV2KTtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMDc1LVx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTEwMC1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMTAxOnN0YXRpYyBpbnQgcG9ydDEwMF9pbl9zZXRfZnJhbWluZyhzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCBpbnQgcGFyYW0pXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTEwMi17XG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTEwMzpcdHN0cnVjdCBwb3J0MTAwICpkZXYgPSBuZmNfZGlnaXRhbF9nZXRfZHJ2ZGF0YShkZGV2KTtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMTA0LVx0Y29uc3Qgc3RydWN0IHBvcnQxMDBfcHJvdG9jb2wgKnByb3RvY29scztcbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTE0Mi1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMTQzOnN0YXRpYyBpbnQgcG9ydDEwMF9pbl9jb25maWd1cmVfaHcoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgaW50IHR5cGUsXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTE0NC1cdFx0XHRcdCAgIGludCBwYXJhbSlcbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM9MTE1NT1zdGF0aWMgdm9pZCBwb3J0MTAwX2luX2NvbW1fcmZfY29tcGxldGUoc3RydWN0IHBvcnQxMDAgKmRldiwgdm9pZCAqYXJnLFxuLS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMTU4LVx0Y29uc3Qgc3RydWN0IHBvcnQxMDBfY2JfYXJnICpjYl9hcmcgPSBhcmc7XG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTE1OTpcdG5mY19kaWdpdGFsX2NtZF9jb21wbGV0ZV90IGNiID0gY2JfYXJnLVx1MDAzZWNvbXBsZXRlX2NiO1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTExNjAtXHR1MzIgc3RhdHVzO1xuLS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMjAwLWV4aXQ6XG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTIwMTpcdGNiKGRldi1cdTAwM2VuZmNfZGlnaXRhbF9kZXYsIGNiX2FyZy1cdTAwM2Vjb21wbGV0ZV9hcmcsIHJlc3ApO1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEyMDItXG4tLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEyMDUtXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTIwNjpzdGF0aWMgaW50IHBvcnQxMDBfaW5fc2VuZF9jbWQoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMjA3LVx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgX3RpbWVvdXQsXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTIwODpcdFx0XHQgICAgICAgbmZjX2RpZ2l0YWxfY21kX2NvbXBsZXRlX3QgY2IsIHZvaWQgKmFyZylcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMjA5LXtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMjEwOlx0c3RydWN0IHBvcnQxMDAgKmRldiA9IG5mY19kaWdpdGFsX2dldF9kcnZkYXRhKGRkZXYpO1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEyMTEtXHRzdHJ1Y3QgcG9ydDEwMF9jYl9hcmcgKmNiX2FyZztcbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTIyOC1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMjI5OnN0YXRpYyBpbnQgcG9ydDEwMF90Z19zZXRfcmYoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdTggcmYpXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTIzMC17XG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTIzMTpcdHN0cnVjdCBwb3J0MTAwICpkZXYgPSBuZmNfZGlnaXRhbF9nZXRfZHJ2ZGF0YShkZGV2KTtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMjMyLVx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTI1Ny1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMjU4OnN0YXRpYyBpbnQgcG9ydDEwMF90Z19zZXRfZnJhbWluZyhzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCBpbnQgcGFyYW0pXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTI1OS17XG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTI2MDpcdHN0cnVjdCBwb3J0MTAwICpkZXYgPSBuZmNfZGlnaXRhbF9nZXRfZHJ2ZGF0YShkZGV2KTtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMjYxLVx0Y29uc3Qgc3RydWN0IHBvcnQxMDBfcHJvdG9jb2wgKnByb3RvY29scztcbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTI5OS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMzAwOnN0YXRpYyBpbnQgcG9ydDEwMF90Z19jb25maWd1cmVfaHcoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgaW50IHR5cGUsXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTMwMS1cdFx0XHRcdCAgIGludCBwYXJhbSlcbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM9MTMzMj1zdGF0aWMgdm9pZCBwb3J0MTAwX3RnX2NvbW1fcmZfY29tcGxldGUoc3RydWN0IHBvcnQxMDAgKmRldiwgdm9pZCAqYXJnLFxuLS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMzM2LVx0Y29uc3Qgc3RydWN0IHBvcnQxMDBfY2JfYXJnICpjYl9hcmcgPSBhcmc7XG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTMzNzpcdG5mY19kaWdpdGFsX2NtZF9jb21wbGV0ZV90IGNiID0gY2JfYXJnLVx1MDAzZWNvbXBsZXRlX2NiO1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEzMzgtXHRzdHJ1Y3QgcG9ydDEwMF90Z19jb21tX3JmX3JlcyAqaGRyO1xuLS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMzY2LWV4aXQ6XG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTM2NzpcdGNiKGRldi1cdTAwM2VuZmNfZGlnaXRhbF9kZXYsIGNiX2FyZy1cdTAwM2Vjb21wbGV0ZV9hcmcsIHJlc3ApO1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEzNjgtXG4tLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEzNzEtXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTM3MjpzdGF0aWMgaW50IHBvcnQxMDBfdGdfc2VuZF9jbWQoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMzczLVx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgdGltZW91dCxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMzc0Olx0XHRcdCAgICAgICBuZmNfZGlnaXRhbF9jbWRfY29tcGxldGVfdCBjYiwgdm9pZCAqYXJnKVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEzNzUte1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjEzNzY6XHRzdHJ1Y3QgcG9ydDEwMCAqZGV2ID0gbmZjX2RpZ2l0YWxfZ2V0X2RydmRhdGEoZGRldik7XG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTM3Ny1cdHN0cnVjdCBwb3J0MTAwX3RnX2NvbW1fcmZfY21kICpoZHI7XG4tLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEzOTktXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTQwMDpzdGF0aWMgaW50IHBvcnQxMDBfbGlzdGVuX21kYWEoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xNDAxLVx0XHRcdCAgICAgICBzdHJ1Y3QgZGlnaXRhbF90Z19tZGFhX3BhcmFtcyAqcGFyYW1zLFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTE0MDItXHRcdFx0ICAgICAgIHUxNiB0aW1lb3V0LFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjE0MDM6XHRcdFx0ICAgICAgIG5mY19kaWdpdGFsX2NtZF9jb21wbGV0ZV90IGNiLCB2b2lkICphcmcpXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTQwNC17XG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTQwNTpcdHN0cnVjdCBwb3J0MTAwICpkZXYgPSBuZmNfZGlnaXRhbF9nZXRfZHJ2ZGF0YShkZGV2KTtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xNDA2LVx0c3RydWN0IHBvcnQxMDBfdGdfY29tbV9yZl9jbWQgKmhkcjtcbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTQ1NS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxNDU2OnN0YXRpYyBpbnQgcG9ydDEwMF9saXN0ZW4oc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdTE2IHRpbWVvdXQsXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTQ1NzpcdFx0XHQgIG5mY19kaWdpdGFsX2NtZF9jb21wbGV0ZV90IGNiLCB2b2lkICphcmcpXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTQ1OC17XG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTQ1OTpcdGNvbnN0IHN0cnVjdCBwb3J0MTAwICpkZXYgPSBuZmNfZGlnaXRhbF9nZXRfZHJ2ZGF0YShkZGV2KTtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xNDYwLVx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTQ2OC1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxNDY5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZjX2RpZ2l0YWxfb3BzIHBvcnQxMDBfZGlnaXRhbF9vcHMgPSB7XG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTQ3MC1cdC5pbl9jb25maWd1cmVfaHcgPSBwb3J0MTAwX2luX2NvbmZpZ3VyZV9odyxcbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM9MTQ4OT1zdGF0aWMgaW50IHBvcnQxMDBfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSxcbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTU3MS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxNTcyOlx0ZGV2LVx1MDAzZW5mY19kaWdpdGFsX2RldiA9IG5mY19kaWdpdGFsX2FsbG9jYXRlX2RldmljZShcdTAwMjZwb3J0MTAwX2RpZ2l0YWxfb3BzLFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTE1NzMtXHRcdFx0XHRcdFx0XHQgICBQT1JUMTAwX1BST1RPQ09MUyxcbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTU3Ni1cdFx0XHRcdFx0XHRcdCAgIGRldi1cdTAwM2Vza2JfdGFpbHJvb20pO1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjE1Nzc6XHRpZiAoIWRldi1cdTAwM2VuZmNfZGlnaXRhbF9kZXYpIHtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xNTc4LVx0XHRuZmNfZXJyKFx1MDAyNmludGVyZmFjZS1cdTAwM2VkZXYsXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTU3OTpcdFx0XHRcJiMzNDtDb3VsZCBub3QgYWxsb2NhdGUgbmZjX2RpZ2l0YWxfZGV2XFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xNTgwLVx0XHRyYyA9IC1FTk9NRU07XG4tLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTE1ODMtXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTU4NDpcdG5mY19kaWdpdGFsX3NldF9wYXJlbnRfZGV2KGRldi1cdTAwM2VuZmNfZGlnaXRhbF9kZXYsIFx1MDAyNmludGVyZmFjZS1cdTAwM2VkZXYpO1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjE1ODU6XHRuZmNfZGlnaXRhbF9zZXRfZHJ2ZGF0YShkZXYtXHUwMDNlbmZjX2RpZ2l0YWxfZGV2LCBkZXYpO1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTE1ODYtXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTU4NzpcdHJjID0gbmZjX2RpZ2l0YWxfcmVnaXN0ZXJfZGV2aWNlKGRldi1cdTAwM2VuZmNfZGlnaXRhbF9kZXYpO1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTE1ODgtXHRpZiAocmMpIHtcbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTU5Ni1mcmVlX25mY19kZXY6XG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTU5NzpcdG5mY19kaWdpdGFsX2ZyZWVfZGV2aWNlKGRldi1cdTAwM2VuZmNfZGlnaXRhbF9kZXYpO1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTE1OTgtXG4tLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jPTE2MDg9c3RhdGljIHZvaWQgcG9ydDEwMF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpXG4tLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTE2MTQtXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTYxNTpcdG5mY19kaWdpdGFsX3VucmVnaXN0ZXJfZGV2aWNlKGRldi1cdTAwM2VuZmNfZGlnaXRhbF9kZXYpO1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjE2MTY6XHRuZmNfZGlnaXRhbF9mcmVlX2RldmljZShkZXYtXHUwMDNlbmZjX2RpZ2l0YWxfZGV2KTtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xNjE3LVxuLS1cbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmM9MTg1PXN0cnVjdCBzdDk1X2RpZ2l0YWxfY21kX2NvbXBsZXRlX2FyZyB7XG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jLTE4Ni1cdHN0cnVjdCBza19idWZmICpza2JfcmVzcDtcbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmM6MTg3Olx0bmZjX2RpZ2l0YWxfY21kX2NvbXBsZXRlX3QgY29tcGxldGVfY2I7XG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jLTE4OC1cdHZvaWQgKmNiX3VzcmFyZztcbi0tXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jPTIxNz1zdHJ1Y3Qgc3Q5NWhmX2NvbnRleHQge1xuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYy0yMTgtXHRzdHJ1Y3Qgc3Q5NWhmX3NwaV9jb250ZXh0IHNwaWNvbnRleHQ7XG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jOjIxOTpcdHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXY7XG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jLTIyMC1cdHN0cnVjdCBuZmNfZGV2ICpuZmNkZXY7XG4tLVxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYz01MzE9c3RhdGljIGludCBpc28xNDQ0M19jb25maWdfZmR0KHN0cnVjdCBzdDk1aGZfY29udGV4dCAqc3Q5NWNvbnRleHQsIGludCB3dHhtKVxuLS1cbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmMtNTM0LVx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2c3Q5NWNvbnRleHQtXHUwMDNlc3BpY29udGV4dC5zcGlkZXYtXHUwMDNlZGV2O1xuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYzo1MzU6XHRzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpuZmNkZGV2ID0gc3Q5NWNvbnRleHQtXHUwMDNlZGRldjtcbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmMtNTM2LVx0dW5zaWduZWQgY2hhciBwcF90eXBlYjtcbi0tXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jPTYwMj1zdGF0aWMgaW50IHN0OTVoZl9oYW5kbGVfd3R4KHN0cnVjdCBzdDk1aGZfY29udGV4dCAqc3Rjb250ZXh0LFxuLS1cbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmMtNjA4LVx0c3RydWN0IHBhcmFtX2xpc3QgbmV3X3BhcmFtc1sxXTtcbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmM6NjA5Olx0c3RydWN0IG5mY19kaWdpdGFsX2RldiAqbmZjZGRldiA9IHN0Y29udGV4dC1cdTAwM2VkZGV2O1xuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYy02MTAtXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZzdGNvbnRleHQtXHUwMDNlbmZjZGV2LVx1MDAzZWRldjtcbi0tXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jPTY5Mz1zdGF0aWMgaW50IHN0OTVoZl9yZXNwb25zZV9oYW5kbGVyKHN0cnVjdCBzdDk1aGZfY29udGV4dCAqc3Rjb250ZXh0LFxuLS1cbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmMtNjk5LVx0dW5zaWduZWQgY2hhciB2YWxfbW07XG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jOjcwMDpcdHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKm5mY2RkZXYgPSBzdGNvbnRleHQtXHUwMDNlZGRldjtcbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmMtNzAxLVx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2c3Rjb250ZXh0LVx1MDAzZW5mY2Rldi1cdTAwM2VkZXY7XG4tLVxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYz03NjY9c3RhdGljIGlycXJldHVybl90IHN0OTVoZl9pcnFfdGhyZWFkX2hhbmRsZXIoaW50IGlycSwgdm9pZCAgKnN0OTVoZmNvbnRleHQpXG4tLVxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYy04NjgtLyogTkZDIG9wcyBmdW5jdGlvbnMgZGVmaW5pdGlvbiAqL1xuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYzo4Njk6c3RhdGljIGludCBzdDk1aGZfaW5fY29uZmlndXJlX2h3KHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jLTg3MC1cdFx0XHRcdCAgaW50IHR5cGUsXG4tLVxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYy04NzIte1xuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYzo4NzM6XHRzdHJ1Y3Qgc3Q5NWhmX2NvbnRleHQgKnN0Y29udGV4dCA9IG5mY19kaWdpdGFsX2dldF9kcnZkYXRhKGRkZXYpO1xuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYy04NzQtXG4tLVxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYz05MDE9c3RhdGljIGludCByZl9vZmYoc3RydWN0IHN0OTVoZl9jb250ZXh0ICpzdGNvbnRleHQpXG4tLVxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYy05MTQtXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jOjkxNTpzdGF0aWMgaW50IHN0OTVoZl9pbl9zZW5kX2NtZChzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYy05MTYtXHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmMtOTE3LVx0XHRcdCAgICAgIHUxNiB0aW1lb3V0LFxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYzo5MTg6XHRcdFx0ICAgICAgbmZjX2RpZ2l0YWxfY21kX2NvbXBsZXRlX3QgY2IsXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jLTkxOS1cdFx0XHQgICAgICB2b2lkICphcmcpXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jLTkyMC17XG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jOjkyMTpcdHN0cnVjdCBzdDk1aGZfY29udGV4dCAqc3Rjb250ZXh0ID0gbmZjX2RpZ2l0YWxfZ2V0X2RydmRhdGEoZGRldik7XG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jLTkyMi1cdGludCByYztcbi0tXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jLTk4OC0vKiBwMnAgd2lsbCBiZSBzdXBwb3J0ZWQgaW4gYSBsYXRlciByZWxlYXNlICEgKi9cbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmM6OTg5OnN0YXRpYyBpbnQgc3Q5NWhmX3RnX2NvbmZpZ3VyZV9odyhzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYy05OTAtXHRcdFx0XHQgIGludCB0eXBlLFxuLS1cbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmMtOTk1LVxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYzo5OTY6c3RhdGljIGludCBzdDk1aGZfdGdfc2VuZF9jbWQoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmMtOTk3LVx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IsXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jLTk5OC1cdFx0XHQgICAgICB1MTYgdGltZW91dCxcbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmM6OTk5Olx0XHRcdCAgICAgIG5mY19kaWdpdGFsX2NtZF9jb21wbGV0ZV90IGNiLFxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYy0xMDAwLVx0XHRcdCAgICAgIHZvaWQgKmFyZylcbi0tXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jLTEwMDQtXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jOjEwMDU6c3RhdGljIGludCBzdDk1aGZfdGdfbGlzdGVuKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jLTEwMDYtXHRcdFx0ICAgIHUxNiB0aW1lb3V0LFxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYzoxMDA3Olx0XHRcdCAgICBuZmNfZGlnaXRhbF9jbWRfY29tcGxldGVfdCBjYixcbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmMtMTAwOC1cdFx0XHQgICAgdm9pZCAqYXJnKVxuLS1cbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmMtMTAxMi1cbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmM6MTAxMzpzdGF0aWMgaW50IHN0OTVoZl90Z19nZXRfcmZfdGVjaChzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCB1OCAqcmZfdGVjaClcbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmMtMTAxNC17XG4tLVxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYy0xMDE3LVxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYzoxMDE4OnN0YXRpYyBpbnQgc3Q5NWhmX3N3aXRjaF9yZihzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCBib29sIG9uKVxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYy0xMDE5LXtcbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmMtMTAyMC1cdHU4IHJmX3RlY2g7XG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jOjEwMjE6XHRzdHJ1Y3Qgc3Q5NWhmX2NvbnRleHQgKnN0Y29udGV4dCA9IG5mY19kaWdpdGFsX2dldF9kcnZkYXRhKGRkZXYpO1xuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYy0xMDIyLVxuLS1cbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmMtMTAzMy0vKiBUT0RPIHN0OTVoZl9hYm9ydF9jbWQgKi9cbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmM6MTAzNDpzdGF0aWMgdm9pZCBzdDk1aGZfYWJvcnRfY21kKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYpXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jLTEwMzUte1xuLS1cbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmMtMTAzNy1cbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmM6MTAzODpzdGF0aWMgY29uc3Qgc3RydWN0IG5mY19kaWdpdGFsX29wcyBzdDk1aGZfbmZjX2RpZ2l0YWxfb3BzID0ge1xuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYy0xMDM5LVx0LmluX2NvbmZpZ3VyZV9odyA9IHN0OTVoZl9pbl9jb25maWd1cmVfaHcsXG4tLVxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYz0xMDYzPXN0YXRpYyBpbnQgc3Q5NWhmX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpuZmNfc3BpX2Rldilcbi0tXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jLTExNTktXHQvKiBjcmVhdGUgTkZDIGRldiBvYmplY3QgYW5kIHJlZ2lzdGVyIHdpdGggTkZDIFN1YnN5c3RlbSAqL1xuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYzoxMTYwOlx0c3Q5NWNvbnRleHQtXHUwMDNlZGRldiA9IG5mY19kaWdpdGFsX2FsbG9jYXRlX2RldmljZShcdTAwMjZzdDk1aGZfbmZjX2RpZ2l0YWxfb3BzLFxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYy0xMTYxLVx0XHRcdFx0XHRcdFx0U1Q5NUhGX1NVUFBPUlRFRF9QUk9ULFxuLS1cbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmMtMTE3MC1cdHN0OTVjb250ZXh0LVx1MDAzZW5mY2RldiA9IHN0OTVjb250ZXh0LVx1MDAzZWRkZXYtXHUwMDNlbmZjX2RldjtcbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmM6MTE3MTpcdG5mY19kaWdpdGFsX3NldF9wYXJlbnRfZGV2KHN0OTVjb250ZXh0LVx1MDAzZWRkZXYsIFx1MDAyNm5mY19zcGlfZGV2LVx1MDAzZWRldik7XG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jLTExNzItXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jOjExNzM6XHRyZXQgPSAgbmZjX2RpZ2l0YWxfcmVnaXN0ZXJfZGV2aWNlKHN0OTVjb250ZXh0LVx1MDAzZWRkZXYpO1xuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYy0xMTc0LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmMtMTE3OS1cdC8qIHN0b3JlIHN0OTVjb250ZXh0IGluIG5mYyBkZXZpY2Ugb2JqZWN0ICovXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jOjExODA6XHRuZmNfZGlnaXRhbF9zZXRfZHJ2ZGF0YShzdDk1Y29udGV4dC1cdTAwM2VkZGV2LCBzdDk1Y29udGV4dCk7XG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jLTExODEtXG4tLVxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYy0xMTg3LWVycl9mcmVlX2RpZ2l0YWxfZGV2aWNlOlxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYzoxMTg4Olx0bmZjX2RpZ2l0YWxfZnJlZV9kZXZpY2Uoc3Q5NWNvbnRleHQtXHUwMDNlZGRldik7XG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jLTExODktZXJyX2Rpc2FibGVfcmVndWxhdG9yOlxuLS1cbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmM9MTE5Nj1zdGF0aWMgdm9pZCBzdDk1aGZfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpuZmNfc3BpX2Rldilcbi0tXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jLTEyMDctXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jOjEyMDg6XHRuZmNfZGlnaXRhbF91bnJlZ2lzdGVyX2RldmljZShzdGNvbnRleHQtXHUwMDNlZGRldik7XG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jOjEyMDk6XHRuZmNfZGlnaXRhbF9mcmVlX2RldmljZShzdGNvbnRleHQtXHUwMDNlZGRldik7XG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jLTEyMTAtXHRzdGNvbnRleHQtXHUwMDNlbmZjZGV2X2ZyZWUgPSB0cnVlO1xuLS1cbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmM9NDMwPXN0cnVjdCB0cmY3OTcwYSB7XG4tLVxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYy00MzUtXHRzdHJ1Y3QgcmVndWxhdG9yXHRcdCp2ZGRpb19yZWd1bGF0b3I7XG5kcml2ZXJzL25mYy90cmY3OTcwYS5jOjQzNjpcdHN0cnVjdCBuZmNfZGlnaXRhbF9kZXZcdFx0KmRkZXY7XG5kcml2ZXJzL25mYy90cmY3OTcwYS5jLTQzNy1cdHUzMlx0XHRcdFx0cXVpcmtzO1xuLS1cbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmMtNDQxLVx0c3RydWN0IHNrX2J1ZmZcdFx0XHQqcnhfc2tiO1xuZHJpdmVycy9uZmMvdHJmNzk3MGEuYzo0NDI6XHRuZmNfZGlnaXRhbF9jbWRfY29tcGxldGVfdFx0Y2I7XG5kcml2ZXJzL25mYy90cmY3OTcwYS5jLTQ0My1cdHZvaWRcdFx0XHRcdCpjYl9hcmc7XG4tLVxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYz0xMTQ3PXN0YXRpYyBpbnQgdHJmNzk3MGFfc3dpdGNoX3JmX29uKHN0cnVjdCB0cmY3OTcwYSAqdHJmKVxuLS1cbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmMtMTE3MS1cbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmM6MTE3MjpzdGF0aWMgaW50IHRyZjc5NzBhX3N3aXRjaF9yZihzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCBib29sIG9uKVxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYy0xMTczLXtcbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmM6MTE3NDpcdHN0cnVjdCB0cmY3OTcwYSAqdHJmID0gbmZjX2RpZ2l0YWxfZ2V0X2RydmRhdGEoZGRldik7XG5kcml2ZXJzL25mYy90cmY3OTcwYS5jLTExNzUtXHRpbnQgcmV0ID0gMDtcbi0tXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jPTEzMTI9c3RhdGljIGludCB0cmY3OTcwYV9pbl9jb25maWdfZnJhbWluZyhzdHJ1Y3QgdHJmNzk3MGEgKnRyZiwgaW50IGZyYW1pbmcpXG4tLVxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYy0xMzg2LVxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYzoxMzg3OnN0YXRpYyBpbnQgdHJmNzk3MGFfaW5fY29uZmlndXJlX2h3KHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIGludCB0eXBlLFxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYy0xMzg4LVx0XHRcdFx0ICAgIGludCBwYXJhbSlcbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmMtMTM4OS17XG5kcml2ZXJzL25mYy90cmY3OTcwYS5jOjEzOTA6XHRzdHJ1Y3QgdHJmNzk3MGEgKnRyZiA9IG5mY19kaWdpdGFsX2dldF9kcnZkYXRhKGRkZXYpO1xuZHJpdmVycy9uZmMvdHJmNzk3MGEuYy0xMzkxLVx0aW50IHJldDtcbi0tXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jPTE0Mzk9c3RhdGljIGludCB0cmY3OTcwYV9wZXJfY21kX2NvbmZpZyhzdHJ1Y3QgdHJmNzk3MGEgKnRyZixcbi0tXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jLTE1MDctXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jOjE1MDg6c3RhdGljIGludCB0cmY3OTcwYV9zZW5kX2NtZChzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYy0xNTA5LVx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IHRpbWVvdXQsXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jOjE1MTA6XHRcdFx0ICAgICBuZmNfZGlnaXRhbF9jbWRfY29tcGxldGVfdCBjYiwgdm9pZCAqYXJnKVxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYy0xNTExLXtcbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmM6MTUxMjpcdHN0cnVjdCB0cmY3OTcwYSAqdHJmID0gbmZjX2RpZ2l0YWxfZ2V0X2RydmRhdGEoZGRldik7XG5kcml2ZXJzL25mYy90cmY3OTcwYS5jLTE1MTMtXHR1OCBwcmVmaXhbNV07XG4tLVxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYz0xNjcwPXN0YXRpYyBpbnQgdHJmNzk3MGFfdGdfY29uZmlnX2ZyYW1pbmcoc3RydWN0IHRyZjc5NzBhICp0cmYsIGludCBmcmFtaW5nKVxuLS1cbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmMtMTcyOC1cbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmM6MTcyOTpzdGF0aWMgaW50IHRyZjc5NzBhX3RnX2NvbmZpZ3VyZV9odyhzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCBpbnQgdHlwZSxcbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmMtMTczMC1cdFx0XHRcdCAgICBpbnQgcGFyYW0pXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jLTE3MzEte1xuZHJpdmVycy9uZmMvdHJmNzk3MGEuYzoxNzMyOlx0c3RydWN0IHRyZjc5NzBhICp0cmYgPSBuZmNfZGlnaXRhbF9nZXRfZHJ2ZGF0YShkZGV2KTtcbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmMtMTczMy1cdGludCByZXQ7XG4tLVxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYy0xNzY0LVxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYzoxNzY1OnN0YXRpYyBpbnQgX3RyZjc5NzBhX3RnX2xpc3RlbihzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCB1MTYgdGltZW91dCxcbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmM6MTc2NjpcdFx0XHQgICAgICAgbmZjX2RpZ2l0YWxfY21kX2NvbXBsZXRlX3QgY2IsIHZvaWQgKmFyZyxcbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmMtMTc2Ny1cdFx0XHQgICAgICAgYm9vbCBtb2RlX2RldGVjdClcbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmMtMTc2OC17XG5kcml2ZXJzL25mYy90cmY3OTcwYS5jOjE3Njk6XHRzdHJ1Y3QgdHJmNzk3MGEgKnRyZiA9IG5mY19kaWdpdGFsX2dldF9kcnZkYXRhKGRkZXYpO1xuZHJpdmVycy9uZmMvdHJmNzk3MGEuYy0xNzcwLVx0aW50IHJldDtcbi0tXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jLTE4NDMtXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jOjE4NDQ6c3RhdGljIGludCB0cmY3OTcwYV90Z19saXN0ZW4oc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdTE2IHRpbWVvdXQsXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jOjE4NDU6XHRcdFx0ICAgICAgbmZjX2RpZ2l0YWxfY21kX2NvbXBsZXRlX3QgY2IsIHZvaWQgKmFyZylcbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmMtMTg0Ni17XG5kcml2ZXJzL25mYy90cmY3OTcwYS5jOjE4NDc6XHRjb25zdCBzdHJ1Y3QgdHJmNzk3MGEgKnRyZiA9IG5mY19kaWdpdGFsX2dldF9kcnZkYXRhKGRkZXYpO1xuZHJpdmVycy9uZmMvdHJmNzk3MGEuYy0xODQ4LVxuLS1cbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmMtMTg1NC1cbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmM6MTg1NTpzdGF0aWMgaW50IHRyZjc5NzBhX3RnX2xpc3Rlbl9tZChzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYzoxODU2Olx0XHRcdFx0IHUxNiB0aW1lb3V0LCBuZmNfZGlnaXRhbF9jbWRfY29tcGxldGVfdCBjYixcbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmMtMTg1Ny1cdFx0XHRcdCB2b2lkICphcmcpXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jLTE4NTgte1xuZHJpdmVycy9uZmMvdHJmNzk3MGEuYzoxODU5Olx0Y29uc3Qgc3RydWN0IHRyZjc5NzBhICp0cmYgPSBuZmNfZGlnaXRhbF9nZXRfZHJ2ZGF0YShkZGV2KTtcbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmMtMTg2MC1cdGludCByZXQ7XG4tLVxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYy0xODc3LVxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYzoxODc4OnN0YXRpYyBpbnQgdHJmNzk3MGFfdGdfZ2V0X3JmX3RlY2goc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdTggKnJmX3RlY2gpXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jLTE4Nzkte1xuZHJpdmVycy9uZmMvdHJmNzk3MGEuYzoxODgwOlx0Y29uc3Qgc3RydWN0IHRyZjc5NzBhICp0cmYgPSBuZmNfZGlnaXRhbF9nZXRfZHJ2ZGF0YShkZGV2KTtcbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmMtMTg4MS1cbi0tXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jLTE4ODktXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jOjE4OTA6c3RhdGljIHZvaWQgdHJmNzk3MGFfYWJvcnRfY21kKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYpXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jLTE4OTEte1xuZHJpdmVycy9uZmMvdHJmNzk3MGEuYzoxODkyOlx0c3RydWN0IHRyZjc5NzBhICp0cmYgPSBuZmNfZGlnaXRhbF9nZXRfZHJ2ZGF0YShkZGV2KTtcbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmMtMTg5My1cbi0tXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jLTE5MTYtXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jOjE5MTc6c3RhdGljIGNvbnN0IHN0cnVjdCBuZmNfZGlnaXRhbF9vcHMgdHJmNzk3MGFfbmZjX29wcyA9IHtcbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmMtMTkxOC1cdC5pbl9jb25maWd1cmVfaHdcdD0gdHJmNzk3MGFfaW5fY29uZmlndXJlX2h3LFxuLS1cbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmM9MjA0NT1zdGF0aWMgaW50IHRyZjc5NzBhX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpXG4tLVxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYy0yMTczLVxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYzoyMTc0Olx0dHJmLVx1MDAzZWRkZXYgPSBuZmNfZGlnaXRhbF9hbGxvY2F0ZV9kZXZpY2UoXHUwMDI2dHJmNzk3MGFfbmZjX29wcyxcbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmMtMjE3NS1cdFx0XHRcdFx0XHRUUkY3OTcwQV9TVVBQT1JURURfUFJPVE9DT0xTLFxuLS1cbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmMtMjE4NC1cbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmM6MjE4NTpcdG5mY19kaWdpdGFsX3NldF9wYXJlbnRfZGV2KHRyZi1cdTAwM2VkZGV2LCB0cmYtXHUwMDNlZGV2KTtcbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmM6MjE4NjpcdG5mY19kaWdpdGFsX3NldF9kcnZkYXRhKHRyZi1cdTAwM2VkZGV2LCB0cmYpO1xuZHJpdmVycy9uZmMvdHJmNzk3MGEuYy0yMTg3LVx0c3BpX3NldF9kcnZkYXRhKHNwaSwgdHJmKTtcbi0tXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jLTIxOTctXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jOjIxOTg6XHRyZXQgPSBuZmNfZGlnaXRhbF9yZWdpc3Rlcl9kZXZpY2UodHJmLVx1MDAzZWRkZXYpO1xuZHJpdmVycy9uZmMvdHJmNzk3MGEuYy0yMTk5LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmMtMjIwOS1lcnJfZnJlZV9kZGV2OlxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYzoyMjEwOlx0bmZjX2RpZ2l0YWxfZnJlZV9kZXZpY2UodHJmLVx1MDAzZWRkZXYpO1xuZHJpdmVycy9uZmMvdHJmNzk3MGEuYy0yMjExLWVycl9kaXNhYmxlX3ZkZGlvX3JlZ3VsYXRvcjpcbi0tXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYxNjUKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBORkMgRHJpdmVyIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgTkZDIGRyaXZlciBzcGFjZS4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBkaWZmZXJlbnQgd2F5cyB3ZSYjMzk7cmUgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgaGFyZHdhcmUuIFRoZXJlIGFyZSB0d28gaW1tZWRpYXRlIGRyaXZlcnMgdGhhdCBjYXRjaCBteSBleWU6IGBkcml2ZXJzL25mYy9uZmNzaW0uY2Agd2hpY2gsIGludGVyZXN0aW5nbHksIGlzIGEgKnNvZnR3YXJlKiBzaW11bGF0aW9uLCBzbyB0aGF0JiMzOTtzIGEgd2hvbGUgZGlmZmVyZW50IGF2ZW51ZSwgbGlrZWx5IGZvciB0ZXN0aW5nIHB1cnBvc2VzLiBUaGVuIHRoZXJlJiMzOTtzIGBkcml2ZXJzL25mYy9wb3J0MTAwLmNgLCB3aGljaCBpcyBhIG1vcmUgJiMzOTtyZWFsJiMzOTsgZHJpdmVyIGZvciBhIHNwZWNpZmljIFVTQiBkb25nbGUsIHRoZSBTb255IFJDLVMzODAgLyBQZWxpQ2EgVVNCLiBHaXZlbiB0aGF0IGl0JiMzOTtzIFVTQiwgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBleHBsb2l0YXRpb24gcG9zc2liaWxpdGllcyB2aWEgVVNCIFJhdywgVVNCIGdhZGdldCwgdmhjaSwgYW5kIHRoZSBldmVyLXByZXNlbnQgc3l6a2FsbGVyIGZ1enppbmcuCgpNeSBuZXh0IGxpbmUgb2YgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgVVNCIElEcyB3aXRoaW4gYHBvcnQxMDAuY2AgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2Ygc3VwcG9ydGVkIGRldmljZXMgYW5kLCBpbXBvcnRhbnRseSwgc2VlIGhvdyBzeXprYWxsZXIgaXMgaW50ZWdyYXRlZCBmb3IgTkZDIHRlc3RpbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBvdmVybGFwIGhlcmUuIERvZXMgc3l6a2FsbGVyIGV2ZW4gc3VwcG9ydCBORkMgZGlyZWN0bHk/IE1heWJlIHRoZXJlJiMzOTtzIGEgc3l6X3VzYl9jb25uZWN0IG9yIHNvbWUgdXNhZ2Ugb2YgTkZDIG5ldGxpbmsgb3Igc29ja2V0cyBpbiB0aGUgZnV6emluZyBoYXJuZXNzZXMuIEl0JiMzOTtzIGEgcXVpY2sgbG9vayB0byBhc2NlcnRhaW4gd2hldGhlciBgcG9ydDEwMC5jYCBpcyBlbXVsYXRlZCB2aWEgVVNCLiBJdCBzZWVtcyBJIHdpbGwgaGF2ZSB0byBsb29rIGludG8gc3l6a2FsbGVyJiMzOTtzIE5GQyBzdXBwb3J0IGFuZCBwb3J0MTAwIFVTQiBlbXVsYXRpb24gbmV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cG9ydDEwMCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmZjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA2NDQgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmRyaXZlcnMvbmZjL01ha2VmaWxlPTExPW9iai0kKENPTkZJR19ORkNfU0lNKVx0XHQmIzQzOz0gbmZjc2ltLm9cbmRyaXZlcnMvbmZjL01ha2VmaWxlOjEyOm9iai0kKENPTkZJR19ORkNfUE9SVDEwMClcdCYjNDM7PSBwb3J0MTAwLm9cbmRyaXZlcnMvbmZjL01ha2VmaWxlLTEzLW9iai0kKENPTkZJR19ORkNfTVJWTClcdFx0JiM0Mzs9IG5mY21ydmwvXG4tLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTI4LVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjI5Oi8qIFN0YW5kYXJkIHBvcnQxMDAgZnJhbWUgZGVmaW5pdGlvbnMgKi9cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzozMDojZGVmaW5lIFBPUlQxMDBfRlJBTUVfSEVBREVSX0xFTiAoc2l6ZW9mKHN0cnVjdCBwb3J0MTAwX2ZyYW1lKSBcXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTMxLVx0XHRcdFx0ICAmIzQzOyAyKSAvKiBkYXRhWzBdIENDLCBkYXRhWzFdIFNDQyAqL1xuLS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0zMy1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzozNDojZGVmaW5lIFBPUlQxMDBfQ09NTV9SRl9IRUFEX01BWF9MRU4gKHNpemVvZihzdHJ1Y3QgcG9ydDEwMF90Z19jb21tX3JmX2NtZCkpXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMzUtXG4tLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jPTQ0PXN0YXRpYyB1OCBhY2tfZnJhbWVbUE9SVDEwMF9GUkFNRV9BQ0tfU0laRV0gPSB7XG4tLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTkxLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjkyOnN0cnVjdCBwb3J0MTAwO1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTkzLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjk0OnR5cGVkZWYgdm9pZCAoKnBvcnQxMDBfc2VuZF9hc3luY19jb21wbGV0ZV90KShzdHJ1Y3QgcG9ydDEwMCAqZGV2LCB2b2lkICphcmcsXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtOTUtXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpyZXNwKTtcbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTA1LSAqL1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjEwNjpzdHJ1Y3QgcG9ydDEwMF9pbl9yZl9zZXR0aW5nIHtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMDctXHR1OCBpbl9zZW5kX3NldF9udW1iZXI7XG4tLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTExNy1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMTg6c3RhdGljIGNvbnN0IHN0cnVjdCBwb3J0MTAwX2luX3JmX3NldHRpbmcgaW5fcmZfc2V0dGluZ3NbXSA9IHtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMTktXHRbTkZDX0RJR0lUQUxfUkZfVEVDSF8yMTJGXSA9IHtcbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTQ3LS8qKlxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjE0ODogKiBzdHJ1Y3QgcG9ydDEwMF90Z19yZl9zZXR0aW5nIC0gU2V0dGluZyBzZXRzIHN0cnVjdHVyZSBmb3IgdGdfc2V0X3JmIGNvbW1hbmRcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xNDktICpcbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTU3LSAqL1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjE1ODpzdHJ1Y3QgcG9ydDEwMF90Z19yZl9zZXR0aW5nIHtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xNTktXHR1OCB0Z19zZXRfbnVtYmVyO1xuLS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xNjYtXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTY3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcG9ydDEwMF90Z19yZl9zZXR0aW5nIHRnX3JmX3NldHRpbmdzW10gPSB7XG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTY4LVx0W05GQ19ESUdJVEFMX1JGX1RFQ0hfMTA2QV0gPSB7XG4tLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTIxNC1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoyMTU6c3RydWN0IHBvcnQxMDBfcHJvdG9jb2wge1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTIxNi1cdHU4IG51bWJlcjtcbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMjE5LVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjIyMDpzdGF0aWMgY29uc3Qgc3RydWN0IHBvcnQxMDBfcHJvdG9jb2xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0yMjEtaW5fcHJvdG9jb2xzW11bUE9SVDEwMF9JTl9NQVhfTlVNX1BST1RPQ09MUyAmIzQzOyAxXSA9IHtcbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMzkzLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjM5NDpzdGF0aWMgY29uc3Qgc3RydWN0IHBvcnQxMDBfcHJvdG9jb2xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0zOTUtdGdfcHJvdG9jb2xzW11bUE9SVDEwMF9UR19NQVhfTlVNX1BST1RPQ09MUyAmIzQzOyAxXSA9IHtcbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNDM4LVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjQzOTpzdHJ1Y3QgcG9ydDEwMCB7XG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNDQwLVx0c3RydWN0IG5mY19kaWdpdGFsX2RldiAqbmZjX2RpZ2l0YWxfZGV2O1xuLS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy00NTEtXHQvKiBUaGlzIG11dGV4IHByb3RlY3RzIHRoZSBvdXRfdXJiIGFuZCBhdm9pZHMgdG8gc3VibWl0IGEgbmV3IGNvbW1hbmRcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo0NTI6XHQgKiB0aHJvdWdoIHBvcnQxMDBfc2VuZF9mcmFtZV9hc3luYygpIHdoaWxlIHRoZSBwcmV2aW91cyBvbmUgaXMgYmVpbmdcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo0NTM6XHQgKiBjYW5jZWxlZCB0aHJvdWdoIHBvcnQxMDBfYWJvcnRfY21kKCkuXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNDU0LVx0ICovXG4tLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTQ2My1cdCAqL1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjQ2NDpcdHN0cnVjdCBwb3J0MTAwX2NtZCAqY21kO1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTQ2NS1cbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNDY5LVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjQ3MDpzdHJ1Y3QgcG9ydDEwMF9jbWQge1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTQ3MS1cdHU4IGNvZGU7XG4tLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTQ3NS1cdGludCByZXNwX2xlbjtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo0NzY6XHRwb3J0MTAwX3NlbmRfYXN5bmNfY29tcGxldGVfdCAgY29tcGxldGVfY2I7XG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNDc3LVx0dm9pZCAqY29tcGxldGVfY2JfY29udGV4dDtcbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNDc5LVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjQ4MDpzdHJ1Y3QgcG9ydDEwMF9mcmFtZSB7XG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNDgxLVx0dTggcHJlYW1ibGU7XG4tLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTQ4OC1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo0ODk6c3RydWN0IHBvcnQxMDBfYWNrX2ZyYW1lIHtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy00OTAtXHR1OCBwcmVhbWJsZTtcbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNDk1LVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjQ5NjpzdHJ1Y3QgcG9ydDEwMF9jYl9hcmcge1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTQ5Ny1cdG5mY19kaWdpdGFsX2NtZF9jb21wbGV0ZV90IGNvbXBsZXRlX2NiO1xuLS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy01MDEtXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6NTAyOnN0cnVjdCBwb3J0MTAwX3RnX2NvbW1fcmZfY21kIHtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy01MDMtXHRfX2xlMTYgZ3VhcmRfdGltZTtcbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNTEzLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjUxNDpzdHJ1Y3QgcG9ydDEwMF90Z19jb21tX3JmX3JlcyB7XG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNTE1LVx0dTggY29tbV90eXBlO1xuLS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy01MjItLyogVGhlIHJ1bGU6IHZhbHVlICYjNDM7IGNoZWNrc3VtID0gMCAqL1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjUyMzpzdGF0aWMgaW5saW5lIHU4IHBvcnQxMDBfY2hlY2tzdW0odTE2IHZhbHVlKVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTUyNC17XG4tLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTUyOC0vKiBUaGUgcnVsZTogc3VtKGRhdGEgZWxlbWVudHMpICYjNDM7IGNoZWNrc3VtID0gMCAqL1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjUyOTpzdGF0aWMgdTggcG9ydDEwMF9kYXRhX2NoZWNrc3VtKGNvbnN0IHU4ICpkYXRhLCBpbnQgZGF0YWxlbilcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy01MzAte1xuLS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy01MzYtXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6NTM3Olx0cmV0dXJuIHBvcnQxMDBfY2hlY2tzdW0oc3VtKTtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy01MzgtfVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTUzOS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo1NDA6c3RhdGljIHZvaWQgcG9ydDEwMF90eF9mcmFtZV9pbml0KHZvaWQgKl9mcmFtZSwgdTggY21kX2NvZGUpXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNTQxLXtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo1NDI6XHRzdHJ1Y3QgcG9ydDEwMF9mcmFtZSAqZnJhbWUgPSBfZnJhbWU7XG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNTQzLVxuLS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy01NTEtXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6NTUyOnN0YXRpYyB2b2lkIHBvcnQxMDBfdHhfZnJhbWVfZmluaXNoKHZvaWQgKl9mcmFtZSlcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy01NTMte1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjU1NDpcdHN0cnVjdCBwb3J0MTAwX2ZyYW1lICpmcmFtZSA9IF9mcmFtZTtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy01NTUtXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6NTU2Olx0ZnJhbWUtXHUwMDNlZGF0YWxlbl9jaGVja3N1bSA9IHBvcnQxMDBfY2hlY2tzdW0obGUxNl90b19jcHUoZnJhbWUtXHUwMDNlZGF0YWxlbikpO1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTU1Ny1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy01NTgtXHRQT1JUMTAwX0ZSQU1FX0NIRUNLU1VNKGZyYW1lKSA9XG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6NTU5Olx0XHRwb3J0MTAwX2RhdGFfY2hlY2tzdW0oZnJhbWUtXHUwMDNlZGF0YSwgbGUxNl90b19jcHUoZnJhbWUtXHUwMDNlZGF0YWxlbikpO1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTU2MC1cbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNTYzLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjU2NDpzdGF0aWMgdm9pZCBwb3J0MTAwX3R4X3VwZGF0ZV9wYXlsb2FkX2xlbih2b2lkICpfZnJhbWUsIGludCBsZW4pXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNTY1LXtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo1NjY6XHRzdHJ1Y3QgcG9ydDEwMF9mcmFtZSAqZnJhbWUgPSBfZnJhbWU7XG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNTY3LVxuLS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy01NzAtXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6NTcxOnN0YXRpYyBib29sIHBvcnQxMDBfcnhfZnJhbWVfaXNfdmFsaWQoY29uc3Qgdm9pZCAqX2ZyYW1lKVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTU3Mi17XG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNTczLVx0dTggY2hlY2tzdW07XG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6NTc0Olx0Y29uc3Qgc3RydWN0IHBvcnQxMDBfZnJhbWUgKmZyYW1lID0gX2ZyYW1lO1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTU3NS1cbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNTc5LVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjU4MDpcdGNoZWNrc3VtID0gcG9ydDEwMF9jaGVja3N1bShsZTE2X3RvX2NwdShmcmFtZS1cdTAwM2VkYXRhbGVuKSk7XG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNTgxLVx0aWYgKGNoZWNrc3VtICE9IGZyYW1lLVx1MDAzZWRhdGFsZW5fY2hlY2tzdW0pXG4tLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTU4My1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo1ODQ6XHRjaGVja3N1bSA9IHBvcnQxMDBfZGF0YV9jaGVja3N1bShmcmFtZS1cdTAwM2VkYXRhLFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTU4NS1cdFx0XHRcdFx0IGxlMTZfdG9fY3B1KGZyYW1lLVx1MDAzZWRhdGFsZW4pKTtcbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNTkxLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjU5MjpzdGF0aWMgYm9vbCBwb3J0MTAwX3J4X2ZyYW1lX2lzX2Fjayhjb25zdCBzdHJ1Y3QgcG9ydDEwMF9hY2tfZnJhbWUgKmZyYW1lKVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTU5My17XG4tLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTU5Ny1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo1OTg6c3RhdGljIGlubGluZSBpbnQgcG9ydDEwMF9yeF9mcmFtZV9zaXplKGNvbnN0IHZvaWQgKmZyYW1lKVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTU5OS17XG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6NjAwOlx0Y29uc3Qgc3RydWN0IHBvcnQxMDBfZnJhbWUgKmYgPSBmcmFtZTtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy02MDEtXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6NjAyOlx0cmV0dXJuIHNpemVvZihzdHJ1Y3QgcG9ydDEwMF9mcmFtZSkgJiM0MzsgbGUxNl90b19jcHUoZi1cdTAwM2VkYXRhbGVuKSAmIzQzO1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTYwMy1cdCAgICAgICBQT1JUMTAwX0ZSQU1FX1RBSUxfTEVOO1xuLS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy02MDUtXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6NjA2OnN0YXRpYyBib29sIHBvcnQxMDBfcnhfZnJhbWVfaXNfY21kX3Jlc3BvbnNlKGNvbnN0IHN0cnVjdCBwb3J0MTAwICpkZXYsXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNjA3LVx0XHRcdFx0XHQgICAgIGNvbnN0IHZvaWQgKmZyYW1lKVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTYwOC17XG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6NjA5Olx0Y29uc3Qgc3RydWN0IHBvcnQxMDBfZnJhbWUgKmYgPSBmcmFtZTtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy02MTAtXG4tLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTYxMy1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo2MTQ6c3RhdGljIHZvaWQgcG9ydDEwMF9yZWN2X3Jlc3BvbnNlKHN0cnVjdCB1cmIgKnVyYilcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy02MTUte1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjYxNjpcdHN0cnVjdCBwb3J0MTAwICpkZXYgPSB1cmItXHUwMDNlY29udGV4dDtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo2MTc6XHRzdHJ1Y3QgcG9ydDEwMF9jbWQgKmNtZCA9IGRldi1cdTAwM2VjbWQ7XG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNjE4LVx0dTggKmluX2ZyYW1lO1xuLS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy02MzgtXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6NjM5Olx0aWYgKCFwb3J0MTAwX3J4X2ZyYW1lX2lzX3ZhbGlkKGluX2ZyYW1lKSkge1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTY0MC1cdFx0bmZjX2VycihcdTAwMjZkZXYtXHUwMDNlaW50ZXJmYWNlLVx1MDAzZWRldiwgXCYjMzQ7UmVjZWl2ZWQgYW4gaW52YWxpZCBmcmFtZVxcblwmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTY0NS1cdHByaW50X2hleF9kdW1wX2RlYnVnKFwmIzM0O1BPUlQxMDAgUlg6IFwmIzM0OywgRFVNUF9QUkVGSVhfTk9ORSwgMTYsIDEsIGluX2ZyYW1lLFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjY0NjpcdFx0XHQgICAgIHBvcnQxMDBfcnhfZnJhbWVfc2l6ZShpbl9mcmFtZSksIGZhbHNlKTtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy02NDctXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6NjQ4Olx0aWYgKCFwb3J0MTAwX3J4X2ZyYW1lX2lzX2NtZF9yZXNwb25zZShkZXYsIGluX2ZyYW1lKSkge1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTY0OS1cdFx0bmZjX2VycihcdTAwMjZkZXYtXHUwMDNlaW50ZXJmYWNlLVx1MDAzZWRldixcbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNjU4LVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjY1OTpzdGF0aWMgaW50IHBvcnQxMDBfc3VibWl0X3VyYl9mb3JfcmVzcG9uc2UoY29uc3Qgc3RydWN0IHBvcnQxMDAgKmRldixcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy02NjAtXHRcdFx0XHRcdCAgIGdmcF90IGZsYWdzKVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTY2MS17XG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6NjYyOlx0ZGV2LVx1MDAzZWluX3VyYi1cdTAwM2Vjb21wbGV0ZSA9IHBvcnQxMDBfcmVjdl9yZXNwb25zZTtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy02NjMtXG4tLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTY2Ni1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo2Njc6c3RhdGljIHZvaWQgcG9ydDEwMF9yZWN2X2FjayhzdHJ1Y3QgdXJiICp1cmIpXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNjY4LXtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo2Njk6XHRzdHJ1Y3QgcG9ydDEwMCAqZGV2ID0gdXJiLVx1MDAzZWNvbnRleHQ7XG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6NjcwOlx0c3RydWN0IHBvcnQxMDBfY21kICpjbWQgPSBkZXYtXHUwMDNlY21kO1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjY3MTpcdGNvbnN0IHN0cnVjdCBwb3J0MTAwX2Fja19mcmFtZSAqaW5fZnJhbWU7XG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNjcyLVx0aW50IHJjO1xuLS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy02OTItXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6NjkzOlx0aWYgKCFwb3J0MTAwX3J4X2ZyYW1lX2lzX2Fjayhpbl9mcmFtZSkpIHtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy02OTQtXHRcdG5mY19lcnIoXHUwMDI2ZGV2LVx1MDAzZWludGVyZmFjZS1cdTAwM2VkZXYsIFwmIzM0O1JlY2VpdmVkIGFuIGludmFsaWQgYWNrXFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNjk4LVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjY5OTpcdHJjID0gcG9ydDEwMF9zdWJtaXRfdXJiX2Zvcl9yZXNwb25zZShkZXYsIEdGUF9BVE9NSUMpO1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTcwMC1cdGlmIChyYykge1xuLS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy03MTItXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6NzEzOnN0YXRpYyBpbnQgcG9ydDEwMF9zdWJtaXRfdXJiX2Zvcl9hY2soY29uc3Qgc3RydWN0IHBvcnQxMDAgKmRldiwgZ2ZwX3QgZmxhZ3MpXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNzE0LXtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo3MTU6XHRkZXYtXHUwMDNlaW5fdXJiLVx1MDAzZWNvbXBsZXRlID0gcG9ydDEwMF9yZWN2X2FjaztcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy03MTYtXG4tLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTcxOS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo3MjA6c3RhdGljIGludCBwb3J0MTAwX3NlbmRfYWNrKHN0cnVjdCBwb3J0MTAwICpkZXYpXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNzIxLXtcbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNzQ0LVx0XHQgKiBzdWNjZXNzZnVsbHkgc3VibWl0dGVkLiBJdCB3aWxsIGJlIHJlc2V0IGJ5IHRoZSBvdXRcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo3NDU6XHRcdCAqIFVSQiBjb21wbGV0aW9uIGNhbGxiYWNrIHBvcnQxMDBfc2VuZF9jb21wbGV0ZSgpLlxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTc0Ni1cdFx0ICovXG4tLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTc1Ny1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo3NTg6c3RhdGljIGludCBwb3J0MTAwX3NlbmRfZnJhbWVfYXN5bmMoc3RydWN0IHBvcnQxMDAgKmRldixcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy03NTktXHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKm91dCxcbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNzg2LVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjc4NzpcdHJjID0gcG9ydDEwMF9zdWJtaXRfdXJiX2Zvcl9hY2soZGV2LCBHRlBfS0VSTkVMKTtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy03ODgtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTc5Ni1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo3OTc6c3RhdGljIHZvaWQgcG9ydDEwMF9idWlsZF9jbWRfZnJhbWUoc3RydWN0IHBvcnQxMDAgKmRldiwgdTggY21kX2NvZGUsXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNzk4LVx0XHRcdFx0ICAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTgwNS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo4MDY6XHRwb3J0MTAwX3R4X2ZyYW1lX2luaXQoc2tiLVx1MDAzZWRhdGEsIGNtZF9jb2RlKTtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo4MDc6XHRwb3J0MTAwX3R4X3VwZGF0ZV9wYXlsb2FkX2xlbihza2ItXHUwMDNlZGF0YSwgcGF5bG9hZF9sZW4pO1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjgwODpcdHBvcnQxMDBfdHhfZnJhbWVfZmluaXNoKHNrYi1cdTAwM2VkYXRhKTtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy04MDktfVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTgxMC1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo4MTE6c3RhdGljIHZvaWQgcG9ydDEwMF9zZW5kX2FzeW5jX2NvbXBsZXRlKHN0cnVjdCBwb3J0MTAwICpkZXYpXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtODEyLXtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo4MTM6XHRzdHJ1Y3QgcG9ydDEwMF9jbWQgKmNtZCA9IGRldi1cdTAwM2VjbWQ7XG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtODE0LVx0aW50IHN0YXR1cyA9IGNtZC1cdTAwM2VzdGF0dXM7XG4tLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTgyOS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo4MzA6XHRza2JfcHV0KHJlc3AsIHBvcnQxMDBfcnhfZnJhbWVfc2l6ZShyZXNwLVx1MDAzZWRhdGEpKTtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy04MzEtXHRza2JfcHVsbChyZXNwLCBQT1JUMTAwX0ZSQU1FX0hFQURFUl9MRU4pO1xuLS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy04MzktXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6ODQwOnN0YXRpYyBpbnQgcG9ydDEwMF9zZW5kX2NtZF9hc3luYyhzdHJ1Y3QgcG9ydDEwMCAqZGV2LCB1OCBjbWRfY29kZSxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy04NDEtXHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqcmVxLFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjg0MjpcdFx0XHRcdHBvcnQxMDBfc2VuZF9hc3luY19jb21wbGV0ZV90IGNvbXBsZXRlX2NiLFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTg0My1cdFx0XHRcdHZvaWQgKmNvbXBsZXRlX2NiX2NvbnRleHQpXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtODQ0LXtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo4NDU6XHRzdHJ1Y3QgcG9ydDEwMF9jbWQgKmNtZDtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy04NDYtXHRzdHJ1Y3Qgc2tfYnVmZiAqcmVzcDtcbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtODc0LVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjg3NTpcdHBvcnQxMDBfYnVpbGRfY21kX2ZyYW1lKGRldiwgY21kX2NvZGUsIHJlcSk7XG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtODc2LVxuLS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy04NzgtXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6ODc5Olx0cmMgPSBwb3J0MTAwX3NlbmRfZnJhbWVfYXN5bmMoZGV2LCByZXEsIHJlc3AsIHJlc3BfbGVuKTtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy04ODAtXHRpZiAocmMpIHtcbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtODg4LVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjg4OTpzdHJ1Y3QgcG9ydDEwMF9zeW5jX2NtZF9yZXNwb25zZSB7XG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtODkwLVx0c3RydWN0IHNrX2J1ZmYgKnJlc3A7XG4tLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTg5My1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo4OTQ6c3RhdGljIHZvaWQgcG9ydDEwMF93cV9jbWRfY29tcGxldGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTg5NS17XG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6ODk2Olx0c3RydWN0IHBvcnQxMDAgKmRldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcG9ydDEwMCxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy04OTctXHRcdFx0XHRcdCAgIGNtZF9jb21wbGV0ZV93b3JrKTtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy04OTgtXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6ODk5Olx0cG9ydDEwMF9zZW5kX2FzeW5jX2NvbXBsZXRlKGRldik7XG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtOTAwLX1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy05MDEtXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6OTAyOnN0YXRpYyB2b2lkIHBvcnQxMDBfc2VuZF9zeW5jX2NvbXBsZXRlKHN0cnVjdCBwb3J0MTAwICpkZXYsIHZvaWQgKl9hcmcsXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtOTAzLVx0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnJlc3ApXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtOTA0LXtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo5MDU6XHRzdHJ1Y3QgcG9ydDEwMF9zeW5jX2NtZF9yZXNwb25zZSAqYXJnID0gX2FyZztcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy05MDYtXG4tLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTkxMC1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo5MTE6c3RhdGljIHN0cnVjdCBza19idWZmICpwb3J0MTAwX3NlbmRfY21kX3N5bmMoc3RydWN0IHBvcnQxMDAgKmRldiwgdTggY21kX2NvZGUsXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtOTEyLVx0XHRcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpyZXEpXG4tLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTkxNC1cdGludCByYztcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo5MTU6XHRzdHJ1Y3QgcG9ydDEwMF9zeW5jX2NtZF9yZXNwb25zZSBhcmc7XG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtOTE2LVxuLS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy05MTgtXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6OTE5Olx0cmMgPSBwb3J0MTAwX3NlbmRfY21kX2FzeW5jKGRldiwgY21kX2NvZGUsIHJlcSxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo5MjA6XHRcdFx0XHQgICAgcG9ydDEwMF9zZW5kX3N5bmNfY29tcGxldGUsIFx1MDAyNmFyZyk7XG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtOTIxLVx0aWYgKHJjKSB7XG4tLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTkzMC1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo5MzE6c3RhdGljIHZvaWQgcG9ydDEwMF9zZW5kX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy05MzIte1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjkzMzpcdHN0cnVjdCBwb3J0MTAwICpkZXYgPSB1cmItXHUwMDNlY29udGV4dDtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy05MzQtXG4tLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTk1NC1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo5NTU6c3RhdGljIHZvaWQgcG9ydDEwMF9hYm9ydF9jbWQoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldilcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy05NTYte1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjk1NzpcdHN0cnVjdCBwb3J0MTAwICpkZXYgPSBuZmNfZGlnaXRhbF9nZXRfZHJ2ZGF0YShkZGV2KTtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy05NTgtXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtOTU5LVx0LyogQW4gYWNrIHdpbGwgY2FuY2VsIHRoZSBsYXN0IGlzc3VlZCBjb21tYW5kICovXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6OTYwOlx0cG9ydDEwMF9zZW5kX2FjayhkZXYpO1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTk2MS1cbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtOTY1LVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjk2NjpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnBvcnQxMDBfYWxsb2Nfc2tiKGNvbnN0IHN0cnVjdCBwb3J0MTAwICpkZXYsIHVuc2lnbmVkIGludCBzaXplKVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTk2Ny17XG4tLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTk3Ny1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo5Nzg6c3RhdGljIGludCBwb3J0MTAwX3NldF9jb21tYW5kX3R5cGUoc3RydWN0IHBvcnQxMDAgKmRldiwgdTggY29tbWFuZF90eXBlKVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTk3OS17XG4tLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTk4My1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo5ODQ6XHRza2IgPSBwb3J0MTAwX2FsbG9jX3NrYihkZXYsIDEpO1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTk4NS1cdGlmICghc2tiKVxuLS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy05ODktXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6OTkwOlx0cmVzcCA9IHBvcnQxMDBfc2VuZF9jbWRfc3luYyhkZXYsIFBPUlQxMDBfQ01EX1NFVF9DT01NQU5EX1RZUEUsIHNrYik7XG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtOTkxLVx0aWYgKElTX0VSUihyZXNwKSlcbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTAwMC1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMDAxOnN0YXRpYyB1NjQgcG9ydDEwMF9nZXRfY29tbWFuZF90eXBlX21hc2soc3RydWN0IHBvcnQxMDAgKmRldilcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMDAyLXtcbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTAwNi1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMDA3Olx0c2tiID0gcG9ydDEwMF9hbGxvY19za2IoZGV2LCAwKTtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMDA4LVx0aWYgKCFza2IpXG4tLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEwMTAtXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTAxMTpcdHJlc3AgPSBwb3J0MTAwX3NlbmRfY21kX3N5bmMoZGV2LCBQT1JUMTAwX0NNRF9HRVRfQ09NTUFORF9UWVBFLCBza2IpO1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEwMTItXHRpZiAoSVNfRVJSKHJlc3ApKVxuLS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMDI0LVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjEwMjU6c3RhdGljIHUxNiBwb3J0MTAwX2dldF9maXJtd2FyZV92ZXJzaW9uKHN0cnVjdCBwb3J0MTAwICpkZXYpXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTAyNi17XG4tLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEwMzAtXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTAzMTpcdHNrYiA9IHBvcnQxMDBfYWxsb2Nfc2tiKGRldiwgMCk7XG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTAzMi1cdGlmICghc2tiKVxuLS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMDM0LVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjEwMzU6XHRyZXNwID0gcG9ydDEwMF9zZW5kX2NtZF9zeW5jKGRldiwgUE9SVDEwMF9DTURfR0VUX0ZJUk1XQVJFX1ZFUlNJT04sXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTAzNi1cdFx0XHRcdCAgICAgc2tiKTtcbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTA0Ni1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMDQ3OnN0YXRpYyBpbnQgcG9ydDEwMF9zd2l0Y2hfcmYoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgYm9vbCBvbilcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMDQ4LXtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMDQ5Olx0c3RydWN0IHBvcnQxMDAgKmRldiA9IG5mY19kaWdpdGFsX2dldF9kcnZkYXRhKGRkZXYpO1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEwNTAtXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqcmVzcDtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMDUxLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjEwNTI6XHRza2IgPSBwb3J0MTAwX2FsbG9jX3NrYihkZXYsIDEpO1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEwNTMtXHRpZiAoIXNrYilcbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTA1OS1cdGlmICghb24pXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTA2MDpcdFx0cG9ydDEwMF9hYm9ydF9jbWQoZGRldik7XG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTA2MS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMDYyOlx0cmVzcCA9IHBvcnQxMDBfc2VuZF9jbWRfc3luYyhkZXYsIFBPUlQxMDBfQ01EX1NXSVRDSF9SRiwgc2tiKTtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMDYzLVxuLS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMDcxLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjEwNzI6c3RhdGljIGludCBwb3J0MTAwX2luX3NldF9yZihzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCB1OCByZilcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMDczLXtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMDc0Olx0c3RydWN0IHBvcnQxMDAgKmRldiA9IG5mY19kaWdpdGFsX2dldF9kcnZkYXRhKGRkZXYpO1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEwNzUtXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuLS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMDgxLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjEwODI6XHRza2IgPSBwb3J0MTAwX2FsbG9jX3NrYihkZXYsIHNpemVvZihzdHJ1Y3QgcG9ydDEwMF9pbl9yZl9zZXR0aW5nKSk7XG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTA4My1cdGlmICghc2tiKVxuLS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMDg2LVx0c2tiX3B1dF9kYXRhKHNrYiwgXHUwMDI2aW5fcmZfc2V0dGluZ3NbcmZdLFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjEwODc6XHRcdCAgICAgc2l6ZW9mKHN0cnVjdCBwb3J0MTAwX2luX3JmX3NldHRpbmcpKTtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMDg4LVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjEwODk6XHRyZXNwID0gcG9ydDEwMF9zZW5kX2NtZF9zeW5jKGRldiwgUE9SVDEwMF9DTURfSU5fU0VUX1JGLCBza2IpO1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEwOTAtXG4tLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTExMDAtXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTEwMTpzdGF0aWMgaW50IHBvcnQxMDBfaW5fc2V0X2ZyYW1pbmcoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgaW50IHBhcmFtKVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTExMDIte1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjExMDM6XHRzdHJ1Y3QgcG9ydDEwMCAqZGV2ID0gbmZjX2RpZ2l0YWxfZ2V0X2RydmRhdGEoZGRldik7XG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTEwNDpcdGNvbnN0IHN0cnVjdCBwb3J0MTAwX3Byb3RvY29sICpwcm90b2NvbHM7XG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTEwNS1cdHN0cnVjdCBza19idWZmICpza2I7XG4tLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTExMjItXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTEyMzpcdHNpemUgPSBzaXplb2Yoc3RydWN0IHBvcnQxMDBfcHJvdG9jb2wpICogbnVtX3Byb3RvY29scztcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMTI0LVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjExMjU6XHRza2IgPSBwb3J0MTAwX2FsbG9jX3NrYihkZXYsIHNpemUpO1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTExMjYtXHRpZiAoIXNrYilcbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTEzMC1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMTMxOlx0cmVzcCA9IHBvcnQxMDBfc2VuZF9jbWRfc3luYyhkZXYsIFBPUlQxMDBfQ01EX0lOX1NFVF9QUk9UT0NPTCwgc2tiKTtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMTMyLVxuLS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMTQyLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjExNDM6c3RhdGljIGludCBwb3J0MTAwX2luX2NvbmZpZ3VyZV9odyhzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCBpbnQgdHlwZSxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMTQ0LVx0XHRcdFx0ICAgaW50IHBhcmFtKVxuLS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMTQ2LVx0aWYgKHR5cGUgPT0gTkZDX0RJR0lUQUxfQ09ORklHX1JGX1RFQ0gpXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTE0NzpcdFx0cmV0dXJuIHBvcnQxMDBfaW5fc2V0X3JmKGRkZXYsIHBhcmFtKTtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMTQ4LVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTExNDktXHRpZiAodHlwZSA9PSBORkNfRElHSVRBTF9DT05GSUdfRlJBTUlORylcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMTUwOlx0XHRyZXR1cm4gcG9ydDEwMF9pbl9zZXRfZnJhbWluZyhkZGV2LCBwYXJhbSk7XG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTE1MS1cbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTE1NC1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMTU1OnN0YXRpYyB2b2lkIHBvcnQxMDBfaW5fY29tbV9yZl9jb21wbGV0ZShzdHJ1Y3QgcG9ydDEwMCAqZGV2LCB2b2lkICphcmcsXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTE1Ni1cdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqcmVzcClcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMTU3LXtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMTU4Olx0Y29uc3Qgc3RydWN0IHBvcnQxMDBfY2JfYXJnICpjYl9hcmcgPSBhcmc7XG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTE1OS1cdG5mY19kaWdpdGFsX2NtZF9jb21wbGV0ZV90IGNiID0gY2JfYXJnLVx1MDAzZWNvbXBsZXRlX2NiO1xuLS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMjA1LVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjEyMDY6c3RhdGljIGludCBwb3J0MTAwX2luX3NlbmRfY21kKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTIwNy1cdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IF90aW1lb3V0LFxuLS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMjA5LXtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMjEwOlx0c3RydWN0IHBvcnQxMDAgKmRldiA9IG5mY19kaWdpdGFsX2dldF9kcnZkYXRhKGRkZXYpO1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjEyMTE6XHRzdHJ1Y3QgcG9ydDEwMF9jYl9hcmcgKmNiX2FyZztcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMjEyLVx0X19sZTE2IHRpbWVvdXQ7XG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTIxMy1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMjE0Olx0Y2JfYXJnID0ga3phbGxvY19vYmooc3RydWN0IHBvcnQxMDBfY2JfYXJnKTtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMjE1LVx0aWYgKCFjYl9hcmcpXG4tLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEyMjQtXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTIyNTpcdHJldHVybiBwb3J0MTAwX3NlbmRfY21kX2FzeW5jKGRldiwgUE9SVDEwMF9DTURfSU5fQ09NTV9SRiwgc2tiLFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjEyMjY6XHRcdFx0XHQgICAgICBwb3J0MTAwX2luX2NvbW1fcmZfY29tcGxldGUsIGNiX2FyZyk7XG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTIyNy19XG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTIyOC1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMjI5OnN0YXRpYyBpbnQgcG9ydDEwMF90Z19zZXRfcmYoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdTggcmYpXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTIzMC17XG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTIzMTpcdHN0cnVjdCBwb3J0MTAwICpkZXYgPSBuZmNfZGlnaXRhbF9nZXRfZHJ2ZGF0YShkZGV2KTtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMjMyLVx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTIzOC1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMjM5Olx0c2tiID0gcG9ydDEwMF9hbGxvY19za2IoZGV2LCBzaXplb2Yoc3RydWN0IHBvcnQxMDBfdGdfcmZfc2V0dGluZykpO1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEyNDAtXHRpZiAoIXNrYilcbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTI0My1cdHNrYl9wdXRfZGF0YShza2IsIFx1MDAyNnRnX3JmX3NldHRpbmdzW3JmXSxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMjQ0Olx0XHQgICAgIHNpemVvZihzdHJ1Y3QgcG9ydDEwMF90Z19yZl9zZXR0aW5nKSk7XG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTI0NS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMjQ2Olx0cmVzcCA9IHBvcnQxMDBfc2VuZF9jbWRfc3luYyhkZXYsIFBPUlQxMDBfQ01EX1RHX1NFVF9SRiwgc2tiKTtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMjQ3LVxuLS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMjU3LVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjEyNTg6c3RhdGljIGludCBwb3J0MTAwX3RnX3NldF9mcmFtaW5nKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIGludCBwYXJhbSlcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMjU5LXtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMjYwOlx0c3RydWN0IHBvcnQxMDAgKmRldiA9IG5mY19kaWdpdGFsX2dldF9kcnZkYXRhKGRkZXYpO1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjEyNjE6XHRjb25zdCBzdHJ1Y3QgcG9ydDEwMF9wcm90b2NvbCAqcHJvdG9jb2xzO1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEyNjItXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuLS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMjc5LVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjEyODA6XHRzaXplID0gc2l6ZW9mKHN0cnVjdCBwb3J0MTAwX3Byb3RvY29sKSAqIG51bV9wcm90b2NvbHM7XG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTI4MS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMjgyOlx0c2tiID0gcG9ydDEwMF9hbGxvY19za2IoZGV2LCBzaXplKTtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMjgzLVx0aWYgKCFza2IpXG4tLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEyODctXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTI4ODpcdHJlc3AgPSBwb3J0MTAwX3NlbmRfY21kX3N5bmMoZGV2LCBQT1JUMTAwX0NNRF9UR19TRVRfUFJPVE9DT0wsIHNrYik7XG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTI4OS1cbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTI5OS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMzAwOnN0YXRpYyBpbnQgcG9ydDEwMF90Z19jb25maWd1cmVfaHcoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgaW50IHR5cGUsXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTMwMS1cdFx0XHRcdCAgIGludCBwYXJhbSlcbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTMwMy1cdGlmICh0eXBlID09IE5GQ19ESUdJVEFMX0NPTkZJR19SRl9URUNIKVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjEzMDQ6XHRcdHJldHVybiBwb3J0MTAwX3RnX3NldF9yZihkZGV2LCBwYXJhbSk7XG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTMwNS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMzA2LVx0aWYgKHR5cGUgPT0gTkZDX0RJR0lUQUxfQ09ORklHX0ZSQU1JTkcpXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTMwNzpcdFx0cmV0dXJuIHBvcnQxMDBfdGdfc2V0X2ZyYW1pbmcoZGRldiwgcGFyYW0pO1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEzMDgtXG4tLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEzMTEtXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTMxMjpzdGF0aWMgYm9vbCBwb3J0MTAwX3RnX3RhcmdldF9hY3RpdmF0ZWQoc3RydWN0IHBvcnQxMDAgKmRldiwgdTggdGd0X2FjdGl2YXRlZClcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMzEzLXtcbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTMzMS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMzMyOnN0YXRpYyB2b2lkIHBvcnQxMDBfdGdfY29tbV9yZl9jb21wbGV0ZShzdHJ1Y3QgcG9ydDEwMCAqZGV2LCB2b2lkICphcmcsXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTMzMy1cdFx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnJlc3ApXG4tLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEzMzUtXHR1MzIgc3RhdHVzO1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjEzMzY6XHRjb25zdCBzdHJ1Y3QgcG9ydDEwMF9jYl9hcmcgKmNiX2FyZyA9IGFyZztcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMzM3LVx0bmZjX2RpZ2l0YWxfY21kX2NvbXBsZXRlX3QgY2IgPSBjYl9hcmctXHUwMDNlY29tcGxldGVfY2I7XG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTMzODpcdHN0cnVjdCBwb3J0MTAwX3RnX2NvbW1fcmZfcmVzICpoZHI7XG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTMzOS1cbi0tXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTM0Mi1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMzQzOlx0aGRyID0gKHN0cnVjdCBwb3J0MTAwX3RnX2NvbW1fcmZfcmVzICopcmVzcC1cdTAwM2VkYXRhO1xuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEzNDQtXG4tLVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEzNDctXHRpZiAoY2JfYXJnLVx1MDAzZW1kYWEgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTM0ODpcdCAgICAhcG9ydDEwMF90Z190YXJnZXRfYWN0aXZhdGVkKGRldiwgaGRyLVx1MDAzZXRhcmdldF9hY3RpdmF0ZWQpKSB7XG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTM0OS1cdFx0a2ZyZWVfc2tiKHJlc3ApO1xuLS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMzU0LVxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjEzNTU6XHRza2JfcHVsbChyZXNwLCBzaXplb2Yoc3RydWN0IHBvcnQxMDBfdGdfY29tbV9yZl9yZXMpKTtcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMzU2LVxuLS1cbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMzcxLVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3ODkxCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIE5GQyBTaW11bGF0aW9uIERyaXZlcioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBORkMgc2ltdWxhdGlvbiBpcyBzZXQgdXAuIFRoZSBuYXR1cmFsIGZpcnN0IHN0ZXAgaXMgdG8gZGlnIGludG8gdGhlIGNvZGUsIGFuZCBJIGtub3cgZXhhY3RseSB3aGVyZSB0byBzdGFydDogYGRyaXZlcnMvbmZjL25mY3NpbS5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiB0aGUgc2ltdWxhdGlvbiBsaWtlbHkgcmVzaWRlcy4gSG93ZXZlciwgSSBjYW4mIzM5O3QganVzdCBsb29rIGF0IHRoZSBjb2RlOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYnVpbGQgY29uZmlndXJhdGlvbiBhcyB3ZWxsLiBUaW1lIHRvIGNoZWNrIHRoZSBgS2NvbmZpZ2AgZmlsZSBpbiB0aGF0IHNhbWUgZGlyZWN0b3J5LCBzcGVjaWZpY2FsbHkgYGRyaXZlcnMvbmZjL25mY3NpbS5jYCBLY29uZmlnLiBUaGF0IHdpbGwgdGVsbCBtZSB1bmRlciB3aGF0IGNvbmRpdGlvbnMgdGhpcyBzaW11bGF0aW9uIGRyaXZlciBpcyBldmVuIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gSXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBpdCBpcyBlbmFibGVkIG9yIGRpc2FibGVkLiBUaGF0JiMzOTtsbCBiZSBteSBzdGFydGluZyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GQ19TSU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25mYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25mYy9LY29uZmlnPTIxPWNvbmZpZyBORkNfTUVJX1BIWVxuLS1cbmRyaXZlcnMvbmZjL0tjb25maWctMzAtXG5kcml2ZXJzL25mYy9LY29uZmlnOjMxOmNvbmZpZyBORkNfU0lNXG5kcml2ZXJzL25mYy9LY29uZmlnLTMyLVx0dHJpc3RhdGUgXCYjMzQ7TkZDIGhhcmR3YXJlIHNpbXVsYXRvciBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgyMTAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTkZDIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSB0aGF0IGBDT05GSUdfTkZDX1NJTWAgcmVmZXJzIHRvIHRoZSAmIzM0O05GQyBoYXJkd2FyZSBzaW11bGF0b3IgZHJpdmVyLiYjMzQ7IFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGxpa2VseSBmb3IgdGVzdGluZyBvciBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMuIFRoZW4sIGBDT05GSUdfTkZDX1BPUlQxMDBgIHBvaW50cyB0byBhICYjMzQ7U29ueSBQb3J0LTEwMCBVU0IgUkZJRCByZWFkZXIuJiMzNDsgQWgsIGEgc3BlY2lmaWMgaGFyZHdhcmUgaW50ZXJmYWNlLiBDbGVhcmx5LCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtIGlzIGRlc2lnbmVkIHRvIHByb3ZpZGUgZ3JhbnVsYXIgY29udHJvbCBvdmVyIE5GQyBjYXBhYmlsaXRpZXMuIFRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dCBhbmQgZGVwZW5kZW5jaWVzLCBJIHNob3VsZCByZWFsbHkgZGl2ZSBpbnRvIGBuZXQvbmZjL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIGxvZ2ljIGFuZCByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlc2Ugb3B0aW9ucyB3aWxsIGJlIGRlZmluZWQuIEkgZXhwZWN0IHRvIGZpbmQgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHNldHRpbmdzLCBhbmQgZGVzY3JpcHRpb25zIHRoYXQgd2lsbCBzaGVkIGZ1cnRoZXIgbGlnaHQgb24gdGhlaXIgaW50ZW5kZWQgdXNlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgdGhlcmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmZjL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgTkZDIHN1YnN5c3RlbSBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG1lbnVjb25maWcgTkZDXG4gICA3Olx0XHRkZXBlbmRzIG9uIFJGS0lMTCB8fCAhUkZLSUxMXG4gICA4Olx0XHR0cmlzdGF0ZSBcJiMzNDtORkMgc3Vic3lzdGVtIHN1cHBvcnRcJiMzNDtcbiAgIDk6XHRcdGRlZmF1bHQgblxuICAxMDpcdFx0aGVscFxuICAxMTpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHN1cHBvcnQgZm9yIE5GQyAoTmVhciBmaWVsZFxuICAxMjpcdFx0ICBjb21tdW5pY2F0aW9uKSBkZXZpY2VzLlxuICAxMzpcdFxuICAxNDpcdFx0ICBUbyBjb21waWxlIHRoaXMgc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXG4gIDE1Olx0XHQgIGJlIGNhbGxlZCBuZmMuXG4gIDE2Olx0XG4gIDE3Olx0Y29uZmlnIE5GQ19ESUdJVEFMXG4gIDE4Olx0XHRkZXBlbmRzIG9uIE5GQ1xuICAxOTpcdFx0c2VsZWN0IENSQ19DQ0lUVFxuICAyMDpcdFx0c2VsZWN0IENSQ19JVFVfVFxuICAyMTpcdFx0dHJpc3RhdGUgXCYjMzQ7TkZDIERpZ2l0YWwgUHJvdG9jb2wgc3RhY2sgc3VwcG9ydFwmIzM0O1xuICAyMjpcdFx0ZGVmYXVsdCBuXG4gIDIzOlx0XHRoZWxwXG4gIDI0Olx0XHQgIFNheSBZIGlmIHlvdSB3YW50IHRvIGJ1aWxkIE5GQyBkaWdpdGFsIHByb3RvY29sIHN0YWNrIHN1cHBvcnQuXG4gIDI1Olx0XHQgIFRoaXMgaXMgbmVlZGVkIGJ5IE5GQyBjaGlwc2V0cyB3aG9zZSBmaXJtd2FyZSBvbmx5IGltcGxlbWVudFxuICAyNjpcdFx0ICB0aGUgTkZDIGFuYWxvZyBsYXllci5cbiAgMjc6XHRcbiAgMjg6XHRcdCAgVG8gY29tcGlsZSB0aGlzIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxuICAyOTpcdFx0ICBiZSBjYWxsZWQgbmZjX2RpZ2l0YWwuXG4gIDMwOlx0XG4gIDMxOlx0c291cmNlIFwmIzM0O25ldC9uZmMvbmNpL0tjb25maWdcJiMzNDtcbiAgMzI6XHRzb3VyY2UgXCYjMzQ7bmV0L25mYy9oY2kvS2NvbmZpZ1wmIzM0O1xuICAzMzpcdFxuICAzNDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25mYy9LY29uZmlnXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4ODg4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIE5GQyBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIE5GQyBkcml2ZXIgY29uZmlndXJhdGlvbi4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHJpZ2h0IGludG8gdGhlIGBkcml2ZXJzL25mYy9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBzdGFydC4gSXQgc2hvdWxkIGNvbnRhaW4gYWxsIHRoZSBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgdGhhdCBnb3Zlcm4gaG93IHRoZSBORkMgc3Vic3lzdGVtIGlzIGJ1aWx0IGludG8gdGhlIGtlcm5lbC4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgYmUgYWJsZSB0byB0cmFjZSBhbGwgdGhlIGRlcGVuZGVuY2llcyBhbmQgZmlndXJlIG91dCB0aGUgY29uZmlnIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZmMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIE5lYXIgRmllbGQgQ29tbXVuaWNhdGlvbiAoTkZDKSBkZXZpY2VzXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG1lbnUgXCYjMzQ7TmVhciBGaWVsZCBDb21tdW5pY2F0aW9uIChORkMpIGRldmljZXNcJiMzNDtcbiAgIDc6XHRcdGRlcGVuZHMgb24gTkZDXG4gICA4Olx0XG4gICA5Olx0Y29uZmlnIE5GQ19UUkY3OTcwQVxuICAxMDpcdFx0dHJpc3RhdGUgXCYjMzQ7VGV4YXMgSW5zdHJ1bWVudHMgVFJGNzk3MGEgTkZDIGRyaXZlclwmIzM0O1xuICAxMTpcdFx0ZGVwZW5kcyBvbiBTUEkgXHUwMDI2XHUwMDI2IE5GQ19ESUdJVEFMIFx1MDAyNlx1MDAyNiBHUElPTElCXG4gIDEyOlx0XHRoZWxwXG4gIDEzOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIE5GQyBkcml2ZXIgZm9yIFRleGFzIEluc3RydW1lbnRzJiMzOTsgVFJGNzk3MGFcbiAgMTQ6XHRcdCAgZGV2aWNlLiBTdWNoIGRldmljZSBzdXBwb3J0cyA1IGRpZmZlcmVudCBwcm90b2NvbHM6IElTTzE0NDQzQSxcbiAgMTU6XHRcdCAgSVNPMTQ0NDNCLCBGZUxpQ2EsIElTTzE1NjkzIGFuZCBJU08xODAwMC0zLlxuICAxNjpcdFxuICAxNzpcdFx0ICBTYXkgWSBoZXJlIHRvIGNvbXBpbGUgc3VwcG9ydCBmb3IgVFJGNzk3MGEgaW50byB0aGUga2VybmVsIG9yXG4gIDE4Olx0XHQgIHNheSBNICB0byBjb21waWxlIGl0IGFzIGEgbW9kdWxlLiBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkXG4gIDE5Olx0XHQgIHRyZjc5NzBhLmtvLlxuICAyMDpcdFxuICAyMTpcdGNvbmZpZyBORkNfTUVJX1BIWVxuICAyMjpcdFx0dHJpc3RhdGUgXCYjMzQ7TUVJIGJ1cyBORkMgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiAgMjM6XHRcdGRlcGVuZHMgb24gSU5URUxfTUVJIFx1MDAyNlx1MDAyNiBORkNfSENJXG4gIDI0Olx0XHRoZWxwXG4gIDI1Olx0XHQgIFRoaXMgYWRkcyBzdXBwb3J0IHRvIHVzZSBhbiBtZWkgYnVzIG5mYyBkZXZpY2UuIFNlbGVjdCB0aGlzIGlmIHlvdVxuICAyNjpcdFx0ICB3aWxsIHVzZSBhbiBIQ0kgTkZDIGRyaXZlciBmb3IgYW4gTkZDIGNoaXAgY29ubmVjdGVkIGJlaGluZCBhblxuICAyNzpcdFx0ICBJbnRlbCYjMzk7cyBNYW5hZ2VtZW50IEVuZ2luZSBjaGlwLlxuICAyODpcdFxuICAyOTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAzMDpcdFxuICAzMTpcdGNvbmZpZyBORkNfU0lNXG4gIDMyOlx0XHR0cmlzdGF0ZSBcJiMzNDtORkMgaGFyZHdhcmUgc2ltdWxhdG9yIGRyaXZlclwmIzM0O1xuICAzMzpcdFx0ZGVwZW5kcyBvbiBORkNfRElHSVRBTFxuICAzNDpcdFx0aGVscFxuICAzNTpcdFx0ICBUaGlzIGRyaXZlciBkZWNsYXJlcyB0d28gdmlydHVhbCBORkMgZGV2aWNlcyBzdXBwb3J0aW5nIE5GQy1ERVBcbiAgMzY6XHRcdCAgcHJvdG9jb2wuIEFuIExMQ1AgY29ubmVjdGlvbiBjYW4gYmUgZXN0YWJsaXNoZWQgYmV0d2VlbiB0aGVtIGFuZFxuICAzNzpcdFx0ICBhbGwgcGFja2V0cyBzZW50IGZyb20gb25lIGRldmljZSBpcyBzZW50IGJhY2sgdG8gdGhlIG90aGVyLCBhY3RpbmcgYXNcbiAgMzg6XHRcdCAgbG9vcGJhY2sgZGV2aWNlcy5cbiAgMzk6XHRcbiAgNDA6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNDE6XHRcbiAgNDI6XHRjb25maWcgTkZDX1BPUlQxMDBcbiAgNDM6XHRcdHRyaXN0YXRlIFwmIzM0O1NvbnkgTkZDIFBvcnQtMTAwIFNlcmllcyBVU0IgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiAgNDQ6XHRcdGRlcGVuZHMgb24gVVNCXG4gIDQ1Olx0XHRkZXBlbmRzIG9uIE5GQ19ESUdJVEFMXG4gIDQ2Olx0XHRoZWxwXG4gIDQ3Olx0XHQgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBTb255IFBvcnQtMTAwIGNoaXAgYmFzZWQgVVNCIGRldmljZXMgc3VjaCBhcyB0aGVcbiAgNDg6XHRcdCAgUkMtUzM4MCBkb25nbGUuXG4gIDQ5Olx0XG4gIDUwOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDUxOlx0XG4gIDUyOlx0Y29uZmlnIE5GQ19WSVJUVUFMX05DSVxuICA1MzpcdFx0dHJpc3RhdGUgXCYjMzQ7TkNJIGRldmljZSBzaW11bGF0b3IgZHJpdmVyXCYjMzQ7XG4gIDU0Olx0XHRkZXBlbmRzIG9uIE5GQ19OQ0lcbiAgNTU6XHRcdGhlbHBcbiAgNTY6XHRcdCAgTkNJIHZpcnR1YWwgZGV2aWNlIHNpbXVsYXRlcyBhIE5DSSBkZXZpY2UgdG8gdGhlIHVzZXIuXG4gIDU3Olx0XHQgIEl0IGNhbiBiZSB1c2VkIHRvIHZhbGlkYXRlIHRoZSBOQ0kgbW9kdWxlIGFuZCBhcHBsaWNhdGlvbnMuXG4gIDU4Olx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgdmlydHVhbCBOQ0kgZGV2aWNlIGFuZFxuICA1OTpcdFx0ICBtb2R1bGUuXG4gIDYwOlx0XG4gIDYxOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDYyOlx0XG4gIDYzOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmZjL2ZkcC9LY29uZmlnXCYjMzQ7XG4gIDY0Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmZjL3BuNTQ0L0tjb25maWdcJiMzNDtcbiAgNjU6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZmMvcG41MzMvS2NvbmZpZ1wmIzM0O1xuICA2NjpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25mYy9taWNyb3JlYWQvS2NvbmZpZ1wmIzM0O1xuICA2NzpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25mYy9uZmNtcnZsL0tjb25maWdcJiMzNDtcbiAgNjg6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZmMvc3QyMW5mY2EvS2NvbmZpZ1wmIzM0O1xuICA2OTpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25mYy9zdC1uY2kvS2NvbmZpZ1wmIzM0O1xuICA3MDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25mYy9ueHAtbmNpL0tjb25maWdcJiMzNDtcbiAgNzE6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnXCYjMzQ7XG4gIDcyOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmZjL3N0OTVoZi9LY29uZmlnXCYjMzQ7XG4gIDczOlx0ZW5kbWVudVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDEyNwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDExMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipORkMgRHJpdmVyIExvb3BiYWNrIEFuYWx5c2lzKioKCk9rYXksIHNvIHRoZSBgQ09ORklHX05GQ19TSU1gIGRyaXZlci4uLiB0aGF0JiMzOTtzIHRoZSBvbmUuIEl0IGxvb2tzIGxpa2UgdGhpcyBkcml2ZXIgZGVmaW5lcyAqdHdvKiB2aXJ0dWFsIE5GQyBkZXZpY2VzIHRoYXQgY2FuIGNvbW11bmljYXRlIHVzaW5nIHRoZSBORkMtREVQIHByb3RvY29sLiBFc3NlbnRpYWxseSwgaXQgY3JlYXRlcyBhIGxvb3BiYWNrIHNldHVwLiBBbnkgZGF0YSBzZW50IGZyb20gb25lIHZpcnR1YWwgZGV2aWNlIGdldHMgaW1tZWRpYXRlbHkgYm91bmNlZCBiYWNrIGZyb20gdGhlIG90aGVyLiBJbnRlcmVzdGluZy4gQW5kLCBmcm9tIHdoYXQgSSBjYW4gc2VlLCBgQ09ORklHX05GQ19QT1JUMTAwYCBoYXMgZGVwZW5kZW5jaWVzIG9uIFVTQiBhbmQgTkZDX0RJR0lUQUwsIHdoaWNoIGlzIHJlbGV2YW50IGdpdmVuIHN5emthbGxlciYjMzk7cyBmb2N1cyBvbiBmdXp6aW5nIFVTQiBhbmQgTkZDIGludGVyZmFjZXMuCgpOb3csIEkgcmVhbGx5IG5lZWQgdG8gZGl2ZSBkZWVwZXIuIFRpbWUgdG8gaGl0IHRoZSBnaXQgbG9ncy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGhpc3Rvcnkgb2YgdGhpcyBjb2RlLiBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgb3JpZ2luYWwgY29tbWl0IGFuZCBwZXJoYXBzIHRoZSBzdXJyb3VuZGluZyBjb21taXRzLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9mIHRoZSBwYXRjaCwgaXRzIGNvbnRleHQsIGFuZCBwb3RlbnRpYWxseSBhbnkgdnVsbmVyYWJpbGl0aWVzIG9yIGRlc2lnbiBkZWNpc2lvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudCB0byBteSB3b3JrLiBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgY2hhbmdlZCwgd2h5IGl0JiMzOTtzIGNoYW5nZWQsIGFuZCB3aGVyZSBpdCBjYW1lIGZyb20uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RpZ2l0YWxfcmVjdl9kZXBfZGF0YV9nYXRoZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmZjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZmMvZGlnaXRhbF9kZXAuYz0yMzA9c3RhdGljIHN0cnVjdCBza19idWZmICpcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzoyMzE6ZGlnaXRhbF9yZWN2X2RlcF9kYXRhX2dhdGhlcihzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCB1OCBwZmIsXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMjMyLVx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnJlc3AsXG4tLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jPTY4Nj1zdGF0aWMgdm9pZCBkaWdpdGFsX2luX3JlY3ZfZGVwX3JlcyhzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCB2b2lkICphcmcsXG4tLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTc5OC1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzo3OTk6XHRcdHJlc3AgPSBkaWdpdGFsX3JlY3ZfZGVwX2RhdGFfZ2F0aGVyKGRkZXYsIHBmYiwgcmVzcCxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy04MDAtXHRcdFx0XHRcdFx0ICAgIGRpZ2l0YWxfaW5fc2VuZF9hY2ssXG4tLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jPTEwNzc9c3RhdGljIHZvaWQgZGlnaXRhbF90Z19yZWN2X2RlcF9yZXEoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdm9pZCAqYXJnLFxuLS1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xMTgzLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjExODQ6XHRcdHJlc3AgPSBkaWdpdGFsX3JlY3ZfZGVwX2RhdGFfZ2F0aGVyKGRkZXYsIHBmYiwgcmVzcCxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xMTg1LVx0XHRcdFx0XHRcdCAgICBkaWdpdGFsX3RnX3NlbmRfYWNrLCBOVUxMKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA4NDcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIGBkaWdpdGFsX3RnX3NlbmRfYXRyX3Jlc19jb21wbGV0ZWAgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBkaWdpdGFsX3RnX3NlbmRfYXRyX3Jlc19jb21wbGV0ZWAuIEl0JiMzOTtzIGEgbmV3IG9uZSwgc28gdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyB1bmRlcnN0YW5kIGl0cyBzY29wZS4gSSBoYXZlIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSBjYWxsZWQuIFVuZGVyc3RhbmRpbmcgaXRzIHVzYWdlIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gSSBuZWVkIHRvIHRyYWNlIGl0cyByZWZlcmVuY2VzIGFuZCBzZWUgd2hhdCBvdGhlciBtb2R1bGVzIG9yIGZ1bmN0aW9ucyBkZXBlbmQgb24gaXQsIG9yIHRyaWdnZXIgaXQuIEEgcXVpY2sgc2VhcmNoIHNob3VsZCByZXZlYWwgYWxsIGluc3RhbmNlcyBvZiBpdHMgdXNlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGl0cyByb2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkaWdpdGFsX3RnX3NlbmRfYXRyX3Jlc19jb21wbGV0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25mYy9kaWdpdGFsX2RlcC5jPTEzOTg9c3RhdGljIHZvaWQgZGlnaXRhbF90Z19yZWN2X3BzbF9yZXEoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdm9pZCAqYXJnLFxuLS1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xNDY2LVxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjE0Njc6c3RhdGljIHZvaWQgZGlnaXRhbF90Z19zZW5kX2F0cl9yZXNfY29tcGxldGUoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xNDY4LVx0XHRcdFx0XHQgICAgIHZvaWQgKmFyZywgc3RydWN0IHNrX2J1ZmYgKnJlc3ApXG4tLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jPTE0OTg9c3RhdGljIGludCBkaWdpdGFsX3RnX3NlbmRfYXRyX3JlcyhzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxuLS1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xNTQyLVx0cmMgPSBkaWdpdGFsX3RnX3NlbmRfY21kKGRkZXYsIHNrYiwgOTk5LFxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjE1NDM6XHRcdFx0XHQgZGlnaXRhbF90Z19zZW5kX2F0cl9yZXNfY29tcGxldGUsIE5VTEwpO1xubmV0L25mYy9kaWdpdGFsX2RlcC5jLTE1NDQtXHRpZiAocmMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxMzMwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogOTMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQVRSIFJlc3BvbnNlIEhhbmRsaW5nIGFuZCBEYXRhIEdhdGhlcmluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgYGRpZ2l0YWxfdGdfc2VuZF9hdHJfcmVzYCBraWNrZWQgdGhpbmdzIG9mZiBieSBzZW5kaW5nIHRoZSBBVFIgcmVzcG9uc2UgYW5kIHJlZ2lzdGVyaW5nIGBkaWdpdGFsX3RnX3NlbmRfYXRyX3Jlc19jb21wbGV0ZWAgYXMgaXRzIGNhbGxiYWNrLiBNYWtlcyBzZW5zZS4gTm93LCBgZGlnaXRhbF90Z19zZW5kX2F0cl9yZXNfY29tcGxldGVgIGlzIHRyaWdnZXJlZCB3aGVuIGEgcmVzcG9uc2UgY29tZXMgYmFjaywgcHJlc3VtYWJseSBmcm9tIHRoZSBpbml0aWF0b3IuIEl0JiMzOTtzIHN1cHBvc2VkIHRvIGhhbmRsZSB0aGF0IHJlc3BvbnNlIGBza2JgLgoKTG9va2luZyBhdCB0aGUgcGF0Y2gsIHRoZSBjb2RlIG5vdyBjaGVja3MgZm9yIHRoZSByZXNwb25zZSBgc2tiYCBsZW5ndGguIEFuIGVtcHR5IHJlc3BvbnNlIGlzIGNvbnNpZGVyZWQgYGJhZF9mcmFtZWAsIGFuZCB3ZSBqdW1wIHN0cmFpZ2h0IHRvIGBkaWdpdGFsX3BvbGxfbmV4dF90ZWNoYC4gVGhlIGNvZGUgbm93IGNhbGN1bGF0ZXMgdGhlIGBvZmZzZXRgLiBJdCBhbHNvIGFjY291bnRzIGZvciBgRElHSVRBTF9ORkNfREVQX05GQ0FfU09EX1NCYC4gVGhpcyBtYWtlcyBzZW5zZSwgYXMgYSBzaG9ydCByZXNwb25zZSAobGVzcyB0aGFuIHRoZSBvZmZzZXQpIGlzIGFsc28gY29uc2lkZXJlZCBhIGBiYWRfZnJhbWVgLgoKVGhlIGtleSBwYXJ0IGlzIHRoZSBsb2dpYyBpbnNpZGUgYGRpZ2l0YWxfdGdfc2VuZF9hdHJfcmVzX2NvbXBsZXRlYDogSWYgdGhlIHJlc3BvbnNlIGlzIGdvb2QsIHRoZW4gaXQgZWl0aGVyIGNhbGxzIGBkaWdpdGFsX3RnX3JlY3ZfcHNsX3JlcWAgb3IgYGRpZ2l0YWxfdGdfcmVjdl9kZXBfcmVxYCBkZXBlbmRpbmcgb24gdGhlIHN0YXRlLCB3aGljaCBpcyBhIGZhaXJseSBzdHJhaWdodGZvcndhcmQgc3RhdGUgbWFjaGluZS4gVGhlIG90aGVyIHBhcnQgaXMgdGhlIGBiYWRfZnJhbWVgIGVycm9yIGhhbmRsaW5nLiBJdCBmcmVlcyB0aGUgYHNrYmAgYW5kIGdvZXMgdG8gdGhlIG5leHQgdGVjaCwgd2hpY2ggaXMgcmVhc29uYWJsZS4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgYGRpZ2l0YWxfcmVjdl9kZXBfZGF0YV9nYXRoZXJgLiBIZXJlLCB0aGUgZnVuY3Rpb24gYWxsb2NhdGVzIGEgYGNoYWluaW5nX3NrYmAgaWYgdGhlIGBESUdJVEFMX05GQ19ERVBfTUlfQklUX1NFVGAgYml0IGlzIHNldCBhbmQgdGhlIGBjaGFpbmluZ19za2JgIGRvZXNuJiMzOTt0IGV4aXN0LiBOb3cgdGhlIGBjaGFpbmluZ19za2JgIGlzIGFsbG9jYXRlZCB2aWEgYGRpZ2l0YWxfc2tiX2FsbG9jYC4KCklmIHRoZSBgY2hhaW5pbmdfc2tiYCBhbHJlYWR5IGV4aXN0cywgb3IgaGFzIGp1c3QgYmVlbiBhbGxvY2F0ZWQsIGFuZCB0aGUgcmVzcG9uc2UgbGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiB0aGUgYXZhaWxhYmxlIHNwYWNlIGluIHRoZSBgc2tiX3RhaWxyb29tYCwgaXQgbmVlZHMgdG8gZ3Jvdy4gSXQgdXNlcyBgc2tiX2NvcHlfZXhwYW5kYCB0byBncm93IHRoZSBgc2tiYC4gVGhlIGBza2JfY29weV9leHBhbmRgIGZ1bmN0aW9uIGlzIGEgY3J1Y2lhbCBwYXJ0LiBJdCBleHBhbmRzIHRoZSBidWZmZXIgb2YgYW4gYHNrYmAsIGNvcGllcyBpdHMgZGF0YSwgYW5kIHRoZW4gZnJlZXMgdGhlIG9sZCBidWZmZXIuIEl0IGlzIHVzZWQgaGVyZSB0byBjb3B5IHRoZSByZWNlaXZlZCBkYXRhIGludG8gdGhlIGBjaGFpbmluZ19za2JgIHNvIHRoYXQgaXQgZG9lc24mIzM5O3Qgb3ZlcmZsb3cuIEl0IGFsc28gYWRkcyBzb21lIGhlYWRyb29tIHRvIHRoZSBhbGxvY2F0ZWQgc3BhY2UuCgpTbywgdGhlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHdoYXQgYGRpZ2l0YWxfc2tiX2FsbG9jYCBpcyBkb2luZywgYXMgdGhpcyBpcyB3aGVyZSB0aGUgYHNrYmAgaXMgYWxsb2NhdGVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBkb2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkaWdpdGFsX3NrYl9hbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25mYy9kaWdpdGFsLmg9NDA9c3RydWN0IGRpZ2l0YWxfZGF0YV9leGNoIHtcbi0tXG5uZXQvbmZjL2RpZ2l0YWwuaC00NC1cbm5ldC9uZmMvZGlnaXRhbC5oOjQ1OnN0cnVjdCBza19idWZmICpkaWdpdGFsX3NrYl9hbGxvYyhzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxubmV0L25mYy9kaWdpdGFsLmgtNDYtXHRcdFx0XHQgIHVuc2lnbmVkIGludCBsZW4pO1xuLS1cbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmM9Mjc9c3RydWN0IGRpZ2l0YWxfY21kIHtcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jLTQxLVxubmV0L25mYy9kaWdpdGFsX2NvcmUuYzo0MjpzdHJ1Y3Qgc2tfYnVmZiAqZGlnaXRhbF9za2JfYWxsb2Moc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmMtNDMtXHRcdFx0XHQgIHVuc2lnbmVkIGludCBsZW4pXG4tLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jPTIwMD1kaWdpdGFsX3NlbmRfZGVwX2RhdGFfcHJlcChzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0yMDgtXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6MjA5Olx0XHRuZXdfc2tiID0gZGlnaXRhbF9za2JfYWxsb2MoZGRldiwgZGRldi1cdTAwM2VyZW1vdGVfcGF5bG9hZF9tYXgpO1xubmV0L25mYy9kaWdpdGFsX2RlcC5jLTIxMC1cdFx0aWYgKCFuZXdfc2tiKSB7XG4tLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jPTIzMT1kaWdpdGFsX3JlY3ZfZGVwX2RhdGFfZ2F0aGVyKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHU4IHBmYixcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMjQyLVx0XHRkZGV2LVx1MDAzZWNoYWluaW5nX3NrYiA9XG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6MjQzOlx0XHRcdGRpZ2l0YWxfc2tiX2FsbG9jKGRkZXYsXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMjQ0LVx0XHRcdFx0XHQgIDggKiBkZGV2LVx1MDAzZWxvY2FsX3BheWxvYWRfbWF4KTtcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM9MzU5PXN0YXRpYyBpbnQgZGlnaXRhbF9pbl9zZW5kX3BzbF9yZXEoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMzY2LVxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjM2NzpcdHNrYiA9IGRpZ2l0YWxfc2tiX2FsbG9jKGRkZXYsIHNpemVvZigqcHNsX3JlcSkpO1xubmV0L25mYy9kaWdpdGFsX2RlcC5jLTM2OC1cdGlmICghc2tiKVxuLS1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYz00NzE9aW50IGRpZ2l0YWxfaW5fc2VuZF9hdHJfcmVxKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXG4tLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTQ4Ny1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzo0ODg6XHRza2IgPSBkaWdpdGFsX3NrYl9hbGxvYyhkZGV2LCBzaXplKTtcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy00ODktXHRpZiAoIXNrYilcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM9NTI5PXN0YXRpYyBpbnQgZGlnaXRhbF9pbl9zZW5kX2FjayhzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxuLS1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy01MzUtXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6NTM2Olx0c2tiID0gZGlnaXRhbF9za2JfYWxsb2MoZGRldiwgMSk7XG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtNTM3LVx0aWYgKCFza2IpXG4tLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jPTU2Nj1zdGF0aWMgaW50IGRpZ2l0YWxfaW5fc2VuZF9uYWNrKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXG4tLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTU3Mi1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzo1NzM6XHRza2IgPSBkaWdpdGFsX3NrYl9hbGxvYyhkZGV2LCAxKTtcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy01NzQtXHRpZiAoIXNrYilcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM9NTk4PXN0YXRpYyBpbnQgZGlnaXRhbF9pbl9zZW5kX2F0bihzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxuLS1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy02MDQtXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6NjA1Olx0c2tiID0gZGlnaXRhbF9za2JfYWxsb2MoZGRldiwgMSk7XG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtNjA2LVx0aWYgKCFza2IpXG4tLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jPTYyOT1zdGF0aWMgaW50IGRpZ2l0YWxfaW5fc2VuZF9ydG94KHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXG4tLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTY0MC1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzo2NDE6XHRza2IgPSBkaWdpdGFsX3NrYl9hbGxvYyhkZGV2LCAxKTtcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy02NDItXHRpZiAoIXNrYilcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM9OTc4PXN0YXRpYyBpbnQgZGlnaXRhbF90Z19zZW5kX2FjayhzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxuLS1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy05ODQtXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6OTg1Olx0c2tiID0gZGlnaXRhbF9za2JfYWxsb2MoZGRldiwgMSk7XG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtOTg2LVx0aWYgKCFza2IpXG4tLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jPTEwMjQ9c3RhdGljIGludCBkaWdpdGFsX3RnX3NlbmRfYXRuKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYpXG4tLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTEwMjktXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6MTAzMDpcdHNrYiA9IGRpZ2l0YWxfc2tiX2FsbG9jKGRkZXYsIDEpO1xubmV0L25mYy9kaWdpdGFsX2RlcC5jLTEwMzEtXHRpZiAoIXNrYilcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM9MTM2NT1zdGF0aWMgaW50IGRpZ2l0YWxfdGdfc2VuZF9wc2xfcmVzKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHU4IGRpZCxcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTM3MS1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzoxMzcyOlx0c2tiID0gZGlnaXRhbF9za2JfYWxsb2MoZGRldiwgc2l6ZW9mKHN0cnVjdCBkaWdpdGFsX3BzbF9yZXMpKTtcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xMzczLVx0aWYgKCFza2IpXG4tLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jPTE0OTg9c3RhdGljIGludCBkaWdpdGFsX3RnX3NlbmRfYXRyX3JlcyhzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxuLS1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xNTEwLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjE1MTE6XHRza2IgPSBkaWdpdGFsX3NrYl9hbGxvYyhkZGV2LCBzaXplb2Yoc3RydWN0IGRpZ2l0YWxfYXRyX3JlcykgJiM0MzsgZ2JfbGVuKTtcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xNTEyLVx0aWYgKCFza2IpXG4tLVxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYz0yNTE9c3RhdGljIGludCBkaWdpdGFsX2luX3NlbmRfcmF0cyhzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxuLS1cbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtMjU2LVxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYzoyNTc6XHRza2IgPSBkaWdpdGFsX3NrYl9hbGxvYyhkZGV2LCAyKTtcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtMjU4LVx0aWYgKCFza2IpXG4tLVxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYz0zNDE9c3RhdGljIGludCBkaWdpdGFsX2luX3NlbmRfc2VsX3JlcShzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxuLS1cbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtMzQ5LVxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYzozNTA6XHRza2IgPSBkaWdpdGFsX3NrYl9hbGxvYyhkZGV2LCBzaXplb2Yoc3RydWN0IGRpZ2l0YWxfc2VsX3JlcSkpO1xubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy0zNTEtXHRpZiAoIXNrYilcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jPTQ0OD1zdGF0aWMgaW50IGRpZ2l0YWxfaW5fc2VuZF9zZGRfcmVxKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXG4tLVxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy00NTktXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jOjQ2MDpcdHNrYiA9IGRpZ2l0YWxfc2tiX2FsbG9jKGRkZXYsIDIpO1xubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy00NjEtXHRpZiAoIXNrYilcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jPTUyNz1pbnQgZGlnaXRhbF9pbl9zZW5kX3NlbnNfcmVxKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHU4IHJmX3RlY2gpXG4tLVxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy01NDEtXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jOjU0MjpcdHNrYiA9IGRpZ2l0YWxfc2tiX2FsbG9jKGRkZXYsIDEpO1xubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy01NDMtXHRpZiAoIXNrYilcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jPTYxOD1zdGF0aWMgaW50IGRpZ2l0YWxfaW5fc2VuZF9hdHRyaWJfcmVxKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXG4tLVxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy02MjUtXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jOjYyNjpcdHNrYiA9IGRpZ2l0YWxfc2tiX2FsbG9jKGRkZXYsIHNpemVvZigqYXR0cmliX3JlcSkpO1xubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy02MjctXHRpZiAoIXNrYilcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jPTcxND1pbnQgZGlnaXRhbF9pbl9zZW5kX3NlbnNiX3JlcShzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCB1OCByZl90ZWNoKVxuLS1cbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtNzI5LVxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYzo3MzA6XHRza2IgPSBkaWdpdGFsX3NrYl9hbGxvYyhkZGV2LCBzaXplb2YoKnNlbnNiX3JlcSkpO1xubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy03MzEtXHRpZiAoIXNrYilcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jPTgwND1pbnQgZGlnaXRhbF9pbl9zZW5kX3NlbnNmX3JlcShzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCB1OCByZl90ZWNoKVxuLS1cbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtODIxLVxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYzo4MjI6XHRza2IgPSBkaWdpdGFsX3NrYl9hbGxvYyhkZGV2LCBzaXplKTtcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtODIzLVx0aWYgKCFza2IpXG4tLVxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYz04OTU9aW50IGRpZ2l0YWxfaW5fc2VuZF9pc28xNTY5M19pbnZfcmVxKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHU4IHJmX3RlY2gpXG4tLVxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy05MTAtXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jOjkxMTpcdHNrYiA9IGRpZ2l0YWxfc2tiX2FsbG9jKGRkZXYsIHNpemVvZigqcmVxKSk7XG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTkxMi1cdGlmICghc2tiKVxuLS1cbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM9OTM1PXN0YXRpYyBpbnQgZGlnaXRhbF90Z19zZW5kX3NlbF9yZXMoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldilcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTkzOS1cbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM6OTQwOlx0c2tiID0gZGlnaXRhbF9za2JfYWxsb2MoZGRldiwgMSk7XG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTk0MS1cdGlmICghc2tiKVxuLS1cbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM9OTk0PXN0YXRpYyBpbnQgZGlnaXRhbF90Z19zZW5kX3NkZF9yZXMoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldilcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTk5OS1cbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM6MTAwMDpcdHNrYiA9IGRpZ2l0YWxfc2tiX2FsbG9jKGRkZXYsIHNpemVvZihzdHJ1Y3QgZGlnaXRhbF9zZGRfcmVzKSk7XG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTEwMDEtXHRpZiAoIXNrYilcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jPTEwNTg9c3RhdGljIGludCBkaWdpdGFsX3RnX3NlbmRfc2Vuc19yZXMoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldilcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTEwNjMtXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jOjEwNjQ6XHRza2IgPSBkaWdpdGFsX3NrYl9hbGxvYyhkZGV2LCAyKTtcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtMTA2NS1cdGlmICghc2tiKVxuLS1cbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM9MTEyOT1zdGF0aWMgaW50IGRpZ2l0YWxfdGdfc2VuZF9zZW5zZl9yZXMoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTExNDEtXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jOjExNDI6XHRza2IgPSBkaWdpdGFsX3NrYl9hbGxvYyhkZGV2LCBzaXplKTtcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtMTE0My1cdGlmICghc2tiKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTkwMgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDExNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIEkgYW5hbHl6ZSB0aGlzIGNvZGUgc25pcHBldDoKCioqQW5hbHl6aW5nIE5GQyBEYXRhIFJlY2VwdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBmdW5jdGlvbiBgZGlnaXRhbF9yZWN2X2RlcF9kYXRhX2dhdGhlcmAgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgdXNpbmcgYG5mY19hbGxvY19yZWN2X3NrYigpYC4gU3BlY2lmaWNhbGx5LCBJIHNlZSBpdCYjMzk7cyBhbGxvY2F0aW5nIGFuIHNrYiB3aXRoIGEgc2l6ZSBvZiBgOCAqIGRkZXYtJmd0O2xvY2FsX3BheWxvYWRfbWF4YCB1c2luZyBgR0ZQX0tFUk5FTGAuIEhtbW0sIGNydWNpYWwgcG9pbnQgaGVyZTogYG5mY19hbGxvY19yZWN2X3NrYigpYCBhbGxvY2F0ZXMgd2l0aG91dCBhbnkgaGVhZHJvb20gb3IgdGFpbHJvb20uIFRoYXQmIzM5O3MgYSBwb3RlbnRpYWwgYXJlYSBmb3IgcHJvYmxlbXMsIGVzcGVjaWFsbHkgaWYgdGhlcmUmIzM5O3MgYW55IG5lZWQgdG8gcHJlcGVuZCBoZWFkZXJzIG9yIGFwcGVuZCB0cmFpbGVycyBsYXRlciBvbi4KCk5vdywgaWYgYGRkZXYtJmd0O2NoYWluaW5nX3NrYmAgaXMgaW52b2x2ZWQsIG9yIHRoYXQgc2tiIGlzIHBhc3NlZCBhcm91bmTigKZ3YWl0LCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhhdCBwb3RlbnRpYWwgaXNzdWUgbW9yZSBjbG9zZWx5LiBJIHNob3VsZCBjaGVjayBvdXQgYGRpZ2l0YWxfc2tiX2FsbG9jYC4gTGV0JiMzOTtzIGRpZyBpbnRvIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHNrYnMgYXJlIGFjdHVhbGx5IGhhbmRsZWQgYW5kIGlmIHdlJiMzOTtyZSBydW5uaW5nIGludG8gaXNzdWVzLiBUaW1lIHRvIGludmVzdGlnYXRlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZmMvZGlnaXRhbF9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDQwOlx0fTtcbiAgNDE6XHRcbiAgNDI6XHRzdHJ1Y3Qgc2tfYnVmZiAqZGlnaXRhbF9za2JfYWxsb2Moc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcbiAgNDM6XHRcdFx0XHRcdCAgdW5zaWduZWQgaW50IGxlbilcbiAgNDQ6XHR7XG4gIDQ1Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuICA0NjpcdFxuICA0NzpcdFx0c2tiID0gYWxsb2Nfc2tiKGxlbiAmIzQzOyBkZGV2LVx1MDAzZXR4X2hlYWRyb29tICYjNDM7IGRkZXYtXHUwMDNldHhfdGFpbHJvb20sXG4gIDQ4Olx0XHRcdFx0R0ZQX0tFUk5FTCk7XG4gIDQ5Olx0XHRpZiAoc2tiKVxuICA1MDpcdFx0XHRza2JfcmVzZXJ2ZShza2IsIGRkZXYtXHUwMDNldHhfaGVhZHJvb20pO1xuICA1MTpcdFxuICA1MjpcdFx0cmV0dXJuIHNrYjtcbiAgNTM6XHR9XG4gIDU0Olx0XG4gIDU1Olx0dm9pZCBkaWdpdGFsX3NrYl9hZGRfY3JjKHN0cnVjdCBza19idWZmICpza2IsIGNyY19mdW5jX3QgY3JjX2Z1bmMsIHUxNiBpbml0LFxuICA1NjpcdFx0XHRcdCB1OCBiaXR3aXNlX2ludiwgdTggbXNiX2ZpcnN0KVxuICA1NzpcdHtcbiAgNTg6XHRcdHUxNiBjcmM7XG4gIDU5Olx0XG4gIDYwOlx0XHRjcmMgPSBjcmNfZnVuYyhpbml0LCBza2ItXHUwMDNlZGF0YSwgc2tiLVx1MDAzZWxlbik7XG4gIDYxOlx0XG4gIDYyOlx0XHRpZiAoYml0d2lzZV9pbnYpXG4gIDYzOlx0XHRcdGNyYyA9IH5jcmM7XG4gIDY0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NjI3CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNzU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGEgUmVjZW50IE5GQyBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgTkZDIGRyaXZlciBwYXRjaCBhbmQgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gc2VlaW5nLiAgYGRpZ2l0YWxfc2tiX2FsbG9jYCBpcyBhbGxvY2F0aW5nIHNrYnMgd2l0aCBzcGVjaWZpYyBoZWFkcm9vbSBhbmQgdGFpbHJvb20gdmFsdWVzLCBhbmQgY3J1Y2lhbGx5LCBpdCYjMzk7cyAqcmVzZXJ2aW5nKiB0aGF0IGhlYWRyb29tLiAgVGhhdCYjMzk7cyBzdGFuZGFyZCBwcmFjdGljZSwgbm90aGluZyBpbmhlcmVudGx5IHdyb25nIHRoZXJlLgoKVGhlbiwgdGhlcmUmIzM5O3MgYSBjaGFuZ2UgaW4gYHNrYl9jb3B5X2V4cGFuZGAuICBUaGUgb2xkIGNvZGUgd2FzIHVzaW5nIGBza2JfaGVhZHJvb20oKWAgdG8gZGV0ZXJtaW5lIHRoZSBleHBhbnNpb24gc2l6ZSwgYnV0IHRoZSBuZXcgY29kZSBpcyBub3cgZXhwbGljaXRseSB1c2luZyBgZGRldi0mZ3Q7dHhfaGVhZHJvb21gIGFuZCBhZGRpbmcgYGRkZXYtJmd0O3R4X3RhaWxyb29tYCB0byB0aGUgZXhwYW5zaW9uIHNpemUuICBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgdGhlcmUmIzM5O3MgYSBtb3JlIGRlbGliZXJhdGUgY29udHJvbCBvdmVyIGJ1ZmZlciBzaXplcyBub3csIGFuZCB0aGUgYWRkaXRpb24gb2YgdGFpbHJvb20gaW1wbGllcyB0aGV5JiMzOTtyZSBhY2NvdW50aW5nIGZvciB0aGUgc3BhY2UgbmVlZGVkIGZvciBkYXRhIGFwcGVuZGVkIGF0IHRoZSBlbmQgb2YgdGhlIHNrYi4gIFRoYXQmIzM5O3MgYSBnb29kIHNpZ24g4oCTIG1vcmUgZXhwbGljaXQgbWVtb3J5IG1hbmFnZW1lbnQgaXMgZ2VuZXJhbGx5IGJldHRlciBmb3IgcHJldmVudGluZyBidWZmZXIgb3ZlcmZsb3dzIGFuZCBvdGhlciByZWxhdGVkIGlzc3Vlcy4KCk5leHQsIEkgc2VlIGEgc2lnbmlmaWNhbnQgYnVnIGZpeCBpbiBgZGlnaXRhbF90Z19zZW5kX2F0cl9yZXNfY29tcGxldGVgLiBJdCBsb29rcyBsaWtlIHRoZXJlIHdhcyBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0eS4gVGhlIHByZXZpb3VzIGNvZGUgd2FzIGFjY2Vzc2luZyBgcmVzcC0mZ3Q7ZGF0YVswXWAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGByZXNwLSZndDtsZW5gIHdhcyAwLCBhbmQgYWxzbyBhY2Nlc3NpbmcgYHJlc3AtJmd0O2RhdGFbb2Zmc2V0XWAgd2l0aG91dCBlbnN1cmluZyBgcmVzcC0mZ3Q7bGVuYCB3YXMgbGFyZ2UgZW5vdWdoLiBUaGlzIGlzIGEgY2xhc3NpYyBleGFtcGxlIG9mIGFuIHVuY2hlY2tlZCBhY2Nlc3MgdGhhdCBjb3VsZCBsZWFkIHRvIGEgY3Jhc2ggb3IsIHdvcnNlLCBhIHNlY3VyaXR5IGV4cGxvaXQuICBUaGUgbmV3IGNvZGUgZXhwbGljaXRseSBjaGVja3MgYHJlc3AtJmd0O2xlbmAgYmVmb3JlIGFjY2Vzc2luZyB0aGUgZGF0YSBhdCB0aG9zZSBvZmZzZXRzLCBjb3JyZWN0bHkgaGFuZGxpbmcgdGhlIGNhc2Ugd2hlcmUgdGhlIHJlc3BvbnNlIGRhdGEgaXMgZW1wdHkgb3IgdG9vIHNob3J0LiAgR29vZCwgaXQmIzM5O3MgYSBjcml0aWNhbCBmaXguIFRoZXNlIGFyZSB0aGUga2luZHMgb2YgaXNzdWVzIHRoYXQgc3l6a2FsbGVyIG9yIGEgdGhvcm91Z2ggbWFudWFsIGF1ZGl0IHdvdWxkIGxpa2VseSB1bmNvdmVyLgoKTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgYW5kLCBtb3N0IGltcG9ydGFudGx5LCBzeXprYWxsZXIuIElmIGl0IGlzLCB0aGVuIHRoZSBmaXggY2FuIGFjdHVhbGx5IGJlIHRlc3RlZCB0byBlbnN1cmUgdGhlIGZpeCBpcyB3b3JraW5nIGFzIGludGVuZGVkLgoKVG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIHJlYWNoYWJsZSBJIG5lZWQgdG8gbG9vayBhdCBob3cgTkZDIGRpZ2l0YWwgY2FuIGJlIGV4ZXJjaXNlZC4gVGhlIGBuZmNzaW0uY2AgdmlydHVhbCBORkMgZGV2aWNlIGlzIGEgZ29vZCBjYW5kaWRhdGUsIGJ1dCBpcyBpdCBlbmFibGVkIGluIHN5emthbGxlciBvciBjYW4gaXQgYmUgY29ubmVjdGVkIHRvIGl0PwoKU3l6a2FsbGVyIHN1cHBvcnRzIGBzeXpfdXNiX2Nvbm5lY3RgIG9yIGRpcmVjdCBVU0IgZW11bGF0aW9uLCBhbmQgSSBrbm93IHRoYXQgYHBvcnQxMDAuY2AgaXMgYSBVU0IgZHJpdmVyLiAgQ2hlY2tpbmcgdGhlIGRldmljZSB0YWJsZSBjb25maXJtcyB0aGF0IGBwb3J0MTAwYCBzdXBwb3J0cyBhIGNvdXBsZSBvZiBTb255IE5GQyBkZXZpY2VzICgweDA1NGM6MHgwNmMxIGFuZCAweDA1NGM6MHgwNmMzKS4gWWVzISBTeXprYWxsZXIgZnV6emVzIFVTQiBkcml2ZXJzIHRocm91Z2ggUmF3IEdhZGdldCBhbmQgYHBvcnQxMDBgIGlzIG9uZS4KClRoaXMgaXMgcHJvbWlzaW5nIHNpbmNlIFVTQiBzdXBwb3J0IGlzIGF2YWlsYWJsZS4gIEkmIzM5O2xsIGFsc28gaGF2ZSB0byBjaGVjayB0aGUgbmV0bGluayBpbnRlcmZhY2UsIGVzcGVjaWFsbHkgdGhlIERFUCBjb21tYW5kcyB0byBzZWUgaWYgdGhhdCYjMzk7cyByZWFjaGFibGUuIFN5emthbGxlciBpbXBsZW1lbnRzIHRoZSBgbmV0L25mY2AgbmV0bGluayBhbmQgc29ja2V0IGludGVyZmFjZXMgKGBnZW5sYCBmYW1pbHkgYG5mY2AgYW5kIGBBRl9ORkNgKSwgc28gSSB3aWxsIGludmVzdGlnYXRlIHRoZW0gdG8gc2VlIGhvdyBERVAgY29tbWFuZHMgYXJlIHRyaWdnZXJlZCBhbmQgaWYgdGhleSBhcmUgcmVsZXZhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05GQ19DTURfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25mYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmZjL25ldGxpbmsuYz02MT1zdGF0aWMgaW50IG5mY19nZW5sX3NlbmRfdGFyZ2V0KHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBuZmNfdGFyZ2V0ICp0YXJnZXQsXG4tLVxubmV0L25mYy9uZXRsaW5rLmMtNjYtXHRoZHIgPSBnZW5sbXNnX3B1dChtc2csIE5FVExJTktfQ0IoY2ItXHUwMDNlc2tiKS5wb3J0aWQsIGNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEsXG5uZXQvbmZjL25ldGxpbmsuYzo2NzpcdFx0XHQgIFx1MDAyNm5mY19nZW5sX2ZhbWlseSwgZmxhZ3MsIE5GQ19DTURfR0VUX1RBUkdFVCk7XG5uZXQvbmZjL25ldGxpbmsuYy02OC1cdGlmICghaGRyKVxuLS1cbm5ldC9uZmMvbmV0bGluay5jPTU3Mj1zdGF0aWMgaW50IG5mY19nZW5sX3NlbmRfZGV2aWNlKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBuZmNfZGV2ICpkZXYsXG4tLVxubmV0L25mYy9uZXRsaW5rLmMtNTc5LVx0aGRyID0gZ2VubG1zZ19wdXQobXNnLCBwb3J0aWQsIHNlcSwgXHUwMDI2bmZjX2dlbmxfZmFtaWx5LCBmbGFncyxcbm5ldC9uZmMvbmV0bGluay5jOjU4MDpcdFx0XHQgIE5GQ19DTURfR0VUX0RFVklDRSk7XG5uZXQvbmZjL25ldGxpbmsuYy01ODEtXHRpZiAoIWhkcilcbi0tXG5uZXQvbmZjL25ldGxpbmsuYz02NTI9aW50IG5mY19nZW5sX2RlcF9saW5rX3VwX2V2ZW50KHN0cnVjdCBuZmNfZGV2ICpkZXYsIHUzMiB0YXJnZXRfaWR4LFxuLS1cbm5ldC9uZmMvbmV0bGluay5jLTY2My1cbm5ldC9uZmMvbmV0bGluay5jOjY2NDpcdGhkciA9IGdlbmxtc2dfcHV0KG1zZywgMCwgMCwgXHUwMDI2bmZjX2dlbmxfZmFtaWx5LCAwLCBORkNfQ01EX0RFUF9MSU5LX1VQKTtcbm5ldC9uZmMvbmV0bGluay5jLTY2NS1cdGlmICghaGRyKVxuLS1cbm5ldC9uZmMvbmV0bGluay5jPTY5MT1pbnQgbmZjX2dlbmxfZGVwX2xpbmtfZG93bl9ldmVudChzdHJ1Y3QgbmZjX2RldiAqZGV2KVxuLS1cbm5ldC9uZmMvbmV0bGluay5jLTcwMi1cdGhkciA9IGdlbmxtc2dfcHV0KG1zZywgMCwgMCwgXHUwMDI2bmZjX2dlbmxfZmFtaWx5LCAwLFxubmV0L25mYy9uZXRsaW5rLmM6NzAzOlx0XHRcdCAgTkZDX0NNRF9ERVBfTElOS19ET1dOKTtcbm5ldC9uZmMvbmV0bGluay5jLTcwNC1cdGlmICghaGRyKVxuLS1cbm5ldC9uZmMvbmV0bGluay5jPTk5Mj1zdGF0aWMgaW50IG5mY19nZW5sX3NlbmRfcGFyYW1zKHN0cnVjdCBza19idWZmICptc2csXG4tLVxubmV0L25mYy9uZXRsaW5rLmMtOTk4LVx0aGRyID0gZ2VubG1zZ19wdXQobXNnLCBwb3J0aWQsIHNlcSwgXHUwMDI2bmZjX2dlbmxfZmFtaWx5LCAwLFxubmV0L25mYy9uZXRsaW5rLmM6OTk5Olx0XHRcdCAgTkZDX0NNRF9MTENfR0VUX1BBUkFNUyk7XG5uZXQvbmZjL25ldGxpbmsuYy0xMDAwLVx0aWYgKCFoZHIpXG4tLVxubmV0L25mYy9uZXRsaW5rLmM9MTI1ND1pbnQgbmZjX2dlbmxfZndfZG93bmxvYWRfZG9uZShzdHJ1Y3QgbmZjX2RldiAqZGV2LCBjb25zdCBjaGFyICpmaXJtd2FyZV9uYW1lLFxuLS1cbm5ldC9uZmMvbmV0bGluay5jLTEyNjQtXHRoZHIgPSBnZW5sbXNnX3B1dChtc2csIDAsIDAsIFx1MDAyNm5mY19nZW5sX2ZhbWlseSwgMCxcbm5ldC9uZmMvbmV0bGluay5jOjEyNjU6XHRcdFx0ICBORkNfQ01EX0ZXX0RPV05MT0FEKTtcbm5ldC9uZmMvbmV0bGluay5jLTEyNjYtXHRpZiAoIWhkcilcbi0tXG5uZXQvbmZjL25ldGxpbmsuYz0xMzMyPXN0YXRpYyBpbnQgbmZjX2dlbmxfc2VuZF9zZShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgbmZjX2RldiAqZGV2LFxuLS1cbm5ldC9uZmMvbmV0bGluay5jLTEzNDEtXHRcdGhkciA9IGdlbmxtc2dfcHV0KG1zZywgcG9ydGlkLCBzZXEsIFx1MDAyNm5mY19nZW5sX2ZhbWlseSwgZmxhZ3MsXG5uZXQvbmZjL25ldGxpbmsuYzoxMzQyOlx0XHRcdFx0ICBORkNfQ01EX0dFVF9TRSk7XG5uZXQvbmZjL25ldGxpbmsuYy0xMzQzLVx0XHRpZiAoIWhkcilcbi0tXG5uZXQvbmZjL25ldGxpbmsuYz0xNDcyPXN0YXRpYyB2b2lkIHNlX2lvX2NiKHZvaWQgKmNvbnRleHQsIHU4ICphcGR1LCBzaXplX3QgYXBkdV9sZW4sIGludCBlcnIpXG4tLVxubmV0L25mYy9uZXRsaW5rLmMtMTQ4NC1cdGhkciA9IGdlbmxtc2dfcHV0KG1zZywgMCwgMCwgXHUwMDI2bmZjX2dlbmxfZmFtaWx5LCAwLFxubmV0L25mYy9uZXRsaW5rLmM6MTQ4NTpcdFx0XHQgIE5GQ19DTURfU0VfSU8pO1xubmV0L25mYy9uZXRsaW5rLmMtMTQ4Ni1cdGlmICghaGRyKVxuLS1cbm5ldC9uZmMvbmV0bGluay5jPTE2Mjg9X19uZmNfYWxsb2NfdmVuZG9yX2NtZF9za2Ioc3RydWN0IG5mY19kZXYgKmRldiwgaW50IGFwcHJveGxlbixcbi0tXG5uZXQvbmZjL25ldGxpbmsuYy0xNjM5LVxubmV0L25mYy9uZXRsaW5rLmM6MTY0MDpcdGhkciA9IG5mY19oZHJfcHV0KHNrYiwgcG9ydGlkLCBzZXEsIDAsIE5GQ19DTURfVkVORE9SKTtcbm5ldC9uZmMvbmV0bGluay5jLTE2NDEtXHRpZiAoIWhkcikge1xuLS1cbm5ldC9uZmMvbmV0bGluay5jPTE2OTY9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX29wcyBuZmNfZ2VubF9vcHNbXSA9IHtcbm5ldC9uZmMvbmV0bGluay5jLTE2OTctXHR7XG5uZXQvbmZjL25ldGxpbmsuYzoxNjk4Olx0XHQuY21kID0gTkZDX0NNRF9HRVRfREVWSUNFLFxubmV0L25mYy9uZXRsaW5rLmMtMTY5OS1cdFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxuLS1cbm5ldC9uZmMvbmV0bGluay5jLTE3MDQtXHR7XG5uZXQvbmZjL25ldGxpbmsuYzoxNzA1Olx0XHQuY21kID0gTkZDX0NNRF9ERVZfVVAsXG5uZXQvbmZjL25ldGxpbmsuYy0xNzA2LVx0XHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXG4tLVxubmV0L25mYy9uZXRsaW5rLmMtMTcxMC1cdHtcbm5ldC9uZmMvbmV0bGluay5jOjE3MTE6XHRcdC5jbWQgPSBORkNfQ01EX0RFVl9ET1dOLFxubmV0L25mYy9uZXRsaW5rLmMtMTcxMi1cdFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxuLS1cbm5ldC9uZmMvbmV0bGluay5jLTE3MTYtXHR7XG5uZXQvbmZjL25ldGxpbmsuYzoxNzE3Olx0XHQuY21kID0gTkZDX0NNRF9TVEFSVF9QT0xMLFxubmV0L25mYy9uZXRsaW5rLmMtMTcxOC1cdFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxuLS1cbm5ldC9uZmMvbmV0bGluay5jLTE3MjItXHR7XG5uZXQvbmZjL25ldGxpbmsuYzoxNzIzOlx0XHQuY21kID0gTkZDX0NNRF9TVE9QX1BPTEwsXG5uZXQvbmZjL25ldGxpbmsuYy0xNzI0LVx0XHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXG4tLVxubmV0L25mYy9uZXRsaW5rLmMtMTcyOC1cdHtcbm5ldC9uZmMvbmV0bGluay5jOjE3Mjk6XHRcdC5jbWQgPSBORkNfQ01EX0RFUF9MSU5LX1VQLFxubmV0L25mYy9uZXRsaW5rLmMtMTczMC1cdFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxuLS1cbm5ldC9uZmMvbmV0bGluay5jLTE3MzQtXHR7XG5uZXQvbmZjL25ldGxpbmsuYzoxNzM1Olx0XHQuY21kID0gTkZDX0NNRF9ERVBfTElOS19ET1dOLFxubmV0L25mYy9uZXRsaW5rLmMtMTczNi1cdFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxuLS1cbm5ldC9uZmMvbmV0bGluay5jLTE3NDAtXHR7XG5uZXQvbmZjL25ldGxpbmsuYzoxNzQxOlx0XHQuY21kID0gTkZDX0NNRF9HRVRfVEFSR0VULFxubmV0L25mYy9uZXRsaW5rLmMtMTc0Mi1cdFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8XG4tLVxubmV0L25mYy9uZXRsaW5rLmMtMTc0Ny1cdHtcbm5ldC9uZmMvbmV0bGluay5jOjE3NDg6XHRcdC5jbWQgPSBORkNfQ01EX0xMQ19HRVRfUEFSQU1TLFxubmV0L25mYy9uZXRsaW5rLmMtMTc0OS1cdFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxuLS1cbm5ldC9uZmMvbmV0bGluay5jLTE3NTItXHR7XG5uZXQvbmZjL25ldGxpbmsuYzoxNzUzOlx0XHQuY21kID0gTkZDX0NNRF9MTENfU0VUX1BBUkFNUyxcbm5ldC9uZmMvbmV0bGluay5jLTE3NTQtXHRcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcbi0tXG5uZXQvbmZjL25ldGxpbmsuYy0xNzU4LVx0e1xubmV0L25mYy9uZXRsaW5rLmM6MTc1OTpcdFx0LmNtZCA9IE5GQ19DTURfTExDX1NEUkVRLFxubmV0L25mYy9uZXRsaW5rLmMtMTc2MC1cdFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxuLS1cbm5ldC9uZmMvbmV0bGluay5jLTE3NjQtXHR7XG5uZXQvbmZjL25ldGxpbmsuYzoxNzY1Olx0XHQuY21kID0gTkZDX0NNRF9GV19ET1dOTE9BRCxcbm5ldC9uZmMvbmV0bGluay5jLTE3NjYtXHRcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcbi0tXG5uZXQvbmZjL25ldGxpbmsuYy0xNzcwLVx0e1xubmV0L25mYy9uZXRsaW5rLmM6MTc3MTpcdFx0LmNtZCA9IE5GQ19DTURfRU5BQkxFX1NFLFxubmV0L25mYy9uZXRsaW5rLmMtMTc3Mi1cdFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxuLS1cbm5ldC9uZmMvbmV0bGluay5jLTE3NzYtXHR7XG5uZXQvbmZjL25ldGxpbmsuYzoxNzc3Olx0XHQuY21kID0gTkZDX0NNRF9ESVNBQkxFX1NFLFxubmV0L25mYy9uZXRsaW5rLmMtMTc3OC1cdFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxuLS1cbm5ldC9uZmMvbmV0bGluay5jLTE3ODItXHR7XG5uZXQvbmZjL25ldGxpbmsuYzoxNzgzOlx0XHQuY21kID0gTkZDX0NNRF9HRVRfU0UsXG5uZXQvbmZjL25ldGxpbmsuYy0xNzg0LVx0XHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXG4tLVxubmV0L25mYy9uZXRsaW5rLmMtMTc4OC1cdHtcbm5ldC9uZmMvbmV0bGluay5jOjE3ODk6XHRcdC5jbWQgPSBORkNfQ01EX1NFX0lPLFxubmV0L25mYy9uZXRsaW5rLmMtMTc5MC1cdFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxuLS1cbm5ldC9uZmMvbmV0bGluay5jLTE3OTQtXHR7XG5uZXQvbmZjL25ldGxpbmsuYzoxNzk1Olx0XHQuY21kID0gTkZDX0NNRF9BQ1RJVkFURV9UQVJHRVQsXG5uZXQvbmZjL25ldGxpbmsuYy0xNzk2LVx0XHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXG4tLVxubmV0L25mYy9uZXRsaW5rLmMtMTgwMC1cdHtcbm5ldC9uZmMvbmV0bGluay5jOjE4MDE6XHRcdC5jbWQgPSBORkNfQ01EX1ZFTkRPUixcbm5ldC9uZmMvbmV0bGluay5jLTE4MDItXHRcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcbi0tXG5uZXQvbmZjL25ldGxpbmsuYy0xODA2LVx0e1xubmV0L25mYy9uZXRsaW5rLmM6MTgwNzpcdFx0LmNtZCA9IE5GQ19DTURfREVBQ1RJVkFURV9UQVJHRVQsXG5uZXQvbmZjL25ldGxpbmsuYy0xODA4LVx0XHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXG4tLVxubmV0L25mYy9uZXRsaW5rLmM9MTgxND1zdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IG5mY19nZW5sX2ZhbWlseSBfX3JvX2FmdGVyX2luaXQgPSB7XG4tLVxubmV0L25mYy9uZXRsaW5rLmMtMTgyMi1cdC5uX29wcyA9IEFSUkFZX1NJWkUobmZjX2dlbmxfb3BzKSxcbm5ldC9uZmMvbmV0bGluay5jOjE4MjM6XHQucmVzdl9zdGFydF9vcCA9IE5GQ19DTURfREVBQ1RJVkFURV9UQVJHRVQgJiM0MzsgMSxcbm5ldC9uZmMvbmV0bGluay5jLTE4MjQtXHQubWNncnBzID0gbmZjX2dlbmxfbWNncnBzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTIyNQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTkZDIEdlbmVyaWMgTmV0bGluayBPcGVyYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgbmZjX2dlbmxfb3BzYCBzdHJ1Y3R1cmUuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93OyBJIG5lZWQgdG8gc2VlIHdoYXQgZWFjaCBjb21tYW5kIGFjdHVhbGx5ICpkb2VzKi4gYE5GQ19DTURfU1RBUlRfUE9MTGAsIG9idmlvdXNseSwgaW5pdGlhdGVzIGEgcG9sbGluZyBzZXF1ZW5jZS4gTm93LCBgTkZDX0NNRF9ERVBfTElOS19VUGAuLi4gdGhhdCYjMzk7cyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLCBlc3RhYmxpc2hpbmcgYSBEYXRhIEV4Y2hhbmdlIFByb3RvY29sIChERVApIGxpbmsuIE15IG1haW4gYXJlYSBvZiBleHBlcnRpc2UgaXMgTkZDLCBzbyB0aGF0IERFUCBsaW5rIGlzIGEgY3JpdGljYWwgcGhhc2UgdG8gdW5kZXJzdGFuZC4KClNvLCBJIG5lZWQgdG8ga25vdyB0aGUgZGV0YWlscyEgV2hhdCYjMzk7cyBoYXBwZW5pbmcgKmR1cmluZyogdGhlIGxpbmstdXA/IEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLiBUaGUgb2J2aW91cyBuZXh0IHN0ZXAgaXMgdG8gc2VhcmNoIHRoZSBjb2RlYmFzZSBmb3IgdGhlIHJlbGV2YW50IGZ1bmN0aW9uIGNhbGxzLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBjYWxscyByZWxhdGVkIHRvIEFUUiAoQW5zd2VyIFRvIFJlc2V0KSBleGNoYW5nZSBiZWNhdXNlIGl0IGlzIGEgdml0YWwgcGFydCBvZiBpbml0aWF0aW5nIGNvbW11bmljYXRpb24uIEkgYW0gZ29pbmcgdG8gc2VhcmNoIGZvciBgZGlnaXRhbF9pbl9zZW5kX2F0cl9yZXFgLCBgZGlnaXRhbF90Z19yZWN2X2F0cl9yZXFgLCBhbmQgdGhlIGBkaWdpdGFsX2RlcF9saW5rX3VwYCBmdW5jdGlvbiBpdHNlbGYuIFRoZXNlIHdpbGwgZ2l2ZSBtZSBhIGdyZWF0IG92ZXJ2aWV3IG9mIHRoZSBpbml0aWFsaXphdGlvbiBwcm90b2NvbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwX2xpbmtfdXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmZjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZmMvY29yZS5jPTI2OD1zdGF0aWMgc3RydWN0IG5mY190YXJnZXQgKm5mY19maW5kX3RhcmdldChzdHJ1Y3QgbmZjX2RldiAqZGV2LCB1MzIgdGFyZ2V0X2lkeClcbi0tXG5uZXQvbmZjL2NvcmUuYy0yNzktXG5uZXQvbmZjL2NvcmUuYzoyODA6aW50IG5mY19kZXBfbGlua191cChzdHJ1Y3QgbmZjX2RldiAqZGV2LCBpbnQgdGFyZ2V0X2luZGV4LCB1OCBjb21tX21vZGUpXG5uZXQvbmZjL2NvcmUuYy0yODEte1xuLS1cbm5ldC9uZmMvY29yZS5jLTI4OC1cbm5ldC9uZmMvY29yZS5jOjI4OTpcdGlmICghZGV2LVx1MDAzZW9wcy1cdTAwM2VkZXBfbGlua191cClcbm5ldC9uZmMvY29yZS5jLTI5MC1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZmMvY29yZS5jLTI5OC1cbm5ldC9uZmMvY29yZS5jOjI5OTpcdGlmIChkZXYtXHUwMDNlZGVwX2xpbmtfdXAgPT0gdHJ1ZSkge1xubmV0L25mYy9jb3JlLmMtMzAwLVx0XHRyYyA9IC1FQUxSRUFEWTtcbi0tXG5uZXQvbmZjL2NvcmUuYy0zMTUtXG5uZXQvbmZjL2NvcmUuYzozMTY6XHRyYyA9IGRldi1cdTAwM2VvcHMtXHUwMDNlZGVwX2xpbmtfdXAoZGV2LCB0YXJnZXQsIGNvbW1fbW9kZSwgZ2IsIGdiX2xlbik7XG5uZXQvbmZjL2NvcmUuYy0zMTctXHRpZiAoIXJjKSB7XG4tLVxubmV0L25mYy9jb3JlLmM9MzI3PWludCBuZmNfZGVwX2xpbmtfZG93bihzdHJ1Y3QgbmZjX2RldiAqZGV2KVxuLS1cbm5ldC9uZmMvY29yZS5jLTM0Mi1cbm5ldC9uZmMvY29yZS5jOjM0MzpcdGlmIChkZXYtXHUwMDNlZGVwX2xpbmtfdXAgPT0gZmFsc2UpIHtcbm5ldC9uZmMvY29yZS5jLTM0NC1cdFx0cmMgPSAtRUFMUkVBRFk7XG4tLVxubmV0L25mYy9jb3JlLmMtMzQ5LVx0aWYgKCFyYykge1xubmV0L25mYy9jb3JlLmM6MzUwOlx0XHRkZXYtXHUwMDNlZGVwX2xpbmtfdXAgPSBmYWxzZTtcbm5ldC9uZmMvY29yZS5jLTM1MS1cdFx0ZGV2LVx1MDAzZWFjdGl2ZV90YXJnZXQgPSBOVUxMO1xuLS1cbm5ldC9uZmMvY29yZS5jPTM2Mz1pbnQgbmZjX2RlcF9saW5rX2lzX3VwKHN0cnVjdCBuZmNfZGV2ICpkZXYsIHUzMiB0YXJnZXRfaWR4LFxuLS1cbm5ldC9uZmMvY29yZS5jLTM2NS17XG5uZXQvbmZjL2NvcmUuYzozNjY6XHRkZXYtXHUwMDNlZGVwX2xpbmtfdXAgPSB0cnVlO1xubmV0L25mYy9jb3JlLmMtMzY3LVxuLS1cbm5ldC9uZmMvY29yZS5jLTM4Mi1cbm5ldC9uZmMvY29yZS5jOjM4MzpcdHJldHVybiBuZmNfZ2VubF9kZXBfbGlua191cF9ldmVudChkZXYsIHRhcmdldF9pZHgsIGNvbW1fbW9kZSwgcmZfbW9kZSk7XG5uZXQvbmZjL2NvcmUuYy0zODQtfVxuLS1cbm5ldC9uZmMvY29yZS5jPTY1NT1pbnQgbmZjX3RtX2RhdGFfcmVjZWl2ZWQoc3RydWN0IG5mY19kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbmZjL2NvcmUuYy02NTctXHQvKiBPbmx5IExMQ1AgdGFyZ2V0IG1vZGUgZm9yIG5vdyAqL1xubmV0L25mYy9jb3JlLmM6NjU4Olx0aWYgKGRldi1cdTAwM2VkZXBfbGlua191cCA9PSBmYWxzZSkge1xubmV0L25mYy9jb3JlLmMtNjU5LVx0XHRrZnJlZV9za2Ioc2tiKTtcbi0tXG5uZXQvbmZjL2NvcmUuYz02OTY9aW50IG5mY190bV9kZWFjdGl2YXRlZChzdHJ1Y3QgbmZjX2RldiAqZGV2KVxubmV0L25mYy9jb3JlLmMtNjk3LXtcbm5ldC9uZmMvY29yZS5jOjY5ODpcdGRldi1cdTAwM2VkZXBfbGlua191cCA9IGZhbHNlO1xubmV0L25mYy9jb3JlLmMtNjk5LVx0ZGV2LVx1MDAzZXJmX21vZGUgPSBORkNfUkZfTk9ORTtcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jPTU4Nj1zdGF0aWMgaW50IGRpZ2l0YWxfZGV2X2Rvd24oc3RydWN0IG5mY19kZXYgKm5mY19kZXYpXG4tLVxubmV0L25mYy9kaWdpdGFsX2NvcmUuYy01OTQtXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jOjU5NTpzdGF0aWMgaW50IGRpZ2l0YWxfZGVwX2xpbmtfdXAoc3RydWN0IG5mY19kZXYgKm5mY19kZXYsXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jLTU5Ni1cdFx0XHQgICAgICAgc3RydWN0IG5mY190YXJnZXQgKnRhcmdldCxcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jPTc0ND1zdGF0aWMgY29uc3Qgc3RydWN0IG5mY19vcHMgZGlnaXRhbF9uZmNfb3BzID0ge1xuLS1cbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmMtNzQ4LVx0LnN0b3BfcG9sbCA9IGRpZ2l0YWxfc3RvcF9wb2xsLFxubmV0L25mYy9kaWdpdGFsX2NvcmUuYzo3NDk6XHQuZGVwX2xpbmtfdXAgPSBkaWdpdGFsX2RlcF9saW5rX3VwLFxubmV0L25mYy9kaWdpdGFsX2NvcmUuYy03NTAtXHQuZGVwX2xpbmtfZG93biA9IGRpZ2l0YWxfZGVwX2xpbmtfZG93bixcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmM9NjUyPXN0YXRpYyB2b2lkIGhjaV9zdG9wX3BvbGwoc3RydWN0IG5mY19kZXYgKm5mY19kZXYpXG4tLVxubmV0L25mYy9oY2kvY29yZS5jLTY2Mi1cbm5ldC9uZmMvaGNpL2NvcmUuYzo2NjM6c3RhdGljIGludCBoY2lfZGVwX2xpbmtfdXAoc3RydWN0IG5mY19kZXYgKm5mY19kZXYsIHN0cnVjdCBuZmNfdGFyZ2V0ICp0YXJnZXQsXG5uZXQvbmZjL2hjaS9jb3JlLmMtNjY0LVx0XHRcdFx0X191OCBjb21tX21vZGUsIF9fdTggKmdiLCBzaXplX3QgZ2JfbGVuKVxuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYy02NjctXG5uZXQvbmZjL2hjaS9jb3JlLmM6NjY4Olx0aWYgKCFoZGV2LVx1MDAzZW9wcy1cdTAwM2VkZXBfbGlua191cClcbm5ldC9uZmMvaGNpL2NvcmUuYy02NjktXHRcdHJldHVybiAwO1xubmV0L25mYy9oY2kvY29yZS5jLTY3MC1cbm5ldC9uZmMvaGNpL2NvcmUuYzo2NzE6XHRyZXR1cm4gaGRldi1cdTAwM2VvcHMtXHUwMDNlZGVwX2xpbmtfdXAoaGRldiwgdGFyZ2V0LCBjb21tX21vZGUsXG5uZXQvbmZjL2hjaS9jb3JlLmMtNjcyLVx0XHRcdFx0ICAgICAgZ2IsIGdiX2xlbik7XG4tLVxubmV0L25mYy9oY2kvY29yZS5jPTk0MT1zdGF0aWMgY29uc3Qgc3RydWN0IG5mY19vcHMgaGNpX25mY19vcHMgPSB7XG4tLVxubmV0L25mYy9oY2kvY29yZS5jLTk0NS1cdC5zdG9wX3BvbGwgPSBoY2lfc3RvcF9wb2xsLFxubmV0L25mYy9oY2kvY29yZS5jOjk0NjpcdC5kZXBfbGlua191cCA9IGhjaV9kZXBfbGlua191cCxcbm5ldC9uZmMvaGNpL2NvcmUuYy05NDctXHQuZGVwX2xpbmtfZG93biA9IGhjaV9kZXBfbGlua19kb3duLFxuLS1cbm5ldC9uZmMvbGxjcF9zb2NrLmM9NjYxPXN0YXRpYyBpbnQgbGxjcF9zb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKl9hZGRyLFxuLS1cbm5ldC9uZmMvbGxjcF9zb2NrLmMtNzA1LVx0ZGV2aWNlX2xvY2soXHUwMDI2ZGV2LVx1MDAzZWRldik7XG5uZXQvbmZjL2xsY3Bfc29jay5jOjcwNjpcdGlmIChkZXYtXHUwMDNlZGVwX2xpbmtfdXAgPT0gZmFsc2UpIHtcbm5ldC9uZmMvbGxjcF9zb2NrLmMtNzA3LVx0XHRyZXQgPSAtRU5PTElOSztcbi0tXG5uZXQvbmZjL25jaS9jb3JlLmM9OTcwPXN0YXRpYyB2b2lkIG5jaV9kZWFjdGl2YXRlX3RhcmdldChzdHJ1Y3QgbmZjX2RldiAqbmZjX2Rldixcbi0tXG5uZXQvbmZjL25jaS9jb3JlLmMtOTk1LVxubmV0L25mYy9uY2kvY29yZS5jOjk5NjpzdGF0aWMgaW50IG5jaV9kZXBfbGlua191cChzdHJ1Y3QgbmZjX2RldiAqbmZjX2Rldiwgc3RydWN0IG5mY190YXJnZXQgKnRhcmdldCxcbm5ldC9uZmMvbmNpL2NvcmUuYy05OTctXHRcdFx0ICAgX191OCBjb21tX21vZGUsIF9fdTggKmdiLCBzaXplX3QgZ2JfbGVuKVxuLS1cbm5ldC9uZmMvbmNpL2NvcmUuYz0xMTQ5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZjX29wcyBuY2lfbmZjX29wcyA9IHtcbi0tXG5uZXQvbmZjL25jaS9jb3JlLmMtMTE1My1cdC5zdG9wX3BvbGwgPSBuY2lfc3RvcF9wb2xsLFxubmV0L25mYy9uY2kvY29yZS5jOjExNTQ6XHQuZGVwX2xpbmtfdXAgPSBuY2lfZGVwX2xpbmtfdXAsXG5uZXQvbmZjL25jaS9jb3JlLmMtMTE1NS1cdC5kZXBfbGlua19kb3duID0gbmNpX2RlcF9saW5rX2Rvd24sXG4tLVxubmV0L25mYy9uY2kvbnRmLmM9NzA5PXN0YXRpYyBpbnQgbmNpX3JmX2ludGZfYWN0aXZhdGVkX250Zl9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4tLVxubmV0L25mYy9uY2kvbnRmLmMtODY1LVxubmV0L25mYy9uY2kvbnRmLmM6ODY2Olx0XHQvKiBzdG9yZSBnZW5lcmFsIGJ5dGVzIHRvIGJlIHJlcG9ydGVkIGxhdGVyIGluIGRlcF9saW5rX3VwICovXG5uZXQvbmZjL25jaS9udGYuYy04NjctXHRcdGlmIChudGYucmZfaW50ZXJmYWNlID09IE5DSV9SRl9JTlRFUkZBQ0VfTkZDX0RFUCkge1xuLS1cbm5ldC9uZmMvbmV0bGluay5jPTY0MD1zdGF0aWMgaW50IG5mY19nZW5sX2R1bXBfZGV2aWNlc19kb25lKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvbmZjL25ldGxpbmsuYy02NTEtXG5uZXQvbmZjL25ldGxpbmsuYzo2NTI6aW50IG5mY19nZW5sX2RlcF9saW5rX3VwX2V2ZW50KHN0cnVjdCBuZmNfZGV2ICpkZXYsIHUzMiB0YXJnZXRfaWR4LFxubmV0L25mYy9uZXRsaW5rLmMtNjUzLVx0XHRcdCAgICAgICB1OCBjb21tX21vZGUsIHU4IHJmX21vZGUpXG4tLVxubmV0L25mYy9uZXRsaW5rLmMtNjc4LVxubmV0L25mYy9uZXRsaW5rLmM6Njc5Olx0ZGV2LVx1MDAzZWRlcF9saW5rX3VwID0gdHJ1ZTtcbm5ldC9uZmMvbmV0bGluay5jLTY4MC1cbi0tXG5uZXQvbmZjL25ldGxpbmsuYz05MTE9c3RhdGljIGludCBuZmNfZ2VubF9kZWFjdGl2YXRlX3RhcmdldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZmMvbmV0bGluay5jLTkzNS1cbm5ldC9uZmMvbmV0bGluay5jOjkzNjpzdGF0aWMgaW50IG5mY19nZW5sX2RlcF9saW5rX3VwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5uZXQvbmZjL25ldGxpbmsuYy05Mzcte1xuLS1cbm5ldC9uZmMvbmV0bGluay5jLTk2My1cbm5ldC9uZmMvbmV0bGluay5jOjk2NDpcdHJjID0gbmZjX2RlcF9saW5rX3VwKGRldiwgdGd0X2lkeCwgY29tbSk7XG5uZXQvbmZjL25ldGxpbmsuYy05NjUtXG4tLVxubmV0L25mYy9uZXRsaW5rLmM9MTA2OD1zdGF0aWMgaW50IG5mY19nZW5sX2xsY19zZXRfcGFyYW1zKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L25mYy9uZXRsaW5rLmMtMTExMS1cdGlmIChpbmZvLVx1MDAzZWF0dHJzW05GQ19BVFRSX0xMQ19QQVJBTV9MVE9dKSB7XG5uZXQvbmZjL25ldGxpbmsuYzoxMTEyOlx0XHRpZiAoZGV2LVx1MDAzZWRlcF9saW5rX3VwKSB7XG5uZXQvbmZjL25ldGxpbmsuYy0xMTEzLVx0XHRcdHJjID0gLUVJTlBST0dSRVNTO1xuLS1cbm5ldC9uZmMvbmV0bGluay5jPTExMzc9c3RhdGljIGludCBuZmNfZ2VubF9sbGNfc2RyZXEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvbmZjL25ldGxpbmsuYy0xMTYxLVxubmV0L25mYy9uZXRsaW5rLmM6MTE2MjpcdGlmIChkZXYtXHUwMDNlZGVwX2xpbmtfdXAgPT0gZmFsc2UpIHtcbm5ldC9uZmMvbmV0bGluay5jLTExNjMtXHRcdHJjID0gLUVOT0xJTks7XG4tLVxubmV0L25mYy9uZXRsaW5rLmM9MTY5Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfb3BzIG5mY19nZW5sX29wc1tdID0ge1xuLS1cbm5ldC9uZmMvbmV0bGluay5jLTE3MzAtXHRcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcbm5ldC9uZmMvbmV0bGluay5jOjE3MzE6XHRcdC5kb2l0ID0gbmZjX2dlbmxfZGVwX2xpbmtfdXAsXG5uZXQvbmZjL25ldGxpbmsuYy0xNzMyLVx0XHQuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sXG4tLVxubmV0L25mYy9uZmMuaD04Mj1pbnQgbmZjX2dlbmxfZGV2aWNlX3JlbW92ZWQoc3RydWN0IG5mY19kZXYgKmRldik7XG5uZXQvbmZjL25mYy5oLTgzLVxubmV0L25mYy9uZmMuaDo4NDppbnQgbmZjX2dlbmxfZGVwX2xpbmtfdXBfZXZlbnQoc3RydWN0IG5mY19kZXYgKmRldiwgdTMyIHRhcmdldF9pZHgsXG5uZXQvbmZjL25mYy5oLTg1LVx0XHRcdCAgICAgICB1OCBjb21tX21vZGUsIHU4IHJmX21vZGUpO1xuLS1cbm5ldC9uZmMvbmZjLmg9MTM1PWludCBuZmNfc3RvcF9wb2xsKHN0cnVjdCBuZmNfZGV2ICpkZXYpO1xubmV0L25mYy9uZmMuaC0xMzYtXG5uZXQvbmZjL25mYy5oOjEzNzppbnQgbmZjX2RlcF9saW5rX3VwKHN0cnVjdCBuZmNfZGV2ICpkZXYsIGludCB0YXJnZXRfaWR4LCB1OCBjb21tX21vZGUpO1xubmV0L25mYy9uZmMuaC0xMzgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NzAyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTk5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBORkMgRGlnaXRhbCBQcm90b2NvbCBGdXp6aW5nIFRhcmdldCoqCgpPa2F5LCBzbyB0aGUgYE5GQ19DTURfREVQX0xJTktfVVBgIGNhbGwgbGVhZHMgdG8gYSBjaGFpbjogYG5mY19kZXBfbGlua191cGAgLSZndDsgYGRldi0mZ3Q7b3BzLSZndDtkZXBfbGlua191cGAgLSZndDsgYGRpZ2l0YWxfZGVwX2xpbmtfdXBgLiBUaGlzIGlzIHdoZXJlIERFUCAoRGF0YSBFeGNoYW5nZSBQcm90b2NvbCkgY29tbXVuaWNhdGlvbiBiZWdpbnMsIGVpdGhlciBhcyBhIHRhcmdldCBvciBpbml0aWF0b3IuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLCBnaXZlbiB0aGUgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBjcml0ZXJpYS4gU3BlY2lmaWNhbGx5LCB0aGlzIGNvZGUgdG91Y2hlcyB0aGUgbmV0d29ya2luZyBjb3JlIHByb3RvY29scyBhbmQgaXMgcmVhY2hhYmxlIGJ5IHNldmVyYWwgdmlydHVhbCBwYXRod2F5cywgdGlja2luZyBhbGwgdGhlIGJveGVzLiBUaGUgbW9kaWZpY2F0aW9ucyBpbiBgbmV0L25mYy9kaWdpdGFsX2RlcC5jYCwgZXNwZWNpYWxseSBgZGlnaXRhbF9yZWN2X2RlcF9kYXRhX2dhdGhlcmAgKGJ1ZmZlciBhbGxvY2F0aW9uIGFkanVzdG1lbnRzKSBhbmQgYGRpZ2l0YWxfdGdfc2VuZF9hdHJfcmVzX2NvbXBsZXRlYCAoYm91bmRzIGNoZWNraW5nIGFuZCBlcnJvciBoYW5kbGluZyksIHNlYWwgdGhlIGRlYWwuIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBmdXp6aW5nIHN0cmF0ZWd5LiBGaXJzdCwgdGhlIGBFbmFibGVDb25maWdzYC4gVG8gZ2V0IHRoaXMgY29kZSB0byBjb21waWxlIGFuZCBiZSBleGVyY2lzZWQsIHRoZSBtaW5pbXVtIHNldCB3b3VsZCBiZTogYE5GQ2AsIGBORkNfRElHSVRBTGAsIGFuZCBhIGRyaXZlciB0aGF0IGluc3RhbnRpYXRlcyBgbmZjX2RpZ2l0YWxfZGV2YC4gVGhhdCBtZWFucyBlbmFibGluZyBlaXRoZXIgYE5GQ19TSU1gICh0aGUgaGFyZHdhcmUgc2ltdWxhdG9yKSBvciBgTkZDX1BPUlQxMDBgIChTb255IFVTQiBkZXZpY2UpLCBib3RoIG9mIHdoaWNoIGFyZSBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c3Nlcy4gIGBORkNgIGRlcGVuZHMgb24gYE5FVGAsIGFuZCBgTkZDX0RJR0lUQUxgIGRlcGVuZHMgb24gYE5GQ2AuICBgTkZDX1NJTWAgYW5kIGBORkNfUE9SVDEwMGAgZGVwZW5kIG9uIGBORkNfRElHSVRBTGAsIGFuZCBgTkZDX1BPUlQxMDBgIGFsc28gcmVxdWlyZXMgYFVTQmAuIGBVU0JfUkFXX0dBREdFVGAgb3IgYFVTQl9HQURHRVRgIGFyZSBzdGFuZGFyZC4KCk5leHQsIHRoZSBgRm9jdXNTeW1ib2xzYC4gIEkgbmVlZCB0byBwaWNrIHNwZWNpZmljIGZ1bmN0aW9uIGVudHJ5cG9pbnRzLiBBdm9pZGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucy4gVGhlIGtleSBmdW5jdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZToKLSBgZGlnaXRhbF9yZWN2X2RlcF9kYXRhX2dhdGhlcmAsIGJlY2F1c2UgaXQgaW52b2x2ZXMgY3JpdGljYWwgYnVmZmVyIGFsbG9jYXRpb24gY2hhbmdlcy4gSXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24sIGJ1dCBzaW5jZSBpdCYjMzk7cyBjYWxsZWQgaW4gdHdvIHBsYWNlcyBhbmQgaXRzIGFkZHJlc3MgaXNuJiMzOTt0IHRha2VuLCBpdCAqbWlnaHQqIGJlIGlubGluZWQuCi0gYGRpZ2l0YWxfdGdfc2VuZF9hdHJfcmVzX2NvbXBsZXRlYC4gSXRzIGFkZHJlc3MgSVMgdGFrZW4gKHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIpLCBzbyBpdCB3aWxsICpkZWZpbml0ZWx5KiBiZSBhIHN5bWJvbC4KLSBgZGlnaXRhbF9pbl9yZWN2X2RlcF9yZXNgCi0gYGRpZ2l0YWxfdGdfcmVjdl9kZXBfcmVxYApJIGFtIGdvaW5nIHRvIGZvY3VzIG9uIHRoZSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucywgYW5kIHRoZWlyIGNhbGxlcnMgdG8gaW1wcm92ZSBmdXp6aW5nIGNvdmVyYWdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkaWdpdGFsX2luX3JlY3ZfZGVwX3JlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25mYy9kaWdpdGFsX2RlcC5jPTEwMD1zdHJ1Y3QgZGlnaXRhbF9kZXBfcmVxX3JlcyB7XG4tLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTEwNS1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzoxMDY6c3RhdGljIHZvaWQgZGlnaXRhbF9pbl9yZWN2X2RlcF9yZXMoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdm9pZCAqYXJnLFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTEwNy1cdFx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqcmVzcCk7XG4tLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jPTUyOT1zdGF0aWMgaW50IGRpZ2l0YWxfaW5fc2VuZF9hY2soc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtNTU1LVx0cmMgPSBkaWdpdGFsX2luX3NlbmRfY21kKGRkZXYsIHNrYiwgZGRldi1cdTAwM2VkZXBfcnd0LFxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjU1NjpcdFx0XHRcdCBkaWdpdGFsX2luX3JlY3ZfZGVwX3JlcywgZGF0YV9leGNoKTtcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy01NTctXHRpZiAocmMpIHtcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM9NTY2PXN0YXRpYyBpbnQgZGlnaXRhbF9pbl9zZW5kX25hY2soc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtNTkwLVx0cmMgPSBkaWdpdGFsX2luX3NlbmRfY21kKGRkZXYsIHNrYiwgZGRldi1cdTAwM2VkZXBfcnd0LFxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjU5MTpcdFx0XHRcdCBkaWdpdGFsX2luX3JlY3ZfZGVwX3JlcywgZGF0YV9leGNoKTtcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy01OTItXHRpZiAocmMpXG4tLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jPTU5OD1zdGF0aWMgaW50IGRpZ2l0YWxfaW5fc2VuZF9hdG4oc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtNjIxLVx0cmMgPSBkaWdpdGFsX2luX3NlbmRfY21kKGRkZXYsIHNrYiwgZGRldi1cdTAwM2VkZXBfcnd0LFxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjYyMjpcdFx0XHRcdCBkaWdpdGFsX2luX3JlY3ZfZGVwX3JlcywgZGF0YV9leGNoKTtcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy02MjMtXHRpZiAocmMpXG4tLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jPTYyOT1zdGF0aWMgaW50IGRpZ2l0YWxfaW5fc2VuZF9ydG94KHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXG4tLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTY2MC1cdHJjID0gZGlnaXRhbF9pbl9zZW5kX2NtZChkZGV2LCBza2IsIHJ3dF9pbnQsXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6NjYxOlx0XHRcdFx0IGRpZ2l0YWxfaW5fcmVjdl9kZXBfcmVzLCBkYXRhX2V4Y2gpO1xubmV0L25mYy9kaWdpdGFsX2RlcC5jLTY2Mi1cdGlmIChyYylcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM9NjY4PXN0YXRpYyBpbnQgZGlnaXRhbF9pbl9zZW5kX3NhdmVkX3NrYihzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxuLS1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy02NzgtXHRyYyA9IGRpZ2l0YWxfaW5fc2VuZF9jbWQoZGRldiwgZGRldi1cdTAwM2VzYXZlZF9za2IsIGRkZXYtXHUwMDNlZGVwX3J3dCxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzo2Nzk6XHRcdFx0XHQgZGlnaXRhbF9pbl9yZWN2X2RlcF9yZXMsIGRhdGFfZXhjaCk7XG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtNjgwLVx0aWYgKHJjKVxuLS1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy02ODUtXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6Njg2OnN0YXRpYyB2b2lkIGRpZ2l0YWxfaW5fcmVjdl9kZXBfcmVzKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHZvaWQgKmFyZyxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy02ODctXHRcdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnJlc3ApXG4tLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jPTkwND1pbnQgZGlnaXRhbF9pbl9zZW5kX2RlcF9yZXEoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtOTM1LVx0cmMgPSBkaWdpdGFsX2luX3NlbmRfY21kKGRkZXYsIHRtcF9za2IsIGRkZXYtXHUwMDNlZGVwX3J3dCxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzo5MzY6XHRcdFx0XHQgZGlnaXRhbF9pbl9yZWN2X2RlcF9yZXMsIGRhdGFfZXhjaCk7XG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtOTM3LVx0aWYgKHJjKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4Mjk5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDoKCioqRGVsdmluZyBpbnRvIEZ1bmN0aW9uIFBvaW50ZXJzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZXNlIGNhbGxiYWNrcywgc3BlY2lmaWNhbGx5IGBkaWdpdGFsX2luX3JlY3ZfZGVwX3Jlc2AgYW5kIGBkaWdpdGFsX3RnX3JlY3ZfZGVwX3JlcWAuIFJpZ2h0LCB0aGV5JiMzOTtyZSBmdW5jdGlvbiBwb2ludGVycywgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZS4gVGhleSYjMzk7cmUgcGFzc2VkIHRvIGBkaWdpdGFsX2luX3NlbmRfY21kYCBhbmQgYGRpZ2l0YWxfdGdfbGlzdGVuYCwgcmVzcGVjdGl2ZWx5LiAgVGhhdCYjMzk7cyBob3cgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBpcyBleHRlbmRlZCwgbmVhdC4gTm93LCBzaW5jZSBJJiMzOTt2ZSBhbHJlYWR5IHNjcnV0aW5pemVkIGBkaWdpdGFsX2luX3JlY3ZfZGVwX3Jlc2AgbGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0IEkgdW5kZXJzdGFuZCBgZGlnaXRhbF90Z19yZWN2X2RlcF9yZXFgIGVxdWFsbHkgd2VsbDsgaXQmIzM5O3MgbGlrZWx5IGEgbWlycm9yIGZ1bmN0aW9uIGluIHRoZSBvdGhlciBtb2R1bGUuIEkgbmVlZCB0byBmdWxseSBncmFzcCBob3cgdGhlc2UgYXJlIGludm9rZWQgYW5kIHRoZSBpbmZvcm1hdGlvbiB0aGV5JiMzOTtyZSBleHBlY3RlZCB0byBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkaWdpdGFsX3RnX3JlY3ZfZGVwX3JlcSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25mYy9kaWdpdGFsX2RlcC5jPTEwNj1zdGF0aWMgdm9pZCBkaWdpdGFsX2luX3JlY3ZfZGVwX3JlcyhzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCB2b2lkICphcmcsXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTA3LVx0XHRcdFx0ICAgIHN0cnVjdCBza19idWZmICpyZXNwKTtcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzoxMDg6c3RhdGljIHZvaWQgZGlnaXRhbF90Z19yZWN2X2RlcF9yZXEoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdm9pZCAqYXJnLFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTEwOS1cdFx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqcmVzcCk7XG4tLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jPTk3OD1zdGF0aWMgaW50IGRpZ2l0YWxfdGdfc2VuZF9hY2soc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTAxMi1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzoxMDEzOlx0cmMgPSBkaWdpdGFsX3RnX3NlbmRfY21kKGRkZXYsIHNrYiwgMTUwMCwgZGlnaXRhbF90Z19yZWN2X2RlcF9yZXEsXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTAxNC1cdFx0XHRcdCBkYXRhX2V4Y2gpO1xuLS1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYz0xMDI0PXN0YXRpYyBpbnQgZGlnaXRhbF90Z19zZW5kX2F0bihzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2KVxuLS1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xMDUxLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjEwNTI6XHRyYyA9IGRpZ2l0YWxfdGdfc2VuZF9jbWQoZGRldiwgc2tiLCAxNTAwLCBkaWdpdGFsX3RnX3JlY3ZfZGVwX3JlcSxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xMDUzLVx0XHRcdFx0IE5VTEwpO1xuLS1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYz0xMDYwPXN0YXRpYyBpbnQgZGlnaXRhbF90Z19zZW5kX3NhdmVkX3NrYihzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2KVxuLS1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xMDY5LVx0cmMgPSBkaWdpdGFsX3RnX3NlbmRfY21kKGRkZXYsIGRkZXYtXHUwMDNlc2F2ZWRfc2tiLCAxNTAwLFxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjEwNzA6XHRcdFx0XHQgZGlnaXRhbF90Z19yZWN2X2RlcF9yZXEsIE5VTEwpO1xubmV0L25mYy9kaWdpdGFsX2RlcC5jLTEwNzEtXHRpZiAocmMpXG4tLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTEwNzYtXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6MTA3NzpzdGF0aWMgdm9pZCBkaWdpdGFsX3RnX3JlY3ZfZGVwX3JlcShzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCB2b2lkICphcmcsXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTA3OC1cdFx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqcmVzcClcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM9MTI5Nz1pbnQgZGlnaXRhbF90Z19zZW5kX2RlcF9yZXMoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTMzMS1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzoxMzMyOlx0cmMgPSBkaWdpdGFsX3RnX3NlbmRfY21kKGRkZXYsIHRtcF9za2IsIDE1MDAsIGRpZ2l0YWxfdGdfcmVjdl9kZXBfcmVxLFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTEzMzMtXHRcdFx0XHQgTlVMTCk7XG4tLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jPTEzNDg9c3RhdGljIHZvaWQgZGlnaXRhbF90Z19zZW5kX3BzbF9yZXNfY29tcGxldGUoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTM1OS1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzoxMzYwOlx0ZGlnaXRhbF90Z19saXN0ZW4oZGRldiwgMTUwMCwgZGlnaXRhbF90Z19yZWN2X2RlcF9yZXEsIE5VTEwpO1xubmV0L25mYy9kaWdpdGFsX2RlcC5jLTEzNjEtXG4tLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jPTE0Njc9c3RhdGljIHZvaWQgZGlnaXRhbF90Z19zZW5kX2F0cl9yZXNfY29tcGxldGUoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTQ4OC1cdGVsc2Vcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzoxNDg5Olx0XHRkaWdpdGFsX3RnX3JlY3ZfZGVwX3JlcShkZGV2LCBhcmcsIHJlc3ApO1xubmV0L25mYy9kaWdpdGFsX2RlcC5jLTE0OTAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5NjAxCgkJCQkJCQlvdXRwdXQ6IDIzMwoJCQkJCQkJdGhvdWdodHM6IDM4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFN0cmF0ZWd5IEFzc2Vzc21lbnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSBuZWVkIHRvIGRlZmluZSB0aGUgZnV6emluZyBzY29wZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gbW9kaWZpY2F0aW9ucy4gRmlyc3QsIEkmIzM5O3ZlIGlkZW50aWZpZWQgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uczogYGRpZ2l0YWxfcmVjdl9kZXBfZGF0YV9nYXRoZXJgIGFuZCBgZGlnaXRhbF90Z19zZW5kX2F0cl9yZXNfY29tcGxldGVgLiBUaGVzZSBhcmUga2V5LgoKTmV4dCwgdGhlIGVudHJ5IHBvaW50cyBvciBkaXJlY3QgZmVhdHVyZSBjYWxsZXJzIGFyZTogYGRpZ2l0YWxfdGdfcmVjdl9kZXBfcmVxYCwgYGRpZ2l0YWxfaW5fcmVjdl9kZXBfcmVzYCwgYW5kIGBkaWdpdGFsX3RnX3NlbmRfYXRyX3Jlc2AuIFRoZXNlIGFyZSB0aGUgc3RhcnRpbmcgcG9pbnRzIGZvciBleGVyY2lzaW5nIHRoZSBtb2RpZmllZCBjb2RlLgoKTm93LCBmb3IgRm9jdXNTeW1ib2xzLCBJJiMzOTtsbCBjb21iaW5lIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYW5kIGVudHJ5IHBvaW50cyBpbnRvIGEgc2luZ2xlIGxpc3Q6IGBkaWdpdGFsX3JlY3ZfZGVwX2RhdGFfZ2F0aGVyYCwgYGRpZ2l0YWxfdGdfc2VuZF9hdHJfcmVzX2NvbXBsZXRlYCwgYGRpZ2l0YWxfdGdfcmVjdl9kZXBfcmVxYCwgYGRpZ2l0YWxfaW5fcmVjdl9kZXBfcmVzYCwgYW5kIGBkaWdpdGFsX3RnX3NlbmRfYXRyX3Jlc2AuIFRoaXMgd2lsbCBiZSBteSB0YXJnZXQgbGlzdCBmb3IgZnV6emluZyBmb2N1cy4KCkkgbmVlZCB0byBjb25maXJtIHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhlIEVuYWJsZUNvbmZpZ3MgYXJlIGBORkNgIGFuZCBgTkZDX0RJR0lUQUxgLCB3aGljaCBhcmUgY3J1Y2lhbC4gSSBzaG91bGQgYWxzbyByZW1lbWJlciB0aGF0IGBORkNfU0lNYCBhbmQgYE5GQ19QT1JUMTAwYCBhcmUgdmlydHVhbCBkZXZpY2UgZHJpdmVycyB0aGF0IGRlcGVuZCBvbiBgTkZDX0RJR0lUQUxgLiBJJiMzOTtsbCBjcm9zcy1yZWZlcmVuY2UgdGhlc2Ugd2l0aCBgbmV0L25mYy9LY29uZmlnYCBhbmQgYGRyaXZlcnMvbmZjL0tjb25maWdgIHRvIGVuc3VyZSBgQ09ORklHX05GQ2AsIGBDT05GSUdfTkZDX0RJR0lUQUxgLCBgQ09ORklHX05GQ19TSU1gLCBhbmQgYENPTkZJR19ORkNfUE9SVDEwMGAgYXJlIGFsbCBjb3JyZWN0bHkgZGVmaW5lZC4KCldpdGggYWxsIG9mIHRoaXMgdmVyaWZpZWQsIEkgY2FuIG5vdyBwcm9jZWVkIHRvIHNldCB0aGUgcmVzdWx0cywgZXZlcnl0aGluZyBpcyBjaGVja2VkIGFuZCB2YWxpZGF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORkMmIzM0OywKICAgICYjMzQ7TkZDX0RJR0lUQUwmIzM0OywKICAgICYjMzQ7TkZDX1NJTSYjMzQ7LAogICAgJiMzNDtORkNfUE9SVDEwMCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RpZ2l0YWxfcmVjdl9kZXBfZGF0YV9nYXRoZXImIzM0OywKICAgICYjMzQ7ZGlnaXRhbF90Z19zZW5kX2F0cl9yZXNfY29tcGxldGUmIzM0OywKICAgICYjMzQ7ZGlnaXRhbF90Z19yZWN2X2RlcF9yZXEmIzM0OywKICAgICYjMzQ7ZGlnaXRhbF9pbl9yZWN2X2RlcF9yZXMmIzM0OywKICAgICYjMzQ7ZGlnaXRhbF90Z19zZW5kX2F0cl9yZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIGxvZ2ljIGluIHRoZSBORkMgRGlnaXRhbCBQcm90b2NvbCBzdGFjayAobmV0L25mYy9kaWdpdGFsX2RlcC5jKS4gU3BlY2lmaWNhbGx5LCBpdCBhbHRlcnMgYnVmZmVyIGFsbG9jYXRpb24gYW5kIGhlYWRyb29tL3RhaWxyb29tIGV4cGFuc2lvbiBpbiBkaWdpdGFsX3JlY3ZfZGVwX2RhdGFfZ2F0aGVyKCksIGFuZCBhZGRzIGxlbmd0aC9ib3VuZHMgdmFsaWRhdGlvbiBjaGVja3MgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIG9uIGluY29taW5nIHJlc3BvbnNlIGZyYW1lcyBpbiBkaWdpdGFsX3RnX3NlbmRfYXRyX3Jlc19jb21wbGV0ZSgpLiBUaGlzIHN1YnN5c3RlbSBpcyBhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rL3NvY2tldHMgYW5kIGVtdWxhdGVkIE5GQyBkZXZpY2VzIChzdWNoIGFzIG5mY3NpbSBvciBwb3J0MTAwIFVTQiBlbXVsYXRpb24pLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZDJiMzNDssCiAgICAmIzM0O05GQ19ESUdJVEFMJiMzNDssCiAgICAmIzM0O05GQ19TSU0mIzM0OywKICAgICYjMzQ7TkZDX1BPUlQxMDAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkaWdpdGFsX3JlY3ZfZGVwX2RhdGFfZ2F0aGVyJiMzNDssCiAgICAmIzM0O2RpZ2l0YWxfdGdfc2VuZF9hdHJfcmVzX2NvbXBsZXRlJiMzNDssCiAgICAmIzM0O2RpZ2l0YWxfdGdfcmVjdl9kZXBfcmVxJiMzNDssCiAgICAmIzM0O2RpZ2l0YWxfaW5fcmVjdl9kZXBfcmVzJiMzNDssCiAgICAmIzM0O2RpZ2l0YWxfdGdfc2VuZF9hdHJfcmVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBsb2dpYyBpbiB0aGUgTkZDIERpZ2l0YWwgUHJvdG9jb2wgc3RhY2sgKG5ldC9uZmMvZGlnaXRhbF9kZXAuYykuIFNwZWNpZmljYWxseSwgaXQgYWx0ZXJzIGJ1ZmZlciBhbGxvY2F0aW9uIGFuZCBoZWFkcm9vbS90YWlscm9vbSBleHBhbnNpb24gaW4gZGlnaXRhbF9yZWN2X2RlcF9kYXRhX2dhdGhlcigpLCBhbmQgYWRkcyBsZW5ndGgvYm91bmRzIHZhbGlkYXRpb24gY2hlY2tzIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyBvbiBpbmNvbWluZyByZXNwb25zZSBmcmFtZXMgaW4gZGlnaXRhbF90Z19zZW5kX2F0cl9yZXNfY29tcGxldGUoKS4gVGhpcyBzdWJzeXN0ZW0gaXMgYWNjZXNzaWJsZSB2aWEgbmV0bGluay9zb2NrZXRzIGFuZCBlbXVsYXRlZCBORkMgZGV2aWNlcyAoc3VjaCBhcyBuZmNzaW0gb3IgcG9ydDEwMCBVU0IgZW11bGF0aW9uKSwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBuZXQvbmZjL2RpZ2l0YWxfZGVwLmMgaW4gdHdvIHBsYWNlczpcbjEuIEluIGBkaWdpdGFsX3JlY3ZfZGVwX2RhdGFfZ2F0aGVyKClgLCBpdCBzd2l0Y2hlcyB0aGUgYWxsb2NhdGlvbiBvZiBgZGRldi1cdTAwM2VjaGFpbmluZ19za2JgIGZyb20gYG5mY19hbGxvY19yZWN2X3NrYigpYCB0byBgZGlnaXRhbF9za2JfYWxsb2MoKWAsIGFuZCBhZGp1c3RzIGBza2JfY29weV9leHBhbmQoKWAgYXJndW1lbnRzIHRvIGVuc3VyZSBkZXZpY2UgaGVhZHJvb20gYW5kIHRhaWxyb29tIChgdHhfaGVhZHJvb21gIGFuZCBgdHhfdGFpbHJvb21gKSBhcmUgcHJvcGVybHkgYWxsb2NhdGVkLiBBcyBkYXRhIGlzIGNvcGllZCBpbnRvIHRoZSBza2IgdmlhIGBza2JfcHV0X2RhdGEoLi4uLCByZXNwLVx1MDAzZWRhdGEsIHJlc3AtXHUwMDNlbGVuKWAsIG9ubHkgdGhlIGV4cGxpY2l0bHkgcmVjZWl2ZWQgYnl0ZXMgYXJlIGFkZGVkIHRvIHRoZSBwYWNrZXQgbGVuZ3RoLCBsZWF2aW5nIG5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBleHBvc2VkLlxuMi4gSW4gYGRpZ2l0YWxfdGdfc2VuZF9hdHJfcmVzX2NvbXBsZXRlKClgLCBpdCBhZGRzIHZhbGlkYXRpb24gY2hlY2tzIHRvIGVuc3VyZSBgcmVzcC1cdTAwM2VsZW5gIGlzIG5vbi16ZXJvIGFuZCBncmVhdGVyIHRoYW4gYG9mZnNldGAgYmVmb3JlIGluZGV4aW5nIGByZXNwLVx1MDAzZWRhdGFbMF1gIGFuZCBgcmVzcC1cdTAwM2VkYXRhW29mZnNldF1gLiBUaGVzZSBjaGFuZ2VzIGZpeCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBvbiB0cnVuY2F0ZWQgb3IgbWFsZm9ybWVkIHJlY2VpdmVkIHNrYiBwYWNrZXRzLCB3aGljaCBhcmUgc3BhdGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyBjYXVnaHQgYnkgS0FTQU4uXG5cblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywga2VybmVsLXRvLXVzZXIgY29weSBwYXRocyAoaW5mbyBsZWFrcyksIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQgYW5kIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJjMGE4YzNlOTcxODU1OGMzMTlmYThjYzJiZmFlYmJhMDUwODljZmUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCAxMiAxMzo0MDoxMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZmMvZGlnaXRhbF9kZXAuYyBiL25ldC9uZmMvZGlnaXRhbF9kZXAuYwppbmRleCAzOTgyZmEwODQ3MzdmLi41MDkzYjdiODE3MjAyIDEwMDY0NAotLS0gYS9uZXQvbmZjL2RpZ2l0YWxfZGVwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25mYy9kaWdpdGFsX2RlcC5jCkBAIC0yNDAsOCAmIzQzOzI0MCw4IEBAIGRpZ2l0YWxfcmVjdl9kZXBfZGF0YV9nYXRoZXIoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdTggcGZiLAogCiAJaWYgKERJR0lUQUxfTkZDX0RFUF9NSV9CSVRfU0VUKHBmYikgJmFtcDsmYW1wOyAoIWRkZXYtJmd0O2NoYWluaW5nX3NrYikpIHsKIAkJZGRldi0mZ3Q7Y2hhaW5pbmdfc2tiID0KLQkJCW5mY19hbGxvY19yZWN2X3NrYig4ICogZGRldi0mZ3Q7bG9jYWxfcGF5bG9hZF9tYXgsCi0JCQkJCSAgIEdGUF9LRVJORUwpOwomIzQzOwkJCWRpZ2l0YWxfc2tiX2FsbG9jKGRkZXYsCiYjNDM7CQkJCQkgIDggKiBkZGV2LSZndDtsb2NhbF9wYXlsb2FkX21heCk7CiAJCWlmICghZGRldi0mZ3Q7Y2hhaW5pbmdfc2tiKSB7CiAJCQlyYyA9IC1FTk9NRU07CiAJCQlnb3RvIGVycm9yOwpAQCAtMjUxLDkgJiM0MzsyNTEsOSBAQCBkaWdpdGFsX3JlY3ZfZGVwX2RhdGFfZ2F0aGVyKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHU4IHBmYiwKIAlpZiAoZGRldi0mZ3Q7Y2hhaW5pbmdfc2tiKSB7CiAJCWlmIChyZXNwLSZndDtsZW4gJmd0OyBza2JfdGFpbHJvb20oZGRldi0mZ3Q7Y2hhaW5pbmdfc2tiKSkgewogCQkJbmV3X3NrYiA9IHNrYl9jb3B5X2V4cGFuZChkZGV2LSZndDtjaGFpbmluZ19za2IsCi0JCQkJCQkgIHNrYl9oZWFkcm9vbSgKLQkJCQkJCQkgIGRkZXYtJmd0O2NoYWluaW5nX3NrYiksCi0JCQkJCQkgIDggKiBkZGV2LSZndDtsb2NhbF9wYXlsb2FkX21heCwKJiM0MzsJCQkJCQkgIGRkZXYtJmd0O3R4X2hlYWRyb29tLAomIzQzOwkJCQkJCSAgOCAqIGRkZXYtJmd0O2xvY2FsX3BheWxvYWRfbWF4ICYjNDM7CiYjNDM7CQkJCQkJCSAgZGRldi0mZ3Q7dHhfdGFpbHJvb20sCiAJCQkJCQkgIEdGUF9LRVJORUwpOwogCQkJaWYgKCFuZXdfc2tiKSB7CiAJCQkJcmMgPSAtRU5PTUVNOwpAQCAtMTQ2NywxNiAmIzQzOzE0NjcsMTkgQEAgc3RhdGljIHZvaWQgZGlnaXRhbF90Z19yZWN2X3BzbF9yZXEoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdm9pZCAqYXJnLAogc3RhdGljIHZvaWQgZGlnaXRhbF90Z19zZW5kX2F0cl9yZXNfY29tcGxldGUoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwKIAkJCQkJICAgICB2b2lkICphcmcsIHN0cnVjdCBza19idWZmICpyZXNwKQogewotCWludCBvZmZzZXQ7CiYjNDM7CXVuc2lnbmVkIGludCBvZmZzZXQ7CiAKIAlpZiAoSVNfRVJSKHJlc3ApKSB7CiAJCWRpZ2l0YWxfcG9sbF9uZXh0X3RlY2goZGRldik7CiAJCXJldHVybjsKIAl9CiAKLQlvZmZzZXQgPSAyOwotCWlmIChyZXNwLSZndDtkYXRhWzBdID09IERJR0lUQUxfTkZDX0RFUF9ORkNBX1NPRF9TQikKLQkJb2Zmc2V0JiM0MzsmIzQzOzsKJiM0MzsJaWYgKCFyZXNwLSZndDtsZW4pCiYjNDM7CQlnb3RvIGJhZF9mcmFtZTsKJiM0MzsKJiM0MzsJb2Zmc2V0ID0gKHJlc3AtJmd0O2RhdGFbMF0gPT0gRElHSVRBTF9ORkNfREVQX05GQ0FfU09EX1NCKSA/IDMgOiAyOwomIzQzOwlpZiAocmVzcC0mZ3Q7bGVuICZsdDs9IG9mZnNldCkKJiM0MzsJCWdvdG8gYmFkX2ZyYW1lOwogCiAJZGRldi0mZ3Q7YXRuX2NvdW50ID0gMDsKIApAQCAtMTQ4NCw2ICYjNDM7MTQ4NywxMiBAQCBzdGF0aWMgdm9pZCBkaWdpdGFsX3RnX3NlbmRfYXRyX3Jlc19jb21wbGV0ZShzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LAogCQlkaWdpdGFsX3RnX3JlY3ZfcHNsX3JlcShkZGV2LCBhcmcsIHJlc3ApOwogCWVsc2UKIAkJZGlnaXRhbF90Z19yZWN2X2RlcF9yZXEoZGRldiwgYXJnLCByZXNwKTsKJiM0MzsKJiM0MzsJcmV0dXJuOwomIzQzOwomIzQzO2JhZF9mcmFtZToKJiM0MzsJa2ZyZWVfc2tiKHJlc3ApOwomIzQzOwlkaWdpdGFsX3BvbGxfbmV4dF90ZWNoKGRkZXYpOwogfQogCiBzdGF0aWMgaW50IGRpZ2l0YWxfdGdfc2VuZF9hdHJfcmVzKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzgxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBORkMgRGlnaXRhbCBERVAgQ29kZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgZmlyc3QgbW92ZSBpcyBhbHdheXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZS4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbmV0L25mYy9kaWdpdGFsX2RlcC5jYCwgc28gdGhhdCYjMzk7cyB3aGVyZSBteSBmb2N1cyBuZWVkcyB0byBiZS4gSSYjMzk7bGwgbmVlZCB0byBzZWUgcHJlY2lzZWx5IHdoYXQmIzM5O3MgYmVlbiBhbHRlcmVkIHdpdGhpbiB0aGF0IGZpbGUuIEkmIzM5O2xsIGVpdGhlciB1c2UgYHJlYWQtZmlsZWAgdG8gZ2V0IHRoZSBjb250ZXh0IHJpZ2h0IHRoZXJlLCBvciBpZiB0aGF0JiMzOTtzIHVud2llbGR5LCBJJiMzOTtsbCBsZXZlcmFnZSBgZ3JlcHBlcmAgdG8gemVybyBpbiBvbiB0aGUgbW9kaWZpZWQgbGluZXMuIFRoYXQgd2F5IEkgY2FuIGdldCBhIGdyaXAgb24gd2hhdCB0aGUgZGV2ZWxvcGVycyB3ZXJlIHRyeWluZyB0byBhY2hpZXZlLCBhbmQgdGhlbiBJJiMzOTtsbCBmb3JtdWxhdGUgYSBwcm9wZXIgb3BpbmlvbiBvbiB0aGUgcXVhbGl0eSBhbmQgaW1wYWN0IG9mIHRoZSBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmZjL2RpZ2l0YWxfZGVwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIzMDpcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqXG4gMjMxOlx0ZGlnaXRhbF9yZWN2X2RlcF9kYXRhX2dhdGhlcihzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCB1OCBwZmIsXG4gMjMyOlx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqcmVzcCxcbiAyMzM6XHRcdFx0XHQgICAgIGludCAoKnNlbmRfYWNrKShzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxuIDIzNDpcdFx0XHRcdFx0XHQgICAgIHN0cnVjdCBkaWdpdGFsX2RhdGFfZXhjaFxuIDIzNTpcdFx0XHRcdFx0XHRcdFx0ICAgICAqZGF0YV9leGNoKSxcbiAyMzY6XHRcdFx0XHQgICAgIHN0cnVjdCBkaWdpdGFsX2RhdGFfZXhjaCAqZGF0YV9leGNoKVxuIDIzNzpcdHtcbiAyMzg6XHRcdHN0cnVjdCBza19idWZmICpuZXdfc2tiO1xuIDIzOTpcdFx0aW50IHJjO1xuIDI0MDpcdFxuIDI0MTpcdFx0aWYgKERJR0lUQUxfTkZDX0RFUF9NSV9CSVRfU0VUKHBmYikgXHUwMDI2XHUwMDI2ICghZGRldi1cdTAwM2VjaGFpbmluZ19za2IpKSB7XG4gMjQyOlx0XHRcdGRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiID1cbiAyNDM6XHRcdFx0XHRkaWdpdGFsX3NrYl9hbGxvYyhkZGV2LFxuIDI0NDpcdFx0XHRcdFx0XHQgIDggKiBkZGV2LVx1MDAzZWxvY2FsX3BheWxvYWRfbWF4KTtcbiAyNDU6XHRcdFx0aWYgKCFkZGV2LVx1MDAzZWNoYWluaW5nX3NrYikge1xuIDI0NjpcdFx0XHRcdHJjID0gLUVOT01FTTtcbiAyNDc6XHRcdFx0XHRnb3RvIGVycm9yO1xuIDI0ODpcdFx0XHR9XG4gMjQ5Olx0XHR9XG4gMjUwOlx0XG4gMjUxOlx0XHRpZiAoZGRldi1cdTAwM2VjaGFpbmluZ19za2IpIHtcbiAyNTI6XHRcdFx0aWYgKHJlc3AtXHUwMDNlbGVuIFx1MDAzZSBza2JfdGFpbHJvb20oZGRldi1cdTAwM2VjaGFpbmluZ19za2IpKSB7XG4gMjUzOlx0XHRcdFx0bmV3X3NrYiA9IHNrYl9jb3B5X2V4cGFuZChkZGV2LVx1MDAzZWNoYWluaW5nX3NrYixcbiAyNTQ6XHRcdFx0XHRcdFx0XHQgIGRkZXYtXHUwMDNldHhfaGVhZHJvb20sXG4gMjU1Olx0XHRcdFx0XHRcdFx0ICA4ICogZGRldi1cdTAwM2Vsb2NhbF9wYXlsb2FkX21heCAmIzQzO1xuIDI1NjpcdFx0XHRcdFx0XHRcdFx0ICBkZGV2LVx1MDAzZXR4X3RhaWxyb29tLFxuIDI1NzpcdFx0XHRcdFx0XHRcdCAgR0ZQX0tFUk5FTCk7XG4gMjU4Olx0XHRcdFx0aWYgKCFuZXdfc2tiKSB7XG4gMjU5Olx0XHRcdFx0XHRyYyA9IC1FTk9NRU07XG4gMjYwOlx0XHRcdFx0XHRnb3RvIGVycm9yO1xuIDI2MTpcdFx0XHRcdH1cbiAyNjI6XHRcbiAyNjM6XHRcdFx0XHRrZnJlZV9za2IoZGRldi1cdTAwM2VjaGFpbmluZ19za2IpO1xuIDI2NDpcdFx0XHRcdGRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiID0gbmV3X3NrYjtcbiAyNjU6XHRcdFx0fVxuIDI2NjpcdFxuIDI2NzpcdFx0XHRza2JfcHV0X2RhdGEoZGRldi1cdTAwM2VjaGFpbmluZ19za2IsIHJlc3AtXHUwMDNlZGF0YSwgcmVzcC1cdTAwM2VsZW4pO1xuIDI2ODpcdFxuIDI2OTpcdFx0XHRrZnJlZV9za2IocmVzcCk7XG4gMjcwOlx0XHRcdHJlc3AgPSBOVUxMO1xuIDI3MTpcdFxuIDI3MjpcdFx0XHRpZiAoRElHSVRBTF9ORkNfREVQX01JX0JJVF9TRVQocGZiKSkge1xuIDI3MzpcdFx0XHRcdHJjID0gc2VuZF9hY2soZGRldiwgZGF0YV9leGNoKTtcbiAyNzQ6XHRcdFx0XHRpZiAocmMpXG4gMjc1Olx0XHRcdFx0XHRnb3RvIGVycm9yO1xuIDI3NjpcdFxuIDI3NzpcdFx0XHRcdHJldHVybiBOVUxMO1xuIDI3ODpcdFx0XHR9XG4gMjc5Olx0XG4gMjgwOlx0XHRcdHJlc3AgPSBkZGV2LVx1MDAzZWNoYWluaW5nX3NrYjtcbiAyODE6XHRcdFx0ZGRldi1cdTAwM2VjaGFpbmluZ19za2IgPSBOVUxMO1xuIDI4MjpcdFx0fVxuIDI4MzpcdFxuIDI4NDpcdFx0cmV0dXJuIHJlc3A7XG4gMjg1Olx0XG4gMjg2Olx0ZXJyb3I6XG4gMjg3Olx0XHRrZnJlZV9za2IocmVzcCk7XG4gMjg4Olx0XG4gMjg5Olx0XHRrZnJlZV9za2IoZGRldi1cdTAwM2VjaGFpbmluZ19za2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTIyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipEaWdnaW5nIERlZXBlciBpbnRvIHRoZSBBVFIgUmVzcG9uc2UqKgoKT2theSwgc28gd2UmIzM5O3ZlIGNvbmZpcm1lZCB0aGUgaW5pdGlhbCBpc3N1ZSwgYnV0IG5vdyBJIHdhbnQgdG8gYmUgdGhvcm91Z2guIE15IG1pbmQmIzM5O3MgYXV0b21hdGljYWxseSBqdW1waW5nIHRvIHRoZSBgZGlnaXRhbF90Z19zZW5kX2F0cl9yZXNfY29tcGxldGVgIGZ1bmN0aW9uLiBUaGF0IGZlZWxzIGxpa2UgYSBsb2dpY2FsIG5leHQgc3RlcCBpbiB0cmFjaW5nIHRoaXMgaXNzdWUuIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIGludmVzdGlnYXRlIG5vdCBqdXN0IHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24gYnV0IGFsc28gdGhlIG9uZXMgYXJvdW5kIGl0IGluIHRoZSBjYWxsIHN0YWNrLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIGhvdyB0aGUgQVRSIHJlc3BvbnNlIGNvbXBsZXRpb24gaXMgaGFuZGxlZCBpcyBnb2luZyB0byBiZSBjcnVjaWFsIGhlcmUuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IG9idmlvdXMgcmVkIGZsYWdzIGluIHRoZSBzdXJyb3VuZGluZyBsb2dpYyDigJMgZXJyb3IgaGFuZGxpbmcsIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGFueXRoaW5nIHRoYXQgbWlnaHQgYmUgbGVhZGluZyB0byB0aGlzLiBOZWVkIHRvIGVuc3VyZSB0aGUgcmVzcG9uc2UgaXMgaGFuZGxlZCBjb3JyZWN0bHkgZnJvbSBzdGFydCB0byBmaW5pc2guIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB0aGUgZWRnZSBjYXNlcywgdG9vIC0gd2hhdCBoYXBwZW5zIGlmIHRoZSByZXNwb25zZSB0YWtlcyBsb25nZXIsIG9yIGZhaWxzIGZvciBhbiB1bmV4cGVjdGVkIHJlYXNvbi4gQmVzdCB0byBiZSBwcmVwYXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmZjL2RpZ2l0YWxfZGVwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0NjA6XHRcbjE0NjE6XHRcdHJjID0gZGlnaXRhbF90Z19zZW5kX3BzbF9yZXMoZGRldiwgcHNsX3JlcS1cdTAwM2VkaWQsIHJmX3RlY2gpO1xuMTQ2MjpcdFxuMTQ2MzpcdGV4aXQ6XG4xNDY0Olx0XHRrZnJlZV9za2IocmVzcCk7XG4xNDY1Olx0fVxuMTQ2NjpcdFxuMTQ2NzpcdHN0YXRpYyB2b2lkIGRpZ2l0YWxfdGdfc2VuZF9hdHJfcmVzX2NvbXBsZXRlKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXG4xNDY4Olx0XHRcdFx0XHRcdCAgICAgdm9pZCAqYXJnLCBzdHJ1Y3Qgc2tfYnVmZiAqcmVzcClcbjE0Njk6XHR7XG4xNDcwOlx0XHR1bnNpZ25lZCBpbnQgb2Zmc2V0O1xuMTQ3MTpcdFxuMTQ3MjpcdFx0aWYgKElTX0VSUihyZXNwKSkge1xuMTQ3MzpcdFx0XHRkaWdpdGFsX3BvbGxfbmV4dF90ZWNoKGRkZXYpO1xuMTQ3NDpcdFx0XHRyZXR1cm47XG4xNDc1Olx0XHR9XG4xNDc2Olx0XG4xNDc3Olx0XHRpZiAoIXJlc3AtXHUwMDNlbGVuKVxuMTQ3ODpcdFx0XHRnb3RvIGJhZF9mcmFtZTtcbjE0Nzk6XHRcbjE0ODA6XHRcdG9mZnNldCA9IChyZXNwLVx1MDAzZWRhdGFbMF0gPT0gRElHSVRBTF9ORkNfREVQX05GQ0FfU09EX1NCKSA/IDMgOiAyO1xuMTQ4MTpcdFx0aWYgKHJlc3AtXHUwMDNlbGVuIFx1MDAzYz0gb2Zmc2V0KVxuMTQ4MjpcdFx0XHRnb3RvIGJhZF9mcmFtZTtcbjE0ODM6XHRcbjE0ODQ6XHRcdGRkZXYtXHUwMDNlYXRuX2NvdW50ID0gMDtcbjE0ODU6XHRcbjE0ODY6XHRcdGlmIChyZXNwLVx1MDAzZWRhdGFbb2Zmc2V0XSA9PSBESUdJVEFMX0NNRF9QU0xfUkVRKVxuMTQ4NzpcdFx0XHRkaWdpdGFsX3RnX3JlY3ZfcHNsX3JlcShkZGV2LCBhcmcsIHJlc3ApO1xuMTQ4ODpcdFx0ZWxzZVxuMTQ4OTpcdFx0XHRkaWdpdGFsX3RnX3JlY3ZfZGVwX3JlcShkZGV2LCBhcmcsIHJlc3ApO1xuMTQ5MDpcdFxuMTQ5MTpcdFx0cmV0dXJuO1xuMTQ5MjpcdFxuMTQ5MzpcdGJhZF9mcmFtZTpcbjE0OTQ6XHRcdGtmcmVlX3NrYihyZXNwKTtcbjE0OTU6XHRcdGRpZ2l0YWxfcG9sbF9uZXh0X3RlY2goZGRldik7XG4xNDk2Olx0fVxuMTQ5NzpcdFxuMTQ5ODpcdHN0YXRpYyBpbnQgZGlnaXRhbF90Z19zZW5kX2F0cl9yZXMoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcbjE0OTk6XHRcdFx0XHRcdCAgIHN0cnVjdCBkaWdpdGFsX2F0cl9yZXEgKmF0cl9yZXEpXG4xNTAwOlx0e1xuMTUwMTpcdFx0c3RydWN0IGRpZ2l0YWxfYXRyX3JlcyAqYXRyX3JlcztcbjE1MDI6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4xNTAzOlx0XHR1OCAqZ2IsIHBheWxvYWRfYml0cztcbjE1MDQ6XHRcdHNpemVfdCBnYl9sZW47XG4xNTA1Olx0XHRpbnQgcmM7XG4xNTA2Olx0XG4xNTA3Olx0XHRnYiA9IG5mY19nZXRfbG9jYWxfZ2VuZXJhbF9ieXRlcyhkZGV2LVx1MDAzZW5mY19kZXYsIFx1MDAyNmdiX2xlbik7XG4xNTA4Olx0XHRpZiAoIWdiKVxuMTUwOTpcdFx0XHRnYl9sZW4gPSAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTA3CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBkaWdpdGFsX3NrYl9hbGxvY2AqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIGBkaWdpdGFsX3NrYl9hbGxvY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIGl0cyBkZWZpbml0aW9uLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgaW4gYG5ldC9uZmMvZGlnaXRhbC5oYCwgb3Igd2hlcmV2ZXIgaXQmIzM5O3MgZGVmaW5lZCB3aXRoaW4gdGhlIE5GQyBzdWJzeXN0ZW0uIENoYW5jZXMgYXJlIGl0JiMzOTtzIGVpdGhlciBpbiB0aGUgaGVhZGVyIGl0c2VsZiBvciBkZWZpbmVkIGluIGEgY29ycmVzcG9uZGluZyBDIGZpbGUgd2l0aGluIHRoYXQgZGlyZWN0b3J5LCBjb25zaWRlcmluZyB0aGUgdHlwaWNhbCBrZXJuZWwgbW9kdWxlIHN0cnVjdHVyZS4gTXkgZXhwZWN0YXRpb24gaXMgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgYWxsb2NhdGluZyBTS0JzIChTb2NrZXQgQnVmZmVycykgc3BlY2lmaWNhbGx5IGZvciBEaWdpdGFsIE5GQyBvcGVyYXRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcGFyYW1ldGVycywgcmV0dXJuIHZhbHVlcywgYW5kIHdoYXQgc3BlY2lmaWMgbWVtb3J5IGFsbG9jYXRpb24gaXQmIzM5O3MgaW1wbGVtZW50aW5nLiBJcyBpdCB1c2luZyBzdGFuZGFyZCBrZXJuZWwgYWxsb2NhdG9ycywgb3Igc29tZXRoaW5nIHNwZWNpZmljIHRvIHRoZSBORkMgZHJpdmVyIHJlcXVpcmVtZW50cz8gS25vd2luZyB0aGlzIGxldmVsIG9mIGRldGFpbCBpcyBjcml0aWNhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGlnaXRhbF9za2JfYWxsb2MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25mYy9kaWdpdGFsLmg9NDA9c3RydWN0IGRpZ2l0YWxfZGF0YV9leGNoIHtcbi0tXG5uZXQvbmZjL2RpZ2l0YWwuaC00NC1cbm5ldC9uZmMvZGlnaXRhbC5oOjQ1OnN0cnVjdCBza19idWZmICpkaWdpdGFsX3NrYl9hbGxvYyhzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxubmV0L25mYy9kaWdpdGFsLmgtNDYtXHRcdFx0XHQgIHVuc2lnbmVkIGludCBsZW4pO1xuLS1cbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmM9Mjc9c3RydWN0IGRpZ2l0YWxfY21kIHtcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jLTQxLVxubmV0L25mYy9kaWdpdGFsX2NvcmUuYzo0MjpzdHJ1Y3Qgc2tfYnVmZiAqZGlnaXRhbF9za2JfYWxsb2Moc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmMtNDMtXHRcdFx0XHQgIHVuc2lnbmVkIGludCBsZW4pXG4tLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jPTIwMD1kaWdpdGFsX3NlbmRfZGVwX2RhdGFfcHJlcChzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0yMDgtXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6MjA5Olx0XHRuZXdfc2tiID0gZGlnaXRhbF9za2JfYWxsb2MoZGRldiwgZGRldi1cdTAwM2VyZW1vdGVfcGF5bG9hZF9tYXgpO1xubmV0L25mYy9kaWdpdGFsX2RlcC5jLTIxMC1cdFx0aWYgKCFuZXdfc2tiKSB7XG4tLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jPTIzMT1kaWdpdGFsX3JlY3ZfZGVwX2RhdGFfZ2F0aGVyKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHU4IHBmYixcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMjQyLVx0XHRkZGV2LVx1MDAzZWNoYWluaW5nX3NrYiA9XG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6MjQzOlx0XHRcdGRpZ2l0YWxfc2tiX2FsbG9jKGRkZXYsXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMjQ0LVx0XHRcdFx0XHQgIDggKiBkZGV2LVx1MDAzZWxvY2FsX3BheWxvYWRfbWF4KTtcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM9MzU5PXN0YXRpYyBpbnQgZGlnaXRhbF9pbl9zZW5kX3BzbF9yZXEoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMzY2LVxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjM2NzpcdHNrYiA9IGRpZ2l0YWxfc2tiX2FsbG9jKGRkZXYsIHNpemVvZigqcHNsX3JlcSkpO1xubmV0L25mYy9kaWdpdGFsX2RlcC5jLTM2OC1cdGlmICghc2tiKVxuLS1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYz00NzE9aW50IGRpZ2l0YWxfaW5fc2VuZF9hdHJfcmVxKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXG4tLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTQ4Ny1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzo0ODg6XHRza2IgPSBkaWdpdGFsX3NrYl9hbGxvYyhkZGV2LCBzaXplKTtcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy00ODktXHRpZiAoIXNrYilcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM9NTI5PXN0YXRpYyBpbnQgZGlnaXRhbF9pbl9zZW5kX2FjayhzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxuLS1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy01MzUtXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6NTM2Olx0c2tiID0gZGlnaXRhbF9za2JfYWxsb2MoZGRldiwgMSk7XG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtNTM3LVx0aWYgKCFza2IpXG4tLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jPTU2Nj1zdGF0aWMgaW50IGRpZ2l0YWxfaW5fc2VuZF9uYWNrKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXG4tLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTU3Mi1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzo1NzM6XHRza2IgPSBkaWdpdGFsX3NrYl9hbGxvYyhkZGV2LCAxKTtcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy01NzQtXHRpZiAoIXNrYilcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM9NTk4PXN0YXRpYyBpbnQgZGlnaXRhbF9pbl9zZW5kX2F0bihzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxuLS1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy02MDQtXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6NjA1Olx0c2tiID0gZGlnaXRhbF9za2JfYWxsb2MoZGRldiwgMSk7XG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtNjA2LVx0aWYgKCFza2IpXG4tLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jPTYyOT1zdGF0aWMgaW50IGRpZ2l0YWxfaW5fc2VuZF9ydG94KHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXG4tLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTY0MC1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzo2NDE6XHRza2IgPSBkaWdpdGFsX3NrYl9hbGxvYyhkZGV2LCAxKTtcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy02NDItXHRpZiAoIXNrYilcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM9OTc4PXN0YXRpYyBpbnQgZGlnaXRhbF90Z19zZW5kX2FjayhzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxuLS1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy05ODQtXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6OTg1Olx0c2tiID0gZGlnaXRhbF9za2JfYWxsb2MoZGRldiwgMSk7XG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtOTg2LVx0aWYgKCFza2IpXG4tLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jPTEwMjQ9c3RhdGljIGludCBkaWdpdGFsX3RnX3NlbmRfYXRuKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYpXG4tLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTEwMjktXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6MTAzMDpcdHNrYiA9IGRpZ2l0YWxfc2tiX2FsbG9jKGRkZXYsIDEpO1xubmV0L25mYy9kaWdpdGFsX2RlcC5jLTEwMzEtXHRpZiAoIXNrYilcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM9MTM2NT1zdGF0aWMgaW50IGRpZ2l0YWxfdGdfc2VuZF9wc2xfcmVzKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHU4IGRpZCxcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTM3MS1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzoxMzcyOlx0c2tiID0gZGlnaXRhbF9za2JfYWxsb2MoZGRldiwgc2l6ZW9mKHN0cnVjdCBkaWdpdGFsX3BzbF9yZXMpKTtcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xMzczLVx0aWYgKCFza2IpXG4tLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jPTE0OTg9c3RhdGljIGludCBkaWdpdGFsX3RnX3NlbmRfYXRyX3JlcyhzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxuLS1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xNTEwLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjE1MTE6XHRza2IgPSBkaWdpdGFsX3NrYl9hbGxvYyhkZGV2LCBzaXplb2Yoc3RydWN0IGRpZ2l0YWxfYXRyX3JlcykgJiM0MzsgZ2JfbGVuKTtcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xNTEyLVx0aWYgKCFza2IpXG4tLVxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYz0yNTE9c3RhdGljIGludCBkaWdpdGFsX2luX3NlbmRfcmF0cyhzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxuLS1cbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtMjU2LVxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYzoyNTc6XHRza2IgPSBkaWdpdGFsX3NrYl9hbGxvYyhkZGV2LCAyKTtcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtMjU4LVx0aWYgKCFza2IpXG4tLVxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYz0zNDE9c3RhdGljIGludCBkaWdpdGFsX2luX3NlbmRfc2VsX3JlcShzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxuLS1cbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtMzQ5LVxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYzozNTA6XHRza2IgPSBkaWdpdGFsX3NrYl9hbGxvYyhkZGV2LCBzaXplb2Yoc3RydWN0IGRpZ2l0YWxfc2VsX3JlcSkpO1xubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy0zNTEtXHRpZiAoIXNrYilcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jPTQ0OD1zdGF0aWMgaW50IGRpZ2l0YWxfaW5fc2VuZF9zZGRfcmVxKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXG4tLVxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy00NTktXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jOjQ2MDpcdHNrYiA9IGRpZ2l0YWxfc2tiX2FsbG9jKGRkZXYsIDIpO1xubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy00NjEtXHRpZiAoIXNrYilcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jPTUyNz1pbnQgZGlnaXRhbF9pbl9zZW5kX3NlbnNfcmVxKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHU4IHJmX3RlY2gpXG4tLVxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy01NDEtXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jOjU0MjpcdHNrYiA9IGRpZ2l0YWxfc2tiX2FsbG9jKGRkZXYsIDEpO1xubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy01NDMtXHRpZiAoIXNrYilcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jPTYxOD1zdGF0aWMgaW50IGRpZ2l0YWxfaW5fc2VuZF9hdHRyaWJfcmVxKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXG4tLVxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy02MjUtXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jOjYyNjpcdHNrYiA9IGRpZ2l0YWxfc2tiX2FsbG9jKGRkZXYsIHNpemVvZigqYXR0cmliX3JlcSkpO1xubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy02MjctXHRpZiAoIXNrYilcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jPTcxND1pbnQgZGlnaXRhbF9pbl9zZW5kX3NlbnNiX3JlcShzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCB1OCByZl90ZWNoKVxuLS1cbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtNzI5LVxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYzo3MzA6XHRza2IgPSBkaWdpdGFsX3NrYl9hbGxvYyhkZGV2LCBzaXplb2YoKnNlbnNiX3JlcSkpO1xubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy03MzEtXHRpZiAoIXNrYilcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jPTgwND1pbnQgZGlnaXRhbF9pbl9zZW5kX3NlbnNmX3JlcShzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCB1OCByZl90ZWNoKVxuLS1cbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtODIxLVxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYzo4MjI6XHRza2IgPSBkaWdpdGFsX3NrYl9hbGxvYyhkZGV2LCBzaXplKTtcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtODIzLVx0aWYgKCFza2IpXG4tLVxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYz04OTU9aW50IGRpZ2l0YWxfaW5fc2VuZF9pc28xNTY5M19pbnZfcmVxKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHU4IHJmX3RlY2gpXG4tLVxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy05MTAtXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jOjkxMTpcdHNrYiA9IGRpZ2l0YWxfc2tiX2FsbG9jKGRkZXYsIHNpemVvZigqcmVxKSk7XG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTkxMi1cdGlmICghc2tiKVxuLS1cbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM9OTM1PXN0YXRpYyBpbnQgZGlnaXRhbF90Z19zZW5kX3NlbF9yZXMoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldilcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTkzOS1cbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM6OTQwOlx0c2tiID0gZGlnaXRhbF9za2JfYWxsb2MoZGRldiwgMSk7XG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTk0MS1cdGlmICghc2tiKVxuLS1cbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM9OTk0PXN0YXRpYyBpbnQgZGlnaXRhbF90Z19zZW5kX3NkZF9yZXMoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldilcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTk5OS1cbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM6MTAwMDpcdHNrYiA9IGRpZ2l0YWxfc2tiX2FsbG9jKGRkZXYsIHNpemVvZihzdHJ1Y3QgZGlnaXRhbF9zZGRfcmVzKSk7XG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTEwMDEtXHRpZiAoIXNrYilcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jPTEwNTg9c3RhdGljIGludCBkaWdpdGFsX3RnX3NlbmRfc2Vuc19yZXMoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldilcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTEwNjMtXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jOjEwNjQ6XHRza2IgPSBkaWdpdGFsX3NrYl9hbGxvYyhkZGV2LCAyKTtcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtMTA2NS1cdGlmICghc2tiKVxuLS1cbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM9MTEyOT1zdGF0aWMgaW50IGRpZ2l0YWxfdGdfc2VuZF9zZW5zZl9yZXMoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTExNDEtXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jOjExNDI6XHRza2IgPSBkaWdpdGFsX3NrYl9hbGxvYyhkZGV2LCBzaXplKTtcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtMTE0My1cdGlmICghc2tiKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTk2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGUgY29kZToKCioqRGl2aW5nIGludG8gYGRpZ2l0YWxfc2tiX2FsbG9jYCoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIGluIG9uIHRoZSBgZGlnaXRhbF9za2JfYWxsb2NgIGltcGxlbWVudGF0aW9uLiBJIGtub3cgaXRzIHJvbGUgd2l0aGluIHRoZSBORkMgc3Vic3lzdGVtLCBzbyBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgYWN0dWFsbHkgaGFuZGxlZCBhdCBhIGxvd2VyIGxldmVsLiBNeSBwcmltYXJ5IGludGVyZXN0IGlzIGluIHRoZSBhbGxvY2F0aW9uIHN0cmF0ZWd5LiBJcyBpdCB1c2luZyBzdGFuZGFyZCBrZXJuZWwgYWxsb2NhdGlvbiBmdW5jdGlvbnMsIG9yIGFyZSB0aGVyZSBhbnkgTkZDLXNwZWNpZmljIG9wdGltaXphdGlvbnMgaW52b2x2ZWQ/IEFyZSB0aGVyZSBhbnkgcGVjdWxpYXIgbG9ja2luZyBtZWNoYW5pc21zIG9yIGFsaWdubWVudCBjb25zdHJhaW50cz8gSXQgd291bGQgYWxzbyBiZSBnb29kIHRvIHVuZGVyc3RhbmQgaWYgaXQgaW1wbGVtZW50cyBhbnkga2luZCBvZiBidWZmZXIgcmV1c2Ugb3IgY2FjaGluZy4gVGhlIGBkaWdpdGFsX2NvcmUuY2AgZmlsZSBpcyB1c3VhbGx5IGEgZ29vZCBwbGFjZSB0byBzdGFydCwgc28gdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTttIGhlYWRlZC4gTGV0JiMzOTtzIHNlZSBob3cgaXQmIzM5O3MgZG9uZS4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgbml0dHktZ3JpdHR5IG9mIHRoZSBTS0IgYWxsb2NhdGlvbiB3aXRoaW4gdGhlIGRpZ2l0YWwgTkZDIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25mYy9kaWdpdGFsX2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNDA6XHR9O1xuICA0MTpcdFxuICA0MjpcdHN0cnVjdCBza19idWZmICpkaWdpdGFsX3NrYl9hbGxvYyhzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxuICA0MzpcdFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgbGVuKVxuICA0NDpcdHtcbiAgNDU6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gIDQ2Olx0XG4gIDQ3Olx0XHRza2IgPSBhbGxvY19za2IobGVuICYjNDM7IGRkZXYtXHUwMDNldHhfaGVhZHJvb20gJiM0MzsgZGRldi1cdTAwM2V0eF90YWlscm9vbSxcbiAgNDg6XHRcdFx0XHRHRlBfS0VSTkVMKTtcbiAgNDk6XHRcdGlmIChza2IpXG4gIDUwOlx0XHRcdHNrYl9yZXNlcnZlKHNrYiwgZGRldi1cdTAwM2V0eF9oZWFkcm9vbSk7XG4gIDUxOlx0XG4gIDUyOlx0XHRyZXR1cm4gc2tiO1xuICA1MzpcdH1cbiAgNTQ6XHRcbiAgNTU6XHR2b2lkIGRpZ2l0YWxfc2tiX2FkZF9jcmMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY3JjX2Z1bmNfdCBjcmNfZnVuYywgdTE2IGluaXQsXG4gIDU2Olx0XHRcdFx0IHU4IGJpdHdpc2VfaW52LCB1OCBtc2JfZmlyc3QpXG4gIDU3Olx0e1xuICA1ODpcdFx0dTE2IGNyYztcbiAgNTk6XHRcbiAgNjA6XHRcdGNyYyA9IGNyY19mdW5jKGluaXQsIHNrYi1cdTAwM2VkYXRhLCBza2ItXHUwMDNlbGVuKTtcbiAgNjE6XHRcbiAgNjI6XHRcdGlmIChiaXR3aXNlX2ludilcbiAgNjM6XHRcdFx0Y3JjID0gfmNyYztcbiAgNjQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc5MgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgYG5mY19hbGxvY19yZWN2X3NrYmAmIzM5O3MgUHJlZGVjZXNzb3JzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gYG5mY19hbGxvY19yZWN2X3NrYmAg4oCTIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdHJhY2luZyBpdHMgZXhlY3V0aW9uIHBhdGguIEkgd2FudCB0byBrbm93IHByZWNpc2VseSB3aGF0IGNvZGUgY2FsbHMgdGhpcyBmdW5jdGlvbiBhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcganVzdCAqYmVmb3JlKiBpdCBnZXRzIGludm9rZWQuIFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBzZXQgdXA/IFdoYXQmIzM5O3MgdGhlIG92ZXJhbGwgZmxvdyBvZiB0aGUgTkZDIHN0YWNrIGxlYWRpbmcgdXAgdG8gdGhlIHBvaW50IHdoZXJlIHRoaXMgU0tCIChTb2NrZXQgQnVmZmVyKSBhbGxvY2F0aW9uIG9jY3Vycz8gSSYjMzk7bSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgcHVycG9zZSBvZiB0aGlzIGFsbG9jYXRpb24gYW5kIGFueSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBwZXJmb3JtYW5jZSBvciBlcnJvciBoYW5kbGluZy4gRXNzZW50aWFsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAmIzM0O3doeSYjMzQ7IGFuZCAmIzM0O2hvdyYjMzQ7IG9mIHRoaXMgZnVuY3Rpb24gY2FsbCB3aXRoaW4gdGhlIGxhcmdlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZmNfYWxsb2NfcmVjdl9za2ImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYz05MTU9c3RhdGljIGludCBzdDk1aGZfaW5fc2VuZF9jbWQoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcbi0tXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jLTkyNS1cbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmM6OTI2Olx0c2tiX3Jlc3AgPSBuZmNfYWxsb2NfcmVjdl9za2IoTUFYX1JFU1BPTlNFX0JVRkZFUl9TSVpFLCBHRlBfS0VSTkVMKTtcbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmMtOTI3LVx0aWYgKCFza2JfcmVzcClcbi0tXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jPTE1MDg9c3RhdGljIGludCB0cmY3OTcwYV9zZW5kX2NtZChzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxuLS1cbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmMtMTU0MS1cdGlmICh0aW1lb3V0KSB7XG5kcml2ZXJzL25mYy90cmY3OTcwYS5jOjE1NDI6XHRcdHRyZi1cdTAwM2VyeF9za2IgPSBuZmNfYWxsb2NfcmVjdl9za2IoVFJGNzk3MEFfUlhfU0tCX0FMTE9DX1NJWkUsXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jLTE1NDMtXHRcdFx0XHRcdFx0IEdGUF9LRVJORUwpO1xuLS1cbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmM9MTc2NT1zdGF0aWMgaW50IF90cmY3OTcwYV90Z19saXN0ZW4oc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdTE2IHRpbWVvdXQsXG4tLVxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYy0xNzg4LVxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYzoxNzg5Olx0dHJmLVx1MDAzZXJ4X3NrYiA9IG5mY19hbGxvY19yZWN2X3NrYihUUkY3OTcwQV9SWF9TS0JfQUxMT0NfU0laRSxcbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmMtMTc5MC1cdFx0XHRcdFx0IEdGUF9LRVJORUwpO1xuLS1cbmluY2x1ZGUvbmV0L25mYy9uZmMuaD0yNjk9c3RydWN0IHNrX2J1ZmYgKm5mY19hbGxvY19zZW5kX3NrYihzdHJ1Y3QgbmZjX2RldiAqZGV2LCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxuaW5jbHVkZS9uZXQvbmZjL25mYy5oLTI3MS1cdFx0XHRcdCAgIHVuc2lnbmVkIGludCAqZXJyKTtcbmluY2x1ZGUvbmV0L25mYy9uZmMuaDoyNzI6c3RydWN0IHNrX2J1ZmYgKm5mY19hbGxvY19yZWN2X3NrYih1bnNpZ25lZCBpbnQgc2l6ZSwgZ2ZwX3QgZ2ZwKTtcbmluY2x1ZGUvbmV0L25mYy9uZmMuaC0yNzMtXG4tLVxubmV0L25mYy9jb3JlLmM9NzE0PXN0cnVjdCBza19idWZmICpuZmNfYWxsb2Nfc2VuZF9za2Ioc3RydWN0IG5mY19kZXYgKmRldiwgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9uZmMvY29yZS5jLTczMS0vKipcbm5ldC9uZmMvY29yZS5jOjczMjogKiBuZmNfYWxsb2NfcmVjdl9za2IgLSBhbGxvY2F0ZSBhIHNrYiBmb3IgZGF0YSBleGNoYW5nZSByZXNwb25zZXNcbm5ldC9uZmMvY29yZS5jLTczMy0gKlxuLS1cbm5ldC9uZmMvY29yZS5jLTczNi0gKi9cbm5ldC9uZmMvY29yZS5jOjczNzpzdHJ1Y3Qgc2tfYnVmZiAqbmZjX2FsbG9jX3JlY3Zfc2tiKHVuc2lnbmVkIGludCBzaXplLCBnZnBfdCBnZnApXG5uZXQvbmZjL2NvcmUuYy03Mzgte1xuLS1cbm5ldC9uZmMvY29yZS5jLTc0OS19XG5uZXQvbmZjL2NvcmUuYzo3NTA6RVhQT1JUX1NZTUJPTChuZmNfYWxsb2NfcmVjdl9za2IpO1xubmV0L25mYy9jb3JlLmMtNzUxLVxuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYz04NTQ9c3RhdGljIHZvaWQgbmZjX2hjaV9yZWN2X2Zyb21fbGxjKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmMtODg1LVxubmV0L25mYy9oY2kvY29yZS5jOjg4NjpcdFx0aGNwX3NrYiA9IG5mY19hbGxvY19yZWN2X3NrYihORkNfSENJX0hDUF9QQUNLRVRfSEVBREVSX0xFTiAmIzQzO1xubmV0L25mYy9oY2kvY29yZS5jLTg4Ny1cdFx0XHRcdFx0ICAgICBtc2dfbGVuLCBHRlBfS0VSTkVMKTtcbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jPTE0Mzg9c3RhdGljIHZvaWQgbmZjX2xsY3BfcmVjdl9hZ2Yoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE0NjUtXG5uZXQvbmZjL2xsY3BfY29yZS5jOjE0NjY6XHRcdG5ld19za2IgPSBuZmNfYWxsb2NfcmVjdl9za2IocGR1X2xlbiwgR0ZQX0tFUk5FTCk7XG5uZXQvbmZjL2xsY3BfY29yZS5jLTE0NjctXHRcdGlmIChuZXdfc2tiID09IE5VTEwpIHtcbi0tXG5uZXQvbmZjL25jaS9oY2kuYz00Mjc9dm9pZCBuY2lfaGNpX2RhdGFfcmVjZWl2ZWRfY2Iodm9pZCAqY29udGV4dCxcbi0tXG5uZXQvbmZjL25jaS9oY2kuYy00NjMtXG5uZXQvbmZjL25jaS9oY2kuYzo0NjQ6XHRcdGhjcF9za2IgPSBuZmNfYWxsb2NfcmVjdl9za2IoTkNJX0hDSV9IQ1BfUEFDS0VUX0hFQURFUl9MRU4gJiM0Mztcbm5ldC9uZmMvbmNpL2hjaS5jLTQ2NS1cdFx0XHRcdFx0ICAgICBtc2dfbGVuLCBHRlBfS0VSTkVMKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyNzEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGJyZWFrZG93biBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBmdW5jdGlvbjoKCioqRGl2aW5nIGludG8gYG5mY19hbGxvY19yZWN2X3NrYmAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBuZXQvbmZjL2NvcmUuY2AgYW5kIHNwZWNpZmljYWxseSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGBuZmNfYWxsb2NfcmVjdl9za2JgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ3kgZm9yIGluY29taW5nIE5GQyBkYXRhLiBJdCYjMzk7cyBvYnZpb3VzbHkgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgdGhlIFNLQiAoU29ja2V0IEJ1ZmZlciksIHdoaWNoIGlzIHRoZSBzdGFuZGFyZCBtZWNoYW5pc20gaW4gdGhlIExpbnV4IGtlcm5lbCBmb3IgaGFuZGxpbmcgbmV0d29yayBkYXRhLiBJIGltbWVkaWF0ZWx5IHdhbnQgdG8gc2VlOgoKKiAgICoqSG93IGJpZyBpcyB0aGUgYnVmZmVyIGJlaW5nIGFsbG9jYXRlZD8qKiBJcyBpdCBhIGZpeGVkIHNpemUsIG9yIGRvZXMgaXQgZHluYW1pY2FsbHkgYWRqdXN0IGJhc2VkIG9uIHNvbWUgY29uZmlndXJhdGlvbiBvciBuZWdvdGlhdGlvbj8gQXJlIHRoZXJlIHNpemUgbGltaXRzIGluIHBsYWNlIHRvIHByZXZlbnQgZGVuaWFsLW9mLXNlcnZpY2Ugb3IgbWVtb3J5IGV4aGF1c3Rpb24/CiogICAqKldoYXQgZmxhZ3MgYXJlIGJlaW5nIHBhc3NlZCB0byBgYWxsb2Nfc2tiKClgPyoqIFRoZSBmbGFncyByZXZlYWwgdGhlIGJlaGF2aW9yIG9mIHRoZSBTS0Ig4oCTIHdoZXRoZXIgaXQmIzM5O3MgbGluZWFyLCBmcmFnbWVudGVkLCBwb3RlbnRpYWxseSBzaGFyZWQsIGFuZCBzbyBvbi4gVW5kZXJzdGFuZGluZyB0aGVzZSBmbGFncyBoZWxwcyBtZSBkZWR1Y2UgdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MgYW5kIG1lbW9yeSB1c2FnZSBvZiB0aGlzIGZ1bmN0aW9uLgoqICAgKipJcyB0aGVyZSBhbnkgZXJyb3IgaGFuZGxpbmc/KiogV2hhdCBoYXBwZW5zIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxzPyBJJiMzOTtkIGV4cGVjdCBzb21lIGdyYWNlZnVsIGRlZ3JhZGF0aW9uLCBtYXliZSBsb2dnaW5nIGFuIGVycm9yIGFuZCByZXR1cm5pbmcgYW4gZXJyb3IgY29kZS4gSSYjMzk7bSBob3BpbmcgdG8gc2VlIHdlbGwtaGFuZGxlZCBlcnJvciBjb25kaXRpb25zLCBhbmQgbm8gc3VidGxlIG1lbW9yeSBsZWFrcy4KKiAgICoqV2hhdCBtZXRhZGF0YSBpcyBiZWluZyBzZXQgd2l0aGluIHRoZSBTS0I/KiogSXQmIzM5O3MgY3JpdGljYWwgdG8ga25vdyB3aGF0IGZpZWxkcyBsaWtlIGBza2ItJmd0O2RldmAsIGBza2ItJmd0O3Byb3RvY29sYCwgYW5kIHNvIGZvcnRoIGFyZSBpbml0aWFsaXplZC4gVGhpcyBpbmZvcm1hdGlvbiBnaXZlcyBtZSBjb250ZXh0OyB0aGF0IGlzLCBob3cgdGhlIGtlcm5lbCBpcyB0cmFja2luZyB0aGUgTkZDIGRhdGEgYW5kIGhvdyBpdCBpcyBiZWluZyByb3V0ZWQgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLiBJdCYjMzk7cyBlc3BlY2lhbGx5IGltcG9ydGFudCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgTkZDIGxheWVyIGlzIGludGVncmF0aW5nIHdpdGggdGhlIG1vcmUgc3RhbmRhcmQgbmV0d29ya2luZyBwcm90b2NvbHMuCiogICAqKkFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgTkZDLXJlbGF0ZWQgU0tCIGV4dGVuc2lvbnMsIG9yIGFyZSB0aGV5IHJlLXVzaW5nIHN0YW5kYXJkIFNLQiBtZXRhZGF0YT8qKiBUaGVyZSBjb3VsZCBiZSBzb21lIHNwZWNpZmljIG1ldGFkYXRhIHdpdGhpbiB0aGUgU0tCIHRoYXQgYXJlIHVzZWQgaW4gdGhlIE5GQyBsYXllciB0aGF0IHdvdWxkIGJlIHZlcnkgdXNlZnVsIHRvIGtub3cgYWJvdXQuCgpFc3NlbnRpYWxseSwgSSB3YW50IHRvIGZvcm0gYSBtZW50YWwgcGljdHVyZSBvZiBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIGxhcmdlciBwaWN0dXJlIG9mIE5GQyBkYXRhIHJlY2VwdGlvbi4gS25vd2luZyBhbGwgb2YgdGhlIGFib3ZlLCBJJiMzOTtsbCBiZSBhYmxlIHRvIHF1aWNrbHkganVkZ2UgaXRzIGVmZmljaWVuY3ksIHBvdGVudGlhbCBmb3IgYm90dGxlbmVja3MsIGFuZCB2dWxuZXJhYmlsaXR5IHRvIHZhcmlvdXMgYXR0YWNrcyBvciBtZW1vcnkgaXNzdWVzLiBNeSB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgZnVuY3Rpb24gaXMgZ29pbmcgdG8gYmUgaW50ZWdyYWwgdG8gZ3Jhc3BpbmcgdGhlIE5GQyBwcm90b2NvbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmZjL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDczMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzMwOlx0XG4gNzMxOlx0LyoqXG4gNzMyOlx0ICogbmZjX2FsbG9jX3JlY3Zfc2tiIC0gYWxsb2NhdGUgYSBza2IgZm9yIGRhdGEgZXhjaGFuZ2UgcmVzcG9uc2VzXG4gNzMzOlx0ICpcbiA3MzQ6XHQgKiBAc2l6ZTogc2l6ZSB0byBhbGxvY2F0ZVxuIDczNTpcdCAqIEBnZnA6IGdmcCBmbGFnc1xuIDczNjpcdCAqL1xuIDczNzpcdHN0cnVjdCBza19idWZmICpuZmNfYWxsb2NfcmVjdl9za2IodW5zaWduZWQgaW50IHNpemUsIGdmcF90IGdmcClcbiA3Mzg6XHR7XG4gNzM5Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIDc0MDpcdFx0dW5zaWduZWQgaW50IHRvdGFsX3NpemU7XG4gNzQxOlx0XG4gNzQyOlx0XHR0b3RhbF9zaXplID0gc2l6ZSAmIzQzOyAxO1xuIDc0MzpcdFx0c2tiID0gYWxsb2Nfc2tiKHRvdGFsX3NpemUsIGdmcCk7XG4gNzQ0Olx0XG4gNzQ1Olx0XHRpZiAoc2tiKVxuIDc0NjpcdFx0XHRza2JfcmVzZXJ2ZShza2IsIDEpO1xuIDc0NzpcdFxuIDc0ODpcdFx0cmV0dXJuIHNrYjtcbiA3NDk6XHR9XG4gNzUwOlx0RVhQT1JUX1NZTUJPTChuZmNfYWxsb2NfcmVjdl9za2IpO1xuIDc1MTpcdFxuIDc1MjpcdC8qKlxuIDc1MzpcdCAqIG5mY190YXJnZXRzX2ZvdW5kIC0gaW5mb3JtIHRoYXQgdGFyZ2V0cyB3ZXJlIGZvdW5kXG4gNzU0Olx0ICpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExNzUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA5MjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb21taXQgaW4gYG5ldC9uZmMvZGlnaXRhbF9kZXAuY2AqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBjb21taXQgaXMgZG9pbmcuIFRoZSBgZ2l0IGxvZ2Agc2hvdWxkIHRlbGwgbWUgdGhlIHN0b3J5IGhlcmUuCgpMb29raW5nIGF0IHRoZSBkaWZmLCBpdCBzZWVtcyB0aGVyZSBhcmUgdHdvIGRpc3RpbmN0IHBhcnRzIHRvIHRoaXMgcGF0Y2guCgoqICAgKipQYXJ0IDEqKjogSW4gdGhlIGZpcnN0IGJsb2NrLCBJIHNlZSBzb21lIGNoYW5nZXMgaW4gYGRpZ2l0YWxfcmVjdl9kZXBfZGF0YV9nYXRoZXJgLiBTcGVjaWZpY2FsbHksIHRoZSBhbGxvY2F0aW9uIGFuZCBleHBhbnNpb24gb2YgdGhlIGBjaGFpbmluZ19za2JgIHdpdGhpbiB0aGUgTkZDIERFUCBkYXRhIGhhbmRsaW5nIGFyZSBiZWluZyBtb2RpZmllZC4gSW5zdGVhZCBvZiB1c2luZyBgbmZjX2FsbG9jX3JlY3Zfc2tiYCwgYSBjdXN0b20gYGRpZ2l0YWxfc2tiX2FsbG9jYCBpcyBiZWluZyBpbnRyb2R1Y2VkLCBhbmQgdGhlIGBza2JfY29weV9leHBhbmRgIGlzIHJlY2VpdmluZyBzbGlnaHRseSBtb2RpZmllZCBhcmd1bWVudHMuIEl0IGxvb2tzIGxpa2UgYHR4X2hlYWRyb29tYCBhbmQgYHR4X3RhaWxyb29tYCBhcmUgbm93IGJlaW5nIGNvbnNpZGVyZWQgaW4gdGhlIGV4cGFuc2lvbiBjYWxjdWxhdGlvbiwgd2hpY2ggc3VnZ2VzdHMgc29tZW9uZSBoYXMgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGF0YSYjMzk7cyBwb3RlbnRpYWwgcmVxdWlyZW1lbnRzLgoKKiAgICoqUGFydCAyKio6IFRoZSBzZWNvbmQgcGFydCBvZiB0aGUgcGF0Y2ggaXMgbW9kaWZ5aW5nIGBkaWdpdGFsX3RnX3NlbmRfYXRyX3Jlc19jb21wbGV0ZWAuIEl0IGxvb2tzIGxpa2UgdGhlIG9mZnNldCBjYWxjdWxhdGlvbiBmb3IgaGFuZGxpbmcgQVRSXF9SRVMgaXMgYmVpbmcgcmVmaW5lZC4gSXQgYXBwZWFycyB0byBpbmNsdWRlIGEgY2hlY2sgb24gdGhlIGZyYW1lIGxlbmd0aCBhbmQgYSBgYmFkX2ZyYW1lYCBsYWJlbC4gVGhlIG9yaWdpbmFsIGNvZGUgc2VlbXMgdG8gYXNzdW1lIHRoZSBsZW5ndGggb2YgYSBmcmFtZSBtYXkgdmFyeSwgc28gdGhpcyBtdXN0IGJlIGEgc2VjdXJpdHkgaW1wcm92ZW1lbnQgb3IgYW4gZWRnZS1jYXNlIGZpeC4gSXQgYWxzbyBsb29rcyBsaWtlIGEgcmVkdW5kYW50IHJldHVybiBoYXMgYmVlbiByZW1vdmVkLgoKVWx0aW1hdGVseSwgSSYjMzk7bGwgcmV2aWV3IHRoZSBjb21taXQgbWVzc2FnZSBhbmQgcmVsYXRlZCBpc3N1ZXMgdG8gZnVsbHkgZ3Jhc3AgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhlc2UgY2hhbmdlcy4gQnV0LCBhdCBmaXJzdCBnbGFuY2UsIHRoZSB0d28gY2hhbmdlcyBhcHBlYXIgdG8gb3B0aW1pemUgdGhlIGFsbG9jYXRpb24gYW5kIHByb2Nlc3Npbmcgb2YgTkZDIERFUCBkYXRhIGFuZCB0byBjbGFyaWZ5IGEgbG9naWMgZmxhdyBpbiB0aGUgaGFuZGxpbmcgb2YgQVRSXF9SRVMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RpZ2l0YWxfdGdfc2VuZF9hdHJfcmVzX2NvbXBsZXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25mYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmZjL2RpZ2l0YWxfZGVwLmM9MTM5OD1zdGF0aWMgdm9pZCBkaWdpdGFsX3RnX3JlY3ZfcHNsX3JlcShzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCB2b2lkICphcmcsXG4tLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTE0NjYtXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6MTQ2NzpzdGF0aWMgdm9pZCBkaWdpdGFsX3RnX3NlbmRfYXRyX3Jlc19jb21wbGV0ZShzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTE0NjgtXHRcdFx0XHRcdCAgICAgdm9pZCAqYXJnLCBzdHJ1Y3Qgc2tfYnVmZiAqcmVzcClcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM9MTQ5OD1zdGF0aWMgaW50IGRpZ2l0YWxfdGdfc2VuZF9hdHJfcmVzKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXG4tLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTE1NDItXHRyYyA9IGRpZ2l0YWxfdGdfc2VuZF9jbWQoZGRldiwgc2tiLCA5OTksXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6MTU0MzpcdFx0XHRcdCBkaWdpdGFsX3RnX3NlbmRfYXRyX3Jlc19jb21wbGV0ZSwgTlVMTCk7XG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTU0NC1cdGlmIChyYylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3ODgKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA4NDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTkZDIERyaXZlciBQYXRjaCBmb3IgUG90ZW50aWFsIElzc3VlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSYjMzk7bSBsb29raW5nIGF0IGBkaWdpdGFsX3RnX3NlbmRfYXRyX3Jlc19jb21wbGV0ZWAuIEl0JiMzOTtzIGEgY2FsbGJhY2sgZnVuY3Rpb24sIGFuZCB0aGUgb3JpZ2luYWwgY29kZSBoYWQgc29tZSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkIHZ1bG5lcmFiaWxpdGllcy4gU3BlY2lmaWNhbGx5LCBpZiB0aGUgcmVzcG9uc2UgYnVmZmVyIGByZXNwYCB3YXMgZW1wdHkgKGByZXNwLSZndDtsZW4gPT0gMGApLCBhY2Nlc3NpbmcgYHJlc3AtJmd0O2RhdGFbMF1gIHdvdWxkIGxlYWQgdG8gYSBjcmFzaC4gU2ltaWxhcmx5LCBpZiB0aGUgcmVzcG9uc2UgbGVuZ3RoIHdhcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYW4gY2FsY3VsYXRlZCBgb2Zmc2V0YCwgcmVhZGluZyBgcmVzcC0mZ3Q7ZGF0YVtvZmZzZXRdYCB3b3VsZCBiZSBiYWQgbmV3cy4gVGhlIHBhdGNoIGFkZGVkIGxlbmd0aCBjaGVja3MgdG8gcHJldmVudCB0aGVzZSBpc3N1ZXMuIEdvb2QgY2F0Y2guIFRoZSBjaGVjayBub3cgZW5zdXJlcyB0aGF0IHRoZSByZXNwb25zZSBsZW5ndGggaXMgc3VmZmljaWVudCBiZWZvcmUgYWNjZXNzaW5nIHRoZSBkYXRhIGF0IHRoZSBzcGVjaWZpZWQgb2Zmc2V0cy4KCk5vdywgSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgc2Vjb25kIHBhcnQgb2YgdGhlIHBhdGNoLCBzcGVjaWZpY2FsbHkgYGRpZ2l0YWxfcmVjdl9kZXBfZGF0YV9nYXRoZXJgLCBhbmQgSSBzZWUgYW4gYWxsb2NhdGlvbiBmb3IgYGRkZXYtJmd0O2NoYWluaW5nX3NrYmAuIFNvbWV0aGluZyBzZWVtcyBvZmYgaGVyZS4gT3JpZ2luYWxseSwgdGhlIGNvZGUgdXNlZCBgbmZjX2FsbG9jX3JlY3Zfc2tiYCB3aGljaCBhbGxvY2F0ZXMgdGhlIGBza2JgIHRoZW4gcmVzZXJ2ZXMgYSBzaW5nbGUgYnl0ZSB1c2luZyBgc2tiX3Jlc2VydmVgLiBIb3dldmVyLCB0aGUgcGF0Y2ggY2hhbmdlZCBpdCB0byBgZGlnaXRhbF9za2JfYWxsb2NgIGFuZCB0aGUgdXNlIG9mIGBza2JfY29weV9leHBhbmRgIHdpdGggZGlmZmVyZW50IGhlYWRyb29tIGFuZCB0YWlscm9vbSBjYWxjdWxhdGlvbnMuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNoYW5nZWQgYW5kIHdoeS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiB1c2luZyBgZGlnaXRhbF9za2JfYWxsb2NgIGFuZCB0aGlzIG5ldyBgc2tiX2NvcHlfZXhwYW5kYCB3aXRoIHRoZSBhbHRlcmVkIGhlYWRyb29tIGFuZCB0YWlscm9vbSBjYWxjdWxhdGlvbnMuIFNvLCBJIG5lZWQgdG8gbG9vayBhdCB3aGVyZSBgZGRldi0mZ3Q7Y2hhaW5pbmdfc2tiYCBpcyB1c2VkIGxhdGVyIG9uIGluIHRoZSBjb2RlIGFuZCB3aGF0IGhhcHBlbnMgdG8gdGhlIHNrYiBhbmQgdGhlIG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlLiBMZXQmIzM5O3Mgc3RhcnQgYnkgc2VhcmNoaW5nIHRoZSBjb2RlYmFzZSBmb3IgZXZlcnkgaW5zdGFuY2Ugb2YgYGNoYWluaW5nX3NrYmAuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIGV2YWx1YXRlIHRoZSBwYXRjaCBhbmQgZGV0ZXJtaW5lIGlmIHRoZSBjaGFuZ2VzIGFyZSBjb3JyZWN0IGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgd2hldGhlciB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBuZXcgaXNzdWVzIGludHJvZHVjZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NoYWluaW5nX3NrYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZmMvZGlnaXRhbC5oPTE5Mj1zdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2IHtcbi0tXG5pbmNsdWRlL25ldC9uZmMvZGlnaXRhbC5oLTIyNC1cbmluY2x1ZGUvbmV0L25mYy9kaWdpdGFsLmg6MjI1Olx0c3RydWN0IHNrX2J1ZmYgKmNoYWluaW5nX3NrYjtcbmluY2x1ZGUvbmV0L25mYy9kaWdpdGFsLmgtMjI2LVx0c3RydWN0IGRpZ2l0YWxfZGF0YV9leGNoICpkYXRhX2V4Y2g7XG4tLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jPTIwMD1kaWdpdGFsX3NlbmRfZGVwX2RhdGFfcHJlcChzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0yMTAtXHRcdGlmICghbmV3X3NrYikge1xubmV0L25mYy9kaWdpdGFsX2RlcC5jOjIxMTpcdFx0XHRrZnJlZV9za2IoZGRldi1cdTAwM2VjaGFpbmluZ19za2IpO1xubmV0L25mYy9kaWdpdGFsX2RlcC5jOjIxMjpcdFx0XHRkZGV2LVx1MDAzZWNoYWluaW5nX3NrYiA9IE5VTEw7XG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMjEzLVxuLS1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0yMTktXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6MjIwOlx0XHRkZGV2LVx1MDAzZWNoYWluaW5nX3NrYiA9IHNrYjtcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0yMjEtXHRcdGRkZXYtXHUwMDNlZGF0YV9leGNoID0gZGF0YV9leGNoO1xubmV0L25mYy9kaWdpdGFsX2RlcC5jLTIyMi1cdH0gZWxzZSB7XG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6MjIzOlx0XHRkZGV2LVx1MDAzZWNoYWluaW5nX3NrYiA9IE5VTEw7XG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMjI0LVx0XHRuZXdfc2tiID0gc2tiO1xuLS1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYz0yMzE9ZGlnaXRhbF9yZWN2X2RlcF9kYXRhX2dhdGhlcihzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCB1OCBwZmIsXG4tLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTI0MC1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzoyNDE6XHRpZiAoRElHSVRBTF9ORkNfREVQX01JX0JJVF9TRVQocGZiKSBcdTAwMjZcdTAwMjYgKCFkZGV2LVx1MDAzZWNoYWluaW5nX3NrYikpIHtcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzoyNDI6XHRcdGRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiID1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0yNDMtXHRcdFx0ZGlnaXRhbF9za2JfYWxsb2MoZGRldixcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0yNDQtXHRcdFx0XHRcdCAgOCAqIGRkZXYtXHUwMDNlbG9jYWxfcGF5bG9hZF9tYXgpO1xubmV0L25mYy9kaWdpdGFsX2RlcC5jOjI0NTpcdFx0aWYgKCFkZGV2LVx1MDAzZWNoYWluaW5nX3NrYikge1xubmV0L25mYy9kaWdpdGFsX2RlcC5jLTI0Ni1cdFx0XHRyYyA9IC1FTk9NRU07XG4tLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTI1MC1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzoyNTE6XHRpZiAoZGRldi1cdTAwM2VjaGFpbmluZ19za2IpIHtcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzoyNTI6XHRcdGlmIChyZXNwLVx1MDAzZWxlbiBcdTAwM2Ugc2tiX3RhaWxyb29tKGRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiKSkge1xubmV0L25mYy9kaWdpdGFsX2RlcC5jOjI1MzpcdFx0XHRuZXdfc2tiID0gc2tiX2NvcHlfZXhwYW5kKGRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiLFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTI1NC1cdFx0XHRcdFx0XHQgIGRkZXYtXHUwMDNldHhfaGVhZHJvb20sXG4tLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTI2Mi1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzoyNjM6XHRcdFx0a2ZyZWVfc2tiKGRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiKTtcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzoyNjQ6XHRcdFx0ZGRldi1cdTAwM2VjaGFpbmluZ19za2IgPSBuZXdfc2tiO1xubmV0L25mYy9kaWdpdGFsX2RlcC5jLTI2NS1cdFx0fVxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTI2Ni1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzoyNjc6XHRcdHNrYl9wdXRfZGF0YShkZGV2LVx1MDAzZWNoYWluaW5nX3NrYiwgcmVzcC1cdTAwM2VkYXRhLCByZXNwLVx1MDAzZWxlbik7XG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMjY4LVxuLS1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0yNzktXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6MjgwOlx0XHRyZXNwID0gZGRldi1cdTAwM2VjaGFpbmluZ19za2I7XG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6MjgxOlx0XHRkZGV2LVx1MDAzZWNoYWluaW5nX3NrYiA9IE5VTEw7XG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMjgyLVx0fVxuLS1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0yODgtXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6Mjg5Olx0a2ZyZWVfc2tiKGRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiKTtcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzoyOTA6XHRkZGV2LVx1MDAzZWNoYWluaW5nX3NrYiA9IE5VTEw7XG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMjkxLVxuLS1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYz02ODY9c3RhdGljIHZvaWQgZGlnaXRhbF9pbl9yZWN2X2RlcF9yZXMoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdm9pZCAqYXJnLFxuLS1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy04MzMtXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6ODM0Olx0XHRpZiAoIWRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiKSB7XG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtODM1LVx0XHRcdFBST1RPQ09MX0VSUihcJiMzNDsxNC4xMi40LjNcJiMzNDspO1xuLS1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy04NDYtXHRcdHJjID0gZGlnaXRhbF9pbl9zZW5kX2RlcF9yZXEoZGRldiwgTlVMTCxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzo4NDc6XHRcdFx0XHRcdCAgICAgZGRldi1cdTAwM2VjaGFpbmluZ19za2IsXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtODQ4LVx0XHRcdFx0XHQgICAgIGRkZXYtXHUwMDNlZGF0YV9leGNoKTtcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtODg4LVxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjg4OTpcdGtmcmVlX3NrYihkZGV2LVx1MDAzZWNoYWluaW5nX3NrYik7XG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6ODkwOlx0ZGRldi1cdTAwM2VjaGFpbmluZ19za2IgPSBOVUxMO1xubmV0L25mYy9kaWdpdGFsX2RlcC5jLTg5MS1cbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM9OTA0PWludCBkaWdpdGFsX2luX3NlbmRfZGVwX3JlcShzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxuLS1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy05MDgtXHRzdHJ1Y3QgZGlnaXRhbF9kZXBfcmVxX3JlcyAqZGVwX3JlcTtcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzo5MDk6XHRzdHJ1Y3Qgc2tfYnVmZiAqY2hhaW5pbmdfc2tiLCAqdG1wX3NrYjtcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy05MTAtXHRpbnQgcmM7XG4tLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTkyMi1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzo5MjM6XHRjaGFpbmluZ19za2IgPSBkZGV2LVx1MDAzZWNoYWluaW5nX3NrYjtcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy05MjQtXG4tLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTk0MC1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzo5NDE6XHRcdGtmcmVlX3NrYihjaGFpbmluZ19za2IpO1xubmV0L25mYy9kaWdpdGFsX2RlcC5jOjk0MjpcdFx0ZGRldi1cdTAwM2VjaGFpbmluZ19za2IgPSBOVUxMO1xubmV0L25mYy9kaWdpdGFsX2RlcC5jLTk0My1cbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM9MTA3Nz1zdGF0aWMgdm9pZCBkaWdpdGFsX3RnX3JlY3ZfZGVwX3JlcShzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCB2b2lkICphcmcsXG4tLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTEyNDQtXHRcdC8qIEtlZXAgb24gc2VuZGluZyBjaGFpbmVkIFBEVSAqL1xubmV0L25mYy9kaWdpdGFsX2RlcC5jOjEyNDU6XHRcdGlmICghZGRldi1cdTAwM2VjaGFpbmluZ19za2IgfHxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xMjQ2LVx0XHQgICAgRElHSVRBTF9ORkNfREVQX1BGQl9QTkkocGZiKSAhPVxuLS1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xMjU0LVxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjEyNTU6XHRcdHJjID0gZGlnaXRhbF90Z19zZW5kX2RlcF9yZXMoZGRldiwgZGRldi1cdTAwM2VjaGFpbmluZ19za2IpO1xubmV0L25mYy9kaWdpdGFsX2RlcC5jLTEyNTYtXHRcdGlmIChyYylcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTI3OS1leGl0OlxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjEyODA6XHRrZnJlZV9za2IoZGRldi1cdTAwM2VjaGFpbmluZ19za2IpO1xubmV0L25mYy9kaWdpdGFsX2RlcC5jOjEyODE6XHRkZGV2LVx1MDAzZWNoYWluaW5nX3NrYiA9IE5VTEw7XG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTI4Mi1cbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM9MTI5Nz1pbnQgZGlnaXRhbF90Z19zZW5kX2RlcF9yZXMoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTI5OS1cdHN0cnVjdCBkaWdpdGFsX2RlcF9yZXFfcmVzICpkZXBfcmVzO1xubmV0L25mYy9kaWdpdGFsX2RlcC5jOjEzMDA6XHRzdHJ1Y3Qgc2tfYnVmZiAqY2hhaW5pbmdfc2tiLCAqdG1wX3NrYjtcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xMzAxLVx0aW50IHJjO1xuLS1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xMzE5LVxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjEzMjA6XHRjaGFpbmluZ19za2IgPSBkZGV2LVx1MDAzZWNoYWluaW5nX3NrYjtcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xMzIxLVxuLS1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xMzM3LVxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjEzMzg6XHRcdGtmcmVlX3NrYihjaGFpbmluZ19za2IpO1xubmV0L25mYy9kaWdpdGFsX2RlcC5jOjEzMzk6XHRcdGRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiID0gTlVMTDtcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xMzQwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQ0MAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDUxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYGRpZ2l0YWxfcmVjdl9kZXBfZGF0YV9nYXRoZXJgIGZvciBORkMgREVQIERhdGEgSGFuZGxpbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpc3NlY3QgdGhpcyBgZGlnaXRhbF9yZWN2X2RlcF9kYXRhX2dhdGhlcmAgZnVuY3Rpb24uIFRoZSBmaXJzdCB0aGluZyBJIHNlZSBpcyB0aGUgaGFuZGxpbmcgb2YgdGhlIGBjaGFpbmluZ19za2JgLiBJdCBzZWVtcyB0byBraWNrIGluIHdoZW4gdGhlIGBESUdJVEFMX05GQ19ERVBfTUlfQklUX1NFVChwZmIpYCBjb25kaXRpb24gaXMgdHJ1ZSBhbmQgdGhlIGRldmljZSBkb2VzbiYjMzk7dCBhbHJlYWR5IGhhdmUgYSBgY2hhaW5pbmdfc2tiYC4gIEluIHRoaXMgY2FzZSwgd2UgYWxsb2NhdGUgYSBuZXcgYGNoYWluaW5nX3NrYmAuIFRoZSBhbGxvY2F0aW9uIGlzIHNpemVkIGJhc2VkIG9uIGBkZGV2LSZndDtsb2NhbF9wYXlsb2FkX21heGAsIHdoaWNoIGxpa2VseSByZXByZXNlbnRzIHRoZSBtYXhpbXVtIGV4cGVjdGVkIHBheWxvYWQgc2l6ZS4gSWYgYWxsb2NhdGlvbiBmYWlscywgd2UgYmFpbCBvdXQgd2l0aCBhbiBgRU5PTUVNYCBlcnJvci4KCklmIHdlIGhhdmUgYSBgY2hhaW5pbmdfc2tiYCBhbHJlYWR5IGFsbG9jYXRlZCwgd2UgbmVlZCB0byBjaGVjayBpZiB3ZSBjYW4gZml0IHRoZSBuZXcgaW5jb21pbmcgZGF0YSAoYHJlc3AtJmd0O2xlbmApIGludG8gaXQuIElmIHRoZSBgcmVzcC0mZ3Q7bGVuYCBleGNlZWRzIHRoZSBhdmFpbGFibGUgdGFpbHJvb20sIHdlIGNvcHkgYW5kIGV4cGFuZCB0aGUgYGNoYWluaW5nX3NrYmAuIFRoaXMgdXNlcyBgc2tiX2NvcHlfZXhwYW5kYCwgaW5jcmVhc2luZyB0aGUgY2FwYWNpdHkgb2YgdGhlIFNLQiwgcHJlc2VydmluZyB0aGUgb3JpZ2luYWwgZGF0YS4gSWYgdGhpcyBleHBhbnNpb24gZmFpbHMsIHdlLCBhZ2FpbiwgcmV0dXJuIGBFTk9NRU1gLgoKTm93LCByZWdhcmRsZXNzIG9mIHRoZSBtZW1vcnkgb3BlcmF0aW9ucywgaWYgd2UmIzM5O3JlIG5vdCBhbGxvY2F0aW5nLCB3ZSYjMzk7cmUgcHV0dGluZyBkYXRhIGZyb20gdGhlIGluY29taW5nIGByZXNwYCBpbnRvIHRoZSBgY2hhaW5pbmdfc2tiYC4gV2UgZnJlZSB0aGUgb3JpZ2luYWwgYHJlc3BgICh0aGUgaW5wdXQpLgoKVGhlIGNydWNpYWwgcGFydCBpcyB0aGUgY29uZGl0aW9uYWwgbG9naWM6IGlmIGBESUdJVEFMX05GQ19ERVBfTUlfQklUX1NFVChwZmIpYCBpcyB0cnVlLCB3ZSBzZW5kIGFuIEFDSyB1c2luZyBgc2VuZF9hY2tgLCBhbmQgcmV0dXJuIE5VTEwuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkIHJlcGVhdGVkbHkgdG8gcHJvY2VzcyBjaGFpbmVkIGZyYWdtZW50cy4KCkhvd2V2ZXIsIGlmIHRoYXQgYml0IGlzICpub3QqIHNldCwgdGhhdCBtZWFucyBpdCYjMzk7cyB0aGUgKmxhc3QqIGZyYWdtZW50IG9mIHRoZSBjaGFpbi4gIEluIHRoaXMgZmluYWwgY2FzZSwgd2UgZG8gdGhlIGNydWNpYWwgYml0LiBXZSBhc3NpZ24gdGhlIGFjY3VtdWxhdGVkIGBjaGFpbmluZ19za2JgIHRvIGByZXNwYCwgbnVsbCBvdXQgYGRkZXYtJmd0O2NoYWluaW5nX3NrYmAgKHNpZ25hbGluZyB0aGUgZW5kIG9mIGNoYWluaW5nKSwgYW5kICp0aGVuKiByZXR1cm4gYHJlc3BgLiBTbyB0aGUgY2hhaW5lZCBkYXRhIGlzIHJldHVybmVkIGFmdGVyIGFsbCBmcmFnbWVudHMgYXJlIHJlY2VpdmVkLgoKTXkgbmV4dCBzdGVwIGlzIHRvIHRyYWNlIGJhY2sgd2hlcmUgYGRpZ2l0YWxfcmVjdl9kZXBfZGF0YV9nYXRoZXJgIGlzIGNhbGxlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBob3cgdGhlIHJldHVybmVkIGByZXNwYCBpcyB1c2VkLiBUaGlzIHdpbGwgc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgbGFyZ2VyIGRhdGEgZXhjaGFuZ2UgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGlnaXRhbF9yZWN2X2RlcF9kYXRhX2dhdGhlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmZjL2RpZ2l0YWxfZGVwLmM9MjMwPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6MjMxOmRpZ2l0YWxfcmVjdl9kZXBfZGF0YV9nYXRoZXIoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdTggcGZiLFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTIzMi1cdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpyZXNwLFxuLS1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYz02ODY9c3RhdGljIHZvaWQgZGlnaXRhbF9pbl9yZWN2X2RlcF9yZXMoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdm9pZCAqYXJnLFxuLS1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy03OTgtXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6Nzk5Olx0XHRyZXNwID0gZGlnaXRhbF9yZWN2X2RlcF9kYXRhX2dhdGhlcihkZGV2LCBwZmIsIHJlc3AsXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtODAwLVx0XHRcdFx0XHRcdCAgICBkaWdpdGFsX2luX3NlbmRfYWNrLFxuLS1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYz0xMDc3PXN0YXRpYyB2b2lkIGRpZ2l0YWxfdGdfcmVjdl9kZXBfcmVxKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHZvaWQgKmFyZyxcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTE4My1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzoxMTg0Olx0XHRyZXNwID0gZGlnaXRhbF9yZWN2X2RlcF9kYXRhX2dhdGhlcihkZGV2LCBwZmIsIHJlc3AsXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTE4NS1cdFx0XHRcdFx0XHQgICAgZGlnaXRhbF90Z19zZW5kX2FjaywgTlVMTCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODM4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCBJIHdvdWxkIGJlIHRoaW5raW5nLCBnaXZlbiB0aGF0IEkmIzM5O20gbG9va2luZyBhdCB0aG9zZSBzcGVjaWZpYyBsaW5lcyBvZiBgbmV0L25mYy9kaWdpdGFsX2RlcC5jYDoKCioqRGVlcCBEaXZlIGludG8gRGlnaXRhbCBERVAgSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgdGltZSB0byBmb2N1cyBvbiBzb21lIGNyaXRpY2FsIHNlY3Rpb25zIHdpdGhpbiBgbmV0L25mYy9kaWdpdGFsX2RlcC5jYC4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGhhcHBlbmluZyBhcm91bmQgbGluZXMgNzk1LTgyMCBhbmQgdGhlbiBqdW1wIGFoZWFkIHRvIGxpbmVzIDExODAtMTIwMC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGxpa2VseSBnb2luZyB0byBiZSBpbiBhbiBhcmVhIHdpdGggYSBoYW5kc2hha2UgcHJvY2Vzcywgb3IgcGVyaGFwcyBmcmFtaW5nL2RhdGEgZXhjaGFuZ2UuCgpTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOgoKKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogV2hhdCYjMzk7cyB0aGUgZXJyb3IgY2hlY2tpbmcgbGlrZSBhcm91bmQgdGhlc2Ugc2VjdGlvbnM/IEFyZSB0aGVyZSByb2J1c3QgY2hlY2tzIGluIHBsYWNlIGZvciBleHBlY3RlZCBjb25kaXRpb25zLCBlc3BlY2lhbGx5IHRpbWluZyBjb25zdHJhaW50cyBvciBkYXRhIHZhbGlkaXR5PwoqICAgKipEYXRhIFN0cnVjdHVyZSBJbnRlcmFjdGlvbnM6KiogSG93IGRvIHRoZXNlIGxpbmVzIGludGVyYWN0IHdpdGggdGhlIG92ZXJhbGwgYGRpZ2l0YWxfZGVwYCBkYXRhIHN0cnVjdHVyZXM/IEFyZSB0aGV5IHJlYWRpbmcsIHdyaXRpbmcsIG9yIG1vZGlmeWluZyBhbnkgY3JpdGljYWwgZmllbGRzPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgSSBuZWVkIHRvIGJlIG1pbmRmdWwgb2Y/CiogICAqKlN0YXRlIE1hbmFnZW1lbnQ6KiogV2hhdCBzdGF0ZSB0cmFuc2l0aW9ucyBhcmUgb2NjdXJyaW5nPyBJcyB0aGlzIGNvZGUgcmVsYXRlZCB0byBpbml0aWFsaXphdGlvbiwgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50LCBkYXRhIHRyYW5zZmVyLCBvciBkaXNjb25uZWN0aW9uPyBVbmRlcnN0YW5kaW5nIHRoZSBzdGF0ZSBmbG93IGlzIGtleSBoZXJlLgoqICAgKipJbnRlcnJ1cHQgSGFuZGxpbmc6KiogRG8gdGhlc2UgbGluZXMgcmVsYXRlIHRvIGFueSBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lcz8gSSYjMzk7bGwgbmVlZCB0byB0aGluayBhYm91dCBwb3RlbnRpYWwgY29udGVudGlvbiBpc3N1ZXMgaWYgaW50ZXJydXB0cyBhcmUgaW52b2x2ZWQuCiogICAqKkNvbmN1cnJlbmN5OioqIEFyZSB0aGVzZSBzZWN0aW9ucyBwb3RlbnRpYWxseSBhY2Nlc3NlZCBieSBtdWx0aXBsZSB0aHJlYWRzIG9yIHByb2Nlc3Nlcz8gSWYgc28sIGFyZSB0aGVyZSBzdWZmaWNpZW50IGxvY2tzIG9yIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zIGluIHBsYWNlIHRvIGd1YXJhbnRlZSBkYXRhIGludGVncml0eT8KKiAgICoqUG93ZXIgTWFuYWdlbWVudDoqKiBBcmUgdGhlcmUgYW55IHBvd2VyLXJlbGF0ZWQgY29uc2lkZXJhdGlvbnM/IEFyZSB0aGVyZSBhbnkgcG93ZXItc2F2aW5nIG1lY2hhbmlzbXMgYmVpbmcgZW1wbG95ZWQgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhlIGJlaGF2aW91cj8KKiAgICoqTkZDIHByb3RvY29sIGRldGFpbHM6KiogSXMgaXQgYSBzcGVjaWZpYyBwYXJ0IG9mIHRoZSBORkMgcHJvdG9jb2wsIHN1Y2ggYXMgSVNPIDE0NDQzLTQgb3Igc29tZXRoaW5nIGVsc2U/IEkgbmVlZCB0byBrbm93IGluIHdoaWNoIHNwZWNpZmljIGRldGFpbHMgb2YgTkZDIHRoaXMgY29kZSBmYWxscyBpbnRvLgoKSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgY2FsbHMgdG8gb3RoZXIgZnVuY3Rpb25zIHdpdGhpbiB0aGUgc2FtZSBmaWxlIG9yLCBpZGVhbGx5LCBmcm9tIHRoZSBjb3JlIE5GQyBzdGFjaywgYW5kIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhvc2UgaW50ZXJhY3Rpb25zIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dC4gTGluZSBudW1iZXJzIGFsb25lIGRvbiYjMzk7dCB0ZWxsIHRoZSB3aG9sZSBzdG9yeSwgYnV0IHRoZXkmIzM5O3JlIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBleHBlY3QgdG8gYmUgYWJsZSB0byBleHRyYWN0IHRoZSBkZXRhaWxzIG9mIHRoZSBzcGVjaWZpYyBmdW5jdGlvbiBjYWxscyBhbmQgdW5kZXJzdGFuZCB3aGF0IGlzIGhhcHBlbmluZy4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25mYy9kaWdpdGFsX2RlcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3OTA6XHRcdFx0XHRnb3RvIGVycm9yO1xuIDc5MTpcdFx0XHR9XG4gNzkyOlx0XG4gNzkzOlx0XHRcdGRkZXYtXHUwMDNlY3Vycl9uZmNfZGVwX3BuaSA9XG4gNzk0Olx0XHRcdFx0RElHSVRBTF9ORkNfREVQX1BGQl9QTkkoZGRldi1cdTAwM2VjdXJyX25mY19kZXBfcG5pICYjNDM7IDEpO1xuIDc5NTpcdFxuIDc5NjpcdFx0XHRrZnJlZV9za2IoZGRldi1cdTAwM2VzYXZlZF9za2IpO1xuIDc5NzpcdFx0XHRkZGV2LVx1MDAzZXNhdmVkX3NrYiA9IE5VTEw7XG4gNzk4Olx0XG4gNzk5Olx0XHRcdHJlc3AgPSBkaWdpdGFsX3JlY3ZfZGVwX2RhdGFfZ2F0aGVyKGRkZXYsIHBmYiwgcmVzcCxcbiA4MDA6XHRcdFx0XHRcdFx0XHQgICAgZGlnaXRhbF9pbl9zZW5kX2FjayxcbiA4MDE6XHRcdFx0XHRcdFx0XHQgICAgZGF0YV9leGNoKTtcbiA4MDI6XHRcdFx0aWYgKElTX0VSUihyZXNwKSkge1xuIDgwMzpcdFx0XHRcdHJjID0gUFRSX0VSUihyZXNwKTtcbiA4MDQ6XHRcdFx0XHRyZXNwID0gTlVMTDtcbiA4MDU6XHRcdFx0XHRnb3RvIGVycm9yO1xuIDgwNjpcdFx0XHR9XG4gODA3Olx0XG4gODA4Olx0XHRcdC8qIElmIHJlc3AgaXMgTlVMTCB0aGVuIHdlJiMzOTtyZSBzdGlsbCBjaGFpbmluZyBzbyByZXR1cm4gYW5kXG4gODA5Olx0XHRcdCAqIHdhaXQgZm9yIHRoZSBuZXh0IHBhcnQgb2YgdGhlIFBEVS4gIEVsc2UsIHRoZSBQRFUgaXNcbiA4MTA6XHRcdFx0ICogY29tcGxldGUgc28gcGFzcyBpdCB1cC5cbiA4MTE6XHRcdFx0ICovXG4gODEyOlx0XHRcdGlmICghcmVzcClcbiA4MTM6XHRcdFx0XHRyZXR1cm47XG4gODE0Olx0XG4gODE1Olx0XHRcdHJjID0gMDtcbiA4MTY6XHRcdFx0YnJlYWs7XG4gODE3Olx0XG4gODE4Olx0XHRjYXNlIERJR0lUQUxfTkZDX0RFUF9QRkJfQUNLX05BQ0tfUERVOlxuIDgxOTpcdFx0XHRpZiAoRElHSVRBTF9ORkNfREVQX05BQ0tfQklUX1NFVChwZmIpKSB7XG4gODIwOlx0XHRcdFx0UFJPVE9DT0xfRVJSKFwmIzM0OzE0LjEyLjQuNVwmIzM0Oyk7XG4gODIxOlx0XHRcdFx0cmMgPSAtRUlPO1xuIDgyMjpcdFx0XHRcdGdvdG8gZXhpdDtcbiA4MjM6XHRcdFx0fVxuIDgyNDpcdFxuIDgyNTpcdFx0XHRpZiAoRElHSVRBTF9ORkNfREVQX1BGQl9QTkkocGZiKSAhPSBkZGV2LVx1MDAzZWN1cnJfbmZjX2RlcF9wbmkpIHtcbiA4MjY6XHRcdFx0XHRQUk9UT0NPTF9FUlIoXCYjMzQ7MTQuMTIuMy4zXCYjMzQ7KTtcbiA4Mjc6XHRcdFx0XHRyYyA9IC1FSU87XG4gODI4Olx0XHRcdFx0Z290byBleGl0O1xuIDgyOTpcdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDExCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCYjMzk7cyBnb2luZyB0aHJvdWdoIG15IG1pbmQsIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIGlmIEkmIzM5O20gdGhlIG9uZSBoYXZpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgYGRpZ2l0YWxfcmVjdl9kZXBfZGF0YV9nYXRoZXJgIEZ1bmN0aW9uIFJldHVybioqCgpBbHJpZ2h0LCBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIGFuZCBteSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiB3aGF0IGhhcHBlbnMgd2hlbiBgZGlnaXRhbF9yZWN2X2RlcF9kYXRhX2dhdGhlcmAgYWN0dWFsbHkgKnJldHVybnMqIGEgdmFsdWUuIFNwZWNpZmljYWxseSwgdGhlIHZhcmlhYmxlIGByZXNwYC4gSSBrbm93IHRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWwgZm9yIGRhdGEgYWNxdWlzaXRpb24sIHNvIHVuZGVyc3RhbmRpbmcgaXRzIGZsb3cgaXMga2V5LiBJIG5lZWQgdG8gdHJhY2UgdGhlIGltcGxpY2F0aW9ucyBvZiB3aGF0ZXZlciByZXNwb25zZSBpdCBnZW5lcmF0ZXMuIEl0JiMzOTtzIHRoZSBnYXRld2F5IHRvIHRoZSBuZXh0IHN0YWdlLgoKTGV0IG1lIHNlZeKApiBJ4oCZbSB6b29taW5nIGluIG9uIHRoZSBhZnRlcm1hdGggb2YgdGhpcyBmdW5jdGlvbiBjYWxsLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgdG8gbGluZSA4MTYsIGJlY2F1c2UgdGhhdCYjMzk7cyBsaWtlbHkgd2hlcmUgdGhlIHByb2dyYW0gZmxvdyByZXN1bWVzICphZnRlciogdGhpcyBjcnVjaWFsIGByZXNwYCBpcyBnZW5lcmF0ZWQuIFRoYXQgbGluZSBpcyBub3cgbXkgZm9jYWwgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY29kZSBpbnRlcnByZXRzIGByZXNwYCwgd2hhdCBkZWNpc2lvbnMgaXQgbWFrZXMgYmFzZWQgb24gaXRzIHZhbHVlLCBhbmQgaG93IHRoYXQgaW5mbHVlbmNlcyBzdWJzZXF1ZW50IG9wZXJhdGlvbnMuIElzIGl0IGEgc3VjY2Vzcy9mYWlsdXJlIGluZGljYXRvcj8gQSBwb2ludGVyIHRvIGRhdGE/IFRoZSBhbnN3ZXIgdG8gdGhhdCBxdWVzdGlvbiB3aWxsIGluZm9ybSBteSBvdmVyYWxsIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZ1bmN0aW9uJiMzOTtzIHJlbGlhYmlsaXR5IGFuZCB0aGUgYWxnb3JpdGhtJiMzOTtzIHJvYnVzdG5lc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25mYy9kaWdpdGFsX2RlcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NjA6XHRcdFx0XHRnb3RvIGZyZWVfcmVzcDtcbiA4NjE6XHRcdFx0fVxuIDg2MjpcdFxuIDg2MzpcdFx0XHRpZiAoZGRldi1cdTAwM2VhdG5fY291bnQgfHwgZGRldi1cdTAwM2VuYWNrX2NvdW50KSB7XG4gODY0Olx0XHRcdFx0UFJPVE9DT0xfRVJSKFwmIzM0OzE0LjEyLjQuNFwmIzM0Oyk7XG4gODY1Olx0XHRcdFx0cmMgPSAtRUlPO1xuIDg2NjpcdFx0XHRcdGdvdG8gZXJyb3I7XG4gODY3Olx0XHRcdH1cbiA4Njg6XHRcbiA4Njk6XHRcdFx0cnRveCA9IERJR0lUQUxfTkZDX0RFUF9SVE9YX1ZBTFVFKHJlc3AtXHUwMDNlZGF0YVswXSk7XG4gODcwOlx0XHRcdGlmICghcnRveCB8fCBydG94IFx1MDAzZSBESUdJVEFMX05GQ19ERVBfUlRPWF9NQVgpIHtcbiA4NzE6XHRcdFx0XHRQUk9UT0NPTF9FUlIoXCYjMzQ7MTQuOC40LjFcJiMzNDspO1xuIDg3MjpcdFx0XHRcdHJjID0gLUVJTztcbiA4NzM6XHRcdFx0XHRnb3RvIGVycm9yO1xuIDg3NDpcdFx0XHR9XG4gODc1Olx0XG4gODc2Olx0XHRcdHJjID0gZGlnaXRhbF9pbl9zZW5kX3J0b3goZGRldiwgZGF0YV9leGNoLCBydG94KTtcbiA4Nzc6XHRcdFx0aWYgKHJjKVxuIDg3ODpcdFx0XHRcdGdvdG8gZXJyb3I7XG4gODc5Olx0XG4gODgwOlx0XHRcdGdvdG8gZnJlZV9yZXNwO1xuIDg4MTpcdFx0fVxuIDg4MjpcdFxuIDg4MzpcdGV4aXQ6XG4gODg0Olx0XHRkYXRhX2V4Y2gtXHUwMDNlY2IoZGF0YV9leGNoLVx1MDAzZWNiX2NvbnRleHQsIHJlc3AsIHJjKTtcbiA4ODU6XHRcbiA4ODY6XHRlcnJvcjpcbiA4ODc6XHRcdGtmcmVlKGRhdGFfZXhjaCk7XG4gODg4Olx0XG4gODg5Olx0XHRrZnJlZV9za2IoZGRldi1cdTAwM2VjaGFpbmluZ19za2IpO1xuIDg5MDpcdFx0ZGRldi1cdTAwM2VjaGFpbmluZ19za2IgPSBOVUxMO1xuIDg5MTpcdFxuIDg5MjpcdFx0a2ZyZWVfc2tiKGRkZXYtXHUwMDNlc2F2ZWRfc2tiKTtcbiA4OTM6XHRcdGRkZXYtXHUwMDNlc2F2ZWRfc2tiID0gTlVMTDtcbiA4OTQ6XHRcbiA4OTU6XHRcdGlmIChyYylcbiA4OTY6XHRcdFx0a2ZyZWVfc2tiKHJlc3ApO1xuIDg5NzpcdFxuIDg5ODpcdFx0cmV0dXJuO1xuIDg5OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTg4MAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDYzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERpZ2l0YWwgTkZDIERFUCBEYXRhIEhhbmRsaW5nIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBob3cgYHNrYl9wdXRfZGF0YWAgaXMgdXNlZCwgc3BlY2lmaWNhbGx5OiBgc2tiX3B1dF9kYXRhKGRkZXYtJmd0O2NoYWluaW5nX3NrYiwgcmVzcC0mZ3Q7ZGF0YSwgcmVzcC0mZ3Q7bGVuKTtgLiAgTXkgZmlyc3QgcXVlc3Rpb24gaXMgYWJvdXQgdGhlIGFsbG9jYXRpb24gb2YgYGRkZXYtJmd0O2NoYWluaW5nX3NrYmAuICBQcmV2aW91c2x5LCBpdCB3YXMgYWxsb2NhdGVkIHVzaW5nIGBuZmNfYWxsb2NfcmVjdl9za2IoOCAqIGRkZXYtJmd0O2xvY2FsX3BheWxvYWRfbWF4LCBHRlBfS0VSTkVMKTtgLiBUaGF0IGFsbG9jYXRlZCBhIHNpemUgcGx1cyBvbmUgYnl0ZSBhbmQgY2FsbGVkIGBza2JfcmVzZXJ2ZShza2IsIDEpYC4gIFNvLCB0aGUgaGVhZHJvb20gd2FzIDEsIGFuZCB0aGUgdGFpbHJvb20gd2FzIGA4ICogZGRldi0mZ3Q7bG9jYWxfcGF5bG9hZF9tYXhgLgoKVGhlIGxvZ2ljIGdvZXM6IFdoZW4gYHJlc3AtJmd0O2xlbmAgZXhjZWVkcyBgc2tiX3RhaWxyb29tKGRkZXYtJmd0O2NoYWluaW5nX3NrYilgLCBhIGBza2JfY29weV9leHBhbmRgIGlzIHRyaWdnZXJlZDoKYGBgYwoJCQluZXdfc2tiID0gc2tiX2NvcHlfZXhwYW5kKGRkZXYtJmd0O2NoYWluaW5nX3NrYiwKCQkJCQkJICBza2JfaGVhZHJvb20oCgkJCQkJCQkgIGRkZXYtJmd0O2NoYWluaW5nX3NrYiksCgkJCQkJCSAgOCAqIGRkZXYtJmd0O2xvY2FsX3BheWxvYWRfbWF4LAoJCQkJCQkgIEdGUF9LRVJORUwpOwpgYGAKCk5vdywgaGVyZSYjMzk7cyB3aGVyZSB0aGUgcGF0Y2ggY29tZXMgaW4sIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2h5KiBpdCBjaGFuZ2VkIHRoaW5ncy4gIFRoZSBhbGxvY2F0aW9uIG9mIHRoZSBgY2hhaW5pbmdfc2tiYCBoYXMgYmVlbiBtb2RpZmllZDoKCmBgYGMKIAlpZiAoRElHSVRBTF9ORkNfREVQX01JX0JJVF9TRVQocGZiKSAmYW1wOyZhbXA7ICghZGRldi0mZ3Q7Y2hhaW5pbmdfc2tiKSkgewogCQlkZGV2LSZndDtjaGFpbmluZ19za2IgPQotCQkJbmZjX2FsbG9jX3JlY3Zfc2tiKDggKiBkZGV2LSZndDtsb2NhbF9wYXlsb2FkX21heCwKLQkJCQkJICAgR0ZQX0tFUk5FTCk7CiYjNDM7CQkJZGlnaXRhbF9za2JfYWxsb2MoZGRldiwKJiM0MzsJCQkJCSAgOCAqIGRkZXYtJmd0O2xvY2FsX3BheWxvYWRfbWF4KTsKIAkJaWYgKCFkZGV2LSZndDtjaGFpbmluZ19za2IpIHsKIAkJCXJjID0gLUVOT01FTTsKIAkJCWdvdG8gZXJyb3I7CmBgYAoKQW5kIHRoZW4gdGhlIGBza2JfY29weV9leHBhbmRgIGhhcyBjaGFuZ2VkIHRvbzoKCmBgYGMKIAlpZiAoZGRldi0mZ3Q7Y2hhaW5pbmdfc2tiKSB7CiAJCWlmIChyZXNwLSZndDtsZW4gJmd0OyBza2JfdGFpbHJvb20oZGRldi0mZ3Q7Y2hhaW5pbmdfc2tiKSkgewogCQkJbmV3X3NrYiA9IHNrYl9jb3B5X2V4cGFuZChkZGV2LSZndDtjaGFpbmluZ19za2IsCi0JCQkJCQkgIHNrYl9oZWFkcm9vbSgKLQkJCQkJCQkgIGRkZXYtJmd0O2NoYWluaW5nX3NrYiksCi0JCQkJCQkgIDggKiBkZGV2LSZndDtsb2NhbF9wYXlsb2FkX21heCwKJiM0MzsJCQkJCQkgIGRkZXYtJmd0O3R4X2hlYWRyb29tLAomIzQzOwkJCQkJCSAgOCAqIGRkZXYtJmd0O2xvY2FsX3BheWxvYWRfbWF4ICYjNDM7CiYjNDM7CQkJCQkJCSAgZGRldi0mZ3Q7dHhfdGFpbHJvb20sCiAJCQkJCQkgIEdGUF9LRVJORUwpOwpgYGAKU28sIHdoeSBoYXMgdGhlIGV4cGFuc2lvbiBvcGVyYXRpb24gc3dpdGNoZWQgZnJvbSB1c2luZyBgc2tiX2hlYWRyb29tKGRkZXYtJmd0O2NoYWluaW5nX3NrYilgIHRvIGBkZGV2LSZndDt0eF9oZWFkcm9vbWAsIGFuZCB0aGUgYWRkaXRpb25hbCBhbGxvY2F0aW9uIGhhcyBnb25lIGZyb20gYDggKiBkZGV2LSZndDtsb2NhbF9wYXlsb2FkX21heGAgdG8gYDggKiBkZGV2LSZndDtsb2NhbF9wYXlsb2FkX21heCAmIzQzOyBkZGV2LSZndDt0eF90YWlscm9vbWA/IFdoZXJlIGFyZSBgZGRldi0mZ3Q7dHhfaGVhZHJvb21gIGFuZCBgZGRldi0mZ3Q7dHhfdGFpbHJvb21gIGNvbWluZyBmcm9tPyBJIG5lZWQgdG8gdHJhY2sgdGhpcyBkb3duOyB0aGVyZSBtdXN0IGJlIHNvbWV0aGluZyBpbiB0aGUgc2V0dXAgdGhhdCYjMzk7cyBub3cgZGljdGF0aW5nIHRoZSBleHBhbnNpb24uIE9rYXksIGxldCYjMzk7cyBjaGVjayAgYGRpZ2l0YWxfdGdfcmVjdl9kZXBfcmVxYCBhbmQgdGhlbiBsb29rIGF0IHRoZSBsaW5lcyBmcm9tIDExODAgdG8gMTIzMCBvZiBgZGlnaXRhbF9kZXAuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIGFuc3dlciBsaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZmMvZGlnaXRhbF9kZXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE4MDpcdFxuMTE4MTpcdFx0XHRrZnJlZV9za2IoZGRldi1cdTAwM2VzYXZlZF9za2IpO1xuMTE4MjpcdFx0XHRkZGV2LVx1MDAzZXNhdmVkX3NrYiA9IE5VTEw7XG4xMTgzOlx0XG4xMTg0Olx0XHRcdHJlc3AgPSBkaWdpdGFsX3JlY3ZfZGVwX2RhdGFfZ2F0aGVyKGRkZXYsIHBmYiwgcmVzcCxcbjExODU6XHRcdFx0XHRcdFx0XHQgICAgZGlnaXRhbF90Z19zZW5kX2FjaywgTlVMTCk7XG4xMTg2Olx0XHRcdGlmIChJU19FUlIocmVzcCkpIHtcbjExODc6XHRcdFx0XHRyYyA9IFBUUl9FUlIocmVzcCk7XG4xMTg4Olx0XHRcdFx0cmVzcCA9IE5VTEw7XG4xMTg5Olx0XHRcdFx0Z290byBleGl0O1xuMTE5MDpcdFx0XHR9XG4xMTkxOlx0XG4xMTkyOlx0XHRcdC8qIElmIHJlc3AgaXMgTlVMTCB0aGVuIHdlJiMzOTtyZSBzdGlsbCBjaGFpbmluZyBzbyByZXR1cm4gYW5kXG4xMTkzOlx0XHRcdCAqIHdhaXQgZm9yIHRoZSBuZXh0IHBhcnQgb2YgdGhlIFBEVS4gIEVsc2UsIHRoZSBQRFUgaXNcbjExOTQ6XHRcdFx0ICogY29tcGxldGUgc28gcGFzcyBpdCB1cC5cbjExOTU6XHRcdFx0ICovXG4xMTk2Olx0XHRcdGlmICghcmVzcClcbjExOTc6XHRcdFx0XHRyZXR1cm47XG4xMTk4Olx0XG4xMTk5Olx0XHRcdHJjID0gMDtcbjEyMDA6XHRcdFx0YnJlYWs7XG4xMjAxOlx0XHRjYXNlIERJR0lUQUxfTkZDX0RFUF9QRkJfQUNLX05BQ0tfUERVOlxuMTIwMjpcdFx0XHRpZiAoRElHSVRBTF9ORkNfREVQX05BQ0tfQklUX1NFVChwZmIpKSB7IC8qIE5BQ0sgKi9cbjEyMDM6XHRcdFx0XHRpZiAoRElHSVRBTF9ORkNfREVQX1BGQl9QTkkocGZiICYjNDM7IDEpICE9XG4xMjA0Olx0XHRcdFx0XHRcdFx0ZGRldi1cdTAwM2VjdXJyX25mY19kZXBfcG5pKSB7XG4xMjA1Olx0XHRcdFx0XHRyYyA9IC1FSU87XG4xMjA2Olx0XHRcdFx0XHRnb3RvIGV4aXQ7XG4xMjA3Olx0XHRcdFx0fVxuMTIwODpcdFxuMTIwOTpcdFx0XHRcdGRkZXYtXHUwMDNlYXRuX2NvdW50ID0gMDtcbjEyMTA6XHRcbjEyMTE6XHRcdFx0XHRyYyA9IGRpZ2l0YWxfdGdfc2VuZF9zYXZlZF9za2IoZGRldik7XG4xMjEyOlx0XHRcdFx0aWYgKHJjKVxuMTIxMzpcdFx0XHRcdFx0Z290byBleGl0O1xuMTIxNDpcdFxuMTIxNTpcdFx0XHRcdGdvdG8gZnJlZV9yZXNwO1xuMTIxNjpcdFx0XHR9XG4xMjE3Olx0XG4xMjE4Olx0XHRcdC8qIEFDSyAqL1xuMTIxOTpcdFx0XHRpZiAoZGRldi1cdTAwM2VhdG5fY291bnQpIHtcbjEyMjA6XHRcdFx0XHQvKiBUaGUgdGFyZ2V0IGhhcyBwcmV2aW91c2x5IHJlY2VpdmVkIG9uZSBvciBtb3JlIEFUTlxuMTIyMTpcdFx0XHRcdCAqIFBEVXMuXG4xMjIyOlx0XHRcdFx0ICovXG4xMjIzOlx0XHRcdFx0ZGRldi1cdTAwM2VhdG5fY291bnQgPSAwO1xuMTIyNDpcdFxuMTIyNTpcdFx0XHRcdC8qIElmIHRoZSBBQ0sgUE5JIGlzIGVxdWFsIHRvIHRoZSB0YXJnZXQgUE5JIC0gMSBtZWFuc1xuMTIyNjpcdFx0XHRcdCAqIHRoYXQgdGhlIGluaXRpYXRvciBkaWQgbm90IHJlY2VpdmUgdGhlIHByZXZpb3VzIFBEVVxuMTIyNzpcdFx0XHRcdCAqIHNlbnQgYnkgdGhlIHRhcmdldCBzbyByZS1zZW5kIGl0LlxuMTIyODpcdFx0XHRcdCAqL1xuMTIyOTpcdFx0XHRcdGlmIChESUdJVEFMX05GQ19ERVBfUEZCX1BOSShwZmIgJiM0MzsgMSkgPT1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIwODgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgc25pcHBldC4gQXMgYW4gZXhwZXJ0IGluIG15IGZpZWxkLCBteSB0aG91Z2h0IHByb2Nlc3Mgd291bGQgYmU6CgoqKkFuYWx5emluZyB0aGUgRGlnaXRhbCBURyBSZWNlaXZlIERlcGVuZGVuY3kgUmVxdWVzdCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGRpZ2l0YWxfdGdfcmVjdl9kZXBfcmVxYCBoZXJlLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgZmxvdyBvZiB0aGUgYHJlc3BgIHZhcmlhYmxlIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLiBXaGVyZSBkb2VzIGl0IGNvbWUgZnJvbT8gV2hhdCBvcGVyYXRpb25zIGFyZSBwZXJmb3JtZWQgb24gaXQ/IFVsdGltYXRlbHksIEkgd2FudCB0byB0cmFjZSBob3cgaXQmIzM5O3MgdXNlZCBhbmQgd2hhdCBpbXBhY3QgdGhhdCBoYXMgb24gdGhlIGxhcmdlciBzeXN0ZW0uIElzIGByZXNwYCBhIHN0YXR1cyBjb2RlPyBBIHBvaW50ZXIgdG8gYSBkYXRhIHN0cnVjdHVyZT8gVW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgYmUga2V5IHRvIGdyYXNwaW5nIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBkaWdpdGFsIHRydW5rIGdyb3VwIChURykgcmVjZWl2ZSBwcm9jZXNzIGFuZCBhbnkgZGVwZW5kZW5jaWVzIGl0IGludHJvZHVjZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IG9mIGByZXNwYCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoaXMgcHJvY2Vzcy4gVGltZSB0byBkaWcgaW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25mYy9kaWdpdGFsX2RlcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjYwOlx0XHRjYXNlIERJR0lUQUxfTkZDX0RFUF9QRkJfU1VQRVJWSVNPUl9QRFU6XG4xMjYxOlx0XHRcdGlmIChESUdJVEFMX05GQ19ERVBfUEZCX0lTX1RJTUVPVVQocGZiKSkge1xuMTI2MjpcdFx0XHRcdHJjID0gLUVJTlZBTDtcbjEyNjM6XHRcdFx0XHRnb3RvIGV4aXQ7XG4xMjY0Olx0XHRcdH1cbjEyNjU6XHRcbjEyNjY6XHRcdFx0cmMgPSBkaWdpdGFsX3RnX3NlbmRfYXRuKGRkZXYpO1xuMTI2NzpcdFx0XHRpZiAocmMpXG4xMjY4Olx0XHRcdFx0Z290byBleGl0O1xuMTI2OTpcdFxuMTI3MDpcdFx0XHRkZGV2LVx1MDAzZWF0bl9jb3VudCYjNDM7JiM0Mzs7XG4xMjcxOlx0XG4xMjcyOlx0XHRcdGdvdG8gZnJlZV9yZXNwO1xuMTI3MzpcdFx0fVxuMTI3NDpcdFxuMTI3NTpcdFx0cmMgPSBuZmNfdG1fZGF0YV9yZWNlaXZlZChkZGV2LVx1MDAzZW5mY19kZXYsIHJlc3ApO1xuMTI3NjpcdFx0aWYgKHJjKVxuMTI3NzpcdFx0XHRyZXNwID0gTlVMTDtcbjEyNzg6XHRcbjEyNzk6XHRleGl0OlxuMTI4MDpcdFx0a2ZyZWVfc2tiKGRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiKTtcbjEyODE6XHRcdGRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiID0gTlVMTDtcbjEyODI6XHRcbjEyODM6XHRcdGRkZXYtXHUwMDNlYXRuX2NvdW50ID0gMDtcbjEyODQ6XHRcbjEyODU6XHRcdGtmcmVlX3NrYihkZGV2LVx1MDAzZXNhdmVkX3NrYik7XG4xMjg2Olx0XHRkZGV2LVx1MDAzZXNhdmVkX3NrYiA9IE5VTEw7XG4xMjg3Olx0XG4xMjg4Olx0XHRpZiAocmMpXG4xMjg5Olx0XHRcdGtmcmVlX3NrYihyZXNwKTtcbjEyOTA6XHRcbjEyOTE6XHRcdHJldHVybjtcbjEyOTI6XHRcbjEyOTM6XHRmcmVlX3Jlc3A6XG4xMjk0Olx0XHRkZXZfa2ZyZWVfc2tiKHJlc3ApO1xuMTI5NTpcdH1cbjEyOTY6XHRcbjEyOTc6XHRpbnQgZGlnaXRhbF90Z19zZW5kX2RlcF9yZXMoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjEyOTg6XHR7XG4xMjk5Olx0XHRzdHJ1Y3QgZGlnaXRhbF9kZXBfcmVxX3JlcyAqZGVwX3JlcztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI4NjYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBBIEZvY3VzZWQgUmV2aWV3IFBvaW50KioKCldhaXQgYSBtaW51dGUhIFRoYXQmIzM5O3MgaXQhIE15IGludHVpdGlvbiB0ZWxscyBtZSB3ZSBuZWVkIHRvIGltbWVkaWF0ZWx5IHBpdm90IG91ciBhdHRlbnRpb24gb3ZlciB0byB0aGUgYGRpZ2l0YWxfc2VuZF9kZXBfZGF0YV9wcmVwYCBtb2R1bGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHpvb20gaW4gb24gbGluZXMgMjAwIHRocm91Z2ggMjMwLiBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBhcmVhIHRvIHNjcnV0aW5pemUuIExldCYjMzk7cyBnZXQgcmlnaHQgdG8gaXQgYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmZjL2RpZ2l0YWxfZGVwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE5NTpcdFxuIDE5NjpcdFx0cmV0dXJuIDA7XG4gMTk3Olx0fVxuIDE5ODpcdFxuIDE5OTpcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqXG4gMjAwOlx0ZGlnaXRhbF9zZW5kX2RlcF9kYXRhX3ByZXAoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAyMDE6XHRcdFx0XHQgICBzdHJ1Y3QgZGlnaXRhbF9kZXBfcmVxX3JlcyAqZGVwX3JlcV9yZXMsXG4gMjAyOlx0XHRcdFx0ICAgc3RydWN0IGRpZ2l0YWxfZGF0YV9leGNoICpkYXRhX2V4Y2gpXG4gMjAzOlx0e1xuIDIwNDpcdFx0c3RydWN0IHNrX2J1ZmYgKm5ld19za2I7XG4gMjA1Olx0XG4gMjA2Olx0XHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2UgZGRldi1cdTAwM2VyZW1vdGVfcGF5bG9hZF9tYXgpIHtcbiAyMDc6XHRcdFx0ZGVwX3JlcV9yZXMtXHUwMDNlcGZiIHw9IERJR0lUQUxfTkZDX0RFUF9QRkJfTUlfQklUO1xuIDIwODpcdFxuIDIwOTpcdFx0XHRuZXdfc2tiID0gZGlnaXRhbF9za2JfYWxsb2MoZGRldiwgZGRldi1cdTAwM2VyZW1vdGVfcGF5bG9hZF9tYXgpO1xuIDIxMDpcdFx0XHRpZiAoIW5ld19za2IpIHtcbiAyMTE6XHRcdFx0XHRrZnJlZV9za2IoZGRldi1cdTAwM2VjaGFpbmluZ19za2IpO1xuIDIxMjpcdFx0XHRcdGRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiID0gTlVMTDtcbiAyMTM6XHRcbiAyMTQ6XHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiAyMTU6XHRcdFx0fVxuIDIxNjpcdFxuIDIxNzpcdFx0XHRza2JfcHV0X2RhdGEobmV3X3NrYiwgc2tiLVx1MDAzZWRhdGEsIGRkZXYtXHUwMDNlcmVtb3RlX3BheWxvYWRfbWF4KTtcbiAyMTg6XHRcdFx0c2tiX3B1bGwoc2tiLCBkZGV2LVx1MDAzZXJlbW90ZV9wYXlsb2FkX21heCk7XG4gMjE5Olx0XG4gMjIwOlx0XHRcdGRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiID0gc2tiO1xuIDIyMTpcdFx0XHRkZGV2LVx1MDAzZWRhdGFfZXhjaCA9IGRhdGFfZXhjaDtcbiAyMjI6XHRcdH0gZWxzZSB7XG4gMjIzOlx0XHRcdGRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiID0gTlVMTDtcbiAyMjQ6XHRcdFx0bmV3X3NrYiA9IHNrYjtcbiAyMjU6XHRcdH1cbiAyMjY6XHRcbiAyMjc6XHRcdHJldHVybiBuZXdfc2tiO1xuIDIyODpcdH1cbiAyMjk6XHRcbiAyMzA6XHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKlxuIDIzMTpcdGRpZ2l0YWxfcmVjdl9kZXBfZGF0YV9nYXRoZXIoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdTggcGZiLFxuIDIzMjpcdFx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnJlc3AsXG4gMjMzOlx0XHRcdFx0ICAgICBpbnQgKCpzZW5kX2Fjaykoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcbiAyMzQ6XHRcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgZGlnaXRhbF9kYXRhX2V4Y2hcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM2OTEKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA4NTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5GQyBDaGFpbmluZyBTS0JzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgbmZjL2RpZ2l0YWxfZGVwLmNgIGNvZGUuIE15IGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGhhbmRsaW5nIG9mIGNoYWluZWQgcGFja2V0cywgc3BlY2lmaWNhbGx5IGFyb3VuZCBgZGRldi0mZ3Q7Y2hhaW5pbmdfc2tiYC4gRmlyc3QsIEkgc2VlIHRoYXQgYGRkZXYtJmd0O2NoYWluaW5nX3NrYmAgaXMgdXNlZCBpbiBgZGlnaXRhbF9zZW5kX2RlcF9kYXRhX3ByZXBgIGZvciAqc2VuZGluZyogY2hhaW5lZCBwYWNrZXRzLiBUaGVuLCBpbiBgZGlnaXRhbF9yZWN2X2RlcF9kYXRhX2dhdGhlcmAsIGl0JiMzOTtzIHVzZWQgZm9yICpnYXRoZXJpbmcqIHJlY2VpdmVkIGNoYWluZWQgcGFja2V0cywgd2hpY2ggbWFrZXMgbG9naWNhbCBzZW5zZS4KCk5vdywgaG9sZCBvbi4uLiBXaHkgdGhlIGNoYW5nZSBmcm9tIGBuZmNfYWxsb2NfcmVjdl9za2JgIHRvIGBkaWdpdGFsX3NrYl9hbGxvY2AgaW4gdGhlIHJlY2VpdmluZyBmdW5jdGlvbiwgYGRpZ2l0YWxfcmVjdl9kZXBfZGF0YV9nYXRoZXJgPyBUaGlzIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suIEFoYSEgSGVyZSBpdCBpczoKCmBgYGMKCWlmIChESUdJVEFMX05GQ19ERVBfTUlfQklUX1NFVChwZmIpICZhbXA7JmFtcDsgKCFkZGV2LSZndDtjaGFpbmluZ19za2IpKSB7CgkJZGRldi0mZ3Q7Y2hhaW5pbmdfc2tiID0KCQkJZGlnaXRhbF9za2JfYWxsb2MoZGRldiwKCQkJCQkgIDggKiBkZGV2LSZndDtsb2NhbF9wYXlsb2FkX21heCk7CgkJaWYgKCFkZGV2LSZndDtjaGFpbmluZ19za2IpIHsKCQkJcmMgPSAtRU5PTUVNOwoJCQlnb3RvIGVycm9yOwoJCX0KCX0KCglpZiAoZGRldi0mZ3Q7Y2hhaW5pbmdfc2tiKSB7CgkJaWYgKHJlc3AtJmd0O2xlbiAmZ3Q7IHNrYl90YWlscm9vbShkZGV2LSZndDtjaGFpbmluZ19za2IpKSB7CgkJCW5ld19za2IgPSBza2JfY29weV9leHBhbmQoZGRldi0mZ3Q7Y2hhaW5pbmdfc2tiLAoJCQkJCQkgIGRkZXYtJmd0O3R4X2hlYWRyb29tLAoJCQkJCQkgIDggKiBkZGV2LSZndDtsb2NhbF9wYXlsb2FkX21heCAmIzQzOwoJCQkJCQkJICBkZGV2LSZndDt0eF90YWlscm9vbSwKCQkJCQkJICBHRlBfS0VSTkVMKTsKCQkJaWYgKCFuZXdfc2tiKSB7CgkJCQlyYyA9IC1FTk9NRU07CgkJCQlnb3RvIGVycm9yOwoJCQl9CgoJCQlrZnJlZV9za2IoZGRldi0mZ3Q7Y2hhaW5pbmdfc2tiKTsKCQkJZGRldi0mZ3Q7Y2hhaW5pbmdfc2tiID0gbmV3X3NrYjsKCQl9CgoJCXNrYl9wdXRfZGF0YShkZGV2LSZndDtjaGFpbmluZ19za2IsIHJlc3AtJmd0O2RhdGEsIHJlc3AtJmd0O2xlbik7Ci4uLgpgYGAKCkkgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nLiBUaGUgY29kZSBjaGVja3MgaWYgdGhlIE1JIGJpdCBpcyBzZXQgKGBESUdJVEFMX05GQ19ERVBfTUlfQklUX1NFVChwZmIpYCkgYW5kIHRoZSBgY2hhaW5pbmdfc2tiYCBkb2VzbiYjMzk7dCBleGlzdC4gSWYgYm90aCBhcmUgdHJ1ZSwgaXQgKmFsbG9jYXRlcyogYGRkZXYtJmd0O2NoYWluaW5nX3NrYmAgdXNpbmcgYGRpZ2l0YWxfc2tiX2FsbG9jYC4gT2theSwgZG9lcyB0aGlzIG1lYW4gdGhlIG9sZCBtZXRob2QgZGlkICpub3QqIGFsbG9jYXRlPyBMZXQmIzM5O3MgY2hlY2sgdGhlIGNvZGU6CgpgYGBjCnN0cnVjdCBza19idWZmICpkaWdpdGFsX3NrYl9hbGxvYyhzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LAoJCQkJICB1bnNpZ25lZCBpbnQgbGVuKQp7CglzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwoKCXNrYiA9IGFsbG9jX3NrYihsZW4gJiM0MzsgZGRldi0mZ3Q7dHhfaGVhZHJvb20gJiM0MzsgZGRldi0mZ3Q7dHhfdGFpbHJvb20sCgkJCUdGUF9LRVJORUwpOwoJaWYgKHNrYikKCQlza2JfcmVzZXJ2ZShza2IsIGRkZXYtJmd0O3R4X2hlYWRyb29tKTsKCglyZXR1cm4gc2tiOwp9CmBgYAoKWWVzLCBgZGlnaXRhbF9za2JfYWxsb2NgICpkb2VzKiBjYWxsIGBhbGxvY19za2JgLCBzbyBpdCAqZG9lcyogYWxsb2NhdGUgbWVtb3J5LiBJdCByZXNlcnZlcyBtZW1vcnkgdG9vLiBPa2F5LCBzbyB0aGF0IHJlc29sdmVzIHRoZSBhbGxvY2F0aW9uLgoKV2FpdCwgYmFjayB0byBgZGlnaXRhbF9yZWN2X2RlcF9kYXRhX2dhdGhlcmAuIEJlZm9yZSwgaXQgd2FzIHVzaW5nIGBkZGV2LSZndDtjaGFpbmluZ19za2IgPSBuZmNfYWxsb2NfcmVjdl9za2IoOCAqIGRkZXYtJmd0O2xvY2FsX3BheWxvYWRfbWF4LCBHRlBfS0VSTkVMKTtgIHdoaWNoLCBJIHJlY2FsbCwgd2FzIGVxdWl2YWxlbnQgdG8gYGFsbG9jX3NrYig4ICogZGRldi0mZ3Q7bG9jYWxfcGF5bG9hZF9tYXggJiM0MzsgMSwgZ2ZwKTsgc2tiX3Jlc2VydmUoc2tiLCAxKTtgLgoKSWYgdGhlIGByZXNwLSZndDtsZW5gIGV4Y2VlZHMgYHNrYl90YWlscm9vbShkZGV2LSZndDtjaGFpbmluZ19za2IpYCwgd2Ugc2VlIHRoaXM6CgpgYGBjCgkJCW5ld19za2IgPSBza2JfY29weV9leHBhbmQoZGRldi0mZ3Q7Y2hhaW5pbmdfc2tiLAoJCQkJCQkgIHNrYl9oZWFkcm9vbSgKCQkJCQkJCSAgZGRldi0mZ3Q7Y2hhaW5pbmdfc2tiKSwKCQkJCQkJICA4ICogZGRldi0mZ3Q7bG9jYWxfcGF5bG9hZF9tYXgsCgkJCQkJCSAgR0ZQX0tFUk5FTCk7CmBgYAoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgdGhlIHBhcmFtZXRlcnMgdG8gYHNrYl9jb3B5X2V4cGFuZGA6IGBza2JfY29weV9leHBhbmQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5ld2hlYWRyb29tLCBpbnQgbmV3dGFpbHJvb20sIGdmcF90IGdmcF9tYXNrKWAuIEkmIzM5O2xsIHdhbnQgdG8gY2hlY2sgaG93IHRoZSBoZWFkcm9vbSBhbmQgdGFpbHJvb20gYXJlIHNldC4gT2theSwgSSYjMzk7bGwgbmVlZCB0byBnbyB0byBgbmV0L2NvcmUvc2tidWZmLgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBza19idWZmIFxcKnNrYl9jb3B5X2V4cGFuZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE0NTQ9c3RydWN0IHNrX2J1ZmYgKnNrYl9leHBhbmRfaGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaGVhZHJvb20pO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxNDU1OnN0cnVjdCBza19idWZmICpza2JfY29weV9leHBhbmQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5ld2hlYWRyb29tLFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNDU2LVx0XHRcdFx0aW50IG5ld3RhaWxyb29tLCBnZnBfdCBwcmlvcml0eSk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MjQ4NT1FWFBPUlRfU1lNQk9MKHNrYl9leHBhbmRfaGVhZCk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMjUwNC0gKi9cbm5ldC9jb3JlL3NrYnVmZi5jOjI1MDU6c3RydWN0IHNrX2J1ZmYgKnNrYl9jb3B5X2V4cGFuZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvc2tidWZmLmMtMjUwNi1cdFx0XHRcdGludCBuZXdoZWFkcm9vbSwgaW50IG5ld3RhaWxyb29tLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjczLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTgxOAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgc2tiX2NvcHlfZXhwYW5kYCoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBpbnRvIHRoaXMuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgYHNrYl9jb3B5X2V4cGFuZGAuIEkgYWxyZWFkeSBrbm93IHRoZSBjb3JlIHB1cnBvc2U6IHRvIGNyZWF0ZSBhIG5ldyBgc2tfYnVmZmAgKHNvY2tldCBidWZmZXIpIHdpdGggYSBsYXJnZXIgZGF0YSBidWZmZXIsIGNvcHlpbmcgdGhlIGV4aXN0aW5nIGRhdGEgZnJvbSBhIHNvdXJjZSBTS0IgaW50byBpdC4gVGhlICYjMzk7ZXhwYW5kJiMzOTsgcGFydCBpcyBjcnVjaWFsOyBpdCYjMzk7cyBhYm91dCBhbGxvY2F0aW5nIGEgcG90ZW50aWFsbHkgKnNpZ25pZmljYW50bHkqIGxhcmdlciBidWZmZXIsIHVzZWZ1bCBmb3IgaGFuZGxpbmcgdGhpbmdzIGxpa2Ugc2VnbWVudGF0aW9uIG9yIHByb3RvY29sIGhlYWRlciBpbnNlcnRpb24uIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ2llcyBhbmQgaG93IHRoZXkgaGFuZGxlIHRoZSBwb3RlbnRpYWwgZm9yIGZyYWdtZW50YXRpb24sIGVzcGVjaWFsbHkgdW5kZXIgbWVtb3J5IHByZXNzdXJlLgoKTXkga2V5IGZvY3VzIHdpbGwgYmU6CgoqICAgKipNZW1vcnkgTWFuYWdlbWVudDoqKiBIb3cgaXMgdGhlIG5ldyBidWZmZXIgYWxsb2NhdGVkPyBJcyBpdCB1c2luZyBga21hbGxvY2AsIGBfX2dldF9mcmVlX3BhZ2VzYCwgb3Igc29tZXRoaW5nIG1vcmUgc3BlY2lhbGl6ZWQ/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNob3NlbiBhbGxvY2F0aW9uIHN0cmF0ZWd5IGluIHRlcm1zIG9mIHBlcmZvcm1hbmNlIGFuZCBwb3RlbnRpYWwgZm9yIGZyYWdtZW50YXRpb24/IEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGV5IGhhbmRsZSBOVU1BIGFyY2hpdGVjdHVyZXMuCiogICAqKkRhdGEgQ29weWluZzoqKiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGUgZGV0YWlscyBvZiB0aGUgY29weSBvcGVyYXRpb24gaXRzZWxmLiBEb2VzIGl0IHVzZSBgbWVtY3B5YCBvciBzb21lIG90aGVyIG9wdGltaXplZCBjb3B5IHJvdXRpbmU/IFdoYXQmIzM5O3MgdGhlIGVycm9yIGhhbmRsaW5nPyBBcmUgdGhleSB0YWtpbmcgaW50byBhY2NvdW50IHBhZ2UgYm91bmRhcmllcz8gRG9lcyB0aGUgZnVuY3Rpb24gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZSBjb3B5IHNwYW5zIG11bHRpcGxlIHBhZ2VzIGVmZmVjdGl2ZWx5PwoqICAgKipTS0IgSGVhZGVyIFVwZGF0ZXM6KiogQWZ0ZXIgdGhlIGNvcHksIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB3aGF0JiMzOTtzIGhhcHBlbmluZyB0byB0aGUgU0tCIGhlYWRlci4gRG9lcyB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IHVwZGF0ZSBwb2ludGVycyBsaWtlIGBkYXRhYCwgYHRhaWxgLCBgZW5kYCwgYW5kIGBsZW5gIHRvIHJlZmxlY3QgdGhlIG5ldyBidWZmZXIgYW5kIHRoZSBjb3BpZWQgZGF0YT8gSG93IGlzIHRoZSBgdHJ1ZXNpemVgIHVwZGF0ZWQ/CiogICAqKkVycm9yIEhhbmRsaW5nIGFuZCBSZXR1cm4gVmFsdWVzOioqIFdoYXQgYXJlIHRoZSBwb3NzaWJsZSByZXR1cm4gdmFsdWVzPyBIb3cgZG9lcyB0aGUgZnVuY3Rpb24gc2lnbmFsIHN1Y2Nlc3Mgb3IgZmFpbHVyZT8gRG9lcyBpdCBoYW5kbGUgcG90ZW50aWFsIGVycm9ycyBkdXJpbmcgbWVtb3J5IGFsbG9jYXRpb24gZ3JhY2VmdWxseSwgYW5kIGlmIHNvLCBob3c/IEFuZCBvZiBjb3Vyc2UsIGhvdyBkb2VzIGl0IGhhbmRsZSByZWZlcmVuY2UgY291bnRpbmcuCiogICAqKkNvbnNpZGVyYXRpb24gb2YgQ29udGV4dHMqKiBXaGF0IGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBpcyB1c2VkIHdpdGhpbiB0aGUgZnVuY3Rpb24/IEhvdyBkb2VzIGl0IGFmZmVjdCB0aGUgdmFyaW91cyBuZXR3b3JrIHN0YWNrIHRocmVhZHMgdGhhdCB1c2UgdGhlIGZ1bmN0aW9uPwoKSSYjMzk7bSBhbHNvIGN1cmlvdXMgYWJvdXQgd2hldGhlciB0aGV5JiMzOTtyZSB1c2luZyBhbnkgb3B0aW1pemF0aW9uIHRlY2huaXF1ZXMsIHN1Y2ggYXMgcHJlLWNhbGN1bGF0aW5nIHRoZSByZXF1aXJlZCBidWZmZXIgc2l6ZSBvciBjYWNoaW5nIGFsbG9jYXRpb24gZGF0YS4gSXQgaXMgaW1wb3J0YW50IHRvIGtub3cgaWYgdGhlIGZ1bmN0aW9uIGRvZXMgYW55IGtpbmQgb2YgcHJlLWNvbXB1dGF0aW9uIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLiBVbmRlcnN0YW5kaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNob3NlbiBhbGdvcml0aG1zIGFuZCBkYXRhIHN0cnVjdHVyZXMgd2lsbCBhbGxvdyBtZSB0byBhc3Nlc3MgdGhlIGZ1bmN0aW9uJiMzOTtzIHN1aXRhYmlsaXR5IGZvciBkaWZmZXJlbnQgd29ya2xvYWRzIGFuZCBpdHMgcG90ZW50aWFsIGltcGFjdCBvbiBvdmVyYWxsIG5ldHdvcmsgcGVyZm9ybWFuY2UuIEkgd2FudCB0byBzZWUgaWYgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSBvcHRpbWFsIG9yIHdoZXRoZXIgSSBjYW4gaGVscCBvcHRpbWl6ZSBpdCBteXNlbGYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI1MDU6XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2NvcHlfZXhwYW5kKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4yNTA2Olx0XHRcdFx0XHRpbnQgbmV3aGVhZHJvb20sIGludCBuZXd0YWlscm9vbSxcbjI1MDc6XHRcdFx0XHRcdGdmcF90IGdmcF9tYXNrKVxuMjUwODpcdHtcbjI1MDk6XHRcdC8qXG4yNTEwOlx0XHQgKlx0QWxsb2NhdGUgdGhlIGNvcHkgYnVmZmVyXG4yNTExOlx0XHQgKi9cbjI1MTI6XHRcdGludCBoZWFkX2NvcHlfbGVuLCBoZWFkX2NvcHlfb2ZmO1xuMjUxMzpcdFx0c3RydWN0IHNrX2J1ZmYgKm47XG4yNTE0Olx0XHRpbnQgb2xkaGVhZHJvb207XG4yNTE1Olx0XG4yNTE2Olx0XHRpZiAoIXNrYl9mcmFnc19yZWFkYWJsZShza2IpKVxuMjUxNzpcdFx0XHRyZXR1cm4gTlVMTDtcbjI1MTg6XHRcbjI1MTk6XHRcdGlmIChXQVJOX09OX09OQ0Uoc2tiX3NoaW5mbyhza2IpLVx1MDAzZWdzb190eXBlIFx1MDAyNiBTS0JfR1NPX0ZSQUdMSVNUKSlcbjI1MjA6XHRcdFx0cmV0dXJuIE5VTEw7XG4yNTIxOlx0XG4yNTIyOlx0XHRvbGRoZWFkcm9vbSA9IHNrYl9oZWFkcm9vbShza2IpO1xuMjUyMzpcdFx0biA9IF9fYWxsb2Nfc2tiKG5ld2hlYWRyb29tICYjNDM7IHNrYi1cdTAwM2VsZW4gJiM0MzsgbmV3dGFpbHJvb20sXG4yNTI0Olx0XHRcdFx0Z2ZwX21hc2ssIHNrYl9hbGxvY19yeF9mbGFnKHNrYiksXG4yNTI1Olx0XHRcdFx0TlVNQV9OT19OT0RFKTtcbjI1MjY6XHRcdGlmICghbilcbjI1Mjc6XHRcdFx0cmV0dXJuIE5VTEw7XG4yNTI4Olx0XG4yNTI5Olx0XHRza2JfcmVzZXJ2ZShuLCBuZXdoZWFkcm9vbSk7XG4yNTMwOlx0XG4yNTMxOlx0XHQvKiBTZXQgdGhlIHRhaWwgcG9pbnRlciBhbmQgbGVuZ3RoICovXG4yNTMyOlx0XHRza2JfcHV0KG4sIHNrYi1cdTAwM2VsZW4pO1xuMjUzMzpcdFxuMjUzNDpcdFx0aGVhZF9jb3B5X2xlbiA9IG9sZGhlYWRyb29tO1xuMjUzNTpcdFx0aGVhZF9jb3B5X29mZiA9IDA7XG4yNTM2Olx0XHRpZiAobmV3aGVhZHJvb20gXHUwMDNjPSBoZWFkX2NvcHlfbGVuKVxuMjUzNzpcdFx0XHRoZWFkX2NvcHlfbGVuID0gbmV3aGVhZHJvb207XG4yNTM4Olx0XHRlbHNlXG4yNTM5Olx0XHRcdGhlYWRfY29weV9vZmYgPSBuZXdoZWFkcm9vbSAtIGhlYWRfY29weV9sZW47XG4yNTQwOlx0XG4yNTQxOlx0XHQvKiBDb3B5IHRoZSBsaW5lYXIgaGVhZGVyIGFuZCBkYXRhLiAqL1xuMjU0MjpcdFx0QlVHX09OKHNrYl9jb3B5X2JpdHMoc2tiLCAtaGVhZF9jb3B5X2xlbiwgbi1cdTAwM2VoZWFkICYjNDM7IGhlYWRfY29weV9vZmYsXG4yNTQzOlx0XHRcdFx0ICAgICBza2ItXHUwMDNlbGVuICYjNDM7IGhlYWRfY29weV9sZW4pKTtcbjI1NDQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcwNDgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMTkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTkZDIERpZ2l0YWwgRGV2aWNlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSBgc2tiX2NvcHlfZXhwYW5kYCBpcyBiZWluZyB1c2VkLiBJdCBhbGxvY2F0ZXMgYSBuZXcgc29ja2V0IGJ1ZmZlciB3aXRoIGBuZXdoZWFkcm9vbWAsIGBza2ItJmd0O2xlbmAsIGFuZCBgbmV3dGFpbHJvb21gLiBUaGUgZnVuY3Rpb24gdGhlbiBjb3BpZXMgYHNrYi0mZ3Q7bGVuYCBieXRlcy4gVGhlIGZ1bmN0aW9uIGBkaWdpdGFsX3JlY3ZfZGVwX2RhdGFfZ2F0aGVyYCBjYWxscyBpdCBsaWtlIHRoaXM6CgpgYGBjCgkJCW5ld19za2IgPSBza2JfY29weV9leHBhbmQoZGRldi0mZ3Q7Y2hhaW5pbmdfc2tiLAoJCQkJCQkgIGRkZXYtJmd0O3R4X2hlYWRyb29tLAoJCQkJCQkgIDggKiBkZGV2LSZndDtsb2NhbF9wYXlsb2FkX21heCAmIzQzOwoJCQkJCQkJICBkZGV2LSZndDt0eF90YWlscm9vbSwKCQkJCQkJICBHRlBfS0VSTkVMKTsKYGBgCgpUaGVuIGBza2JfcHV0X2RhdGFgIGlzIHVzZWQgdG8gYXBwZW5kIGByZXNwLSZndDtkYXRhYCBvZiBgcmVzcC0mZ3Q7bGVuYCB0byBgZGRldi0mZ3Q7Y2hhaW5pbmdfc2tiYC4gU28sIHRoZSBxdWVzdGlvbiBpcywgd2h5IGFyZSB3ZSB1c2luZyBgZGRldi0mZ3Q7dHhfaGVhZHJvb21gIGFuZCBgOCAqIGRkZXYtJmd0O2xvY2FsX3BheWxvYWRfbWF4ICYjNDM7IGRkZXYtJmd0O3R4X3RhaWxyb29tYCBub3csIGluc3RlYWQgb2YgdGhlIHByZXZpb3VzIGJlaGF2aW9yIHdoZXJlIGBuZmNfYWxsb2NfcmVjdl9za2JgIHdhcyB1c2VkPyBBaCwgaXQgbWFrZXMgc2Vuc2UuIFRoZSBvbGQgbWV0aG9kIGRpZG4mIzM5O3QgcmVzZXJ2ZSB0aGUgYHR4X2hlYWRyb29tYCBvciBwcm92aWRlIGB0eF90YWlscm9vbWAgcHJvcGVybHkuIFBlcmhhcHMgdGhpcyB3YXMgYW4gaXNzdWUgd2hlbiB0aGUgYGNoYWluaW5nX3NrYmAgd2FzIHBhc3NlZCB1cHN0cmVhbSBvciB1c2VkIGVsc2V3aGVyZSwgbmVlZGluZyB0aGVzZSB2YWx1ZXMuIFBlcmhhcHMgaXQgd2FzIGp1c3QgYSBjb25zaXN0ZW5jeSBmaXgsIGVuc3VyaW5nIGBjaGFpbmluZ19za2JgICphbHdheXMqIGhhcyByb29tLgoKTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBuYW1lbHkgd2l0aCB1bmluaXRpYWxpemVkIHJlYWRzLiBgc2tiX3B1dF9kYXRhYCAqY29waWVzKiBmcm9tIGByZXNwLSZndDtkYXRhYCwgc28gdGhhdCYjMzk7cyBnb29kLiBJdCBpbmNyZW1lbnRzIGBza2ItJmd0O3RhaWxgIGFuZCBgc2tiLSZndDtsZW5gIGNvcnJlY3RseS4gQXMgbG9uZyBhcyBgcmVzcC0mZ3Q7bGVuYCBpcyB2YWxpZCwgdGhlcmUgc2hvdWxkbiYjMzk7dCBiZSBhIHByb2JsZW0gdGhlcmUuIEFuZCBJIHNlZToKCmBgYGMKCWlmIChyZXNwLSZndDtsZW4gJmd0OyBza2JfdGFpbHJvb20oZGRldi0mZ3Q7Y2hhaW5pbmdfc2tiKSkgewouLi4KYGBgCgpJZiBgcmVzcC0mZ3Q7bGVuYCBleGNlZWRzIHRhaWxyb29tLCB0aGUgc2tiIGV4cGFuZHMsIHNvIHRoYXQmIzM5O3MgaGFuZGxlZC4KCk5leHQsIEkgbmVlZCB0byBsb29rIGF0IHRoZSBzZWNvbmQgcGFydCBvZiB0aGUgcGF0Y2gsIHRoZSBmdW5jdGlvbiBgZGlnaXRhbF90Z19zZW5kX2F0cl9yZXNfY29tcGxldGVgLgoKYGBgYwpzdGF0aWMgdm9pZCBkaWdpdGFsX3RnX3NlbmRfYXRyX3Jlc19jb21wbGV0ZShzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LAoJCQkJCSAgICAgdm9pZCAqYXJnLCBzdHJ1Y3Qgc2tfYnVmZiAqcmVzcCkKewotCWludCBvZmZzZXQ7CiYjNDM7CXVuc2lnbmVkIGludCBvZmZzZXQ7CgogCWlmIChJU19FUlIocmVzcCkpIHsKIAkJZGlnaXRhbF9wb2xsX25leHRfdGVjaChkZGV2KTsKIAkJcmV0dXJuOwogCX0KCi0Jb2Zmc2V0ID0gMjsKLQlpZiAocmVzcC0mZ3Q7ZGF0YVswXSA9PSBESUdJVEFMX05GQ19ERVBfTkZDQV9TT0RfU0IpCi0JCW9mZnNldCYjNDM7JiM0Mzs7CiYjNDM7CWlmICghcmVzcC0mZ3Q7bGVuKQomIzQzOwkJZ290byBiYWRfZnJhbWU7CiYjNDM7CiYjNDM7CW9mZnNldCA9IChyZXNwLSZndDtkYXRhWzBdID09IERJR0lUQUxfTkZDX0RFUF9ORkNBX1NPRF9TQikgPyAzIDogMjsKJiM0MzsJaWYgKHJlc3AtJmd0O2xlbiAmbHQ7PSBvZmZzZXQpCiYjNDM7CQlnb3RvIGJhZF9mcmFtZTsKCiAJZGRldi0mZ3Q7YXRuX2NvdW50ID0gMDsKCiAJaWYgKHJlc3AtJmd0O2RhdGFbb2Zmc2V0XSA9PSBESUdJVEFMX0NNRF9QU0xfUkVRKQogCQlkaWdpdGFsX3RnX3JlY3ZfcHNsX3JlcShkZGV2LCBhcmcsIHJlc3ApOwogCWVsc2UKIAkJZGlnaXRhbF90Z19yZWN2X2RlcF9yZXEoZGRldiwgYXJnLCByZXNwKTsKJiM0MzsKJiM0MzsJcmV0dXJuOwomIzQzOwomIzQzO2JhZF9mcmFtZToKJiM0MzsJa2ZyZWVfc2tiKHJlc3ApOwomIzQzOwlkaWdpdGFsX3BvbGxfbmV4dF90ZWNoKGRkZXYpOwogfQpgYGAKCk9rYXksIEkgc2VlIHRoZSBmaXguIEJlZm9yZSwgdGhlIGNvZGUgKmRpZG4mIzM5O3QqIGNoZWNrIGByZXNwLSZndDtsZW5gIGJlZm9yZSBhY2Nlc3NpbmcgYHJlc3AtJmd0O2RhdGFgLiBJZiBgcmVzcC0mZ3Q7bGVuYCB3YXMgMCwgYWNjZXNzaW5nIGByZXNwLSZndDtkYXRhWzBdYCB3b3VsZCBiZSBhbiBvdXQtb2YtYm91bmRzIHJlYWQsIGFuZCBpZiBgcmVzcC0mZ3Q7bGVuYCB3YXMgMSBvciAyIGFuZCB0aGUgYHJlc3AtJmd0O2RhdGFbMF1gIHdhcyBgRElHSVRBTF9ORkNfREVQX05GQ0FfU09EX1NCYCwgdGhlbiBhY2Nlc3NpbmcgYHJlc3AtJmd0O2RhdGFbb2Zmc2V0XWAgd2FzIGFuIG91dCBvZiBib3VuZHMgcmVhZC4gVGhpcyB3b3VsZCBoYXZlIGJlZW4gY2F1Z2h0IGJ5IEtBU0FOISBUaGUgcGF0Y2ggbm93IGNvcnJlY3RseSB2YWxpZGF0ZXMgdGhhdCBgcmVzcC0mZ3Q7bGVuYCBpcyBncmVhdGVyIHRoYW4gMCAqYmVmb3JlKiBhY2Nlc3NpbmcgYHJlc3AtJmd0O2RhdGFbMF1gLCBhbmQgdGhhdCBgcmVzcC0mZ3Q7bGVuYCBpcyBncmVhdGVyIHRoYW4gYG9mZnNldGAgYmVmb3JlIGluZGV4aW5nIGludG8gdGhlIGRhdGEuIElmIHRoZSBjaGVjayBmYWlscyBpdCBmcmVlcyBgcmVzcGAgYW5kIHBvbGxzIGZvciB0aGUgbmV4dCB0ZWNoLgoKTm93IEkgbmVlZCB0byBxdWlja2x5Cgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmZjL2RpZ2l0YWxfZGVwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzOTU6XHRcdHJldHVybiByYztcbjEzOTY6XHR9XG4xMzk3Olx0XG4xMzk4Olx0c3RhdGljIHZvaWQgZGlnaXRhbF90Z19yZWN2X3BzbF9yZXEoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdm9pZCAqYXJnLFxuMTM5OTpcdFx0XHRcdFx0ICAgIHN0cnVjdCBza19idWZmICpyZXNwKVxuMTQwMDpcdHtcbjE0MDE6XHRcdGludCByYztcbjE0MDI6XHRcdHN0cnVjdCBkaWdpdGFsX3BzbF9yZXEgKnBzbF9yZXE7XG4xNDAzOlx0XHR1OCByZl90ZWNoO1xuMTQwNDpcdFx0dTggZHNpLCBwYXlsb2FkX3NpemUsIHBheWxvYWRfYml0cztcbjE0MDU6XHRcbjE0MDY6XHRcdGlmIChJU19FUlIocmVzcCkpIHtcbjE0MDc6XHRcdFx0cmMgPSBQVFJfRVJSKHJlc3ApO1xuMTQwODpcdFx0XHRyZXNwID0gTlVMTDtcbjE0MDk6XHRcdFx0Z290byBleGl0O1xuMTQxMDpcdFx0fVxuMTQxMTpcdFxuMTQxMjpcdFx0cmMgPSBkZGV2LVx1MDAzZXNrYl9jaGVja19jcmMocmVzcCk7XG4xNDEzOlx0XHRpZiAocmMpIHtcbjE0MTQ6XHRcdFx0UFJPVE9DT0xfRVJSKFwmIzM0OzE0LjQuMS42XCYjMzQ7KTtcbjE0MTU6XHRcdFx0Z290byBleGl0O1xuMTQxNjpcdFx0fVxuMTQxNzpcdFxuMTQxODpcdFx0cmMgPSBkaWdpdGFsX3NrYl9wdWxsX2RlcF9zb2QoZGRldiwgcmVzcCk7XG4xNDE5Olx0XHRpZiAocmMpIHtcbjE0MjA6XHRcdFx0UFJPVE9DT0xfRVJSKFwmIzM0OzE0LjQuMS4yXCYjMzQ7KTtcbjE0MjE6XHRcdFx0Z290byBleGl0O1xuMTQyMjpcdFx0fVxuMTQyMzpcdFxuMTQyNDpcdFx0cHNsX3JlcSA9IChzdHJ1Y3QgZGlnaXRhbF9wc2xfcmVxICopcmVzcC1cdTAwM2VkYXRhO1xuMTQyNTpcdFxuMTQyNjpcdFx0aWYgKHJlc3AtXHUwMDNlbGVuICE9IHNpemVvZihzdHJ1Y3QgZGlnaXRhbF9wc2xfcmVxKSB8fFxuMTQyNzpcdFx0ICAgIHBzbF9yZXEtXHUwMDNlZGlyICE9IERJR0lUQUxfTkZDX0RFUF9GUkFNRV9ESVJfT1VUIHx8XG4xNDI4Olx0XHQgICAgcHNsX3JlcS1cdTAwM2VjbWQgIT0gRElHSVRBTF9DTURfUFNMX1JFUSkge1xuMTQyOTpcdFx0XHRyYyA9IC1FSU87XG4xNDMwOlx0XHRcdGdvdG8gZXhpdDtcbjE0MzE6XHRcdH1cbjE0MzI6XHRcbjE0MzM6XHRcdGRzaSA9IChwc2xfcmVxLVx1MDAzZWJycyBcdTAwM2VcdTAwM2UgMykgXHUwMDI2IDB4MDc7XG4xNDM0Olx0XHRzd2l0Y2ggKGRzaSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTg4NgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBjb2RlOgoKKipBbmFseXppbmcgYGRpZ2l0YWxfdGdfcmVjdl9kZXBfcmVxYCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgYGRpZ2l0YWxfdGdfcmVjdl9kZXBfcmVxYCBmdW5jdGlvbi4gV2hhdCBleGFjdGx5IGlzIGhhcHBlbmluZyBpbiB0aGlzIHBhcnQgb2YgdGhlIGNvZGU/IEkgbmVlZCB0byBnZXQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIGl0cyBzdGFydGluZyBwb2ludC4gTGV0JiMzOTtzIGRlbHZlIGludG8gaXRzIGluaXRpYWxpemF0aW9uIGFuZCBob3cgaXQgYmVnaW5zIGV4ZWN1dGluZyBpdHMgaW50ZW5kZWQgdGFza3MuIEkgbmVlZCB0byB0cmFjZSBpdHMgZmxvdyB0byBhc3Nlc3MgaXRzIG92ZXJhbGwgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25mYy9kaWdpdGFsX2RlcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA3NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDc1Olx0fVxuMTA3NjpcdFxuMTA3NzpcdHN0YXRpYyB2b2lkIGRpZ2l0YWxfdGdfcmVjdl9kZXBfcmVxKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHZvaWQgKmFyZyxcbjEwNzg6XHRcdFx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqcmVzcClcbjEwNzk6XHR7XG4xMDgwOlx0XHRpbnQgcmM7XG4xMDgxOlx0XHRzdHJ1Y3QgZGlnaXRhbF9kZXBfcmVxX3JlcyAqZGVwX3JlcTtcbjEwODI6XHRcdHU4IHBmYjtcbjEwODM6XHRcdHNpemVfdCBzaXplO1xuMTA4NDpcdFxuMTA4NTpcdFx0aWYgKElTX0VSUihyZXNwKSkge1xuMTA4NjpcdFx0XHRyYyA9IFBUUl9FUlIocmVzcCk7XG4xMDg3Olx0XHRcdHJlc3AgPSBOVUxMO1xuMTA4ODpcdFx0XHRnb3RvIGV4aXQ7XG4xMDg5Olx0XHR9XG4xMDkwOlx0XG4xMDkxOlx0XHRyYyA9IGRkZXYtXHUwMDNlc2tiX2NoZWNrX2NyYyhyZXNwKTtcbjEwOTI6XHRcdGlmIChyYykge1xuMTA5MzpcdFx0XHRQUk9UT0NPTF9FUlIoXCYjMzQ7MTQuNC4xLjZcJiMzNDspO1xuMTA5NDpcdFx0XHRnb3RvIGV4aXQ7XG4xMDk1Olx0XHR9XG4xMDk2Olx0XG4xMDk3Olx0XHRyYyA9IGRpZ2l0YWxfc2tiX3B1bGxfZGVwX3NvZChkZGV2LCByZXNwKTtcbjEwOTg6XHRcdGlmIChyYykge1xuMTA5OTpcdFx0XHRQUk9UT0NPTF9FUlIoXCYjMzQ7MTQuNC4xLjJcJiMzNDspO1xuMTEwMDpcdFx0XHRnb3RvIGV4aXQ7XG4xMTAxOlx0XHR9XG4xMTAyOlx0XG4xMTAzOlx0XHRpZiAocmVzcC1cdTAwM2VsZW4gXHUwMDNlIGRkZXYtXHUwMDNlbG9jYWxfcGF5bG9hZF9tYXgpIHtcbjExMDQ6XHRcdFx0cmMgPSAtRU1TR1NJWkU7XG4xMTA1Olx0XHRcdGdvdG8gZXhpdDtcbjExMDY6XHRcdH1cbjExMDc6XHRcbjExMDg6XHRcdHNpemUgPSBzaXplb2Yoc3RydWN0IGRpZ2l0YWxfZGVwX3JlcV9yZXMpO1xuMTEwOTpcdFx0ZGVwX3JlcSA9IChzdHJ1Y3QgZGlnaXRhbF9kZXBfcmVxX3JlcyAqKXJlc3AtXHUwMDNlZGF0YTtcbjExMTA6XHRcbjExMTE6XHRcdGlmIChyZXNwLVx1MDAzZWxlbiBcdTAwM2Mgc2l6ZSB8fCBkZXBfcmVxLVx1MDAzZWRpciAhPSBESUdJVEFMX05GQ19ERVBfRlJBTUVfRElSX09VVCB8fFxuMTExMjpcdFx0ICAgIGRlcF9yZXEtXHUwMDNlY21kICE9IERJR0lUQUxfQ01EX0RFUF9SRVEpIHtcbjExMTM6XHRcdFx0cmMgPSAtRUlPO1xuMTExNDpcdFx0XHRnb3RvIGV4aXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDEzOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNjM2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTE3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiB2cy4gS0FTQU46IEEgVGFyZ2V0ZWQgQXNzZXNzbWVudCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgY3J1Y2lhbDogaXMgdGhpcyBhIEtNU0FOIGNhc2UsIG9yIGNhbiBLQVNBTiBoYW5kbGUgaXQ/IFRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiBpZiBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIChLQVNBTiwgTE9DS0RFUCwgZXRjLikgY2F0Y2ggdGhlIGlzc3VlLCB3ZSBhdm9pZCB0aGUgb3ZlcmhlYWQgb2YgS01TQU4uIEtNU0FOIGlzIHJlc2VydmVkIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0ICpvbmx5KiBLTVNBTiBkZXRlY3RzLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgY29zdGx5LCBzbyBsZXQmIzM5O3MgcnVsZSBpdCBvdXQgaWYgd2UgY2FuLgoKRmlyc3QsIEkgZXhhbWluZWQgdGhlIGBkaWdpdGFsX3RnX3NlbmRfYXRyX3Jlc19jb21wbGV0ZWAgZml4LiBUaGUgcHJvYmxlbSB3YXMgY2xlYXI6IGFuIG91dC1vZi1ib3VuZHMgcmVhZCBkdWUgdG8gaW5zdWZmaWNpZW50IGJvdW5kcyBjaGVja2luZyBvbiBpbmNvbWluZyBwYWNrZXQgZGF0YS4gU3BlY2lmaWNhbGx5LCBgcmVzcC0mZ3Q7ZGF0YVswXWAgYW5kIGByZXNwLSZndDtkYXRhW29mZnNldF1gIHdlcmUgcmVhZCB3aXRob3V0IHZlcmlmeWluZyBgcmVzcC0mZ3Q7bGVuYC4gVGhlIGZpeCBhZGRzIHRob3NlIGNoZWNrcy4gVGhpcyBpcyB0ZXh0Ym9vayBLQVNBTiB0ZXJyaXRvcnnigJRzcGF0aWFsIG1lbW9yeSBzYWZldHk6IHByZXZlbnRpbmcgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhlIHBhdGNoICpyZWplY3RzKiBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBmcmFtZXMsIG1lYW5pbmcgaXQgaXMgbm90IGFjY2Vzc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBidXQgcHJldmVudGluZyBhY2Nlc3MgdG8gaXQuIFRoaXMgY2hhbmdlICpyZW1vdmVzKiB0aGUgdnVsbmVyYWJpbGl0eS4gVGhpcyBpcyBkZWZpbml0aXZlbHkgbm90IGEgS01TQU4gaXNzdWUuCgpTZWNvbmQsIEkgbG9va2VkIGF0IHRoZSBjaGFuZ2UgaW4gYGRpZ2l0YWxfcmVjdl9kZXBfZGF0YV9nYXRoZXJgLCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIHRoZSBhbGxvY2F0aW9uIG9mIGBkZGV2LSZndDtjaGFpbmluZ19za2JgLiBUaGUgb3JpZ2luYWwgdXNlZCBgbmZjX2FsbG9jX3JlY3Zfc2tiYCB3aGljaCBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIGBkaWdpdGFsX3NrYl9hbGxvY2AuIEkgd2lsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgd2FzIGNoYW5nZWQuIEkgd2lsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIGNvbW1pdCBsb2cgb3IgdXNlIGBncmVwcGVyYCB0byBzZWUgaWYgdGhlcmUgaXMgYW55IG1lbnRpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIEhvd2V2ZXIsIHRoZSBjaGFuZ2VzIHRoZW1zZWx2ZXMsIGFsbG9jYXRpbmcgYW5kIGV4cGFuZGluZyBTS0JzLCBkb24mIzM5O3Qgc2NyZWFtIEtNU0FOIHJpc2sgcmlnaHQgYXdheTsgbW9yZSBjb250ZXh0IHdvdWxkIGJlIHJlcXVpcmVkLiBIb3dldmVyLCBjb25zaWRlcmluZyB0aGUgb3JpZ2luYWwgaW5zdHJ1Y3Rpb25zLCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0ICphcHBlYXIqIHRvIGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcy4gSXQgbG9va3MgbGlrZSBpdCBpcyBwcmltYXJpbHkgY2hhbmdpbmcgaG93IHRoZSBza2IgaXMgYWxsb2NhdGVkIHJhdGhlciB0aGFuIGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBJIHdpbGwgbmVlZCB0byBkaWcgYSBsaXR0bGUgZGVlcGVyIGhlcmUsIGJ1dCBteSBjdXJyZW50IGFuYWx5c2lzIGlzIHRoYXQgdGhpcyBpc24mIzM5O3QgYSBLTVNBTiBpc3N1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGRldi1cdTAwM2V0eF9oZWFkcm9vbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25mYy9kaWdpdGFsX2NvcmUuYz00Mj1zdHJ1Y3Qgc2tfYnVmZiAqZGlnaXRhbF9za2JfYWxsb2Moc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jLTQ2LVxubmV0L25mYy9kaWdpdGFsX2NvcmUuYzo0NzpcdHNrYiA9IGFsbG9jX3NrYihsZW4gJiM0MzsgZGRldi1cdTAwM2V0eF9oZWFkcm9vbSAmIzQzOyBkZGV2LVx1MDAzZXR4X3RhaWxyb29tLFxubmV0L25mYy9kaWdpdGFsX2NvcmUuYy00OC1cdFx0XHRHRlBfS0VSTkVMKTtcbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmMtNDktXHRpZiAoc2tiKVxubmV0L25mYy9kaWdpdGFsX2NvcmUuYzo1MDpcdFx0c2tiX3Jlc2VydmUoc2tiLCBkZGV2LVx1MDAzZXR4X2hlYWRyb29tKTtcbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmMtNTEtXG4tLVxubmV0L25mYy9kaWdpdGFsX2NvcmUuYz03NTc9c3RydWN0IG5mY19kaWdpdGFsX2RldiAqbmZjX2RpZ2l0YWxfYWxsb2NhdGVfZGV2aWNlKGNvbnN0IHN0cnVjdCBuZmNfZGlnaXRhbF9vcHMgKm9wcyxcbi0tXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jLTc5OS1cbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmM6ODAwOlx0ZGRldi1cdTAwM2V0eF9oZWFkcm9vbSA9IHR4X2hlYWRyb29tICYjNDM7IERJR0lUQUxfTUFYX0hFQURFUl9MRU47XG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jLTgwMS1cdGRkZXYtXHUwMDNldHhfdGFpbHJvb20gPSB0eF90YWlscm9vbSAmIzQzOyBESUdJVEFMX0NSQ19MRU47XG4tLVxubmV0L25mYy9kaWdpdGFsX2NvcmUuYy04MDMtXHRkZGV2LVx1MDAzZW5mY19kZXYgPSBuZmNfYWxsb2NhdGVfZGV2aWNlKFx1MDAyNmRpZ2l0YWxfbmZjX29wcywgZGRldi1cdTAwM2Vwcm90b2NvbHMsXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jOjgwNDpcdFx0XHRcdFx0ICAgIGRkZXYtXHUwMDNldHhfaGVhZHJvb20sXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jLTgwNS1cdFx0XHRcdFx0ICAgIGRkZXYtXHUwMDNldHhfdGFpbHJvb20pO1xuLS1cbm5ldC9uZmMvZGlnaXRhbF9kZXAuYz0yMzE9ZGlnaXRhbF9yZWN2X2RlcF9kYXRhX2dhdGhlcihzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCB1OCBwZmIsXG4tLVxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTI1My1cdFx0XHRuZXdfc2tiID0gc2tiX2NvcHlfZXhwYW5kKGRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiLFxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjI1NDpcdFx0XHRcdFx0XHQgIGRkZXYtXHUwMDNldHhfaGVhZHJvb20sXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMjU1LVx0XHRcdFx0XHRcdCAgOCAqIGRkZXYtXHUwMDNlbG9jYWxfcGF5bG9hZF9tYXggJiM0MztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI4NjMKCQkJCQkJCW91dHB1dDogMzE2CgkJCQkJCQl0aG91Z2h0czogNjgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE5GQyBTS0IgQWxsb2NhdGlvbiBhbmQgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IElzc3VlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGNvbmNlcm4gd2FzIGFib3V0IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBnaXZlbiB0aGUgY2hhbmdlcyBpbiBTS0IgYWxsb2NhdGlvbiBhbmQgZGF0YSBjb3B5aW5nIGZvciBORkMgZGV2aWNlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGZvY3VzaW5nIG9uIGhvdyB3ZSBub3cgaGFuZGxlIGhlYWRyb29tIGFuZCB0YWlscm9vbS4gUHJldmlvdXNseSwgYGNoYWluaW5nX3NrYmAgd2FzIGFsbG9jYXRlZCB3aXRoIG1pbmltYWwgaGVhZHJvb20sIGJ1dCBub3csIGJ5IHVzaW5nIGBkaWdpdGFsX3NrYl9hbGxvY2AsIHdlJiMzOTtyZSBleHBsaWNpdGx5IHJlcXVlc3RpbmcgYGRkZXYtJmd0O3R4X2hlYWRyb29tYCBhbmQgYGRkZXYtJmd0O3R4X3RhaWxyb29tYC4gVGhlIGBza2JfY29weV9leHBhbmRgIGNhbGwgaXMgYWxzbyBtb2RpZmllZCB0byBhY2NvdW50IGZvciB0aGVzZSwgZXhwYW5kaW5nIHRoZSBTS0Igd2l0aCB0aGUgcmVxdWVzdGVkIGhlYWRyb29tIGFuZCB0YWlscm9vbS4KClRoZSBjb25jZXJuIHdhcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gSSBoYWQgdG8gZG91YmxlLWNoZWNrIGBza2JfcHV0X2RhdGFgIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIG5ldyBhbGxvY2F0aW9uIHNjaGVtZS4gSSBjYXJlZnVsbHkgcmV2aWV3ZWQgdGhlIGBza2JfcHV0X2RhdGFgIGNhbGw6IGBza2JfcHV0X2RhdGEoZGRldi0mZ3Q7Y2hhaW5pbmdfc2tiLCByZXNwLSZndDtkYXRhLCByZXNwLSZndDtsZW4pO2AuIEl0IGNvcnJlY3RseSBjb3BpZXMgYHJlc3AtJmd0O2xlbmAgYnl0ZXMgZnJvbSBgcmVzcC0mZ3Q7ZGF0YWAgYW5kIHVwZGF0ZXMgdGhlIGxlbmd0aCBvZiB0aGUgU0tCLCBlbnN1cmluZyB0aGF0IHRoZSB2YWxpZCBkYXRhIGluIHRoZSBTS0IgZXhhY3RseSBtYXRjaGVzIHRoZSBieXRlcyBjb3BpZWQuIFRoZXJlZm9yZSwgdGhlcmUmIzM5O3Mgbm8gd2F5IHRoYXQgd2UmIzM5O3JlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgd2hlbiB1c2luZyB0aGlzIHBhdHRlcm4sIGFzIHRoZSBvbmx5IGRhdGEgd3JpdHRlbiBpbnRvIHRoZSBTS0IgaXMgZnJvbSBhIHZhbGlkIGRhdGEgc291cmNlLCBuYW1lbHkgdGhlIGByZXNwLSZndDtkYXRhYCBidWZmZXIuIE5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBpbnRyb2R1Y2VkLiBJIGFtIHNhdGlzZmllZCB0aGF0IHRoZXJlIGlzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4KClRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSByYW4gdGhyb3VnaCB0aGUgZm91ciBjcml0ZXJpYSB0aGF0IHRyaWdnZXIgdGhlIGBOZWVkc0tNU0FOPXRydWVgIGZsYWcuIEZpcnN0LCBhcmUgdGhlcmUgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlIHRoYXQgbWlnaHQgY29udGFpbiB1bmluaXRpYWxpemVkIGZpZWxkcz8gTm8sIHRoZSBjb2RlIGRvZXMgbm90IHRvdWNoIGFueSBzdHJ1Y3RzIHNlbnQgdG8gdXNlcnNwYWNlLiBTZWNvbmQsIGlzIHRoZXJlIGFueSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IHJlbGllcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm9wZSwgYG9mZnNldGAsIGByZXNwYCwgYW5kIGFsbCBvdGhlciB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoaXJkLCBhcmUgd2UgYWxsb2NhdGluZyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBpbiBhIHdheSB0aGF0IG1pZ2h0IGxlYXZlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGV4cG9zZWQ/IEFnYWluLCBuby4gV2UgYXJlIG9ubHkgYWxsb2NhdGluZyBTS0JzIHVzaW5nIGVpdGhlciBgZGlnaXRhbF9za2JfYWxsb2NgIG9yIGBza2JfY29weV9leHBhbmRgIGFuZCBmaWxsaW5nIHRoZW0gd2l0aCBkYXRhIHVzaW5nIGBza2JfcHV0X2RhdGFgLiBGb3VydGgsIGFyZSB0aGVyZSBhbnkgYm91bmRzIGNoZWNrcyBvciBsb2dpYyB0aGF0IG1pZ2h0IGFsbG93IHN1cnJvdW5kaW5nIGNvZGUgdG8gcmVhZCB1bmluaXRpYWxpemVkIGJ5dGVzPyBUaGUgYW5zd2VyIGlzIG5vLCBiZWNhdXNlIGluIGZhY3QsIGluIGBkaWdpdGFsX3RnX3NlbmRfYXRyX3Jlc19jb21wbGV0ZWAgYXJlIGJvdW5kcyBjaGVja3MgdGhhdCByZXN0cmljdCBhY2Nlc3Mgc28gdGhhdCBlbXB0eSBvciB1bmRlcnNpemVkIGZyYW1lcyBhcmUgZHJvcHBlZCByYXRoZXIgdGhhbiBpbmRleGVkIG91dC1vZi1ib3VuZHMuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBzaG91bGQgZGVmaW5pdGVseSBiZSBgZmFsc2VgIGhlcmUuIFRoaXMgaXMgYW4gZXhjZWxsZW50IGNhc2UgZm9yIHVzaW5nIEtBU0FOIHRvIGRldGVjdCBhbnkgb3V0LW9mLWJvdW5kcyBvciBidWZmZXIgb3ZlcmZsb3cgaXNzdWVzLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hhdCB0aGUgY29kZSB1c2VzLiBJIGFtIGdvaW5nIHRvIHNldCBgTmVlZHNLTVNBTjogZmFsc2VgIGFuZCBub3RlIHRoYXQgZGV0YWlsZWQgcmVhc29uaW5nIGV4cGxhaW5zIHdoeSBLTVNBTiBpcyBub3QgbmVlZGVkIGFuZCB3aHkgS0FTQU4vc3RhbmRhcmQgZGV0ZWN0b3JzIGFyZSBhcHBsaWNhYmxlLiBUaGlzIGFsbCBsb29rcyBzb3VuZCB0byBtZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTM6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbmV0L25mYy9kaWdpdGFsX2RlcC5jIGluIHR3byBwbGFjZXM6XG4xLiBJbiBgZGlnaXRhbF9yZWN2X2RlcF9kYXRhX2dhdGhlcigpYCwgaXQgc3dpdGNoZXMgdGhlIGFsbG9jYXRpb24gb2YgYGRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiYCBmcm9tIGBuZmNfYWxsb2NfcmVjdl9za2IoKWAgdG8gYGRpZ2l0YWxfc2tiX2FsbG9jKClgLCBhbmQgYWRqdXN0cyBgc2tiX2NvcHlfZXhwYW5kKClgIGFyZ3VtZW50cyB0byBlbnN1cmUgZGV2aWNlIGhlYWRyb29tIGFuZCB0YWlscm9vbSAoYHR4X2hlYWRyb29tYCBhbmQgYHR4X3RhaWxyb29tYCkgYXJlIHByb3Blcmx5IGFsbG9jYXRlZC4gQXMgZGF0YSBpcyBjb3BpZWQgaW50byB0aGUgc2tiIHZpYSBgc2tiX3B1dF9kYXRhKC4uLiwgcmVzcC1cdTAwM2VkYXRhLCByZXNwLVx1MDAzZWxlbilgLCBvbmx5IHRoZSBleHBsaWNpdGx5IHJlY2VpdmVkIGJ5dGVzIGFyZSBhZGRlZCB0byB0aGUgcGFja2V0IGxlbmd0aCwgbGVhdmluZyBubyB1bmluaXRpYWxpemVkIGRhdGEgZXhwb3NlZC5cbjIuIEluIGBkaWdpdGFsX3RnX3NlbmRfYXRyX3Jlc19jb21wbGV0ZSgpYCwgaXQgYWRkcyB2YWxpZGF0aW9uIGNoZWNrcyB0byBlbnN1cmUgYHJlc3AtXHUwMDNlbGVuYCBpcyBub24temVybyBhbmQgZ3JlYXRlciB0aGFuIGBvZmZzZXRgIGJlZm9yZSBpbmRleGluZyBgcmVzcC1cdTAwM2VkYXRhWzBdYCBhbmQgYHJlc3AtXHUwMDNlZGF0YVtvZmZzZXRdYC4gVGhlc2UgY2hhbmdlcyBmaXggcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgb24gdHJ1bmNhdGVkIG9yIG1hbGZvcm1lZCByZWNlaXZlZCBza2IgcGFja2V0cywgd2hpY2ggYXJlIHNwYXRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgY2F1Z2h0IGJ5IEtBU0FOLlxuXG5UaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGtlcm5lbC10by11c2VyIGNvcHkgcGF0aHMgKGluZm8gbGVha3MpLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkIGFuZCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBuZXQvbmZjL2RpZ2l0YWxfZGVwLmMgaW4gdHdvIHBsYWNlczpcbjEuIEluIGBkaWdpdGFsX3JlY3ZfZGVwX2RhdGFfZ2F0aGVyKClgLCBpdCBzd2l0Y2hlcyB0aGUgYWxsb2NhdGlvbiBvZiBgZGRldi1cdTAwM2VjaGFpbmluZ19za2JgIGZyb20gYG5mY19hbGxvY19yZWN2X3NrYigpYCB0byBgZGlnaXRhbF9za2JfYWxsb2MoKWAsIGFuZCBhZGp1c3RzIGBza2JfY29weV9leHBhbmQoKWAgYXJndW1lbnRzIHRvIGVuc3VyZSBkZXZpY2UgaGVhZHJvb20gYW5kIHRhaWxyb29tIChgdHhfaGVhZHJvb21gIGFuZCBgdHhfdGFpbHJvb21gKSBhcmUgcHJvcGVybHkgYWxsb2NhdGVkLiBBcyBkYXRhIGlzIGNvcGllZCBpbnRvIHRoZSBza2IgdmlhIGBza2JfcHV0X2RhdGEoLi4uLCByZXNwLVx1MDAzZWRhdGEsIHJlc3AtXHUwMDNlbGVuKWAsIG9ubHkgdGhlIGV4cGxpY2l0bHkgcmVjZWl2ZWQgYnl0ZXMgYXJlIGFkZGVkIHRvIHRoZSBwYWNrZXQgbGVuZ3RoLCBsZWF2aW5nIG5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBleHBvc2VkLlxuMi4gSW4gYGRpZ2l0YWxfdGdfc2VuZF9hdHJfcmVzX2NvbXBsZXRlKClgLCBpdCBhZGRzIHZhbGlkYXRpb24gY2hlY2tzIHRvIGVuc3VyZSBgcmVzcC1cdTAwM2VsZW5gIGlzIG5vbi16ZXJvIGFuZCBncmVhdGVyIHRoYW4gYG9mZnNldGAgYmVmb3JlIGluZGV4aW5nIGByZXNwLVx1MDAzZWRhdGFbMF1gIGFuZCBgcmVzcC1cdTAwM2VkYXRhW29mZnNldF1gLiBUaGVzZSBjaGFuZ2VzIGZpeCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBvbiB0cnVuY2F0ZWQgb3IgbWFsZm9ybWVkIHJlY2VpdmVkIHNrYiBwYWNrZXRzLCB3aGljaCBhcmUgc3BhdGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyBjYXVnaHQgYnkgS0FTQU4uXG5cblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywga2VybmVsLXRvLXVzZXIgY29weSBwYXRocyAoaW5mbyBsZWFrcyksIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQgYW5kIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDA6MTAuNzg0MTkyOTk5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk5MTU5NjUyMTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GQ1wiLFxuICAgIFwiTkZDX0RJR0lUQUxcIixcbiAgICBcIk5GQ19TSU1cIixcbiAgICBcIk5GQ19QT1JUMTAwXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGlnaXRhbF9yZWN2X2RlcF9kYXRhX2dhdGhlclwiLFxuICAgIFwiZGlnaXRhbF90Z19zZW5kX2F0cl9yZXNfY29tcGxldGVcIixcbiAgICBcImRpZ2l0YWxfdGdfcmVjdl9kZXBfcmVxXCIsXG4gICAgXCJkaWdpdGFsX2luX3JlY3ZfZGVwX3Jlc1wiLFxuICAgIFwiZGlnaXRhbF90Z19zZW5kX2F0cl9yZXNcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG5ldC9uZmMvZGlnaXRhbF9kZXAuYyBpbiB0d28gcGxhY2VzOlxcbjEuIEluIGBkaWdpdGFsX3JlY3ZfZGVwX2RhdGFfZ2F0aGVyKClgLCBpdCBzd2l0Y2hlcyB0aGUgYWxsb2NhdGlvbiBvZiBgZGRldi1cXHUwMDNlY2hhaW5pbmdfc2tiYCBmcm9tIGBuZmNfYWxsb2NfcmVjdl9za2IoKWAgdG8gYGRpZ2l0YWxfc2tiX2FsbG9jKClgLCBhbmQgYWRqdXN0cyBgc2tiX2NvcHlfZXhwYW5kKClgIGFyZ3VtZW50cyB0byBlbnN1cmUgZGV2aWNlIGhlYWRyb29tIGFuZCB0YWlscm9vbSAoYHR4X2hlYWRyb29tYCBhbmQgYHR4X3RhaWxyb29tYCkgYXJlIHByb3Blcmx5IGFsbG9jYXRlZC4gQXMgZGF0YSBpcyBjb3BpZWQgaW50byB0aGUgc2tiIHZpYSBgc2tiX3B1dF9kYXRhKC4uLiwgcmVzcC1cXHUwMDNlZGF0YSwgcmVzcC1cXHUwMDNlbGVuKWAsIG9ubHkgdGhlIGV4cGxpY2l0bHkgcmVjZWl2ZWQgYnl0ZXMgYXJlIGFkZGVkIHRvIHRoZSBwYWNrZXQgbGVuZ3RoLCBsZWF2aW5nIG5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBleHBvc2VkLlxcbjIuIEluIGBkaWdpdGFsX3RnX3NlbmRfYXRyX3Jlc19jb21wbGV0ZSgpYCwgaXQgYWRkcyB2YWxpZGF0aW9uIGNoZWNrcyB0byBlbnN1cmUgYHJlc3AtXFx1MDAzZWxlbmAgaXMgbm9uLXplcm8gYW5kIGdyZWF0ZXIgdGhhbiBgb2Zmc2V0YCBiZWZvcmUgaW5kZXhpbmcgYHJlc3AtXFx1MDAzZWRhdGFbMF1gIGFuZCBgcmVzcC1cXHUwMDNlZGF0YVtvZmZzZXRdYC4gVGhlc2UgY2hhbmdlcyBmaXggcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgb24gdHJ1bmNhdGVkIG9yIG1hbGZvcm1lZCByZWNlaXZlZCBza2IgcGFja2V0cywgd2hpY2ggYXJlIHNwYXRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgY2F1Z2h0IGJ5IEtBU0FOLlxcblxcblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywga2VybmVsLXRvLXVzZXIgY29weSBwYXRocyAoaW5mbyBsZWFrcyksIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQgYW5kIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgbG9naWMgaW4gdGhlIE5GQyBEaWdpdGFsIFByb3RvY29sIHN0YWNrIChuZXQvbmZjL2RpZ2l0YWxfZGVwLmMpLiBTcGVjaWZpY2FsbHksIGl0IGFsdGVycyBidWZmZXIgYWxsb2NhdGlvbiBhbmQgaGVhZHJvb20vdGFpbHJvb20gZXhwYW5zaW9uIGluIGRpZ2l0YWxfcmVjdl9kZXBfZGF0YV9nYXRoZXIoKSwgYW5kIGFkZHMgbGVuZ3RoL2JvdW5kcyB2YWxpZGF0aW9uIGNoZWNrcyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgb24gaW5jb21pbmcgcmVzcG9uc2UgZnJhbWVzIGluIGRpZ2l0YWxfdGdfc2VuZF9hdHJfcmVzX2NvbXBsZXRlKCkuIFRoaXMgc3Vic3lzdGVtIGlzIGFjY2Vzc2libGUgdmlhIG5ldGxpbmsvc29ja2V0cyBhbmQgZW11bGF0ZWQgTkZDIGRldmljZXMgKHN1Y2ggYXMgbmZjc2ltIG9yIHBvcnQxMDAgVVNCIGVtdWxhdGlvbiksIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MDoxMC43ODQxOTkwNDlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MzEwMjE3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDJjMGE4YzNlOTcxODU1OGMzMTlmYThjYzJiZmFlYmJhMDUwODljZmVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBTZXAgMTIgMTM6NDA6MTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L25mYy9kaWdpdGFsX2RlcC5jIGIvbmV0L25mYy9kaWdpdGFsX2RlcC5jXFxuaW5kZXggMzk4MmZhMDg0NzM3Zi4uNTA5M2I3YjgxNzIwMiAxMDA2NDRcXG4tLS0gYS9uZXQvbmZjL2RpZ2l0YWxfZGVwLmNcXG4rKysgYi9uZXQvbmZjL2RpZ2l0YWxfZGVwLmNcXG5AQCAtMjQwLDggKzI0MCw4IEBAIGRpZ2l0YWxfcmVjdl9kZXBfZGF0YV9nYXRoZXIoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdTggcGZiLFxcbiBcXG4gXFx0aWYgKERJR0lUQUxfTkZDX0RFUF9NSV9CSVRfU0VUKHBmYikgXFx1MDAyNlxcdTAwMjYgKCFkZGV2LVxcdTAwM2VjaGFpbmluZ19za2IpKSB7XFxuIFxcdFxcdGRkZXYtXFx1MDAzZWNoYWluaW5nX3NrYiA9XFxuLVxcdFxcdFxcdG5mY19hbGxvY19yZWN2X3NrYig4ICogZGRldi1cXHUwMDNlbG9jYWxfcGF5bG9hZF9tYXgsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIEdGUF9LRVJORUwpO1xcbitcXHRcXHRcXHRkaWdpdGFsX3NrYl9hbGxvYyhkZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgIDggKiBkZGV2LVxcdTAwM2Vsb2NhbF9wYXlsb2FkX21heCk7XFxuIFxcdFxcdGlmICghZGRldi1cXHUwMDNlY2hhaW5pbmdfc2tiKSB7XFxuIFxcdFxcdFxcdHJjID0gLUVOT01FTTtcXG4gXFx0XFx0XFx0Z290byBlcnJvcjtcXG5AQCAtMjUxLDkgKzI1MSw5IEBAIGRpZ2l0YWxfcmVjdl9kZXBfZGF0YV9nYXRoZXIoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdTggcGZiLFxcbiBcXHRpZiAoZGRldi1cXHUwMDNlY2hhaW5pbmdfc2tiKSB7XFxuIFxcdFxcdGlmIChyZXNwLVxcdTAwM2VsZW4gXFx1MDAzZSBza2JfdGFpbHJvb20oZGRldi1cXHUwMDNlY2hhaW5pbmdfc2tiKSkge1xcbiBcXHRcXHRcXHRuZXdfc2tiID0gc2tiX2NvcHlfZXhwYW5kKGRkZXYtXFx1MDAzZWNoYWluaW5nX3NrYixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICBza2JfaGVhZHJvb20oXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgZGRldi1cXHUwMDNlY2hhaW5pbmdfc2tiKSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICA4ICogZGRldi1cXHUwMDNlbG9jYWxfcGF5bG9hZF9tYXgsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgZGRldi1cXHUwMDNldHhfaGVhZHJvb20sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgOCAqIGRkZXYtXFx1MDAzZWxvY2FsX3BheWxvYWRfbWF4ICtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBkZGV2LVxcdTAwM2V0eF90YWlscm9vbSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICBHRlBfS0VSTkVMKTtcXG4gXFx0XFx0XFx0aWYgKCFuZXdfc2tiKSB7XFxuIFxcdFxcdFxcdFxcdHJjID0gLUVOT01FTTtcXG5AQCAtMTQ2NywxNiArMTQ2NywxOSBAQCBzdGF0aWMgdm9pZCBkaWdpdGFsX3RnX3JlY3ZfcHNsX3JlcShzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCB2b2lkICphcmcsXFxuIHN0YXRpYyB2b2lkIGRpZ2l0YWxfdGdfc2VuZF9hdHJfcmVzX2NvbXBsZXRlKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgdm9pZCAqYXJnLCBzdHJ1Y3Qgc2tfYnVmZiAqcmVzcClcXG4ge1xcbi1cXHRpbnQgb2Zmc2V0O1xcbitcXHR1bnNpZ25lZCBpbnQgb2Zmc2V0O1xcbiBcXG4gXFx0aWYgKElTX0VSUihyZXNwKSkge1xcbiBcXHRcXHRkaWdpdGFsX3BvbGxfbmV4dF90ZWNoKGRkZXYpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuLVxcdG9mZnNldCA9IDI7XFxuLVxcdGlmIChyZXNwLVxcdTAwM2VkYXRhWzBdID09IERJR0lUQUxfTkZDX0RFUF9ORkNBX1NPRF9TQilcXG4tXFx0XFx0b2Zmc2V0Kys7XFxuK1xcdGlmICghcmVzcC1cXHUwMDNlbGVuKVxcbitcXHRcXHRnb3RvIGJhZF9mcmFtZTtcXG4rXFxuK1xcdG9mZnNldCA9IChyZXNwLVxcdTAwM2VkYXRhWzBdID09IERJR0lUQUxfTkZDX0RFUF9ORkNBX1NPRF9TQikgPyAzIDogMjtcXG4rXFx0aWYgKHJlc3AtXFx1MDAzZWxlbiBcXHUwMDNjPSBvZmZzZXQpXFxuK1xcdFxcdGdvdG8gYmFkX2ZyYW1lO1xcbiBcXG4gXFx0ZGRldi1cXHUwMDNlYXRuX2NvdW50ID0gMDtcXG4gXFxuQEAgLTE0ODQsNiArMTQ4NywxMiBAQCBzdGF0aWMgdm9pZCBkaWdpdGFsX3RnX3NlbmRfYXRyX3Jlc19jb21wbGV0ZShzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxcbiBcXHRcXHRkaWdpdGFsX3RnX3JlY3ZfcHNsX3JlcShkZGV2LCBhcmcsIHJlc3ApO1xcbiBcXHRlbHNlXFxuIFxcdFxcdGRpZ2l0YWxfdGdfcmVjdl9kZXBfcmVxKGRkZXYsIGFyZywgcmVzcCk7XFxuK1xcbitcXHRyZXR1cm47XFxuK1xcbitiYWRfZnJhbWU6XFxuK1xcdGtmcmVlX3NrYihyZXNwKTtcXG4rXFx0ZGlnaXRhbF9wb2xsX25leHRfdGVjaChkZGV2KTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBkaWdpdGFsX3RnX3NlbmRfYXRyX3JlcyhzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MDoxMS4yMjgwMzYyNDdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjc3NjYxNzY5ODE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GQ1wiLFxuICAgIFwiTkZDX0RJR0lUQUxcIixcbiAgICBcIk5GQ19TSU1cIixcbiAgICBcIk5GQ19QT1JUMTAwXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGlnaXRhbF9yZWN2X2RlcF9kYXRhX2dhdGhlclwiLFxuICAgIFwiZGlnaXRhbF90Z19zZW5kX2F0cl9yZXNfY29tcGxldGVcIixcbiAgICBcImRpZ2l0YWxfdGdfcmVjdl9kZXBfcmVxXCIsXG4gICAgXCJkaWdpdGFsX2luX3JlY3ZfZGVwX3Jlc1wiLFxuICAgIFwiZGlnaXRhbF90Z19zZW5kX2F0cl9yZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgbG9naWMgaW4gdGhlIE5GQyBEaWdpdGFsIFByb3RvY29sIHN0YWNrIChuZXQvbmZjL2RpZ2l0YWxfZGVwLmMpLiBTcGVjaWZpY2FsbHksIGl0IGFsdGVycyBidWZmZXIgYWxsb2NhdGlvbiBhbmQgaGVhZHJvb20vdGFpbHJvb20gZXhwYW5zaW9uIGluIGRpZ2l0YWxfcmVjdl9kZXBfZGF0YV9nYXRoZXIoKSwgYW5kIGFkZHMgbGVuZ3RoL2JvdW5kcyB2YWxpZGF0aW9uIGNoZWNrcyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgb24gaW5jb21pbmcgcmVzcG9uc2UgZnJhbWVzIGluIGRpZ2l0YWxfdGdfc2VuZF9hdHJfcmVzX2NvbXBsZXRlKCkuIFRoaXMgc3Vic3lzdGVtIGlzIGFjY2Vzc2libGUgdmlhIG5ldGxpbmsvc29ja2V0cyBhbmQgZW11bGF0ZWQgTkZDIGRldmljZXMgKHN1Y2ggYXMgbmZjc2ltIG9yIHBvcnQxMDAgVVNCIGVtdWxhdGlvbiksIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJjMGE4YzNlOTcxODU1OGMzMTlmYThjYzJiZmFlYmJhMDUwODljZmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCAxMiAxMzo0MDoxMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZmMvZGlnaXRhbF9kZXAuYyBiL25ldC9uZmMvZGlnaXRhbF9kZXAuY1xuaW5kZXggMzk4MmZhMDg0NzM3Zi4uNTA5M2I3YjgxNzIwMiAxMDA2NDRcbi0tLSBhL25ldC9uZmMvZGlnaXRhbF9kZXAuY1xuKysrIGIvbmV0L25mYy9kaWdpdGFsX2RlcC5jXG5AQCAtMjQwLDggKzI0MCw4IEBAIGRpZ2l0YWxfcmVjdl9kZXBfZGF0YV9nYXRoZXIoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdTggcGZiLFxuIFxuIFx0aWYgKERJR0lUQUxfTkZDX0RFUF9NSV9CSVRfU0VUKHBmYikgXHUwMDI2XHUwMDI2ICghZGRldi1cdTAwM2VjaGFpbmluZ19za2IpKSB7XG4gXHRcdGRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiID1cbi1cdFx0XHRuZmNfYWxsb2NfcmVjdl9za2IoOCAqIGRkZXYtXHUwMDNlbG9jYWxfcGF5bG9hZF9tYXgsXG4tXHRcdFx0XHRcdCAgIEdGUF9LRVJORUwpO1xuK1x0XHRcdGRpZ2l0YWxfc2tiX2FsbG9jKGRkZXYsXG4rXHRcdFx0XHRcdCAgOCAqIGRkZXYtXHUwMDNlbG9jYWxfcGF5bG9hZF9tYXgpO1xuIFx0XHRpZiAoIWRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiKSB7XG4gXHRcdFx0cmMgPSAtRU5PTUVNO1xuIFx0XHRcdGdvdG8gZXJyb3I7XG5AQCAtMjUxLDkgKzI1MSw5IEBAIGRpZ2l0YWxfcmVjdl9kZXBfZGF0YV9nYXRoZXIoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdTggcGZiLFxuIFx0aWYgKGRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiKSB7XG4gXHRcdGlmIChyZXNwLVx1MDAzZWxlbiBcdTAwM2Ugc2tiX3RhaWxyb29tKGRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiKSkge1xuIFx0XHRcdG5ld19za2IgPSBza2JfY29weV9leHBhbmQoZGRldi1cdTAwM2VjaGFpbmluZ19za2IsXG4tXHRcdFx0XHRcdFx0ICBza2JfaGVhZHJvb20oXG4tXHRcdFx0XHRcdFx0XHQgIGRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiKSxcbi1cdFx0XHRcdFx0XHQgIDggKiBkZGV2LVx1MDAzZWxvY2FsX3BheWxvYWRfbWF4LFxuK1x0XHRcdFx0XHRcdCAgZGRldi1cdTAwM2V0eF9oZWFkcm9vbSxcbitcdFx0XHRcdFx0XHQgIDggKiBkZGV2LVx1MDAzZWxvY2FsX3BheWxvYWRfbWF4ICtcbitcdFx0XHRcdFx0XHRcdCAgZGRldi1cdTAwM2V0eF90YWlscm9vbSxcbiBcdFx0XHRcdFx0XHQgIEdGUF9LRVJORUwpO1xuIFx0XHRcdGlmICghbmV3X3NrYikge1xuIFx0XHRcdFx0cmMgPSAtRU5PTUVNO1xuQEAgLTE0NjcsMTYgKzE0NjcsMTkgQEAgc3RhdGljIHZvaWQgZGlnaXRhbF90Z19yZWN2X3BzbF9yZXEoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdm9pZCAqYXJnLFxuIHN0YXRpYyB2b2lkIGRpZ2l0YWxfdGdfc2VuZF9hdHJfcmVzX2NvbXBsZXRlKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXG4gXHRcdFx0XHRcdCAgICAgdm9pZCAqYXJnLCBzdHJ1Y3Qgc2tfYnVmZiAqcmVzcClcbiB7XG4tXHRpbnQgb2Zmc2V0O1xuK1x0dW5zaWduZWQgaW50IG9mZnNldDtcbiBcbiBcdGlmIChJU19FUlIocmVzcCkpIHtcbiBcdFx0ZGlnaXRhbF9wb2xsX25leHRfdGVjaChkZGV2KTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0b2Zmc2V0ID0gMjtcbi1cdGlmIChyZXNwLVx1MDAzZWRhdGFbMF0gPT0gRElHSVRBTF9ORkNfREVQX05GQ0FfU09EX1NCKVxuLVx0XHRvZmZzZXQrKztcbitcdGlmICghcmVzcC1cdTAwM2VsZW4pXG4rXHRcdGdvdG8gYmFkX2ZyYW1lO1xuK1xuK1x0b2Zmc2V0ID0gKHJlc3AtXHUwMDNlZGF0YVswXSA9PSBESUdJVEFMX05GQ19ERVBfTkZDQV9TT0RfU0IpID8gMyA6IDI7XG4rXHRpZiAocmVzcC1cdTAwM2VsZW4gXHUwMDNjPSBvZmZzZXQpXG4rXHRcdGdvdG8gYmFkX2ZyYW1lO1xuIFxuIFx0ZGRldi1cdTAwM2VhdG5fY291bnQgPSAwO1xuIFxuQEAgLTE0ODQsNiArMTQ4NywxMiBAQCBzdGF0aWMgdm9pZCBkaWdpdGFsX3RnX3NlbmRfYXRyX3Jlc19jb21wbGV0ZShzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxuIFx0XHRkaWdpdGFsX3RnX3JlY3ZfcHNsX3JlcShkZGV2LCBhcmcsIHJlc3ApO1xuIFx0ZWxzZVxuIFx0XHRkaWdpdGFsX3RnX3JlY3ZfZGVwX3JlcShkZGV2LCBhcmcsIHJlc3ApO1xuK1xuK1x0cmV0dXJuO1xuK1xuK2JhZF9mcmFtZTpcbitcdGtmcmVlX3NrYihyZXNwKTtcbitcdGRpZ2l0YWxfcG9sbF9uZXh0X3RlY2goZGRldik7XG4gfVxuIFxuIHN0YXRpYyBpbnQgZGlnaXRhbF90Z19zZW5kX2F0cl9yZXMoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQwOjExLjIyODAzNzkxN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU4NzAxNDU3NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggRXZhbHVhdGlvbiBmb3IgU3l6a2FsbGVyIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgYXNzZXNzIGl0cyBwb3RlbnRpYWwgZm9yIHN5emthbGxlciBmdXp6aW5nLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gd2hldGhlciB0aGlzIG1vZGlmaWNhdGlvbiBpbnRyb2R1Y2VzIGEgbmV3IGF0dGFjayBzdXJmYWNlIG9yIGltcHJvdmVzIGV4aXN0aW5nIG9uZXMuXG5cbkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQncyBjaGFuZ2VkLiBUaGUgZGlmZiBwb2ludHMgbWUgdG93YXJkcyBgbmV0L25mYy9kaWdpdGFsX2RlcC5jYC4gVGhhdCdzIGluIHRoZSBORkMgc3Vic3lzdGVtLCB3aGljaCBpcyBhbHJlYWR5IGFuIGFyZWEgb2YgaW50ZXJlc3QuIEFueSBjaGFuZ2UgdGhlcmUgZ2V0cyBteSBhdHRlbnRpb24uXG5cblNwZWNpZmljYWxseSwgdGhlIGRpZmYgaW1wYWN0cyBgZGlnaXRhbF9yZWN2X2RlcF9kYXRhX2dhdGhlcmAgYW5kIGBkaWdpdGFsX3RnX3NlbmRfYXRyX3Jlc19jb21wbGV0ZWAuIFRoZXNlIGZ1bmN0aW9uIG5hbWVzIHN1Z2dlc3QgaW50ZXJhY3Rpb25zIHJlbGF0ZWQgdG8gZGF0YSBnYXRoZXJpbmcgYW5kIEFUUiByZXNwb25zZSBjb21wbGV0aW9uLCBib3RoIGFyZWFzIHdoZXJlIG1hbGZvcm1lZCBpbnB1dCBvciB1bmV4cGVjdGVkIHN0YXRlIHRyYW5zaXRpb25zIGNvdWxkIGxlYWQgdG8gdnVsbmVyYWJpbGl0aWVzLlxuXG5Ob3csIEknbGwgbGV2ZXJhZ2UgbXkgdG9vbHMuIEknbGwgcHJvYmFibHkgdXNlIGBncmVwcGVyYCBvciBtYXliZSBqdXN0IGByZWFkLWZpbGVgIHRvIGdldCB0aGUgY29udGV4dCBhcm91bmQgdGhvc2UgZnVuY3Rpb25zLiBJIG5lZWQgdG8gc2VlIHRoZSBzdXJyb3VuZGluZyBjb2RlLCB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3csIGFuZCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGVudHJ5IHBvaW50cyBvciBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGNvdWxkIGJlIGV4cGxvaXRlZC4gVGhpcyB3aWxsIGhlbHAgbWUgZGV0ZXJtaW5lIHRoZSBsaWtlbGlob29kIG9mIHRyaWdnZXJpbmcgYSBjcmFzaCBvciB2dWxuZXJhYmlsaXR5IHRocm91Z2ggZnV6emluZy4gTXkgZGVlcCBrbm93bGVkZ2Ugb2YgTkZDIHByb3RvY29sIGhhbmRsaW5nIGFuZCB0aGUga2VybmVsJ3MgZGlnaXRhbF9kZXAgaW1wbGVtZW50YXRpb24gd2lsbCBiZSBrZXkgdG8gdGhpcyBhc3Nlc3NtZW50LiBJIG5lZWQgdG8gc3BvdCBhbnl0aGluZyB0aGF0IGRldmlhdGVzIGZyb20gZXN0YWJsaXNoZWQgc2VjdXJlIGNvZGluZyBwcmFjdGljZXMgb3IgcHJvdG9jb2wgc3BlY2lmaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1NjksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQwOjE3LjA5ODE4ODIyM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmZjL2RpZ2l0YWxfZGVwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjMwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjMwOlxcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqXFxuIDIzMTpcXHRkaWdpdGFsX3JlY3ZfZGVwX2RhdGFfZ2F0aGVyKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHU4IHBmYixcXG4gMjMyOlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnJlc3AsXFxuIDIzMzpcXHRcXHRcXHRcXHQgICAgIGludCAoKnNlbmRfYWNrKShzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxcbiAyMzQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZGlnaXRhbF9kYXRhX2V4Y2hcXG4gMjM1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgKmRhdGFfZXhjaCksXFxuIDIzNjpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBkaWdpdGFsX2RhdGFfZXhjaCAqZGF0YV9leGNoKVxcbiAyMzc6XFx0e1xcbiAyMzg6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKm5ld19za2I7XFxuIDIzOTpcXHRcXHRpbnQgcmM7XFxuIDI0MDpcXHRcXG4gMjQxOlxcdFxcdGlmIChESUdJVEFMX05GQ19ERVBfTUlfQklUX1NFVChwZmIpIFxcdTAwMjZcXHUwMDI2ICghZGRldi1cXHUwMDNlY2hhaW5pbmdfc2tiKSkge1xcbiAyNDI6XFx0XFx0XFx0ZGRldi1cXHUwMDNlY2hhaW5pbmdfc2tiID1cXG4gMjQzOlxcdFxcdFxcdFxcdGRpZ2l0YWxfc2tiX2FsbG9jKGRkZXYsXFxuIDI0NDpcXHRcXHRcXHRcXHRcXHRcXHQgIDggKiBkZGV2LVxcdTAwM2Vsb2NhbF9wYXlsb2FkX21heCk7XFxuIDI0NTpcXHRcXHRcXHRpZiAoIWRkZXYtXFx1MDAzZWNoYWluaW5nX3NrYikge1xcbiAyNDY6XFx0XFx0XFx0XFx0cmMgPSAtRU5PTUVNO1xcbiAyNDc6XFx0XFx0XFx0XFx0Z290byBlcnJvcjtcXG4gMjQ4OlxcdFxcdFxcdH1cXG4gMjQ5OlxcdFxcdH1cXG4gMjUwOlxcdFxcbiAyNTE6XFx0XFx0aWYgKGRkZXYtXFx1MDAzZWNoYWluaW5nX3NrYikge1xcbiAyNTI6XFx0XFx0XFx0aWYgKHJlc3AtXFx1MDAzZWxlbiBcXHUwMDNlIHNrYl90YWlscm9vbShkZGV2LVxcdTAwM2VjaGFpbmluZ19za2IpKSB7XFxuIDI1MzpcXHRcXHRcXHRcXHRuZXdfc2tiID0gc2tiX2NvcHlfZXhwYW5kKGRkZXYtXFx1MDAzZWNoYWluaW5nX3NrYixcXG4gMjU0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgZGRldi1cXHUwMDNldHhfaGVhZHJvb20sXFxuIDI1NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIDggKiBkZGV2LVxcdTAwM2Vsb2NhbF9wYXlsb2FkX21heCArXFxuIDI1NjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGRkZXYtXFx1MDAzZXR4X3RhaWxyb29tLFxcbiAyNTc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBHRlBfS0VSTkVMKTtcXG4gMjU4OlxcdFxcdFxcdFxcdGlmICghbmV3X3NrYikge1xcbiAyNTk6XFx0XFx0XFx0XFx0XFx0cmMgPSAtRU5PTUVNO1xcbiAyNjA6XFx0XFx0XFx0XFx0XFx0Z290byBlcnJvcjtcXG4gMjYxOlxcdFxcdFxcdFxcdH1cXG4gMjYyOlxcdFxcbiAyNjM6XFx0XFx0XFx0XFx0a2ZyZWVfc2tiKGRkZXYtXFx1MDAzZWNoYWluaW5nX3NrYik7XFxuIDI2NDpcXHRcXHRcXHRcXHRkZGV2LVxcdTAwM2VjaGFpbmluZ19za2IgPSBuZXdfc2tiO1xcbiAyNjU6XFx0XFx0XFx0fVxcbiAyNjY6XFx0XFxuIDI2NzpcXHRcXHRcXHRza2JfcHV0X2RhdGEoZGRldi1cXHUwMDNlY2hhaW5pbmdfc2tiLCByZXNwLVxcdTAwM2VkYXRhLCByZXNwLVxcdTAwM2VsZW4pO1xcbiAyNjg6XFx0XFxuIDI2OTpcXHRcXHRcXHRrZnJlZV9za2IocmVzcCk7XFxuIDI3MDpcXHRcXHRcXHRyZXNwID0gTlVMTDtcXG4gMjcxOlxcdFxcbiAyNzI6XFx0XFx0XFx0aWYgKERJR0lUQUxfTkZDX0RFUF9NSV9CSVRfU0VUKHBmYikpIHtcXG4gMjczOlxcdFxcdFxcdFxcdHJjID0gc2VuZF9hY2soZGRldiwgZGF0YV9leGNoKTtcXG4gMjc0OlxcdFxcdFxcdFxcdGlmIChyYylcXG4gMjc1OlxcdFxcdFxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuIDI3NjpcXHRcXG4gMjc3OlxcdFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAyNzg6XFx0XFx0XFx0fVxcbiAyNzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQwOjE3LjA5ODM2MjQ1M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI0OTQ0NDIxNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGF0IHNwZWNpZmljIHNlY3Rpb24gb2YgdGhlIGNvZGUsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdCB0aHJvdWdoOlxuXG4qKkludmVzdGlnYXRpbmcgYG5ldC9uZmMvZGlnaXRhbF9kZXAuY2AqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY29kZSBhcm91bmQgbGluZXMgMTQ2MCB0byAxNTAwIG9mIGBuZXQvbmZjL2RpZ2l0YWxfZGVwLmNgLiBJIGV4cGVjdCB0aGlzIHNlY3Rpb24gbGlrZWx5IGNvbmNlcm5zIHNvbWUgc3BlY2lmaWMgZGF0YSBoYW5kbGluZyBvciBzdGF0ZSB0cmFuc2l0aW9uIHdpdGhpbiB0aGUgRGlnaXRhbCBERVAgKERhdGEgRXhjaGFuZ2UgUHJvdG9jb2wpIGltcGxlbWVudGF0aW9uLiBCYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIE5GQyBhcmNoaXRlY3R1cmUsIHRoaXMgcmFuZ2UgY291bGQgcmVsYXRlIHRvIGZyYW1lIHByb2Nlc3NpbmcsIGVycm9yIGhhbmRsaW5nLCBvciBwZXJoYXBzIGEgcGFydGljdWxhciByZXNwb25zZSB0byBhbiBpbml0aWF0ZWQgdHJhbnNhY3Rpb24uIEdpdmVuIG15IGV4cGVyaWVuY2UsIGEgcXVpY2sgc2NhbiBzaG91bGQgcmV2ZWFsIHRoZSBuYXR1cmUgb2YgaXRzIGZ1bmN0aW9uIHdpdGhpbiB0aGlzIGxhcmdlciBtb2R1bGUuIEknbGwgZm9jdXMgb24gaG93IHRoZSBjb2RlIGludGVyYWN0cyB3aXRoIHRoZSBuZXR3b3JrIHN0YWNrIGFuZCBhbnkgcG9zc2libGUgcmFjZSBjb25kaXRpb25zIG9yIGRhdGEgY29ycnVwdGlvbiBpdCBpbnRyb2R1Y2VzLiBJJ2xsIGJlIGxvb2tpbmcgc3BlY2lmaWNhbGx5IGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGFzIHdlbGwsIGJlY2F1c2UgdGhpcyBpcyBhbiBORkMgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3NTIsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQwOjE5LjU5MjgwODMzN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmZjL2RpZ2l0YWxfZGVwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ2MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQ2MDpcXHRcXG4xNDYxOlxcdFxcdHJjID0gZGlnaXRhbF90Z19zZW5kX3BzbF9yZXMoZGRldiwgcHNsX3JlcS1cXHUwMDNlZGlkLCByZl90ZWNoKTtcXG4xNDYyOlxcdFxcbjE0NjM6XFx0ZXhpdDpcXG4xNDY0OlxcdFxcdGtmcmVlX3NrYihyZXNwKTtcXG4xNDY1OlxcdH1cXG4xNDY2OlxcdFxcbjE0Njc6XFx0c3RhdGljIHZvaWQgZGlnaXRhbF90Z19zZW5kX2F0cl9yZXNfY29tcGxldGUoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcXG4xNDY4OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdm9pZCAqYXJnLCBzdHJ1Y3Qgc2tfYnVmZiAqcmVzcClcXG4xNDY5OlxcdHtcXG4xNDcwOlxcdFxcdHVuc2lnbmVkIGludCBvZmZzZXQ7XFxuMTQ3MTpcXHRcXG4xNDcyOlxcdFxcdGlmIChJU19FUlIocmVzcCkpIHtcXG4xNDczOlxcdFxcdFxcdGRpZ2l0YWxfcG9sbF9uZXh0X3RlY2goZGRldik7XFxuMTQ3NDpcXHRcXHRcXHRyZXR1cm47XFxuMTQ3NTpcXHRcXHR9XFxuMTQ3NjpcXHRcXG4xNDc3OlxcdFxcdGlmICghcmVzcC1cXHUwMDNlbGVuKVxcbjE0Nzg6XFx0XFx0XFx0Z290byBiYWRfZnJhbWU7XFxuMTQ3OTpcXHRcXG4xNDgwOlxcdFxcdG9mZnNldCA9IChyZXNwLVxcdTAwM2VkYXRhWzBdID09IERJR0lUQUxfTkZDX0RFUF9ORkNBX1NPRF9TQikgPyAzIDogMjtcXG4xNDgxOlxcdFxcdGlmIChyZXNwLVxcdTAwM2VsZW4gXFx1MDAzYz0gb2Zmc2V0KVxcbjE0ODI6XFx0XFx0XFx0Z290byBiYWRfZnJhbWU7XFxuMTQ4MzpcXHRcXG4xNDg0OlxcdFxcdGRkZXYtXFx1MDAzZWF0bl9jb3VudCA9IDA7XFxuMTQ4NTpcXHRcXG4xNDg2OlxcdFxcdGlmIChyZXNwLVxcdTAwM2VkYXRhW29mZnNldF0gPT0gRElHSVRBTF9DTURfUFNMX1JFUSlcXG4xNDg3OlxcdFxcdFxcdGRpZ2l0YWxfdGdfcmVjdl9wc2xfcmVxKGRkZXYsIGFyZywgcmVzcCk7XFxuMTQ4ODpcXHRcXHRlbHNlXFxuMTQ4OTpcXHRcXHRcXHRkaWdpdGFsX3RnX3JlY3ZfZGVwX3JlcShkZGV2LCBhcmcsIHJlc3ApO1xcbjE0OTA6XFx0XFxuMTQ5MTpcXHRcXHRyZXR1cm47XFxuMTQ5MjpcXHRcXG4xNDkzOlxcdGJhZF9mcmFtZTpcXG4xNDk0OlxcdFxcdGtmcmVlX3NrYihyZXNwKTtcXG4xNDk1OlxcdFxcdGRpZ2l0YWxfcG9sbF9uZXh0X3RlY2goZGRldik7XFxuMTQ5NjpcXHR9XFxuMTQ5NzpcXHRcXG4xNDk4OlxcdHN0YXRpYyBpbnQgZGlnaXRhbF90Z19zZW5kX2F0cl9yZXMoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcXG4xNDk5OlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBkaWdpdGFsX2F0cl9yZXEgKmF0cl9yZXEpXFxuMTUwMDpcXHR7XFxuMTUwMTpcXHRcXHRzdHJ1Y3QgZGlnaXRhbF9hdHJfcmVzICphdHJfcmVzO1xcbjE1MDI6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4xNTAzOlxcdFxcdHU4ICpnYiwgcGF5bG9hZF9iaXRzO1xcbjE1MDQ6XFx0XFx0c2l6ZV90IGdiX2xlbjtcXG4xNTA1OlxcdFxcdGludCByYztcXG4xNTA2OlxcdFxcbjE1MDc6XFx0XFx0Z2IgPSBuZmNfZ2V0X2xvY2FsX2dlbmVyYWxfYnl0ZXMoZGRldi1cXHUwMDNlbmZjX2RldiwgXFx1MDAyNmdiX2xlbik7XFxuMTUwODpcXHRcXHRpZiAoIWdiKVxcbjE1MDk6XFx0XFx0XFx0Z2JfbGVuID0gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDA6MTkuNTkyOTQwNjQ3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjcxODYwNDQ2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5GQyBEaWdpdGFsIFByb3RvY29sIFN1YnN5c3RlbSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoaWNoIHN1YnN5c3RlbSBJJ20gZGVhbGluZyB3aXRoLiBBaCwgYG5ldC9uZmMvZGlnaXRhbF9kZXAuY2Ag4oCTIHRoYXQncyBwYXJ0IG9mIHRoZSBORkMgRGlnaXRhbCBwcm90b2NvbCwgdW5kZXIgdGhlIGBDT05GSUdfTkZDX0RJR0lUQUxgIGZsYWcuIEdvb2Qgc3RhcnQuIE5vdywgdGhlIGtleSBxdWVzdGlvbjogaXMgTkZDIGV2ZW4gb24gdGhlIHJhZGFyIGZvciBmdXp6aW5nIHdpdGggc3l6a2FsbGVyPyBEb2VzIHN5emthbGxlciBvZmZlciBhbnkgc3VwcG9ydCBmb3IgTkZDLCBzcGVjaWZpY2FsbHk/XG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1c2FnZSBwYXR0ZXJucyBvZiBORkMgRGlnaXRhbCB0byBzZWUgaWYgc3l6a2FsbGVyIHRhcmdldHMgaXQuIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgdmlydHVhbCBORkMgZGV2aWNlcywgZWl0aGVyIHdpdGhpbiBzeXprYWxsZXIncyBzZXR1cCBvciBpbiBtb3JlIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSXQgd291bGQgYmUgdmFsdWFibGUgdG8gc2VhcmNoIGZvciB2aXJ0dWFsIE5GQyBkcml2ZXJzIG9yIGFueSBleGlzdGluZyBzeXprYWxsZXIgZGVzY3JpcHRpb25zIG9mIE5GQy5cblxuSG9sZCBvbi4uLiBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGNvZGUsIGxldCBtZSBwYXVzZSBhbmQgY2hlY2sgdGhlIGBuZXQvbmZjL0tjb25maWdgIGZpbGUuIFRoYXQgb2Z0ZW4gcmV2ZWFscyBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcywgYW5kIHRoZW4sIGFmdGVyIHRoYXQsIEkgc2hvdWxkIGxvb2sgYXQgdGhlIGRyaXZlcnMgdGhlbXNlbHZlcy4gSXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIG92ZXJ2aWV3IG9mIHdoYXQgdG8gbG9vayBmb3IhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NjQsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MDoyMi4zMTE1NDc3MzFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTczNTcwNzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkZDX0RJR0lUQUxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25mY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmZjL0tjb25maWc9Nj1tZW51Y29uZmlnIE5GQ1xcbi0tXFxubmV0L25mYy9LY29uZmlnLTE2LVxcbm5ldC9uZmMvS2NvbmZpZzoxNzpjb25maWcgTkZDX0RJR0lUQUxcXG5uZXQvbmZjL0tjb25maWctMTgtXFx0ZGVwZW5kcyBvbiBORkNcXG4tLVxcbm5ldC9uZmMvTWFrZWZpbGU9OD1vYmotJChDT05GSUdfTkZDX0hDSSkgKz0gaGNpL1xcbm5ldC9uZmMvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfTkZDX0RJR0lUQUwpICs9IG5mY19kaWdpdGFsLm9cXG5uZXQvbmZjL01ha2VmaWxlLTEwLVxcbi0tXFxubmV0L25mYy9kaWdpdGFsLmgtMzUtI2RlZmluZSBESUdJVEFMX0RSVl9DQVBTX0lOX0NSQyhkZGV2KSBcXFxcXFxubmV0L25mYy9kaWdpdGFsLmg6MzY6XFx0KChkZGV2KS1cXHUwMDNlZHJpdmVyX2NhcGFiaWxpdGllcyBcXHUwMDI2IE5GQ19ESUdJVEFMX0RSVl9DQVBTX0lOX0NSQylcXG5uZXQvbmZjL2RpZ2l0YWwuaC0zNy0jZGVmaW5lIERJR0lUQUxfRFJWX0NBUFNfVEdfQ1JDKGRkZXYpIFxcXFxcXG5uZXQvbmZjL2RpZ2l0YWwuaDozODpcXHQoKGRkZXYpLVxcdTAwM2Vkcml2ZXJfY2FwYWJpbGl0aWVzIFxcdTAwMjYgTkZDX0RJR0lUQUxfRFJWX0NBUFNfVEdfQ1JDKVxcbm5ldC9uZmMvZGlnaXRhbC5oLTM5LVxcbi0tXFxubmV0L25mYy9kaWdpdGFsX2NvcmUuYz0zMDk9aW50IGRpZ2l0YWxfdGFyZ2V0X2ZvdW5kKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jLTMyMi1cXHRjYXNlIE5GQ19QUk9UT19KRVdFTDpcXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jOjMyMzpcXHRcXHRmcmFtaW5nID0gTkZDX0RJR0lUQUxfRlJBTUlOR19ORkNBX1QxVDtcXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jLTMyNC1cXHRcXHRjaGVja19jcmMgPSBkaWdpdGFsX3NrYl9jaGVja19jcmNfYjtcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmMtMzI4LVxcdGNhc2UgTkZDX1BST1RPX01JRkFSRTpcXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jOjMyOTpcXHRcXHRmcmFtaW5nID0gTkZDX0RJR0lUQUxfRlJBTUlOR19ORkNBX1QyVDtcXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jLTMzMC1cXHRcXHRjaGVja19jcmMgPSBkaWdpdGFsX3NrYl9jaGVja19jcmNfYTtcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmMtMzM0LVxcdGNhc2UgTkZDX1BST1RPX0ZFTElDQTpcXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jOjMzNTpcXHRcXHRmcmFtaW5nID0gTkZDX0RJR0lUQUxfRlJBTUlOR19ORkNGX1QzVDtcXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jLTMzNi1cXHRcXHRjaGVja19jcmMgPSBkaWdpdGFsX3NrYl9jaGVja19jcmNfZjtcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmMtMzQwLVxcdGNhc2UgTkZDX1BST1RPX05GQ19ERVA6XFxubmV0L25mYy9kaWdpdGFsX2NvcmUuYzozNDE6XFx0XFx0aWYgKHJmX3RlY2ggPT0gTkZDX0RJR0lUQUxfUkZfVEVDSF8xMDZBKSB7XFxubmV0L25mYy9kaWdpdGFsX2NvcmUuYzozNDI6XFx0XFx0XFx0ZnJhbWluZyA9IE5GQ19ESUdJVEFMX0ZSQU1JTkdfTkZDQV9ORkNfREVQO1xcbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmMtMzQzLVxcdFxcdFxcdGNoZWNrX2NyYyA9IGRpZ2l0YWxfc2tiX2NoZWNrX2NyY19hO1xcbi0tXFxubmV0L25mYy9kaWdpdGFsX2NvcmUuYy0zNDUtXFx0XFx0fSBlbHNlIHtcXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jOjM0NjpcXHRcXHRcXHRmcmFtaW5nID0gTkZDX0RJR0lUQUxfRlJBTUlOR19ORkNGX05GQ19ERVA7XFxubmV0L25mYy9kaWdpdGFsX2NvcmUuYy0zNDctXFx0XFx0XFx0Y2hlY2tfY3JjID0gZGlnaXRhbF9za2JfY2hlY2tfY3JjX2Y7XFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jLTM1Mi1cXHRjYXNlIE5GQ19QUk9UT19JU08xNTY5MzpcXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jOjM1MzpcXHRcXHRmcmFtaW5nID0gTkZDX0RJR0lUQUxfRlJBTUlOR19JU08xNTY5M19UNVQ7XFxubmV0L25mYy9kaWdpdGFsX2NvcmUuYy0zNTQtXFx0XFx0Y2hlY2tfY3JjID0gZGlnaXRhbF9za2JfY2hlY2tfY3JjX2I7XFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jLTM1OC1cXHRjYXNlIE5GQ19QUk9UT19JU08xNDQ0MzpcXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jOjM1OTpcXHRcXHRmcmFtaW5nID0gTkZDX0RJR0lUQUxfRlJBTUlOR19ORkNBX1Q0VDtcXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jLTM2MC1cXHRcXHRjaGVja19jcmMgPSBkaWdpdGFsX3NrYl9jaGVja19jcmNfYTtcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmMtMzY0LVxcdGNhc2UgTkZDX1BST1RPX0lTTzE0NDQzX0I6XFxubmV0L25mYy9kaWdpdGFsX2NvcmUuYzozNjU6XFx0XFx0ZnJhbWluZyA9IE5GQ19ESUdJVEFMX0ZSQU1JTkdfTkZDQl9UNFQ7XFxubmV0L25mYy9kaWdpdGFsX2NvcmUuYy0zNjYtXFx0XFx0Y2hlY2tfY3JjID0gZGlnaXRhbF9za2JfY2hlY2tfY3JjX2I7XFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jLTM4Ni1cXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jOjM4NzpcXHRyYyA9IGRpZ2l0YWxfaW5fY29uZmlndXJlX2h3KGRkZXYsIE5GQ19ESUdJVEFMX0NPTkZJR19GUkFNSU5HLCBmcmFtaW5nKTtcXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jLTM4OC1cXHRpZiAocmMpXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jPTQ1MD1zdGF0aWMgdm9pZCBkaWdpdGFsX2FkZF9wb2xsX3RlY2goc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdTggcmZfdGVjaCxcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmMtNDU0LVxcbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmM6NDU1OlxcdGlmIChkZGV2LVxcdTAwM2Vwb2xsX3RlY2hfY291bnQgXFx1MDAzZT0gTkZDX0RJR0lUQUxfUE9MTF9NT0RFX0NPVU5UX01BWClcXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jLTQ1Ni1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jPTQ3Nj1zdGF0aWMgaW50IGRpZ2l0YWxfc3RhcnRfcG9sbChzdHJ1Y3QgbmZjX2RldiAqbmZjX2RldiwgX191MzIgaW1fcHJvdG9jb2xzLFxcbi0tXFxubmV0L25mYy9kaWdpdGFsX2NvcmUuYy01MDYtXFx0aWYgKG1hdGNoaW5nX2ltX3Byb3RvY29scyBcXHUwMDI2IERJR0lUQUxfUFJPVE9fTkZDQV9SRl9URUNIKVxcbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmM6NTA3OlxcdFxcdGRpZ2l0YWxfYWRkX3BvbGxfdGVjaChkZGV2LCBORkNfRElHSVRBTF9SRl9URUNIXzEwNkEsXFxubmV0L25mYy9kaWdpdGFsX2NvcmUuYy01MDgtXFx0XFx0XFx0XFx0ICAgICAgZGlnaXRhbF9pbl9zZW5kX3NlbnNfcmVxKTtcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmMtNTEwLVxcdGlmIChtYXRjaGluZ19pbV9wcm90b2NvbHMgXFx1MDAyNiBESUdJVEFMX1BST1RPX05GQ0JfUkZfVEVDSClcXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jOjUxMTpcXHRcXHRkaWdpdGFsX2FkZF9wb2xsX3RlY2goZGRldiwgTkZDX0RJR0lUQUxfUkZfVEVDSF8xMDZCLFxcbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmMtNTEyLVxcdFxcdFxcdFxcdCAgICAgIGRpZ2l0YWxfaW5fc2VuZF9zZW5zYl9yZXEpO1xcbi0tXFxubmV0L25mYy9kaWdpdGFsX2NvcmUuYy01MTQtXFx0aWYgKG1hdGNoaW5nX2ltX3Byb3RvY29scyBcXHUwMDI2IERJR0lUQUxfUFJPVE9fTkZDRl9SRl9URUNIKSB7XFxubmV0L25mYy9kaWdpdGFsX2NvcmUuYzo1MTU6XFx0XFx0ZGlnaXRhbF9hZGRfcG9sbF90ZWNoKGRkZXYsIE5GQ19ESUdJVEFMX1JGX1RFQ0hfMjEyRixcXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jLTUxNi1cXHRcXHRcXHRcXHQgICAgICBkaWdpdGFsX2luX3NlbmRfc2Vuc2ZfcmVxKTtcXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jLTUxNy1cXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jOjUxODpcXHRcXHRkaWdpdGFsX2FkZF9wb2xsX3RlY2goZGRldiwgTkZDX0RJR0lUQUxfUkZfVEVDSF80MjRGLFxcbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmMtNTE5LVxcdFxcdFxcdFxcdCAgICAgIGRpZ2l0YWxfaW5fc2VuZF9zZW5zZl9yZXEpO1xcbi0tXFxubmV0L25mYy9kaWdpdGFsX2NvcmUuYy01MjItXFx0aWYgKG1hdGNoaW5nX2ltX3Byb3RvY29scyBcXHUwMDI2IERJR0lUQUxfUFJPVE9fSVNPMTU2OTNfUkZfVEVDSClcXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jOjUyMzpcXHRcXHRkaWdpdGFsX2FkZF9wb2xsX3RlY2goZGRldiwgTkZDX0RJR0lUQUxfUkZfVEVDSF9JU08xNTY5MyxcXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jLTUyNC1cXHRcXHRcXHRcXHQgICAgICBkaWdpdGFsX2luX3NlbmRfaXNvMTU2OTNfaW52X3JlcSk7XFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jLTUzMy1cXHRcXHR9IGVsc2Uge1xcbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmM6NTM0OlxcdFxcdFxcdGRpZ2l0YWxfYWRkX3BvbGxfdGVjaChkZGV2LCBORkNfRElHSVRBTF9SRl9URUNIXzEwNkEsXFxubmV0L25mYy9kaWdpdGFsX2NvcmUuYy01MzUtXFx0XFx0XFx0XFx0XFx0ICAgICAgZGlnaXRhbF90Z19saXN0ZW5fbmZjYSk7XFxubmV0L25mYy9kaWdpdGFsX2NvcmUuYy01MzYtXFxubmV0L25mYy9kaWdpdGFsX2NvcmUuYzo1Mzc6XFx0XFx0XFx0ZGlnaXRhbF9hZGRfcG9sbF90ZWNoKGRkZXYsIE5GQ19ESUdJVEFMX1JGX1RFQ0hfMjEyRixcXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jLTUzOC1cXHRcXHRcXHRcXHRcXHQgICAgICBkaWdpdGFsX3RnX2xpc3Rlbl9uZmNmKTtcXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jLTUzOS1cXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jOjU0MDpcXHRcXHRcXHRkaWdpdGFsX2FkZF9wb2xsX3RlY2goZGRldiwgTkZDX0RJR0lUQUxfUkZfVEVDSF80MjRGLFxcbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmMtNTQxLVxcdFxcdFxcdFxcdFxcdCAgICAgIGRpZ2l0YWxfdGdfbGlzdGVuX25mY2YpO1xcbi0tXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jPTE2OD1zdGF0aWMgdm9pZCBkaWdpdGFsX3NrYl9wdXNoX2RlcF9zb2Qoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xNzQtXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjE3NTpcXHRpZiAoZGRldi1cXHUwMDNlY3Vycl9yZl90ZWNoID09IE5GQ19ESUdJVEFMX1JGX1RFQ0hfMTA2QSlcXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTc2LVxcdFxcdCoodTggKilza2JfcHVzaChza2IsIHNpemVvZih1OCkpID0gRElHSVRBTF9ORkNfREVQX05GQ0FfU09EX1NCO1xcbi0tXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jPTE3OT1zdGF0aWMgaW50IGRpZ2l0YWxfc2tiX3B1bGxfZGVwX3NvZChzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxcbi0tXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTE4Ni1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6MTg3OlxcdGlmIChkZGV2LVxcdTAwM2VjdXJyX3JmX3RlY2ggPT0gTkZDX0RJR0lUQUxfUkZfVEVDSF8xMDZBKVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xODgtXFx0XFx0c2tiX3B1bGwoc2tiLCBzaXplb2YodTgpKTtcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYz0yOTU9c3RhdGljIHZvaWQgZGlnaXRhbF9pbl9yZWN2X3BzbF9yZXMoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdm9pZCAqYXJnLFxcbi0tXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTMyOC1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6MzI5OlxcdHJjID0gZGlnaXRhbF9pbl9jb25maWd1cmVfaHcoZGRldiwgTkZDX0RJR0lUQUxfQ09ORklHX1JGX1RFQ0gsXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjMzMDpcXHRcXHRcXHRcXHQgICAgIE5GQ19ESUdJVEFMX1JGX1RFQ0hfNDI0Rik7XFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTMzMS1cXHRpZiAocmMpXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMzMzLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzozMzQ6XFx0cmMgPSBkaWdpdGFsX2luX2NvbmZpZ3VyZV9odyhkZGV2LCBORkNfRElHSVRBTF9DT05GSUdfRlJBTUlORyxcXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6MzM1OlxcdFxcdFxcdFxcdCAgICAgTkZDX0RJR0lUQUxfRlJBTUlOR19ORkNGX05GQ19ERVApO1xcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0zMzYtXFx0aWYgKHJjKVxcbi0tXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTMzOS1cXHRpZiAoIURJR0lUQUxfRFJWX0NBUFNfSU5fQ1JDKGRkZXYpIFxcdTAwMjZcXHUwMDI2XFxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjM0MDpcXHQgICAgKGRkZXYtXFx1MDAzZWN1cnJfcmZfdGVjaCA9PSBORkNfRElHSVRBTF9SRl9URUNIXzEwNkEpKSB7XFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTM0MS1cXHRcXHRkZGV2LVxcdTAwM2Vza2JfYWRkX2NyYyA9IGRpZ2l0YWxfc2tiX2FkZF9jcmNfZjtcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0zNDQtXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjM0NTpcXHRkZGV2LVxcdTAwM2VjdXJyX3JmX3RlY2ggPSBORkNfRElHSVRBTF9SRl9URUNIXzQyNEY7XFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTM0Ni1cXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYz0zOTk9c3RhdGljIHZvaWQgZGlnaXRhbF9pbl9yZWN2X2F0cl9yZXMoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdm9pZCAqYXJnLFxcbi0tXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTQ1Mi1cXHRpZiAoKGRkZXYtXFx1MDAzZXByb3RvY29scyBcXHUwMDI2IE5GQ19QUk9UT19GRUxJQ0FfTUFTSykgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6NDUzOlxcdCAgICAoZGRldi1cXHUwMDNlY3Vycl9yZl90ZWNoICE9IE5GQ19ESUdJVEFMX1JGX1RFQ0hfNDI0RikpIHtcXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtNDU0LVxcdFxcdHJjID0gZGlnaXRhbF9pbl9zZW5kX3BzbF9yZXEoZGRldiwgdGFyZ2V0KTtcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYz05NTE9c3RhdGljIHZvaWQgZGlnaXRhbF90Z19zZXRfcmZfdGVjaChzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCB1OCByZl90ZWNoKVxcbi0tXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTk2MS1cXHRzd2l0Y2ggKGRkZXYtXFx1MDAzZWN1cnJfcmZfdGVjaCkge1xcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzo5NjI6XFx0Y2FzZSBORkNfRElHSVRBTF9SRl9URUNIXzEwNkE6XFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTk2My1cXHRcXHRkZGV2LVxcdTAwM2Vza2JfYWRkX2NyYyA9IGRpZ2l0YWxfc2tiX2FkZF9jcmNfYTtcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy05NjYtXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjk2NzpcXHRjYXNlIE5GQ19ESUdJVEFMX1JGX1RFQ0hfMjEyRjpcXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6OTY4OlxcdGNhc2UgTkZDX0RJR0lUQUxfUkZfVEVDSF80MjRGOlxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy05NjktXFx0XFx0ZGRldi1cXHUwMDNlc2tiX2FkZF9jcmMgPSBkaWdpdGFsX3NrYl9hZGRfY3JjX2Y7XFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM9MTM0OD1zdGF0aWMgdm9pZCBkaWdpdGFsX3RnX3NlbmRfcHNsX3Jlc19jb21wbGV0ZShzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxcbi0tXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTEzNTctXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjEzNTg6XFx0ZGlnaXRhbF90Z19jb25maWd1cmVfaHcoZGRldiwgTkZDX0RJR0lUQUxfQ09ORklHX1JGX1RFQ0gsIHJmX3RlY2gpO1xcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xMzU5LVxcbi0tXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jPTEzOTg9c3RhdGljIHZvaWQgZGlnaXRhbF90Z19yZWN2X3BzbF9yZXEoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdm9pZCAqYXJnLFxcbi0tXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTE0MzUtXFx0Y2FzZSAwOlxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzoxNDM2OlxcdFxcdHJmX3RlY2ggPSBORkNfRElHSVRBTF9SRl9URUNIXzEwNkE7XFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTE0MzctXFx0XFx0YnJlYWs7XFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTE0MzgtXFx0Y2FzZSAxOlxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzoxNDM5OlxcdFxcdHJmX3RlY2ggPSBORkNfRElHSVRBTF9SRl9URUNIXzIxMkY7XFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTE0NDAtXFx0XFx0YnJlYWs7XFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTE0NDEtXFx0Y2FzZSAyOlxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzoxNDQyOlxcdFxcdHJmX3RlY2ggPSBORkNfRElHSVRBTF9SRl9URUNIXzQyNEY7XFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTE0NDMtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM9MTU1MD12b2lkIGRpZ2l0YWxfdGdfcmVjdl9hdHJfcmVxKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHZvaWQgKmFyZyxcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xNTcwLVxcdFxcdG1pbl9zaXplID0gRElHSVRBTF9BVFJfUkVRX01JTl9TSVpFICsgMjtcXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6MTU3MTpcXHRcXHRkaWdpdGFsX3RnX3NldF9yZl90ZWNoKGRkZXYsIE5GQ19ESUdJVEFMX1JGX1RFQ0hfMTA2QSk7XFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTE1NzItXFx0fSBlbHNlIHtcXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTU3My1cXHRcXHRtaW5fc2l6ZSA9IERJR0lUQUxfQVRSX1JFUV9NSU5fU0laRSArIDE7XFxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjE1NzQ6XFx0XFx0ZGlnaXRhbF90Z19zZXRfcmZfdGVjaChkZGV2LCBORkNfRElHSVRBTF9SRl9URUNIXzIxMkYpO1xcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xNTc1LVxcdH1cXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xNjE0LVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzoxNjE1OlxcdHJjID0gZGlnaXRhbF90Z19jb25maWd1cmVfaHcoZGRldiwgTkZDX0RJR0lUQUxfQ09ORklHX0ZSQU1JTkcsXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjE2MTY6XFx0XFx0XFx0XFx0ICAgICBORkNfRElHSVRBTF9GUkFNSU5HX05GQ19ERVBfQUNUSVZBVEVEKTtcXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTYxNy1cXHRpZiAocmMpXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jPTM0MT1zdGF0aWMgaW50IGRpZ2l0YWxfaW5fc2VuZF9zZWxfcmVxKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTM2OS1cXHRpZiAoRElHSVRBTF9EUlZfQ0FQU19JTl9DUkMoZGRldikpIHtcXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jOjM3MDpcXHRcXHRyYyA9IGRpZ2l0YWxfaW5fY29uZmlndXJlX2h3KGRkZXYsIE5GQ19ESUdJVEFMX0NPTkZJR19GUkFNSU5HLFxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM6MzcxOlxcdFxcdFxcdFxcdE5GQ19ESUdJVEFMX0ZSQU1JTkdfTkZDQV9TVEFOREFSRF9XSVRIX0NSQ19BKTtcXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTM3Mi1cXHRcXHRpZiAocmMpXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jPTQ0OD1zdGF0aWMgaW50IGRpZ2l0YWxfaW5fc2VuZF9zZGRfcmVxKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTQ1NC1cXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jOjQ1NTpcXHRyYyA9IGRpZ2l0YWxfaW5fY29uZmlndXJlX2h3KGRkZXYsIE5GQ19ESUdJVEFMX0NPTkZJR19GUkFNSU5HLFxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM6NDU2OlxcdFxcdFxcdFxcdCAgICAgTkZDX0RJR0lUQUxfRlJBTUlOR19ORkNBX1NUQU5EQVJEKTtcXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTQ1Ny1cXHRpZiAocmMpXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jPTUyNz1pbnQgZGlnaXRhbF9pbl9zZW5kX3NlbnNfcmVxKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHU4IHJmX3RlY2gpXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTUzMS1cXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jOjUzMjpcXHRyYyA9IGRpZ2l0YWxfaW5fY29uZmlndXJlX2h3KGRkZXYsIE5GQ19ESUdJVEFMX0NPTkZJR19SRl9URUNILFxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM6NTMzOlxcdFxcdFxcdFxcdCAgICAgTkZDX0RJR0lUQUxfUkZfVEVDSF8xMDZBKTtcXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTUzNC1cXHRpZiAocmMpXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTUzNi1cXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jOjUzNzpcXHRyYyA9IGRpZ2l0YWxfaW5fY29uZmlndXJlX2h3KGRkZXYsIE5GQ19ESUdJVEFMX0NPTkZJR19GUkFNSU5HLFxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM6NTM4OlxcdFxcdFxcdFxcdCAgICAgTkZDX0RJR0lUQUxfRlJBTUlOR19ORkNBX1NIT1JUKTtcXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTUzOS1cXHRpZiAocmMpXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jPTcxND1pbnQgZGlnaXRhbF9pbl9zZW5kX3NlbnNiX3JlcShzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCB1OCByZl90ZWNoKVxcbi0tXFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy03MTktXFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYzo3MjA6XFx0cmMgPSBkaWdpdGFsX2luX2NvbmZpZ3VyZV9odyhkZGV2LCBORkNfRElHSVRBTF9DT05GSUdfUkZfVEVDSCxcXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jOjcyMTpcXHRcXHRcXHRcXHQgICAgIE5GQ19ESUdJVEFMX1JGX1RFQ0hfMTA2Qik7XFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy03MjItXFx0aWYgKHJjKVxcbi0tXFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy03MjQtXFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYzo3MjU6XFx0cmMgPSBkaWdpdGFsX2luX2NvbmZpZ3VyZV9odyhkZGV2LCBORkNfRElHSVRBTF9DT05GSUdfRlJBTUlORyxcXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jOjcyNjpcXHRcXHRcXHRcXHQgICAgIE5GQ19ESUdJVEFMX0ZSQU1JTkdfTkZDQik7XFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy03MjctXFx0aWYgKHJjKVxcbi0tXFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYz04MDQ9aW50IGRpZ2l0YWxfaW5fc2VuZF9zZW5zZl9yZXEoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdTggcmZfdGVjaClcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtODEwLVxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM6ODExOlxcdHJjID0gZGlnaXRhbF9pbl9jb25maWd1cmVfaHcoZGRldiwgTkZDX0RJR0lUQUxfQ09ORklHX1JGX1RFQ0gsIHJmX3RlY2gpO1xcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtODEyLVxcdGlmIChyYylcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtODE0LVxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM6ODE1OlxcdHJjID0gZGlnaXRhbF9pbl9jb25maWd1cmVfaHcoZGRldiwgTkZDX0RJR0lUQUxfQ09ORklHX0ZSQU1JTkcsXFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYzo4MTY6XFx0XFx0XFx0XFx0ICAgICBORkNfRElHSVRBTF9GUkFNSU5HX05GQ0YpO1xcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtODE3LVxcdGlmIChyYylcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM9ODk1PWludCBkaWdpdGFsX2luX3NlbmRfaXNvMTU2OTNfaW52X3JlcShzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCB1OCByZl90ZWNoKVxcbi0tXFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy05MDAtXFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYzo5MDE6XFx0cmMgPSBkaWdpdGFsX2luX2NvbmZpZ3VyZV9odyhkZGV2LCBORkNfRElHSVRBTF9DT05GSUdfUkZfVEVDSCxcXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jOjkwMjpcXHRcXHRcXHRcXHQgICAgIE5GQ19ESUdJVEFMX1JGX1RFQ0hfSVNPMTU2OTMpO1xcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtOTAzLVxcdGlmIChyYylcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtOTA1LVxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM6OTA2OlxcdHJjID0gZGlnaXRhbF9pbl9jb25maWd1cmVfaHcoZGRldiwgTkZDX0RJR0lUQUxfQ09ORklHX0ZSQU1JTkcsXFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYzo5MDc6XFx0XFx0XFx0XFx0ICAgICBORkNfRElHSVRBTF9GUkFNSU5HX0lTTzE1NjkzX0lOVkVOVE9SWSk7XFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy05MDgtXFx0aWYgKHJjKVxcbi0tXFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYz05MzU9c3RhdGljIGludCBkaWdpdGFsX3RnX3NlbmRfc2VsX3JlcyhzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2KVxcbi0tXFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy05NDgtXFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYzo5NDk6XFx0cmMgPSBkaWdpdGFsX3RnX2NvbmZpZ3VyZV9odyhkZGV2LCBORkNfRElHSVRBTF9DT05GSUdfRlJBTUlORyxcXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jOjk1MDpcXHRcXHRcXHRcXHQgICAgIE5GQ19ESUdJVEFMX0ZSQU1JTkdfTkZDQV9BTlRJQ09MX0NPTVBMRVRFKTtcXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTk1MS1cXHRpZiAocmMpIHtcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM9OTk0PXN0YXRpYyBpbnQgZGlnaXRhbF90Z19zZW5kX3NkZF9yZXMoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldilcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtMTAxMy1cXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jOjEwMTQ6XFx0cmMgPSBkaWdpdGFsX3RnX2NvbmZpZ3VyZV9odyhkZGV2LCBORkNfRElHSVRBTF9DT05GSUdfRlJBTUlORyxcXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jOjEwMTU6XFx0XFx0XFx0XFx0TkZDX0RJR0lUQUxfRlJBTUlOR19ORkNBX1NUQU5EQVJEX1dJVEhfQ1JDX0EpO1xcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtMTAxNi1cXHRpZiAocmMpIHtcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM9MTA1OD1zdGF0aWMgaW50IGRpZ2l0YWxfdGdfc2VuZF9zZW5zX3JlcyhzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2KVxcbi0tXFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy0xMDcyLVxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM6MTA3MzpcXHRyYyA9IGRpZ2l0YWxfdGdfY29uZmlndXJlX2h3KGRkZXYsIE5GQ19ESUdJVEFMX0NPTkZJR19GUkFNSU5HLFxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM6MTA3NDpcXHRcXHRcXHRcXHQgICAgIE5GQ19ESUdJVEFMX0ZSQU1JTkdfTkZDQV9TVEFOREFSRCk7XFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy0xMDc1LVxcdGlmIChyYykge1xcbi0tXFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYz0xMjIzPXN0YXRpYyBpbnQgZGlnaXRhbF90Z19jb25maWdfbmZjYShzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2KVxcbi0tXFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy0xMjI2LVxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM6MTIyNzpcXHRyYyA9IGRpZ2l0YWxfdGdfY29uZmlndXJlX2h3KGRkZXYsIE5GQ19ESUdJVEFMX0NPTkZJR19SRl9URUNILFxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM6MTIyODpcXHRcXHRcXHRcXHQgICAgIE5GQ19ESUdJVEFMX1JGX1RFQ0hfMTA2QSk7XFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy0xMjI5LVxcdGlmIChyYylcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtMTIzMS1cXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jOjEyMzI6XFx0cmV0dXJuIGRpZ2l0YWxfdGdfY29uZmlndXJlX2h3KGRkZXYsIE5GQ19ESUdJVEFMX0NPTkZJR19GUkFNSU5HLFxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM6MTIzMzpcXHRcXHRcXHRcXHQgICAgICAgTkZDX0RJR0lUQUxfRlJBTUlOR19ORkNBX05GQ19ERVApO1xcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtMTIzNC19XFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jPTEyNDc9c3RhdGljIGludCBkaWdpdGFsX3RnX2NvbmZpZ19uZmNmKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHU4IHJmX3RlY2gpXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTEyNTAtXFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYzoxMjUxOlxcdHJjID0gZGlnaXRhbF90Z19jb25maWd1cmVfaHcoZGRldiwgTkZDX0RJR0lUQUxfQ09ORklHX1JGX1RFQ0gsIHJmX3RlY2gpO1xcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtMTI1Mi1cXHRpZiAocmMpXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTEyNTQtXFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYzoxMjU1OlxcdHJldHVybiBkaWdpdGFsX3RnX2NvbmZpZ3VyZV9odyhkZGV2LCBORkNfRElHSVRBTF9DT05GSUdfRlJBTUlORyxcXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jOjEyNTY6XFx0XFx0XFx0XFx0ICAgICAgIE5GQ19ESUdJVEFMX0ZSQU1JTkdfTkZDRl9ORkNfREVQKTtcXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTEyNTctfVxcbi0tXFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYz0xMjcwPXZvaWQgZGlnaXRhbF90Z19yZWN2X21kX3JlcShzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCB2b2lkICphcmcsXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTEyODUtXFx0c3dpdGNoIChyZl90ZWNoKSB7XFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYzoxMjg2OlxcdGNhc2UgTkZDX0RJR0lUQUxfUkZfVEVDSF8xMDZBOlxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtMTI4Ny1cXHRcXHRyYyA9IGRpZ2l0YWxfdGdfY29uZmlnX25mY2EoZGRldik7XFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTEyOTEtXFx0XFx0YnJlYWs7XFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYzoxMjkyOlxcdGNhc2UgTkZDX0RJR0lUQUxfUkZfVEVDSF8yMTJGOlxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM6MTI5MzpcXHRjYXNlIE5GQ19ESUdJVEFMX1JGX1RFQ0hfNDI0RjpcXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTEyOTQtXFx0XFx0cmMgPSBkaWdpdGFsX3RnX2NvbmZpZ19uZmNmKGRkZXYsIHJmX3RlY2gpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MDoyMi4zNjg5MTA3MjhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNDk5Nzg4Njk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIE5GQ19ESUdJVEFMIERyaXZlciBVc2FnZSoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGF0J3MgdGhlICpyZWFsKiBwaWN0dXJlIGhlcmUgd2l0aCByZWdhcmRzIHRvIGhvdyBkaWZmZXJlbnQgZHJpdmVycyBpbnRlcmFjdCB3aXRoIG9yIGxldmVyYWdlIHRoZSBgTkZDX0RJR0lUQUxgIHNldHRpbmc/XCIuIFRoaXMgaXNuJ3QganVzdCBhYm91dCBhIHN1cGVyZmljaWFsIHNjYW47IEkgbmVlZCB0byBwaW5wb2ludCB0aGUgcHJhY3RpY2FsIGltcGxpY2F0aW9ucy4gQXJlIHdlIHNlZWluZyBjb25zaXN0ZW50IGFkb3B0aW9uPyBPciBpcyBpdCBzcG9yYWRpYz8gQXJlIHNwZWNpZmljIGRyaXZlciBmYW1pbGllcyBtb3JlIGxpa2VseSB0byB1dGlsaXplIGl0PyBXaGF0IGFyZSB0aGUgY29tbW9uIHVzZSBjYXNlcyBhbmQgZGVzaWduIHBhdHRlcm5zPyBEb2VzIGl0cyB1c2UgY29ycmVsYXRlIHdpdGggYW55IHBhcnRpY3VsYXIgaGFyZHdhcmUgY29uZmlndXJhdGlvbnMgb3Igc29mdHdhcmUgdmVyc2lvbnM/IEknbSBhbnRpY2lwYXRpbmcgdGhhdCBJJ2xsIG5lZWQgdG8gbG9vayBiZXlvbmQgc2ltcGxlIGVuYWJsZWQvZGlzYWJsZWQgc3RhdGVzLiBJJ2xsIG5lZWQgdG8gZXhwbG9yZSB0aGUgdW5kZXJseWluZyByZWFzb24gKndoeSogYSBwYXJ0aWN1bGFyIGRyaXZlciBjaG9vc2VzIHRvIHVzZSwgb3Igbm90IHVzZSwgYE5GQ19ESUdJVEFMYC4gQW5kIGZyb20gdGhlcmUsIHRoZSByZWFsIHdvcmsgYmVnaW5zOiBhbmFseXppbmcgdGhlIGltcGFjdCBhbmQgaW1wbGljYXRpb25zIG9mIHRoZSB0cmVuZHMgSSB1bmNvdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjkzMCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQwOjI0Ljg2ODcwMTg3N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwMDA0NTc4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTkZDX0RJR0lUQUxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm0vY29uZmlncy9leHlub3NfZGVmY29uZmlnPTc3PUNPTkZJR19ORkM9eVxcbmFyY2gvYXJtL2NvbmZpZ3MvZXh5bm9zX2RlZmNvbmZpZzo3ODpDT05GSUdfTkZDX0RJR0lUQUw9bVxcbmFyY2gvYXJtL2NvbmZpZ3MvZXh5bm9zX2RlZmNvbmZpZy03OS1DT05GSUdfTkZDX05DST15XFxuLS1cXG5hcmNoL2FybS9jb25maWdzL211bHRpX3Y3X2RlZmNvbmZpZz0xNjg9Q09ORklHX05GQz1tXFxuYXJjaC9hcm0vY29uZmlncy9tdWx0aV92N19kZWZjb25maWc6MTY5OkNPTkZJR19ORkNfRElHSVRBTD1tXFxuYXJjaC9hcm0vY29uZmlncy9tdWx0aV92N19kZWZjb25maWctMTcwLUNPTkZJR19ORkNfTkNJPW1cXG4tLVxcbm5ldC9uZmMvTWFrZWZpbGU9OD1vYmotJChDT05GSUdfTkZDX0hDSSkgKz0gaGNpL1xcbm5ldC9uZmMvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfTkZDX0RJR0lUQUwpICs9IG5mY19kaWdpdGFsLm9cXG5uZXQvbmZjL01ha2VmaWxlLTEwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MDoyNi42Njg3NTYwNTRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDIxNzUxNjYzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgTkZDIERpZ2l0YWwgRHJpdmVyIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBpZGVudGlmeSBob3cgZHJpdmVycyBpbnRlcmFjdCB3aXRoIHRoZSBkaWdpdGFsIE5GQyBmdW5jdGlvbmFsaXR5LiBJIHdhbnQgdG8gcGlucG9pbnQgcHJlY2lzZWx5IHdoaWNoIG9uZXMgYXJlIHNlbGVjdGluZyBgTkZDX0RJR0lUQUxgIG9yLCBhbHRlcm5hdGl2ZWx5LCBhcmUgZGlyZWN0bHkgaW5jbHVkaW5nIGBkaWdpdGFsLmhgLiBUaGlzIGlzIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gZXN0YWJsaXNoIHRoZSBzY29wZSBvZiBpbmZsdWVuY2UgcmVsYXRlZCB0byB0aGlzIHBhcnRpY3VsYXIgc3Vic3lzdGVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCB3aG8ncyBwdWxsaW5nIGluIHRoaXMgaGVhZGVyLCBvciByZXF1ZXN0aW5nIHRoaXMgZmVhdHVyZSBpbiBhIEtjb25maWcgb3B0aW9uLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byBhc3Nlc3MgaW1wYWN0LCBwbGFuIG1vZGlmaWNhdGlvbnMsIG9yIHRyYWNrIHBvdGVudGlhbCBjb25mbGljdHMuIEl0J3MgYSBmdW5kYW1lbnRhbCBzdGVwIGluIHVuZGVyc3RhbmRpbmcgdGhlIGxhbmRzY2FwZSBiZWZvcmUgcHJvY2VlZGluZyB3aXRoIGFueSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQwOCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQwOjMwLjg4NjI3NTUyOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1MzgxNzI2MSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IE5GQ19ESUdJVEFMXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MDozMi42NDAxMDIzMVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMDU0NTAxMjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBzZWFyY2g6XG5cbioqRGl2aW5nIGludG8gdGhlIE5GQyBEcml2ZXIgTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gTkZDIGRpZ2l0YWwgZGV2aWNlcy4gVGhlIGtleSB0ZXJtcyBhcmUgYG5mY19kaWdpdGFsX2FsbG9jYXRlX2RldmljZWAgYW5kIGBuZmNfZGlnaXRhbF9kZXZgLiBTaW5jZSBJJ20gYW4gZXhwZXJ0LCBJIGtub3cgdGhlc2UgcHJvYmFibHkgcmVsYXRlIHRvIGRldmljZSBhbGxvY2F0aW9uIGFuZCBkYXRhIHN0cnVjdHVyZXMuIEknbGwgc3RhcnQgd2l0aCBhIGJyb2FkIHNlYXJjaCBhY3Jvc3MgdGhlIGBkcml2ZXJzL2AgZGlyZWN0b3J5LiBUaGF0J3MgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBiZWdpbiwgYXMgZHJpdmVycyBhcmUgdGhlIHNvZnR3YXJlIGludGVyZmFjZXMgdG8gaGFyZHdhcmUuIEknbGwgbmVlZCB0byBsb29rIGZvciBpbXBsZW1lbnRhdGlvbnMgb2YgZGV2aWNlIGFsbG9jYXRpb24gYW5kIGRldmljZSBkcml2ZXJzLiBJIGV4cGVjdCB0aGF0IEknbGwgZmluZCBjb2RlIHRoYXQgY2FsbHMgdGhlIGZ1bmN0aW9ucyBvciB1c2VzIHRoZSBkYXRhIHN0cnVjdHVyZSBJIG1lbnRpb25lZC4gQWZ0ZXIgSSBoYXZlIGlkZW50aWZpZWQgdGhlIGltcGxlbWVudGF0aW9ucywgSSBjYW4gdHJ5IHRvIGlkZW50aWZ5IHdoaWNoIHBhcnRzIG9mIHRoZSBrZXJuZWwgdXNlIHRoZXNlIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2MjQsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MDozNC42OTQ2MDYyNDlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDY1NzIzOTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZjX2RpZ2l0YWxfXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTA3OCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuZHJpdmVycy9uZmMvbmZjc2ltLmMtMTUtXFxuZHJpdmVycy9uZmMvbmZjc2ltLmM6MTY6I2RlZmluZSBORkNTSU1fRVJSKGQsIGZtdCwgYXJncy4uLikgbmZjX2VycihcXHUwMDI2ZC1cXHUwMDNlbmZjX2RpZ2l0YWxfZGV2LVxcdTAwM2VuZmNfZGV2LVxcdTAwM2VkZXYsIFxcXFxcXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0xNy1cXHRcXHRcXHRcXHRcXHQgICAgXFxcIiVzOiBcXFwiIGZtdCwgX19mdW5jX18sICMjIGFyZ3MpXFxuZHJpdmVycy9uZmMvbmZjc2ltLmMtMTgtXFxuZHJpdmVycy9uZmMvbmZjc2ltLmM6MTk6I2RlZmluZSBORkNTSU1fREJHKGQsIGZtdCwgYXJncy4uLikgZGV2X2RiZyhcXHUwMDI2ZC1cXHUwMDNlbmZjX2RpZ2l0YWxfZGV2LVxcdTAwM2VuZmNfZGV2LVxcdTAwM2VkZXYsIFxcXFxcXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0yMC1cXHRcXHRcXHRcXHRcXHQgICAgXFxcIiVzOiBcXFwiIGZtdCwgX19mdW5jX18sICMjIGFyZ3MpXFxuLS1cXG5kcml2ZXJzL25mYy9uZmNzaW0uYz0zMT1zdHJ1Y3QgbmZjc2ltIHtcXG5kcml2ZXJzL25mYy9uZmNzaW0uYzozMjpcXHRzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpuZmNfZGlnaXRhbF9kZXY7XFxuZHJpdmVycy9uZmMvbmZjc2ltLmMtMzMtXFxuLS1cXG5kcml2ZXJzL25mYy9uZmNzaW0uYy00NS1cXG5kcml2ZXJzL25mYy9uZmNzaW0uYzo0NjpcXHRuZmNfZGlnaXRhbF9jbWRfY29tcGxldGVfdCBjYjtcXG5kcml2ZXJzL25mYy9uZmNzaW0uYy00Ny1cXHR2b2lkICphcmc7XFxuLS1cXG5kcml2ZXJzL25mYy9uZmNzaW0uYz0xODI9c3RhdGljIHZvaWQgbmZjc2ltX3JlY3Zfd3Eoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9uZmMvbmZjc2ltLmMtMTk3LVxcbmRyaXZlcnMvbmZjL25mY3NpbS5jOjE5ODpcXHRkZXYtXFx1MDAzZWNiKGRldi1cXHUwMDNlbmZjX2RpZ2l0YWxfZGV2LCBkZXYtXFx1MDAzZWFyZywgc2tiKTtcXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0xOTktfVxcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTIwMC1cXG5kcml2ZXJzL25mYy9uZmNzaW0uYzoyMDE6c3RhdGljIGludCBuZmNzaW1fc2VuZChzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbmZjL25mY3NpbS5jOjIwMjpcXHRcXHQgICAgICAgdTE2IHRpbWVvdXQsIG5mY19kaWdpdGFsX2NtZF9jb21wbGV0ZV90IGNiLCB2b2lkICphcmcpXFxuZHJpdmVycy9uZmMvbmZjc2ltLmMtMjAzLXtcXG5kcml2ZXJzL25mYy9uZmNzaW0uYzoyMDQ6XFx0c3RydWN0IG5mY3NpbSAqZGV2ID0gbmZjX2RpZ2l0YWxfZ2V0X2RydmRhdGEoZGRldik7XFxuZHJpdmVycy9uZmMvbmZjc2ltLmMtMjA1LVxcdHU4IGRlbGF5O1xcbi0tXFxuZHJpdmVycy9uZmMvbmZjc2ltLmMtMjM5LVxcbmRyaXZlcnMvbmZjL25mY3NpbS5jOjI0MDpzdGF0aWMgdm9pZCBuZmNzaW1fYWJvcnRfY21kKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYpXFxuZHJpdmVycy9uZmMvbmZjc2ltLmMtMjQxLXtcXG5kcml2ZXJzL25mYy9uZmNzaW0uYzoyNDI6XFx0Y29uc3Qgc3RydWN0IG5mY3NpbSAqZGV2ID0gbmZjX2RpZ2l0YWxfZ2V0X2RydmRhdGEoZGRldik7XFxuZHJpdmVycy9uZmMvbmZjc2ltLmMtMjQzLVxcbi0tXFxuZHJpdmVycy9uZmMvbmZjc2ltLmMtMjQ2LVxcbmRyaXZlcnMvbmZjL25mY3NpbS5jOjI0NzpzdGF0aWMgaW50IG5mY3NpbV9zd2l0Y2hfcmYoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgYm9vbCBvbilcXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0yNDgte1xcbmRyaXZlcnMvbmZjL25mY3NpbS5jOjI0OTpcXHRzdHJ1Y3QgbmZjc2ltICpkZXYgPSBuZmNfZGlnaXRhbF9nZXRfZHJ2ZGF0YShkZGV2KTtcXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0yNTAtXFxuLS1cXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0yNTUtXFxuZHJpdmVycy9uZmMvbmZjc2ltLmM6MjU2OnN0YXRpYyBpbnQgbmZjc2ltX2luX2NvbmZpZ3VyZV9odyhzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTI1Ny1cXHRcXHRcXHRcXHRcXHQgIGludCB0eXBlLCBpbnQgcGFyYW0pXFxuZHJpdmVycy9uZmMvbmZjc2ltLmMtMjU4LXtcXG5kcml2ZXJzL25mYy9uZmNzaW0uYzoyNTk6XFx0c3RydWN0IG5mY3NpbSAqZGV2ID0gbmZjX2RpZ2l0YWxfZ2V0X2RydmRhdGEoZGRldik7XFxuZHJpdmVycy9uZmMvbmZjc2ltLmMtMjYwLVxcbi0tXFxuZHJpdmVycy9uZmMvbmZjc2ltLmMtMjc4LVxcbmRyaXZlcnMvbmZjL25mY3NpbS5jOjI3OTpzdGF0aWMgaW50IG5mY3NpbV9pbl9zZW5kX2NtZChzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTI4MC1cXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IHRpbWVvdXQsXFxuZHJpdmVycy9uZmMvbmZjc2ltLmM6MjgxOlxcdFxcdFxcdCAgICAgICBuZmNfZGlnaXRhbF9jbWRfY29tcGxldGVfdCBjYiwgdm9pZCAqYXJnKVxcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTI4Mi17XFxuLS1cXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0yODUtXFxuZHJpdmVycy9uZmMvbmZjc2ltLmM6Mjg2OnN0YXRpYyBpbnQgbmZjc2ltX3RnX2NvbmZpZ3VyZV9odyhzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTI4Ny1cXHRcXHRcXHRcXHRcXHQgIGludCB0eXBlLCBpbnQgcGFyYW0pXFxuZHJpdmVycy9uZmMvbmZjc2ltLmMtMjg4LXtcXG5kcml2ZXJzL25mYy9uZmNzaW0uYzoyODk6XFx0c3RydWN0IG5mY3NpbSAqZGV2ID0gbmZjX2RpZ2l0YWxfZ2V0X2RydmRhdGEoZGRldik7XFxuZHJpdmVycy9uZmMvbmZjc2ltLmMtMjkwLVxcbi0tXFxuZHJpdmVycy9uZmMvbmZjc2ltLmMtMzA4LVxcbmRyaXZlcnMvbmZjL25mY3NpbS5jOjMwOTpzdGF0aWMgaW50IG5mY3NpbV90Z19zZW5kX2NtZChzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTMxMC1cXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IHRpbWVvdXQsXFxuZHJpdmVycy9uZmMvbmZjc2ltLmM6MzExOlxcdFxcdFxcdCAgICAgICBuZmNfZGlnaXRhbF9jbWRfY29tcGxldGVfdCBjYiwgdm9pZCAqYXJnKVxcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTMxMi17XFxuLS1cXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0zMTUtXFxuZHJpdmVycy9uZmMvbmZjc2ltLmM6MzE2OnN0YXRpYyBpbnQgbmZjc2ltX3RnX2xpc3RlbihzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCB1MTYgdGltZW91dCxcXG5kcml2ZXJzL25mYy9uZmNzaW0uYzozMTc6XFx0XFx0XFx0ICAgIG5mY19kaWdpdGFsX2NtZF9jb21wbGV0ZV90IGNiLCB2b2lkICphcmcpXFxuZHJpdmVycy9uZmMvbmZjc2ltLmMtMzE4LXtcXG4tLVxcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTMyMS1cXG5kcml2ZXJzL25mYy9uZmNzaW0uYzozMjI6c3RhdGljIGNvbnN0IHN0cnVjdCBuZmNfZGlnaXRhbF9vcHMgbmZjc2ltX2RpZ2l0YWxfb3BzID0ge1xcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTMyMy1cXHQuaW5fY29uZmlndXJlX2h3ID0gbmZjc2ltX2luX2NvbmZpZ3VyZV9odyxcXG4tLVxcbmRyaXZlcnMvbmZjL25mY3NpbS5jPTM0Nj1zdGF0aWMgdm9pZCBuZmNzaW1fZGVidWdmc19pbml0X2RldihzdHJ1Y3QgbmZjc2ltICpkZXYpXFxuLS1cXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0zNTctXFxuZHJpdmVycy9uZmMvbmZjc2ltLmM6MzU4OlxcdGlkeCA9IGRldi1cXHUwMDNlbmZjX2RpZ2l0YWxfZGV2LVxcdTAwM2VuZmNfZGV2LVxcdTAwM2VpZHg7XFxuZHJpdmVycy9uZmMvbmZjc2ltLmMtMzU5LVxcdG4gPSBzbnByaW50ZihkZXZuYW1lLCBzaXplb2YoZGV2bmFtZSksIFxcXCJuZmMlZFxcXCIsIGlkeCk7XFxuLS1cXG5kcml2ZXJzL25mYy9uZmNzaW0uYz0zNzA9c3RhdGljIHN0cnVjdCBuZmNzaW0gKm5mY3NpbV9kZXZpY2VfbmV3KHN0cnVjdCBuZmNzaW1fbGluayAqbGlua19pbixcXG4tLVxcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTM4Mi1cXG5kcml2ZXJzL25mYy9uZmNzaW0uYzozODM6XFx0ZGV2LVxcdTAwM2VuZmNfZGlnaXRhbF9kZXYgPVxcbmRyaXZlcnMvbmZjL25mY3NpbS5jOjM4NDpcXHRcXHRcXHRuZmNfZGlnaXRhbF9hbGxvY2F0ZV9kZXZpY2UoXFx1MDAyNm5mY3NpbV9kaWdpdGFsX29wcyxcXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0zODUtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIE5GQ19QUk9UT19ORkNfREVQX01BU0ssXFxuLS1cXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0zODctXFx0XFx0XFx0XFx0XFx0XFx0ICAgIDAsIDApO1xcbmRyaXZlcnMvbmZjL25mY3NpbS5jOjM4ODpcXHRpZiAoIWRldi1cXHUwMDNlbmZjX2RpZ2l0YWxfZGV2KSB7XFxuZHJpdmVycy9uZmMvbmZjc2ltLmMtMzg5LVxcdFxcdGtmcmVlKGRldik7XFxuLS1cXG5kcml2ZXJzL25mYy9uZmNzaW0uYy0zOTItXFxuZHJpdmVycy9uZmMvbmZjc2ltLmM6MzkzOlxcdG5mY19kaWdpdGFsX3NldF9kcnZkYXRhKGRldi1cXHUwMDNlbmZjX2RpZ2l0YWxfZGV2LCBkZXYpO1xcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTM5NC1cXG4tLVxcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTM5Ny1cXG5kcml2ZXJzL25mYy9uZmNzaW0uYzozOTg6XFx0cmMgPSBuZmNfZGlnaXRhbF9yZWdpc3Rlcl9kZXZpY2UoZGV2LVxcdTAwM2VuZmNfZGlnaXRhbF9kZXYpO1xcbmRyaXZlcnMvbmZjL25mY3NpbS5jLTM5OS1cXHRpZiAocmMpIHtcXG5kcml2ZXJzL25mYy9uZmNzaW0uYy00MDAtXFx0XFx0cHJfZXJyKFxcXCJDb3VsZCBub3QgcmVnaXN0ZXIgZGlnaXRhbCBkZXZpY2UgKCVkKVxcXFxuXFxcIiwgcmMpO1xcbmRyaXZlcnMvbmZjL25mY3NpbS5jOjQwMTpcXHRcXHRuZmNfZGlnaXRhbF9mcmVlX2RldmljZShkZXYtXFx1MDAzZW5mY19kaWdpdGFsX2Rldik7XFxuZHJpdmVycy9uZmMvbmZjc2ltLmMtNDAyLVxcdFxcdGtmcmVlKGRldik7XFxuLS1cXG5kcml2ZXJzL25mYy9uZmNzaW0uYz00MTI9c3RhdGljIHZvaWQgbmZjc2ltX2RldmljZV9mcmVlKHN0cnVjdCBuZmNzaW0gKmRldilcXG5kcml2ZXJzL25mYy9uZmNzaW0uYy00MTMte1xcbmRyaXZlcnMvbmZjL25mY3NpbS5jOjQxNDpcXHRuZmNfZGlnaXRhbF91bnJlZ2lzdGVyX2RldmljZShkZXYtXFx1MDAzZW5mY19kaWdpdGFsX2Rldik7XFxuZHJpdmVycy9uZmMvbmZjc2ltLmMtNDE1LVxcbi0tXFxuZHJpdmVycy9uZmMvbmZjc2ltLmMtNDIyLVxcbmRyaXZlcnMvbmZjL25mY3NpbS5jOjQyMzpcXHRuZmNfZGlnaXRhbF9mcmVlX2RldmljZShkZXYtXFx1MDAzZW5mY19kaWdpdGFsX2Rldik7XFxuZHJpdmVycy9uZmMvbmZjc2ltLmMtNDI0LVxcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jPTIyMT1pbl9wcm90b2NvbHNbXVtQT1JUMTAwX0lOX01BWF9OVU1fUFJPVE9DT0xTICsgMV0gPSB7XFxuLS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMjg4LVxcdFtORkNfRElHSVRBTF9GUkFNSU5HX05GQ0FfVDFUXSA9IHtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6Mjg5OlxcdFxcdC8qIG5mY19kaWdpdGFsX2ZyYW1pbmdfbmZjYV9zaG9ydCAqL1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0yOTAtXFx0XFx0eyBQT1JUMTAwX0lOX1BST1RfQUREX0NSQywgICAgICAgICAgMiB9LFxcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTI5Ni1cXHRbTkZDX0RJR0lUQUxfRlJBTUlOR19ORkNBX1QyVF0gPSB7XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjI5NzpcXHRcXHQvKiBuZmNfZGlnaXRhbF9mcmFtaW5nX25mY2Ffc3RhbmRhcmQgKi9cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMjk4LVxcdFxcdHsgUE9SVDEwMF9JTl9QUk9UX0FERF9DUkMsICAgMSB9LFxcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTMwMi1cXHRbTkZDX0RJR0lUQUxfRlJBTUlOR19ORkNBX1Q0VF0gPSB7XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjMwMzpcXHRcXHQvKiBuZmNfZGlnaXRhbF9mcmFtaW5nX25mY2Ffc3RhbmRhcmRfd2l0aF9jcmNfYSAqL1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0zMDQtXFx0XFx0eyBQT1JUMTAwX0lOX1BST1RfRU5ELCAgICAgICAwIH0sXFxuLS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMzA2LVxcdFtORkNfRElHSVRBTF9GUkFNSU5HX05GQ0FfTkZDX0RFUF0gPSB7XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjMwNzpcXHRcXHQvKiBuZmNfZGlnaXRhbF9mcmFtaW5nX25mY2Ffc3RhbmRhcmQgKi9cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMzA4LVxcdFxcdHsgUE9SVDEwMF9JTl9QUk9UX0VORCwgMCB9LFxcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTMzMi1cXHRbTkZDX0RJR0lUQUxfRlJBTUlOR19ORkNGX1QzVF0gPSB7XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjMzMzpcXHRcXHQvKiBuZmNfZGlnaXRhbF9mcmFtaW5nX25mY2YgKi9cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMzM0LVxcdFxcdHsgUE9SVDEwMF9JTl9QUk9UX0VORCwgMCB9LFxcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTMzNi1cXHRbTkZDX0RJR0lUQUxfRlJBTUlOR19ORkNGX05GQ19ERVBdID0ge1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzozMzc6XFx0XFx0LyogbmZjX2RpZ2l0YWxfZnJhbWluZ19uZmNmICovXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTMzOC1cXHRcXHR7IFBPUlQxMDBfSU5fUFJPVF9JTklUSUFMX0dVQVJEX1RJTUUsICAgICAxOCB9LFxcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTM4NC1cXHRbTkZDX0RJR0lUQUxfRlJBTUlOR19ORkNCX1Q0VF0gPSB7XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjM4NTpcXHRcXHQvKiBuZmNfZGlnaXRhbF9mcmFtaW5nX25mY2IgKi9cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMzg2LVxcdFxcdHsgUE9SVDEwMF9JTl9QUk9UX0VORCwgICAgICAgICAgICAgICAgICAgICAwIH0sXFxuLS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM9NDM5PXN0cnVjdCBwb3J0MTAwIHtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6NDQwOlxcdHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKm5mY19kaWdpdGFsX2RldjtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNDQxLVxcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jPTQ5Nj1zdHJ1Y3QgcG9ydDEwMF9jYl9hcmcge1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo0OTc6XFx0bmZjX2RpZ2l0YWxfY21kX2NvbXBsZXRlX3QgY29tcGxldGVfY2I7XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTQ5OC1cXHR2b2lkICpjb21wbGV0ZV9hcmc7XFxuLS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM9OTMxPXN0YXRpYyB2b2lkIHBvcnQxMDBfc2VuZF9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXFxuLS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtOTU0LVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo5NTU6c3RhdGljIHZvaWQgcG9ydDEwMF9hYm9ydF9jbWQoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldilcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtOTU2LXtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6OTU3OlxcdHN0cnVjdCBwb3J0MTAwICpkZXYgPSBuZmNfZGlnaXRhbF9nZXRfZHJ2ZGF0YShkZGV2KTtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtOTU4LVxcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jPTEwMjU9c3RhdGljIHUxNiBwb3J0MTAwX2dldF9maXJtd2FyZV92ZXJzaW9uKHN0cnVjdCBwb3J0MTAwICpkZXYpXFxuLS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTA0Ni1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTA0NzpzdGF0aWMgaW50IHBvcnQxMDBfc3dpdGNoX3JmKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIGJvb2wgb24pXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEwNDgte1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMDQ5OlxcdHN0cnVjdCBwb3J0MTAwICpkZXYgPSBuZmNfZGlnaXRhbF9nZXRfZHJ2ZGF0YShkZGV2KTtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTA1MC1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqcmVzcDtcXG4tLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMDcxLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMDcyOnN0YXRpYyBpbnQgcG9ydDEwMF9pbl9zZXRfcmYoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdTggcmYpXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEwNzMte1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMDc0OlxcdHN0cnVjdCBwb3J0MTAwICpkZXYgPSBuZmNfZGlnaXRhbF9nZXRfZHJ2ZGF0YShkZGV2KTtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTA3NS1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTExMDAtXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjExMDE6c3RhdGljIGludCBwb3J0MTAwX2luX3NldF9mcmFtaW5nKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIGludCBwYXJhbSlcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTEwMi17XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjExMDM6XFx0c3RydWN0IHBvcnQxMDAgKmRldiA9IG5mY19kaWdpdGFsX2dldF9kcnZkYXRhKGRkZXYpO1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMTA0LVxcdGNvbnN0IHN0cnVjdCBwb3J0MTAwX3Byb3RvY29sICpwcm90b2NvbHM7XFxuLS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTE0Mi1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTE0MzpzdGF0aWMgaW50IHBvcnQxMDBfaW5fY29uZmlndXJlX2h3KHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIGludCB0eXBlLFxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMTQ0LVxcdFxcdFxcdFxcdCAgIGludCBwYXJhbSlcXG4tLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYz0xMTU1PXN0YXRpYyB2b2lkIHBvcnQxMDBfaW5fY29tbV9yZl9jb21wbGV0ZShzdHJ1Y3QgcG9ydDEwMCAqZGV2LCB2b2lkICphcmcsXFxuLS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTE1OC1cXHRjb25zdCBzdHJ1Y3QgcG9ydDEwMF9jYl9hcmcgKmNiX2FyZyA9IGFyZztcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTE1OTpcXHRuZmNfZGlnaXRhbF9jbWRfY29tcGxldGVfdCBjYiA9IGNiX2FyZy1cXHUwMDNlY29tcGxldGVfY2I7XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTExNjAtXFx0dTMyIHN0YXR1cztcXG4tLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMjAwLWV4aXQ6XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjEyMDE6XFx0Y2IoZGV2LVxcdTAwM2VuZmNfZGlnaXRhbF9kZXYsIGNiX2FyZy1cXHUwMDNlY29tcGxldGVfYXJnLCByZXNwKTtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTIwMi1cXG4tLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMjA1LVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMjA2OnN0YXRpYyBpbnQgcG9ydDEwMF9pbl9zZW5kX2NtZChzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMjA3LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgX3RpbWVvdXQsXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjEyMDg6XFx0XFx0XFx0ICAgICAgIG5mY19kaWdpdGFsX2NtZF9jb21wbGV0ZV90IGNiLCB2b2lkICphcmcpXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEyMDkte1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMjEwOlxcdHN0cnVjdCBwb3J0MTAwICpkZXYgPSBuZmNfZGlnaXRhbF9nZXRfZHJ2ZGF0YShkZGV2KTtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTIxMS1cXHRzdHJ1Y3QgcG9ydDEwMF9jYl9hcmcgKmNiX2FyZztcXG4tLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMjI4LVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMjI5OnN0YXRpYyBpbnQgcG9ydDEwMF90Z19zZXRfcmYoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdTggcmYpXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEyMzAte1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMjMxOlxcdHN0cnVjdCBwb3J0MTAwICpkZXYgPSBuZmNfZGlnaXRhbF9nZXRfZHJ2ZGF0YShkZGV2KTtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTIzMi1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEyNTctXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjEyNTg6c3RhdGljIGludCBwb3J0MTAwX3RnX3NldF9mcmFtaW5nKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIGludCBwYXJhbSlcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTI1OS17XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjEyNjA6XFx0c3RydWN0IHBvcnQxMDAgKmRldiA9IG5mY19kaWdpdGFsX2dldF9kcnZkYXRhKGRkZXYpO1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMjYxLVxcdGNvbnN0IHN0cnVjdCBwb3J0MTAwX3Byb3RvY29sICpwcm90b2NvbHM7XFxuLS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTI5OS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTMwMDpzdGF0aWMgaW50IHBvcnQxMDBfdGdfY29uZmlndXJlX2h3KHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIGludCB0eXBlLFxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMzAxLVxcdFxcdFxcdFxcdCAgIGludCBwYXJhbSlcXG4tLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYz0xMzMyPXN0YXRpYyB2b2lkIHBvcnQxMDBfdGdfY29tbV9yZl9jb21wbGV0ZShzdHJ1Y3QgcG9ydDEwMCAqZGV2LCB2b2lkICphcmcsXFxuLS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTMzNi1cXHRjb25zdCBzdHJ1Y3QgcG9ydDEwMF9jYl9hcmcgKmNiX2FyZyA9IGFyZztcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTMzNzpcXHRuZmNfZGlnaXRhbF9jbWRfY29tcGxldGVfdCBjYiA9IGNiX2FyZy1cXHUwMDNlY29tcGxldGVfY2I7XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEzMzgtXFx0c3RydWN0IHBvcnQxMDBfdGdfY29tbV9yZl9yZXMgKmhkcjtcXG4tLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMzY2LWV4aXQ6XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjEzNjc6XFx0Y2IoZGV2LVxcdTAwM2VuZmNfZGlnaXRhbF9kZXYsIGNiX2FyZy1cXHUwMDNlY29tcGxldGVfYXJnLCByZXNwKTtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTM2OC1cXG4tLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMzcxLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMzcyOnN0YXRpYyBpbnQgcG9ydDEwMF90Z19zZW5kX2NtZChzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMzczLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgdGltZW91dCxcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTM3NDpcXHRcXHRcXHQgICAgICAgbmZjX2RpZ2l0YWxfY21kX2NvbXBsZXRlX3QgY2IsIHZvaWQgKmFyZylcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTM3NS17XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjEzNzY6XFx0c3RydWN0IHBvcnQxMDAgKmRldiA9IG5mY19kaWdpdGFsX2dldF9kcnZkYXRhKGRkZXYpO1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMzc3LVxcdHN0cnVjdCBwb3J0MTAwX3RnX2NvbW1fcmZfY21kICpoZHI7XFxuLS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTM5OS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTQwMDpzdGF0aWMgaW50IHBvcnQxMDBfbGlzdGVuX21kYWEoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTQwMS1cXHRcXHRcXHQgICAgICAgc3RydWN0IGRpZ2l0YWxfdGdfbWRhYV9wYXJhbXMgKnBhcmFtcyxcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTQwMi1cXHRcXHRcXHQgICAgICAgdTE2IHRpbWVvdXQsXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjE0MDM6XFx0XFx0XFx0ICAgICAgIG5mY19kaWdpdGFsX2NtZF9jb21wbGV0ZV90IGNiLCB2b2lkICphcmcpXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTE0MDQte1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxNDA1OlxcdHN0cnVjdCBwb3J0MTAwICpkZXYgPSBuZmNfZGlnaXRhbF9nZXRfZHJ2ZGF0YShkZGV2KTtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTQwNi1cXHRzdHJ1Y3QgcG9ydDEwMF90Z19jb21tX3JmX2NtZCAqaGRyO1xcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTE0NTUtXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjE0NTY6c3RhdGljIGludCBwb3J0MTAwX2xpc3RlbihzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCB1MTYgdGltZW91dCxcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTQ1NzpcXHRcXHRcXHQgIG5mY19kaWdpdGFsX2NtZF9jb21wbGV0ZV90IGNiLCB2b2lkICphcmcpXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTE0NTgte1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxNDU5OlxcdGNvbnN0IHN0cnVjdCBwb3J0MTAwICpkZXYgPSBuZmNfZGlnaXRhbF9nZXRfZHJ2ZGF0YShkZGV2KTtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTQ2MC1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTE0NjgtXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjE0Njk6c3RhdGljIGNvbnN0IHN0cnVjdCBuZmNfZGlnaXRhbF9vcHMgcG9ydDEwMF9kaWdpdGFsX29wcyA9IHtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTQ3MC1cXHQuaW5fY29uZmlndXJlX2h3ID0gcG9ydDEwMF9pbl9jb25maWd1cmVfaHcsXFxuLS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM9MTQ4OT1zdGF0aWMgaW50IHBvcnQxMDBfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSxcXG4tLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xNTcxLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxNTcyOlxcdGRldi1cXHUwMDNlbmZjX2RpZ2l0YWxfZGV2ID0gbmZjX2RpZ2l0YWxfYWxsb2NhdGVfZGV2aWNlKFxcdTAwMjZwb3J0MTAwX2RpZ2l0YWxfb3BzLFxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xNTczLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIFBPUlQxMDBfUFJPVE9DT0xTLFxcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTE1NzYtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgZGV2LVxcdTAwM2Vza2JfdGFpbHJvb20pO1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxNTc3OlxcdGlmICghZGV2LVxcdTAwM2VuZmNfZGlnaXRhbF9kZXYpIHtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTU3OC1cXHRcXHRuZmNfZXJyKFxcdTAwMjZpbnRlcmZhY2UtXFx1MDAzZWRldixcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTU3OTpcXHRcXHRcXHRcXFwiQ291bGQgbm90IGFsbG9jYXRlIG5mY19kaWdpdGFsX2RldlxcXFxuXFxcIik7XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTE1ODAtXFx0XFx0cmMgPSAtRU5PTUVNO1xcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTE1ODMtXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjE1ODQ6XFx0bmZjX2RpZ2l0YWxfc2V0X3BhcmVudF9kZXYoZGV2LVxcdTAwM2VuZmNfZGlnaXRhbF9kZXYsIFxcdTAwMjZpbnRlcmZhY2UtXFx1MDAzZWRldik7XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjE1ODU6XFx0bmZjX2RpZ2l0YWxfc2V0X2RydmRhdGEoZGV2LVxcdTAwM2VuZmNfZGlnaXRhbF9kZXYsIGRldik7XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTE1ODYtXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjE1ODc6XFx0cmMgPSBuZmNfZGlnaXRhbF9yZWdpc3Rlcl9kZXZpY2UoZGV2LVxcdTAwM2VuZmNfZGlnaXRhbF9kZXYpO1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xNTg4LVxcdGlmIChyYykge1xcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTE1OTYtZnJlZV9uZmNfZGV2OlxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxNTk3OlxcdG5mY19kaWdpdGFsX2ZyZWVfZGV2aWNlKGRldi1cXHUwMDNlbmZjX2RpZ2l0YWxfZGV2KTtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTU5OC1cXG4tLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYz0xNjA4PXN0YXRpYyB2b2lkIHBvcnQxMDBfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKVxcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTE2MTQtXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjE2MTU6XFx0bmZjX2RpZ2l0YWxfdW5yZWdpc3Rlcl9kZXZpY2UoZGV2LVxcdTAwM2VuZmNfZGlnaXRhbF9kZXYpO1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxNjE2OlxcdG5mY19kaWdpdGFsX2ZyZWVfZGV2aWNlKGRldi1cXHUwMDNlbmZjX2RpZ2l0YWxfZGV2KTtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTYxNy1cXG4tLVxcbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmM9MTg1PXN0cnVjdCBzdDk1X2RpZ2l0YWxfY21kX2NvbXBsZXRlX2FyZyB7XFxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYy0xODYtXFx0c3RydWN0IHNrX2J1ZmYgKnNrYl9yZXNwO1xcbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmM6MTg3OlxcdG5mY19kaWdpdGFsX2NtZF9jb21wbGV0ZV90IGNvbXBsZXRlX2NiO1xcbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmMtMTg4LVxcdHZvaWQgKmNiX3VzcmFyZztcXG4tLVxcbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmM9MjE3PXN0cnVjdCBzdDk1aGZfY29udGV4dCB7XFxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYy0yMTgtXFx0c3RydWN0IHN0OTVoZl9zcGlfY29udGV4dCBzcGljb250ZXh0O1xcbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmM6MjE5OlxcdHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXY7XFxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYy0yMjAtXFx0c3RydWN0IG5mY19kZXYgKm5mY2RldjtcXG4tLVxcbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmM9NTMxPXN0YXRpYyBpbnQgaXNvMTQ0NDNfY29uZmlnX2ZkdChzdHJ1Y3Qgc3Q5NWhmX2NvbnRleHQgKnN0OTVjb250ZXh0LCBpbnQgd3R4bSlcXG4tLVxcbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmMtNTM0LVxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZzdDk1Y29udGV4dC1cXHUwMDNlc3BpY29udGV4dC5zcGlkZXYtXFx1MDAzZWRldjtcXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jOjUzNTpcXHRzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpuZmNkZGV2ID0gc3Q5NWNvbnRleHQtXFx1MDAzZWRkZXY7XFxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYy01MzYtXFx0dW5zaWduZWQgY2hhciBwcF90eXBlYjtcXG4tLVxcbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmM9NjAyPXN0YXRpYyBpbnQgc3Q5NWhmX2hhbmRsZV93dHgoc3RydWN0IHN0OTVoZl9jb250ZXh0ICpzdGNvbnRleHQsXFxuLS1cXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jLTYwOC1cXHRzdHJ1Y3QgcGFyYW1fbGlzdCBuZXdfcGFyYW1zWzFdO1xcbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmM6NjA5OlxcdHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKm5mY2RkZXYgPSBzdGNvbnRleHQtXFx1MDAzZWRkZXY7XFxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYy02MTAtXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnN0Y29udGV4dC1cXHUwMDNlbmZjZGV2LVxcdTAwM2VkZXY7XFxuLS1cXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jPTY5Mz1zdGF0aWMgaW50IHN0OTVoZl9yZXNwb25zZV9oYW5kbGVyKHN0cnVjdCBzdDk1aGZfY29udGV4dCAqc3Rjb250ZXh0LFxcbi0tXFxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYy02OTktXFx0dW5zaWduZWQgY2hhciB2YWxfbW07XFxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYzo3MDA6XFx0c3RydWN0IG5mY19kaWdpdGFsX2RldiAqbmZjZGRldiA9IHN0Y29udGV4dC1cXHUwMDNlZGRldjtcXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jLTcwMS1cXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2c3Rjb250ZXh0LVxcdTAwM2VuZmNkZXYtXFx1MDAzZWRldjtcXG4tLVxcbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmM9NzY2PXN0YXRpYyBpcnFyZXR1cm5fdCBzdDk1aGZfaXJxX3RocmVhZF9oYW5kbGVyKGludCBpcnEsIHZvaWQgICpzdDk1aGZjb250ZXh0KVxcbi0tXFxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYy04NjgtLyogTkZDIG9wcyBmdW5jdGlvbnMgZGVmaW5pdGlvbiAqL1xcbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmM6ODY5OnN0YXRpYyBpbnQgc3Q5NWhmX2luX2NvbmZpZ3VyZV9odyhzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxcbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmMtODcwLVxcdFxcdFxcdFxcdCAgaW50IHR5cGUsXFxuLS1cXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jLTg3Mi17XFxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYzo4NzM6XFx0c3RydWN0IHN0OTVoZl9jb250ZXh0ICpzdGNvbnRleHQgPSBuZmNfZGlnaXRhbF9nZXRfZHJ2ZGF0YShkZGV2KTtcXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jLTg3NC1cXG4tLVxcbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmM9OTAxPXN0YXRpYyBpbnQgcmZfb2ZmKHN0cnVjdCBzdDk1aGZfY29udGV4dCAqc3Rjb250ZXh0KVxcbi0tXFxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYy05MTQtXFxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYzo5MTU6c3RhdGljIGludCBzdDk1aGZfaW5fc2VuZF9jbWQoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jLTkxNi1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmMtOTE3LVxcdFxcdFxcdCAgICAgIHUxNiB0aW1lb3V0LFxcbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmM6OTE4OlxcdFxcdFxcdCAgICAgIG5mY19kaWdpdGFsX2NtZF9jb21wbGV0ZV90IGNiLFxcbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmMtOTE5LVxcdFxcdFxcdCAgICAgIHZvaWQgKmFyZylcXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jLTkyMC17XFxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYzo5MjE6XFx0c3RydWN0IHN0OTVoZl9jb250ZXh0ICpzdGNvbnRleHQgPSBuZmNfZGlnaXRhbF9nZXRfZHJ2ZGF0YShkZGV2KTtcXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jLTkyMi1cXHRpbnQgcmM7XFxuLS1cXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jLTk4OC0vKiBwMnAgd2lsbCBiZSBzdXBwb3J0ZWQgaW4gYSBsYXRlciByZWxlYXNlICEgKi9cXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jOjk4OTpzdGF0aWMgaW50IHN0OTVoZl90Z19jb25maWd1cmVfaHcoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jLTk5MC1cXHRcXHRcXHRcXHQgIGludCB0eXBlLFxcbi0tXFxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYy05OTUtXFxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYzo5OTY6c3RhdGljIGludCBzdDk1aGZfdGdfc2VuZF9jbWQoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jLTk5Ny1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmMtOTk4LVxcdFxcdFxcdCAgICAgIHUxNiB0aW1lb3V0LFxcbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmM6OTk5OlxcdFxcdFxcdCAgICAgIG5mY19kaWdpdGFsX2NtZF9jb21wbGV0ZV90IGNiLFxcbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmMtMTAwMC1cXHRcXHRcXHQgICAgICB2b2lkICphcmcpXFxuLS1cXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jLTEwMDQtXFxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYzoxMDA1OnN0YXRpYyBpbnQgc3Q5NWhmX3RnX2xpc3RlbihzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxcbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmMtMTAwNi1cXHRcXHRcXHQgICAgdTE2IHRpbWVvdXQsXFxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYzoxMDA3OlxcdFxcdFxcdCAgICBuZmNfZGlnaXRhbF9jbWRfY29tcGxldGVfdCBjYixcXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jLTEwMDgtXFx0XFx0XFx0ICAgIHZvaWQgKmFyZylcXG4tLVxcbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmMtMTAxMi1cXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jOjEwMTM6c3RhdGljIGludCBzdDk1aGZfdGdfZ2V0X3JmX3RlY2goc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdTggKnJmX3RlY2gpXFxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYy0xMDE0LXtcXG4tLVxcbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmMtMTAxNy1cXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jOjEwMTg6c3RhdGljIGludCBzdDk1aGZfc3dpdGNoX3JmKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIGJvb2wgb24pXFxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYy0xMDE5LXtcXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jLTEwMjAtXFx0dTggcmZfdGVjaDtcXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jOjEwMjE6XFx0c3RydWN0IHN0OTVoZl9jb250ZXh0ICpzdGNvbnRleHQgPSBuZmNfZGlnaXRhbF9nZXRfZHJ2ZGF0YShkZGV2KTtcXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jLTEwMjItXFxuLS1cXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jLTEwMzMtLyogVE9ETyBzdDk1aGZfYWJvcnRfY21kICovXFxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYzoxMDM0OnN0YXRpYyB2b2lkIHN0OTVoZl9hYm9ydF9jbWQoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldilcXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jLTEwMzUte1xcbi0tXFxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYy0xMDM3LVxcbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmM6MTAzODpzdGF0aWMgY29uc3Qgc3RydWN0IG5mY19kaWdpdGFsX29wcyBzdDk1aGZfbmZjX2RpZ2l0YWxfb3BzID0ge1xcbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmMtMTAzOS1cXHQuaW5fY29uZmlndXJlX2h3ID0gc3Q5NWhmX2luX2NvbmZpZ3VyZV9odyxcXG4tLVxcbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmM9MTA2Mz1zdGF0aWMgaW50IHN0OTVoZl9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqbmZjX3NwaV9kZXYpXFxuLS1cXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jLTExNTktXFx0LyogY3JlYXRlIE5GQyBkZXYgb2JqZWN0IGFuZCByZWdpc3RlciB3aXRoIE5GQyBTdWJzeXN0ZW0gKi9cXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jOjExNjA6XFx0c3Q5NWNvbnRleHQtXFx1MDAzZWRkZXYgPSBuZmNfZGlnaXRhbF9hbGxvY2F0ZV9kZXZpY2UoXFx1MDAyNnN0OTVoZl9uZmNfZGlnaXRhbF9vcHMsXFxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYy0xMTYxLVxcdFxcdFxcdFxcdFxcdFxcdFxcdFNUOTVIRl9TVVBQT1JURURfUFJPVCxcXG4tLVxcbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmMtMTE3MC1cXHRzdDk1Y29udGV4dC1cXHUwMDNlbmZjZGV2ID0gc3Q5NWNvbnRleHQtXFx1MDAzZWRkZXYtXFx1MDAzZW5mY19kZXY7XFxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYzoxMTcxOlxcdG5mY19kaWdpdGFsX3NldF9wYXJlbnRfZGV2KHN0OTVjb250ZXh0LVxcdTAwM2VkZGV2LCBcXHUwMDI2bmZjX3NwaV9kZXYtXFx1MDAzZWRldik7XFxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYy0xMTcyLVxcbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmM6MTE3MzpcXHRyZXQgPSAgbmZjX2RpZ2l0YWxfcmVnaXN0ZXJfZGV2aWNlKHN0OTVjb250ZXh0LVxcdTAwM2VkZGV2KTtcXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jLTExNzQtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYy0xMTc5LVxcdC8qIHN0b3JlIHN0OTVjb250ZXh0IGluIG5mYyBkZXZpY2Ugb2JqZWN0ICovXFxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYzoxMTgwOlxcdG5mY19kaWdpdGFsX3NldF9kcnZkYXRhKHN0OTVjb250ZXh0LVxcdTAwM2VkZGV2LCBzdDk1Y29udGV4dCk7XFxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYy0xMTgxLVxcbi0tXFxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYy0xMTg3LWVycl9mcmVlX2RpZ2l0YWxfZGV2aWNlOlxcbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmM6MTE4ODpcXHRuZmNfZGlnaXRhbF9mcmVlX2RldmljZShzdDk1Y29udGV4dC1cXHUwMDNlZGRldik7XFxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYy0xMTg5LWVycl9kaXNhYmxlX3JlZ3VsYXRvcjpcXG4tLVxcbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmM9MTE5Nj1zdGF0aWMgdm9pZCBzdDk1aGZfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpuZmNfc3BpX2RldilcXG4tLVxcbmRyaXZlcnMvbmZjL3N0OTVoZi9jb3JlLmMtMTIwNy1cXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jOjEyMDg6XFx0bmZjX2RpZ2l0YWxfdW5yZWdpc3Rlcl9kZXZpY2Uoc3Rjb250ZXh0LVxcdTAwM2VkZGV2KTtcXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jOjEyMDk6XFx0bmZjX2RpZ2l0YWxfZnJlZV9kZXZpY2Uoc3Rjb250ZXh0LVxcdTAwM2VkZGV2KTtcXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jLTEyMTAtXFx0c3Rjb250ZXh0LVxcdTAwM2VuZmNkZXZfZnJlZSA9IHRydWU7XFxuLS1cXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jPTQzMD1zdHJ1Y3QgdHJmNzk3MGEge1xcbi0tXFxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYy00MzUtXFx0c3RydWN0IHJlZ3VsYXRvclxcdFxcdCp2ZGRpb19yZWd1bGF0b3I7XFxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYzo0MzY6XFx0c3RydWN0IG5mY19kaWdpdGFsX2RldlxcdFxcdCpkZGV2O1xcbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmMtNDM3LVxcdHUzMlxcdFxcdFxcdFxcdHF1aXJrcztcXG4tLVxcbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmMtNDQxLVxcdHN0cnVjdCBza19idWZmXFx0XFx0XFx0KnJ4X3NrYjtcXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jOjQ0MjpcXHRuZmNfZGlnaXRhbF9jbWRfY29tcGxldGVfdFxcdGNiO1xcbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmMtNDQzLVxcdHZvaWRcXHRcXHRcXHRcXHQqY2JfYXJnO1xcbi0tXFxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYz0xMTQ3PXN0YXRpYyBpbnQgdHJmNzk3MGFfc3dpdGNoX3JmX29uKHN0cnVjdCB0cmY3OTcwYSAqdHJmKVxcbi0tXFxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYy0xMTcxLVxcbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmM6MTE3MjpzdGF0aWMgaW50IHRyZjc5NzBhX3N3aXRjaF9yZihzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCBib29sIG9uKVxcbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmMtMTE3My17XFxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYzoxMTc0OlxcdHN0cnVjdCB0cmY3OTcwYSAqdHJmID0gbmZjX2RpZ2l0YWxfZ2V0X2RydmRhdGEoZGRldik7XFxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYy0xMTc1LVxcdGludCByZXQgPSAwO1xcbi0tXFxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYz0xMzEyPXN0YXRpYyBpbnQgdHJmNzk3MGFfaW5fY29uZmlnX2ZyYW1pbmcoc3RydWN0IHRyZjc5NzBhICp0cmYsIGludCBmcmFtaW5nKVxcbi0tXFxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYy0xMzg2LVxcbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmM6MTM4NzpzdGF0aWMgaW50IHRyZjc5NzBhX2luX2NvbmZpZ3VyZV9odyhzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCBpbnQgdHlwZSxcXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jLTEzODgtXFx0XFx0XFx0XFx0ICAgIGludCBwYXJhbSlcXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jLTEzODkte1xcbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmM6MTM5MDpcXHRzdHJ1Y3QgdHJmNzk3MGEgKnRyZiA9IG5mY19kaWdpdGFsX2dldF9kcnZkYXRhKGRkZXYpO1xcbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmMtMTM5MS1cXHRpbnQgcmV0O1xcbi0tXFxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYz0xNDM5PXN0YXRpYyBpbnQgdHJmNzk3MGFfcGVyX2NtZF9jb25maWcoc3RydWN0IHRyZjc5NzBhICp0cmYsXFxuLS1cXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jLTE1MDctXFxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYzoxNTA4OnN0YXRpYyBpbnQgdHJmNzk3MGFfc2VuZF9jbWQoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jLTE1MDktXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgdGltZW91dCxcXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jOjE1MTA6XFx0XFx0XFx0ICAgICBuZmNfZGlnaXRhbF9jbWRfY29tcGxldGVfdCBjYiwgdm9pZCAqYXJnKVxcbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmMtMTUxMS17XFxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYzoxNTEyOlxcdHN0cnVjdCB0cmY3OTcwYSAqdHJmID0gbmZjX2RpZ2l0YWxfZ2V0X2RydmRhdGEoZGRldik7XFxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYy0xNTEzLVxcdHU4IHByZWZpeFs1XTtcXG4tLVxcbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmM9MTY3MD1zdGF0aWMgaW50IHRyZjc5NzBhX3RnX2NvbmZpZ19mcmFtaW5nKHN0cnVjdCB0cmY3OTcwYSAqdHJmLCBpbnQgZnJhbWluZylcXG4tLVxcbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmMtMTcyOC1cXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jOjE3Mjk6c3RhdGljIGludCB0cmY3OTcwYV90Z19jb25maWd1cmVfaHcoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgaW50IHR5cGUsXFxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYy0xNzMwLVxcdFxcdFxcdFxcdCAgICBpbnQgcGFyYW0pXFxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYy0xNzMxLXtcXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jOjE3MzI6XFx0c3RydWN0IHRyZjc5NzBhICp0cmYgPSBuZmNfZGlnaXRhbF9nZXRfZHJ2ZGF0YShkZGV2KTtcXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jLTE3MzMtXFx0aW50IHJldDtcXG4tLVxcbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmMtMTc2NC1cXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jOjE3NjU6c3RhdGljIGludCBfdHJmNzk3MGFfdGdfbGlzdGVuKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHUxNiB0aW1lb3V0LFxcbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmM6MTc2NjpcXHRcXHRcXHQgICAgICAgbmZjX2RpZ2l0YWxfY21kX2NvbXBsZXRlX3QgY2IsIHZvaWQgKmFyZyxcXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jLTE3NjctXFx0XFx0XFx0ICAgICAgIGJvb2wgbW9kZV9kZXRlY3QpXFxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYy0xNzY4LXtcXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jOjE3Njk6XFx0c3RydWN0IHRyZjc5NzBhICp0cmYgPSBuZmNfZGlnaXRhbF9nZXRfZHJ2ZGF0YShkZGV2KTtcXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jLTE3NzAtXFx0aW50IHJldDtcXG4tLVxcbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmMtMTg0My1cXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jOjE4NDQ6c3RhdGljIGludCB0cmY3OTcwYV90Z19saXN0ZW4oc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdTE2IHRpbWVvdXQsXFxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYzoxODQ1OlxcdFxcdFxcdCAgICAgIG5mY19kaWdpdGFsX2NtZF9jb21wbGV0ZV90IGNiLCB2b2lkICphcmcpXFxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYy0xODQ2LXtcXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jOjE4NDc6XFx0Y29uc3Qgc3RydWN0IHRyZjc5NzBhICp0cmYgPSBuZmNfZGlnaXRhbF9nZXRfZHJ2ZGF0YShkZGV2KTtcXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jLTE4NDgtXFxuLS1cXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jLTE4NTQtXFxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYzoxODU1OnN0YXRpYyBpbnQgdHJmNzk3MGFfdGdfbGlzdGVuX21kKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXFxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYzoxODU2OlxcdFxcdFxcdFxcdCB1MTYgdGltZW91dCwgbmZjX2RpZ2l0YWxfY21kX2NvbXBsZXRlX3QgY2IsXFxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYy0xODU3LVxcdFxcdFxcdFxcdCB2b2lkICphcmcpXFxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYy0xODU4LXtcXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jOjE4NTk6XFx0Y29uc3Qgc3RydWN0IHRyZjc5NzBhICp0cmYgPSBuZmNfZGlnaXRhbF9nZXRfZHJ2ZGF0YShkZGV2KTtcXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jLTE4NjAtXFx0aW50IHJldDtcXG4tLVxcbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmMtMTg3Ny1cXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jOjE4Nzg6c3RhdGljIGludCB0cmY3OTcwYV90Z19nZXRfcmZfdGVjaChzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCB1OCAqcmZfdGVjaClcXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jLTE4Nzkte1xcbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmM6MTg4MDpcXHRjb25zdCBzdHJ1Y3QgdHJmNzk3MGEgKnRyZiA9IG5mY19kaWdpdGFsX2dldF9kcnZkYXRhKGRkZXYpO1xcbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmMtMTg4MS1cXG4tLVxcbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmMtMTg4OS1cXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jOjE4OTA6c3RhdGljIHZvaWQgdHJmNzk3MGFfYWJvcnRfY21kKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYpXFxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYy0xODkxLXtcXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jOjE4OTI6XFx0c3RydWN0IHRyZjc5NzBhICp0cmYgPSBuZmNfZGlnaXRhbF9nZXRfZHJ2ZGF0YShkZGV2KTtcXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jLTE4OTMtXFxuLS1cXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jLTE5MTYtXFxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYzoxOTE3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZjX2RpZ2l0YWxfb3BzIHRyZjc5NzBhX25mY19vcHMgPSB7XFxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYy0xOTE4LVxcdC5pbl9jb25maWd1cmVfaHdcXHQ9IHRyZjc5NzBhX2luX2NvbmZpZ3VyZV9odyxcXG4tLVxcbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmM9MjA0NT1zdGF0aWMgaW50IHRyZjc5NzBhX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpXFxuLS1cXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jLTIxNzMtXFxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYzoyMTc0OlxcdHRyZi1cXHUwMDNlZGRldiA9IG5mY19kaWdpdGFsX2FsbG9jYXRlX2RldmljZShcXHUwMDI2dHJmNzk3MGFfbmZjX29wcyxcXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jLTIxNzUtXFx0XFx0XFx0XFx0XFx0XFx0VFJGNzk3MEFfU1VQUE9SVEVEX1BST1RPQ09MUyxcXG4tLVxcbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmMtMjE4NC1cXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jOjIxODU6XFx0bmZjX2RpZ2l0YWxfc2V0X3BhcmVudF9kZXYodHJmLVxcdTAwM2VkZGV2LCB0cmYtXFx1MDAzZWRldik7XFxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYzoyMTg2OlxcdG5mY19kaWdpdGFsX3NldF9kcnZkYXRhKHRyZi1cXHUwMDNlZGRldiwgdHJmKTtcXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jLTIxODctXFx0c3BpX3NldF9kcnZkYXRhKHNwaSwgdHJmKTtcXG4tLVxcbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmMtMjE5Ny1cXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jOjIxOTg6XFx0cmV0ID0gbmZjX2RpZ2l0YWxfcmVnaXN0ZXJfZGV2aWNlKHRyZi1cXHUwMDNlZGRldik7XFxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYy0yMTk5LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmMtMjIwOS1lcnJfZnJlZV9kZGV2OlxcbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmM6MjIxMDpcXHRuZmNfZGlnaXRhbF9mcmVlX2RldmljZSh0cmYtXFx1MDAzZWRkZXYpO1xcbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmMtMjIxMS1lcnJfZGlzYWJsZV92ZGRpb19yZWd1bGF0b3I6XFxuLS1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDA6MzYuNTAxMTg0OTQzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMwMzgwMTgwMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBORkMgRHJpdmVyIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIE5GQyBkcml2ZXIgc3BhY2UuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgZGlmZmVyZW50IHdheXMgd2UncmUgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgaGFyZHdhcmUuIFRoZXJlIGFyZSB0d28gaW1tZWRpYXRlIGRyaXZlcnMgdGhhdCBjYXRjaCBteSBleWU6IGBkcml2ZXJzL25mYy9uZmNzaW0uY2Agd2hpY2gsIGludGVyZXN0aW5nbHksIGlzIGEgKnNvZnR3YXJlKiBzaW11bGF0aW9uLCBzbyB0aGF0J3MgYSB3aG9sZSBkaWZmZXJlbnQgYXZlbnVlLCBsaWtlbHkgZm9yIHRlc3RpbmcgcHVycG9zZXMuIFRoZW4gdGhlcmUncyBgZHJpdmVycy9uZmMvcG9ydDEwMC5jYCwgd2hpY2ggaXMgYSBtb3JlICdyZWFsJyBkcml2ZXIgZm9yIGEgc3BlY2lmaWMgVVNCIGRvbmdsZSwgdGhlIFNvbnkgUkMtUzM4MCAvIFBlbGlDYSBVU0IuIEdpdmVuIHRoYXQgaXQncyBVU0IsIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gZXhwbG9pdGF0aW9uIHBvc3NpYmlsaXRpZXMgdmlhIFVTQiBSYXcsIFVTQiBnYWRnZXQsIHZoY2ksIGFuZCB0aGUgZXZlci1wcmVzZW50IHN5emthbGxlciBmdXp6aW5nLlxuXG5NeSBuZXh0IGxpbmUgb2YgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgVVNCIElEcyB3aXRoaW4gYHBvcnQxMDAuY2AgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2Ygc3VwcG9ydGVkIGRldmljZXMgYW5kLCBpbXBvcnRhbnRseSwgc2VlIGhvdyBzeXprYWxsZXIgaXMgaW50ZWdyYXRlZCBmb3IgTkZDIHRlc3RpbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBvdmVybGFwIGhlcmUuIERvZXMgc3l6a2FsbGVyIGV2ZW4gc3VwcG9ydCBORkMgZGlyZWN0bHk/IE1heWJlIHRoZXJlJ3MgYSBzeXpfdXNiX2Nvbm5lY3Qgb3Igc29tZSB1c2FnZSBvZiBORkMgbmV0bGluayBvciBzb2NrZXRzIGluIHRoZSBmdXp6aW5nIGhhcm5lc3Nlcy4gSXQncyBhIHF1aWNrIGxvb2sgdG8gYXNjZXJ0YWluIHdoZXRoZXIgYHBvcnQxMDAuY2AgaXMgZW11bGF0ZWQgdmlhIFVTQi4gSXQgc2VlbXMgSSB3aWxsIGhhdmUgdG8gbG9vayBpbnRvIHN5emthbGxlcidzIE5GQyBzdXBwb3J0IGFuZCBwb3J0MTAwIFVTQiBlbXVsYXRpb24gbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYxNjUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDA6MzkuNTM5MjA1NjUzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjY2ODI5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwb3J0MTAwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmZjXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNjQ0IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5kcml2ZXJzL25mYy9NYWtlZmlsZT0xMT1vYmotJChDT05GSUdfTkZDX1NJTSlcXHRcXHQrPSBuZmNzaW0ub1xcbmRyaXZlcnMvbmZjL01ha2VmaWxlOjEyOm9iai0kKENPTkZJR19ORkNfUE9SVDEwMClcXHQrPSBwb3J0MTAwLm9cXG5kcml2ZXJzL25mYy9NYWtlZmlsZS0xMy1vYmotJChDT05GSUdfTkZDX01SVkwpXFx0XFx0Kz0gbmZjbXJ2bC9cXG4tLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0yOC1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6Mjk6LyogU3RhbmRhcmQgcG9ydDEwMCBmcmFtZSBkZWZpbml0aW9ucyAqL1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzozMDojZGVmaW5lIFBPUlQxMDBfRlJBTUVfSEVBREVSX0xFTiAoc2l6ZW9mKHN0cnVjdCBwb3J0MTAwX2ZyYW1lKSBcXFxcXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTMxLVxcdFxcdFxcdFxcdCAgKyAyKSAvKiBkYXRhWzBdIENDLCBkYXRhWzFdIFNDQyAqL1xcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTMzLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzozNDojZGVmaW5lIFBPUlQxMDBfQ09NTV9SRl9IRUFEX01BWF9MRU4gKHNpemVvZihzdHJ1Y3QgcG9ydDEwMF90Z19jb21tX3JmX2NtZCkpXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTM1LVxcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jPTQ0PXN0YXRpYyB1OCBhY2tfZnJhbWVbUE9SVDEwMF9GUkFNRV9BQ0tfU0laRV0gPSB7XFxuLS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtOTEtXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjkyOnN0cnVjdCBwb3J0MTAwO1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy05My1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6OTQ6dHlwZWRlZiB2b2lkICgqcG9ydDEwMF9zZW5kX2FzeW5jX2NvbXBsZXRlX3QpKHN0cnVjdCBwb3J0MTAwICpkZXYsIHZvaWQgKmFyZyxcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtOTUtXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnJlc3ApO1xcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEwNS0gKi9cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTA2OnN0cnVjdCBwb3J0MTAwX2luX3JmX3NldHRpbmcge1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMDctXFx0dTggaW5fc2VuZF9zZXRfbnVtYmVyO1xcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTExNy1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTE4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcG9ydDEwMF9pbl9yZl9zZXR0aW5nIGluX3JmX3NldHRpbmdzW10gPSB7XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTExOS1cXHRbTkZDX0RJR0lUQUxfUkZfVEVDSF8yMTJGXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xNDctLyoqXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjE0ODogKiBzdHJ1Y3QgcG9ydDEwMF90Z19yZl9zZXR0aW5nIC0gU2V0dGluZyBzZXRzIHN0cnVjdHVyZSBmb3IgdGdfc2V0X3JmIGNvbW1hbmRcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTQ5LSAqXFxuLS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTU3LSAqL1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxNTg6c3RydWN0IHBvcnQxMDBfdGdfcmZfc2V0dGluZyB7XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTE1OS1cXHR1OCB0Z19zZXRfbnVtYmVyO1xcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTE2Ni1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTY3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcG9ydDEwMF90Z19yZl9zZXR0aW5nIHRnX3JmX3NldHRpbmdzW10gPSB7XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTE2OC1cXHRbTkZDX0RJR0lUQUxfUkZfVEVDSF8xMDZBXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0yMTQtXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjIxNTpzdHJ1Y3QgcG9ydDEwMF9wcm90b2NvbCB7XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTIxNi1cXHR1OCBudW1iZXI7XFxuLS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMjE5LVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoyMjA6c3RhdGljIGNvbnN0IHN0cnVjdCBwb3J0MTAwX3Byb3RvY29sXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTIyMS1pbl9wcm90b2NvbHNbXVtQT1JUMTAwX0lOX01BWF9OVU1fUFJPVE9DT0xTICsgMV0gPSB7XFxuLS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMzkzLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzozOTQ6c3RhdGljIGNvbnN0IHN0cnVjdCBwb3J0MTAwX3Byb3RvY29sXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTM5NS10Z19wcm90b2NvbHNbXVtQT1JUMTAwX1RHX01BWF9OVU1fUFJPVE9DT0xTICsgMV0gPSB7XFxuLS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNDM4LVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo0Mzk6c3RydWN0IHBvcnQxMDAge1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy00NDAtXFx0c3RydWN0IG5mY19kaWdpdGFsX2RldiAqbmZjX2RpZ2l0YWxfZGV2O1xcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTQ1MS1cXHQvKiBUaGlzIG11dGV4IHByb3RlY3RzIHRoZSBvdXRfdXJiIGFuZCBhdm9pZHMgdG8gc3VibWl0IGEgbmV3IGNvbW1hbmRcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6NDUyOlxcdCAqIHRocm91Z2ggcG9ydDEwMF9zZW5kX2ZyYW1lX2FzeW5jKCkgd2hpbGUgdGhlIHByZXZpb3VzIG9uZSBpcyBiZWluZ1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo0NTM6XFx0ICogY2FuY2VsZWQgdGhyb3VnaCBwb3J0MTAwX2Fib3J0X2NtZCgpLlxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy00NTQtXFx0ICovXFxuLS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNDYzLVxcdCAqL1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo0NjQ6XFx0c3RydWN0IHBvcnQxMDBfY21kICpjbWQ7XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTQ2NS1cXG4tLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy00NjktXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjQ3MDpzdHJ1Y3QgcG9ydDEwMF9jbWQge1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy00NzEtXFx0dTggY29kZTtcXG4tLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy00NzUtXFx0aW50IHJlc3BfbGVuO1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo0NzY6XFx0cG9ydDEwMF9zZW5kX2FzeW5jX2NvbXBsZXRlX3QgIGNvbXBsZXRlX2NiO1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy00NzctXFx0dm9pZCAqY29tcGxldGVfY2JfY29udGV4dDtcXG4tLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy00NzktXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjQ4MDpzdHJ1Y3QgcG9ydDEwMF9mcmFtZSB7XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTQ4MS1cXHR1OCBwcmVhbWJsZTtcXG4tLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy00ODgtXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjQ4OTpzdHJ1Y3QgcG9ydDEwMF9hY2tfZnJhbWUge1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy00OTAtXFx0dTggcHJlYW1ibGU7XFxuLS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNDk1LVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo0OTY6c3RydWN0IHBvcnQxMDBfY2JfYXJnIHtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNDk3LVxcdG5mY19kaWdpdGFsX2NtZF9jb21wbGV0ZV90IGNvbXBsZXRlX2NiO1xcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTUwMS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6NTAyOnN0cnVjdCBwb3J0MTAwX3RnX2NvbW1fcmZfY21kIHtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNTAzLVxcdF9fbGUxNiBndWFyZF90aW1lO1xcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTUxMy1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6NTE0OnN0cnVjdCBwb3J0MTAwX3RnX2NvbW1fcmZfcmVzIHtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNTE1LVxcdHU4IGNvbW1fdHlwZTtcXG4tLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy01MjItLyogVGhlIHJ1bGU6IHZhbHVlICsgY2hlY2tzdW0gPSAwICovXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjUyMzpzdGF0aWMgaW5saW5lIHU4IHBvcnQxMDBfY2hlY2tzdW0odTE2IHZhbHVlKVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy01MjQte1xcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTUyOC0vKiBUaGUgcnVsZTogc3VtKGRhdGEgZWxlbWVudHMpICsgY2hlY2tzdW0gPSAwICovXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjUyOTpzdGF0aWMgdTggcG9ydDEwMF9kYXRhX2NoZWNrc3VtKGNvbnN0IHU4ICpkYXRhLCBpbnQgZGF0YWxlbilcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNTMwLXtcXG4tLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy01MzYtXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjUzNzpcXHRyZXR1cm4gcG9ydDEwMF9jaGVja3N1bShzdW0pO1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy01MzgtfVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy01MzktXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjU0MDpzdGF0aWMgdm9pZCBwb3J0MTAwX3R4X2ZyYW1lX2luaXQodm9pZCAqX2ZyYW1lLCB1OCBjbWRfY29kZSlcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNTQxLXtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6NTQyOlxcdHN0cnVjdCBwb3J0MTAwX2ZyYW1lICpmcmFtZSA9IF9mcmFtZTtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNTQzLVxcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTU1MS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6NTUyOnN0YXRpYyB2b2lkIHBvcnQxMDBfdHhfZnJhbWVfZmluaXNoKHZvaWQgKl9mcmFtZSlcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNTUzLXtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6NTU0OlxcdHN0cnVjdCBwb3J0MTAwX2ZyYW1lICpmcmFtZSA9IF9mcmFtZTtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNTU1LVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo1NTY6XFx0ZnJhbWUtXFx1MDAzZWRhdGFsZW5fY2hlY2tzdW0gPSBwb3J0MTAwX2NoZWNrc3VtKGxlMTZfdG9fY3B1KGZyYW1lLVxcdTAwM2VkYXRhbGVuKSk7XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTU1Ny1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNTU4LVxcdFBPUlQxMDBfRlJBTUVfQ0hFQ0tTVU0oZnJhbWUpID1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6NTU5OlxcdFxcdHBvcnQxMDBfZGF0YV9jaGVja3N1bShmcmFtZS1cXHUwMDNlZGF0YSwgbGUxNl90b19jcHUoZnJhbWUtXFx1MDAzZWRhdGFsZW4pKTtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNTYwLVxcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTU2My1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6NTY0OnN0YXRpYyB2b2lkIHBvcnQxMDBfdHhfdXBkYXRlX3BheWxvYWRfbGVuKHZvaWQgKl9mcmFtZSwgaW50IGxlbilcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNTY1LXtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6NTY2OlxcdHN0cnVjdCBwb3J0MTAwX2ZyYW1lICpmcmFtZSA9IF9mcmFtZTtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNTY3LVxcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTU3MC1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6NTcxOnN0YXRpYyBib29sIHBvcnQxMDBfcnhfZnJhbWVfaXNfdmFsaWQoY29uc3Qgdm9pZCAqX2ZyYW1lKVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy01NzIte1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy01NzMtXFx0dTggY2hlY2tzdW07XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjU3NDpcXHRjb25zdCBzdHJ1Y3QgcG9ydDEwMF9mcmFtZSAqZnJhbWUgPSBfZnJhbWU7XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTU3NS1cXG4tLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy01NzktXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjU4MDpcXHRjaGVja3N1bSA9IHBvcnQxMDBfY2hlY2tzdW0obGUxNl90b19jcHUoZnJhbWUtXFx1MDAzZWRhdGFsZW4pKTtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNTgxLVxcdGlmIChjaGVja3N1bSAhPSBmcmFtZS1cXHUwMDNlZGF0YWxlbl9jaGVja3N1bSlcXG4tLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy01ODMtXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjU4NDpcXHRjaGVja3N1bSA9IHBvcnQxMDBfZGF0YV9jaGVja3N1bShmcmFtZS1cXHUwMDNlZGF0YSxcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNTg1LVxcdFxcdFxcdFxcdFxcdCBsZTE2X3RvX2NwdShmcmFtZS1cXHUwMDNlZGF0YWxlbikpO1xcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTU5MS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6NTkyOnN0YXRpYyBib29sIHBvcnQxMDBfcnhfZnJhbWVfaXNfYWNrKGNvbnN0IHN0cnVjdCBwb3J0MTAwX2Fja19mcmFtZSAqZnJhbWUpXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTU5My17XFxuLS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNTk3LVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo1OTg6c3RhdGljIGlubGluZSBpbnQgcG9ydDEwMF9yeF9mcmFtZV9zaXplKGNvbnN0IHZvaWQgKmZyYW1lKVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy01OTkte1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo2MDA6XFx0Y29uc3Qgc3RydWN0IHBvcnQxMDBfZnJhbWUgKmYgPSBmcmFtZTtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNjAxLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo2MDI6XFx0cmV0dXJuIHNpemVvZihzdHJ1Y3QgcG9ydDEwMF9mcmFtZSkgKyBsZTE2X3RvX2NwdShmLVxcdTAwM2VkYXRhbGVuKSArXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTYwMy1cXHQgICAgICAgUE9SVDEwMF9GUkFNRV9UQUlMX0xFTjtcXG4tLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy02MDUtXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjYwNjpzdGF0aWMgYm9vbCBwb3J0MTAwX3J4X2ZyYW1lX2lzX2NtZF9yZXNwb25zZShjb25zdCBzdHJ1Y3QgcG9ydDEwMCAqZGV2LFxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy02MDctXFx0XFx0XFx0XFx0XFx0ICAgICBjb25zdCB2b2lkICpmcmFtZSlcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNjA4LXtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6NjA5OlxcdGNvbnN0IHN0cnVjdCBwb3J0MTAwX2ZyYW1lICpmID0gZnJhbWU7XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTYxMC1cXG4tLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy02MTMtXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjYxNDpzdGF0aWMgdm9pZCBwb3J0MTAwX3JlY3ZfcmVzcG9uc2Uoc3RydWN0IHVyYiAqdXJiKVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy02MTUte1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo2MTY6XFx0c3RydWN0IHBvcnQxMDAgKmRldiA9IHVyYi1cXHUwMDNlY29udGV4dDtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6NjE3OlxcdHN0cnVjdCBwb3J0MTAwX2NtZCAqY21kID0gZGV2LVxcdTAwM2VjbWQ7XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTYxOC1cXHR1OCAqaW5fZnJhbWU7XFxuLS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNjM4LVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo2Mzk6XFx0aWYgKCFwb3J0MTAwX3J4X2ZyYW1lX2lzX3ZhbGlkKGluX2ZyYW1lKSkge1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy02NDAtXFx0XFx0bmZjX2VycihcXHUwMDI2ZGV2LVxcdTAwM2VpbnRlcmZhY2UtXFx1MDAzZWRldiwgXFxcIlJlY2VpdmVkIGFuIGludmFsaWQgZnJhbWVcXFxcblxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTY0NS1cXHRwcmludF9oZXhfZHVtcF9kZWJ1ZyhcXFwiUE9SVDEwMCBSWDogXFxcIiwgRFVNUF9QUkVGSVhfTk9ORSwgMTYsIDEsIGluX2ZyYW1lLFxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo2NDY6XFx0XFx0XFx0ICAgICBwb3J0MTAwX3J4X2ZyYW1lX3NpemUoaW5fZnJhbWUpLCBmYWxzZSk7XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTY0Ny1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6NjQ4OlxcdGlmICghcG9ydDEwMF9yeF9mcmFtZV9pc19jbWRfcmVzcG9uc2UoZGV2LCBpbl9mcmFtZSkpIHtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNjQ5LVxcdFxcdG5mY19lcnIoXFx1MDAyNmRldi1cXHUwMDNlaW50ZXJmYWNlLVxcdTAwM2VkZXYsXFxuLS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNjU4LVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo2NTk6c3RhdGljIGludCBwb3J0MTAwX3N1Ym1pdF91cmJfZm9yX3Jlc3BvbnNlKGNvbnN0IHN0cnVjdCBwb3J0MTAwICpkZXYsXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTY2MC1cXHRcXHRcXHRcXHRcXHQgICBnZnBfdCBmbGFncylcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNjYxLXtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6NjYyOlxcdGRldi1cXHUwMDNlaW5fdXJiLVxcdTAwM2Vjb21wbGV0ZSA9IHBvcnQxMDBfcmVjdl9yZXNwb25zZTtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNjYzLVxcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTY2Ni1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6NjY3OnN0YXRpYyB2b2lkIHBvcnQxMDBfcmVjdl9hY2soc3RydWN0IHVyYiAqdXJiKVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy02Njgte1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo2Njk6XFx0c3RydWN0IHBvcnQxMDAgKmRldiA9IHVyYi1cXHUwMDNlY29udGV4dDtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6NjcwOlxcdHN0cnVjdCBwb3J0MTAwX2NtZCAqY21kID0gZGV2LVxcdTAwM2VjbWQ7XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjY3MTpcXHRjb25zdCBzdHJ1Y3QgcG9ydDEwMF9hY2tfZnJhbWUgKmluX2ZyYW1lO1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy02NzItXFx0aW50IHJjO1xcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTY5Mi1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6NjkzOlxcdGlmICghcG9ydDEwMF9yeF9mcmFtZV9pc19hY2soaW5fZnJhbWUpKSB7XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTY5NC1cXHRcXHRuZmNfZXJyKFxcdTAwMjZkZXYtXFx1MDAzZWludGVyZmFjZS1cXHUwMDNlZGV2LCBcXFwiUmVjZWl2ZWQgYW4gaW52YWxpZCBhY2tcXFxcblxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTY5OC1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6Njk5OlxcdHJjID0gcG9ydDEwMF9zdWJtaXRfdXJiX2Zvcl9yZXNwb25zZShkZXYsIEdGUF9BVE9NSUMpO1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy03MDAtXFx0aWYgKHJjKSB7XFxuLS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNzEyLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo3MTM6c3RhdGljIGludCBwb3J0MTAwX3N1Ym1pdF91cmJfZm9yX2Fjayhjb25zdCBzdHJ1Y3QgcG9ydDEwMCAqZGV2LCBnZnBfdCBmbGFncylcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNzE0LXtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6NzE1OlxcdGRldi1cXHUwMDNlaW5fdXJiLVxcdTAwM2Vjb21wbGV0ZSA9IHBvcnQxMDBfcmVjdl9hY2s7XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTcxNi1cXG4tLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy03MTktXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjcyMDpzdGF0aWMgaW50IHBvcnQxMDBfc2VuZF9hY2soc3RydWN0IHBvcnQxMDAgKmRldilcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNzIxLXtcXG4tLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy03NDQtXFx0XFx0ICogc3VjY2Vzc2Z1bGx5IHN1Ym1pdHRlZC4gSXQgd2lsbCBiZSByZXNldCBieSB0aGUgb3V0XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjc0NTpcXHRcXHQgKiBVUkIgY29tcGxldGlvbiBjYWxsYmFjayBwb3J0MTAwX3NlbmRfY29tcGxldGUoKS5cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNzQ2LVxcdFxcdCAqL1xcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTc1Ny1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6NzU4OnN0YXRpYyBpbnQgcG9ydDEwMF9zZW5kX2ZyYW1lX2FzeW5jKHN0cnVjdCBwb3J0MTAwICpkZXYsXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTc1OS1cXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKm91dCxcXG4tLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy03ODYtXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjc4NzpcXHRyYyA9IHBvcnQxMDBfc3VibWl0X3VyYl9mb3JfYWNrKGRldiwgR0ZQX0tFUk5FTCk7XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTc4OC1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtNzk2LVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo3OTc6c3RhdGljIHZvaWQgcG9ydDEwMF9idWlsZF9jbWRfZnJhbWUoc3RydWN0IHBvcnQxMDAgKmRldiwgdTggY21kX2NvZGUsXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTc5OC1cXHRcXHRcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy04MDUtXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjgwNjpcXHRwb3J0MTAwX3R4X2ZyYW1lX2luaXQoc2tiLVxcdTAwM2VkYXRhLCBjbWRfY29kZSk7XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjgwNzpcXHRwb3J0MTAwX3R4X3VwZGF0ZV9wYXlsb2FkX2xlbihza2ItXFx1MDAzZWRhdGEsIHBheWxvYWRfbGVuKTtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6ODA4OlxcdHBvcnQxMDBfdHhfZnJhbWVfZmluaXNoKHNrYi1cXHUwMDNlZGF0YSk7XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTgwOS19XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTgxMC1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6ODExOnN0YXRpYyB2b2lkIHBvcnQxMDBfc2VuZF9hc3luY19jb21wbGV0ZShzdHJ1Y3QgcG9ydDEwMCAqZGV2KVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy04MTIte1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo4MTM6XFx0c3RydWN0IHBvcnQxMDBfY21kICpjbWQgPSBkZXYtXFx1MDAzZWNtZDtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtODE0LVxcdGludCBzdGF0dXMgPSBjbWQtXFx1MDAzZXN0YXR1cztcXG4tLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy04MjktXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjgzMDpcXHRza2JfcHV0KHJlc3AsIHBvcnQxMDBfcnhfZnJhbWVfc2l6ZShyZXNwLVxcdTAwM2VkYXRhKSk7XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTgzMS1cXHRza2JfcHVsbChyZXNwLCBQT1JUMTAwX0ZSQU1FX0hFQURFUl9MRU4pO1xcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTgzOS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6ODQwOnN0YXRpYyBpbnQgcG9ydDEwMF9zZW5kX2NtZF9hc3luYyhzdHJ1Y3QgcG9ydDEwMCAqZGV2LCB1OCBjbWRfY29kZSxcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtODQxLVxcdFxcdFxcdFxcdHN0cnVjdCBza19idWZmICpyZXEsXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjg0MjpcXHRcXHRcXHRcXHRwb3J0MTAwX3NlbmRfYXN5bmNfY29tcGxldGVfdCBjb21wbGV0ZV9jYixcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtODQzLVxcdFxcdFxcdFxcdHZvaWQgKmNvbXBsZXRlX2NiX2NvbnRleHQpXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTg0NC17XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjg0NTpcXHRzdHJ1Y3QgcG9ydDEwMF9jbWQgKmNtZDtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtODQ2LVxcdHN0cnVjdCBza19idWZmICpyZXNwO1xcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTg3NC1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6ODc1OlxcdHBvcnQxMDBfYnVpbGRfY21kX2ZyYW1lKGRldiwgY21kX2NvZGUsIHJlcSk7XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTg3Ni1cXG4tLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy04NzgtXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjg3OTpcXHRyYyA9IHBvcnQxMDBfc2VuZF9mcmFtZV9hc3luYyhkZXYsIHJlcSwgcmVzcCwgcmVzcF9sZW4pO1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy04ODAtXFx0aWYgKHJjKSB7XFxuLS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtODg4LVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo4ODk6c3RydWN0IHBvcnQxMDBfc3luY19jbWRfcmVzcG9uc2Uge1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy04OTAtXFx0c3RydWN0IHNrX2J1ZmYgKnJlc3A7XFxuLS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtODkzLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo4OTQ6c3RhdGljIHZvaWQgcG9ydDEwMF93cV9jbWRfY29tcGxldGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy04OTUte1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo4OTY6XFx0c3RydWN0IHBvcnQxMDAgKmRldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcG9ydDEwMCxcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtODk3LVxcdFxcdFxcdFxcdFxcdCAgIGNtZF9jb21wbGV0ZV93b3JrKTtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtODk4LVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo4OTk6XFx0cG9ydDEwMF9zZW5kX2FzeW5jX2NvbXBsZXRlKGRldik7XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTkwMC19XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTkwMS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6OTAyOnN0YXRpYyB2b2lkIHBvcnQxMDBfc2VuZF9zeW5jX2NvbXBsZXRlKHN0cnVjdCBwb3J0MTAwICpkZXYsIHZvaWQgKl9hcmcsXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTkwMy1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqcmVzcClcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtOTA0LXtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6OTA1OlxcdHN0cnVjdCBwb3J0MTAwX3N5bmNfY21kX3Jlc3BvbnNlICphcmcgPSBfYXJnO1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy05MDYtXFxuLS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtOTEwLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo5MTE6c3RhdGljIHN0cnVjdCBza19idWZmICpwb3J0MTAwX3NlbmRfY21kX3N5bmMoc3RydWN0IHBvcnQxMDAgKmRldiwgdTggY21kX2NvZGUsXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTkxMi1cXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpyZXEpXFxuLS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtOTE0LVxcdGludCByYztcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6OTE1OlxcdHN0cnVjdCBwb3J0MTAwX3N5bmNfY21kX3Jlc3BvbnNlIGFyZztcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtOTE2LVxcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTkxOC1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6OTE5OlxcdHJjID0gcG9ydDEwMF9zZW5kX2NtZF9hc3luYyhkZXYsIGNtZF9jb2RlLCByZXEsXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjkyMDpcXHRcXHRcXHRcXHQgICAgcG9ydDEwMF9zZW5kX3N5bmNfY29tcGxldGUsIFxcdTAwMjZhcmcpO1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy05MjEtXFx0aWYgKHJjKSB7XFxuLS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtOTMwLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo5MzE6c3RhdGljIHZvaWQgcG9ydDEwMF9zZW5kX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtOTMyLXtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6OTMzOlxcdHN0cnVjdCBwb3J0MTAwICpkZXYgPSB1cmItXFx1MDAzZWNvbnRleHQ7XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTkzNC1cXG4tLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy05NTQtXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjk1NTpzdGF0aWMgdm9pZCBwb3J0MTAwX2Fib3J0X2NtZChzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2KVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy05NTYte1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo5NTc6XFx0c3RydWN0IHBvcnQxMDAgKmRldiA9IG5mY19kaWdpdGFsX2dldF9kcnZkYXRhKGRkZXYpO1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy05NTgtXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTk1OS1cXHQvKiBBbiBhY2sgd2lsbCBjYW5jZWwgdGhlIGxhc3QgaXNzdWVkIGNvbW1hbmQgKi9cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6OTYwOlxcdHBvcnQxMDBfc2VuZF9hY2soZGV2KTtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtOTYxLVxcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTk2NS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6OTY2OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcG9ydDEwMF9hbGxvY19za2IoY29uc3Qgc3RydWN0IHBvcnQxMDAgKmRldiwgdW5zaWduZWQgaW50IHNpemUpXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTk2Ny17XFxuLS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtOTc3LVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzo5Nzg6c3RhdGljIGludCBwb3J0MTAwX3NldF9jb21tYW5kX3R5cGUoc3RydWN0IHBvcnQxMDAgKmRldiwgdTggY29tbWFuZF90eXBlKVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy05Nzkte1xcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTk4My1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6OTg0OlxcdHNrYiA9IHBvcnQxMDBfYWxsb2Nfc2tiKGRldiwgMSk7XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTk4NS1cXHRpZiAoIXNrYilcXG4tLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy05ODktXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjk5MDpcXHRyZXNwID0gcG9ydDEwMF9zZW5kX2NtZF9zeW5jKGRldiwgUE9SVDEwMF9DTURfU0VUX0NPTU1BTkRfVFlQRSwgc2tiKTtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtOTkxLVxcdGlmIChJU19FUlIocmVzcCkpXFxuLS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTAwMC1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTAwMTpzdGF0aWMgdTY0IHBvcnQxMDBfZ2V0X2NvbW1hbmRfdHlwZV9tYXNrKHN0cnVjdCBwb3J0MTAwICpkZXYpXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEwMDIte1xcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEwMDYtXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjEwMDc6XFx0c2tiID0gcG9ydDEwMF9hbGxvY19za2IoZGV2LCAwKTtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTAwOC1cXHRpZiAoIXNrYilcXG4tLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMDEwLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMDExOlxcdHJlc3AgPSBwb3J0MTAwX3NlbmRfY21kX3N5bmMoZGV2LCBQT1JUMTAwX0NNRF9HRVRfQ09NTUFORF9UWVBFLCBza2IpO1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMDEyLVxcdGlmIChJU19FUlIocmVzcCkpXFxuLS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTAyNC1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTAyNTpzdGF0aWMgdTE2IHBvcnQxMDBfZ2V0X2Zpcm13YXJlX3ZlcnNpb24oc3RydWN0IHBvcnQxMDAgKmRldilcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTAyNi17XFxuLS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTAzMC1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTAzMTpcXHRza2IgPSBwb3J0MTAwX2FsbG9jX3NrYihkZXYsIDApO1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMDMyLVxcdGlmICghc2tiKVxcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEwMzQtXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjEwMzU6XFx0cmVzcCA9IHBvcnQxMDBfc2VuZF9jbWRfc3luYyhkZXYsIFBPUlQxMDBfQ01EX0dFVF9GSVJNV0FSRV9WRVJTSU9OLFxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMDM2LVxcdFxcdFxcdFxcdCAgICAgc2tiKTtcXG4tLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMDQ2LVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMDQ3OnN0YXRpYyBpbnQgcG9ydDEwMF9zd2l0Y2hfcmYoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgYm9vbCBvbilcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTA0OC17XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjEwNDk6XFx0c3RydWN0IHBvcnQxMDAgKmRldiA9IG5mY19kaWdpdGFsX2dldF9kcnZkYXRhKGRkZXYpO1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMDUwLVxcdHN0cnVjdCBza19idWZmICpza2IsICpyZXNwO1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMDUxLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMDUyOlxcdHNrYiA9IHBvcnQxMDBfYWxsb2Nfc2tiKGRldiwgMSk7XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEwNTMtXFx0aWYgKCFza2IpXFxuLS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTA1OS1cXHRpZiAoIW9uKVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMDYwOlxcdFxcdHBvcnQxMDBfYWJvcnRfY21kKGRkZXYpO1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMDYxLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMDYyOlxcdHJlc3AgPSBwb3J0MTAwX3NlbmRfY21kX3N5bmMoZGV2LCBQT1JUMTAwX0NNRF9TV0lUQ0hfUkYsIHNrYik7XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEwNjMtXFxuLS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTA3MS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTA3MjpzdGF0aWMgaW50IHBvcnQxMDBfaW5fc2V0X3JmKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHU4IHJmKVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMDczLXtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTA3NDpcXHRzdHJ1Y3QgcG9ydDEwMCAqZGV2ID0gbmZjX2RpZ2l0YWxfZ2V0X2RydmRhdGEoZGRldik7XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEwNzUtXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4tLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMDgxLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMDgyOlxcdHNrYiA9IHBvcnQxMDBfYWxsb2Nfc2tiKGRldiwgc2l6ZW9mKHN0cnVjdCBwb3J0MTAwX2luX3JmX3NldHRpbmcpKTtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTA4My1cXHRpZiAoIXNrYilcXG4tLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMDg2LVxcdHNrYl9wdXRfZGF0YShza2IsIFxcdTAwMjZpbl9yZl9zZXR0aW5nc1tyZl0sXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjEwODc6XFx0XFx0ICAgICBzaXplb2Yoc3RydWN0IHBvcnQxMDBfaW5fcmZfc2V0dGluZykpO1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMDg4LVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMDg5OlxcdHJlc3AgPSBwb3J0MTAwX3NlbmRfY21kX3N5bmMoZGV2LCBQT1JUMTAwX0NNRF9JTl9TRVRfUkYsIHNrYik7XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEwOTAtXFxuLS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTEwMC1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTEwMTpzdGF0aWMgaW50IHBvcnQxMDBfaW5fc2V0X2ZyYW1pbmcoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgaW50IHBhcmFtKVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMTAyLXtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTEwMzpcXHRzdHJ1Y3QgcG9ydDEwMCAqZGV2ID0gbmZjX2RpZ2l0YWxfZ2V0X2RydmRhdGEoZGRldik7XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjExMDQ6XFx0Y29uc3Qgc3RydWN0IHBvcnQxMDBfcHJvdG9jb2wgKnByb3RvY29scztcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTEwNS1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTExMjItXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjExMjM6XFx0c2l6ZSA9IHNpemVvZihzdHJ1Y3QgcG9ydDEwMF9wcm90b2NvbCkgKiBudW1fcHJvdG9jb2xzO1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMTI0LVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMTI1OlxcdHNrYiA9IHBvcnQxMDBfYWxsb2Nfc2tiKGRldiwgc2l6ZSk7XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTExMjYtXFx0aWYgKCFza2IpXFxuLS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTEzMC1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTEzMTpcXHRyZXNwID0gcG9ydDEwMF9zZW5kX2NtZF9zeW5jKGRldiwgUE9SVDEwMF9DTURfSU5fU0VUX1BST1RPQ09MLCBza2IpO1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMTMyLVxcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTExNDItXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjExNDM6c3RhdGljIGludCBwb3J0MTAwX2luX2NvbmZpZ3VyZV9odyhzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCBpbnQgdHlwZSxcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTE0NC1cXHRcXHRcXHRcXHQgICBpbnQgcGFyYW0pXFxuLS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTE0Ni1cXHRpZiAodHlwZSA9PSBORkNfRElHSVRBTF9DT05GSUdfUkZfVEVDSClcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTE0NzpcXHRcXHRyZXR1cm4gcG9ydDEwMF9pbl9zZXRfcmYoZGRldiwgcGFyYW0pO1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMTQ4LVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMTQ5LVxcdGlmICh0eXBlID09IE5GQ19ESUdJVEFMX0NPTkZJR19GUkFNSU5HKVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMTUwOlxcdFxcdHJldHVybiBwb3J0MTAwX2luX3NldF9mcmFtaW5nKGRkZXYsIHBhcmFtKTtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTE1MS1cXG4tLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMTU0LVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMTU1OnN0YXRpYyB2b2lkIHBvcnQxMDBfaW5fY29tbV9yZl9jb21wbGV0ZShzdHJ1Y3QgcG9ydDEwMCAqZGV2LCB2b2lkICphcmcsXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTExNTYtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpyZXNwKVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMTU3LXtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTE1ODpcXHRjb25zdCBzdHJ1Y3QgcG9ydDEwMF9jYl9hcmcgKmNiX2FyZyA9IGFyZztcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTE1OS1cXHRuZmNfZGlnaXRhbF9jbWRfY29tcGxldGVfdCBjYiA9IGNiX2FyZy1cXHUwMDNlY29tcGxldGVfY2I7XFxuLS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTIwNS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTIwNjpzdGF0aWMgaW50IHBvcnQxMDBfaW5fc2VuZF9jbWQoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTIwNy1cXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IF90aW1lb3V0LFxcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEyMDkte1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMjEwOlxcdHN0cnVjdCBwb3J0MTAwICpkZXYgPSBuZmNfZGlnaXRhbF9nZXRfZHJ2ZGF0YShkZGV2KTtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTIxMTpcXHRzdHJ1Y3QgcG9ydDEwMF9jYl9hcmcgKmNiX2FyZztcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTIxMi1cXHRfX2xlMTYgdGltZW91dDtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTIxMy1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTIxNDpcXHRjYl9hcmcgPSBremFsbG9jX29iaihzdHJ1Y3QgcG9ydDEwMF9jYl9hcmcpO1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMjE1LVxcdGlmICghY2JfYXJnKVxcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEyMjQtXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjEyMjU6XFx0cmV0dXJuIHBvcnQxMDBfc2VuZF9jbWRfYXN5bmMoZGV2LCBQT1JUMTAwX0NNRF9JTl9DT01NX1JGLCBza2IsXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjEyMjY6XFx0XFx0XFx0XFx0ICAgICAgcG9ydDEwMF9pbl9jb21tX3JmX2NvbXBsZXRlLCBjYl9hcmcpO1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMjI3LX1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTIyOC1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTIyOTpzdGF0aWMgaW50IHBvcnQxMDBfdGdfc2V0X3JmKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHU4IHJmKVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMjMwLXtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTIzMTpcXHRzdHJ1Y3QgcG9ydDEwMCAqZGV2ID0gbmZjX2RpZ2l0YWxfZ2V0X2RydmRhdGEoZGRldik7XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEyMzItXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4tLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMjM4LVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMjM5OlxcdHNrYiA9IHBvcnQxMDBfYWxsb2Nfc2tiKGRldiwgc2l6ZW9mKHN0cnVjdCBwb3J0MTAwX3RnX3JmX3NldHRpbmcpKTtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTI0MC1cXHRpZiAoIXNrYilcXG4tLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMjQzLVxcdHNrYl9wdXRfZGF0YShza2IsIFxcdTAwMjZ0Z19yZl9zZXR0aW5nc1tyZl0sXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjEyNDQ6XFx0XFx0ICAgICBzaXplb2Yoc3RydWN0IHBvcnQxMDBfdGdfcmZfc2V0dGluZykpO1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMjQ1LVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMjQ2OlxcdHJlc3AgPSBwb3J0MTAwX3NlbmRfY21kX3N5bmMoZGV2LCBQT1JUMTAwX0NNRF9UR19TRVRfUkYsIHNrYik7XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEyNDctXFxuLS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTI1Ny1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTI1ODpzdGF0aWMgaW50IHBvcnQxMDBfdGdfc2V0X2ZyYW1pbmcoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgaW50IHBhcmFtKVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMjU5LXtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTI2MDpcXHRzdHJ1Y3QgcG9ydDEwMCAqZGV2ID0gbmZjX2RpZ2l0YWxfZ2V0X2RydmRhdGEoZGRldik7XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjEyNjE6XFx0Y29uc3Qgc3RydWN0IHBvcnQxMDBfcHJvdG9jb2wgKnByb3RvY29scztcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTI2Mi1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEyNzktXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjEyODA6XFx0c2l6ZSA9IHNpemVvZihzdHJ1Y3QgcG9ydDEwMF9wcm90b2NvbCkgKiBudW1fcHJvdG9jb2xzO1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMjgxLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMjgyOlxcdHNrYiA9IHBvcnQxMDBfYWxsb2Nfc2tiKGRldiwgc2l6ZSk7XFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEyODMtXFx0aWYgKCFza2IpXFxuLS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTI4Ny1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTI4ODpcXHRyZXNwID0gcG9ydDEwMF9zZW5kX2NtZF9zeW5jKGRldiwgUE9SVDEwMF9DTURfVEdfU0VUX1BST1RPQ09MLCBza2IpO1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMjg5LVxcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEyOTktXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjEzMDA6c3RhdGljIGludCBwb3J0MTAwX3RnX2NvbmZpZ3VyZV9odyhzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCBpbnQgdHlwZSxcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTMwMS1cXHRcXHRcXHRcXHQgICBpbnQgcGFyYW0pXFxuLS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTMwMy1cXHRpZiAodHlwZSA9PSBORkNfRElHSVRBTF9DT05GSUdfUkZfVEVDSClcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTMwNDpcXHRcXHRyZXR1cm4gcG9ydDEwMF90Z19zZXRfcmYoZGRldiwgcGFyYW0pO1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMzA1LVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMzA2LVxcdGlmICh0eXBlID09IE5GQ19ESUdJVEFMX0NPTkZJR19GUkFNSU5HKVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMzA3OlxcdFxcdHJldHVybiBwb3J0MTAwX3RnX3NldF9mcmFtaW5nKGRkZXYsIHBhcmFtKTtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTMwOC1cXG4tLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMzExLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMzEyOnN0YXRpYyBib29sIHBvcnQxMDBfdGdfdGFyZ2V0X2FjdGl2YXRlZChzdHJ1Y3QgcG9ydDEwMCAqZGV2LCB1OCB0Z3RfYWN0aXZhdGVkKVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMzEzLXtcXG4tLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMzMxLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMzMyOnN0YXRpYyB2b2lkIHBvcnQxMDBfdGdfY29tbV9yZl9jb21wbGV0ZShzdHJ1Y3QgcG9ydDEwMCAqZGV2LCB2b2lkICphcmcsXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEzMzMtXFx0XFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnJlc3ApXFxuLS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTMzNS1cXHR1MzIgc3RhdHVzO1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYzoxMzM2OlxcdGNvbnN0IHN0cnVjdCBwb3J0MTAwX2NiX2FyZyAqY2JfYXJnID0gYXJnO1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMzM3LVxcdG5mY19kaWdpdGFsX2NtZF9jb21wbGV0ZV90IGNiID0gY2JfYXJnLVxcdTAwM2Vjb21wbGV0ZV9jYjtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTMzODpcXHRzdHJ1Y3QgcG9ydDEwMF90Z19jb21tX3JmX3JlcyAqaGRyO1xcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMzM5LVxcbi0tXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jLTEzNDItXFxuZHJpdmVycy9uZmMvcG9ydDEwMC5jOjEzNDM6XFx0aGRyID0gKHN0cnVjdCBwb3J0MTAwX3RnX2NvbW1fcmZfcmVzICopcmVzcC1cXHUwMDNlZGF0YTtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTM0NC1cXG4tLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMzQ3LVxcdGlmIChjYl9hcmctXFx1MDAzZW1kYWEgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTM0ODpcXHQgICAgIXBvcnQxMDBfdGdfdGFyZ2V0X2FjdGl2YXRlZChkZXYsIGhkci1cXHUwMDNldGFyZ2V0X2FjdGl2YXRlZCkpIHtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTM0OS1cXHRcXHRrZnJlZV9za2IocmVzcCk7XFxuLS1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTM1NC1cXG5kcml2ZXJzL25mYy9wb3J0MTAwLmM6MTM1NTpcXHRza2JfcHVsbChyZXNwLCBzaXplb2Yoc3RydWN0IHBvcnQxMDBfdGdfY29tbV9yZl9yZXMpKTtcXG5kcml2ZXJzL25mYy9wb3J0MTAwLmMtMTM1Ni1cXG4tLVxcbmRyaXZlcnMvbmZjL3BvcnQxMDAuYy0xMzcxLVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MDozOS41ODU4ODA5ODlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjIxMjMzNzgxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIE5GQyBTaW11bGF0aW9uIERyaXZlcioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIE5GQyBzaW11bGF0aW9uIGlzIHNldCB1cC4gVGhlIG5hdHVyYWwgZmlyc3Qgc3RlcCBpcyB0byBkaWcgaW50byB0aGUgY29kZSwgYW5kIEkga25vdyBleGFjdGx5IHdoZXJlIHRvIHN0YXJ0OiBgZHJpdmVycy9uZmMvbmZjc2ltLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBzaW11bGF0aW9uIGxpa2VseSByZXNpZGVzLiBIb3dldmVyLCBJIGNhbid0IGp1c3QgbG9vayBhdCB0aGUgY29kZTsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYXMgd2VsbC4gVGltZSB0byBjaGVjayB0aGUgYEtjb25maWdgIGZpbGUgaW4gdGhhdCBzYW1lIGRpcmVjdG9yeSwgc3BlY2lmaWNhbGx5IGBkcml2ZXJzL25mYy9uZmNzaW0uY2AgS2NvbmZpZy4gVGhhdCB3aWxsIHRlbGwgbWUgdW5kZXIgd2hhdCBjb25kaXRpb25zIHRoaXMgc2ltdWxhdGlvbiBkcml2ZXIgaXMgZXZlbiBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIEl0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBpdCBpcyBlbmFibGVkIG9yIGRpc2FibGVkLiBUaGF0J2xsIGJlIG15IHN0YXJ0aW5nIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzg5MSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQwOjQxLjc5ODIyMTA1NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYzMTg1MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GQ19TSU1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZmMvS2NvbmZpZz0yMT1jb25maWcgTkZDX01FSV9QSFlcXG4tLVxcbmRyaXZlcnMvbmZjL0tjb25maWctMzAtXFxuZHJpdmVycy9uZmMvS2NvbmZpZzozMTpjb25maWcgTkZDX1NJTVxcbmRyaXZlcnMvbmZjL0tjb25maWctMzItXFx0dHJpc3RhdGUgXFxcIk5GQyBoYXJkd2FyZSBzaW11bGF0b3IgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MDo0MS44NDQ1NDc1ODlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjA0MzIxMjc1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTkZDIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgdGhhdCBgQ09ORklHX05GQ19TSU1gIHJlZmVycyB0byB0aGUgXCJORkMgaGFyZHdhcmUgc2ltdWxhdG9yIGRyaXZlci5cIiBUaGF0J3MgaW50ZXJlc3RpbmcsIGxpa2VseSBmb3IgdGVzdGluZyBvciBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMuIFRoZW4sIGBDT05GSUdfTkZDX1BPUlQxMDBgIHBvaW50cyB0byBhIFwiU29ueSBQb3J0LTEwMCBVU0IgUkZJRCByZWFkZXIuXCIgQWgsIGEgc3BlY2lmaWMgaGFyZHdhcmUgaW50ZXJmYWNlLiBDbGVhcmx5LCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtIGlzIGRlc2lnbmVkIHRvIHByb3ZpZGUgZ3JhbnVsYXIgY29udHJvbCBvdmVyIE5GQyBjYXBhYmlsaXRpZXMuIFRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dCBhbmQgZGVwZW5kZW5jaWVzLCBJIHNob3VsZCByZWFsbHkgZGl2ZSBpbnRvIGBuZXQvbmZjL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgbG9naWMgYW5kIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSBvcHRpb25zIHdpbGwgYmUgZGVmaW5lZC4gSSBleHBlY3QgdG8gZmluZCBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgc2V0dGluZ3MsIGFuZCBkZXNjcmlwdGlvbnMgdGhhdCB3aWxsIHNoZWQgZnVydGhlciBsaWdodCBvbiB0aGVpciBpbnRlbmRlZCB1c2UuIExldCdzIHNlZSB3aGF0J3MgdGhlcmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgyMTAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MDo0My44ODc3NjI1NDdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25mYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBORkMgc3Vic3lzdGVtIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0bWVudWNvbmZpZyBORkNcXG4gICA3OlxcdFxcdGRlcGVuZHMgb24gUkZLSUxMIHx8ICFSRktJTExcXG4gICA4OlxcdFxcdHRyaXN0YXRlIFxcXCJORkMgc3Vic3lzdGVtIHN1cHBvcnRcXFwiXFxuICAgOTpcXHRcXHRkZWZhdWx0IG5cXG4gIDEwOlxcdFxcdGhlbHBcXG4gIDExOlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBidWlsZCBzdXBwb3J0IGZvciBORkMgKE5lYXIgZmllbGRcXG4gIDEyOlxcdFxcdCAgY29tbXVuaWNhdGlvbikgZGV2aWNlcy5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXFxuICAxNTpcXHRcXHQgIGJlIGNhbGxlZCBuZmMuXFxuICAxNjpcXHRcXG4gIDE3OlxcdGNvbmZpZyBORkNfRElHSVRBTFxcbiAgMTg6XFx0XFx0ZGVwZW5kcyBvbiBORkNcXG4gIDE5OlxcdFxcdHNlbGVjdCBDUkNfQ0NJVFRcXG4gIDIwOlxcdFxcdHNlbGVjdCBDUkNfSVRVX1RcXG4gIDIxOlxcdFxcdHRyaXN0YXRlIFxcXCJORkMgRGlnaXRhbCBQcm90b2NvbCBzdGFjayBzdXBwb3J0XFxcIlxcbiAgMjI6XFx0XFx0ZGVmYXVsdCBuXFxuICAyMzpcXHRcXHRoZWxwXFxuICAyNDpcXHRcXHQgIFNheSBZIGlmIHlvdSB3YW50IHRvIGJ1aWxkIE5GQyBkaWdpdGFsIHByb3RvY29sIHN0YWNrIHN1cHBvcnQuXFxuICAyNTpcXHRcXHQgIFRoaXMgaXMgbmVlZGVkIGJ5IE5GQyBjaGlwc2V0cyB3aG9zZSBmaXJtd2FyZSBvbmx5IGltcGxlbWVudFxcbiAgMjY6XFx0XFx0ICB0aGUgTkZDIGFuYWxvZyBsYXllci5cXG4gIDI3OlxcdFxcbiAgMjg6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXFxuICAyOTpcXHRcXHQgIGJlIGNhbGxlZCBuZmNfZGlnaXRhbC5cXG4gIDMwOlxcdFxcbiAgMzE6XFx0c291cmNlIFxcXCJuZXQvbmZjL25jaS9LY29uZmlnXFxcIlxcbiAgMzI6XFx0c291cmNlIFxcXCJuZXQvbmZjL2hjaS9LY29uZmlnXFxcIlxcbiAgMzM6XFx0XFxuICAzNDpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmZjL0tjb25maWdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQwOjQzLjg4NzgzOTk2N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNDQ4OTA5NTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byB0aGUgTkZDIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBORkMgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIEknbSBnb2luZyB0byBqdW1wIHJpZ2h0IGludG8gdGhlIGBkcml2ZXJzL25mYy9LY29uZmlnYCBmaWxlLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LiBJdCBzaG91bGQgY29udGFpbiBhbGwgdGhlIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyB0aGF0IGdvdmVybiBob3cgdGhlIE5GQyBzdWJzeXN0ZW0gaXMgYnVpbHQgaW50byB0aGUga2VybmVsLiBGcm9tIHRoZXJlLCBJJ2xsIGJlIGFibGUgdG8gdHJhY2UgYWxsIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZyBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODg4OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDA6NDUuMzM2NzUxNjU4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzMDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmZjL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTmVhciBGaWVsZCBDb21tdW5pY2F0aW9uIChORkMpIGRldmljZXNcXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0bWVudSBcXFwiTmVhciBGaWVsZCBDb21tdW5pY2F0aW9uIChORkMpIGRldmljZXNcXFwiXFxuICAgNzpcXHRcXHRkZXBlbmRzIG9uIE5GQ1xcbiAgIDg6XFx0XFxuICAgOTpcXHRjb25maWcgTkZDX1RSRjc5NzBBXFxuICAxMDpcXHRcXHR0cmlzdGF0ZSBcXFwiVGV4YXMgSW5zdHJ1bWVudHMgVFJGNzk3MGEgTkZDIGRyaXZlclxcXCJcXG4gIDExOlxcdFxcdGRlcGVuZHMgb24gU1BJIFxcdTAwMjZcXHUwMDI2IE5GQ19ESUdJVEFMIFxcdTAwMjZcXHUwMDI2IEdQSU9MSUJcXG4gIDEyOlxcdFxcdGhlbHBcXG4gIDEzOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgTkZDIGRyaXZlciBmb3IgVGV4YXMgSW5zdHJ1bWVudHMnIFRSRjc5NzBhXFxuICAxNDpcXHRcXHQgIGRldmljZS4gU3VjaCBkZXZpY2Ugc3VwcG9ydHMgNSBkaWZmZXJlbnQgcHJvdG9jb2xzOiBJU08xNDQ0M0EsXFxuICAxNTpcXHRcXHQgIElTTzE0NDQzQiwgRmVMaUNhLCBJU08xNTY5MyBhbmQgSVNPMTgwMDAtMy5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGNvbXBpbGUgc3VwcG9ydCBmb3IgVFJGNzk3MGEgaW50byB0aGUga2VybmVsIG9yXFxuICAxODpcXHRcXHQgIHNheSBNICB0byBjb21waWxlIGl0IGFzIGEgbW9kdWxlLiBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkXFxuICAxOTpcXHRcXHQgIHRyZjc5NzBhLmtvLlxcbiAgMjA6XFx0XFxuICAyMTpcXHRjb25maWcgTkZDX01FSV9QSFlcXG4gIDIyOlxcdFxcdHRyaXN0YXRlIFxcXCJNRUkgYnVzIE5GQyBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4gIDIzOlxcdFxcdGRlcGVuZHMgb24gSU5URUxfTUVJIFxcdTAwMjZcXHUwMDI2IE5GQ19IQ0lcXG4gIDI0OlxcdFxcdGhlbHBcXG4gIDI1OlxcdFxcdCAgVGhpcyBhZGRzIHN1cHBvcnQgdG8gdXNlIGFuIG1laSBidXMgbmZjIGRldmljZS4gU2VsZWN0IHRoaXMgaWYgeW91XFxuICAyNjpcXHRcXHQgIHdpbGwgdXNlIGFuIEhDSSBORkMgZHJpdmVyIGZvciBhbiBORkMgY2hpcCBjb25uZWN0ZWQgYmVoaW5kIGFuXFxuICAyNzpcXHRcXHQgIEludGVsJ3MgTWFuYWdlbWVudCBFbmdpbmUgY2hpcC5cXG4gIDI4OlxcdFxcbiAgMjk6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMzA6XFx0XFxuICAzMTpcXHRjb25maWcgTkZDX1NJTVxcbiAgMzI6XFx0XFx0dHJpc3RhdGUgXFxcIk5GQyBoYXJkd2FyZSBzaW11bGF0b3IgZHJpdmVyXFxcIlxcbiAgMzM6XFx0XFx0ZGVwZW5kcyBvbiBORkNfRElHSVRBTFxcbiAgMzQ6XFx0XFx0aGVscFxcbiAgMzU6XFx0XFx0ICBUaGlzIGRyaXZlciBkZWNsYXJlcyB0d28gdmlydHVhbCBORkMgZGV2aWNlcyBzdXBwb3J0aW5nIE5GQy1ERVBcXG4gIDM2OlxcdFxcdCAgcHJvdG9jb2wuIEFuIExMQ1AgY29ubmVjdGlvbiBjYW4gYmUgZXN0YWJsaXNoZWQgYmV0d2VlbiB0aGVtIGFuZFxcbiAgMzc6XFx0XFx0ICBhbGwgcGFja2V0cyBzZW50IGZyb20gb25lIGRldmljZSBpcyBzZW50IGJhY2sgdG8gdGhlIG90aGVyLCBhY3RpbmcgYXNcXG4gIDM4OlxcdFxcdCAgbG9vcGJhY2sgZGV2aWNlcy5cXG4gIDM5OlxcdFxcbiAgNDA6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRjb25maWcgTkZDX1BPUlQxMDBcXG4gIDQzOlxcdFxcdHRyaXN0YXRlIFxcXCJTb255IE5GQyBQb3J0LTEwMCBTZXJpZXMgVVNCIGRldmljZSBzdXBwb3J0XFxcIlxcbiAgNDQ6XFx0XFx0ZGVwZW5kcyBvbiBVU0JcXG4gIDQ1OlxcdFxcdGRlcGVuZHMgb24gTkZDX0RJR0lUQUxcXG4gIDQ2OlxcdFxcdGhlbHBcXG4gIDQ3OlxcdFxcdCAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIFNvbnkgUG9ydC0xMDAgY2hpcCBiYXNlZCBVU0IgZGV2aWNlcyBzdWNoIGFzIHRoZVxcbiAgNDg6XFx0XFx0ICBSQy1TMzgwIGRvbmdsZS5cXG4gIDQ5OlxcdFxcbiAgNTA6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNTE6XFx0XFxuICA1MjpcXHRjb25maWcgTkZDX1ZJUlRVQUxfTkNJXFxuICA1MzpcXHRcXHR0cmlzdGF0ZSBcXFwiTkNJIGRldmljZSBzaW11bGF0b3IgZHJpdmVyXFxcIlxcbiAgNTQ6XFx0XFx0ZGVwZW5kcyBvbiBORkNfTkNJXFxuICA1NTpcXHRcXHRoZWxwXFxuICA1NjpcXHRcXHQgIE5DSSB2aXJ0dWFsIGRldmljZSBzaW11bGF0ZXMgYSBOQ0kgZGV2aWNlIHRvIHRoZSB1c2VyLlxcbiAgNTc6XFx0XFx0ICBJdCBjYW4gYmUgdXNlZCB0byB2YWxpZGF0ZSB0aGUgTkNJIG1vZHVsZSBhbmQgYXBwbGljYXRpb25zLlxcbiAgNTg6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIHZpcnR1YWwgTkNJIGRldmljZSBhbmRcXG4gIDU5OlxcdFxcdCAgbW9kdWxlLlxcbiAgNjA6XFx0XFxuICA2MTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA2MjpcXHRcXG4gIDYzOlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZmMvZmRwL0tjb25maWdcXFwiXFxuICA2NDpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmZjL3BuNTQ0L0tjb25maWdcXFwiXFxuICA2NTpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmZjL3BuNTMzL0tjb25maWdcXFwiXFxuICA2NjpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmZjL21pY3JvcmVhZC9LY29uZmlnXFxcIlxcbiAgNjc6XFx0c291cmNlIFxcXCJkcml2ZXJzL25mYy9uZmNtcnZsL0tjb25maWdcXFwiXFxuICA2ODpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmZjL3N0MjFuZmNhL0tjb25maWdcXFwiXFxuICA2OTpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmZjL3N0LW5jaS9LY29uZmlnXFxcIlxcbiAgNzA6XFx0c291cmNlIFxcXCJkcml2ZXJzL25mYy9ueHAtbmNpL0tjb25maWdcXFwiXFxuICA3MTpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZ1xcXCJcXG4gIDcyOlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZmMvc3Q5NWhmL0tjb25maWdcXFwiXFxuICA3MzpcXHRlbmRtZW51XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQwOjQ1LjMzNjgzNjIzOFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MDk5MjA2NTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk5GQyBEcml2ZXIgTG9vcGJhY2sgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyB0aGUgYENPTkZJR19ORkNfU0lNYCBkcml2ZXIuLi4gdGhhdCdzIHRoZSBvbmUuIEl0IGxvb2tzIGxpa2UgdGhpcyBkcml2ZXIgZGVmaW5lcyAqdHdvKiB2aXJ0dWFsIE5GQyBkZXZpY2VzIHRoYXQgY2FuIGNvbW11bmljYXRlIHVzaW5nIHRoZSBORkMtREVQIHByb3RvY29sLiBFc3NlbnRpYWxseSwgaXQgY3JlYXRlcyBhIGxvb3BiYWNrIHNldHVwLiBBbnkgZGF0YSBzZW50IGZyb20gb25lIHZpcnR1YWwgZGV2aWNlIGdldHMgaW1tZWRpYXRlbHkgYm91bmNlZCBiYWNrIGZyb20gdGhlIG90aGVyLiBJbnRlcmVzdGluZy4gQW5kLCBmcm9tIHdoYXQgSSBjYW4gc2VlLCBgQ09ORklHX05GQ19QT1JUMTAwYCBoYXMgZGVwZW5kZW5jaWVzIG9uIFVTQiBhbmQgTkZDX0RJR0lUQUwsIHdoaWNoIGlzIHJlbGV2YW50IGdpdmVuIHN5emthbGxlcidzIGZvY3VzIG9uIGZ1enppbmcgVVNCIGFuZCBORkMgaW50ZXJmYWNlcy5cblxuTm93LCBJIHJlYWxseSBuZWVkIHRvIGRpdmUgZGVlcGVyLiBUaW1lIHRvIGhpdCB0aGUgZ2l0IGxvZ3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBoaXN0b3J5IG9mIHRoaXMgY29kZS4gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIG9yaWdpbmFsIGNvbW1pdCBhbmQgcGVyaGFwcyB0aGUgc3Vycm91bmRpbmcgY29tbWl0cy4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiB0aGUgcGF0Y2gsIGl0cyBjb250ZXh0LCBhbmQgcG90ZW50aWFsbHkgYW55IHZ1bG5lcmFiaWxpdGllcyBvciBkZXNpZ24gZGVjaXNpb25zIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gbXkgd29yay4gSSBuZWVkIHRvIHNlZSB3aGF0J3MgY2hhbmdlZCwgd2h5IGl0J3MgY2hhbmdlZCwgYW5kIHdoZXJlIGl0IGNhbWUgZnJvbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAxMjcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MDo0OS40MzYwNDQ5MTZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4OTE1NDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRpZ2l0YWxfcmVjdl9kZXBfZGF0YV9nYXRoZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25mY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmZjL2RpZ2l0YWxfZGVwLmM9MjMwPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjIzMTpkaWdpdGFsX3JlY3ZfZGVwX2RhdGFfZ2F0aGVyKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHU4IHBmYixcXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMjMyLVxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnJlc3AsXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM9Njg2PXN0YXRpYyB2b2lkIGRpZ2l0YWxfaW5fcmVjdl9kZXBfcmVzKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHZvaWQgKmFyZyxcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy03OTgtXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjc5OTpcXHRcXHRyZXNwID0gZGlnaXRhbF9yZWN2X2RlcF9kYXRhX2dhdGhlcihkZGV2LCBwZmIsIHJlc3AsXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTgwMC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgZGlnaXRhbF9pbl9zZW5kX2FjayxcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYz0xMDc3PXN0YXRpYyB2b2lkIGRpZ2l0YWxfdGdfcmVjdl9kZXBfcmVxKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHZvaWQgKmFyZyxcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xMTgzLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzoxMTg0OlxcdFxcdHJlc3AgPSBkaWdpdGFsX3JlY3ZfZGVwX2RhdGFfZ2F0aGVyKGRkZXYsIHBmYiwgcmVzcCxcXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTE4NS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgZGlnaXRhbF90Z19zZW5kX2FjaywgTlVMTCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQwOjQ5LjQ4NDk2NjIwNFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxODgzMTYwMDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIGBkaWdpdGFsX3RnX3NlbmRfYXRyX3Jlc19jb21wbGV0ZWAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgZGlnaXRhbF90Z19zZW5kX2F0cl9yZXNfY29tcGxldGVgLiBJdCdzIGEgbmV3IG9uZSwgc28gdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyB1bmRlcnN0YW5kIGl0cyBzY29wZS4gSSBoYXZlIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSBjYWxsZWQuIFVuZGVyc3RhbmRpbmcgaXRzIHVzYWdlIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gSSBuZWVkIHRvIHRyYWNlIGl0cyByZWZlcmVuY2VzIGFuZCBzZWUgd2hhdCBvdGhlciBtb2R1bGVzIG9yIGZ1bmN0aW9ucyBkZXBlbmQgb24gaXQsIG9yIHRyaWdnZXIgaXQuIEEgcXVpY2sgc2VhcmNoIHNob3VsZCByZXZlYWwgYWxsIGluc3RhbmNlcyBvZiBpdHMgdXNlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGl0cyByb2xlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDg0NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQwOjUxLjM2ODEyOTM1M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1MDU0ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGlnaXRhbF90Z19zZW5kX2F0cl9yZXNfY29tcGxldGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25mY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmZjL2RpZ2l0YWxfZGVwLmM9MTM5OD1zdGF0aWMgdm9pZCBkaWdpdGFsX3RnX3JlY3ZfcHNsX3JlcShzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCB2b2lkICphcmcsXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTQ2Ni1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6MTQ2NzpzdGF0aWMgdm9pZCBkaWdpdGFsX3RnX3NlbmRfYXRyX3Jlc19jb21wbGV0ZShzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xNDY4LVxcdFxcdFxcdFxcdFxcdCAgICAgdm9pZCAqYXJnLCBzdHJ1Y3Qgc2tfYnVmZiAqcmVzcClcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYz0xNDk4PXN0YXRpYyBpbnQgZGlnaXRhbF90Z19zZW5kX2F0cl9yZXMoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xNTQyLVxcdHJjID0gZGlnaXRhbF90Z19zZW5kX2NtZChkZGV2LCBza2IsIDk5OSxcXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6MTU0MzpcXHRcXHRcXHRcXHQgZGlnaXRhbF90Z19zZW5kX2F0cl9yZXNfY29tcGxldGUsIE5VTEwpO1xcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xNTQ0LVxcdGlmIChyYylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDA6NTEuNDEzNjM5NzA4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU3Mzk3ODE0NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBVFIgUmVzcG9uc2UgSGFuZGxpbmcgYW5kIERhdGEgR2F0aGVyaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgYGRpZ2l0YWxfdGdfc2VuZF9hdHJfcmVzYCBraWNrZWQgdGhpbmdzIG9mZiBieSBzZW5kaW5nIHRoZSBBVFIgcmVzcG9uc2UgYW5kIHJlZ2lzdGVyaW5nIGBkaWdpdGFsX3RnX3NlbmRfYXRyX3Jlc19jb21wbGV0ZWAgYXMgaXRzIGNhbGxiYWNrLiBNYWtlcyBzZW5zZS4gTm93LCBgZGlnaXRhbF90Z19zZW5kX2F0cl9yZXNfY29tcGxldGVgIGlzIHRyaWdnZXJlZCB3aGVuIGEgcmVzcG9uc2UgY29tZXMgYmFjaywgcHJlc3VtYWJseSBmcm9tIHRoZSBpbml0aWF0b3IuIEl0J3Mgc3VwcG9zZWQgdG8gaGFuZGxlIHRoYXQgcmVzcG9uc2UgYHNrYmAuXG5cbkxvb2tpbmcgYXQgdGhlIHBhdGNoLCB0aGUgY29kZSBub3cgY2hlY2tzIGZvciB0aGUgcmVzcG9uc2UgYHNrYmAgbGVuZ3RoLiBBbiBlbXB0eSByZXNwb25zZSBpcyBjb25zaWRlcmVkIGBiYWRfZnJhbWVgLCBhbmQgd2UganVtcCBzdHJhaWdodCB0byBgZGlnaXRhbF9wb2xsX25leHRfdGVjaGAuIFRoZSBjb2RlIG5vdyBjYWxjdWxhdGVzIHRoZSBgb2Zmc2V0YC4gSXQgYWxzbyBhY2NvdW50cyBmb3IgYERJR0lUQUxfTkZDX0RFUF9ORkNBX1NPRF9TQmAuIFRoaXMgbWFrZXMgc2Vuc2UsIGFzIGEgc2hvcnQgcmVzcG9uc2UgKGxlc3MgdGhhbiB0aGUgb2Zmc2V0KSBpcyBhbHNvIGNvbnNpZGVyZWQgYSBgYmFkX2ZyYW1lYC5cblxuVGhlIGtleSBwYXJ0IGlzIHRoZSBsb2dpYyBpbnNpZGUgYGRpZ2l0YWxfdGdfc2VuZF9hdHJfcmVzX2NvbXBsZXRlYDogSWYgdGhlIHJlc3BvbnNlIGlzIGdvb2QsIHRoZW4gaXQgZWl0aGVyIGNhbGxzIGBkaWdpdGFsX3RnX3JlY3ZfcHNsX3JlcWAgb3IgYGRpZ2l0YWxfdGdfcmVjdl9kZXBfcmVxYCBkZXBlbmRpbmcgb24gdGhlIHN0YXRlLCB3aGljaCBpcyBhIGZhaXJseSBzdHJhaWdodGZvcndhcmQgc3RhdGUgbWFjaGluZS4gVGhlIG90aGVyIHBhcnQgaXMgdGhlIGBiYWRfZnJhbWVgIGVycm9yIGhhbmRsaW5nLiBJdCBmcmVlcyB0aGUgYHNrYmAgYW5kIGdvZXMgdG8gdGhlIG5leHQgdGVjaCwgd2hpY2ggaXMgcmVhc29uYWJsZS5cblxuTm93LCBsZXQncyBsb29rIGF0IGBkaWdpdGFsX3JlY3ZfZGVwX2RhdGFfZ2F0aGVyYC4gSGVyZSwgdGhlIGZ1bmN0aW9uIGFsbG9jYXRlcyBhIGBjaGFpbmluZ19za2JgIGlmIHRoZSBgRElHSVRBTF9ORkNfREVQX01JX0JJVF9TRVRgIGJpdCBpcyBzZXQgYW5kIHRoZSBgY2hhaW5pbmdfc2tiYCBkb2Vzbid0IGV4aXN0LiBOb3cgdGhlIGBjaGFpbmluZ19za2JgIGlzIGFsbG9jYXRlZCB2aWEgYGRpZ2l0YWxfc2tiX2FsbG9jYC5cblxuSWYgdGhlIGBjaGFpbmluZ19za2JgIGFscmVhZHkgZXhpc3RzLCBvciBoYXMganVzdCBiZWVuIGFsbG9jYXRlZCwgYW5kIHRoZSByZXNwb25zZSBsZW5ndGggaXMgZ3JlYXRlciB0aGFuIHRoZSBhdmFpbGFibGUgc3BhY2UgaW4gdGhlIGBza2JfdGFpbHJvb21gLCBpdCBuZWVkcyB0byBncm93LiBJdCB1c2VzIGBza2JfY29weV9leHBhbmRgIHRvIGdyb3cgdGhlIGBza2JgLiBUaGUgYHNrYl9jb3B5X2V4cGFuZGAgZnVuY3Rpb24gaXMgYSBjcnVjaWFsIHBhcnQuIEl0IGV4cGFuZHMgdGhlIGJ1ZmZlciBvZiBhbiBgc2tiYCwgY29waWVzIGl0cyBkYXRhLCBhbmQgdGhlbiBmcmVlcyB0aGUgb2xkIGJ1ZmZlci4gSXQgaXMgdXNlZCBoZXJlIHRvIGNvcHkgdGhlIHJlY2VpdmVkIGRhdGEgaW50byB0aGUgYGNoYWluaW5nX3NrYmAgc28gdGhhdCBpdCBkb2Vzbid0IG92ZXJmbG93LiBJdCBhbHNvIGFkZHMgc29tZSBoZWFkcm9vbSB0byB0aGUgYWxsb2NhdGVkIHNwYWNlLlxuXG5TbywgdGhlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHdoYXQgYGRpZ2l0YWxfc2tiX2FsbG9jYCBpcyBkb2luZywgYXMgdGhpcyBpcyB3aGVyZSB0aGUgYHNrYmAgaXMgYWxsb2NhdGVkLiBMZXQncyBzZWUgd2hhdCB0aGF0IGRvZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMzMwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQwOjU3LjE1MzQyNDgzNloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwNzIyNDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRpZ2l0YWxfc2tiX2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25mYy9kaWdpdGFsLmg9NDA9c3RydWN0IGRpZ2l0YWxfZGF0YV9leGNoIHtcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbC5oLTQ0LVxcbm5ldC9uZmMvZGlnaXRhbC5oOjQ1OnN0cnVjdCBza19idWZmICpkaWdpdGFsX3NrYl9hbGxvYyhzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxcbm5ldC9uZmMvZGlnaXRhbC5oLTQ2LVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IGxlbik7XFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jPTI3PXN0cnVjdCBkaWdpdGFsX2NtZCB7XFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jLTQxLVxcbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmM6NDI6c3RydWN0IHNrX2J1ZmYgKmRpZ2l0YWxfc2tiX2FsbG9jKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXFxubmV0L25mYy9kaWdpdGFsX2NvcmUuYy00My1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBsZW4pXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM9MjAwPWRpZ2l0YWxfc2VuZF9kZXBfZGF0YV9wcmVwKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMjA4LVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzoyMDk6XFx0XFx0bmV3X3NrYiA9IGRpZ2l0YWxfc2tiX2FsbG9jKGRkZXYsIGRkZXYtXFx1MDAzZXJlbW90ZV9wYXlsb2FkX21heCk7XFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTIxMC1cXHRcXHRpZiAoIW5ld19za2IpIHtcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYz0yMzE9ZGlnaXRhbF9yZWN2X2RlcF9kYXRhX2dhdGhlcihzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCB1OCBwZmIsXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMjQyLVxcdFxcdGRkZXYtXFx1MDAzZWNoYWluaW5nX3NrYiA9XFxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjI0MzpcXHRcXHRcXHRkaWdpdGFsX3NrYl9hbGxvYyhkZGV2LFxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0yNDQtXFx0XFx0XFx0XFx0XFx0ICA4ICogZGRldi1cXHUwMDNlbG9jYWxfcGF5bG9hZF9tYXgpO1xcbi0tXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jPTM1OT1zdGF0aWMgaW50IGRpZ2l0YWxfaW5fc2VuZF9wc2xfcmVxKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMzY2LVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzozNjc6XFx0c2tiID0gZGlnaXRhbF9za2JfYWxsb2MoZGRldiwgc2l6ZW9mKCpwc2xfcmVxKSk7XFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTM2OC1cXHRpZiAoIXNrYilcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYz00NzE9aW50IGRpZ2l0YWxfaW5fc2VuZF9hdHJfcmVxKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtNDg3LVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzo0ODg6XFx0c2tiID0gZGlnaXRhbF9za2JfYWxsb2MoZGRldiwgc2l6ZSk7XFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTQ4OS1cXHRpZiAoIXNrYilcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYz01Mjk9c3RhdGljIGludCBkaWdpdGFsX2luX3NlbmRfYWNrKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtNTM1LVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzo1MzY6XFx0c2tiID0gZGlnaXRhbF9za2JfYWxsb2MoZGRldiwgMSk7XFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTUzNy1cXHRpZiAoIXNrYilcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYz01NjY9c3RhdGljIGludCBkaWdpdGFsX2luX3NlbmRfbmFjayhzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxcbi0tXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTU3Mi1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6NTczOlxcdHNrYiA9IGRpZ2l0YWxfc2tiX2FsbG9jKGRkZXYsIDEpO1xcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy01NzQtXFx0aWYgKCFza2IpXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM9NTk4PXN0YXRpYyBpbnQgZGlnaXRhbF9pbl9zZW5kX2F0bihzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxcbi0tXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTYwNC1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6NjA1OlxcdHNrYiA9IGRpZ2l0YWxfc2tiX2FsbG9jKGRkZXYsIDEpO1xcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy02MDYtXFx0aWYgKCFza2IpXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM9NjI5PXN0YXRpYyBpbnQgZGlnaXRhbF9pbl9zZW5kX3J0b3goc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy02NDAtXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjY0MTpcXHRza2IgPSBkaWdpdGFsX3NrYl9hbGxvYyhkZGV2LCAxKTtcXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtNjQyLVxcdGlmICghc2tiKVxcbi0tXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jPTk3OD1zdGF0aWMgaW50IGRpZ2l0YWxfdGdfc2VuZF9hY2soc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy05ODQtXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjk4NTpcXHRza2IgPSBkaWdpdGFsX3NrYl9hbGxvYyhkZGV2LCAxKTtcXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtOTg2LVxcdGlmICghc2tiKVxcbi0tXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jPTEwMjQ9c3RhdGljIGludCBkaWdpdGFsX3RnX3NlbmRfYXRuKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYpXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTAyOS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6MTAzMDpcXHRza2IgPSBkaWdpdGFsX3NrYl9hbGxvYyhkZGV2LCAxKTtcXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTAzMS1cXHRpZiAoIXNrYilcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYz0xMzY1PXN0YXRpYyBpbnQgZGlnaXRhbF90Z19zZW5kX3BzbF9yZXMoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdTggZGlkLFxcbi0tXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTEzNzEtXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjEzNzI6XFx0c2tiID0gZGlnaXRhbF9za2JfYWxsb2MoZGRldiwgc2l6ZW9mKHN0cnVjdCBkaWdpdGFsX3BzbF9yZXMpKTtcXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTM3My1cXHRpZiAoIXNrYilcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYz0xNDk4PXN0YXRpYyBpbnQgZGlnaXRhbF90Z19zZW5kX2F0cl9yZXMoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xNTEwLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzoxNTExOlxcdHNrYiA9IGRpZ2l0YWxfc2tiX2FsbG9jKGRkZXYsIHNpemVvZihzdHJ1Y3QgZGlnaXRhbF9hdHJfcmVzKSArIGdiX2xlbik7XFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTE1MTItXFx0aWYgKCFza2IpXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jPTI1MT1zdGF0aWMgaW50IGRpZ2l0YWxfaW5fc2VuZF9yYXRzKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTI1Ni1cXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jOjI1NzpcXHRza2IgPSBkaWdpdGFsX3NrYl9hbGxvYyhkZGV2LCAyKTtcXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTI1OC1cXHRpZiAoIXNrYilcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM9MzQxPXN0YXRpYyBpbnQgZGlnaXRhbF9pbl9zZW5kX3NlbF9yZXEoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtMzQ5LVxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM6MzUwOlxcdHNrYiA9IGRpZ2l0YWxfc2tiX2FsbG9jKGRkZXYsIHNpemVvZihzdHJ1Y3QgZGlnaXRhbF9zZWxfcmVxKSk7XFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy0zNTEtXFx0aWYgKCFza2IpXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jPTQ0OD1zdGF0aWMgaW50IGRpZ2l0YWxfaW5fc2VuZF9zZGRfcmVxKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTQ1OS1cXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jOjQ2MDpcXHRza2IgPSBkaWdpdGFsX3NrYl9hbGxvYyhkZGV2LCAyKTtcXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTQ2MS1cXHRpZiAoIXNrYilcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM9NTI3PWludCBkaWdpdGFsX2luX3NlbmRfc2Vuc19yZXEoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdTggcmZfdGVjaClcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtNTQxLVxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM6NTQyOlxcdHNrYiA9IGRpZ2l0YWxfc2tiX2FsbG9jKGRkZXYsIDEpO1xcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtNTQzLVxcdGlmICghc2tiKVxcbi0tXFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYz02MTg9c3RhdGljIGludCBkaWdpdGFsX2luX3NlbmRfYXR0cmliX3JlcShzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxcbi0tXFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy02MjUtXFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYzo2MjY6XFx0c2tiID0gZGlnaXRhbF9za2JfYWxsb2MoZGRldiwgc2l6ZW9mKCphdHRyaWJfcmVxKSk7XFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy02MjctXFx0aWYgKCFza2IpXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jPTcxND1pbnQgZGlnaXRhbF9pbl9zZW5kX3NlbnNiX3JlcShzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCB1OCByZl90ZWNoKVxcbi0tXFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy03MjktXFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYzo3MzA6XFx0c2tiID0gZGlnaXRhbF9za2JfYWxsb2MoZGRldiwgc2l6ZW9mKCpzZW5zYl9yZXEpKTtcXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTczMS1cXHRpZiAoIXNrYilcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM9ODA0PWludCBkaWdpdGFsX2luX3NlbmRfc2Vuc2ZfcmVxKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHU4IHJmX3RlY2gpXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTgyMS1cXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jOjgyMjpcXHRza2IgPSBkaWdpdGFsX3NrYl9hbGxvYyhkZGV2LCBzaXplKTtcXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTgyMy1cXHRpZiAoIXNrYilcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM9ODk1PWludCBkaWdpdGFsX2luX3NlbmRfaXNvMTU2OTNfaW52X3JlcShzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCB1OCByZl90ZWNoKVxcbi0tXFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy05MTAtXFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYzo5MTE6XFx0c2tiID0gZGlnaXRhbF9za2JfYWxsb2MoZGRldiwgc2l6ZW9mKCpyZXEpKTtcXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTkxMi1cXHRpZiAoIXNrYilcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM9OTM1PXN0YXRpYyBpbnQgZGlnaXRhbF90Z19zZW5kX3NlbF9yZXMoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldilcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtOTM5LVxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM6OTQwOlxcdHNrYiA9IGRpZ2l0YWxfc2tiX2FsbG9jKGRkZXYsIDEpO1xcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtOTQxLVxcdGlmICghc2tiKVxcbi0tXFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYz05OTQ9c3RhdGljIGludCBkaWdpdGFsX3RnX3NlbmRfc2RkX3JlcyhzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2KVxcbi0tXFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy05OTktXFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYzoxMDAwOlxcdHNrYiA9IGRpZ2l0YWxfc2tiX2FsbG9jKGRkZXYsIHNpemVvZihzdHJ1Y3QgZGlnaXRhbF9zZGRfcmVzKSk7XFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy0xMDAxLVxcdGlmICghc2tiKVxcbi0tXFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYz0xMDU4PXN0YXRpYyBpbnQgZGlnaXRhbF90Z19zZW5kX3NlbnNfcmVzKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYpXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTEwNjMtXFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYzoxMDY0OlxcdHNrYiA9IGRpZ2l0YWxfc2tiX2FsbG9jKGRkZXYsIDIpO1xcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtMTA2NS1cXHRpZiAoIXNrYilcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM9MTEyOT1zdGF0aWMgaW50IGRpZ2l0YWxfdGdfc2VuZF9zZW5zZl9yZXMoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtMTE0MS1cXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jOjExNDI6XFx0c2tiID0gZGlnaXRhbF9za2JfYWxsb2MoZGRldiwgc2l6ZSk7XFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy0xMTQzLVxcdGlmICghc2tiKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MDo1Ny4zMTQxNTMyOTRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTM3MTEyOTA0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgSSBhbmFseXplIHRoaXMgY29kZSBzbmlwcGV0OlxuXG4qKkFuYWx5emluZyBORkMgRGF0YSBSZWNlcHRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGZ1bmN0aW9uIGBkaWdpdGFsX3JlY3ZfZGVwX2RhdGFfZ2F0aGVyYCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIHVzaW5nIGBuZmNfYWxsb2NfcmVjdl9za2IoKWAuIFNwZWNpZmljYWxseSwgSSBzZWUgaXQncyBhbGxvY2F0aW5nIGFuIHNrYiB3aXRoIGEgc2l6ZSBvZiBgOCAqIGRkZXYtXHUwMDNlbG9jYWxfcGF5bG9hZF9tYXhgIHVzaW5nIGBHRlBfS0VSTkVMYC4gSG1tbSwgY3J1Y2lhbCBwb2ludCBoZXJlOiBgbmZjX2FsbG9jX3JlY3Zfc2tiKClgIGFsbG9jYXRlcyB3aXRob3V0IGFueSBoZWFkcm9vbSBvciB0YWlscm9vbS4gVGhhdCdzIGEgcG90ZW50aWFsIGFyZWEgZm9yIHByb2JsZW1zLCBlc3BlY2lhbGx5IGlmIHRoZXJlJ3MgYW55IG5lZWQgdG8gcHJlcGVuZCBoZWFkZXJzIG9yIGFwcGVuZCB0cmFpbGVycyBsYXRlciBvbi5cblxuTm93LCBpZiBgZGRldi1cdTAwM2VjaGFpbmluZ19za2JgIGlzIGludm9sdmVkLCBvciB0aGF0IHNrYiBpcyBwYXNzZWQgYXJvdW5k4oCmd2FpdCwgSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoYXQgcG90ZW50aWFsIGlzc3VlIG1vcmUgY2xvc2VseS4gSSBzaG91bGQgY2hlY2sgb3V0IGBkaWdpdGFsX3NrYl9hbGxvY2AuIExldCdzIGRpZyBpbnRvIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgc2VlIHdoYXQncyBoYXBwZW5pbmcgdGhlcmUgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugc2ticyBhcmUgYWN0dWFsbHkgaGFuZGxlZCBhbmQgaWYgd2UncmUgcnVubmluZyBpbnRvIGlzc3Vlcy4gVGltZSB0byBpbnZlc3RpZ2F0ZSFcblxuXG4iLCJJbnB1dFRva2VucyI6NDU5MDIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDE6MDIuNjg1Mjg0OTQ3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4OTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZmMvZGlnaXRhbF9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNDA6XFx0fTtcXG4gIDQxOlxcdFxcbiAgNDI6XFx0c3RydWN0IHNrX2J1ZmYgKmRpZ2l0YWxfc2tiX2FsbG9jKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXFxuICA0MzpcXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBsZW4pXFxuICA0NDpcXHR7XFxuICA0NTpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiAgNDY6XFx0XFxuICA0NzpcXHRcXHRza2IgPSBhbGxvY19za2IobGVuICsgZGRldi1cXHUwMDNldHhfaGVhZHJvb20gKyBkZGV2LVxcdTAwM2V0eF90YWlscm9vbSxcXG4gIDQ4OlxcdFxcdFxcdFxcdEdGUF9LRVJORUwpO1xcbiAgNDk6XFx0XFx0aWYgKHNrYilcXG4gIDUwOlxcdFxcdFxcdHNrYl9yZXNlcnZlKHNrYiwgZGRldi1cXHUwMDNldHhfaGVhZHJvb20pO1xcbiAgNTE6XFx0XFxuICA1MjpcXHRcXHRyZXR1cm4gc2tiO1xcbiAgNTM6XFx0fVxcbiAgNTQ6XFx0XFxuICA1NTpcXHR2b2lkIGRpZ2l0YWxfc2tiX2FkZF9jcmMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY3JjX2Z1bmNfdCBjcmNfZnVuYywgdTE2IGluaXQsXFxuICA1NjpcXHRcXHRcXHRcXHQgdTggYml0d2lzZV9pbnYsIHU4IG1zYl9maXJzdClcXG4gIDU3OlxcdHtcXG4gIDU4OlxcdFxcdHUxNiBjcmM7XFxuICA1OTpcXHRcXG4gIDYwOlxcdFxcdGNyYyA9IGNyY19mdW5jKGluaXQsIHNrYi1cXHUwMDNlZGF0YSwgc2tiLVxcdTAwM2VsZW4pO1xcbiAgNjE6XFx0XFxuICA2MjpcXHRcXHRpZiAoYml0d2lzZV9pbnYpXFxuICA2MzpcXHRcXHRcXHRjcmMgPSB+Y3JjO1xcbiAgNjQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQxOjAyLjY4NTM2NTk3N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NzMyMDkxNDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgUmVjZW50IE5GQyBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIE5GQyBkcml2ZXIgcGF0Y2ggYW5kIGhlcmUncyB3aGF0IEknbSBzZWVpbmcuICBgZGlnaXRhbF9za2JfYWxsb2NgIGlzIGFsbG9jYXRpbmcgc2ticyB3aXRoIHNwZWNpZmljIGhlYWRyb29tIGFuZCB0YWlscm9vbSB2YWx1ZXMsIGFuZCBjcnVjaWFsbHksIGl0J3MgKnJlc2VydmluZyogdGhhdCBoZWFkcm9vbS4gIFRoYXQncyBzdGFuZGFyZCBwcmFjdGljZSwgbm90aGluZyBpbmhlcmVudGx5IHdyb25nIHRoZXJlLlxuXG5UaGVuLCB0aGVyZSdzIGEgY2hhbmdlIGluIGBza2JfY29weV9leHBhbmRgLiAgVGhlIG9sZCBjb2RlIHdhcyB1c2luZyBgc2tiX2hlYWRyb29tKClgIHRvIGRldGVybWluZSB0aGUgZXhwYW5zaW9uIHNpemUsIGJ1dCB0aGUgbmV3IGNvZGUgaXMgbm93IGV4cGxpY2l0bHkgdXNpbmcgYGRkZXYtXHUwMDNldHhfaGVhZHJvb21gIGFuZCBhZGRpbmcgYGRkZXYtXHUwMDNldHhfdGFpbHJvb21gIHRvIHRoZSBleHBhbnNpb24gc2l6ZS4gIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCB0aGVyZSdzIGEgbW9yZSBkZWxpYmVyYXRlIGNvbnRyb2wgb3ZlciBidWZmZXIgc2l6ZXMgbm93LCBhbmQgdGhlIGFkZGl0aW9uIG9mIHRhaWxyb29tIGltcGxpZXMgdGhleSdyZSBhY2NvdW50aW5nIGZvciB0aGUgc3BhY2UgbmVlZGVkIGZvciBkYXRhIGFwcGVuZGVkIGF0IHRoZSBlbmQgb2YgdGhlIHNrYi4gIFRoYXQncyBhIGdvb2Qgc2lnbiDigJMgbW9yZSBleHBsaWNpdCBtZW1vcnkgbWFuYWdlbWVudCBpcyBnZW5lcmFsbHkgYmV0dGVyIGZvciBwcmV2ZW50aW5nIGJ1ZmZlciBvdmVyZmxvd3MgYW5kIG90aGVyIHJlbGF0ZWQgaXNzdWVzLlxuXG5OZXh0LCBJIHNlZSBhIHNpZ25pZmljYW50IGJ1ZyBmaXggaW4gYGRpZ2l0YWxfdGdfc2VuZF9hdHJfcmVzX2NvbXBsZXRlYC4gSXQgbG9va3MgbGlrZSB0aGVyZSB3YXMgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkIHZ1bG5lcmFiaWxpdHkuIFRoZSBwcmV2aW91cyBjb2RlIHdhcyBhY2Nlc3NpbmcgYHJlc3AtXHUwMDNlZGF0YVswXWAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGByZXNwLVx1MDAzZWxlbmAgd2FzIDAsIGFuZCBhbHNvIGFjY2Vzc2luZyBgcmVzcC1cdTAwM2VkYXRhW29mZnNldF1gIHdpdGhvdXQgZW5zdXJpbmcgYHJlc3AtXHUwMDNlbGVuYCB3YXMgbGFyZ2UgZW5vdWdoLiBUaGlzIGlzIGEgY2xhc3NpYyBleGFtcGxlIG9mIGFuIHVuY2hlY2tlZCBhY2Nlc3MgdGhhdCBjb3VsZCBsZWFkIHRvIGEgY3Jhc2ggb3IsIHdvcnNlLCBhIHNlY3VyaXR5IGV4cGxvaXQuICBUaGUgbmV3IGNvZGUgZXhwbGljaXRseSBjaGVja3MgYHJlc3AtXHUwMDNlbGVuYCBiZWZvcmUgYWNjZXNzaW5nIHRoZSBkYXRhIGF0IHRob3NlIG9mZnNldHMsIGNvcnJlY3RseSBoYW5kbGluZyB0aGUgY2FzZSB3aGVyZSB0aGUgcmVzcG9uc2UgZGF0YSBpcyBlbXB0eSBvciB0b28gc2hvcnQuICBHb29kLCBpdCdzIGEgY3JpdGljYWwgZml4LiBUaGVzZSBhcmUgdGhlIGtpbmRzIG9mIGlzc3VlcyB0aGF0IHN5emthbGxlciBvciBhIHRob3JvdWdoIG1hbnVhbCBhdWRpdCB3b3VsZCBsaWtlbHkgdW5jb3Zlci5cblxuTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgYW5kLCBtb3N0IGltcG9ydGFudGx5LCBzeXprYWxsZXIuIElmIGl0IGlzLCB0aGVuIHRoZSBmaXggY2FuIGFjdHVhbGx5IGJlIHRlc3RlZCB0byBlbnN1cmUgdGhlIGZpeCBpcyB3b3JraW5nIGFzIGludGVuZGVkLlxuXG5UbyBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgcmVhY2hhYmxlIEkgbmVlZCB0byBsb29rIGF0IGhvdyBORkMgZGlnaXRhbCBjYW4gYmUgZXhlcmNpc2VkLiBUaGUgYG5mY3NpbS5jYCB2aXJ0dWFsIE5GQyBkZXZpY2UgaXMgYSBnb29kIGNhbmRpZGF0ZSwgYnV0IGlzIGl0IGVuYWJsZWQgaW4gc3l6a2FsbGVyIG9yIGNhbiBpdCBiZSBjb25uZWN0ZWQgdG8gaXQ/XG5cblN5emthbGxlciBzdXBwb3J0cyBgc3l6X3VzYl9jb25uZWN0YCBvciBkaXJlY3QgVVNCIGVtdWxhdGlvbiwgYW5kIEkga25vdyB0aGF0IGBwb3J0MTAwLmNgIGlzIGEgVVNCIGRyaXZlci4gIENoZWNraW5nIHRoZSBkZXZpY2UgdGFibGUgY29uZmlybXMgdGhhdCBgcG9ydDEwMGAgc3VwcG9ydHMgYSBjb3VwbGUgb2YgU29ueSBORkMgZGV2aWNlcyAoMHgwNTRjOjB4MDZjMSBhbmQgMHgwNTRjOjB4MDZjMykuIFllcyEgU3l6a2FsbGVyIGZ1enplcyBVU0IgZHJpdmVycyB0aHJvdWdoIFJhdyBHYWRnZXQgYW5kIGBwb3J0MTAwYCBpcyBvbmUuXG5cblRoaXMgaXMgcHJvbWlzaW5nIHNpbmNlIFVTQiBzdXBwb3J0IGlzIGF2YWlsYWJsZS4gIEknbGwgYWxzbyBoYXZlIHRvIGNoZWNrIHRoZSBuZXRsaW5rIGludGVyZmFjZSwgZXNwZWNpYWxseSB0aGUgREVQIGNvbW1hbmRzIHRvIHNlZSBpZiB0aGF0J3MgcmVhY2hhYmxlLiBTeXprYWxsZXIgaW1wbGVtZW50cyB0aGUgYG5ldC9uZmNgIG5ldGxpbmsgYW5kIHNvY2tldCBpbnRlcmZhY2VzIChgZ2VubGAgZmFtaWx5IGBuZmNgIGFuZCBgQUZfTkZDYCksIHNvIEkgd2lsbCBpbnZlc3RpZ2F0ZSB0aGVtIHRvIHNlZSBob3cgREVQIGNvbW1hbmRzIGFyZSB0cmlnZ2VyZWQgYW5kIGlmIHRoZXkgYXJlIHJlbGV2YW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjYyNywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQxOjA5LjQxNzQ1OTY3NVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1MDAxNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkZDX0NNRF9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25mY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmZjL25ldGxpbmsuYz02MT1zdGF0aWMgaW50IG5mY19nZW5sX3NlbmRfdGFyZ2V0KHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBuZmNfdGFyZ2V0ICp0YXJnZXQsXFxuLS1cXG5uZXQvbmZjL25ldGxpbmsuYy02Ni1cXHRoZHIgPSBnZW5sbXNnX3B1dChtc2csIE5FVExJTktfQ0IoY2ItXFx1MDAzZXNrYikucG9ydGlkLCBjYi1cXHUwMDNlbmxoLVxcdTAwM2VubG1zZ19zZXEsXFxubmV0L25mYy9uZXRsaW5rLmM6Njc6XFx0XFx0XFx0ICBcXHUwMDI2bmZjX2dlbmxfZmFtaWx5LCBmbGFncywgTkZDX0NNRF9HRVRfVEFSR0VUKTtcXG5uZXQvbmZjL25ldGxpbmsuYy02OC1cXHRpZiAoIWhkcilcXG4tLVxcbm5ldC9uZmMvbmV0bGluay5jPTU3Mj1zdGF0aWMgaW50IG5mY19nZW5sX3NlbmRfZGV2aWNlKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBuZmNfZGV2ICpkZXYsXFxuLS1cXG5uZXQvbmZjL25ldGxpbmsuYy01NzktXFx0aGRyID0gZ2VubG1zZ19wdXQobXNnLCBwb3J0aWQsIHNlcSwgXFx1MDAyNm5mY19nZW5sX2ZhbWlseSwgZmxhZ3MsXFxubmV0L25mYy9uZXRsaW5rLmM6NTgwOlxcdFxcdFxcdCAgTkZDX0NNRF9HRVRfREVWSUNFKTtcXG5uZXQvbmZjL25ldGxpbmsuYy01ODEtXFx0aWYgKCFoZHIpXFxuLS1cXG5uZXQvbmZjL25ldGxpbmsuYz02NTI9aW50IG5mY19nZW5sX2RlcF9saW5rX3VwX2V2ZW50KHN0cnVjdCBuZmNfZGV2ICpkZXYsIHUzMiB0YXJnZXRfaWR4LFxcbi0tXFxubmV0L25mYy9uZXRsaW5rLmMtNjYzLVxcbm5ldC9uZmMvbmV0bGluay5jOjY2NDpcXHRoZHIgPSBnZW5sbXNnX3B1dChtc2csIDAsIDAsIFxcdTAwMjZuZmNfZ2VubF9mYW1pbHksIDAsIE5GQ19DTURfREVQX0xJTktfVVApO1xcbm5ldC9uZmMvbmV0bGluay5jLTY2NS1cXHRpZiAoIWhkcilcXG4tLVxcbm5ldC9uZmMvbmV0bGluay5jPTY5MT1pbnQgbmZjX2dlbmxfZGVwX2xpbmtfZG93bl9ldmVudChzdHJ1Y3QgbmZjX2RldiAqZGV2KVxcbi0tXFxubmV0L25mYy9uZXRsaW5rLmMtNzAyLVxcdGhkciA9IGdlbmxtc2dfcHV0KG1zZywgMCwgMCwgXFx1MDAyNm5mY19nZW5sX2ZhbWlseSwgMCxcXG5uZXQvbmZjL25ldGxpbmsuYzo3MDM6XFx0XFx0XFx0ICBORkNfQ01EX0RFUF9MSU5LX0RPV04pO1xcbm5ldC9uZmMvbmV0bGluay5jLTcwNC1cXHRpZiAoIWhkcilcXG4tLVxcbm5ldC9uZmMvbmV0bGluay5jPTk5Mj1zdGF0aWMgaW50IG5mY19nZW5sX3NlbmRfcGFyYW1zKHN0cnVjdCBza19idWZmICptc2csXFxuLS1cXG5uZXQvbmZjL25ldGxpbmsuYy05OTgtXFx0aGRyID0gZ2VubG1zZ19wdXQobXNnLCBwb3J0aWQsIHNlcSwgXFx1MDAyNm5mY19nZW5sX2ZhbWlseSwgMCxcXG5uZXQvbmZjL25ldGxpbmsuYzo5OTk6XFx0XFx0XFx0ICBORkNfQ01EX0xMQ19HRVRfUEFSQU1TKTtcXG5uZXQvbmZjL25ldGxpbmsuYy0xMDAwLVxcdGlmICghaGRyKVxcbi0tXFxubmV0L25mYy9uZXRsaW5rLmM9MTI1ND1pbnQgbmZjX2dlbmxfZndfZG93bmxvYWRfZG9uZShzdHJ1Y3QgbmZjX2RldiAqZGV2LCBjb25zdCBjaGFyICpmaXJtd2FyZV9uYW1lLFxcbi0tXFxubmV0L25mYy9uZXRsaW5rLmMtMTI2NC1cXHRoZHIgPSBnZW5sbXNnX3B1dChtc2csIDAsIDAsIFxcdTAwMjZuZmNfZ2VubF9mYW1pbHksIDAsXFxubmV0L25mYy9uZXRsaW5rLmM6MTI2NTpcXHRcXHRcXHQgIE5GQ19DTURfRldfRE9XTkxPQUQpO1xcbm5ldC9uZmMvbmV0bGluay5jLTEyNjYtXFx0aWYgKCFoZHIpXFxuLS1cXG5uZXQvbmZjL25ldGxpbmsuYz0xMzMyPXN0YXRpYyBpbnQgbmZjX2dlbmxfc2VuZF9zZShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgbmZjX2RldiAqZGV2LFxcbi0tXFxubmV0L25mYy9uZXRsaW5rLmMtMTM0MS1cXHRcXHRoZHIgPSBnZW5sbXNnX3B1dChtc2csIHBvcnRpZCwgc2VxLCBcXHUwMDI2bmZjX2dlbmxfZmFtaWx5LCBmbGFncyxcXG5uZXQvbmZjL25ldGxpbmsuYzoxMzQyOlxcdFxcdFxcdFxcdCAgTkZDX0NNRF9HRVRfU0UpO1xcbm5ldC9uZmMvbmV0bGluay5jLTEzNDMtXFx0XFx0aWYgKCFoZHIpXFxuLS1cXG5uZXQvbmZjL25ldGxpbmsuYz0xNDcyPXN0YXRpYyB2b2lkIHNlX2lvX2NiKHZvaWQgKmNvbnRleHQsIHU4ICphcGR1LCBzaXplX3QgYXBkdV9sZW4sIGludCBlcnIpXFxuLS1cXG5uZXQvbmZjL25ldGxpbmsuYy0xNDg0LVxcdGhkciA9IGdlbmxtc2dfcHV0KG1zZywgMCwgMCwgXFx1MDAyNm5mY19nZW5sX2ZhbWlseSwgMCxcXG5uZXQvbmZjL25ldGxpbmsuYzoxNDg1OlxcdFxcdFxcdCAgTkZDX0NNRF9TRV9JTyk7XFxubmV0L25mYy9uZXRsaW5rLmMtMTQ4Ni1cXHRpZiAoIWhkcilcXG4tLVxcbm5ldC9uZmMvbmV0bGluay5jPTE2Mjg9X19uZmNfYWxsb2NfdmVuZG9yX2NtZF9za2Ioc3RydWN0IG5mY19kZXYgKmRldiwgaW50IGFwcHJveGxlbixcXG4tLVxcbm5ldC9uZmMvbmV0bGluay5jLTE2MzktXFxubmV0L25mYy9uZXRsaW5rLmM6MTY0MDpcXHRoZHIgPSBuZmNfaGRyX3B1dChza2IsIHBvcnRpZCwgc2VxLCAwLCBORkNfQ01EX1ZFTkRPUik7XFxubmV0L25mYy9uZXRsaW5rLmMtMTY0MS1cXHRpZiAoIWhkcikge1xcbi0tXFxubmV0L25mYy9uZXRsaW5rLmM9MTY5Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfb3BzIG5mY19nZW5sX29wc1tdID0ge1xcbm5ldC9uZmMvbmV0bGluay5jLTE2OTctXFx0e1xcbm5ldC9uZmMvbmV0bGluay5jOjE2OTg6XFx0XFx0LmNtZCA9IE5GQ19DTURfR0VUX0RFVklDRSxcXG5uZXQvbmZjL25ldGxpbmsuYy0xNjk5LVxcdFxcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcXG4tLVxcbm5ldC9uZmMvbmV0bGluay5jLTE3MDQtXFx0e1xcbm5ldC9uZmMvbmV0bGluay5jOjE3MDU6XFx0XFx0LmNtZCA9IE5GQ19DTURfREVWX1VQLFxcbm5ldC9uZmMvbmV0bGluay5jLTE3MDYtXFx0XFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxcbi0tXFxubmV0L25mYy9uZXRsaW5rLmMtMTcxMC1cXHR7XFxubmV0L25mYy9uZXRsaW5rLmM6MTcxMTpcXHRcXHQuY21kID0gTkZDX0NNRF9ERVZfRE9XTixcXG5uZXQvbmZjL25ldGxpbmsuYy0xNzEyLVxcdFxcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcXG4tLVxcbm5ldC9uZmMvbmV0bGluay5jLTE3MTYtXFx0e1xcbm5ldC9uZmMvbmV0bGluay5jOjE3MTc6XFx0XFx0LmNtZCA9IE5GQ19DTURfU1RBUlRfUE9MTCxcXG5uZXQvbmZjL25ldGxpbmsuYy0xNzE4LVxcdFxcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcXG4tLVxcbm5ldC9uZmMvbmV0bGluay5jLTE3MjItXFx0e1xcbm5ldC9uZmMvbmV0bGluay5jOjE3MjM6XFx0XFx0LmNtZCA9IE5GQ19DTURfU1RPUF9QT0xMLFxcbm5ldC9uZmMvbmV0bGluay5jLTE3MjQtXFx0XFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxcbi0tXFxubmV0L25mYy9uZXRsaW5rLmMtMTcyOC1cXHR7XFxubmV0L25mYy9uZXRsaW5rLmM6MTcyOTpcXHRcXHQuY21kID0gTkZDX0NNRF9ERVBfTElOS19VUCxcXG5uZXQvbmZjL25ldGxpbmsuYy0xNzMwLVxcdFxcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcXG4tLVxcbm5ldC9uZmMvbmV0bGluay5jLTE3MzQtXFx0e1xcbm5ldC9uZmMvbmV0bGluay5jOjE3MzU6XFx0XFx0LmNtZCA9IE5GQ19DTURfREVQX0xJTktfRE9XTixcXG5uZXQvbmZjL25ldGxpbmsuYy0xNzM2LVxcdFxcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcXG4tLVxcbm5ldC9uZmMvbmV0bGluay5jLTE3NDAtXFx0e1xcbm5ldC9uZmMvbmV0bGluay5jOjE3NDE6XFx0XFx0LmNtZCA9IE5GQ19DTURfR0VUX1RBUkdFVCxcXG5uZXQvbmZjL25ldGxpbmsuYy0xNzQyLVxcdFxcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfFxcbi0tXFxubmV0L25mYy9uZXRsaW5rLmMtMTc0Ny1cXHR7XFxubmV0L25mYy9uZXRsaW5rLmM6MTc0ODpcXHRcXHQuY21kID0gTkZDX0NNRF9MTENfR0VUX1BBUkFNUyxcXG5uZXQvbmZjL25ldGxpbmsuYy0xNzQ5LVxcdFxcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcXG4tLVxcbm5ldC9uZmMvbmV0bGluay5jLTE3NTItXFx0e1xcbm5ldC9uZmMvbmV0bGluay5jOjE3NTM6XFx0XFx0LmNtZCA9IE5GQ19DTURfTExDX1NFVF9QQVJBTVMsXFxubmV0L25mYy9uZXRsaW5rLmMtMTc1NC1cXHRcXHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXFxuLS1cXG5uZXQvbmZjL25ldGxpbmsuYy0xNzU4LVxcdHtcXG5uZXQvbmZjL25ldGxpbmsuYzoxNzU5OlxcdFxcdC5jbWQgPSBORkNfQ01EX0xMQ19TRFJFUSxcXG5uZXQvbmZjL25ldGxpbmsuYy0xNzYwLVxcdFxcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcXG4tLVxcbm5ldC9uZmMvbmV0bGluay5jLTE3NjQtXFx0e1xcbm5ldC9uZmMvbmV0bGluay5jOjE3NjU6XFx0XFx0LmNtZCA9IE5GQ19DTURfRldfRE9XTkxPQUQsXFxubmV0L25mYy9uZXRsaW5rLmMtMTc2Ni1cXHRcXHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXFxuLS1cXG5uZXQvbmZjL25ldGxpbmsuYy0xNzcwLVxcdHtcXG5uZXQvbmZjL25ldGxpbmsuYzoxNzcxOlxcdFxcdC5jbWQgPSBORkNfQ01EX0VOQUJMRV9TRSxcXG5uZXQvbmZjL25ldGxpbmsuYy0xNzcyLVxcdFxcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcXG4tLVxcbm5ldC9uZmMvbmV0bGluay5jLTE3NzYtXFx0e1xcbm5ldC9uZmMvbmV0bGluay5jOjE3Nzc6XFx0XFx0LmNtZCA9IE5GQ19DTURfRElTQUJMRV9TRSxcXG5uZXQvbmZjL25ldGxpbmsuYy0xNzc4LVxcdFxcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcXG4tLVxcbm5ldC9uZmMvbmV0bGluay5jLTE3ODItXFx0e1xcbm5ldC9uZmMvbmV0bGluay5jOjE3ODM6XFx0XFx0LmNtZCA9IE5GQ19DTURfR0VUX1NFLFxcbm5ldC9uZmMvbmV0bGluay5jLTE3ODQtXFx0XFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxcbi0tXFxubmV0L25mYy9uZXRsaW5rLmMtMTc4OC1cXHR7XFxubmV0L25mYy9uZXRsaW5rLmM6MTc4OTpcXHRcXHQuY21kID0gTkZDX0NNRF9TRV9JTyxcXG5uZXQvbmZjL25ldGxpbmsuYy0xNzkwLVxcdFxcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcXG4tLVxcbm5ldC9uZmMvbmV0bGluay5jLTE3OTQtXFx0e1xcbm5ldC9uZmMvbmV0bGluay5jOjE3OTU6XFx0XFx0LmNtZCA9IE5GQ19DTURfQUNUSVZBVEVfVEFSR0VULFxcbm5ldC9uZmMvbmV0bGluay5jLTE3OTYtXFx0XFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxcbi0tXFxubmV0L25mYy9uZXRsaW5rLmMtMTgwMC1cXHR7XFxubmV0L25mYy9uZXRsaW5rLmM6MTgwMTpcXHRcXHQuY21kID0gTkZDX0NNRF9WRU5ET1IsXFxubmV0L25mYy9uZXRsaW5rLmMtMTgwMi1cXHRcXHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXFxuLS1cXG5uZXQvbmZjL25ldGxpbmsuYy0xODA2LVxcdHtcXG5uZXQvbmZjL25ldGxpbmsuYzoxODA3OlxcdFxcdC5jbWQgPSBORkNfQ01EX0RFQUNUSVZBVEVfVEFSR0VULFxcbm5ldC9uZmMvbmV0bGluay5jLTE4MDgtXFx0XFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxcbi0tXFxubmV0L25mYy9uZXRsaW5rLmM9MTgxND1zdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IG5mY19nZW5sX2ZhbWlseSBfX3JvX2FmdGVyX2luaXQgPSB7XFxuLS1cXG5uZXQvbmZjL25ldGxpbmsuYy0xODIyLVxcdC5uX29wcyA9IEFSUkFZX1NJWkUobmZjX2dlbmxfb3BzKSxcXG5uZXQvbmZjL25ldGxpbmsuYzoxODIzOlxcdC5yZXN2X3N0YXJ0X29wID0gTkZDX0NNRF9ERUFDVElWQVRFX1RBUkdFVCArIDEsXFxubmV0L25mYy9uZXRsaW5rLmMtMTgyNC1cXHQubWNncnBzID0gbmZjX2dlbmxfbWNncnBzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MTowOS40NjQ5NjU4MDJaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mzc3Nzk3NDc1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5GQyBHZW5lcmljIE5ldGxpbmsgT3BlcmF0aW9ucyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBuZmNfZ2VubF9vcHNgIHN0cnVjdHVyZS4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3c7IEkgbmVlZCB0byBzZWUgd2hhdCBlYWNoIGNvbW1hbmQgYWN0dWFsbHkgKmRvZXMqLiBgTkZDX0NNRF9TVEFSVF9QT0xMYCwgb2J2aW91c2x5LCBpbml0aWF0ZXMgYSBwb2xsaW5nIHNlcXVlbmNlLiBOb3csIGBORkNfQ01EX0RFUF9MSU5LX1VQYC4uLiB0aGF0J3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZywgZXN0YWJsaXNoaW5nIGEgRGF0YSBFeGNoYW5nZSBQcm90b2NvbCAoREVQKSBsaW5rLiBNeSBtYWluIGFyZWEgb2YgZXhwZXJ0aXNlIGlzIE5GQywgc28gdGhhdCBERVAgbGluayBpcyBhIGNyaXRpY2FsIHBoYXNlIHRvIHVuZGVyc3RhbmQuXG5cblNvLCBJIG5lZWQgdG8ga25vdyB0aGUgZGV0YWlscyEgV2hhdCdzIGhhcHBlbmluZyAqZHVyaW5nKiB0aGUgbGluay11cD8gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gVGhlIG9idmlvdXMgbmV4dCBzdGVwIGlzIHRvIHNlYXJjaCB0aGUgY29kZWJhc2UgZm9yIHRoZSByZWxldmFudCBmdW5jdGlvbiBjYWxscy4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBjYWxscyByZWxhdGVkIHRvIEFUUiAoQW5zd2VyIFRvIFJlc2V0KSBleGNoYW5nZSBiZWNhdXNlIGl0IGlzIGEgdml0YWwgcGFydCBvZiBpbml0aWF0aW5nIGNvbW11bmljYXRpb24uIEkgYW0gZ29pbmcgdG8gc2VhcmNoIGZvciBgZGlnaXRhbF9pbl9zZW5kX2F0cl9yZXFgLCBgZGlnaXRhbF90Z19yZWN2X2F0cl9yZXFgLCBhbmQgdGhlIGBkaWdpdGFsX2RlcF9saW5rX3VwYCBmdW5jdGlvbiBpdHNlbGYuIFRoZXNlIHdpbGwgZ2l2ZSBtZSBhIGdyZWF0IG92ZXJ2aWV3IG9mIHRoZSBpbml0aWFsaXphdGlvbiBwcm90b2NvbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTEyMjUsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MToxMy4yNDI5NDM4MTJaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3Nzk1MjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcF9saW5rX3VwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25mYy9jb3JlLmM9MjY4PXN0YXRpYyBzdHJ1Y3QgbmZjX3RhcmdldCAqbmZjX2ZpbmRfdGFyZ2V0KHN0cnVjdCBuZmNfZGV2ICpkZXYsIHUzMiB0YXJnZXRfaWR4KVxcbi0tXFxubmV0L25mYy9jb3JlLmMtMjc5LVxcbm5ldC9uZmMvY29yZS5jOjI4MDppbnQgbmZjX2RlcF9saW5rX3VwKHN0cnVjdCBuZmNfZGV2ICpkZXYsIGludCB0YXJnZXRfaW5kZXgsIHU4IGNvbW1fbW9kZSlcXG5uZXQvbmZjL2NvcmUuYy0yODEte1xcbi0tXFxubmV0L25mYy9jb3JlLmMtMjg4LVxcbm5ldC9uZmMvY29yZS5jOjI4OTpcXHRpZiAoIWRldi1cXHUwMDNlb3BzLVxcdTAwM2VkZXBfbGlua191cClcXG5uZXQvbmZjL2NvcmUuYy0yOTAtXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25mYy9jb3JlLmMtMjk4LVxcbm5ldC9uZmMvY29yZS5jOjI5OTpcXHRpZiAoZGV2LVxcdTAwM2VkZXBfbGlua191cCA9PSB0cnVlKSB7XFxubmV0L25mYy9jb3JlLmMtMzAwLVxcdFxcdHJjID0gLUVBTFJFQURZO1xcbi0tXFxubmV0L25mYy9jb3JlLmMtMzE1LVxcbm5ldC9uZmMvY29yZS5jOjMxNjpcXHRyYyA9IGRldi1cXHUwMDNlb3BzLVxcdTAwM2VkZXBfbGlua191cChkZXYsIHRhcmdldCwgY29tbV9tb2RlLCBnYiwgZ2JfbGVuKTtcXG5uZXQvbmZjL2NvcmUuYy0zMTctXFx0aWYgKCFyYykge1xcbi0tXFxubmV0L25mYy9jb3JlLmM9MzI3PWludCBuZmNfZGVwX2xpbmtfZG93bihzdHJ1Y3QgbmZjX2RldiAqZGV2KVxcbi0tXFxubmV0L25mYy9jb3JlLmMtMzQyLVxcbm5ldC9uZmMvY29yZS5jOjM0MzpcXHRpZiAoZGV2LVxcdTAwM2VkZXBfbGlua191cCA9PSBmYWxzZSkge1xcbm5ldC9uZmMvY29yZS5jLTM0NC1cXHRcXHRyYyA9IC1FQUxSRUFEWTtcXG4tLVxcbm5ldC9uZmMvY29yZS5jLTM0OS1cXHRpZiAoIXJjKSB7XFxubmV0L25mYy9jb3JlLmM6MzUwOlxcdFxcdGRldi1cXHUwMDNlZGVwX2xpbmtfdXAgPSBmYWxzZTtcXG5uZXQvbmZjL2NvcmUuYy0zNTEtXFx0XFx0ZGV2LVxcdTAwM2VhY3RpdmVfdGFyZ2V0ID0gTlVMTDtcXG4tLVxcbm5ldC9uZmMvY29yZS5jPTM2Mz1pbnQgbmZjX2RlcF9saW5rX2lzX3VwKHN0cnVjdCBuZmNfZGV2ICpkZXYsIHUzMiB0YXJnZXRfaWR4LFxcbi0tXFxubmV0L25mYy9jb3JlLmMtMzY1LXtcXG5uZXQvbmZjL2NvcmUuYzozNjY6XFx0ZGV2LVxcdTAwM2VkZXBfbGlua191cCA9IHRydWU7XFxubmV0L25mYy9jb3JlLmMtMzY3LVxcbi0tXFxubmV0L25mYy9jb3JlLmMtMzgyLVxcbm5ldC9uZmMvY29yZS5jOjM4MzpcXHRyZXR1cm4gbmZjX2dlbmxfZGVwX2xpbmtfdXBfZXZlbnQoZGV2LCB0YXJnZXRfaWR4LCBjb21tX21vZGUsIHJmX21vZGUpO1xcbm5ldC9uZmMvY29yZS5jLTM4NC19XFxuLS1cXG5uZXQvbmZjL2NvcmUuYz02NTU9aW50IG5mY190bV9kYXRhX3JlY2VpdmVkKHN0cnVjdCBuZmNfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbmZjL2NvcmUuYy02NTctXFx0LyogT25seSBMTENQIHRhcmdldCBtb2RlIGZvciBub3cgKi9cXG5uZXQvbmZjL2NvcmUuYzo2NTg6XFx0aWYgKGRldi1cXHUwMDNlZGVwX2xpbmtfdXAgPT0gZmFsc2UpIHtcXG5uZXQvbmZjL2NvcmUuYy02NTktXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuLS1cXG5uZXQvbmZjL2NvcmUuYz02OTY9aW50IG5mY190bV9kZWFjdGl2YXRlZChzdHJ1Y3QgbmZjX2RldiAqZGV2KVxcbm5ldC9uZmMvY29yZS5jLTY5Ny17XFxubmV0L25mYy9jb3JlLmM6Njk4OlxcdGRldi1cXHUwMDNlZGVwX2xpbmtfdXAgPSBmYWxzZTtcXG5uZXQvbmZjL2NvcmUuYy02OTktXFx0ZGV2LVxcdTAwM2VyZl9tb2RlID0gTkZDX1JGX05PTkU7XFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jPTU4Nj1zdGF0aWMgaW50IGRpZ2l0YWxfZGV2X2Rvd24oc3RydWN0IG5mY19kZXYgKm5mY19kZXYpXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jLTU5NC1cXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jOjU5NTpzdGF0aWMgaW50IGRpZ2l0YWxfZGVwX2xpbmtfdXAoc3RydWN0IG5mY19kZXYgKm5mY19kZXYsXFxubmV0L25mYy9kaWdpdGFsX2NvcmUuYy01OTYtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZmNfdGFyZ2V0ICp0YXJnZXQsXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jPTc0ND1zdGF0aWMgY29uc3Qgc3RydWN0IG5mY19vcHMgZGlnaXRhbF9uZmNfb3BzID0ge1xcbi0tXFxubmV0L25mYy9kaWdpdGFsX2NvcmUuYy03NDgtXFx0LnN0b3BfcG9sbCA9IGRpZ2l0YWxfc3RvcF9wb2xsLFxcbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmM6NzQ5OlxcdC5kZXBfbGlua191cCA9IGRpZ2l0YWxfZGVwX2xpbmtfdXAsXFxubmV0L25mYy9kaWdpdGFsX2NvcmUuYy03NTAtXFx0LmRlcF9saW5rX2Rvd24gPSBkaWdpdGFsX2RlcF9saW5rX2Rvd24sXFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmM9NjUyPXN0YXRpYyB2b2lkIGhjaV9zdG9wX3BvbGwoc3RydWN0IG5mY19kZXYgKm5mY19kZXYpXFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmMtNjYyLVxcbm5ldC9uZmMvaGNpL2NvcmUuYzo2NjM6c3RhdGljIGludCBoY2lfZGVwX2xpbmtfdXAoc3RydWN0IG5mY19kZXYgKm5mY19kZXYsIHN0cnVjdCBuZmNfdGFyZ2V0ICp0YXJnZXQsXFxubmV0L25mYy9oY2kvY29yZS5jLTY2NC1cXHRcXHRcXHRcXHRfX3U4IGNvbW1fbW9kZSwgX191OCAqZ2IsIHNpemVfdCBnYl9sZW4pXFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmMtNjY3LVxcbm5ldC9uZmMvaGNpL2NvcmUuYzo2Njg6XFx0aWYgKCFoZGV2LVxcdTAwM2VvcHMtXFx1MDAzZWRlcF9saW5rX3VwKVxcbm5ldC9uZmMvaGNpL2NvcmUuYy02NjktXFx0XFx0cmV0dXJuIDA7XFxubmV0L25mYy9oY2kvY29yZS5jLTY3MC1cXG5uZXQvbmZjL2hjaS9jb3JlLmM6NjcxOlxcdHJldHVybiBoZGV2LVxcdTAwM2VvcHMtXFx1MDAzZWRlcF9saW5rX3VwKGhkZXYsIHRhcmdldCwgY29tbV9tb2RlLFxcbm5ldC9uZmMvaGNpL2NvcmUuYy02NzItXFx0XFx0XFx0XFx0ICAgICAgZ2IsIGdiX2xlbik7XFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmM9OTQxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZjX29wcyBoY2lfbmZjX29wcyA9IHtcXG4tLVxcbm5ldC9uZmMvaGNpL2NvcmUuYy05NDUtXFx0LnN0b3BfcG9sbCA9IGhjaV9zdG9wX3BvbGwsXFxubmV0L25mYy9oY2kvY29yZS5jOjk0NjpcXHQuZGVwX2xpbmtfdXAgPSBoY2lfZGVwX2xpbmtfdXAsXFxubmV0L25mYy9oY2kvY29yZS5jLTk0Ny1cXHQuZGVwX2xpbmtfZG93biA9IGhjaV9kZXBfbGlua19kb3duLFxcbi0tXFxubmV0L25mYy9sbGNwX3NvY2suYz02NjE9c3RhdGljIGludCBsbGNwX3NvY2tfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqX2FkZHIsXFxuLS1cXG5uZXQvbmZjL2xsY3Bfc29jay5jLTcwNS1cXHRkZXZpY2VfbG9jayhcXHUwMDI2ZGV2LVxcdTAwM2VkZXYpO1xcbm5ldC9uZmMvbGxjcF9zb2NrLmM6NzA2OlxcdGlmIChkZXYtXFx1MDAzZWRlcF9saW5rX3VwID09IGZhbHNlKSB7XFxubmV0L25mYy9sbGNwX3NvY2suYy03MDctXFx0XFx0cmV0ID0gLUVOT0xJTks7XFxuLS1cXG5uZXQvbmZjL25jaS9jb3JlLmM9OTcwPXN0YXRpYyB2b2lkIG5jaV9kZWFjdGl2YXRlX3RhcmdldChzdHJ1Y3QgbmZjX2RldiAqbmZjX2RldixcXG4tLVxcbm5ldC9uZmMvbmNpL2NvcmUuYy05OTUtXFxubmV0L25mYy9uY2kvY29yZS5jOjk5NjpzdGF0aWMgaW50IG5jaV9kZXBfbGlua191cChzdHJ1Y3QgbmZjX2RldiAqbmZjX2Rldiwgc3RydWN0IG5mY190YXJnZXQgKnRhcmdldCxcXG5uZXQvbmZjL25jaS9jb3JlLmMtOTk3LVxcdFxcdFxcdCAgIF9fdTggY29tbV9tb2RlLCBfX3U4ICpnYiwgc2l6ZV90IGdiX2xlbilcXG4tLVxcbm5ldC9uZmMvbmNpL2NvcmUuYz0xMTQ5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZjX29wcyBuY2lfbmZjX29wcyA9IHtcXG4tLVxcbm5ldC9uZmMvbmNpL2NvcmUuYy0xMTUzLVxcdC5zdG9wX3BvbGwgPSBuY2lfc3RvcF9wb2xsLFxcbm5ldC9uZmMvbmNpL2NvcmUuYzoxMTU0OlxcdC5kZXBfbGlua191cCA9IG5jaV9kZXBfbGlua191cCxcXG5uZXQvbmZjL25jaS9jb3JlLmMtMTE1NS1cXHQuZGVwX2xpbmtfZG93biA9IG5jaV9kZXBfbGlua19kb3duLFxcbi0tXFxubmV0L25mYy9uY2kvbnRmLmM9NzA5PXN0YXRpYyBpbnQgbmNpX3JmX2ludGZfYWN0aXZhdGVkX250Zl9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXFxuLS1cXG5uZXQvbmZjL25jaS9udGYuYy04NjUtXFxubmV0L25mYy9uY2kvbnRmLmM6ODY2OlxcdFxcdC8qIHN0b3JlIGdlbmVyYWwgYnl0ZXMgdG8gYmUgcmVwb3J0ZWQgbGF0ZXIgaW4gZGVwX2xpbmtfdXAgKi9cXG5uZXQvbmZjL25jaS9udGYuYy04NjctXFx0XFx0aWYgKG50Zi5yZl9pbnRlcmZhY2UgPT0gTkNJX1JGX0lOVEVSRkFDRV9ORkNfREVQKSB7XFxuLS1cXG5uZXQvbmZjL25ldGxpbmsuYz02NDA9c3RhdGljIGludCBuZmNfZ2VubF9kdW1wX2RldmljZXNfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvbmZjL25ldGxpbmsuYy02NTEtXFxubmV0L25mYy9uZXRsaW5rLmM6NjUyOmludCBuZmNfZ2VubF9kZXBfbGlua191cF9ldmVudChzdHJ1Y3QgbmZjX2RldiAqZGV2LCB1MzIgdGFyZ2V0X2lkeCxcXG5uZXQvbmZjL25ldGxpbmsuYy02NTMtXFx0XFx0XFx0ICAgICAgIHU4IGNvbW1fbW9kZSwgdTggcmZfbW9kZSlcXG4tLVxcbm5ldC9uZmMvbmV0bGluay5jLTY3OC1cXG5uZXQvbmZjL25ldGxpbmsuYzo2Nzk6XFx0ZGV2LVxcdTAwM2VkZXBfbGlua191cCA9IHRydWU7XFxubmV0L25mYy9uZXRsaW5rLmMtNjgwLVxcbi0tXFxubmV0L25mYy9uZXRsaW5rLmM9OTExPXN0YXRpYyBpbnQgbmZjX2dlbmxfZGVhY3RpdmF0ZV90YXJnZXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZmMvbmV0bGluay5jLTkzNS1cXG5uZXQvbmZjL25ldGxpbmsuYzo5MzY6c3RhdGljIGludCBuZmNfZ2VubF9kZXBfbGlua191cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbm5ldC9uZmMvbmV0bGluay5jLTkzNy17XFxuLS1cXG5uZXQvbmZjL25ldGxpbmsuYy05NjMtXFxubmV0L25mYy9uZXRsaW5rLmM6OTY0OlxcdHJjID0gbmZjX2RlcF9saW5rX3VwKGRldiwgdGd0X2lkeCwgY29tbSk7XFxubmV0L25mYy9uZXRsaW5rLmMtOTY1LVxcbi0tXFxubmV0L25mYy9uZXRsaW5rLmM9MTA2OD1zdGF0aWMgaW50IG5mY19nZW5sX2xsY19zZXRfcGFyYW1zKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvbmZjL25ldGxpbmsuYy0xMTExLVxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tORkNfQVRUUl9MTENfUEFSQU1fTFRPXSkge1xcbm5ldC9uZmMvbmV0bGluay5jOjExMTI6XFx0XFx0aWYgKGRldi1cXHUwMDNlZGVwX2xpbmtfdXApIHtcXG5uZXQvbmZjL25ldGxpbmsuYy0xMTEzLVxcdFxcdFxcdHJjID0gLUVJTlBST0dSRVNTO1xcbi0tXFxubmV0L25mYy9uZXRsaW5rLmM9MTEzNz1zdGF0aWMgaW50IG5mY19nZW5sX2xsY19zZHJlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L25mYy9uZXRsaW5rLmMtMTE2MS1cXG5uZXQvbmZjL25ldGxpbmsuYzoxMTYyOlxcdGlmIChkZXYtXFx1MDAzZWRlcF9saW5rX3VwID09IGZhbHNlKSB7XFxubmV0L25mYy9uZXRsaW5rLmMtMTE2My1cXHRcXHRyYyA9IC1FTk9MSU5LO1xcbi0tXFxubmV0L25mYy9uZXRsaW5rLmM9MTY5Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfb3BzIG5mY19nZW5sX29wc1tdID0ge1xcbi0tXFxubmV0L25mYy9uZXRsaW5rLmMtMTczMC1cXHRcXHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXFxubmV0L25mYy9uZXRsaW5rLmM6MTczMTpcXHRcXHQuZG9pdCA9IG5mY19nZW5sX2RlcF9saW5rX3VwLFxcbm5ldC9uZmMvbmV0bGluay5jLTE3MzItXFx0XFx0LmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLFxcbi0tXFxubmV0L25mYy9uZmMuaD04Mj1pbnQgbmZjX2dlbmxfZGV2aWNlX3JlbW92ZWQoc3RydWN0IG5mY19kZXYgKmRldik7XFxubmV0L25mYy9uZmMuaC04My1cXG5uZXQvbmZjL25mYy5oOjg0OmludCBuZmNfZ2VubF9kZXBfbGlua191cF9ldmVudChzdHJ1Y3QgbmZjX2RldiAqZGV2LCB1MzIgdGFyZ2V0X2lkeCxcXG5uZXQvbmZjL25mYy5oLTg1LVxcdFxcdFxcdCAgICAgICB1OCBjb21tX21vZGUsIHU4IHJmX21vZGUpO1xcbi0tXFxubmV0L25mYy9uZmMuaD0xMzU9aW50IG5mY19zdG9wX3BvbGwoc3RydWN0IG5mY19kZXYgKmRldik7XFxubmV0L25mYy9uZmMuaC0xMzYtXFxubmV0L25mYy9uZmMuaDoxMzc6aW50IG5mY19kZXBfbGlua191cChzdHJ1Y3QgbmZjX2RldiAqZGV2LCBpbnQgdGFyZ2V0X2lkeCwgdTggY29tbV9tb2RlKTtcXG5uZXQvbmZjL25mYy5oLTEzOC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDE6MTMuMjkwNzQ2NDM5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjgzNjAxMTI4MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgTkZDIERpZ2l0YWwgUHJvdG9jb2wgRnV6emluZyBUYXJnZXQqKlxuXG5Pa2F5LCBzbyB0aGUgYE5GQ19DTURfREVQX0xJTktfVVBgIGNhbGwgbGVhZHMgdG8gYSBjaGFpbjogYG5mY19kZXBfbGlua191cGAgLVx1MDAzZSBgZGV2LVx1MDAzZW9wcy1cdTAwM2VkZXBfbGlua191cGAgLVx1MDAzZSBgZGlnaXRhbF9kZXBfbGlua191cGAuIFRoaXMgaXMgd2hlcmUgREVQIChEYXRhIEV4Y2hhbmdlIFByb3RvY29sKSBjb21tdW5pY2F0aW9uIGJlZ2lucywgZWl0aGVyIGFzIGEgdGFyZ2V0IG9yIGluaXRpYXRvci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHRoaXMgaXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGdpdmVuIHRoZSBcIldvcnRoRnV6emluZ1wiIGNyaXRlcmlhLiBTcGVjaWZpY2FsbHksIHRoaXMgY29kZSB0b3VjaGVzIHRoZSBuZXR3b3JraW5nIGNvcmUgcHJvdG9jb2xzIGFuZCBpcyByZWFjaGFibGUgYnkgc2V2ZXJhbCB2aXJ0dWFsIHBhdGh3YXlzLCB0aWNraW5nIGFsbCB0aGUgYm94ZXMuIFRoZSBtb2RpZmljYXRpb25zIGluIGBuZXQvbmZjL2RpZ2l0YWxfZGVwLmNgLCBlc3BlY2lhbGx5IGBkaWdpdGFsX3JlY3ZfZGVwX2RhdGFfZ2F0aGVyYCAoYnVmZmVyIGFsbG9jYXRpb24gYWRqdXN0bWVudHMpIGFuZCBgZGlnaXRhbF90Z19zZW5kX2F0cl9yZXNfY29tcGxldGVgIChib3VuZHMgY2hlY2tpbmcgYW5kIGVycm9yIGhhbmRsaW5nKSwgc2VhbCB0aGUgZGVhbC4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBmdXp6aW5nIHN0cmF0ZWd5LiBGaXJzdCwgdGhlIGBFbmFibGVDb25maWdzYC4gVG8gZ2V0IHRoaXMgY29kZSB0byBjb21waWxlIGFuZCBiZSBleGVyY2lzZWQsIHRoZSBtaW5pbXVtIHNldCB3b3VsZCBiZTogYE5GQ2AsIGBORkNfRElHSVRBTGAsIGFuZCBhIGRyaXZlciB0aGF0IGluc3RhbnRpYXRlcyBgbmZjX2RpZ2l0YWxfZGV2YC4gVGhhdCBtZWFucyBlbmFibGluZyBlaXRoZXIgYE5GQ19TSU1gICh0aGUgaGFyZHdhcmUgc2ltdWxhdG9yKSBvciBgTkZDX1BPUlQxMDBgIChTb255IFVTQiBkZXZpY2UpLCBib3RoIG9mIHdoaWNoIGFyZSBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c3Nlcy4gIGBORkNgIGRlcGVuZHMgb24gYE5FVGAsIGFuZCBgTkZDX0RJR0lUQUxgIGRlcGVuZHMgb24gYE5GQ2AuICBgTkZDX1NJTWAgYW5kIGBORkNfUE9SVDEwMGAgZGVwZW5kIG9uIGBORkNfRElHSVRBTGAsIGFuZCBgTkZDX1BPUlQxMDBgIGFsc28gcmVxdWlyZXMgYFVTQmAuIGBVU0JfUkFXX0dBREdFVGAgb3IgYFVTQl9HQURHRVRgIGFyZSBzdGFuZGFyZC5cblxuTmV4dCwgdGhlIGBGb2N1c1N5bWJvbHNgLiAgSSBuZWVkIHRvIHBpY2sgc3BlY2lmaWMgZnVuY3Rpb24gZW50cnlwb2ludHMuIEF2b2lkaW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zLiBUaGUga2V5IGZ1bmN0aW9ucyBJIG5lZWQgdG8gZm9jdXMgb24gYXJlOlxuLSBgZGlnaXRhbF9yZWN2X2RlcF9kYXRhX2dhdGhlcmAsIGJlY2F1c2UgaXQgaW52b2x2ZXMgY3JpdGljYWwgYnVmZmVyIGFsbG9jYXRpb24gY2hhbmdlcy4gSXQncyBhIHN0YXRpYyBmdW5jdGlvbiwgYnV0IHNpbmNlIGl0J3MgY2FsbGVkIGluIHR3byBwbGFjZXMgYW5kIGl0cyBhZGRyZXNzIGlzbid0IHRha2VuLCBpdCAqbWlnaHQqIGJlIGlubGluZWQuXG4tIGBkaWdpdGFsX3RnX3NlbmRfYXRyX3Jlc19jb21wbGV0ZWAuIEl0cyBhZGRyZXNzIElTIHRha2VuIChwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyKSwgc28gaXQgd2lsbCAqZGVmaW5pdGVseSogYmUgYSBzeW1ib2wuXG4tIGBkaWdpdGFsX2luX3JlY3ZfZGVwX3Jlc2Bcbi0gYGRpZ2l0YWxfdGdfcmVjdl9kZXBfcmVxYFxuSSBhbSBnb2luZyB0byBmb2N1cyBvbiB0aGUgc3RhdGljIGlubGluZSBmdW5jdGlvbnMsIGFuZCB0aGVpciBjYWxsZXJzIHRvIGltcHJvdmUgZnV6emluZyBjb3ZlcmFnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ3MDIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTkwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQxOjIxLjY1MDg2MjI4NVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg0MzYwODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGlnaXRhbF9pbl9yZWN2X2RlcF9yZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25mY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmZjL2RpZ2l0YWxfZGVwLmM9MTAwPXN0cnVjdCBkaWdpdGFsX2RlcF9yZXFfcmVzIHtcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xMDUtXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjEwNjpzdGF0aWMgdm9pZCBkaWdpdGFsX2luX3JlY3ZfZGVwX3JlcyhzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCB2b2lkICphcmcsXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTEwNy1cXHRcXHRcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmYgKnJlc3ApO1xcbi0tXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jPTUyOT1zdGF0aWMgaW50IGRpZ2l0YWxfaW5fc2VuZF9hY2soc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy01NTUtXFx0cmMgPSBkaWdpdGFsX2luX3NlbmRfY21kKGRkZXYsIHNrYiwgZGRldi1cXHUwMDNlZGVwX3J3dCxcXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6NTU2OlxcdFxcdFxcdFxcdCBkaWdpdGFsX2luX3JlY3ZfZGVwX3JlcywgZGF0YV9leGNoKTtcXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtNTU3LVxcdGlmIChyYykge1xcbi0tXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jPTU2Nj1zdGF0aWMgaW50IGRpZ2l0YWxfaW5fc2VuZF9uYWNrKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtNTkwLVxcdHJjID0gZGlnaXRhbF9pbl9zZW5kX2NtZChkZGV2LCBza2IsIGRkZXYtXFx1MDAzZWRlcF9yd3QsXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjU5MTpcXHRcXHRcXHRcXHQgZGlnaXRhbF9pbl9yZWN2X2RlcF9yZXMsIGRhdGFfZXhjaCk7XFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTU5Mi1cXHRpZiAocmMpXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM9NTk4PXN0YXRpYyBpbnQgZGlnaXRhbF9pbl9zZW5kX2F0bihzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxcbi0tXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTYyMS1cXHRyYyA9IGRpZ2l0YWxfaW5fc2VuZF9jbWQoZGRldiwgc2tiLCBkZGV2LVxcdTAwM2VkZXBfcnd0LFxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzo2MjI6XFx0XFx0XFx0XFx0IGRpZ2l0YWxfaW5fcmVjdl9kZXBfcmVzLCBkYXRhX2V4Y2gpO1xcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy02MjMtXFx0aWYgKHJjKVxcbi0tXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jPTYyOT1zdGF0aWMgaW50IGRpZ2l0YWxfaW5fc2VuZF9ydG94KHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtNjYwLVxcdHJjID0gZGlnaXRhbF9pbl9zZW5kX2NtZChkZGV2LCBza2IsIHJ3dF9pbnQsXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjY2MTpcXHRcXHRcXHRcXHQgZGlnaXRhbF9pbl9yZWN2X2RlcF9yZXMsIGRhdGFfZXhjaCk7XFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTY2Mi1cXHRpZiAocmMpXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM9NjY4PXN0YXRpYyBpbnQgZGlnaXRhbF9pbl9zZW5kX3NhdmVkX3NrYihzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxcbi0tXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTY3OC1cXHRyYyA9IGRpZ2l0YWxfaW5fc2VuZF9jbWQoZGRldiwgZGRldi1cXHUwMDNlc2F2ZWRfc2tiLCBkZGV2LVxcdTAwM2VkZXBfcnd0LFxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzo2Nzk6XFx0XFx0XFx0XFx0IGRpZ2l0YWxfaW5fcmVjdl9kZXBfcmVzLCBkYXRhX2V4Y2gpO1xcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy02ODAtXFx0aWYgKHJjKVxcbi0tXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTY4NS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6Njg2OnN0YXRpYyB2b2lkIGRpZ2l0YWxfaW5fcmVjdl9kZXBfcmVzKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHZvaWQgKmFyZyxcXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtNjg3LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqcmVzcClcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYz05MDQ9aW50IGRpZ2l0YWxfaW5fc2VuZF9kZXBfcmVxKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtOTM1LVxcdHJjID0gZGlnaXRhbF9pbl9zZW5kX2NtZChkZGV2LCB0bXBfc2tiLCBkZGV2LVxcdTAwM2VkZXBfcnd0LFxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzo5MzY6XFx0XFx0XFx0XFx0IGRpZ2l0YWxfaW5fcmVjdl9kZXBfcmVzLCBkYXRhX2V4Y2gpO1xcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy05MzctXFx0aWYgKHJjKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQxOjIxLjY5OTMwNjA5M1oiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMDQ5MjcwMjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDpcblxuKipEZWx2aW5nIGludG8gRnVuY3Rpb24gUG9pbnRlcnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZXNlIGNhbGxiYWNrcywgc3BlY2lmaWNhbGx5IGBkaWdpdGFsX2luX3JlY3ZfZGVwX3Jlc2AgYW5kIGBkaWdpdGFsX3RnX3JlY3ZfZGVwX3JlcWAuIFJpZ2h0LCB0aGV5J3JlIGZ1bmN0aW9uIHBvaW50ZXJzLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBUaGV5J3JlIHBhc3NlZCB0byBgZGlnaXRhbF9pbl9zZW5kX2NtZGAgYW5kIGBkaWdpdGFsX3RnX2xpc3RlbmAsIHJlc3BlY3RpdmVseS4gIFRoYXQncyBob3cgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBpcyBleHRlbmRlZCwgbmVhdC4gTm93LCBzaW5jZSBJJ3ZlIGFscmVhZHkgc2NydXRpbml6ZWQgYGRpZ2l0YWxfaW5fcmVjdl9kZXBfcmVzYCBsZXQncyBtYWtlIHN1cmUgdGhhdCBJIHVuZGVyc3RhbmQgYGRpZ2l0YWxfdGdfcmVjdl9kZXBfcmVxYCBlcXVhbGx5IHdlbGw7IGl0J3MgbGlrZWx5IGEgbWlycm9yIGZ1bmN0aW9uIGluIHRoZSBvdGhlciBtb2R1bGUuIEkgbmVlZCB0byBmdWxseSBncmFzcCBob3cgdGhlc2UgYXJlIGludm9rZWQgYW5kIHRoZSBpbmZvcm1hdGlvbiB0aGV5J3JlIGV4cGVjdGVkIHRvIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4Mjk5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDE6MjMuNzQ4NTc5ODQ2WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODYxNjc3NTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGlnaXRhbF90Z19yZWN2X2RlcF9yZXFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25mY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmZjL2RpZ2l0YWxfZGVwLmM9MTA2PXN0YXRpYyB2b2lkIGRpZ2l0YWxfaW5fcmVjdl9kZXBfcmVzKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHZvaWQgKmFyZyxcXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTA3LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqcmVzcCk7XFxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjEwODpzdGF0aWMgdm9pZCBkaWdpdGFsX3RnX3JlY3ZfZGVwX3JlcShzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCB2b2lkICphcmcsXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTEwOS1cXHRcXHRcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmYgKnJlc3ApO1xcbi0tXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jPTk3OD1zdGF0aWMgaW50IGRpZ2l0YWxfdGdfc2VuZF9hY2soc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xMDEyLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzoxMDEzOlxcdHJjID0gZGlnaXRhbF90Z19zZW5kX2NtZChkZGV2LCBza2IsIDE1MDAsIGRpZ2l0YWxfdGdfcmVjdl9kZXBfcmVxLFxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xMDE0LVxcdFxcdFxcdFxcdCBkYXRhX2V4Y2gpO1xcbi0tXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jPTEwMjQ9c3RhdGljIGludCBkaWdpdGFsX3RnX3NlbmRfYXRuKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYpXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTA1MS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6MTA1MjpcXHRyYyA9IGRpZ2l0YWxfdGdfc2VuZF9jbWQoZGRldiwgc2tiLCAxNTAwLCBkaWdpdGFsX3RnX3JlY3ZfZGVwX3JlcSxcXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTA1My1cXHRcXHRcXHRcXHQgTlVMTCk7XFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM9MTA2MD1zdGF0aWMgaW50IGRpZ2l0YWxfdGdfc2VuZF9zYXZlZF9za2Ioc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldilcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xMDY5LVxcdHJjID0gZGlnaXRhbF90Z19zZW5kX2NtZChkZGV2LCBkZGV2LVxcdTAwM2VzYXZlZF9za2IsIDE1MDAsXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjEwNzA6XFx0XFx0XFx0XFx0IGRpZ2l0YWxfdGdfcmVjdl9kZXBfcmVxLCBOVUxMKTtcXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTA3MS1cXHRpZiAocmMpXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTA3Ni1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6MTA3NzpzdGF0aWMgdm9pZCBkaWdpdGFsX3RnX3JlY3ZfZGVwX3JlcShzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCB2b2lkICphcmcsXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTEwNzgtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICpyZXNwKVxcbi0tXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jPTEyOTc9aW50IGRpZ2l0YWxfdGdfc2VuZF9kZXBfcmVzKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTMzMS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6MTMzMjpcXHRyYyA9IGRpZ2l0YWxfdGdfc2VuZF9jbWQoZGRldiwgdG1wX3NrYiwgMTUwMCwgZGlnaXRhbF90Z19yZWN2X2RlcF9yZXEsXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTEzMzMtXFx0XFx0XFx0XFx0IE5VTEwpO1xcbi0tXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jPTEzNDg9c3RhdGljIHZvaWQgZGlnaXRhbF90Z19zZW5kX3BzbF9yZXNfY29tcGxldGUoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xMzU5LVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzoxMzYwOlxcdGRpZ2l0YWxfdGdfbGlzdGVuKGRkZXYsIDE1MDAsIGRpZ2l0YWxfdGdfcmVjdl9kZXBfcmVxLCBOVUxMKTtcXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTM2MS1cXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYz0xNDY3PXN0YXRpYyB2b2lkIGRpZ2l0YWxfdGdfc2VuZF9hdHJfcmVzX2NvbXBsZXRlKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTQ4OC1cXHRlbHNlXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjE0ODk6XFx0XFx0ZGlnaXRhbF90Z19yZWN2X2RlcF9yZXEoZGRldiwgYXJnLCByZXNwKTtcXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTQ5MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDE6MjQuMDM0NzUyOTE5WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ3ODI4NTYwMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBTdHJhdGVneSBBc3Nlc3NtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIG5lZWQgdG8gZGVmaW5lIHRoZSBmdXp6aW5nIHNjb3BlIGJhc2VkIG9uIHRoZSBnaXZlbiBtb2RpZmljYXRpb25zLiBGaXJzdCwgSSd2ZSBpZGVudGlmaWVkIHRoZSBtb2RpZmllZCBmdW5jdGlvbnM6IGBkaWdpdGFsX3JlY3ZfZGVwX2RhdGFfZ2F0aGVyYCBhbmQgYGRpZ2l0YWxfdGdfc2VuZF9hdHJfcmVzX2NvbXBsZXRlYC4gVGhlc2UgYXJlIGtleS5cblxuTmV4dCwgdGhlIGVudHJ5IHBvaW50cyBvciBkaXJlY3QgZmVhdHVyZSBjYWxsZXJzIGFyZTogYGRpZ2l0YWxfdGdfcmVjdl9kZXBfcmVxYCwgYGRpZ2l0YWxfaW5fcmVjdl9kZXBfcmVzYCwgYW5kIGBkaWdpdGFsX3RnX3NlbmRfYXRyX3Jlc2AuIFRoZXNlIGFyZSB0aGUgc3RhcnRpbmcgcG9pbnRzIGZvciBleGVyY2lzaW5nIHRoZSBtb2RpZmllZCBjb2RlLlxuXG5Ob3csIGZvciBGb2N1c1N5bWJvbHMsIEknbGwgY29tYmluZSB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFuZCBlbnRyeSBwb2ludHMgaW50byBhIHNpbmdsZSBsaXN0OiBgZGlnaXRhbF9yZWN2X2RlcF9kYXRhX2dhdGhlcmAsIGBkaWdpdGFsX3RnX3NlbmRfYXRyX3Jlc19jb21wbGV0ZWAsIGBkaWdpdGFsX3RnX3JlY3ZfZGVwX3JlcWAsIGBkaWdpdGFsX2luX3JlY3ZfZGVwX3Jlc2AsIGFuZCBgZGlnaXRhbF90Z19zZW5kX2F0cl9yZXNgLiBUaGlzIHdpbGwgYmUgbXkgdGFyZ2V0IGxpc3QgZm9yIGZ1enppbmcgZm9jdXMuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhlIEVuYWJsZUNvbmZpZ3MgYXJlIGBORkNgIGFuZCBgTkZDX0RJR0lUQUxgLCB3aGljaCBhcmUgY3J1Y2lhbC4gSSBzaG91bGQgYWxzbyByZW1lbWJlciB0aGF0IGBORkNfU0lNYCBhbmQgYE5GQ19QT1JUMTAwYCBhcmUgdmlydHVhbCBkZXZpY2UgZHJpdmVycyB0aGF0IGRlcGVuZCBvbiBgTkZDX0RJR0lUQUxgLiBJJ2xsIGNyb3NzLXJlZmVyZW5jZSB0aGVzZSB3aXRoIGBuZXQvbmZjL0tjb25maWdgIGFuZCBgZHJpdmVycy9uZmMvS2NvbmZpZ2AgdG8gZW5zdXJlIGBDT05GSUdfTkZDYCwgYENPTkZJR19ORkNfRElHSVRBTGAsIGBDT05GSUdfTkZDX1NJTWAsIGFuZCBgQ09ORklHX05GQ19QT1JUMTAwYCBhcmUgYWxsIGNvcnJlY3RseSBkZWZpbmVkLlxuXG5XaXRoIGFsbCBvZiB0aGlzIHZlcmlmaWVkLCBJIGNhbiBub3cgcHJvY2VlZCB0byBzZXQgdGhlIHJlc3VsdHMsIGV2ZXJ5dGhpbmcgaXMgY2hlY2tlZCBhbmQgdmFsaWRhdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTYwMSwiT3V0cHV0VG9rZW5zIjoyMzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDE6MjguODE3NjE2OTgyWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzIxODQ5OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GQ1wiLFxuICAgIFwiTkZDX0RJR0lUQUxcIixcbiAgICBcIk5GQ19TSU1cIixcbiAgICBcIk5GQ19QT1JUMTAwXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGlnaXRhbF9yZWN2X2RlcF9kYXRhX2dhdGhlclwiLFxuICAgIFwiZGlnaXRhbF90Z19zZW5kX2F0cl9yZXNfY29tcGxldGVcIixcbiAgICBcImRpZ2l0YWxfdGdfcmVjdl9kZXBfcmVxXCIsXG4gICAgXCJkaWdpdGFsX2luX3JlY3ZfZGVwX3Jlc1wiLFxuICAgIFwiZGlnaXRhbF90Z19zZW5kX2F0cl9yZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgbG9naWMgaW4gdGhlIE5GQyBEaWdpdGFsIFByb3RvY29sIHN0YWNrIChuZXQvbmZjL2RpZ2l0YWxfZGVwLmMpLiBTcGVjaWZpY2FsbHksIGl0IGFsdGVycyBidWZmZXIgYWxsb2NhdGlvbiBhbmQgaGVhZHJvb20vdGFpbHJvb20gZXhwYW5zaW9uIGluIGRpZ2l0YWxfcmVjdl9kZXBfZGF0YV9nYXRoZXIoKSwgYW5kIGFkZHMgbGVuZ3RoL2JvdW5kcyB2YWxpZGF0aW9uIGNoZWNrcyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgb24gaW5jb21pbmcgcmVzcG9uc2UgZnJhbWVzIGluIGRpZ2l0YWxfdGdfc2VuZF9hdHJfcmVzX2NvbXBsZXRlKCkuIFRoaXMgc3Vic3lzdGVtIGlzIGFjY2Vzc2libGUgdmlhIG5ldGxpbmsvc29ja2V0cyBhbmQgZW11bGF0ZWQgTkZDIGRldmljZXMgKHN1Y2ggYXMgbmZjc2ltIG9yIHBvcnQxMDAgVVNCIGVtdWxhdGlvbiksIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GQ1wiLFxuICAgIFwiTkZDX0RJR0lUQUxcIixcbiAgICBcIk5GQ19TSU1cIixcbiAgICBcIk5GQ19QT1JUMTAwXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGlnaXRhbF9yZWN2X2RlcF9kYXRhX2dhdGhlclwiLFxuICAgIFwiZGlnaXRhbF90Z19zZW5kX2F0cl9yZXNfY29tcGxldGVcIixcbiAgICBcImRpZ2l0YWxfdGdfcmVjdl9kZXBfcmVxXCIsXG4gICAgXCJkaWdpdGFsX2luX3JlY3ZfZGVwX3Jlc1wiLFxuICAgIFwiZGlnaXRhbF90Z19zZW5kX2F0cl9yZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgbG9naWMgaW4gdGhlIE5GQyBEaWdpdGFsIFByb3RvY29sIHN0YWNrIChuZXQvbmZjL2RpZ2l0YWxfZGVwLmMpLiBTcGVjaWZpY2FsbHksIGl0IGFsdGVycyBidWZmZXIgYWxsb2NhdGlvbiBhbmQgaGVhZHJvb20vdGFpbHJvb20gZXhwYW5zaW9uIGluIGRpZ2l0YWxfcmVjdl9kZXBfZGF0YV9nYXRoZXIoKSwgYW5kIGFkZHMgbGVuZ3RoL2JvdW5kcyB2YWxpZGF0aW9uIGNoZWNrcyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgb24gaW5jb21pbmcgcmVzcG9uc2UgZnJhbWVzIGluIGRpZ2l0YWxfdGdfc2VuZF9hdHJfcmVzX2NvbXBsZXRlKCkuIFRoaXMgc3Vic3lzdGVtIGlzIGFjY2Vzc2libGUgdmlhIG5ldGxpbmsvc29ja2V0cyBhbmQgZW11bGF0ZWQgTkZDIGRldmljZXMgKHN1Y2ggYXMgbmZjc2ltIG9yIHBvcnQxMDAgVVNCIGVtdWxhdGlvbiksIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MToyOC44ODk4MTAxMjNaIiwiU2VxIjo0MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTA1NDAyNTIyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQxOjI4Ljg5MDI5MjU2M1oiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEyMTA1MzUzNzg5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbmV0L25mYy9kaWdpdGFsX2RlcC5jIGluIHR3byBwbGFjZXM6XFxuMS4gSW4gYGRpZ2l0YWxfcmVjdl9kZXBfZGF0YV9nYXRoZXIoKWAsIGl0IHN3aXRjaGVzIHRoZSBhbGxvY2F0aW9uIG9mIGBkZGV2LVxcdTAwM2VjaGFpbmluZ19za2JgIGZyb20gYG5mY19hbGxvY19yZWN2X3NrYigpYCB0byBgZGlnaXRhbF9za2JfYWxsb2MoKWAsIGFuZCBhZGp1c3RzIGBza2JfY29weV9leHBhbmQoKWAgYXJndW1lbnRzIHRvIGVuc3VyZSBkZXZpY2UgaGVhZHJvb20gYW5kIHRhaWxyb29tIChgdHhfaGVhZHJvb21gIGFuZCBgdHhfdGFpbHJvb21gKSBhcmUgcHJvcGVybHkgYWxsb2NhdGVkLiBBcyBkYXRhIGlzIGNvcGllZCBpbnRvIHRoZSBza2IgdmlhIGBza2JfcHV0X2RhdGEoLi4uLCByZXNwLVxcdTAwM2VkYXRhLCByZXNwLVxcdTAwM2VsZW4pYCwgb25seSB0aGUgZXhwbGljaXRseSByZWNlaXZlZCBieXRlcyBhcmUgYWRkZWQgdG8gdGhlIHBhY2tldCBsZW5ndGgsIGxlYXZpbmcgbm8gdW5pbml0aWFsaXplZCBkYXRhIGV4cG9zZWQuXFxuMi4gSW4gYGRpZ2l0YWxfdGdfc2VuZF9hdHJfcmVzX2NvbXBsZXRlKClgLCBpdCBhZGRzIHZhbGlkYXRpb24gY2hlY2tzIHRvIGVuc3VyZSBgcmVzcC1cXHUwMDNlbGVuYCBpcyBub24temVybyBhbmQgZ3JlYXRlciB0aGFuIGBvZmZzZXRgIGJlZm9yZSBpbmRleGluZyBgcmVzcC1cXHUwMDNlZGF0YVswXWAgYW5kIGByZXNwLVxcdTAwM2VkYXRhW29mZnNldF1gLiBUaGVzZSBjaGFuZ2VzIGZpeCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBvbiB0cnVuY2F0ZWQgb3IgbWFsZm9ybWVkIHJlY2VpdmVkIHNrYiBwYWNrZXRzLCB3aGljaCBhcmUgc3BhdGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyBjYXVnaHQgYnkgS0FTQU4uXFxuXFxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBrZXJuZWwtdG8tdXNlciBjb3B5IHBhdGhzIChpbmZvIGxlYWtzKSwgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZCBhbmQgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJjMGE4YzNlOTcxODU1OGMzMTlmYThjYzJiZmFlYmJhMDUwODljZmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCAxMiAxMzo0MDoxMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZmMvZGlnaXRhbF9kZXAuYyBiL25ldC9uZmMvZGlnaXRhbF9kZXAuY1xuaW5kZXggMzk4MmZhMDg0NzM3Zi4uNTA5M2I3YjgxNzIwMiAxMDA2NDRcbi0tLSBhL25ldC9uZmMvZGlnaXRhbF9kZXAuY1xuKysrIGIvbmV0L25mYy9kaWdpdGFsX2RlcC5jXG5AQCAtMjQwLDggKzI0MCw4IEBAIGRpZ2l0YWxfcmVjdl9kZXBfZGF0YV9nYXRoZXIoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdTggcGZiLFxuIFxuIFx0aWYgKERJR0lUQUxfTkZDX0RFUF9NSV9CSVRfU0VUKHBmYikgXHUwMDI2XHUwMDI2ICghZGRldi1cdTAwM2VjaGFpbmluZ19za2IpKSB7XG4gXHRcdGRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiID1cbi1cdFx0XHRuZmNfYWxsb2NfcmVjdl9za2IoOCAqIGRkZXYtXHUwMDNlbG9jYWxfcGF5bG9hZF9tYXgsXG4tXHRcdFx0XHRcdCAgIEdGUF9LRVJORUwpO1xuK1x0XHRcdGRpZ2l0YWxfc2tiX2FsbG9jKGRkZXYsXG4rXHRcdFx0XHRcdCAgOCAqIGRkZXYtXHUwMDNlbG9jYWxfcGF5bG9hZF9tYXgpO1xuIFx0XHRpZiAoIWRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiKSB7XG4gXHRcdFx0cmMgPSAtRU5PTUVNO1xuIFx0XHRcdGdvdG8gZXJyb3I7XG5AQCAtMjUxLDkgKzI1MSw5IEBAIGRpZ2l0YWxfcmVjdl9kZXBfZGF0YV9nYXRoZXIoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdTggcGZiLFxuIFx0aWYgKGRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiKSB7XG4gXHRcdGlmIChyZXNwLVx1MDAzZWxlbiBcdTAwM2Ugc2tiX3RhaWxyb29tKGRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiKSkge1xuIFx0XHRcdG5ld19za2IgPSBza2JfY29weV9leHBhbmQoZGRldi1cdTAwM2VjaGFpbmluZ19za2IsXG4tXHRcdFx0XHRcdFx0ICBza2JfaGVhZHJvb20oXG4tXHRcdFx0XHRcdFx0XHQgIGRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiKSxcbi1cdFx0XHRcdFx0XHQgIDggKiBkZGV2LVx1MDAzZWxvY2FsX3BheWxvYWRfbWF4LFxuK1x0XHRcdFx0XHRcdCAgZGRldi1cdTAwM2V0eF9oZWFkcm9vbSxcbitcdFx0XHRcdFx0XHQgIDggKiBkZGV2LVx1MDAzZWxvY2FsX3BheWxvYWRfbWF4ICtcbitcdFx0XHRcdFx0XHRcdCAgZGRldi1cdTAwM2V0eF90YWlscm9vbSxcbiBcdFx0XHRcdFx0XHQgIEdGUF9LRVJORUwpO1xuIFx0XHRcdGlmICghbmV3X3NrYikge1xuIFx0XHRcdFx0cmMgPSAtRU5PTUVNO1xuQEAgLTE0NjcsMTYgKzE0NjcsMTkgQEAgc3RhdGljIHZvaWQgZGlnaXRhbF90Z19yZWN2X3BzbF9yZXEoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdm9pZCAqYXJnLFxuIHN0YXRpYyB2b2lkIGRpZ2l0YWxfdGdfc2VuZF9hdHJfcmVzX2NvbXBsZXRlKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXG4gXHRcdFx0XHRcdCAgICAgdm9pZCAqYXJnLCBzdHJ1Y3Qgc2tfYnVmZiAqcmVzcClcbiB7XG4tXHRpbnQgb2Zmc2V0O1xuK1x0dW5zaWduZWQgaW50IG9mZnNldDtcbiBcbiBcdGlmIChJU19FUlIocmVzcCkpIHtcbiBcdFx0ZGlnaXRhbF9wb2xsX25leHRfdGVjaChkZGV2KTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0b2Zmc2V0ID0gMjtcbi1cdGlmIChyZXNwLVx1MDAzZWRhdGFbMF0gPT0gRElHSVRBTF9ORkNfREVQX05GQ0FfU09EX1NCKVxuLVx0XHRvZmZzZXQrKztcbitcdGlmICghcmVzcC1cdTAwM2VsZW4pXG4rXHRcdGdvdG8gYmFkX2ZyYW1lO1xuK1xuK1x0b2Zmc2V0ID0gKHJlc3AtXHUwMDNlZGF0YVswXSA9PSBESUdJVEFMX05GQ19ERVBfTkZDQV9TT0RfU0IpID8gMyA6IDI7XG4rXHRpZiAocmVzcC1cdTAwM2VsZW4gXHUwMDNjPSBvZmZzZXQpXG4rXHRcdGdvdG8gYmFkX2ZyYW1lO1xuIFxuIFx0ZGRldi1cdTAwM2VhdG5fY291bnQgPSAwO1xuIFxuQEAgLTE0ODQsNiArMTQ4NywxMiBAQCBzdGF0aWMgdm9pZCBkaWdpdGFsX3RnX3NlbmRfYXRyX3Jlc19jb21wbGV0ZShzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxuIFx0XHRkaWdpdGFsX3RnX3JlY3ZfcHNsX3JlcShkZGV2LCBhcmcsIHJlc3ApO1xuIFx0ZWxzZVxuIFx0XHRkaWdpdGFsX3RnX3JlY3ZfZGVwX3JlcShkZGV2LCBhcmcsIHJlc3ApO1xuK1xuK1x0cmV0dXJuO1xuK1xuK2JhZF9mcmFtZTpcbitcdGtmcmVlX3NrYihyZXNwKTtcbitcdGRpZ2l0YWxfcG9sbF9uZXh0X3RlY2goZGRldik7XG4gfVxuIFxuIHN0YXRpYyBpbnQgZGlnaXRhbF90Z19zZW5kX2F0cl9yZXMoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQxOjI4Ljg5MDI5MzQ1M1oiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDEzOTY5MDk1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5GQyBEaWdpdGFsIERFUCBDb2RlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gTXkgZmlyc3QgbW92ZSBpcyBhbHdheXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZS4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbmV0L25mYy9kaWdpdGFsX2RlcC5jYCwgc28gdGhhdCdzIHdoZXJlIG15IGZvY3VzIG5lZWRzIHRvIGJlLiBJJ2xsIG5lZWQgdG8gc2VlIHByZWNpc2VseSB3aGF0J3MgYmVlbiBhbHRlcmVkIHdpdGhpbiB0aGF0IGZpbGUuIEknbGwgZWl0aGVyIHVzZSBgcmVhZC1maWxlYCB0byBnZXQgdGhlIGNvbnRleHQgcmlnaHQgdGhlcmUsIG9yIGlmIHRoYXQncyB1bndpZWxkeSwgSSdsbCBsZXZlcmFnZSBgZ3JlcHBlcmAgdG8gemVybyBpbiBvbiB0aGUgbW9kaWZpZWQgbGluZXMuIFRoYXQgd2F5IEkgY2FuIGdldCBhIGdyaXAgb24gd2hhdCB0aGUgZGV2ZWxvcGVycyB3ZXJlIHRyeWluZyB0byBhY2hpZXZlLCBhbmQgdGhlbiBJJ2xsIGZvcm11bGF0ZSBhIHByb3BlciBvcGluaW9uIG9uIHRoZSBxdWFsaXR5IGFuZCBpbXBhY3Qgb2YgdGhlIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzgxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MTozOS4wMjk5ODcxMzZaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwMTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZmMvZGlnaXRhbF9kZXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMzAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMzA6XFx0c3RhdGljIHN0cnVjdCBza19idWZmICpcXG4gMjMxOlxcdGRpZ2l0YWxfcmVjdl9kZXBfZGF0YV9nYXRoZXIoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdTggcGZiLFxcbiAyMzI6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqcmVzcCxcXG4gMjMzOlxcdFxcdFxcdFxcdCAgICAgaW50ICgqc2VuZF9hY2spKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXFxuIDIzNDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBkaWdpdGFsX2RhdGFfZXhjaFxcbiAyMzU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAqZGF0YV9leGNoKSxcXG4gMjM2OlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGRpZ2l0YWxfZGF0YV9leGNoICpkYXRhX2V4Y2gpXFxuIDIzNzpcXHR7XFxuIDIzODpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYjtcXG4gMjM5OlxcdFxcdGludCByYztcXG4gMjQwOlxcdFxcbiAyNDE6XFx0XFx0aWYgKERJR0lUQUxfTkZDX0RFUF9NSV9CSVRfU0VUKHBmYikgXFx1MDAyNlxcdTAwMjYgKCFkZGV2LVxcdTAwM2VjaGFpbmluZ19za2IpKSB7XFxuIDI0MjpcXHRcXHRcXHRkZGV2LVxcdTAwM2VjaGFpbmluZ19za2IgPVxcbiAyNDM6XFx0XFx0XFx0XFx0ZGlnaXRhbF9za2JfYWxsb2MoZGRldixcXG4gMjQ0OlxcdFxcdFxcdFxcdFxcdFxcdCAgOCAqIGRkZXYtXFx1MDAzZWxvY2FsX3BheWxvYWRfbWF4KTtcXG4gMjQ1OlxcdFxcdFxcdGlmICghZGRldi1cXHUwMDNlY2hhaW5pbmdfc2tiKSB7XFxuIDI0NjpcXHRcXHRcXHRcXHRyYyA9IC1FTk9NRU07XFxuIDI0NzpcXHRcXHRcXHRcXHRnb3RvIGVycm9yO1xcbiAyNDg6XFx0XFx0XFx0fVxcbiAyNDk6XFx0XFx0fVxcbiAyNTA6XFx0XFxuIDI1MTpcXHRcXHRpZiAoZGRldi1cXHUwMDNlY2hhaW5pbmdfc2tiKSB7XFxuIDI1MjpcXHRcXHRcXHRpZiAocmVzcC1cXHUwMDNlbGVuIFxcdTAwM2Ugc2tiX3RhaWxyb29tKGRkZXYtXFx1MDAzZWNoYWluaW5nX3NrYikpIHtcXG4gMjUzOlxcdFxcdFxcdFxcdG5ld19za2IgPSBza2JfY29weV9leHBhbmQoZGRldi1cXHUwMDNlY2hhaW5pbmdfc2tiLFxcbiAyNTQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBkZGV2LVxcdTAwM2V0eF9oZWFkcm9vbSxcXG4gMjU1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgOCAqIGRkZXYtXFx1MDAzZWxvY2FsX3BheWxvYWRfbWF4ICtcXG4gMjU2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgZGRldi1cXHUwMDNldHhfdGFpbHJvb20sXFxuIDI1NzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIEdGUF9LRVJORUwpO1xcbiAyNTg6XFx0XFx0XFx0XFx0aWYgKCFuZXdfc2tiKSB7XFxuIDI1OTpcXHRcXHRcXHRcXHRcXHRyYyA9IC1FTk9NRU07XFxuIDI2MDpcXHRcXHRcXHRcXHRcXHRnb3RvIGVycm9yO1xcbiAyNjE6XFx0XFx0XFx0XFx0fVxcbiAyNjI6XFx0XFxuIDI2MzpcXHRcXHRcXHRcXHRrZnJlZV9za2IoZGRldi1cXHUwMDNlY2hhaW5pbmdfc2tiKTtcXG4gMjY0OlxcdFxcdFxcdFxcdGRkZXYtXFx1MDAzZWNoYWluaW5nX3NrYiA9IG5ld19za2I7XFxuIDI2NTpcXHRcXHRcXHR9XFxuIDI2NjpcXHRcXG4gMjY3OlxcdFxcdFxcdHNrYl9wdXRfZGF0YShkZGV2LVxcdTAwM2VjaGFpbmluZ19za2IsIHJlc3AtXFx1MDAzZWRhdGEsIHJlc3AtXFx1MDAzZWxlbik7XFxuIDI2ODpcXHRcXG4gMjY5OlxcdFxcdFxcdGtmcmVlX3NrYihyZXNwKTtcXG4gMjcwOlxcdFxcdFxcdHJlc3AgPSBOVUxMO1xcbiAyNzE6XFx0XFxuIDI3MjpcXHRcXHRcXHRpZiAoRElHSVRBTF9ORkNfREVQX01JX0JJVF9TRVQocGZiKSkge1xcbiAyNzM6XFx0XFx0XFx0XFx0cmMgPSBzZW5kX2FjayhkZGV2LCBkYXRhX2V4Y2gpO1xcbiAyNzQ6XFx0XFx0XFx0XFx0aWYgKHJjKVxcbiAyNzU6XFx0XFx0XFx0XFx0XFx0Z290byBlcnJvcjtcXG4gMjc2OlxcdFxcbiAyNzc6XFx0XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDI3ODpcXHRcXHRcXHR9XFxuIDI3OTpcXHRcXG4gMjgwOlxcdFxcdFxcdHJlc3AgPSBkZGV2LVxcdTAwM2VjaGFpbmluZ19za2I7XFxuIDI4MTpcXHRcXHRcXHRkZGV2LVxcdTAwM2VjaGFpbmluZ19za2IgPSBOVUxMO1xcbiAyODI6XFx0XFx0fVxcbiAyODM6XFx0XFxuIDI4NDpcXHRcXHRyZXR1cm4gcmVzcDtcXG4gMjg1OlxcdFxcbiAyODY6XFx0ZXJyb3I6XFxuIDI4NzpcXHRcXHRrZnJlZV9za2IocmVzcCk7XFxuIDI4ODpcXHRcXG4gMjg5OlxcdFxcdGtmcmVlX3NrYihkZGV2LVxcdTAwM2VjaGFpbmluZ19za2IpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MTozOS4wMzAwODkwNTdaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjM1ODMzNTAwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipEaWdnaW5nIERlZXBlciBpbnRvIHRoZSBBVFIgUmVzcG9uc2UqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBjb25maXJtZWQgdGhlIGluaXRpYWwgaXNzdWUsIGJ1dCBub3cgSSB3YW50IHRvIGJlIHRob3JvdWdoLiBNeSBtaW5kJ3MgYXV0b21hdGljYWxseSBqdW1waW5nIHRvIHRoZSBgZGlnaXRhbF90Z19zZW5kX2F0cl9yZXNfY29tcGxldGVgIGZ1bmN0aW9uLiBUaGF0IGZlZWxzIGxpa2UgYSBsb2dpY2FsIG5leHQgc3RlcCBpbiB0cmFjaW5nIHRoaXMgaXNzdWUuIEknbSB0aGlua2luZyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgbm90IGp1c3QgdGhhdCBzcGVjaWZpYyBmdW5jdGlvbiBidXQgYWxzbyB0aGUgb25lcyBhcm91bmQgaXQgaW4gdGhlIGNhbGwgc3RhY2suIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgaG93IHRoZSBBVFIgcmVzcG9uc2UgY29tcGxldGlvbiBpcyBoYW5kbGVkIGlzIGdvaW5nIHRvIGJlIGNydWNpYWwgaGVyZS4gTGV0J3Mgc2VlIGlmIHRoZXJlJ3MgYW55IG9idmlvdXMgcmVkIGZsYWdzIGluIHRoZSBzdXJyb3VuZGluZyBsb2dpYyDigJMgZXJyb3IgaGFuZGxpbmcsIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGFueXRoaW5nIHRoYXQgbWlnaHQgYmUgbGVhZGluZyB0byB0aGlzLiBOZWVkIHRvIGVuc3VyZSB0aGUgcmVzcG9uc2UgaXMgaGFuZGxlZCBjb3JyZWN0bHkgZnJvbSBzdGFydCB0byBmaW5pc2guIEknbSBnb2luZyB0byBsb29rIGF0IHRoZSBlZGdlIGNhc2VzLCB0b28gLSB3aGF0IGhhcHBlbnMgaWYgdGhlIHJlc3BvbnNlIHRha2VzIGxvbmdlciwgb3IgZmFpbHMgZm9yIGFuIHVuZXhwZWN0ZWQgcmVhc29uLiBCZXN0IHRvIGJlIHByZXBhcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTIyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MTo0MS4zODg0MjY1NjZaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTc4MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25mYy9kaWdpdGFsX2RlcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0NjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0NjA6XFx0XFxuMTQ2MTpcXHRcXHRyYyA9IGRpZ2l0YWxfdGdfc2VuZF9wc2xfcmVzKGRkZXYsIHBzbF9yZXEtXFx1MDAzZWRpZCwgcmZfdGVjaCk7XFxuMTQ2MjpcXHRcXG4xNDYzOlxcdGV4aXQ6XFxuMTQ2NDpcXHRcXHRrZnJlZV9za2IocmVzcCk7XFxuMTQ2NTpcXHR9XFxuMTQ2NjpcXHRcXG4xNDY3OlxcdHN0YXRpYyB2b2lkIGRpZ2l0YWxfdGdfc2VuZF9hdHJfcmVzX2NvbXBsZXRlKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXFxuMTQ2ODpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHZvaWQgKmFyZywgc3RydWN0IHNrX2J1ZmYgKnJlc3ApXFxuMTQ2OTpcXHR7XFxuMTQ3MDpcXHRcXHR1bnNpZ25lZCBpbnQgb2Zmc2V0O1xcbjE0NzE6XFx0XFxuMTQ3MjpcXHRcXHRpZiAoSVNfRVJSKHJlc3ApKSB7XFxuMTQ3MzpcXHRcXHRcXHRkaWdpdGFsX3BvbGxfbmV4dF90ZWNoKGRkZXYpO1xcbjE0NzQ6XFx0XFx0XFx0cmV0dXJuO1xcbjE0NzU6XFx0XFx0fVxcbjE0NzY6XFx0XFxuMTQ3NzpcXHRcXHRpZiAoIXJlc3AtXFx1MDAzZWxlbilcXG4xNDc4OlxcdFxcdFxcdGdvdG8gYmFkX2ZyYW1lO1xcbjE0Nzk6XFx0XFxuMTQ4MDpcXHRcXHRvZmZzZXQgPSAocmVzcC1cXHUwMDNlZGF0YVswXSA9PSBESUdJVEFMX05GQ19ERVBfTkZDQV9TT0RfU0IpID8gMyA6IDI7XFxuMTQ4MTpcXHRcXHRpZiAocmVzcC1cXHUwMDNlbGVuIFxcdTAwM2M9IG9mZnNldClcXG4xNDgyOlxcdFxcdFxcdGdvdG8gYmFkX2ZyYW1lO1xcbjE0ODM6XFx0XFxuMTQ4NDpcXHRcXHRkZGV2LVxcdTAwM2VhdG5fY291bnQgPSAwO1xcbjE0ODU6XFx0XFxuMTQ4NjpcXHRcXHRpZiAocmVzcC1cXHUwMDNlZGF0YVtvZmZzZXRdID09IERJR0lUQUxfQ01EX1BTTF9SRVEpXFxuMTQ4NzpcXHRcXHRcXHRkaWdpdGFsX3RnX3JlY3ZfcHNsX3JlcShkZGV2LCBhcmcsIHJlc3ApO1xcbjE0ODg6XFx0XFx0ZWxzZVxcbjE0ODk6XFx0XFx0XFx0ZGlnaXRhbF90Z19yZWN2X2RlcF9yZXEoZGRldiwgYXJnLCByZXNwKTtcXG4xNDkwOlxcdFxcbjE0OTE6XFx0XFx0cmV0dXJuO1xcbjE0OTI6XFx0XFxuMTQ5MzpcXHRiYWRfZnJhbWU6XFxuMTQ5NDpcXHRcXHRrZnJlZV9za2IocmVzcCk7XFxuMTQ5NTpcXHRcXHRkaWdpdGFsX3BvbGxfbmV4dF90ZWNoKGRkZXYpO1xcbjE0OTY6XFx0fVxcbjE0OTc6XFx0XFxuMTQ5ODpcXHRzdGF0aWMgaW50IGRpZ2l0YWxfdGdfc2VuZF9hdHJfcmVzKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXFxuMTQ5OTpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZGlnaXRhbF9hdHJfcmVxICphdHJfcmVxKVxcbjE1MDA6XFx0e1xcbjE1MDE6XFx0XFx0c3RydWN0IGRpZ2l0YWxfYXRyX3JlcyAqYXRyX3JlcztcXG4xNTAyOlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuMTUwMzpcXHRcXHR1OCAqZ2IsIHBheWxvYWRfYml0cztcXG4xNTA0OlxcdFxcdHNpemVfdCBnYl9sZW47XFxuMTUwNTpcXHRcXHRpbnQgcmM7XFxuMTUwNjpcXHRcXG4xNTA3OlxcdFxcdGdiID0gbmZjX2dldF9sb2NhbF9nZW5lcmFsX2J5dGVzKGRkZXYtXFx1MDAzZW5mY19kZXYsIFxcdTAwMjZnYl9sZW4pO1xcbjE1MDg6XFx0XFx0aWYgKCFnYilcXG4xNTA5OlxcdFxcdFxcdGdiX2xlbiA9IDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQxOjQxLjM4ODUyNjk1NVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NjQ4MTM1Nzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYGRpZ2l0YWxfc2tiX2FsbG9jYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBgZGlnaXRhbF9za2JfYWxsb2NgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSBpdHMgZGVmaW5pdGlvbi4gSSdtIGdvaW5nIHRvIGxvb2sgaW4gYG5ldC9uZmMvZGlnaXRhbC5oYCwgb3Igd2hlcmV2ZXIgaXQncyBkZWZpbmVkIHdpdGhpbiB0aGUgTkZDIHN1YnN5c3RlbS4gQ2hhbmNlcyBhcmUgaXQncyBlaXRoZXIgaW4gdGhlIGhlYWRlciBpdHNlbGYgb3IgZGVmaW5lZCBpbiBhIGNvcnJlc3BvbmRpbmcgQyBmaWxlIHdpdGhpbiB0aGF0IGRpcmVjdG9yeSwgY29uc2lkZXJpbmcgdGhlIHR5cGljYWwga2VybmVsIG1vZHVsZSBzdHJ1Y3R1cmUuIE15IGV4cGVjdGF0aW9uIGlzIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgU0tCcyAoU29ja2V0IEJ1ZmZlcnMpIHNwZWNpZmljYWxseSBmb3IgRGlnaXRhbCBORkMgb3BlcmF0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHBhcmFtZXRlcnMsIHJldHVybiB2YWx1ZXMsIGFuZCB3aGF0IHNwZWNpZmljIG1lbW9yeSBhbGxvY2F0aW9uIGl0J3MgaW1wbGVtZW50aW5nLiBJcyBpdCB1c2luZyBzdGFuZGFyZCBrZXJuZWwgYWxsb2NhdG9ycywgb3Igc29tZXRoaW5nIHNwZWNpZmljIHRvIHRoZSBORkMgZHJpdmVyIHJlcXVpcmVtZW50cz8gS25vd2luZyB0aGlzIGxldmVsIG9mIGRldGFpbCBpcyBjcml0aWNhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDkwNywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDE6NDguMDM2NjY1NzVaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODcxOTUzNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGlnaXRhbF9za2JfYWxsb2NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25mYy9kaWdpdGFsLmg9NDA9c3RydWN0IGRpZ2l0YWxfZGF0YV9leGNoIHtcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbC5oLTQ0LVxcbm5ldC9uZmMvZGlnaXRhbC5oOjQ1OnN0cnVjdCBza19idWZmICpkaWdpdGFsX3NrYl9hbGxvYyhzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxcbm5ldC9uZmMvZGlnaXRhbC5oLTQ2LVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IGxlbik7XFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jPTI3PXN0cnVjdCBkaWdpdGFsX2NtZCB7XFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jLTQxLVxcbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmM6NDI6c3RydWN0IHNrX2J1ZmYgKmRpZ2l0YWxfc2tiX2FsbG9jKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXFxubmV0L25mYy9kaWdpdGFsX2NvcmUuYy00My1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBsZW4pXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM9MjAwPWRpZ2l0YWxfc2VuZF9kZXBfZGF0YV9wcmVwKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMjA4LVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzoyMDk6XFx0XFx0bmV3X3NrYiA9IGRpZ2l0YWxfc2tiX2FsbG9jKGRkZXYsIGRkZXYtXFx1MDAzZXJlbW90ZV9wYXlsb2FkX21heCk7XFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTIxMC1cXHRcXHRpZiAoIW5ld19za2IpIHtcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYz0yMzE9ZGlnaXRhbF9yZWN2X2RlcF9kYXRhX2dhdGhlcihzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCB1OCBwZmIsXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMjQyLVxcdFxcdGRkZXYtXFx1MDAzZWNoYWluaW5nX3NrYiA9XFxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjI0MzpcXHRcXHRcXHRkaWdpdGFsX3NrYl9hbGxvYyhkZGV2LFxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0yNDQtXFx0XFx0XFx0XFx0XFx0ICA4ICogZGRldi1cXHUwMDNlbG9jYWxfcGF5bG9hZF9tYXgpO1xcbi0tXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jPTM1OT1zdGF0aWMgaW50IGRpZ2l0YWxfaW5fc2VuZF9wc2xfcmVxKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMzY2LVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzozNjc6XFx0c2tiID0gZGlnaXRhbF9za2JfYWxsb2MoZGRldiwgc2l6ZW9mKCpwc2xfcmVxKSk7XFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTM2OC1cXHRpZiAoIXNrYilcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYz00NzE9aW50IGRpZ2l0YWxfaW5fc2VuZF9hdHJfcmVxKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtNDg3LVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzo0ODg6XFx0c2tiID0gZGlnaXRhbF9za2JfYWxsb2MoZGRldiwgc2l6ZSk7XFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTQ4OS1cXHRpZiAoIXNrYilcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYz01Mjk9c3RhdGljIGludCBkaWdpdGFsX2luX3NlbmRfYWNrKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtNTM1LVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzo1MzY6XFx0c2tiID0gZGlnaXRhbF9za2JfYWxsb2MoZGRldiwgMSk7XFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTUzNy1cXHRpZiAoIXNrYilcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYz01NjY9c3RhdGljIGludCBkaWdpdGFsX2luX3NlbmRfbmFjayhzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxcbi0tXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTU3Mi1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6NTczOlxcdHNrYiA9IGRpZ2l0YWxfc2tiX2FsbG9jKGRkZXYsIDEpO1xcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy01NzQtXFx0aWYgKCFza2IpXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM9NTk4PXN0YXRpYyBpbnQgZGlnaXRhbF9pbl9zZW5kX2F0bihzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxcbi0tXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTYwNC1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6NjA1OlxcdHNrYiA9IGRpZ2l0YWxfc2tiX2FsbG9jKGRkZXYsIDEpO1xcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy02MDYtXFx0aWYgKCFza2IpXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM9NjI5PXN0YXRpYyBpbnQgZGlnaXRhbF9pbl9zZW5kX3J0b3goc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy02NDAtXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjY0MTpcXHRza2IgPSBkaWdpdGFsX3NrYl9hbGxvYyhkZGV2LCAxKTtcXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtNjQyLVxcdGlmICghc2tiKVxcbi0tXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jPTk3OD1zdGF0aWMgaW50IGRpZ2l0YWxfdGdfc2VuZF9hY2soc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy05ODQtXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjk4NTpcXHRza2IgPSBkaWdpdGFsX3NrYl9hbGxvYyhkZGV2LCAxKTtcXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtOTg2LVxcdGlmICghc2tiKVxcbi0tXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jPTEwMjQ9c3RhdGljIGludCBkaWdpdGFsX3RnX3NlbmRfYXRuKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYpXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTAyOS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6MTAzMDpcXHRza2IgPSBkaWdpdGFsX3NrYl9hbGxvYyhkZGV2LCAxKTtcXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTAzMS1cXHRpZiAoIXNrYilcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYz0xMzY1PXN0YXRpYyBpbnQgZGlnaXRhbF90Z19zZW5kX3BzbF9yZXMoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdTggZGlkLFxcbi0tXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTEzNzEtXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjEzNzI6XFx0c2tiID0gZGlnaXRhbF9za2JfYWxsb2MoZGRldiwgc2l6ZW9mKHN0cnVjdCBkaWdpdGFsX3BzbF9yZXMpKTtcXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTM3My1cXHRpZiAoIXNrYilcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYz0xNDk4PXN0YXRpYyBpbnQgZGlnaXRhbF90Z19zZW5kX2F0cl9yZXMoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xNTEwLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzoxNTExOlxcdHNrYiA9IGRpZ2l0YWxfc2tiX2FsbG9jKGRkZXYsIHNpemVvZihzdHJ1Y3QgZGlnaXRhbF9hdHJfcmVzKSArIGdiX2xlbik7XFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTE1MTItXFx0aWYgKCFza2IpXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jPTI1MT1zdGF0aWMgaW50IGRpZ2l0YWxfaW5fc2VuZF9yYXRzKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTI1Ni1cXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jOjI1NzpcXHRza2IgPSBkaWdpdGFsX3NrYl9hbGxvYyhkZGV2LCAyKTtcXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTI1OC1cXHRpZiAoIXNrYilcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM9MzQxPXN0YXRpYyBpbnQgZGlnaXRhbF9pbl9zZW5kX3NlbF9yZXEoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtMzQ5LVxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM6MzUwOlxcdHNrYiA9IGRpZ2l0YWxfc2tiX2FsbG9jKGRkZXYsIHNpemVvZihzdHJ1Y3QgZGlnaXRhbF9zZWxfcmVxKSk7XFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy0zNTEtXFx0aWYgKCFza2IpXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jPTQ0OD1zdGF0aWMgaW50IGRpZ2l0YWxfaW5fc2VuZF9zZGRfcmVxKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTQ1OS1cXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jOjQ2MDpcXHRza2IgPSBkaWdpdGFsX3NrYl9hbGxvYyhkZGV2LCAyKTtcXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTQ2MS1cXHRpZiAoIXNrYilcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM9NTI3PWludCBkaWdpdGFsX2luX3NlbmRfc2Vuc19yZXEoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdTggcmZfdGVjaClcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtNTQxLVxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM6NTQyOlxcdHNrYiA9IGRpZ2l0YWxfc2tiX2FsbG9jKGRkZXYsIDEpO1xcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtNTQzLVxcdGlmICghc2tiKVxcbi0tXFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYz02MTg9c3RhdGljIGludCBkaWdpdGFsX2luX3NlbmRfYXR0cmliX3JlcShzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxcbi0tXFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy02MjUtXFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYzo2MjY6XFx0c2tiID0gZGlnaXRhbF9za2JfYWxsb2MoZGRldiwgc2l6ZW9mKCphdHRyaWJfcmVxKSk7XFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy02MjctXFx0aWYgKCFza2IpXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jPTcxND1pbnQgZGlnaXRhbF9pbl9zZW5kX3NlbnNiX3JlcShzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCB1OCByZl90ZWNoKVxcbi0tXFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy03MjktXFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYzo3MzA6XFx0c2tiID0gZGlnaXRhbF9za2JfYWxsb2MoZGRldiwgc2l6ZW9mKCpzZW5zYl9yZXEpKTtcXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTczMS1cXHRpZiAoIXNrYilcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM9ODA0PWludCBkaWdpdGFsX2luX3NlbmRfc2Vuc2ZfcmVxKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHU4IHJmX3RlY2gpXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTgyMS1cXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jOjgyMjpcXHRza2IgPSBkaWdpdGFsX3NrYl9hbGxvYyhkZGV2LCBzaXplKTtcXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTgyMy1cXHRpZiAoIXNrYilcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM9ODk1PWludCBkaWdpdGFsX2luX3NlbmRfaXNvMTU2OTNfaW52X3JlcShzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCB1OCByZl90ZWNoKVxcbi0tXFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy05MTAtXFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYzo5MTE6XFx0c2tiID0gZGlnaXRhbF9za2JfYWxsb2MoZGRldiwgc2l6ZW9mKCpyZXEpKTtcXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTkxMi1cXHRpZiAoIXNrYilcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM9OTM1PXN0YXRpYyBpbnQgZGlnaXRhbF90Z19zZW5kX3NlbF9yZXMoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldilcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtOTM5LVxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM6OTQwOlxcdHNrYiA9IGRpZ2l0YWxfc2tiX2FsbG9jKGRkZXYsIDEpO1xcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtOTQxLVxcdGlmICghc2tiKVxcbi0tXFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYz05OTQ9c3RhdGljIGludCBkaWdpdGFsX3RnX3NlbmRfc2RkX3JlcyhzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2KVxcbi0tXFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy05OTktXFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYzoxMDAwOlxcdHNrYiA9IGRpZ2l0YWxfc2tiX2FsbG9jKGRkZXYsIHNpemVvZihzdHJ1Y3QgZGlnaXRhbF9zZGRfcmVzKSk7XFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy0xMDAxLVxcdGlmICghc2tiKVxcbi0tXFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYz0xMDU4PXN0YXRpYyBpbnQgZGlnaXRhbF90Z19zZW5kX3NlbnNfcmVzKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYpXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jLTEwNjMtXFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYzoxMDY0OlxcdHNrYiA9IGRpZ2l0YWxfc2tiX2FsbG9jKGRkZXYsIDIpO1xcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtMTA2NS1cXHRpZiAoIXNrYilcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmM9MTEyOT1zdGF0aWMgaW50IGRpZ2l0YWxfdGdfc2VuZF9zZW5zZl9yZXMoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF90ZWNobm9sb2d5LmMtMTE0MS1cXG5uZXQvbmZjL2RpZ2l0YWxfdGVjaG5vbG9neS5jOjExNDI6XFx0c2tiID0gZGlnaXRhbF9za2JfYWxsb2MoZGRldiwgc2l6ZSk7XFxubmV0L25mYy9kaWdpdGFsX3RlY2hub2xvZ3kuYy0xMTQzLVxcdGlmICghc2tiKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MTo0OS42MjM4NjY4NzdaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjE4ODc5Mzk1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhlIGNvZGU6XG5cbioqRGl2aW5nIGludG8gYGRpZ2l0YWxfc2tiX2FsbG9jYCoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBpbiBvbiB0aGUgYGRpZ2l0YWxfc2tiX2FsbG9jYCBpbXBsZW1lbnRhdGlvbi4gSSBrbm93IGl0cyByb2xlIHdpdGhpbiB0aGUgTkZDIHN1YnN5c3RlbSwgc28gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgYWN0dWFsbHkgaGFuZGxlZCBhdCBhIGxvd2VyIGxldmVsLiBNeSBwcmltYXJ5IGludGVyZXN0IGlzIGluIHRoZSBhbGxvY2F0aW9uIHN0cmF0ZWd5LiBJcyBpdCB1c2luZyBzdGFuZGFyZCBrZXJuZWwgYWxsb2NhdGlvbiBmdW5jdGlvbnMsIG9yIGFyZSB0aGVyZSBhbnkgTkZDLXNwZWNpZmljIG9wdGltaXphdGlvbnMgaW52b2x2ZWQ/IEFyZSB0aGVyZSBhbnkgcGVjdWxpYXIgbG9ja2luZyBtZWNoYW5pc21zIG9yIGFsaWdubWVudCBjb25zdHJhaW50cz8gSXQgd291bGQgYWxzbyBiZSBnb29kIHRvIHVuZGVyc3RhbmQgaWYgaXQgaW1wbGVtZW50cyBhbnkga2luZCBvZiBidWZmZXIgcmV1c2Ugb3IgY2FjaGluZy4gVGhlIGBkaWdpdGFsX2NvcmUuY2AgZmlsZSBpcyB1c3VhbGx5IGEgZ29vZCBwbGFjZSB0byBzdGFydCwgc28gdGhhdCdzIHdoZXJlIEknbSBoZWFkZWQuIExldCdzIHNlZSBob3cgaXQncyBkb25lLiBJJ20gbG9va2luZyBmb3IgdGhlIG5pdHR5LWdyaXR0eSBvZiB0aGUgU0tCIGFsbG9jYXRpb24gd2l0aGluIHRoZSBkaWdpdGFsIE5GQyBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTk2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDE6NTEuODEyNjYzNzI5WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzNjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZmMvZGlnaXRhbF9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNDA6XFx0fTtcXG4gIDQxOlxcdFxcbiAgNDI6XFx0c3RydWN0IHNrX2J1ZmYgKmRpZ2l0YWxfc2tiX2FsbG9jKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXFxuICA0MzpcXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBsZW4pXFxuICA0NDpcXHR7XFxuICA0NTpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiAgNDY6XFx0XFxuICA0NzpcXHRcXHRza2IgPSBhbGxvY19za2IobGVuICsgZGRldi1cXHUwMDNldHhfaGVhZHJvb20gKyBkZGV2LVxcdTAwM2V0eF90YWlscm9vbSxcXG4gIDQ4OlxcdFxcdFxcdFxcdEdGUF9LRVJORUwpO1xcbiAgNDk6XFx0XFx0aWYgKHNrYilcXG4gIDUwOlxcdFxcdFxcdHNrYl9yZXNlcnZlKHNrYiwgZGRldi1cXHUwMDNldHhfaGVhZHJvb20pO1xcbiAgNTE6XFx0XFxuICA1MjpcXHRcXHRyZXR1cm4gc2tiO1xcbiAgNTM6XFx0fVxcbiAgNTQ6XFx0XFxuICA1NTpcXHR2b2lkIGRpZ2l0YWxfc2tiX2FkZF9jcmMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY3JjX2Z1bmNfdCBjcmNfZnVuYywgdTE2IGluaXQsXFxuICA1NjpcXHRcXHRcXHRcXHQgdTggYml0d2lzZV9pbnYsIHU4IG1zYl9maXJzdClcXG4gIDU3OlxcdHtcXG4gIDU4OlxcdFxcdHUxNiBjcmM7XFxuICA1OTpcXHRcXG4gIDYwOlxcdFxcdGNyYyA9IGNyY19mdW5jKGluaXQsIHNrYi1cXHUwMDNlZGF0YSwgc2tiLVxcdTAwM2VsZW4pO1xcbiAgNjE6XFx0XFxuICA2MjpcXHRcXHRpZiAoYml0d2lzZV9pbnYpXFxuICA2MzpcXHRcXHRcXHRjcmMgPSB+Y3JjO1xcbiAgNjQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQxOjUxLjgxMjc1MDEwOVoiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNzc3NDk2NzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIGBuZmNfYWxsb2NfcmVjdl9za2JgJ3MgUHJlZGVjZXNzb3JzKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIGBuZmNfYWxsb2NfcmVjdl9za2JgIOKAkyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRyYWNpbmcgaXRzIGV4ZWN1dGlvbiBwYXRoLiBJIHdhbnQgdG8ga25vdyBwcmVjaXNlbHkgd2hhdCBjb2RlIGNhbGxzIHRoaXMgZnVuY3Rpb24gYW5kIHdoYXQncyBoYXBwZW5pbmcganVzdCAqYmVmb3JlKiBpdCBnZXRzIGludm9rZWQuIFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBzZXQgdXA/IFdoYXQncyB0aGUgb3ZlcmFsbCBmbG93IG9mIHRoZSBORkMgc3RhY2sgbGVhZGluZyB1cCB0byB0aGUgcG9pbnQgd2hlcmUgdGhpcyBTS0IgKFNvY2tldCBCdWZmZXIpIGFsbG9jYXRpb24gb2NjdXJzPyBJJ20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIHB1cnBvc2Ugb2YgdGhpcyBhbGxvY2F0aW9uIGFuZCBhbnkgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2Ugb3IgZXJyb3IgaGFuZGxpbmcuIEVzc2VudGlhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgXCJ3aHlcIiBhbmQgXCJob3dcIiBvZiB0aGlzIGZ1bmN0aW9uIGNhbGwgd2l0aGluIHRoZSBsYXJnZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc5MiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDE6NTQuNTkwMjQ5MzYyWiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc4NzkxNDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mY19hbGxvY19yZWN2X3NrYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jPTkxNT1zdGF0aWMgaW50IHN0OTVoZl9pbl9zZW5kX2NtZChzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxcbi0tXFxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYy05MjUtXFxuZHJpdmVycy9uZmMvc3Q5NWhmL2NvcmUuYzo5MjY6XFx0c2tiX3Jlc3AgPSBuZmNfYWxsb2NfcmVjdl9za2IoTUFYX1JFU1BPTlNFX0JVRkZFUl9TSVpFLCBHRlBfS0VSTkVMKTtcXG5kcml2ZXJzL25mYy9zdDk1aGYvY29yZS5jLTkyNy1cXHRpZiAoIXNrYl9yZXNwKVxcbi0tXFxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYz0xNTA4PXN0YXRpYyBpbnQgdHJmNzk3MGFfc2VuZF9jbWQoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcXG4tLVxcbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmMtMTU0MS1cXHRpZiAodGltZW91dCkge1xcbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmM6MTU0MjpcXHRcXHR0cmYtXFx1MDAzZXJ4X3NrYiA9IG5mY19hbGxvY19yZWN2X3NrYihUUkY3OTcwQV9SWF9TS0JfQUxMT0NfU0laRSxcXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jLTE1NDMtXFx0XFx0XFx0XFx0XFx0XFx0IEdGUF9LRVJORUwpO1xcbi0tXFxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYz0xNzY1PXN0YXRpYyBpbnQgX3RyZjc5NzBhX3RnX2xpc3RlbihzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCB1MTYgdGltZW91dCxcXG4tLVxcbmRyaXZlcnMvbmZjL3RyZjc5NzBhLmMtMTc4OC1cXG5kcml2ZXJzL25mYy90cmY3OTcwYS5jOjE3ODk6XFx0dHJmLVxcdTAwM2VyeF9za2IgPSBuZmNfYWxsb2NfcmVjdl9za2IoVFJGNzk3MEFfUlhfU0tCX0FMTE9DX1NJWkUsXFxuZHJpdmVycy9uZmMvdHJmNzk3MGEuYy0xNzkwLVxcdFxcdFxcdFxcdFxcdCBHRlBfS0VSTkVMKTtcXG4tLVxcbmluY2x1ZGUvbmV0L25mYy9uZmMuaD0yNjk9c3RydWN0IHNrX2J1ZmYgKm5mY19hbGxvY19zZW5kX3NrYihzdHJ1Y3QgbmZjX2RldiAqZGV2LCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5pbmNsdWRlL25ldC9uZmMvbmZjLmgtMjcxLVxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCAqZXJyKTtcXG5pbmNsdWRlL25ldC9uZmMvbmZjLmg6MjcyOnN0cnVjdCBza19idWZmICpuZmNfYWxsb2NfcmVjdl9za2IodW5zaWduZWQgaW50IHNpemUsIGdmcF90IGdmcCk7XFxuaW5jbHVkZS9uZXQvbmZjL25mYy5oLTI3My1cXG4tLVxcbm5ldC9uZmMvY29yZS5jPTcxND1zdHJ1Y3Qgc2tfYnVmZiAqbmZjX2FsbG9jX3NlbmRfc2tiKHN0cnVjdCBuZmNfZGV2ICpkZXYsIHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9uZmMvY29yZS5jLTczMS0vKipcXG5uZXQvbmZjL2NvcmUuYzo3MzI6ICogbmZjX2FsbG9jX3JlY3Zfc2tiIC0gYWxsb2NhdGUgYSBza2IgZm9yIGRhdGEgZXhjaGFuZ2UgcmVzcG9uc2VzXFxubmV0L25mYy9jb3JlLmMtNzMzLSAqXFxuLS1cXG5uZXQvbmZjL2NvcmUuYy03MzYtICovXFxubmV0L25mYy9jb3JlLmM6NzM3OnN0cnVjdCBza19idWZmICpuZmNfYWxsb2NfcmVjdl9za2IodW5zaWduZWQgaW50IHNpemUsIGdmcF90IGdmcClcXG5uZXQvbmZjL2NvcmUuYy03Mzgte1xcbi0tXFxubmV0L25mYy9jb3JlLmMtNzQ5LX1cXG5uZXQvbmZjL2NvcmUuYzo3NTA6RVhQT1JUX1NZTUJPTChuZmNfYWxsb2NfcmVjdl9za2IpO1xcbm5ldC9uZmMvY29yZS5jLTc1MS1cXG4tLVxcbm5ldC9uZmMvaGNpL2NvcmUuYz04NTQ9c3RhdGljIHZvaWQgbmZjX2hjaV9yZWN2X2Zyb21fbGxjKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9uZmMvaGNpL2NvcmUuYy04ODUtXFxubmV0L25mYy9oY2kvY29yZS5jOjg4NjpcXHRcXHRoY3Bfc2tiID0gbmZjX2FsbG9jX3JlY3Zfc2tiKE5GQ19IQ0lfSENQX1BBQ0tFVF9IRUFERVJfTEVOICtcXG5uZXQvbmZjL2hjaS9jb3JlLmMtODg3LVxcdFxcdFxcdFxcdFxcdCAgICAgbXNnX2xlbiwgR0ZQX0tFUk5FTCk7XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jPTE0Mzg9c3RhdGljIHZvaWQgbmZjX2xsY3BfcmVjdl9hZ2Yoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTQ2NS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jOjE0NjY6XFx0XFx0bmV3X3NrYiA9IG5mY19hbGxvY19yZWN2X3NrYihwZHVfbGVuLCBHRlBfS0VSTkVMKTtcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE0NjctXFx0XFx0aWYgKG5ld19za2IgPT0gTlVMTCkge1xcbi0tXFxubmV0L25mYy9uY2kvaGNpLmM9NDI3PXZvaWQgbmNpX2hjaV9kYXRhX3JlY2VpdmVkX2NiKHZvaWQgKmNvbnRleHQsXFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy00NjMtXFxubmV0L25mYy9uY2kvaGNpLmM6NDY0OlxcdFxcdGhjcF9za2IgPSBuZmNfYWxsb2NfcmVjdl9za2IoTkNJX0hDSV9IQ1BfUEFDS0VUX0hFQURFUl9MRU4gK1xcbm5ldC9uZmMvbmNpL2hjaS5jLTQ2NS1cXHRcXHRcXHRcXHRcXHQgICAgIG1zZ19sZW4sIEdGUF9LRVJORUwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MTo1Ni4xNjkwNDc1OTFaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzQ3OTY2MTM2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgYnJlYWtkb3duIG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGZ1bmN0aW9uOlxuXG4qKkRpdmluZyBpbnRvIGBuZmNfYWxsb2NfcmVjdl9za2JgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYG5ldC9uZmMvY29yZS5jYCBhbmQgc3BlY2lmaWNhbGx5IHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgYG5mY19hbGxvY19yZWN2X3NrYmAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVneSBmb3IgaW5jb21pbmcgTkZDIGRhdGEuIEl0J3Mgb2J2aW91c2x5IHJlc3BvbnNpYmxlIGZvciBhbGxvY2F0aW5nIHRoZSBTS0IgKFNvY2tldCBCdWZmZXIpLCB3aGljaCBpcyB0aGUgc3RhbmRhcmQgbWVjaGFuaXNtIGluIHRoZSBMaW51eCBrZXJuZWwgZm9yIGhhbmRsaW5nIG5ldHdvcmsgZGF0YS4gSSBpbW1lZGlhdGVseSB3YW50IHRvIHNlZTpcblxuKiAgICoqSG93IGJpZyBpcyB0aGUgYnVmZmVyIGJlaW5nIGFsbG9jYXRlZD8qKiBJcyBpdCBhIGZpeGVkIHNpemUsIG9yIGRvZXMgaXQgZHluYW1pY2FsbHkgYWRqdXN0IGJhc2VkIG9uIHNvbWUgY29uZmlndXJhdGlvbiBvciBuZWdvdGlhdGlvbj8gQXJlIHRoZXJlIHNpemUgbGltaXRzIGluIHBsYWNlIHRvIHByZXZlbnQgZGVuaWFsLW9mLXNlcnZpY2Ugb3IgbWVtb3J5IGV4aGF1c3Rpb24/XG4qICAgKipXaGF0IGZsYWdzIGFyZSBiZWluZyBwYXNzZWQgdG8gYGFsbG9jX3NrYigpYD8qKiBUaGUgZmxhZ3MgcmV2ZWFsIHRoZSBiZWhhdmlvciBvZiB0aGUgU0tCIOKAkyB3aGV0aGVyIGl0J3MgbGluZWFyLCBmcmFnbWVudGVkLCBwb3RlbnRpYWxseSBzaGFyZWQsIGFuZCBzbyBvbi4gVW5kZXJzdGFuZGluZyB0aGVzZSBmbGFncyBoZWxwcyBtZSBkZWR1Y2UgdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MgYW5kIG1lbW9yeSB1c2FnZSBvZiB0aGlzIGZ1bmN0aW9uLlxuKiAgICoqSXMgdGhlcmUgYW55IGVycm9yIGhhbmRsaW5nPyoqIFdoYXQgaGFwcGVucyBpZiB0aGUgYWxsb2NhdGlvbiBmYWlscz8gSSdkIGV4cGVjdCBzb21lIGdyYWNlZnVsIGRlZ3JhZGF0aW9uLCBtYXliZSBsb2dnaW5nIGFuIGVycm9yIGFuZCByZXR1cm5pbmcgYW4gZXJyb3IgY29kZS4gSSdtIGhvcGluZyB0byBzZWUgd2VsbC1oYW5kbGVkIGVycm9yIGNvbmRpdGlvbnMsIGFuZCBubyBzdWJ0bGUgbWVtb3J5IGxlYWtzLlxuKiAgICoqV2hhdCBtZXRhZGF0YSBpcyBiZWluZyBzZXQgd2l0aGluIHRoZSBTS0I/KiogSXQncyBjcml0aWNhbCB0byBrbm93IHdoYXQgZmllbGRzIGxpa2UgYHNrYi1cdTAwM2VkZXZgLCBgc2tiLVx1MDAzZXByb3RvY29sYCwgYW5kIHNvIGZvcnRoIGFyZSBpbml0aWFsaXplZC4gVGhpcyBpbmZvcm1hdGlvbiBnaXZlcyBtZSBjb250ZXh0OyB0aGF0IGlzLCBob3cgdGhlIGtlcm5lbCBpcyB0cmFja2luZyB0aGUgTkZDIGRhdGEgYW5kIGhvdyBpdCBpcyBiZWluZyByb3V0ZWQgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLiBJdCdzIGVzcGVjaWFsbHkgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZSBORkMgbGF5ZXIgaXMgaW50ZWdyYXRpbmcgd2l0aCB0aGUgbW9yZSBzdGFuZGFyZCBuZXR3b3JraW5nIHByb3RvY29scy5cbiogICAqKkFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgTkZDLXJlbGF0ZWQgU0tCIGV4dGVuc2lvbnMsIG9yIGFyZSB0aGV5IHJlLXVzaW5nIHN0YW5kYXJkIFNLQiBtZXRhZGF0YT8qKiBUaGVyZSBjb3VsZCBiZSBzb21lIHNwZWNpZmljIG1ldGFkYXRhIHdpdGhpbiB0aGUgU0tCIHRoYXQgYXJlIHVzZWQgaW4gdGhlIE5GQyBsYXllciB0aGF0IHdvdWxkIGJlIHZlcnkgdXNlZnVsIHRvIGtub3cgYWJvdXQuXG5cbkVzc2VudGlhbGx5LCBJIHdhbnQgdG8gZm9ybSBhIG1lbnRhbCBwaWN0dXJlIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgbGFyZ2VyIHBpY3R1cmUgb2YgTkZDIGRhdGEgcmVjZXB0aW9uLiBLbm93aW5nIGFsbCBvZiB0aGUgYWJvdmUsIEknbGwgYmUgYWJsZSB0byBxdWlja2x5IGp1ZGdlIGl0cyBlZmZpY2llbmN5LCBwb3RlbnRpYWwgZm9yIGJvdHRsZW5lY2tzLCBhbmQgdnVsbmVyYWJpbGl0eSB0byB2YXJpb3VzIGF0dGFja3Mgb3IgbWVtb3J5IGlzc3Vlcy4gTXkgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGJlIGludGVncmFsIHRvIGdyYXNwaW5nIHRoZSBORkMgcHJvdG9jb2wuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjcxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDE6NTkuNjQ4NzEyMzI3WiIsIlNlcSI6NTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmZjL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MzAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MzA6XFx0XFxuIDczMTpcXHQvKipcXG4gNzMyOlxcdCAqIG5mY19hbGxvY19yZWN2X3NrYiAtIGFsbG9jYXRlIGEgc2tiIGZvciBkYXRhIGV4Y2hhbmdlIHJlc3BvbnNlc1xcbiA3MzM6XFx0ICpcXG4gNzM0OlxcdCAqIEBzaXplOiBzaXplIHRvIGFsbG9jYXRlXFxuIDczNTpcXHQgKiBAZ2ZwOiBnZnAgZmxhZ3NcXG4gNzM2OlxcdCAqL1xcbiA3Mzc6XFx0c3RydWN0IHNrX2J1ZmYgKm5mY19hbGxvY19yZWN2X3NrYih1bnNpZ25lZCBpbnQgc2l6ZSwgZ2ZwX3QgZ2ZwKVxcbiA3Mzg6XFx0e1xcbiA3Mzk6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gNzQwOlxcdFxcdHVuc2lnbmVkIGludCB0b3RhbF9zaXplO1xcbiA3NDE6XFx0XFxuIDc0MjpcXHRcXHR0b3RhbF9zaXplID0gc2l6ZSArIDE7XFxuIDc0MzpcXHRcXHRza2IgPSBhbGxvY19za2IodG90YWxfc2l6ZSwgZ2ZwKTtcXG4gNzQ0OlxcdFxcbiA3NDU6XFx0XFx0aWYgKHNrYilcXG4gNzQ2OlxcdFxcdFxcdHNrYl9yZXNlcnZlKHNrYiwgMSk7XFxuIDc0NzpcXHRcXG4gNzQ4OlxcdFxcdHJldHVybiBza2I7XFxuIDc0OTpcXHR9XFxuIDc1MDpcXHRFWFBPUlRfU1lNQk9MKG5mY19hbGxvY19yZWN2X3NrYik7XFxuIDc1MTpcXHRcXG4gNzUyOlxcdC8qKlxcbiA3NTM6XFx0ICogbmZjX3RhcmdldHNfZm91bmQgLSBpbmZvcm0gdGhhdCB0YXJnZXRzIHdlcmUgZm91bmRcXG4gNzU0OlxcdCAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQxOjU5LjY0ODg0MzcyN1oiLCJTZXEiOjU1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0OTk3MDM4Mjc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29tbWl0IGluIGBuZXQvbmZjL2RpZ2l0YWxfZGVwLmNgKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGNvbW1pdCBpcyBkb2luZy4gVGhlIGBnaXQgbG9nYCBzaG91bGQgdGVsbCBtZSB0aGUgc3RvcnkgaGVyZS5cblxuTG9va2luZyBhdCB0aGUgZGlmZiwgaXQgc2VlbXMgdGhlcmUgYXJlIHR3byBkaXN0aW5jdCBwYXJ0cyB0byB0aGlzIHBhdGNoLlxuXG4qICAgKipQYXJ0IDEqKjogSW4gdGhlIGZpcnN0IGJsb2NrLCBJIHNlZSBzb21lIGNoYW5nZXMgaW4gYGRpZ2l0YWxfcmVjdl9kZXBfZGF0YV9nYXRoZXJgLiBTcGVjaWZpY2FsbHksIHRoZSBhbGxvY2F0aW9uIGFuZCBleHBhbnNpb24gb2YgdGhlIGBjaGFpbmluZ19za2JgIHdpdGhpbiB0aGUgTkZDIERFUCBkYXRhIGhhbmRsaW5nIGFyZSBiZWluZyBtb2RpZmllZC4gSW5zdGVhZCBvZiB1c2luZyBgbmZjX2FsbG9jX3JlY3Zfc2tiYCwgYSBjdXN0b20gYGRpZ2l0YWxfc2tiX2FsbG9jYCBpcyBiZWluZyBpbnRyb2R1Y2VkLCBhbmQgdGhlIGBza2JfY29weV9leHBhbmRgIGlzIHJlY2VpdmluZyBzbGlnaHRseSBtb2RpZmllZCBhcmd1bWVudHMuIEl0IGxvb2tzIGxpa2UgYHR4X2hlYWRyb29tYCBhbmQgYHR4X3RhaWxyb29tYCBhcmUgbm93IGJlaW5nIGNvbnNpZGVyZWQgaW4gdGhlIGV4cGFuc2lvbiBjYWxjdWxhdGlvbiwgd2hpY2ggc3VnZ2VzdHMgc29tZW9uZSBoYXMgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGF0YSdzIHBvdGVudGlhbCByZXF1aXJlbWVudHMuXG5cbiogICAqKlBhcnQgMioqOiBUaGUgc2Vjb25kIHBhcnQgb2YgdGhlIHBhdGNoIGlzIG1vZGlmeWluZyBgZGlnaXRhbF90Z19zZW5kX2F0cl9yZXNfY29tcGxldGVgLiBJdCBsb29rcyBsaWtlIHRoZSBvZmZzZXQgY2FsY3VsYXRpb24gZm9yIGhhbmRsaW5nIEFUUlxcX1JFUyBpcyBiZWluZyByZWZpbmVkLiBJdCBhcHBlYXJzIHRvIGluY2x1ZGUgYSBjaGVjayBvbiB0aGUgZnJhbWUgbGVuZ3RoIGFuZCBhIGBiYWRfZnJhbWVgIGxhYmVsLiBUaGUgb3JpZ2luYWwgY29kZSBzZWVtcyB0byBhc3N1bWUgdGhlIGxlbmd0aCBvZiBhIGZyYW1lIG1heSB2YXJ5LCBzbyB0aGlzIG11c3QgYmUgYSBzZWN1cml0eSBpbXByb3ZlbWVudCBvciBhbiBlZGdlLWNhc2UgZml4LiBJdCBhbHNvIGxvb2tzIGxpa2UgYSByZWR1bmRhbnQgcmV0dXJuIGhhcyBiZWVuIHJlbW92ZWQuXG5cblVsdGltYXRlbHksIEknbGwgcmV2aWV3IHRoZSBjb21taXQgbWVzc2FnZSBhbmQgcmVsYXRlZCBpc3N1ZXMgdG8gZnVsbHkgZ3Jhc3AgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhlc2UgY2hhbmdlcy4gQnV0LCBhdCBmaXJzdCBnbGFuY2UsIHRoZSB0d28gY2hhbmdlcyBhcHBlYXIgdG8gb3B0aW1pemUgdGhlIGFsbG9jYXRpb24gYW5kIHByb2Nlc3Npbmcgb2YgTkZDIERFUCBkYXRhIGFuZCB0byBjbGFyaWZ5IGEgbG9naWMgZmxhdyBpbiB0aGUgaGFuZGxpbmcgb2YgQVRSXFxfUkVTLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE3NSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQyOjA0LjY0NTg4NDczMVoiLCJTZXEiOjU2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxNTA3NTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRpZ2l0YWxfdGdfc2VuZF9hdHJfcmVzX2NvbXBsZXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25mYy9kaWdpdGFsX2RlcC5jPTEzOTg9c3RhdGljIHZvaWQgZGlnaXRhbF90Z19yZWN2X3BzbF9yZXEoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdm9pZCAqYXJnLFxcbi0tXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTE0NjYtXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjE0Njc6c3RhdGljIHZvaWQgZGlnaXRhbF90Z19zZW5kX2F0cl9yZXNfY29tcGxldGUoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTQ2OC1cXHRcXHRcXHRcXHRcXHQgICAgIHZvaWQgKmFyZywgc3RydWN0IHNrX2J1ZmYgKnJlc3ApXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM9MTQ5OD1zdGF0aWMgaW50IGRpZ2l0YWxfdGdfc2VuZF9hdHJfcmVzKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTU0Mi1cXHRyYyA9IGRpZ2l0YWxfdGdfc2VuZF9jbWQoZGRldiwgc2tiLCA5OTksXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjE1NDM6XFx0XFx0XFx0XFx0IGRpZ2l0YWxfdGdfc2VuZF9hdHJfcmVzX2NvbXBsZXRlLCBOVUxMKTtcXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTU0NC1cXHRpZiAocmMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQyOjA0LjgxNzM5ODExWiIsIlNlcSI6NTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjgxOTk1NDg5OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTkZDIERyaXZlciBQYXRjaCBmb3IgUG90ZW50aWFsIElzc3VlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEknbSBsb29raW5nIGF0IGBkaWdpdGFsX3RnX3NlbmRfYXRyX3Jlc19jb21wbGV0ZWAuIEl0J3MgYSBjYWxsYmFjayBmdW5jdGlvbiwgYW5kIHRoZSBvcmlnaW5hbCBjb2RlIGhhZCBzb21lIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0aWVzLiBTcGVjaWZpY2FsbHksIGlmIHRoZSByZXNwb25zZSBidWZmZXIgYHJlc3BgIHdhcyBlbXB0eSAoYHJlc3AtXHUwMDNlbGVuID09IDBgKSwgYWNjZXNzaW5nIGByZXNwLVx1MDAzZWRhdGFbMF1gIHdvdWxkIGxlYWQgdG8gYSBjcmFzaC4gU2ltaWxhcmx5LCBpZiB0aGUgcmVzcG9uc2UgbGVuZ3RoIHdhcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYW4gY2FsY3VsYXRlZCBgb2Zmc2V0YCwgcmVhZGluZyBgcmVzcC1cdTAwM2VkYXRhW29mZnNldF1gIHdvdWxkIGJlIGJhZCBuZXdzLiBUaGUgcGF0Y2ggYWRkZWQgbGVuZ3RoIGNoZWNrcyB0byBwcmV2ZW50IHRoZXNlIGlzc3Vlcy4gR29vZCBjYXRjaC4gVGhlIGNoZWNrIG5vdyBlbnN1cmVzIHRoYXQgdGhlIHJlc3BvbnNlIGxlbmd0aCBpcyBzdWZmaWNpZW50IGJlZm9yZSBhY2Nlc3NpbmcgdGhlIGRhdGEgYXQgdGhlIHNwZWNpZmllZCBvZmZzZXRzLlxuXG5Ob3csIEknbSBkaXZpbmcgaW50byB0aGUgc2Vjb25kIHBhcnQgb2YgdGhlIHBhdGNoLCBzcGVjaWZpY2FsbHkgYGRpZ2l0YWxfcmVjdl9kZXBfZGF0YV9nYXRoZXJgLCBhbmQgSSBzZWUgYW4gYWxsb2NhdGlvbiBmb3IgYGRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiYC4gU29tZXRoaW5nIHNlZW1zIG9mZiBoZXJlLiBPcmlnaW5hbGx5LCB0aGUgY29kZSB1c2VkIGBuZmNfYWxsb2NfcmVjdl9za2JgIHdoaWNoIGFsbG9jYXRlcyB0aGUgYHNrYmAgdGhlbiByZXNlcnZlcyBhIHNpbmdsZSBieXRlIHVzaW5nIGBza2JfcmVzZXJ2ZWAuIEhvd2V2ZXIsIHRoZSBwYXRjaCBjaGFuZ2VkIGl0IHRvIGBkaWdpdGFsX3NrYl9hbGxvY2AgYW5kIHRoZSB1c2Ugb2YgYHNrYl9jb3B5X2V4cGFuZGAgd2l0aCBkaWZmZXJlbnQgaGVhZHJvb20gYW5kIHRhaWxyb29tIGNhbGN1bGF0aW9ucy5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBjaGFuZ2VkIGFuZCB3aHkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdXNpbmcgYGRpZ2l0YWxfc2tiX2FsbG9jYCBhbmQgdGhpcyBuZXcgYHNrYl9jb3B5X2V4cGFuZGAgd2l0aCB0aGUgYWx0ZXJlZCBoZWFkcm9vbSBhbmQgdGFpbHJvb20gY2FsY3VsYXRpb25zLiBTbywgSSBuZWVkIHRvIGxvb2sgYXQgd2hlcmUgYGRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiYCBpcyB1c2VkIGxhdGVyIG9uIGluIHRoZSBjb2RlIGFuZCB3aGF0IGhhcHBlbnMgdG8gdGhlIHNrYiBhbmQgdGhlIG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlLiBMZXQncyBzdGFydCBieSBzZWFyY2hpbmcgdGhlIGNvZGViYXNlIGZvciBldmVyeSBpbnN0YW5jZSBvZiBgY2hhaW5pbmdfc2tiYC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gZXZhbHVhdGUgdGhlIHBhdGNoIGFuZCBkZXRlcm1pbmUgaWYgdGhlIGNoYW5nZXMgYXJlIGNvcnJlY3QgYW5kLCBtb3JlIGltcG9ydGFudGx5LCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIG5ldyBpc3N1ZXMgaW50cm9kdWNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3ODgsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDI6MTMuMDE2OTUxMzc3WiIsIlNlcSI6NTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTY1OTA1NzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoYWluaW5nX3NrYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9uZmMvZGlnaXRhbC5oPTE5Mj1zdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2IHtcXG4tLVxcbmluY2x1ZGUvbmV0L25mYy9kaWdpdGFsLmgtMjI0LVxcbmluY2x1ZGUvbmV0L25mYy9kaWdpdGFsLmg6MjI1OlxcdHN0cnVjdCBza19idWZmICpjaGFpbmluZ19za2I7XFxuaW5jbHVkZS9uZXQvbmZjL2RpZ2l0YWwuaC0yMjYtXFx0c3RydWN0IGRpZ2l0YWxfZGF0YV9leGNoICpkYXRhX2V4Y2g7XFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM9MjAwPWRpZ2l0YWxfc2VuZF9kZXBfZGF0YV9wcmVwKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMjEwLVxcdFxcdGlmICghbmV3X3NrYikge1xcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzoyMTE6XFx0XFx0XFx0a2ZyZWVfc2tiKGRkZXYtXFx1MDAzZWNoYWluaW5nX3NrYik7XFxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjIxMjpcXHRcXHRcXHRkZGV2LVxcdTAwM2VjaGFpbmluZ19za2IgPSBOVUxMO1xcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0yMTMtXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMjE5LVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzoyMjA6XFx0XFx0ZGRldi1cXHUwMDNlY2hhaW5pbmdfc2tiID0gc2tiO1xcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0yMjEtXFx0XFx0ZGRldi1cXHUwMDNlZGF0YV9leGNoID0gZGF0YV9leGNoO1xcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0yMjItXFx0fSBlbHNlIHtcXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6MjIzOlxcdFxcdGRkZXYtXFx1MDAzZWNoYWluaW5nX3NrYiA9IE5VTEw7XFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTIyNC1cXHRcXHRuZXdfc2tiID0gc2tiO1xcbi0tXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jPTIzMT1kaWdpdGFsX3JlY3ZfZGVwX2RhdGFfZ2F0aGVyKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHU4IHBmYixcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0yNDAtXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjI0MTpcXHRpZiAoRElHSVRBTF9ORkNfREVQX01JX0JJVF9TRVQocGZiKSBcXHUwMDI2XFx1MDAyNiAoIWRkZXYtXFx1MDAzZWNoYWluaW5nX3NrYikpIHtcXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6MjQyOlxcdFxcdGRkZXYtXFx1MDAzZWNoYWluaW5nX3NrYiA9XFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTI0My1cXHRcXHRcXHRkaWdpdGFsX3NrYl9hbGxvYyhkZGV2LFxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0yNDQtXFx0XFx0XFx0XFx0XFx0ICA4ICogZGRldi1cXHUwMDNlbG9jYWxfcGF5bG9hZF9tYXgpO1xcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzoyNDU6XFx0XFx0aWYgKCFkZGV2LVxcdTAwM2VjaGFpbmluZ19za2IpIHtcXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMjQ2LVxcdFxcdFxcdHJjID0gLUVOT01FTTtcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0yNTAtXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjI1MTpcXHRpZiAoZGRldi1cXHUwMDNlY2hhaW5pbmdfc2tiKSB7XFxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjI1MjpcXHRcXHRpZiAocmVzcC1cXHUwMDNlbGVuIFxcdTAwM2Ugc2tiX3RhaWxyb29tKGRkZXYtXFx1MDAzZWNoYWluaW5nX3NrYikpIHtcXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6MjUzOlxcdFxcdFxcdG5ld19za2IgPSBza2JfY29weV9leHBhbmQoZGRldi1cXHUwMDNlY2hhaW5pbmdfc2tiLFxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0yNTQtXFx0XFx0XFx0XFx0XFx0XFx0ICBkZGV2LVxcdTAwM2V0eF9oZWFkcm9vbSxcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0yNjItXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjI2MzpcXHRcXHRcXHRrZnJlZV9za2IoZGRldi1cXHUwMDNlY2hhaW5pbmdfc2tiKTtcXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6MjY0OlxcdFxcdFxcdGRkZXYtXFx1MDAzZWNoYWluaW5nX3NrYiA9IG5ld19za2I7XFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTI2NS1cXHRcXHR9XFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTI2Ni1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6MjY3OlxcdFxcdHNrYl9wdXRfZGF0YShkZGV2LVxcdTAwM2VjaGFpbmluZ19za2IsIHJlc3AtXFx1MDAzZWRhdGEsIHJlc3AtXFx1MDAzZWxlbik7XFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTI2OC1cXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0yNzktXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjI4MDpcXHRcXHRyZXNwID0gZGRldi1cXHUwMDNlY2hhaW5pbmdfc2tiO1xcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzoyODE6XFx0XFx0ZGRldi1cXHUwMDNlY2hhaW5pbmdfc2tiID0gTlVMTDtcXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMjgyLVxcdH1cXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0yODgtXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjI4OTpcXHRrZnJlZV9za2IoZGRldi1cXHUwMDNlY2hhaW5pbmdfc2tiKTtcXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6MjkwOlxcdGRkZXYtXFx1MDAzZWNoYWluaW5nX3NrYiA9IE5VTEw7XFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTI5MS1cXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYz02ODY9c3RhdGljIHZvaWQgZGlnaXRhbF9pbl9yZWN2X2RlcF9yZXMoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdm9pZCAqYXJnLFxcbi0tXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTgzMy1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6ODM0OlxcdFxcdGlmICghZGRldi1cXHUwMDNlY2hhaW5pbmdfc2tiKSB7XFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTgzNS1cXHRcXHRcXHRQUk9UT0NPTF9FUlIoXFxcIjE0LjEyLjQuM1xcXCIpO1xcbi0tXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTg0Ni1cXHRcXHRyYyA9IGRpZ2l0YWxfaW5fc2VuZF9kZXBfcmVxKGRkZXYsIE5VTEwsXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjg0NzpcXHRcXHRcXHRcXHRcXHQgICAgIGRkZXYtXFx1MDAzZWNoYWluaW5nX3NrYixcXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtODQ4LVxcdFxcdFxcdFxcdFxcdCAgICAgZGRldi1cXHUwMDNlZGF0YV9leGNoKTtcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy04ODgtXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjg4OTpcXHRrZnJlZV9za2IoZGRldi1cXHUwMDNlY2hhaW5pbmdfc2tiKTtcXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6ODkwOlxcdGRkZXYtXFx1MDAzZWNoYWluaW5nX3NrYiA9IE5VTEw7XFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTg5MS1cXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYz05MDQ9aW50IGRpZ2l0YWxfaW5fc2VuZF9kZXBfcmVxKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtOTA4LVxcdHN0cnVjdCBkaWdpdGFsX2RlcF9yZXFfcmVzICpkZXBfcmVxO1xcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzo5MDk6XFx0c3RydWN0IHNrX2J1ZmYgKmNoYWluaW5nX3NrYiwgKnRtcF9za2I7XFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTkxMC1cXHRpbnQgcmM7XFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtOTIyLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzo5MjM6XFx0Y2hhaW5pbmdfc2tiID0gZGRldi1cXHUwMDNlY2hhaW5pbmdfc2tiO1xcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy05MjQtXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtOTQwLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzo5NDE6XFx0XFx0a2ZyZWVfc2tiKGNoYWluaW5nX3NrYik7XFxubmV0L25mYy9kaWdpdGFsX2RlcC5jOjk0MjpcXHRcXHRkZGV2LVxcdTAwM2VjaGFpbmluZ19za2IgPSBOVUxMO1xcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy05NDMtXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM9MTA3Nz1zdGF0aWMgdm9pZCBkaWdpdGFsX3RnX3JlY3ZfZGVwX3JlcShzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCB2b2lkICphcmcsXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTI0NC1cXHRcXHQvKiBLZWVwIG9uIHNlbmRpbmcgY2hhaW5lZCBQRFUgKi9cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6MTI0NTpcXHRcXHRpZiAoIWRkZXYtXFx1MDAzZWNoYWluaW5nX3NrYiB8fFxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xMjQ2LVxcdFxcdCAgICBESUdJVEFMX05GQ19ERVBfUEZCX1BOSShwZmIpICE9XFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTI1NC1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6MTI1NTpcXHRcXHRyYyA9IGRpZ2l0YWxfdGdfc2VuZF9kZXBfcmVzKGRkZXYsIGRkZXYtXFx1MDAzZWNoYWluaW5nX3NrYik7XFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTEyNTYtXFx0XFx0aWYgKHJjKVxcbi0tXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTEyNzktZXhpdDpcXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6MTI4MDpcXHRrZnJlZV9za2IoZGRldi1cXHUwMDNlY2hhaW5pbmdfc2tiKTtcXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6MTI4MTpcXHRkZGV2LVxcdTAwM2VjaGFpbmluZ19za2IgPSBOVUxMO1xcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xMjgyLVxcbi0tXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jPTEyOTc9aW50IGRpZ2l0YWxfdGdfc2VuZF9kZXBfcmVzKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTI5OS1cXHRzdHJ1Y3QgZGlnaXRhbF9kZXBfcmVxX3JlcyAqZGVwX3JlcztcXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6MTMwMDpcXHRzdHJ1Y3Qgc2tfYnVmZiAqY2hhaW5pbmdfc2tiLCAqdG1wX3NrYjtcXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTMwMS1cXHRpbnQgcmM7XFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTMxOS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6MTMyMDpcXHRjaGFpbmluZ19za2IgPSBkZGV2LVxcdTAwM2VjaGFpbmluZ19za2I7XFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTEzMjEtXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTMzNy1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6MTMzODpcXHRcXHRrZnJlZV9za2IoY2hhaW5pbmdfc2tiKTtcXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6MTMzOTpcXHRcXHRkZGV2LVxcdTAwM2VjaGFpbmluZ19za2IgPSBOVUxMO1xcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy0xMzQwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MjoxNC41ODI4Njk4MjNaIiwiU2VxIjo1OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDE0MjgzNDc5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYGRpZ2l0YWxfcmVjdl9kZXBfZGF0YV9nYXRoZXJgIGZvciBORkMgREVQIERhdGEgSGFuZGxpbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXNzZWN0IHRoaXMgYGRpZ2l0YWxfcmVjdl9kZXBfZGF0YV9nYXRoZXJgIGZ1bmN0aW9uLiBUaGUgZmlyc3QgdGhpbmcgSSBzZWUgaXMgdGhlIGhhbmRsaW5nIG9mIHRoZSBgY2hhaW5pbmdfc2tiYC4gSXQgc2VlbXMgdG8ga2ljayBpbiB3aGVuIHRoZSBgRElHSVRBTF9ORkNfREVQX01JX0JJVF9TRVQocGZiKWAgY29uZGl0aW9uIGlzIHRydWUgYW5kIHRoZSBkZXZpY2UgZG9lc24ndCBhbHJlYWR5IGhhdmUgYSBgY2hhaW5pbmdfc2tiYC4gIEluIHRoaXMgY2FzZSwgd2UgYWxsb2NhdGUgYSBuZXcgYGNoYWluaW5nX3NrYmAuIFRoZSBhbGxvY2F0aW9uIGlzIHNpemVkIGJhc2VkIG9uIGBkZGV2LVx1MDAzZWxvY2FsX3BheWxvYWRfbWF4YCwgd2hpY2ggbGlrZWx5IHJlcHJlc2VudHMgdGhlIG1heGltdW0gZXhwZWN0ZWQgcGF5bG9hZCBzaXplLiBJZiBhbGxvY2F0aW9uIGZhaWxzLCB3ZSBiYWlsIG91dCB3aXRoIGFuIGBFTk9NRU1gIGVycm9yLlxuXG5JZiB3ZSBoYXZlIGEgYGNoYWluaW5nX3NrYmAgYWxyZWFkeSBhbGxvY2F0ZWQsIHdlIG5lZWQgdG8gY2hlY2sgaWYgd2UgY2FuIGZpdCB0aGUgbmV3IGluY29taW5nIGRhdGEgKGByZXNwLVx1MDAzZWxlbmApIGludG8gaXQuIElmIHRoZSBgcmVzcC1cdTAwM2VsZW5gIGV4Y2VlZHMgdGhlIGF2YWlsYWJsZSB0YWlscm9vbSwgd2UgY29weSBhbmQgZXhwYW5kIHRoZSBgY2hhaW5pbmdfc2tiYC4gVGhpcyB1c2VzIGBza2JfY29weV9leHBhbmRgLCBpbmNyZWFzaW5nIHRoZSBjYXBhY2l0eSBvZiB0aGUgU0tCLCBwcmVzZXJ2aW5nIHRoZSBvcmlnaW5hbCBkYXRhLiBJZiB0aGlzIGV4cGFuc2lvbiBmYWlscywgd2UsIGFnYWluLCByZXR1cm4gYEVOT01FTWAuXG5cbk5vdywgcmVnYXJkbGVzcyBvZiB0aGUgbWVtb3J5IG9wZXJhdGlvbnMsIGlmIHdlJ3JlIG5vdCBhbGxvY2F0aW5nLCB3ZSdyZSBwdXR0aW5nIGRhdGEgZnJvbSB0aGUgaW5jb21pbmcgYHJlc3BgIGludG8gdGhlIGBjaGFpbmluZ19za2JgLiBXZSBmcmVlIHRoZSBvcmlnaW5hbCBgcmVzcGAgKHRoZSBpbnB1dCkuXG5cblRoZSBjcnVjaWFsIHBhcnQgaXMgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljOiBpZiBgRElHSVRBTF9ORkNfREVQX01JX0JJVF9TRVQocGZiKWAgaXMgdHJ1ZSwgd2Ugc2VuZCBhbiBBQ0sgdXNpbmcgYHNlbmRfYWNrYCwgYW5kIHJldHVybiBOVUxMLiBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCByZXBlYXRlZGx5IHRvIHByb2Nlc3MgY2hhaW5lZCBmcmFnbWVudHMuXG5cbkhvd2V2ZXIsIGlmIHRoYXQgYml0IGlzICpub3QqIHNldCwgdGhhdCBtZWFucyBpdCdzIHRoZSAqbGFzdCogZnJhZ21lbnQgb2YgdGhlIGNoYWluLiAgSW4gdGhpcyBmaW5hbCBjYXNlLCB3ZSBkbyB0aGUgY3J1Y2lhbCBiaXQuIFdlIGFzc2lnbiB0aGUgYWNjdW11bGF0ZWQgYGNoYWluaW5nX3NrYmAgdG8gYHJlc3BgLCBudWxsIG91dCBgZGRldi1cdTAwM2VjaGFpbmluZ19za2JgIChzaWduYWxpbmcgdGhlIGVuZCBvZiBjaGFpbmluZyksIGFuZCAqdGhlbiogcmV0dXJuIGByZXNwYC4gU28gdGhlIGNoYWluZWQgZGF0YSBpcyByZXR1cm5lZCBhZnRlciBhbGwgZnJhZ21lbnRzIGFyZSByZWNlaXZlZC5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIHRyYWNlIGJhY2sgd2hlcmUgYGRpZ2l0YWxfcmVjdl9kZXBfZGF0YV9nYXRoZXJgIGlzIGNhbGxlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBob3cgdGhlIHJldHVybmVkIGByZXNwYCBpcyB1c2VkLiBUaGlzIHdpbGwgc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgbGFyZ2VyIGRhdGEgZXhjaGFuZ2UgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0NDAsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDI6MTguNzI1NzA3MTY0WiIsIlNlcSI6NjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjA5NzUyMjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRpZ2l0YWxfcmVjdl9kZXBfZGF0YV9nYXRoZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25mYy9kaWdpdGFsX2RlcC5jPTIzMD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKlxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzoyMzE6ZGlnaXRhbF9yZWN2X2RlcF9kYXRhX2dhdGhlcihzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCB1OCBwZmIsXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTIzMi1cXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpyZXNwLFxcbi0tXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jPTY4Nj1zdGF0aWMgdm9pZCBkaWdpdGFsX2luX3JlY3ZfZGVwX3JlcyhzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCB2b2lkICphcmcsXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtNzk4LVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzo3OTk6XFx0XFx0cmVzcCA9IGRpZ2l0YWxfcmVjdl9kZXBfZGF0YV9nYXRoZXIoZGRldiwgcGZiLCByZXNwLFxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYy04MDAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGRpZ2l0YWxfaW5fc2VuZF9hY2ssXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM9MTA3Nz1zdGF0aWMgdm9pZCBkaWdpdGFsX3RnX3JlY3ZfZGVwX3JlcShzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCB2b2lkICphcmcsXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMTE4My1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmM6MTE4NDpcXHRcXHRyZXNwID0gZGlnaXRhbF9yZWN2X2RlcF9kYXRhX2dhdGhlcihkZGV2LCBwZmIsIHJlc3AsXFxubmV0L25mYy9kaWdpdGFsX2RlcC5jLTExODUtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGRpZ2l0YWxfdGdfc2VuZF9hY2ssIE5VTEwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MjoyMC4zMzU0NjY2MDRaIiwiU2VxIjo2MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTEzOTc3MDM0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQgSSB3b3VsZCBiZSB0aGlua2luZywgZ2l2ZW4gdGhhdCBJJ20gbG9va2luZyBhdCB0aG9zZSBzcGVjaWZpYyBsaW5lcyBvZiBgbmV0L25mYy9kaWdpdGFsX2RlcC5jYDpcblxuKipEZWVwIERpdmUgaW50byBEaWdpdGFsIERFUCBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZm9jdXMgb24gc29tZSBjcml0aWNhbCBzZWN0aW9ucyB3aXRoaW4gYG5ldC9uZmMvZGlnaXRhbF9kZXAuY2AuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGhhcHBlbmluZyBhcm91bmQgbGluZXMgNzk1LTgyMCBhbmQgdGhlbiBqdW1wIGFoZWFkIHRvIGxpbmVzIDExODAtMTIwMC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGxpa2VseSBnb2luZyB0byBiZSBpbiBhbiBhcmVhIHdpdGggYSBoYW5kc2hha2UgcHJvY2Vzcywgb3IgcGVyaGFwcyBmcmFtaW5nL2RhdGEgZXhjaGFuZ2UuXG5cblNwZWNpZmljYWxseSwgSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTpcblxuKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogV2hhdCdzIHRoZSBlcnJvciBjaGVja2luZyBsaWtlIGFyb3VuZCB0aGVzZSBzZWN0aW9ucz8gQXJlIHRoZXJlIHJvYnVzdCBjaGVja3MgaW4gcGxhY2UgZm9yIGV4cGVjdGVkIGNvbmRpdGlvbnMsIGVzcGVjaWFsbHkgdGltaW5nIGNvbnN0cmFpbnRzIG9yIGRhdGEgdmFsaWRpdHk/XG4qICAgKipEYXRhIFN0cnVjdHVyZSBJbnRlcmFjdGlvbnM6KiogSG93IGRvIHRoZXNlIGxpbmVzIGludGVyYWN0IHdpdGggdGhlIG92ZXJhbGwgYGRpZ2l0YWxfZGVwYCBkYXRhIHN0cnVjdHVyZXM/IEFyZSB0aGV5IHJlYWRpbmcsIHdyaXRpbmcsIG9yIG1vZGlmeWluZyBhbnkgY3JpdGljYWwgZmllbGRzPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgSSBuZWVkIHRvIGJlIG1pbmRmdWwgb2Y/XG4qICAgKipTdGF0ZSBNYW5hZ2VtZW50OioqIFdoYXQgc3RhdGUgdHJhbnNpdGlvbnMgYXJlIG9jY3VycmluZz8gSXMgdGhpcyBjb2RlIHJlbGF0ZWQgdG8gaW5pdGlhbGl6YXRpb24sIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCwgZGF0YSB0cmFuc2Zlciwgb3IgZGlzY29ubmVjdGlvbj8gVW5kZXJzdGFuZGluZyB0aGUgc3RhdGUgZmxvdyBpcyBrZXkgaGVyZS5cbiogICAqKkludGVycnVwdCBIYW5kbGluZzoqKiBEbyB0aGVzZSBsaW5lcyByZWxhdGUgdG8gYW55IGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmVzPyBJJ2xsIG5lZWQgdG8gdGhpbmsgYWJvdXQgcG90ZW50aWFsIGNvbnRlbnRpb24gaXNzdWVzIGlmIGludGVycnVwdHMgYXJlIGludm9sdmVkLlxuKiAgICoqQ29uY3VycmVuY3k6KiogQXJlIHRoZXNlIHNlY3Rpb25zIHBvdGVudGlhbGx5IGFjY2Vzc2VkIGJ5IG11bHRpcGxlIHRocmVhZHMgb3IgcHJvY2Vzc2VzPyBJZiBzbywgYXJlIHRoZXJlIHN1ZmZpY2llbnQgbG9ja3Mgb3Igc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgaW4gcGxhY2UgdG8gZ3VhcmFudGVlIGRhdGEgaW50ZWdyaXR5P1xuKiAgICoqUG93ZXIgTWFuYWdlbWVudDoqKiBBcmUgdGhlcmUgYW55IHBvd2VyLXJlbGF0ZWQgY29uc2lkZXJhdGlvbnM/IEFyZSB0aGVyZSBhbnkgcG93ZXItc2F2aW5nIG1lY2hhbmlzbXMgYmVpbmcgZW1wbG95ZWQgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhlIGJlaGF2aW91cj9cbiogICAqKk5GQyBwcm90b2NvbCBkZXRhaWxzOioqIElzIGl0IGEgc3BlY2lmaWMgcGFydCBvZiB0aGUgTkZDIHByb3RvY29sLCBzdWNoIGFzIElTTyAxNDQ0My00IG9yIHNvbWV0aGluZyBlbHNlPyBJIG5lZWQgdG8ga25vdyBpbiB3aGljaCBzcGVjaWZpYyBkZXRhaWxzIG9mIE5GQyB0aGlzIGNvZGUgZmFsbHMgaW50by5cblxuSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBjYWxscyB0byBvdGhlciBmdW5jdGlvbnMgd2l0aGluIHRoZSBzYW1lIGZpbGUgb3IsIGlkZWFsbHksIGZyb20gdGhlIGNvcmUgTkZDIHN0YWNrLCBhbmQgSSdsbCBuZWVkIHRvIHRyYWNlIHRob3NlIGludGVyYWN0aW9ucyB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQuIExpbmUgbnVtYmVycyBhbG9uZSBkb24ndCB0ZWxsIHRoZSB3aG9sZSBzdG9yeSwgYnV0IHRoZXkncmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIGV4cGVjdCB0byBiZSBhYmxlIHRvIGV4dHJhY3QgdGhlIGRldGFpbHMgb2YgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIGNhbGxzIGFuZCB1bmRlcnN0YW5kIHdoYXQgaXMgaGFwcGVuaW5nLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc4MzgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MjoyNS40NzUyMzkxMzlaIiwiU2VxIjo2MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25mYy9kaWdpdGFsX2RlcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc5MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc5MDpcXHRcXHRcXHRcXHRnb3RvIGVycm9yO1xcbiA3OTE6XFx0XFx0XFx0fVxcbiA3OTI6XFx0XFxuIDc5MzpcXHRcXHRcXHRkZGV2LVxcdTAwM2VjdXJyX25mY19kZXBfcG5pID1cXG4gNzk0OlxcdFxcdFxcdFxcdERJR0lUQUxfTkZDX0RFUF9QRkJfUE5JKGRkZXYtXFx1MDAzZWN1cnJfbmZjX2RlcF9wbmkgKyAxKTtcXG4gNzk1OlxcdFxcbiA3OTY6XFx0XFx0XFx0a2ZyZWVfc2tiKGRkZXYtXFx1MDAzZXNhdmVkX3NrYik7XFxuIDc5NzpcXHRcXHRcXHRkZGV2LVxcdTAwM2VzYXZlZF9za2IgPSBOVUxMO1xcbiA3OTg6XFx0XFxuIDc5OTpcXHRcXHRcXHRyZXNwID0gZGlnaXRhbF9yZWN2X2RlcF9kYXRhX2dhdGhlcihkZGV2LCBwZmIsIHJlc3AsXFxuIDgwMDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgZGlnaXRhbF9pbl9zZW5kX2FjayxcXG4gODAxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBkYXRhX2V4Y2gpO1xcbiA4MDI6XFx0XFx0XFx0aWYgKElTX0VSUihyZXNwKSkge1xcbiA4MDM6XFx0XFx0XFx0XFx0cmMgPSBQVFJfRVJSKHJlc3ApO1xcbiA4MDQ6XFx0XFx0XFx0XFx0cmVzcCA9IE5VTEw7XFxuIDgwNTpcXHRcXHRcXHRcXHRnb3RvIGVycm9yO1xcbiA4MDY6XFx0XFx0XFx0fVxcbiA4MDc6XFx0XFxuIDgwODpcXHRcXHRcXHQvKiBJZiByZXNwIGlzIE5VTEwgdGhlbiB3ZSdyZSBzdGlsbCBjaGFpbmluZyBzbyByZXR1cm4gYW5kXFxuIDgwOTpcXHRcXHRcXHQgKiB3YWl0IGZvciB0aGUgbmV4dCBwYXJ0IG9mIHRoZSBQRFUuICBFbHNlLCB0aGUgUERVIGlzXFxuIDgxMDpcXHRcXHRcXHQgKiBjb21wbGV0ZSBzbyBwYXNzIGl0IHVwLlxcbiA4MTE6XFx0XFx0XFx0ICovXFxuIDgxMjpcXHRcXHRcXHRpZiAoIXJlc3ApXFxuIDgxMzpcXHRcXHRcXHRcXHRyZXR1cm47XFxuIDgxNDpcXHRcXG4gODE1OlxcdFxcdFxcdHJjID0gMDtcXG4gODE2OlxcdFxcdFxcdGJyZWFrO1xcbiA4MTc6XFx0XFxuIDgxODpcXHRcXHRjYXNlIERJR0lUQUxfTkZDX0RFUF9QRkJfQUNLX05BQ0tfUERVOlxcbiA4MTk6XFx0XFx0XFx0aWYgKERJR0lUQUxfTkZDX0RFUF9OQUNLX0JJVF9TRVQocGZiKSkge1xcbiA4MjA6XFx0XFx0XFx0XFx0UFJPVE9DT0xfRVJSKFxcXCIxNC4xMi40LjVcXFwiKTtcXG4gODIxOlxcdFxcdFxcdFxcdHJjID0gLUVJTztcXG4gODIyOlxcdFxcdFxcdFxcdGdvdG8gZXhpdDtcXG4gODIzOlxcdFxcdFxcdH1cXG4gODI0OlxcdFxcbiA4MjU6XFx0XFx0XFx0aWYgKERJR0lUQUxfTkZDX0RFUF9QRkJfUE5JKHBmYikgIT0gZGRldi1cXHUwMDNlY3Vycl9uZmNfZGVwX3BuaSkge1xcbiA4MjY6XFx0XFx0XFx0XFx0UFJPVE9DT0xfRVJSKFxcXCIxNC4xMi4zLjNcXFwiKTtcXG4gODI3OlxcdFxcdFxcdFxcdHJjID0gLUVJTztcXG4gODI4OlxcdFxcdFxcdFxcdGdvdG8gZXhpdDtcXG4gODI5OlxcdFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDI6MjUuNDc1MzMyODQ5WiIsIlNlcSI6NjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM3MzA5MDY1OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0J3MgZ29pbmcgdGhyb3VnaCBteSBtaW5kLCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyBpZiBJJ20gdGhlIG9uZSBoYXZpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBgZGlnaXRhbF9yZWN2X2RlcF9kYXRhX2dhdGhlcmAgRnVuY3Rpb24gUmV0dXJuKipcblxuQWxyaWdodCwgSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIGFuZCBteSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiB3aGF0IGhhcHBlbnMgd2hlbiBgZGlnaXRhbF9yZWN2X2RlcF9kYXRhX2dhdGhlcmAgYWN0dWFsbHkgKnJldHVybnMqIGEgdmFsdWUuIFNwZWNpZmljYWxseSwgdGhlIHZhcmlhYmxlIGByZXNwYC4gSSBrbm93IHRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWwgZm9yIGRhdGEgYWNxdWlzaXRpb24sIHNvIHVuZGVyc3RhbmRpbmcgaXRzIGZsb3cgaXMga2V5LiBJIG5lZWQgdG8gdHJhY2UgdGhlIGltcGxpY2F0aW9ucyBvZiB3aGF0ZXZlciByZXNwb25zZSBpdCBnZW5lcmF0ZXMuIEl0J3MgdGhlIGdhdGV3YXkgdG8gdGhlIG5leHQgc3RhZ2UuXG5cbkxldCBtZSBzZWXigKYgSeKAmW0gem9vbWluZyBpbiBvbiB0aGUgYWZ0ZXJtYXRoIG9mIHRoaXMgZnVuY3Rpb24gY2FsbC4gSSdtIGdvaW5nIHRvIGp1bXAgdG8gbGluZSA4MTYsIGJlY2F1c2UgdGhhdCdzIGxpa2VseSB3aGVyZSB0aGUgcHJvZ3JhbSBmbG93IHJlc3VtZXMgKmFmdGVyKiB0aGlzIGNydWNpYWwgYHJlc3BgIGlzIGdlbmVyYXRlZC4gVGhhdCBsaW5lIGlzIG5vdyBteSBmb2NhbCBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjb2RlIGludGVycHJldHMgYHJlc3BgLCB3aGF0IGRlY2lzaW9ucyBpdCBtYWtlcyBiYXNlZCBvbiBpdHMgdmFsdWUsIGFuZCBob3cgdGhhdCBpbmZsdWVuY2VzIHN1YnNlcXVlbnQgb3BlcmF0aW9ucy4gSXMgaXQgYSBzdWNjZXNzL2ZhaWx1cmUgaW5kaWNhdG9yPyBBIHBvaW50ZXIgdG8gZGF0YT8gVGhlIGFuc3dlciB0byB0aGF0IHF1ZXN0aW9uIHdpbGwgaW5mb3JtIG15IG92ZXJhbGwgdW5kZXJzdGFuZGluZyBvZiB0aGUgZnVuY3Rpb24ncyByZWxpYWJpbGl0eSBhbmQgdGhlIGFsZ29yaXRobSdzIHJvYnVzdG5lc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MDExLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MjoyOS4yMDYyNDE4NjRaIiwiU2VxIjo2NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25mYy9kaWdpdGFsX2RlcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg2MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg2MDpcXHRcXHRcXHRcXHRnb3RvIGZyZWVfcmVzcDtcXG4gODYxOlxcdFxcdFxcdH1cXG4gODYyOlxcdFxcbiA4NjM6XFx0XFx0XFx0aWYgKGRkZXYtXFx1MDAzZWF0bl9jb3VudCB8fCBkZGV2LVxcdTAwM2VuYWNrX2NvdW50KSB7XFxuIDg2NDpcXHRcXHRcXHRcXHRQUk9UT0NPTF9FUlIoXFxcIjE0LjEyLjQuNFxcXCIpO1xcbiA4NjU6XFx0XFx0XFx0XFx0cmMgPSAtRUlPO1xcbiA4NjY6XFx0XFx0XFx0XFx0Z290byBlcnJvcjtcXG4gODY3OlxcdFxcdFxcdH1cXG4gODY4OlxcdFxcbiA4Njk6XFx0XFx0XFx0cnRveCA9IERJR0lUQUxfTkZDX0RFUF9SVE9YX1ZBTFVFKHJlc3AtXFx1MDAzZWRhdGFbMF0pO1xcbiA4NzA6XFx0XFx0XFx0aWYgKCFydG94IHx8IHJ0b3ggXFx1MDAzZSBESUdJVEFMX05GQ19ERVBfUlRPWF9NQVgpIHtcXG4gODcxOlxcdFxcdFxcdFxcdFBST1RPQ09MX0VSUihcXFwiMTQuOC40LjFcXFwiKTtcXG4gODcyOlxcdFxcdFxcdFxcdHJjID0gLUVJTztcXG4gODczOlxcdFxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuIDg3NDpcXHRcXHRcXHR9XFxuIDg3NTpcXHRcXG4gODc2OlxcdFxcdFxcdHJjID0gZGlnaXRhbF9pbl9zZW5kX3J0b3goZGRldiwgZGF0YV9leGNoLCBydG94KTtcXG4gODc3OlxcdFxcdFxcdGlmIChyYylcXG4gODc4OlxcdFxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuIDg3OTpcXHRcXG4gODgwOlxcdFxcdFxcdGdvdG8gZnJlZV9yZXNwO1xcbiA4ODE6XFx0XFx0fVxcbiA4ODI6XFx0XFxuIDg4MzpcXHRleGl0OlxcbiA4ODQ6XFx0XFx0ZGF0YV9leGNoLVxcdTAwM2VjYihkYXRhX2V4Y2gtXFx1MDAzZWNiX2NvbnRleHQsIHJlc3AsIHJjKTtcXG4gODg1OlxcdFxcbiA4ODY6XFx0ZXJyb3I6XFxuIDg4NzpcXHRcXHRrZnJlZShkYXRhX2V4Y2gpO1xcbiA4ODg6XFx0XFxuIDg4OTpcXHRcXHRrZnJlZV9za2IoZGRldi1cXHUwMDNlY2hhaW5pbmdfc2tiKTtcXG4gODkwOlxcdFxcdGRkZXYtXFx1MDAzZWNoYWluaW5nX3NrYiA9IE5VTEw7XFxuIDg5MTpcXHRcXG4gODkyOlxcdFxcdGtmcmVlX3NrYihkZGV2LVxcdTAwM2VzYXZlZF9za2IpO1xcbiA4OTM6XFx0XFx0ZGRldi1cXHUwMDNlc2F2ZWRfc2tiID0gTlVMTDtcXG4gODk0OlxcdFxcbiA4OTU6XFx0XFx0aWYgKHJjKVxcbiA4OTY6XFx0XFx0XFx0a2ZyZWVfc2tiKHJlc3ApO1xcbiA4OTc6XFx0XFxuIDg5ODpcXHRcXHRyZXR1cm47XFxuIDg5OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDI6MjkuMjA2MzQyODg0WiIsIlNlcSI6NjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU1NzYzNzk3NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEaWdpdGFsIE5GQyBERVAgRGF0YSBIYW5kbGluZyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgaG93IGBza2JfcHV0X2RhdGFgIGlzIHVzZWQsIHNwZWNpZmljYWxseTogYHNrYl9wdXRfZGF0YShkZGV2LVx1MDAzZWNoYWluaW5nX3NrYiwgcmVzcC1cdTAwM2VkYXRhLCByZXNwLVx1MDAzZWxlbik7YC4gIE15IGZpcnN0IHF1ZXN0aW9uIGlzIGFib3V0IHRoZSBhbGxvY2F0aW9uIG9mIGBkZGV2LVx1MDAzZWNoYWluaW5nX3NrYmAuICBQcmV2aW91c2x5LCBpdCB3YXMgYWxsb2NhdGVkIHVzaW5nIGBuZmNfYWxsb2NfcmVjdl9za2IoOCAqIGRkZXYtXHUwMDNlbG9jYWxfcGF5bG9hZF9tYXgsIEdGUF9LRVJORUwpO2AuIFRoYXQgYWxsb2NhdGVkIGEgc2l6ZSBwbHVzIG9uZSBieXRlIGFuZCBjYWxsZWQgYHNrYl9yZXNlcnZlKHNrYiwgMSlgLiAgU28sIHRoZSBoZWFkcm9vbSB3YXMgMSwgYW5kIHRoZSB0YWlscm9vbSB3YXMgYDggKiBkZGV2LVx1MDAzZWxvY2FsX3BheWxvYWRfbWF4YC5cblxuVGhlIGxvZ2ljIGdvZXM6IFdoZW4gYHJlc3AtXHUwMDNlbGVuYCBleGNlZWRzIGBza2JfdGFpbHJvb20oZGRldi1cdTAwM2VjaGFpbmluZ19za2IpYCwgYSBgc2tiX2NvcHlfZXhwYW5kYCBpcyB0cmlnZ2VyZWQ6XG5gYGBjXG5cdFx0XHRuZXdfc2tiID0gc2tiX2NvcHlfZXhwYW5kKGRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiLFxuXHRcdFx0XHRcdFx0ICBza2JfaGVhZHJvb20oXG5cdFx0XHRcdFx0XHRcdCAgZGRldi1cdTAwM2VjaGFpbmluZ19za2IpLFxuXHRcdFx0XHRcdFx0ICA4ICogZGRldi1cdTAwM2Vsb2NhbF9wYXlsb2FkX21heCxcblx0XHRcdFx0XHRcdCAgR0ZQX0tFUk5FTCk7XG5gYGBcblxuTm93LCBoZXJlJ3Mgd2hlcmUgdGhlIHBhdGNoIGNvbWVzIGluLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKndoeSogaXQgY2hhbmdlZCB0aGluZ3MuICBUaGUgYWxsb2NhdGlvbiBvZiB0aGUgYGNoYWluaW5nX3NrYmAgaGFzIGJlZW4gbW9kaWZpZWQ6XG5cbmBgYGNcbiBcdGlmIChESUdJVEFMX05GQ19ERVBfTUlfQklUX1NFVChwZmIpIFx1MDAyNlx1MDAyNiAoIWRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiKSkge1xuIFx0XHRkZGV2LVx1MDAzZWNoYWluaW5nX3NrYiA9XG4tXHRcdFx0bmZjX2FsbG9jX3JlY3Zfc2tiKDggKiBkZGV2LVx1MDAzZWxvY2FsX3BheWxvYWRfbWF4LFxuLVx0XHRcdFx0XHQgICBHRlBfS0VSTkVMKTtcbitcdFx0XHRkaWdpdGFsX3NrYl9hbGxvYyhkZGV2LFxuK1x0XHRcdFx0XHQgIDggKiBkZGV2LVx1MDAzZWxvY2FsX3BheWxvYWRfbWF4KTtcbiBcdFx0aWYgKCFkZGV2LVx1MDAzZWNoYWluaW5nX3NrYikge1xuIFx0XHRcdHJjID0gLUVOT01FTTtcbiBcdFx0XHRnb3RvIGVycm9yO1xuYGBgXG5cbkFuZCB0aGVuIHRoZSBgc2tiX2NvcHlfZXhwYW5kYCBoYXMgY2hhbmdlZCB0b286XG5cbmBgYGNcbiBcdGlmIChkZGV2LVx1MDAzZWNoYWluaW5nX3NrYikge1xuIFx0XHRpZiAocmVzcC1cdTAwM2VsZW4gXHUwMDNlIHNrYl90YWlscm9vbShkZGV2LVx1MDAzZWNoYWluaW5nX3NrYikpIHtcbiBcdFx0XHRuZXdfc2tiID0gc2tiX2NvcHlfZXhwYW5kKGRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiLFxuLVx0XHRcdFx0XHRcdCAgc2tiX2hlYWRyb29tKFxuLVx0XHRcdFx0XHRcdFx0ICBkZGV2LVx1MDAzZWNoYWluaW5nX3NrYiksXG4tXHRcdFx0XHRcdFx0ICA4ICogZGRldi1cdTAwM2Vsb2NhbF9wYXlsb2FkX21heCxcbitcdFx0XHRcdFx0XHQgIGRkZXYtXHUwMDNldHhfaGVhZHJvb20sXG4rXHRcdFx0XHRcdFx0ICA4ICogZGRldi1cdTAwM2Vsb2NhbF9wYXlsb2FkX21heCArXG4rXHRcdFx0XHRcdFx0XHQgIGRkZXYtXHUwMDNldHhfdGFpbHJvb20sXG4gXHRcdFx0XHRcdFx0ICBHRlBfS0VSTkVMKTtcbmBgYFxuU28sIHdoeSBoYXMgdGhlIGV4cGFuc2lvbiBvcGVyYXRpb24gc3dpdGNoZWQgZnJvbSB1c2luZyBgc2tiX2hlYWRyb29tKGRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiKWAgdG8gYGRkZXYtXHUwMDNldHhfaGVhZHJvb21gLCBhbmQgdGhlIGFkZGl0aW9uYWwgYWxsb2NhdGlvbiBoYXMgZ29uZSBmcm9tIGA4ICogZGRldi1cdTAwM2Vsb2NhbF9wYXlsb2FkX21heGAgdG8gYDggKiBkZGV2LVx1MDAzZWxvY2FsX3BheWxvYWRfbWF4ICsgZGRldi1cdTAwM2V0eF90YWlscm9vbWA/IFdoZXJlIGFyZSBgZGRldi1cdTAwM2V0eF9oZWFkcm9vbWAgYW5kIGBkZGV2LVx1MDAzZXR4X3RhaWxyb29tYCBjb21pbmcgZnJvbT8gSSBuZWVkIHRvIHRyYWNrIHRoaXMgZG93bjsgdGhlcmUgbXVzdCBiZSBzb21ldGhpbmcgaW4gdGhlIHNldHVwIHRoYXQncyBub3cgZGljdGF0aW5nIHRoZSBleHBhbnNpb24uIE9rYXksIGxldCdzIGNoZWNrICBgZGlnaXRhbF90Z19yZWN2X2RlcF9yZXFgIGFuZCB0aGVuIGxvb2sgYXQgdGhlIGxpbmVzIGZyb20gMTE4MCB0byAxMjMwIG9mIGBkaWdpdGFsX2RlcC5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgYW5zd2VyIGxpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODgwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDI6MzQuNzgyNzI1NDJaIiwiU2VxIjo2NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZmMvZGlnaXRhbF9kZXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTgwOlxcdFxcbjExODE6XFx0XFx0XFx0a2ZyZWVfc2tiKGRkZXYtXFx1MDAzZXNhdmVkX3NrYik7XFxuMTE4MjpcXHRcXHRcXHRkZGV2LVxcdTAwM2VzYXZlZF9za2IgPSBOVUxMO1xcbjExODM6XFx0XFxuMTE4NDpcXHRcXHRcXHRyZXNwID0gZGlnaXRhbF9yZWN2X2RlcF9kYXRhX2dhdGhlcihkZGV2LCBwZmIsIHJlc3AsXFxuMTE4NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgZGlnaXRhbF90Z19zZW5kX2FjaywgTlVMTCk7XFxuMTE4NjpcXHRcXHRcXHRpZiAoSVNfRVJSKHJlc3ApKSB7XFxuMTE4NzpcXHRcXHRcXHRcXHRyYyA9IFBUUl9FUlIocmVzcCk7XFxuMTE4ODpcXHRcXHRcXHRcXHRyZXNwID0gTlVMTDtcXG4xMTg5OlxcdFxcdFxcdFxcdGdvdG8gZXhpdDtcXG4xMTkwOlxcdFxcdFxcdH1cXG4xMTkxOlxcdFxcbjExOTI6XFx0XFx0XFx0LyogSWYgcmVzcCBpcyBOVUxMIHRoZW4gd2UncmUgc3RpbGwgY2hhaW5pbmcgc28gcmV0dXJuIGFuZFxcbjExOTM6XFx0XFx0XFx0ICogd2FpdCBmb3IgdGhlIG5leHQgcGFydCBvZiB0aGUgUERVLiAgRWxzZSwgdGhlIFBEVSBpc1xcbjExOTQ6XFx0XFx0XFx0ICogY29tcGxldGUgc28gcGFzcyBpdCB1cC5cXG4xMTk1OlxcdFxcdFxcdCAqL1xcbjExOTY6XFx0XFx0XFx0aWYgKCFyZXNwKVxcbjExOTc6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbjExOTg6XFx0XFxuMTE5OTpcXHRcXHRcXHRyYyA9IDA7XFxuMTIwMDpcXHRcXHRcXHRicmVhaztcXG4xMjAxOlxcdFxcdGNhc2UgRElHSVRBTF9ORkNfREVQX1BGQl9BQ0tfTkFDS19QRFU6XFxuMTIwMjpcXHRcXHRcXHRpZiAoRElHSVRBTF9ORkNfREVQX05BQ0tfQklUX1NFVChwZmIpKSB7IC8qIE5BQ0sgKi9cXG4xMjAzOlxcdFxcdFxcdFxcdGlmIChESUdJVEFMX05GQ19ERVBfUEZCX1BOSShwZmIgKyAxKSAhPVxcbjEyMDQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ZGRldi1cXHUwMDNlY3Vycl9uZmNfZGVwX3BuaSkge1xcbjEyMDU6XFx0XFx0XFx0XFx0XFx0cmMgPSAtRUlPO1xcbjEyMDY6XFx0XFx0XFx0XFx0XFx0Z290byBleGl0O1xcbjEyMDc6XFx0XFx0XFx0XFx0fVxcbjEyMDg6XFx0XFxuMTIwOTpcXHRcXHRcXHRcXHRkZGV2LVxcdTAwM2VhdG5fY291bnQgPSAwO1xcbjEyMTA6XFx0XFxuMTIxMTpcXHRcXHRcXHRcXHRyYyA9IGRpZ2l0YWxfdGdfc2VuZF9zYXZlZF9za2IoZGRldik7XFxuMTIxMjpcXHRcXHRcXHRcXHRpZiAocmMpXFxuMTIxMzpcXHRcXHRcXHRcXHRcXHRnb3RvIGV4aXQ7XFxuMTIxNDpcXHRcXG4xMjE1OlxcdFxcdFxcdFxcdGdvdG8gZnJlZV9yZXNwO1xcbjEyMTY6XFx0XFx0XFx0fVxcbjEyMTc6XFx0XFxuMTIxODpcXHRcXHRcXHQvKiBBQ0sgKi9cXG4xMjE5OlxcdFxcdFxcdGlmIChkZGV2LVxcdTAwM2VhdG5fY291bnQpIHtcXG4xMjIwOlxcdFxcdFxcdFxcdC8qIFRoZSB0YXJnZXQgaGFzIHByZXZpb3VzbHkgcmVjZWl2ZWQgb25lIG9yIG1vcmUgQVROXFxuMTIyMTpcXHRcXHRcXHRcXHQgKiBQRFVzLlxcbjEyMjI6XFx0XFx0XFx0XFx0ICovXFxuMTIyMzpcXHRcXHRcXHRcXHRkZGV2LVxcdTAwM2VhdG5fY291bnQgPSAwO1xcbjEyMjQ6XFx0XFxuMTIyNTpcXHRcXHRcXHRcXHQvKiBJZiB0aGUgQUNLIFBOSSBpcyBlcXVhbCB0byB0aGUgdGFyZ2V0IFBOSSAtIDEgbWVhbnNcXG4xMjI2OlxcdFxcdFxcdFxcdCAqIHRoYXQgdGhlIGluaXRpYXRvciBkaWQgbm90IHJlY2VpdmUgdGhlIHByZXZpb3VzIFBEVVxcbjEyMjc6XFx0XFx0XFx0XFx0ICogc2VudCBieSB0aGUgdGFyZ2V0IHNvIHJlLXNlbmQgaXQuXFxuMTIyODpcXHRcXHRcXHRcXHQgKi9cXG4xMjI5OlxcdFxcdFxcdFxcdGlmIChESUdJVEFMX05GQ19ERVBfUEZCX1BOSShwZmIgKyAxKSA9PVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MjozNC43ODI4MzkxMTFaIiwiU2VxIjo2NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mjk5MjExNjI2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBzbmlwcGV0LiBBcyBhbiBleHBlcnQgaW4gbXkgZmllbGQsIG15IHRob3VnaHQgcHJvY2VzcyB3b3VsZCBiZTpcblxuKipBbmFseXppbmcgdGhlIERpZ2l0YWwgVEcgUmVjZWl2ZSBEZXBlbmRlbmN5IFJlcXVlc3QgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgZGlnaXRhbF90Z19yZWN2X2RlcF9yZXFgIGhlcmUuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBmbG93IG9mIHRoZSBgcmVzcGAgdmFyaWFibGUgd2l0aGluIHRoaXMgZnVuY3Rpb24uIFdoZXJlIGRvZXMgaXQgY29tZSBmcm9tPyBXaGF0IG9wZXJhdGlvbnMgYXJlIHBlcmZvcm1lZCBvbiBpdD8gVWx0aW1hdGVseSwgSSB3YW50IHRvIHRyYWNlIGhvdyBpdCdzIHVzZWQgYW5kIHdoYXQgaW1wYWN0IHRoYXQgaGFzIG9uIHRoZSBsYXJnZXIgc3lzdGVtLiBJcyBgcmVzcGAgYSBzdGF0dXMgY29kZT8gQSBwb2ludGVyIHRvIGEgZGF0YSBzdHJ1Y3R1cmU/IFVuZGVyc3RhbmRpbmcgdGhpcyB3aWxsIGJlIGtleSB0byBncmFzcGluZyBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgZGlnaXRhbCB0cnVuayBncm91cCAoVEcpIHJlY2VpdmUgcHJvY2VzcyBhbmQgYW55IGRlcGVuZGVuY2llcyBpdCBpbnRyb2R1Y2VzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCBvZiBgcmVzcGAgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGlzIHByb2Nlc3MuIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjA4OCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDI6MzcuNzc0OTU3ODQ1WiIsIlNlcSI6NjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MTQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmZjL2RpZ2l0YWxfZGVwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTI2MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI2MDpcXHRcXHRjYXNlIERJR0lUQUxfTkZDX0RFUF9QRkJfU1VQRVJWSVNPUl9QRFU6XFxuMTI2MTpcXHRcXHRcXHRpZiAoRElHSVRBTF9ORkNfREVQX1BGQl9JU19USU1FT1VUKHBmYikpIHtcXG4xMjYyOlxcdFxcdFxcdFxcdHJjID0gLUVJTlZBTDtcXG4xMjYzOlxcdFxcdFxcdFxcdGdvdG8gZXhpdDtcXG4xMjY0OlxcdFxcdFxcdH1cXG4xMjY1OlxcdFxcbjEyNjY6XFx0XFx0XFx0cmMgPSBkaWdpdGFsX3RnX3NlbmRfYXRuKGRkZXYpO1xcbjEyNjc6XFx0XFx0XFx0aWYgKHJjKVxcbjEyNjg6XFx0XFx0XFx0XFx0Z290byBleGl0O1xcbjEyNjk6XFx0XFxuMTI3MDpcXHRcXHRcXHRkZGV2LVxcdTAwM2VhdG5fY291bnQrKztcXG4xMjcxOlxcdFxcbjEyNzI6XFx0XFx0XFx0Z290byBmcmVlX3Jlc3A7XFxuMTI3MzpcXHRcXHR9XFxuMTI3NDpcXHRcXG4xMjc1OlxcdFxcdHJjID0gbmZjX3RtX2RhdGFfcmVjZWl2ZWQoZGRldi1cXHUwMDNlbmZjX2RldiwgcmVzcCk7XFxuMTI3NjpcXHRcXHRpZiAocmMpXFxuMTI3NzpcXHRcXHRcXHRyZXNwID0gTlVMTDtcXG4xMjc4OlxcdFxcbjEyNzk6XFx0ZXhpdDpcXG4xMjgwOlxcdFxcdGtmcmVlX3NrYihkZGV2LVxcdTAwM2VjaGFpbmluZ19za2IpO1xcbjEyODE6XFx0XFx0ZGRldi1cXHUwMDNlY2hhaW5pbmdfc2tiID0gTlVMTDtcXG4xMjgyOlxcdFxcbjEyODM6XFx0XFx0ZGRldi1cXHUwMDNlYXRuX2NvdW50ID0gMDtcXG4xMjg0OlxcdFxcbjEyODU6XFx0XFx0a2ZyZWVfc2tiKGRkZXYtXFx1MDAzZXNhdmVkX3NrYik7XFxuMTI4NjpcXHRcXHRkZGV2LVxcdTAwM2VzYXZlZF9za2IgPSBOVUxMO1xcbjEyODc6XFx0XFxuMTI4ODpcXHRcXHRpZiAocmMpXFxuMTI4OTpcXHRcXHRcXHRrZnJlZV9za2IocmVzcCk7XFxuMTI5MDpcXHRcXG4xMjkxOlxcdFxcdHJldHVybjtcXG4xMjkyOlxcdFxcbjEyOTM6XFx0ZnJlZV9yZXNwOlxcbjEyOTQ6XFx0XFx0ZGV2X2tmcmVlX3NrYihyZXNwKTtcXG4xMjk1OlxcdH1cXG4xMjk2OlxcdFxcbjEyOTc6XFx0aW50IGRpZ2l0YWxfdGdfc2VuZF9kZXBfcmVzKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuMTI5ODpcXHR7XFxuMTI5OTpcXHRcXHRzdHJ1Y3QgZGlnaXRhbF9kZXBfcmVxX3JlcyAqZGVwX3JlcztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDI6MzcuNzc1MjA4MTc1WiIsIlNlcSI6NjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI3MjYyNDM3OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IEEgRm9jdXNlZCBSZXZpZXcgUG9pbnQqKlxuXG5XYWl0IGEgbWludXRlISBUaGF0J3MgaXQhIE15IGludHVpdGlvbiB0ZWxscyBtZSB3ZSBuZWVkIHRvIGltbWVkaWF0ZWx5IHBpdm90IG91ciBhdHRlbnRpb24gb3ZlciB0byB0aGUgYGRpZ2l0YWxfc2VuZF9kZXBfZGF0YV9wcmVwYCBtb2R1bGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHpvb20gaW4gb24gbGluZXMgMjAwIHRocm91Z2ggMjMwLiBUaGF0J3MgdGhlIGNyaXRpY2FsIGFyZWEgdG8gc2NydXRpbml6ZS4gTGV0J3MgZ2V0IHJpZ2h0IHRvIGl0IGFuZCBzZWUgd2hhdCdzIGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI4NjYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQyOjQwLjUwMTQ1NDk0N1oiLCJTZXEiOjcwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25mYy9kaWdpdGFsX2RlcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5NTpcXHRcXG4gMTk2OlxcdFxcdHJldHVybiAwO1xcbiAxOTc6XFx0fVxcbiAxOTg6XFx0XFxuIDE5OTpcXHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKlxcbiAyMDA6XFx0ZGlnaXRhbF9zZW5kX2RlcF9kYXRhX3ByZXAoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gMjAxOlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBkaWdpdGFsX2RlcF9yZXFfcmVzICpkZXBfcmVxX3JlcyxcXG4gMjAyOlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBkaWdpdGFsX2RhdGFfZXhjaCAqZGF0YV9leGNoKVxcbiAyMDM6XFx0e1xcbiAyMDQ6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKm5ld19za2I7XFxuIDIwNTpcXHRcXG4gMjA2OlxcdFxcdGlmIChza2ItXFx1MDAzZWxlbiBcXHUwMDNlIGRkZXYtXFx1MDAzZXJlbW90ZV9wYXlsb2FkX21heCkge1xcbiAyMDc6XFx0XFx0XFx0ZGVwX3JlcV9yZXMtXFx1MDAzZXBmYiB8PSBESUdJVEFMX05GQ19ERVBfUEZCX01JX0JJVDtcXG4gMjA4OlxcdFxcbiAyMDk6XFx0XFx0XFx0bmV3X3NrYiA9IGRpZ2l0YWxfc2tiX2FsbG9jKGRkZXYsIGRkZXYtXFx1MDAzZXJlbW90ZV9wYXlsb2FkX21heCk7XFxuIDIxMDpcXHRcXHRcXHRpZiAoIW5ld19za2IpIHtcXG4gMjExOlxcdFxcdFxcdFxcdGtmcmVlX3NrYihkZGV2LVxcdTAwM2VjaGFpbmluZ19za2IpO1xcbiAyMTI6XFx0XFx0XFx0XFx0ZGRldi1cXHUwMDNlY2hhaW5pbmdfc2tiID0gTlVMTDtcXG4gMjEzOlxcdFxcbiAyMTQ6XFx0XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuIDIxNTpcXHRcXHRcXHR9XFxuIDIxNjpcXHRcXG4gMjE3OlxcdFxcdFxcdHNrYl9wdXRfZGF0YShuZXdfc2tiLCBza2ItXFx1MDAzZWRhdGEsIGRkZXYtXFx1MDAzZXJlbW90ZV9wYXlsb2FkX21heCk7XFxuIDIxODpcXHRcXHRcXHRza2JfcHVsbChza2IsIGRkZXYtXFx1MDAzZXJlbW90ZV9wYXlsb2FkX21heCk7XFxuIDIxOTpcXHRcXG4gMjIwOlxcdFxcdFxcdGRkZXYtXFx1MDAzZWNoYWluaW5nX3NrYiA9IHNrYjtcXG4gMjIxOlxcdFxcdFxcdGRkZXYtXFx1MDAzZWRhdGFfZXhjaCA9IGRhdGFfZXhjaDtcXG4gMjIyOlxcdFxcdH0gZWxzZSB7XFxuIDIyMzpcXHRcXHRcXHRkZGV2LVxcdTAwM2VjaGFpbmluZ19za2IgPSBOVUxMO1xcbiAyMjQ6XFx0XFx0XFx0bmV3X3NrYiA9IHNrYjtcXG4gMjI1OlxcdFxcdH1cXG4gMjI2OlxcdFxcbiAyMjc6XFx0XFx0cmV0dXJuIG5ld19za2I7XFxuIDIyODpcXHR9XFxuIDIyOTpcXHRcXG4gMjMwOlxcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqXFxuIDIzMTpcXHRkaWdpdGFsX3JlY3ZfZGVwX2RhdGFfZ2F0aGVyKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHU4IHBmYixcXG4gMjMyOlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnJlc3AsXFxuIDIzMzpcXHRcXHRcXHRcXHQgICAgIGludCAoKnNlbmRfYWNrKShzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxcbiAyMzQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZGlnaXRhbF9kYXRhX2V4Y2hcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDI6NDAuNTAxNTU5ODY3WiIsIlNlcSI6NzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc0NzI1MzczNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5GQyBDaGFpbmluZyBTS0JzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYG5mYy9kaWdpdGFsX2RlcC5jYCBjb2RlLiBNeSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBoYW5kbGluZyBvZiBjaGFpbmVkIHBhY2tldHMsIHNwZWNpZmljYWxseSBhcm91bmQgYGRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiYC4gRmlyc3QsIEkgc2VlIHRoYXQgYGRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiYCBpcyB1c2VkIGluIGBkaWdpdGFsX3NlbmRfZGVwX2RhdGFfcHJlcGAgZm9yICpzZW5kaW5nKiBjaGFpbmVkIHBhY2tldHMuIFRoZW4sIGluIGBkaWdpdGFsX3JlY3ZfZGVwX2RhdGFfZ2F0aGVyYCwgaXQncyB1c2VkIGZvciAqZ2F0aGVyaW5nKiByZWNlaXZlZCBjaGFpbmVkIHBhY2tldHMsIHdoaWNoIG1ha2VzIGxvZ2ljYWwgc2Vuc2UuXG5cbk5vdywgaG9sZCBvbi4uLiBXaHkgdGhlIGNoYW5nZSBmcm9tIGBuZmNfYWxsb2NfcmVjdl9za2JgIHRvIGBkaWdpdGFsX3NrYl9hbGxvY2AgaW4gdGhlIHJlY2VpdmluZyBmdW5jdGlvbiwgYGRpZ2l0YWxfcmVjdl9kZXBfZGF0YV9nYXRoZXJgPyBUaGlzIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suIEFoYSEgSGVyZSBpdCBpczpcblxuYGBgY1xuXHRpZiAoRElHSVRBTF9ORkNfREVQX01JX0JJVF9TRVQocGZiKSBcdTAwMjZcdTAwMjYgKCFkZGV2LVx1MDAzZWNoYWluaW5nX3NrYikpIHtcblx0XHRkZGV2LVx1MDAzZWNoYWluaW5nX3NrYiA9XG5cdFx0XHRkaWdpdGFsX3NrYl9hbGxvYyhkZGV2LFxuXHRcdFx0XHRcdCAgOCAqIGRkZXYtXHUwMDNlbG9jYWxfcGF5bG9hZF9tYXgpO1xuXHRcdGlmICghZGRldi1cdTAwM2VjaGFpbmluZ19za2IpIHtcblx0XHRcdHJjID0gLUVOT01FTTtcblx0XHRcdGdvdG8gZXJyb3I7XG5cdFx0fVxuXHR9XG5cblx0aWYgKGRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiKSB7XG5cdFx0aWYgKHJlc3AtXHUwMDNlbGVuIFx1MDAzZSBza2JfdGFpbHJvb20oZGRldi1cdTAwM2VjaGFpbmluZ19za2IpKSB7XG5cdFx0XHRuZXdfc2tiID0gc2tiX2NvcHlfZXhwYW5kKGRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiLFxuXHRcdFx0XHRcdFx0ICBkZGV2LVx1MDAzZXR4X2hlYWRyb29tLFxuXHRcdFx0XHRcdFx0ICA4ICogZGRldi1cdTAwM2Vsb2NhbF9wYXlsb2FkX21heCArXG5cdFx0XHRcdFx0XHRcdCAgZGRldi1cdTAwM2V0eF90YWlscm9vbSxcblx0XHRcdFx0XHRcdCAgR0ZQX0tFUk5FTCk7XG5cdFx0XHRpZiAoIW5ld19za2IpIHtcblx0XHRcdFx0cmMgPSAtRU5PTUVNO1xuXHRcdFx0XHRnb3RvIGVycm9yO1xuXHRcdFx0fVxuXG5cdFx0XHRrZnJlZV9za2IoZGRldi1cdTAwM2VjaGFpbmluZ19za2IpO1xuXHRcdFx0ZGRldi1cdTAwM2VjaGFpbmluZ19za2IgPSBuZXdfc2tiO1xuXHRcdH1cblxuXHRcdHNrYl9wdXRfZGF0YShkZGV2LVx1MDAzZWNoYWluaW5nX3NrYiwgcmVzcC1cdTAwM2VkYXRhLCByZXNwLVx1MDAzZWxlbik7XG4uLi5cbmBgYFxuXG5JIHNlZSB3aGF0J3MgaGFwcGVuaW5nLiBUaGUgY29kZSBjaGVja3MgaWYgdGhlIE1JIGJpdCBpcyBzZXQgKGBESUdJVEFMX05GQ19ERVBfTUlfQklUX1NFVChwZmIpYCkgYW5kIHRoZSBgY2hhaW5pbmdfc2tiYCBkb2Vzbid0IGV4aXN0LiBJZiBib3RoIGFyZSB0cnVlLCBpdCAqYWxsb2NhdGVzKiBgZGRldi1cdTAwM2VjaGFpbmluZ19za2JgIHVzaW5nIGBkaWdpdGFsX3NrYl9hbGxvY2AuIE9rYXksIGRvZXMgdGhpcyBtZWFuIHRoZSBvbGQgbWV0aG9kIGRpZCAqbm90KiBhbGxvY2F0ZT8gTGV0J3MgY2hlY2sgdGhlIGNvZGU6XG5cbmBgYGNcbnN0cnVjdCBza19idWZmICpkaWdpdGFsX3NrYl9hbGxvYyhzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LFxuXHRcdFx0XHQgIHVuc2lnbmVkIGludCBsZW4pXG57XG5cdHN0cnVjdCBza19idWZmICpza2I7XG5cblx0c2tiID0gYWxsb2Nfc2tiKGxlbiArIGRkZXYtXHUwMDNldHhfaGVhZHJvb20gKyBkZGV2LVx1MDAzZXR4X3RhaWxyb29tLFxuXHRcdFx0R0ZQX0tFUk5FTCk7XG5cdGlmIChza2IpXG5cdFx0c2tiX3Jlc2VydmUoc2tiLCBkZGV2LVx1MDAzZXR4X2hlYWRyb29tKTtcblxuXHRyZXR1cm4gc2tiO1xufVxuYGBgXG5cblllcywgYGRpZ2l0YWxfc2tiX2FsbG9jYCAqZG9lcyogY2FsbCBgYWxsb2Nfc2tiYCwgc28gaXQgKmRvZXMqIGFsbG9jYXRlIG1lbW9yeS4gSXQgcmVzZXJ2ZXMgbWVtb3J5IHRvby4gT2theSwgc28gdGhhdCByZXNvbHZlcyB0aGUgYWxsb2NhdGlvbi5cblxuV2FpdCwgYmFjayB0byBgZGlnaXRhbF9yZWN2X2RlcF9kYXRhX2dhdGhlcmAuIEJlZm9yZSwgaXQgd2FzIHVzaW5nIGBkZGV2LVx1MDAzZWNoYWluaW5nX3NrYiA9IG5mY19hbGxvY19yZWN2X3NrYig4ICogZGRldi1cdTAwM2Vsb2NhbF9wYXlsb2FkX21heCwgR0ZQX0tFUk5FTCk7YCB3aGljaCwgSSByZWNhbGwsIHdhcyBlcXVpdmFsZW50IHRvIGBhbGxvY19za2IoOCAqIGRkZXYtXHUwMDNlbG9jYWxfcGF5bG9hZF9tYXggKyAxLCBnZnApOyBza2JfcmVzZXJ2ZShza2IsIDEpO2AuXG5cbklmIHRoZSBgcmVzcC1cdTAwM2VsZW5gIGV4Y2VlZHMgYHNrYl90YWlscm9vbShkZGV2LVx1MDAzZWNoYWluaW5nX3NrYilgLCB3ZSBzZWUgdGhpczpcblxuYGBgY1xuXHRcdFx0bmV3X3NrYiA9IHNrYl9jb3B5X2V4cGFuZChkZGV2LVx1MDAzZWNoYWluaW5nX3NrYixcblx0XHRcdFx0XHRcdCAgc2tiX2hlYWRyb29tKFxuXHRcdFx0XHRcdFx0XHQgIGRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiKSxcblx0XHRcdFx0XHRcdCAgOCAqIGRkZXYtXHUwMDNlbG9jYWxfcGF5bG9hZF9tYXgsXG5cdFx0XHRcdFx0XHQgIEdGUF9LRVJORUwpO1xuYGBgXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgdGhlIHBhcmFtZXRlcnMgdG8gYHNrYl9jb3B5X2V4cGFuZGA6IGBza2JfY29weV9leHBhbmQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5ld2hlYWRyb29tLCBpbnQgbmV3dGFpbHJvb20sIGdmcF90IGdmcF9tYXNrKWAuIEknbGwgd2FudCB0byBjaGVjayBob3cgdGhlIGhlYWRyb29tIGFuZCB0YWlscm9vbSBhcmUgc2V0LiBPa2F5LCBJJ2xsIG5lZWQgdG8gZ28gdG8gYG5ldC9jb3JlL3NrYnVmZi5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNjkxLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDI6NDcuOTc0MDk5OTk2WiIsIlNlcSI6NzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTYyODA4NzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBza19idWZmIFxcXFwqc2tiX2NvcHlfZXhwYW5kXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmg9MTQ1ND1zdHJ1Y3Qgc2tfYnVmZiAqc2tiX2V4cGFuZF9oZWFkKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBoZWFkcm9vbSk7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxNDU1OnN0cnVjdCBza19idWZmICpza2JfY29weV9leHBhbmQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5ld2hlYWRyb29tLFxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTQ1Ni1cXHRcXHRcXHRcXHRpbnQgbmV3dGFpbHJvb20sIGdmcF90IHByaW9yaXR5KTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTI0ODU9RVhQT1JUX1NZTUJPTChza2JfZXhwYW5kX2hlYWQpO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjUwNC0gKi9cXG5uZXQvY29yZS9za2J1ZmYuYzoyNTA1OnN0cnVjdCBza19idWZmICpza2JfY29weV9leHBhbmQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvY29yZS9za2J1ZmYuYy0yNTA2LVxcdFxcdFxcdFxcdGludCBuZXdoZWFkcm9vbSwgaW50IG5ld3RhaWxyb29tLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0Mjo1MC41MzY5MTU0ODdaIiwiU2VxIjo3MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDg0ODI3ODI2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGBza2JfY29weV9leHBhbmRgKipcblxuUmlnaHQsIGxldCdzIGdldCBpbnRvIHRoaXMuIEknbSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCBgc2tiX2NvcHlfZXhwYW5kYC4gSSBhbHJlYWR5IGtub3cgdGhlIGNvcmUgcHVycG9zZTogdG8gY3JlYXRlIGEgbmV3IGBza19idWZmYCAoc29ja2V0IGJ1ZmZlcikgd2l0aCBhIGxhcmdlciBkYXRhIGJ1ZmZlciwgY29weWluZyB0aGUgZXhpc3RpbmcgZGF0YSBmcm9tIGEgc291cmNlIFNLQiBpbnRvIGl0LiBUaGUgJ2V4cGFuZCcgcGFydCBpcyBjcnVjaWFsOyBpdCdzIGFib3V0IGFsbG9jYXRpbmcgYSBwb3RlbnRpYWxseSAqc2lnbmlmaWNhbnRseSogbGFyZ2VyIGJ1ZmZlciwgdXNlZnVsIGZvciBoYW5kbGluZyB0aGluZ3MgbGlrZSBzZWdtZW50YXRpb24gb3IgcHJvdG9jb2wgaGVhZGVyIGluc2VydGlvbi4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMgYW5kIGhvdyB0aGV5IGhhbmRsZSB0aGUgcG90ZW50aWFsIGZvciBmcmFnbWVudGF0aW9uLCBlc3BlY2lhbGx5IHVuZGVyIG1lbW9yeSBwcmVzc3VyZS5cblxuTXkga2V5IGZvY3VzIHdpbGwgYmU6XG5cbiogICAqKk1lbW9yeSBNYW5hZ2VtZW50OioqIEhvdyBpcyB0aGUgbmV3IGJ1ZmZlciBhbGxvY2F0ZWQ/IElzIGl0IHVzaW5nIGBrbWFsbG9jYCwgYF9fZ2V0X2ZyZWVfcGFnZXNgLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZD8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hvc2VuIGFsbG9jYXRpb24gc3RyYXRlZ3kgaW4gdGVybXMgb2YgcGVyZm9ybWFuY2UgYW5kIHBvdGVudGlhbCBmb3IgZnJhZ21lbnRhdGlvbj8gSSdsbCBuZWVkIHRvIHNlZSBob3cgdGhleSBoYW5kbGUgTlVNQSBhcmNoaXRlY3R1cmVzLlxuKiAgICoqRGF0YSBDb3B5aW5nOioqIEknbGwgYmUgbG9va2luZyBmb3IgdGhlIGRldGFpbHMgb2YgdGhlIGNvcHkgb3BlcmF0aW9uIGl0c2VsZi4gRG9lcyBpdCB1c2UgYG1lbWNweWAgb3Igc29tZSBvdGhlciBvcHRpbWl6ZWQgY29weSByb3V0aW5lPyBXaGF0J3MgdGhlIGVycm9yIGhhbmRsaW5nPyBBcmUgdGhleSB0YWtpbmcgaW50byBhY2NvdW50IHBhZ2UgYm91bmRhcmllcz8gRG9lcyB0aGUgZnVuY3Rpb24gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZSBjb3B5IHNwYW5zIG11bHRpcGxlIHBhZ2VzIGVmZmVjdGl2ZWx5P1xuKiAgICoqU0tCIEhlYWRlciBVcGRhdGVzOioqIEFmdGVyIHRoZSBjb3B5LCBJJ2xsIG5lZWQgdG8gY29uZmlybSB3aGF0J3MgaGFwcGVuaW5nIHRvIHRoZSBTS0IgaGVhZGVyLiBEb2VzIHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgdXBkYXRlIHBvaW50ZXJzIGxpa2UgYGRhdGFgLCBgdGFpbGAsIGBlbmRgLCBhbmQgYGxlbmAgdG8gcmVmbGVjdCB0aGUgbmV3IGJ1ZmZlciBhbmQgdGhlIGNvcGllZCBkYXRhPyBIb3cgaXMgdGhlIGB0cnVlc2l6ZWAgdXBkYXRlZD9cbiogICAqKkVycm9yIEhhbmRsaW5nIGFuZCBSZXR1cm4gVmFsdWVzOioqIFdoYXQgYXJlIHRoZSBwb3NzaWJsZSByZXR1cm4gdmFsdWVzPyBIb3cgZG9lcyB0aGUgZnVuY3Rpb24gc2lnbmFsIHN1Y2Nlc3Mgb3IgZmFpbHVyZT8gRG9lcyBpdCBoYW5kbGUgcG90ZW50aWFsIGVycm9ycyBkdXJpbmcgbWVtb3J5IGFsbG9jYXRpb24gZ3JhY2VmdWxseSwgYW5kIGlmIHNvLCBob3c/IEFuZCBvZiBjb3Vyc2UsIGhvdyBkb2VzIGl0IGhhbmRsZSByZWZlcmVuY2UgY291bnRpbmcuXG4qICAgKipDb25zaWRlcmF0aW9uIG9mIENvbnRleHRzKiogV2hhdCBsb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24gaXMgdXNlZCB3aXRoaW4gdGhlIGZ1bmN0aW9uPyBIb3cgZG9lcyBpdCBhZmZlY3QgdGhlIHZhcmlvdXMgbmV0d29yayBzdGFjayB0aHJlYWRzIHRoYXQgdXNlIHRoZSBmdW5jdGlvbj9cblxuSSdtIGFsc28gY3VyaW91cyBhYm91dCB3aGV0aGVyIHRoZXkncmUgdXNpbmcgYW55IG9wdGltaXphdGlvbiB0ZWNobmlxdWVzLCBzdWNoIGFzIHByZS1jYWxjdWxhdGluZyB0aGUgcmVxdWlyZWQgYnVmZmVyIHNpemUgb3IgY2FjaGluZyBhbGxvY2F0aW9uIGRhdGEuIEl0IGlzIGltcG9ydGFudCB0byBrbm93IGlmIHRoZSBmdW5jdGlvbiBkb2VzIGFueSBraW5kIG9mIHByZS1jb21wdXRhdGlvbiBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4gVW5kZXJzdGFuZGluZyB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBjaG9zZW4gYWxnb3JpdGhtcyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIHdpbGwgYWxsb3cgbWUgdG8gYXNzZXNzIHRoZSBmdW5jdGlvbidzIHN1aXRhYmlsaXR5IGZvciBkaWZmZXJlbnQgd29ya2xvYWRzIGFuZCBpdHMgcG90ZW50aWFsIGltcGFjdCBvbiBvdmVyYWxsIG5ldHdvcmsgcGVyZm9ybWFuY2UuIEkgd2FudCB0byBzZWUgaWYgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSBvcHRpbWFsIG9yIHdoZXRoZXIgSSBjYW4gaGVscCBvcHRpbWl6ZSBpdCBteXNlbGYuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1ODE4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDI6NTUuMzg1MTk2ODA0WiIsIlNlcSI6NzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTA1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNTA1OlxcdHN0cnVjdCBza19idWZmICpza2JfY29weV9leHBhbmQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4yNTA2OlxcdFxcdFxcdFxcdFxcdGludCBuZXdoZWFkcm9vbSwgaW50IG5ld3RhaWxyb29tLFxcbjI1MDc6XFx0XFx0XFx0XFx0XFx0Z2ZwX3QgZ2ZwX21hc2spXFxuMjUwODpcXHR7XFxuMjUwOTpcXHRcXHQvKlxcbjI1MTA6XFx0XFx0ICpcXHRBbGxvY2F0ZSB0aGUgY29weSBidWZmZXJcXG4yNTExOlxcdFxcdCAqL1xcbjI1MTI6XFx0XFx0aW50IGhlYWRfY29weV9sZW4sIGhlYWRfY29weV9vZmY7XFxuMjUxMzpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqbjtcXG4yNTE0OlxcdFxcdGludCBvbGRoZWFkcm9vbTtcXG4yNTE1OlxcdFxcbjI1MTY6XFx0XFx0aWYgKCFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSlcXG4yNTE3OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjI1MTg6XFx0XFxuMjUxOTpcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKHNrYl9zaGluZm8oc2tiKS1cXHUwMDNlZ3NvX3R5cGUgXFx1MDAyNiBTS0JfR1NPX0ZSQUdMSVNUKSlcXG4yNTIwOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjI1MjE6XFx0XFxuMjUyMjpcXHRcXHRvbGRoZWFkcm9vbSA9IHNrYl9oZWFkcm9vbShza2IpO1xcbjI1MjM6XFx0XFx0biA9IF9fYWxsb2Nfc2tiKG5ld2hlYWRyb29tICsgc2tiLVxcdTAwM2VsZW4gKyBuZXd0YWlscm9vbSxcXG4yNTI0OlxcdFxcdFxcdFxcdGdmcF9tYXNrLCBza2JfYWxsb2NfcnhfZmxhZyhza2IpLFxcbjI1MjU6XFx0XFx0XFx0XFx0TlVNQV9OT19OT0RFKTtcXG4yNTI2OlxcdFxcdGlmICghbilcXG4yNTI3OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjI1Mjg6XFx0XFxuMjUyOTpcXHRcXHRza2JfcmVzZXJ2ZShuLCBuZXdoZWFkcm9vbSk7XFxuMjUzMDpcXHRcXG4yNTMxOlxcdFxcdC8qIFNldCB0aGUgdGFpbCBwb2ludGVyIGFuZCBsZW5ndGggKi9cXG4yNTMyOlxcdFxcdHNrYl9wdXQobiwgc2tiLVxcdTAwM2VsZW4pO1xcbjI1MzM6XFx0XFxuMjUzNDpcXHRcXHRoZWFkX2NvcHlfbGVuID0gb2xkaGVhZHJvb207XFxuMjUzNTpcXHRcXHRoZWFkX2NvcHlfb2ZmID0gMDtcXG4yNTM2OlxcdFxcdGlmIChuZXdoZWFkcm9vbSBcXHUwMDNjPSBoZWFkX2NvcHlfbGVuKVxcbjI1Mzc6XFx0XFx0XFx0aGVhZF9jb3B5X2xlbiA9IG5ld2hlYWRyb29tO1xcbjI1Mzg6XFx0XFx0ZWxzZVxcbjI1Mzk6XFx0XFx0XFx0aGVhZF9jb3B5X29mZiA9IG5ld2hlYWRyb29tIC0gaGVhZF9jb3B5X2xlbjtcXG4yNTQwOlxcdFxcbjI1NDE6XFx0XFx0LyogQ29weSB0aGUgbGluZWFyIGhlYWRlciBhbmQgZGF0YS4gKi9cXG4yNTQyOlxcdFxcdEJVR19PTihza2JfY29weV9iaXRzKHNrYiwgLWhlYWRfY29weV9sZW4sIG4tXFx1MDAzZWhlYWQgKyBoZWFkX2NvcHlfb2ZmLFxcbjI1NDM6XFx0XFx0XFx0XFx0ICAgICBza2ItXFx1MDAzZWxlbiArIGhlYWRfY29weV9sZW4pKTtcXG4yNTQ0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0Mjo1NS4zODU0MzYyNzRaIiwiU2VxIjo3NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODA0NDcyMTQwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5GQyBEaWdpdGFsIERldmljZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIGBza2JfY29weV9leHBhbmRgIGlzIGJlaW5nIHVzZWQuIEl0IGFsbG9jYXRlcyBhIG5ldyBzb2NrZXQgYnVmZmVyIHdpdGggYG5ld2hlYWRyb29tYCwgYHNrYi1cdTAwM2VsZW5gLCBhbmQgYG5ld3RhaWxyb29tYC4gVGhlIGZ1bmN0aW9uIHRoZW4gY29waWVzIGBza2ItXHUwMDNlbGVuYCBieXRlcy4gVGhlIGZ1bmN0aW9uIGBkaWdpdGFsX3JlY3ZfZGVwX2RhdGFfZ2F0aGVyYCBjYWxscyBpdCBsaWtlIHRoaXM6XG5cbmBgYGNcblx0XHRcdG5ld19za2IgPSBza2JfY29weV9leHBhbmQoZGRldi1cdTAwM2VjaGFpbmluZ19za2IsXG5cdFx0XHRcdFx0XHQgIGRkZXYtXHUwMDNldHhfaGVhZHJvb20sXG5cdFx0XHRcdFx0XHQgIDggKiBkZGV2LVx1MDAzZWxvY2FsX3BheWxvYWRfbWF4ICtcblx0XHRcdFx0XHRcdFx0ICBkZGV2LVx1MDAzZXR4X3RhaWxyb29tLFxuXHRcdFx0XHRcdFx0ICBHRlBfS0VSTkVMKTtcbmBgYFxuXG5UaGVuIGBza2JfcHV0X2RhdGFgIGlzIHVzZWQgdG8gYXBwZW5kIGByZXNwLVx1MDAzZWRhdGFgIG9mIGByZXNwLVx1MDAzZWxlbmAgdG8gYGRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiYC4gU28sIHRoZSBxdWVzdGlvbiBpcywgd2h5IGFyZSB3ZSB1c2luZyBgZGRldi1cdTAwM2V0eF9oZWFkcm9vbWAgYW5kIGA4ICogZGRldi1cdTAwM2Vsb2NhbF9wYXlsb2FkX21heCArIGRkZXYtXHUwMDNldHhfdGFpbHJvb21gIG5vdywgaW5zdGVhZCBvZiB0aGUgcHJldmlvdXMgYmVoYXZpb3Igd2hlcmUgYG5mY19hbGxvY19yZWN2X3NrYmAgd2FzIHVzZWQ/IEFoLCBpdCBtYWtlcyBzZW5zZS4gVGhlIG9sZCBtZXRob2QgZGlkbid0IHJlc2VydmUgdGhlIGB0eF9oZWFkcm9vbWAgb3IgcHJvdmlkZSBgdHhfdGFpbHJvb21gIHByb3Blcmx5LiBQZXJoYXBzIHRoaXMgd2FzIGFuIGlzc3VlIHdoZW4gdGhlIGBjaGFpbmluZ19za2JgIHdhcyBwYXNzZWQgdXBzdHJlYW0gb3IgdXNlZCBlbHNld2hlcmUsIG5lZWRpbmcgdGhlc2UgdmFsdWVzLiBQZXJoYXBzIGl0IHdhcyBqdXN0IGEgY29uc2lzdGVuY3kgZml4LCBlbnN1cmluZyBgY2hhaW5pbmdfc2tiYCAqYWx3YXlzKiBoYXMgcm9vbS5cblxuTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24ndCBpbnRyb2R1Y2UgbWVtb3J5IHNhZmV0eSBpc3N1ZXMsIG5hbWVseSB3aXRoIHVuaW5pdGlhbGl6ZWQgcmVhZHMuIGBza2JfcHV0X2RhdGFgICpjb3BpZXMqIGZyb20gYHJlc3AtXHUwMDNlZGF0YWAsIHNvIHRoYXQncyBnb29kLiBJdCBpbmNyZW1lbnRzIGBza2ItXHUwMDNldGFpbGAgYW5kIGBza2ItXHUwMDNlbGVuYCBjb3JyZWN0bHkuIEFzIGxvbmcgYXMgYHJlc3AtXHUwMDNlbGVuYCBpcyB2YWxpZCwgdGhlcmUgc2hvdWxkbid0IGJlIGEgcHJvYmxlbSB0aGVyZS4gQW5kIEkgc2VlOlxuXG5gYGBjXG5cdGlmIChyZXNwLVx1MDAzZWxlbiBcdTAwM2Ugc2tiX3RhaWxyb29tKGRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiKSkge1xuLi4uXG5gYGBcblxuSWYgYHJlc3AtXHUwMDNlbGVuYCBleGNlZWRzIHRhaWxyb29tLCB0aGUgc2tiIGV4cGFuZHMsIHNvIHRoYXQncyBoYW5kbGVkLlxuXG5OZXh0LCBJIG5lZWQgdG8gbG9vayBhdCB0aGUgc2Vjb25kIHBhcnQgb2YgdGhlIHBhdGNoLCB0aGUgZnVuY3Rpb24gYGRpZ2l0YWxfdGdfc2VuZF9hdHJfcmVzX2NvbXBsZXRlYC5cblxuYGBgY1xuc3RhdGljIHZvaWQgZGlnaXRhbF90Z19zZW5kX2F0cl9yZXNfY29tcGxldGUoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcblx0XHRcdFx0XHQgICAgIHZvaWQgKmFyZywgc3RydWN0IHNrX2J1ZmYgKnJlc3ApXG57XG4tXHRpbnQgb2Zmc2V0O1xuK1x0dW5zaWduZWQgaW50IG9mZnNldDtcblxuIFx0aWYgKElTX0VSUihyZXNwKSkge1xuIFx0XHRkaWdpdGFsX3BvbGxfbmV4dF90ZWNoKGRkZXYpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG5cbi1cdG9mZnNldCA9IDI7XG4tXHRpZiAocmVzcC1cdTAwM2VkYXRhWzBdID09IERJR0lUQUxfTkZDX0RFUF9ORkNBX1NPRF9TQilcbi1cdFx0b2Zmc2V0Kys7XG4rXHRpZiAoIXJlc3AtXHUwMDNlbGVuKVxuK1x0XHRnb3RvIGJhZF9mcmFtZTtcbitcbitcdG9mZnNldCA9IChyZXNwLVx1MDAzZWRhdGFbMF0gPT0gRElHSVRBTF9ORkNfREVQX05GQ0FfU09EX1NCKSA/IDMgOiAyO1xuK1x0aWYgKHJlc3AtXHUwMDNlbGVuIFx1MDAzYz0gb2Zmc2V0KVxuK1x0XHRnb3RvIGJhZF9mcmFtZTtcblxuIFx0ZGRldi1cdTAwM2VhdG5fY291bnQgPSAwO1xuXG4gXHRpZiAocmVzcC1cdTAwM2VkYXRhW29mZnNldF0gPT0gRElHSVRBTF9DTURfUFNMX1JFUSlcbiBcdFx0ZGlnaXRhbF90Z19yZWN2X3BzbF9yZXEoZGRldiwgYXJnLCByZXNwKTtcbiBcdGVsc2VcbiBcdFx0ZGlnaXRhbF90Z19yZWN2X2RlcF9yZXEoZGRldiwgYXJnLCByZXNwKTtcbitcbitcdHJldHVybjtcbitcbitiYWRfZnJhbWU6XG4rXHRrZnJlZV9za2IocmVzcCk7XG4rXHRkaWdpdGFsX3BvbGxfbmV4dF90ZWNoKGRkZXYpO1xuIH1cbmBgYFxuXG5Pa2F5LCBJIHNlZSB0aGUgZml4LiBCZWZvcmUsIHRoZSBjb2RlICpkaWRuJ3QqIGNoZWNrIGByZXNwLVx1MDAzZWxlbmAgYmVmb3JlIGFjY2Vzc2luZyBgcmVzcC1cdTAwM2VkYXRhYC4gSWYgYHJlc3AtXHUwMDNlbGVuYCB3YXMgMCwgYWNjZXNzaW5nIGByZXNwLVx1MDAzZWRhdGFbMF1gIHdvdWxkIGJlIGFuIG91dC1vZi1ib3VuZHMgcmVhZCwgYW5kIGlmIGByZXNwLVx1MDAzZWxlbmAgd2FzIDEgb3IgMiBhbmQgdGhlIGByZXNwLVx1MDAzZWRhdGFbMF1gIHdhcyBgRElHSVRBTF9ORkNfREVQX05GQ0FfU09EX1NCYCwgdGhlbiBhY2Nlc3NpbmcgYHJlc3AtXHUwMDNlZGF0YVtvZmZzZXRdYCB3YXMgYW4gb3V0IG9mIGJvdW5kcyByZWFkLiBUaGlzIHdvdWxkIGhhdmUgYmVlbiBjYXVnaHQgYnkgS0FTQU4hIFRoZSBwYXRjaCBub3cgY29ycmVjdGx5IHZhbGlkYXRlcyB0aGF0IGByZXNwLVx1MDAzZWxlbmAgaXMgZ3JlYXRlciB0aGFuIDAgKmJlZm9yZSogYWNjZXNzaW5nIGByZXNwLVx1MDAzZWRhdGFbMF1gLCBhbmQgdGhhdCBgcmVzcC1cdTAwM2VsZW5gIGlzIGdyZWF0ZXIgdGhhbiBgb2Zmc2V0YCBiZWZvcmUgaW5kZXhpbmcgaW50byB0aGUgZGF0YS4gSWYgdGhlIGNoZWNrIGZhaWxzIGl0IGZyZWVzIGByZXNwYCBhbmQgcG9sbHMgZm9yIHRoZSBuZXh0IHRlY2guXG5cbk5vdyBJIG5lZWQgdG8gcXVpY2tseVxuXG4iLCJJbnB1dFRva2VucyI6MjcwNDgsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTkxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDM6MDMuNDMwMTYxNTc4WiIsIlNlcSI6NzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmZjL2RpZ2l0YWxfZGVwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTM5NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTM5NTpcXHRcXHRyZXR1cm4gcmM7XFxuMTM5NjpcXHR9XFxuMTM5NzpcXHRcXG4xMzk4OlxcdHN0YXRpYyB2b2lkIGRpZ2l0YWxfdGdfcmVjdl9wc2xfcmVxKHN0cnVjdCBuZmNfZGlnaXRhbF9kZXYgKmRkZXYsIHZvaWQgKmFyZyxcXG4xMzk5OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqcmVzcClcXG4xNDAwOlxcdHtcXG4xNDAxOlxcdFxcdGludCByYztcXG4xNDAyOlxcdFxcdHN0cnVjdCBkaWdpdGFsX3BzbF9yZXEgKnBzbF9yZXE7XFxuMTQwMzpcXHRcXHR1OCByZl90ZWNoO1xcbjE0MDQ6XFx0XFx0dTggZHNpLCBwYXlsb2FkX3NpemUsIHBheWxvYWRfYml0cztcXG4xNDA1OlxcdFxcbjE0MDY6XFx0XFx0aWYgKElTX0VSUihyZXNwKSkge1xcbjE0MDc6XFx0XFx0XFx0cmMgPSBQVFJfRVJSKHJlc3ApO1xcbjE0MDg6XFx0XFx0XFx0cmVzcCA9IE5VTEw7XFxuMTQwOTpcXHRcXHRcXHRnb3RvIGV4aXQ7XFxuMTQxMDpcXHRcXHR9XFxuMTQxMTpcXHRcXG4xNDEyOlxcdFxcdHJjID0gZGRldi1cXHUwMDNlc2tiX2NoZWNrX2NyYyhyZXNwKTtcXG4xNDEzOlxcdFxcdGlmIChyYykge1xcbjE0MTQ6XFx0XFx0XFx0UFJPVE9DT0xfRVJSKFxcXCIxNC40LjEuNlxcXCIpO1xcbjE0MTU6XFx0XFx0XFx0Z290byBleGl0O1xcbjE0MTY6XFx0XFx0fVxcbjE0MTc6XFx0XFxuMTQxODpcXHRcXHRyYyA9IGRpZ2l0YWxfc2tiX3B1bGxfZGVwX3NvZChkZGV2LCByZXNwKTtcXG4xNDE5OlxcdFxcdGlmIChyYykge1xcbjE0MjA6XFx0XFx0XFx0UFJPVE9DT0xfRVJSKFxcXCIxNC40LjEuMlxcXCIpO1xcbjE0MjE6XFx0XFx0XFx0Z290byBleGl0O1xcbjE0MjI6XFx0XFx0fVxcbjE0MjM6XFx0XFxuMTQyNDpcXHRcXHRwc2xfcmVxID0gKHN0cnVjdCBkaWdpdGFsX3BzbF9yZXEgKilyZXNwLVxcdTAwM2VkYXRhO1xcbjE0MjU6XFx0XFxuMTQyNjpcXHRcXHRpZiAocmVzcC1cXHUwMDNlbGVuICE9IHNpemVvZihzdHJ1Y3QgZGlnaXRhbF9wc2xfcmVxKSB8fFxcbjE0Mjc6XFx0XFx0ICAgIHBzbF9yZXEtXFx1MDAzZWRpciAhPSBESUdJVEFMX05GQ19ERVBfRlJBTUVfRElSX09VVCB8fFxcbjE0Mjg6XFx0XFx0ICAgIHBzbF9yZXEtXFx1MDAzZWNtZCAhPSBESUdJVEFMX0NNRF9QU0xfUkVRKSB7XFxuMTQyOTpcXHRcXHRcXHRyYyA9IC1FSU87XFxuMTQzMDpcXHRcXHRcXHRnb3RvIGV4aXQ7XFxuMTQzMTpcXHRcXHR9XFxuMTQzMjpcXHRcXG4xNDMzOlxcdFxcdGRzaSA9IChwc2xfcmVxLVxcdTAwM2VicnMgXFx1MDAzZVxcdTAwM2UgMykgXFx1MDAyNiAweDA3O1xcbjE0MzQ6XFx0XFx0c3dpdGNoIChkc2kpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDM6MDMuNDMwMjc5MDY4WiIsIlNlcSI6NzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE4Njk1MTkzOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgY29kZTpcblxuKipBbmFseXppbmcgYGRpZ2l0YWxfdGdfcmVjdl9kZXBfcmVxYCoqXG5cbkFscmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGlzIGBkaWdpdGFsX3RnX3JlY3ZfZGVwX3JlcWAgZnVuY3Rpb24uIFdoYXQgZXhhY3RseSBpcyBoYXBwZW5pbmcgaW4gdGhpcyBwYXJ0IG9mIHRoZSBjb2RlPyBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgc3RhcnRpbmcgcG9pbnQuIExldCdzIGRlbHZlIGludG8gaXRzIGluaXRpYWxpemF0aW9uIGFuZCBob3cgaXQgYmVnaW5zIGV4ZWN1dGluZyBpdHMgaW50ZW5kZWQgdGFza3MuIEkgbmVlZCB0byB0cmFjZSBpdHMgZmxvdyB0byBhc3Nlc3MgaXRzIG92ZXJhbGwgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5ODg2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MzowNS4yOTk4MDExMjVaIiwiU2VxIjo3OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwNTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZmMvZGlnaXRhbF9kZXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDc1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDc1OlxcdH1cXG4xMDc2OlxcdFxcbjEwNzc6XFx0c3RhdGljIHZvaWQgZGlnaXRhbF90Z19yZWN2X2RlcF9yZXEoc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldiwgdm9pZCAqYXJnLFxcbjEwNzg6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICpyZXNwKVxcbjEwNzk6XFx0e1xcbjEwODA6XFx0XFx0aW50IHJjO1xcbjEwODE6XFx0XFx0c3RydWN0IGRpZ2l0YWxfZGVwX3JlcV9yZXMgKmRlcF9yZXE7XFxuMTA4MjpcXHRcXHR1OCBwZmI7XFxuMTA4MzpcXHRcXHRzaXplX3Qgc2l6ZTtcXG4xMDg0OlxcdFxcbjEwODU6XFx0XFx0aWYgKElTX0VSUihyZXNwKSkge1xcbjEwODY6XFx0XFx0XFx0cmMgPSBQVFJfRVJSKHJlc3ApO1xcbjEwODc6XFx0XFx0XFx0cmVzcCA9IE5VTEw7XFxuMTA4ODpcXHRcXHRcXHRnb3RvIGV4aXQ7XFxuMTA4OTpcXHRcXHR9XFxuMTA5MDpcXHRcXG4xMDkxOlxcdFxcdHJjID0gZGRldi1cXHUwMDNlc2tiX2NoZWNrX2NyYyhyZXNwKTtcXG4xMDkyOlxcdFxcdGlmIChyYykge1xcbjEwOTM6XFx0XFx0XFx0UFJPVE9DT0xfRVJSKFxcXCIxNC40LjEuNlxcXCIpO1xcbjEwOTQ6XFx0XFx0XFx0Z290byBleGl0O1xcbjEwOTU6XFx0XFx0fVxcbjEwOTY6XFx0XFxuMTA5NzpcXHRcXHRyYyA9IGRpZ2l0YWxfc2tiX3B1bGxfZGVwX3NvZChkZGV2LCByZXNwKTtcXG4xMDk4OlxcdFxcdGlmIChyYykge1xcbjEwOTk6XFx0XFx0XFx0UFJPVE9DT0xfRVJSKFxcXCIxNC40LjEuMlxcXCIpO1xcbjExMDA6XFx0XFx0XFx0Z290byBleGl0O1xcbjExMDE6XFx0XFx0fVxcbjExMDI6XFx0XFxuMTEwMzpcXHRcXHRpZiAocmVzcC1cXHUwMDNlbGVuIFxcdTAwM2UgZGRldi1cXHUwMDNlbG9jYWxfcGF5bG9hZF9tYXgpIHtcXG4xMTA0OlxcdFxcdFxcdHJjID0gLUVNU0dTSVpFO1xcbjExMDU6XFx0XFx0XFx0Z290byBleGl0O1xcbjExMDY6XFx0XFx0fVxcbjExMDc6XFx0XFxuMTEwODpcXHRcXHRzaXplID0gc2l6ZW9mKHN0cnVjdCBkaWdpdGFsX2RlcF9yZXFfcmVzKTtcXG4xMTA5OlxcdFxcdGRlcF9yZXEgPSAoc3RydWN0IGRpZ2l0YWxfZGVwX3JlcV9yZXMgKilyZXNwLVxcdTAwM2VkYXRhO1xcbjExMTA6XFx0XFxuMTExMTpcXHRcXHRpZiAocmVzcC1cXHUwMDNlbGVuIFxcdTAwM2Mgc2l6ZSB8fCBkZXBfcmVxLVxcdTAwM2VkaXIgIT0gRElHSVRBTF9ORkNfREVQX0ZSQU1FX0RJUl9PVVQgfHxcXG4xMTEyOlxcdFxcdCAgICBkZXBfcmVxLVxcdTAwM2VjbWQgIT0gRElHSVRBTF9DTURfREVQX1JFUSkge1xcbjExMTM6XFx0XFx0XFx0cmMgPSAtRUlPO1xcbjExMTQ6XFx0XFx0XFx0Z290byBleGl0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MzowNS4yOTk5ODYzMjVaIiwiU2VxIjo3OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTI5Nzg4NzIyMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gdnMuIEtBU0FOOiBBIFRhcmdldGVkIEFzc2Vzc21lbnQqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBjcnVjaWFsOiBpcyB0aGlzIGEgS01TQU4gY2FzZSwgb3IgY2FuIEtBU0FOIGhhbmRsZSBpdD8gVGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXI6IGlmIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgKEtBU0FOLCBMT0NLREVQLCBldGMuKSBjYXRjaCB0aGUgaXNzdWUsIHdlIGF2b2lkIHRoZSBvdmVyaGVhZCBvZiBLTVNBTi4gS01TQU4gaXMgcmVzZXJ2ZWQgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgKm9ubHkqIEtNU0FOIGRldGVjdHMuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBjb3N0bHksIHNvIGxldCdzIHJ1bGUgaXQgb3V0IGlmIHdlIGNhbi5cblxuRmlyc3QsIEkgZXhhbWluZWQgdGhlIGBkaWdpdGFsX3RnX3NlbmRfYXRyX3Jlc19jb21wbGV0ZWAgZml4LiBUaGUgcHJvYmxlbSB3YXMgY2xlYXI6IGFuIG91dC1vZi1ib3VuZHMgcmVhZCBkdWUgdG8gaW5zdWZmaWNpZW50IGJvdW5kcyBjaGVja2luZyBvbiBpbmNvbWluZyBwYWNrZXQgZGF0YS4gU3BlY2lmaWNhbGx5LCBgcmVzcC1cdTAwM2VkYXRhWzBdYCBhbmQgYHJlc3AtXHUwMDNlZGF0YVtvZmZzZXRdYCB3ZXJlIHJlYWQgd2l0aG91dCB2ZXJpZnlpbmcgYHJlc3AtXHUwMDNlbGVuYC4gVGhlIGZpeCBhZGRzIHRob3NlIGNoZWNrcy4gVGhpcyBpcyB0ZXh0Ym9vayBLQVNBTiB0ZXJyaXRvcnnigJRzcGF0aWFsIG1lbW9yeSBzYWZldHk6IHByZXZlbnRpbmcgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhlIHBhdGNoICpyZWplY3RzKiBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBmcmFtZXMsIG1lYW5pbmcgaXQgaXMgbm90IGFjY2Vzc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBidXQgcHJldmVudGluZyBhY2Nlc3MgdG8gaXQuIFRoaXMgY2hhbmdlICpyZW1vdmVzKiB0aGUgdnVsbmVyYWJpbGl0eS4gVGhpcyBpcyBkZWZpbml0aXZlbHkgbm90IGEgS01TQU4gaXNzdWUuXG5cblNlY29uZCwgSSBsb29rZWQgYXQgdGhlIGNoYW5nZSBpbiBgZGlnaXRhbF9yZWN2X2RlcF9kYXRhX2dhdGhlcmAsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgdGhlIGFsbG9jYXRpb24gb2YgYGRkZXYtXHUwMDNlY2hhaW5pbmdfc2tiYC4gVGhlIG9yaWdpbmFsIHVzZWQgYG5mY19hbGxvY19yZWN2X3NrYmAgd2hpY2ggaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBgZGlnaXRhbF9za2JfYWxsb2NgLiBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIHdhcyBjaGFuZ2VkLiBJIHdpbGwgbmVlZCB0byBsb29rIGF0IHRoZSBjb21taXQgbG9nIG9yIHVzZSBgZ3JlcHBlcmAgdG8gc2VlIGlmIHRoZXJlIGlzIGFueSBtZW50aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBIb3dldmVyLCB0aGUgY2hhbmdlcyB0aGVtc2VsdmVzLCBhbGxvY2F0aW5nIGFuZCBleHBhbmRpbmcgU0tCcywgZG9uJ3Qgc2NyZWFtIEtNU0FOIHJpc2sgcmlnaHQgYXdheTsgbW9yZSBjb250ZXh0IHdvdWxkIGJlIHJlcXVpcmVkLiBIb3dldmVyLCBjb25zaWRlcmluZyB0aGUgb3JpZ2luYWwgaW5zdHJ1Y3Rpb25zLCB0aGlzIHBhdGNoIGRvZXNuJ3QgKmFwcGVhciogdG8gaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzLiBJdCBsb29rcyBsaWtlIGl0IGlzIHByaW1hcmlseSBjaGFuZ2luZyBob3cgdGhlIHNrYiBpcyBhbGxvY2F0ZWQgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIEkgd2lsbCBuZWVkIHRvIGRpZyBhIGxpdHRsZSBkZWVwZXIgaGVyZSwgYnV0IG15IGN1cnJlbnQgYW5hbHlzaXMgaXMgdGhhdCB0aGlzIGlzbid0IGEgS01TQU4gaXNzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNjM2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE3NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDEzOjQzOjE4LjI3ODg2MTYyMloiLCJTZXEiOjgwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxOTU5ODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRkZXYtXFx1MDAzZXR4X2hlYWRyb29tXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25mYy9kaWdpdGFsX2NvcmUuYz00Mj1zdHJ1Y3Qgc2tfYnVmZiAqZGlnaXRhbF9za2JfYWxsb2Moc3RydWN0IG5mY19kaWdpdGFsX2RldiAqZGRldixcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmMtNDYtXFxubmV0L25mYy9kaWdpdGFsX2NvcmUuYzo0NzpcXHRza2IgPSBhbGxvY19za2IobGVuICsgZGRldi1cXHUwMDNldHhfaGVhZHJvb20gKyBkZGV2LVxcdTAwM2V0eF90YWlscm9vbSxcXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jLTQ4LVxcdFxcdFxcdEdGUF9LRVJORUwpO1xcbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmMtNDktXFx0aWYgKHNrYilcXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jOjUwOlxcdFxcdHNrYl9yZXNlcnZlKHNrYiwgZGRldi1cXHUwMDNldHhfaGVhZHJvb20pO1xcbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmMtNTEtXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jPTc1Nz1zdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpuZmNfZGlnaXRhbF9hbGxvY2F0ZV9kZXZpY2UoY29uc3Qgc3RydWN0IG5mY19kaWdpdGFsX29wcyAqb3BzLFxcbi0tXFxubmV0L25mYy9kaWdpdGFsX2NvcmUuYy03OTktXFxubmV0L25mYy9kaWdpdGFsX2NvcmUuYzo4MDA6XFx0ZGRldi1cXHUwMDNldHhfaGVhZHJvb20gPSB0eF9oZWFkcm9vbSArIERJR0lUQUxfTUFYX0hFQURFUl9MRU47XFxubmV0L25mYy9kaWdpdGFsX2NvcmUuYy04MDEtXFx0ZGRldi1cXHUwMDNldHhfdGFpbHJvb20gPSB0eF90YWlscm9vbSArIERJR0lUQUxfQ1JDX0xFTjtcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9jb3JlLmMtODAzLVxcdGRkZXYtXFx1MDAzZW5mY19kZXYgPSBuZmNfYWxsb2NhdGVfZGV2aWNlKFxcdTAwMjZkaWdpdGFsX25mY19vcHMsIGRkZXYtXFx1MDAzZXByb3RvY29scyxcXG5uZXQvbmZjL2RpZ2l0YWxfY29yZS5jOjgwNDpcXHRcXHRcXHRcXHRcXHQgICAgZGRldi1cXHUwMDNldHhfaGVhZHJvb20sXFxubmV0L25mYy9kaWdpdGFsX2NvcmUuYy04MDUtXFx0XFx0XFx0XFx0XFx0ICAgIGRkZXYtXFx1MDAzZXR4X3RhaWxyb29tKTtcXG4tLVxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYz0yMzE9ZGlnaXRhbF9yZWN2X2RlcF9kYXRhX2dhdGhlcihzdHJ1Y3QgbmZjX2RpZ2l0YWxfZGV2ICpkZGV2LCB1OCBwZmIsXFxuLS1cXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMjUzLVxcdFxcdFxcdG5ld19za2IgPSBza2JfY29weV9leHBhbmQoZGRldi1cXHUwMDNlY2hhaW5pbmdfc2tiLFxcbm5ldC9uZmMvZGlnaXRhbF9kZXAuYzoyNTQ6XFx0XFx0XFx0XFx0XFx0XFx0ICBkZGV2LVxcdTAwM2V0eF9oZWFkcm9vbSxcXG5uZXQvbmZjL2RpZ2l0YWxfZGVwLmMtMjU1LVxcdFxcdFxcdFxcdFxcdFxcdCAgOCAqIGRkZXYtXFx1MDAzZWxvY2FsX3BheWxvYWRfbWF4ICtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTM6NDM6MTguNDQwODMyMjAxWiIsIlNlcSI6ODEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjExNTAyOTc1NTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE5GQyBTS0IgQWxsb2NhdGlvbiBhbmQgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IElzc3VlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBjb25jZXJuIHdhcyBhYm91dCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgZ2l2ZW4gdGhlIGNoYW5nZXMgaW4gU0tCIGFsbG9jYXRpb24gYW5kIGRhdGEgY29weWluZyBmb3IgTkZDIGRldmljZXMuIFNwZWNpZmljYWxseSwgSSdtIGZvY3VzaW5nIG9uIGhvdyB3ZSBub3cgaGFuZGxlIGhlYWRyb29tIGFuZCB0YWlscm9vbS4gUHJldmlvdXNseSwgYGNoYWluaW5nX3NrYmAgd2FzIGFsbG9jYXRlZCB3aXRoIG1pbmltYWwgaGVhZHJvb20sIGJ1dCBub3csIGJ5IHVzaW5nIGBkaWdpdGFsX3NrYl9hbGxvY2AsIHdlJ3JlIGV4cGxpY2l0bHkgcmVxdWVzdGluZyBgZGRldi1cdTAwM2V0eF9oZWFkcm9vbWAgYW5kIGBkZGV2LVx1MDAzZXR4X3RhaWxyb29tYC4gVGhlIGBza2JfY29weV9leHBhbmRgIGNhbGwgaXMgYWxzbyBtb2RpZmllZCB0byBhY2NvdW50IGZvciB0aGVzZSwgZXhwYW5kaW5nIHRoZSBTS0Igd2l0aCB0aGUgcmVxdWVzdGVkIGhlYWRyb29tIGFuZCB0YWlscm9vbS5cblxuVGhlIGNvbmNlcm4gd2FzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGEgcmlzayBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJIGhhZCB0byBkb3VibGUtY2hlY2sgYHNrYl9wdXRfZGF0YWAgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgbmV3IGFsbG9jYXRpb24gc2NoZW1lLiBJIGNhcmVmdWxseSByZXZpZXdlZCB0aGUgYHNrYl9wdXRfZGF0YWAgY2FsbDogYHNrYl9wdXRfZGF0YShkZGV2LVx1MDAzZWNoYWluaW5nX3NrYiwgcmVzcC1cdTAwM2VkYXRhLCByZXNwLVx1MDAzZWxlbik7YC4gSXQgY29ycmVjdGx5IGNvcGllcyBgcmVzcC1cdTAwM2VsZW5gIGJ5dGVzIGZyb20gYHJlc3AtXHUwMDNlZGF0YWAgYW5kIHVwZGF0ZXMgdGhlIGxlbmd0aCBvZiB0aGUgU0tCLCBlbnN1cmluZyB0aGF0IHRoZSB2YWxpZCBkYXRhIGluIHRoZSBTS0IgZXhhY3RseSBtYXRjaGVzIHRoZSBieXRlcyBjb3BpZWQuIFRoZXJlZm9yZSwgdGhlcmUncyBubyB3YXkgdGhhdCB3ZSdyZSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdoZW4gdXNpbmcgdGhpcyBwYXR0ZXJuLCBhcyB0aGUgb25seSBkYXRhIHdyaXR0ZW4gaW50byB0aGUgU0tCIGlzIGZyb20gYSB2YWxpZCBkYXRhIHNvdXJjZSwgbmFtZWx5IHRoZSBgcmVzcC1cdTAwM2VkYXRhYCBidWZmZXIuIE5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBpbnRyb2R1Y2VkLiBJIGFtIHNhdGlzZmllZCB0aGF0IHRoZXJlIGlzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuVG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJIHJhbiB0aHJvdWdoIHRoZSBmb3VyIGNyaXRlcmlhIHRoYXQgdHJpZ2dlciB0aGUgYE5lZWRzS01TQU49dHJ1ZWAgZmxhZy4gRmlyc3QsIGFyZSB0aGVyZSBhbnkga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UgdGhhdCBtaWdodCBjb250YWluIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBObywgdGhlIGNvZGUgZG9lcyBub3QgdG91Y2ggYW55IHN0cnVjdHMgc2VudCB0byB1c2Vyc3BhY2UuIFNlY29uZCwgaXMgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgcmVsaWVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3BlLCBgb2Zmc2V0YCwgYHJlc3BgLCBhbmQgYWxsIG90aGVyIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhpcmQsIGFyZSB3ZSBhbGxvY2F0aW5nIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGluIGEgd2F5IHRoYXQgbWlnaHQgbGVhdmUgdW5pbml0aWFsaXplZCBmaWVsZHMgZXhwb3NlZD8gQWdhaW4sIG5vLiBXZSBhcmUgb25seSBhbGxvY2F0aW5nIFNLQnMgdXNpbmcgZWl0aGVyIGBkaWdpdGFsX3NrYl9hbGxvY2Agb3IgYHNrYl9jb3B5X2V4cGFuZGAgYW5kIGZpbGxpbmcgdGhlbSB3aXRoIGRhdGEgdXNpbmcgYHNrYl9wdXRfZGF0YWAuIEZvdXJ0aCwgYXJlIHRoZXJlIGFueSBib3VuZHMgY2hlY2tzIG9yIGxvZ2ljIHRoYXQgbWlnaHQgYWxsb3cgc3Vycm91bmRpbmcgY29kZSB0byByZWFkIHVuaW5pdGlhbGl6ZWQgYnl0ZXM/IFRoZSBhbnN3ZXIgaXMgbm8sIGJlY2F1c2UgaW4gZmFjdCwgaW4gYGRpZ2l0YWxfdGdfc2VuZF9hdHJfcmVzX2NvbXBsZXRlYCBhcmUgYm91bmRzIGNoZWNrcyB0aGF0IHJlc3RyaWN0IGFjY2VzcyBzbyB0aGF0IGVtcHR5IG9yIHVuZGVyc2l6ZWQgZnJhbWVzIGFyZSBkcm9wcGVkIHJhdGhlciB0aGFuIGluZGV4ZWQgb3V0LW9mLWJvdW5kcy5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGRlZmluaXRlbHkgYmUgYGZhbHNlYCBoZXJlLiBUaGlzIGlzIGFuIGV4Y2VsbGVudCBjYXNlIGZvciB1c2luZyBLQVNBTiB0byBkZXRlY3QgYW55IG91dC1vZi1ib3VuZHMgb3IgYnVmZmVyIG92ZXJmbG93IGlzc3Vlcywgd2hpY2ggaXMgcHJlY2lzZWx5IHdoYXQgdGhlIGNvZGUgdXNlcy4gSSBhbSBnb2luZyB0byBzZXQgYE5lZWRzS01TQU46IGZhbHNlYCBhbmQgbm90ZSB0aGF0IGRldGFpbGVkIHJlYXNvbmluZyBleHBsYWlucyB3aHkgS01TQU4gaXMgbm90IG5lZWRlZCBhbmQgd2h5IEtBU0FOL3N0YW5kYXJkIGRldGVjdG9ycyBhcmUgYXBwbGljYWJsZS4gVGhpcyBhbGwgbG9va3Mgc291bmQgdG8gbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyODYzLCJPdXRwdXRUb2tlbnMiOjMxNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMzo0MzoyOS45NDM4MTEwOFoiLCJTZXEiOjgyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbmV0L25mYy9kaWdpdGFsX2RlcC5jIGluIHR3byBwbGFjZXM6XFxuMS4gSW4gYGRpZ2l0YWxfcmVjdl9kZXBfZGF0YV9nYXRoZXIoKWAsIGl0IHN3aXRjaGVzIHRoZSBhbGxvY2F0aW9uIG9mIGBkZGV2LVxcdTAwM2VjaGFpbmluZ19za2JgIGZyb20gYG5mY19hbGxvY19yZWN2X3NrYigpYCB0byBgZGlnaXRhbF9za2JfYWxsb2MoKWAsIGFuZCBhZGp1c3RzIGBza2JfY29weV9leHBhbmQoKWAgYXJndW1lbnRzIHRvIGVuc3VyZSBkZXZpY2UgaGVhZHJvb20gYW5kIHRhaWxyb29tIChgdHhfaGVhZHJvb21gIGFuZCBgdHhfdGFpbHJvb21gKSBhcmUgcHJvcGVybHkgYWxsb2NhdGVkLiBBcyBkYXRhIGlzIGNvcGllZCBpbnRvIHRoZSBza2IgdmlhIGBza2JfcHV0X2RhdGEoLi4uLCByZXNwLVxcdTAwM2VkYXRhLCByZXNwLVxcdTAwM2VsZW4pYCwgb25seSB0aGUgZXhwbGljaXRseSByZWNlaXZlZCBieXRlcyBhcmUgYWRkZWQgdG8gdGhlIHBhY2tldCBsZW5ndGgsIGxlYXZpbmcgbm8gdW5pbml0aWFsaXplZCBkYXRhIGV4cG9zZWQuXFxuMi4gSW4gYGRpZ2l0YWxfdGdfc2VuZF9hdHJfcmVzX2NvbXBsZXRlKClgLCBpdCBhZGRzIHZhbGlkYXRpb24gY2hlY2tzIHRvIGVuc3VyZSBgcmVzcC1cXHUwMDNlbGVuYCBpcyBub24temVybyBhbmQgZ3JlYXRlciB0aGFuIGBvZmZzZXRgIGJlZm9yZSBpbmRleGluZyBgcmVzcC1cXHUwMDNlZGF0YVswXWAgYW5kIGByZXNwLVxcdTAwM2VkYXRhW29mZnNldF1gLiBUaGVzZSBjaGFuZ2VzIGZpeCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBvbiB0cnVuY2F0ZWQgb3IgbWFsZm9ybWVkIHJlY2VpdmVkIHNrYiBwYWNrZXRzLCB3aGljaCBhcmUgc3BhdGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyBjYXVnaHQgYnkgS0FTQU4uXFxuXFxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBrZXJuZWwtdG8tdXNlciBjb3B5IHBhdGhzIChpbmZvIGxlYWtzKSwgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZCBhbmQgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG5ldC9uZmMvZGlnaXRhbF9kZXAuYyBpbiB0d28gcGxhY2VzOlxcbjEuIEluIGBkaWdpdGFsX3JlY3ZfZGVwX2RhdGFfZ2F0aGVyKClgLCBpdCBzd2l0Y2hlcyB0aGUgYWxsb2NhdGlvbiBvZiBgZGRldi1cXHUwMDNlY2hhaW5pbmdfc2tiYCBmcm9tIGBuZmNfYWxsb2NfcmVjdl9za2IoKWAgdG8gYGRpZ2l0YWxfc2tiX2FsbG9jKClgLCBhbmQgYWRqdXN0cyBgc2tiX2NvcHlfZXhwYW5kKClgIGFyZ3VtZW50cyB0byBlbnN1cmUgZGV2aWNlIGhlYWRyb29tIGFuZCB0YWlscm9vbSAoYHR4X2hlYWRyb29tYCBhbmQgYHR4X3RhaWxyb29tYCkgYXJlIHByb3Blcmx5IGFsbG9jYXRlZC4gQXMgZGF0YSBpcyBjb3BpZWQgaW50byB0aGUgc2tiIHZpYSBgc2tiX3B1dF9kYXRhKC4uLiwgcmVzcC1cXHUwMDNlZGF0YSwgcmVzcC1cXHUwMDNlbGVuKWAsIG9ubHkgdGhlIGV4cGxpY2l0bHkgcmVjZWl2ZWQgYnl0ZXMgYXJlIGFkZGVkIHRvIHRoZSBwYWNrZXQgbGVuZ3RoLCBsZWF2aW5nIG5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBleHBvc2VkLlxcbjIuIEluIGBkaWdpdGFsX3RnX3NlbmRfYXRyX3Jlc19jb21wbGV0ZSgpYCwgaXQgYWRkcyB2YWxpZGF0aW9uIGNoZWNrcyB0byBlbnN1cmUgYHJlc3AtXFx1MDAzZWxlbmAgaXMgbm9uLXplcm8gYW5kIGdyZWF0ZXIgdGhhbiBgb2Zmc2V0YCBiZWZvcmUgaW5kZXhpbmcgYHJlc3AtXFx1MDAzZWRhdGFbMF1gIGFuZCBgcmVzcC1cXHUwMDNlZGF0YVtvZmZzZXRdYC4gVGhlc2UgY2hhbmdlcyBmaXggcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgb24gdHJ1bmNhdGVkIG9yIG1hbGZvcm1lZCByZWNlaXZlZCBza2IgcGFja2V0cywgd2hpY2ggYXJlIHNwYXRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgY2F1Z2h0IGJ5IEtBU0FOLlxcblxcblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywga2VybmVsLXRvLXVzZXIgY29weSBwYXRocyAoaW5mbyBsZWFrcyksIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQgYW5kIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}