Name: series-workflow7p7g4 Phase: Succeeded StartedAt: 2026-09-07 07:05:24 +0000 UTC FinishedAt: 2026-09-07 08:59:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7p7g4[0] Phase: Succeeded StartedAt: 2026-09-07 07:05:24 +0000 UTC FinishedAt: 2026-09-07 07:25:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7p7g4[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 07:05:24 +0000 UTC FinishedAt: 2026-09-07 07:25:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "1b60ed34f712e9f606d80951f1586f4274ebadf1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "WLAN_VENDOR_MORSEMICRO", "MM81X", "MM81X_USB", "MAC80211", "USB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "1b60ed34f712e9f606d80951f1586f4274ebadf1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "WLAN_VENDOR_MORSEMICRO", "MM81X", "MM81X_USB", "MAC80211", "USB" ], "series_id": "107188c7-ccfc-447c-9cef-dad6e869481a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mm81x_mac_check_fw_disabled_chans", "mm81x_mac_restart", "mm81x_mac_ops_add_interface", "mm81x_reg_notifier" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1dMQU5fVkVORE9SX01PUlNFTUlDUk8mIzM0OywKICAgICYjMzQ7TU04MVgmIzM0OywKICAgICYjMzQ7TU04MVhfVVNCJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFucyYjMzQ7LAogICAgJiMzNDttbTgxeF9tYWNfcmVzdGFydCYjMzQ7LAogICAgJiMzNDttbTgxeF9tYWNfb3BzX2FkZF9pbnRlcmZhY2UmIzM0OywKICAgICYjMzQ7bW04MXhfcmVnX25vdGlmaWVyJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBvbiBgcmVzcC1cdTAwM2VuX2NoYW5uZWxzYCBhZ2FpbnN0IGBBUlJBWV9TSVpFKG1vcnNfczFnaHpfY2hhbm5lbHMpYCB0byBwcmV2ZW50IGhlYXAgb3V0LW9mLWJvdW5kcyByZWFkcyB3aGVuIGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBgcmVzcC1cdTAwM2VjaGFubmVsc2AgYXJyYXkgaW4gYG1tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFucygpYC5cblxuSGVhcCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyBhcmUgc3RhbmRhcmQgc3BhdGlhbCBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSByZXNwb25zZSBidWZmZXIgYHJlc3BgIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jKClgLCBhbmQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGFjY2Vzc2VzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGJ5IHRoaXMgY2hhbmdlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBib3VuZHMgY2hlY2sgb24gZmlybXdhcmUgcmVzcG9uc2VzIGluIG1tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFucygpIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyB3aGVuIG5fY2hhbm5lbHMgZXhjZWVkcyB0aGUgc2l6ZSBvZiBtb3JzX3MxZ2h6X2NoYW5uZWxzLiBUaGUgTU04MXggd2lyZWxlc3MgZHJpdmVyIHN1cHBvcnRzIFVTQiBpbnRlcmZhY2VzIChNTTgxWF9VU0IpIHdoaWNoIGNhbiBiZSBwcm9iZWQgYW5kIGZ1enplZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBlbXVsYXRpb24vZ2FkZ2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGI3ZDE1N2MwOGU3YWJjOTJhZTAxOGQ2ZTY0YWYyOWE1MjM4YjA4M2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDA3OjIzOjQ1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jXG5pbmRleCAwOGNhMTE2YTY4YjQ3Li5lOGVmMGQ5ZWViZDc1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuY1xuQEAgLTI4OCw2ICYjNDM7Mjg4LDExIEBAIHN0YXRpYyB2b2lkIG1tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFucyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodylcbiBcdFx0Y2gtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+SUVFRTgwMjExX0NIQU5fUzFHX05PX1BSSU1BUlk7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKGxlMzJfdG9fY3B1KHJlc3AtXHUwMDNlbl9jaGFubmVscykgXHUwMDNlIEFSUkFZX1NJWkUobW9yc19zMWdoel9jaGFubmVscykpIHtcbiYjNDM7XHRcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbGUzMl90b19jcHUocmVzcC1cdTAwM2VuX2NoYW5uZWxzKTsgaSYjNDM7JiM0MzspIHtcbiBcdFx0c3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaDtcbiBcdFx0c3RydWN0IGhvc3RfY21kX2Rpc2FibGVkX2NoYW5uZWxfZW50cnkgKmVudHJ5ID1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtXTEFOX1ZFTkRPUl9NT1JTRU1JQ1JPJiMzNDssCiAgICAmIzM0O01NODFYJiMzNDssCiAgICAmIzM0O01NODFYX1VTQiYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnMmIzM0OywKICAgICYjMzQ7bW04MXhfbWFjX3Jlc3RhcnQmIzM0OywKICAgICYjMzQ7bW04MXhfbWFjX29wc19hZGRfaW50ZXJmYWNlJiMzNDssCiAgICAmIzM0O21tODF4X3JlZ19ub3RpZmllciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYm91bmRzIGNoZWNrIG9uIGZpcm13YXJlIHJlc3BvbnNlcyBpbiBtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnMoKSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgd2hlbiBuX2NoYW5uZWxzIGV4Y2VlZHMgdGhlIHNpemUgb2YgbW9yc19zMWdoel9jaGFubmVscy4gVGhlIE1NODF4IHdpcmVsZXNzIGRyaXZlciBzdXBwb3J0cyBVU0IgaW50ZXJmYWNlcyAoTU04MVhfVVNCKSB3aGljaCBjYW4gYmUgcHJvYmVkIGFuZCBmdXp6ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZW11bGF0aW9uL2dhZGdldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiN2QxNTdjMDhlN2FiYzkyYWUwMThkNmU2NGFmMjlhNTIzOGIwODNmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAwNzoyMzo0NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jCmluZGV4IDA4Y2ExMTZhNjhiNDcuLmU4ZWYwZDllZWJkNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYwpAQCAtMjg4LDYgJiM0MzsyODgsMTEgQEAgc3RhdGljIHZvaWQgbW04MXhfbWFjX2NoZWNrX2Z3X2Rpc2FibGVkX2NoYW5zKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogCQljaC0mZ3Q7ZmxhZ3MgJmFtcDs9IH5JRUVFODAyMTFfQ0hBTl9TMUdfTk9fUFJJTUFSWTsKIAl9CiAKJiM0MzsJaWYgKGxlMzJfdG9fY3B1KHJlc3AtJmd0O25fY2hhbm5lbHMpICZndDsgQVJSQVlfU0laRShtb3JzX3MxZ2h6X2NoYW5uZWxzKSkgewomIzQzOwkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiAJZm9yIChpID0gMDsgaSAmbHQ7IGxlMzJfdG9fY3B1KHJlc3AtJmd0O25fY2hhbm5lbHMpOyBpJiM0MzsmIzQzOykgewogCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoOwogCQlzdHJ1Y3QgaG9zdF9jbWRfZGlzYWJsZWRfY2hhbm5lbF9lbnRyeSAqZW50cnkgPQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTc2CgkJCQkJCQlvdXRwdXQ6IDU1CgkJCQkJCQl0aG91Z2h0czogMTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgV2lyZWxlc3MgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gYXNrZWQgdG8gbG9vayBhdCBhIHBhdGNoIHdpdGhpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBiZWZvcmUgZXZlbiAqbG9va2luZyogYXQgdGhlIHNwZWNpZmljcyBvZiB0aGUgcGF0Y2ggaXRzZWxmLCBJIG5lZWQgdG8gZ2V0IGEgaGlnaC1sZXZlbCB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgZHJpdmVyLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBzeXN0ZW1hdGljIGFwcHJvYWNoLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGBtbTgxeGAgaXMuIElzIGl0IGEgUENJZSBkZXZpY2U/IFVTQj8gU29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEFuZCBob3cgaXMgdGhpcyBkcml2ZXIgcmVnaXN0ZXJlZCB3aXRoIHRoZSBrZXJuZWw/IFdoYXQgYnVzIGluZnJhc3RydWN0dXJlIGlzIGl0IGV4cGVjdGluZyB0byBpbnRlcmFjdCB3aXRoPyBEb2VzIGl0IHJlbHkgb24gc29tZSBzcGVjaWZpYyBoYXJkd2FyZSBjb25maWd1cmF0aW9uLCBvciBpcyBpdCBtb3JlIG9mIGEgdmlydHVhbCBidXMgdHlwZSBzZXR1cD8KCkkmIzM5O2xsIHN0YXJ0IGJ5IGRpdmluZyBpbnRvIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9gIGRpcmVjdG9yeS4gSSYjMzk7bGwgdXNlIGBncmVwYCBvciBkaXJlY3RvcnkgaW5kZXhpbmcsIGFuZCByZWFkaW5nIHRoZSBjb2RlIGRpcmVjdGx5LCBJJiMzOTttIGdvaW5nIHRvIHBvcmUgb3ZlciB0aGUgYEtjb25maWdgIGZpbGUgYW5kIHRoZSBvdGhlciBzb3VyY2UgZmlsZXMgaW4gdGhhdCBkaXJlY3RvcnkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBhcmNoaXRlY3R1cmFsIGNvbnRleHQgb2YgdGhlIGRyaXZlciwgdGhlIGRldmljZSB0eXBlIGl0IHN1cHBvcnRzIGFuZCBhbnkgcmVsYXRlZCBkZXBlbmRlbmNpZXMuIFdpdGggdGhpcyBpbml0aWFsIGZyYW1ld29yayBpbiBwbGFjZSwgSSBjYW4gZXZhbHVhdGUgdGhlIHBhdGNoIG11Y2ggbW9yZSBlZmZlY3RpdmVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGVzJiMzNDs6IG51bGwsCiAgJiMzNDtTdWJkaXJzJiMzNDs6IFsKICAgICYjMzQ7bW04MXgmIzM0OwogIF0KfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vcnNlbWljcm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnPTI5PXNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9taWNyb2NoaXAvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZzozMDpzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnLTMxLXNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvS2NvbmZpZ1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL01ha2VmaWxlPTE0PW9iai0kKENPTkZJR19XTEFOX1ZFTkRPUl9NSUNST0NISVApICYjNDM7PSBtaWNyb2NoaXAvXG5kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZToxNTpvYmotJChDT05GSUdfV0xBTl9WRU5ET1JfTU9SU0VNSUNSTykgJiM0Mzs9IG1vcnNlbWljcm8vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZS0xNi1vYmotJChDT05GSUdfV0xBTl9WRU5ET1JfTlhQKSAmIzQzOz0gbnhwL1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vS2NvbmZpZz0xMz1pZiBXTEFOX1ZFTkRPUl9NT1JTRU1JQ1JPXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL0tjb25maWc6MTQ6c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9LY29uZmlnLTE1LWVuZGlmICMgV0xBTl9WRU5ET1JfTU9SU0VNSUNST1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuaC0xNS0jZGVmaW5lIEJDRl9EQVRBQkFTRV9TSVpFICgxMDI0KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5oOjE2OiNkZWZpbmUgTU04MVhfRldfRElSIFwmIzM0O21vcnNlbWljcm8vbW04MXhcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuaC0xNy0jZGVmaW5lIE1NODFYX0ZXX0VYVCBcJiMzNDsuYmluXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgwMQoJCQkJCQkJb3V0cHV0OiA3NQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gdGhlIG1tODF4IFdpcmVsZXNzIERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBtbTgxeCB3aXJlbGVzcyBkcml2ZXIuIEZpcnN0LCBsZXQmIzM5O3MgaGVhZCBzdHJhaWdodCB0byB0aGUgc291cmNlIOKAkyB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBpdHNlbGYuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgbmF2aWdhdGluZyB0byBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9gLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRoZSBtZWF0IG9mIHRoZSBkcml2ZXIgY29kZSwgaGVhZGVyIGZpbGVzLCBhbmQgaG9wZWZ1bGx5LCBzb21lIGtleSBkb2N1bWVudGF0aW9uIG9yIGludGVybmFsIHByb2plY3Qgc3BlY2lmaWNzIHRvIHJlc2lkZS4gS25vd2luZyB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBpcyBoYWxmIHRoZSBiYXR0bGU7IGl0IHRlbGxzIG1lIHRoZSBhc3N1bWVkIGRlc2lnbiBhbmQgb3JnYW5pemF0aW9uIG9mIHRoaXMgZHJpdmVyLgoKTm93LCBhcyBhbiBleHBlcnQsIEkga25vdyB0aGF0IGNvbmZpZ3VyYXRpb24gaXMgY3JpdGljYWwgZm9yIGhvdyBhIGRyaXZlciBpbnRlZ3JhdGVzIHdpdGggdGhlIGJyb2FkZXIga2VybmVsIGJ1aWxkLiBTbywgSSYjMzk7bGwgaW1tZWRpYXRlbHkgc2hpZnQgbXkgZm9jdXMgdG8gdGhlIGBLY29uZmlnYCBmaWxlIHdpdGhpbiB0aGF0IGRpcmVjdG9yeS4gVGhpcyBmaWxlIGlzIHRoZSBsaWZlYmxvb2Qgb2YgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gaW4gdGhpcyBjb250ZXh0LCBkZWZpbmluZyBhbGwgdGhlIGNvbmZpZ3VyYWJsZSBvcHRpb25zIGZvciB0aGlzIHNwZWNpZmljIGRyaXZlci4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6CgoqICAgKipEZXBlbmRlbmNpZXM6KiogV2hhdCBvdGhlciBrZXJuZWwgY29tcG9uZW50cyBvciBkcml2ZXJzIGRvZXMgdGhpcyBkZXBlbmQgb24/IERvZXMgaXQgbGV2ZXJhZ2UgZXhpc3Rpbmcgd2lyZWxlc3MgaW5mcmFzdHJ1Y3R1cmUgb3IgaGF2ZSBhIGN1c3RvbSBzdGFjaz8KKiAgICoqRmVhdHVyZXM6KiogV2hhdCBmdW5jdGlvbmFsaXR5IGlzIGV4cG9zZWQg4oCTIDgwMi4xMSBzdGFuZGFyZHMgc3VwcG9ydGVkLCBzZWN1cml0eSBvcHRpb25zLCBwb3dlciBtYW5hZ2VtZW50IHNldHRpbmdzPyBUaGVzZSB3aWxsIGluZGljYXRlIHRoZSBjYXBhYmlsaXRpZXMgYW5kIHNjb3BlIG9mIHRoaXMgZHJpdmVyLgoqICAgKipCdWlsZCBPcHRpb25zOioqIEhvdyBpcyB0aGUgZHJpdmVyIGVuYWJsZWQ/IElzIGl0IHN0YXRpY2FsbHkgY29tcGlsZWQsIGJ1aWx0IGFzIGEgbW9kdWxlLCBvciBjb25kaXRpb25hbGx5IGluY2x1ZGVkIGJhc2VkIG9uIGhhcmR3YXJlIGRldGVjdGlvbj8gVGhpcyBnaXZlcyBjbHVlcyBhYm91dCBob3cgdGhlIHRhcmdldCBwbGF0Zm9ybXMgd291bGQgdXNlIGl0LgoqICAgKipEZWZhdWx0czoqKiBBcmUgdGhlcmUgc2Vuc2libGUgZGVmYXVsdHMgdG8gYmVnaW4gd2l0aCwgb3Igd2lsbCBJIG5lZWQgdG8gZGVmaW5lIHRoZSBzZXR0aW5ncyBiYXNlZCBvbiB0aGUgdGFyZ2V0IHBsYXRmb3JtPwoKSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgY29uZGl0aW9uYWwgbG9naWMgd2l0aGluIHRoZSBgS2NvbmZpZ2Ag4oCTIGxpa2UgYGlmLi4uZWxzZWAgc3RhdGVtZW50cyDigJMgYXMgdGhleSBsaWtlbHkgZGVmaW5lIGhvdyB0aGUgZHJpdmVyIGJlaGF2ZXMgb24gZGlmZmVyZW50IGhhcmR3YXJlIG9yIHBsYXRmb3Jtcy4gVGhlIGFpbSBvZiB0aGlzIGZpcnN0IHJldmlldyB3aWxsIGJlIHRvIGZvcm0gYSBmdWxsIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRyaXZlciBhbmQgaXRzIHBsYWNlIHdpdGhpbiB0aGUga2VybmVsLiBBcm1lZCB3aXRoIHRoYXQsIEkgY2FuIG1vdmUgb24gdG8gb3RoZXIgdGhpbmdzIHRvIGFuYWx5emUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5jb2Rlc2VhcmNoLWRpci1pbmRleDwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RGlyJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlcyYjMzQ7OiBbCiAgICAmIzM0O2J1cy5oJiMzNDssCiAgICAmIzM0O2NvbW1hbmQuYyYjMzQ7LAogICAgJiMzNDtjb21tYW5kLmgmIzM0OywKICAgICYjMzQ7Y29tbWFuZF9kZWZzLmgmIzM0OywKICAgICYjMzQ7Y29yZS5jJiMzNDssCiAgICAmIzM0O2NvcmUuaCYjMzQ7LAogICAgJiMzNDtmdy5jJiMzNDssCiAgICAmIzM0O2Z3LmgmIzM0OywKICAgICYjMzQ7aGlmLmgmIzM0OywKICAgICYjMzQ7aHcuYyYjMzQ7LAogICAgJiMzNDtody5oJiMzNDssCiAgICAmIzM0O21hYy5jJiMzNDssCiAgICAmIzM0O21hYy5oJiMzNDssCiAgICAmIzM0O21tcmMuYyYjMzQ7LAogICAgJiMzNDttbXJjLmgmIzM0OywKICAgICYjMzQ7cHMuYyYjMzQ7LAogICAgJiMzNDtwcy5oJiMzNDssCiAgICAmIzM0O3JhdGVfY29kZS5oJiMzNDssCiAgICAmIzM0O3JjLmMmIzM0OywKICAgICYjMzQ7cmMuaCYjMzQ7LAogICAgJiMzNDtzZGlvLmMmIzM0OywKICAgICYjMzQ7c2ticS5jJiMzNDssCiAgICAmIzM0O3NrYnEuaCYjMzQ7LAogICAgJiMzNDt1c2IuYyYjMzQ7LAogICAgJiMzNDt5YXBzLmMmIzM0OywKICAgICYjMzQ7eWFwcy5oJiMzNDssCiAgICAmIzM0O3lhcHNfaHcuYyYjMzQ7LAogICAgJiMzNDt5YXBzX2h3LmgmIzM0OwogIF0sCiAgJiMzNDtTdWJkaXJzJiMzNDs6IG51bGwKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdFxuICAgMzpcdGNvbmZpZyBNTTgxWFxuICAgNDpcdFx0dHJpc3RhdGUgXCYjMzQ7TW9yc2UgTWljcm8gTU04MXggd2lyZWxlc3MgZGV2aWNlc1wmIzM0OyBpZiBDT01QSUxFX1RFU1RcbiAgIDU6XHRcdGRlcGVuZHMgb24gTUFDODAyMTFcbiAgIDY6XHRcdHNlbGVjdCBGV19MT0FERVJcbiAgIDc6XHRcdHNlbGVjdCBDUkM3XG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3Igd2lyZWxlc3MgZGV2aWNlcyBiYXNlZFxuICAxMDpcdFx0ICBvbiBNb3JzZSBNaWNybyBNTTgxeHggY2hpcHNldHMuXG4gIDExOlx0XG4gIDEyOlx0Y29uZmlnIE1NODFYX1VTQlxuICAxMzpcdFx0dHJpc3RhdGUgXCYjMzQ7TW9yc2UgTWljcm8gTU04MXggVVNCIHN1cHBvcnRcJiMzNDtcbiAgMTQ6XHRcdGRlcGVuZHMgb24gTUFDODAyMTEgXHUwMDI2XHUwMDI2IFVTQlxuICAxNTpcdFx0c2VsZWN0IE1NODFYXG4gIDE2Olx0XHRoZWxwXG4gIDE3Olx0XHQgIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3IgdGhlIFVTQiBpbnRlcmZhY2Ugb2ZcbiAgMTg6XHRcdCAgZGV2aWNlcyB1c2luZyB0aGUgTW9yc2UgTWljcm8gTU04MXggY2hpcHNldC5cbiAgMTk6XHRcbiAgMjA6XHRjb25maWcgTU04MVhfU0RJT1xuICAyMTpcdFx0dHJpc3RhdGUgXCYjMzQ7TW9yc2UgTWljcm8gTU04MXggU0RJTyBzdXBwb3J0XCYjMzQ7XG4gIDIyOlx0XHRkZXBlbmRzIG9uIE1BQzgwMjExIFx1MDAyNlx1MDAyNiBNTUNcbiAgMjM6XHRcdHNlbGVjdCBNTTgxWFxuICAyNDpcdFx0aGVscFxuICAyNTpcdFx0ICBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIHRoZSBTRElPIGludGVyZmFjZSBvZlxuICAyNjpcdFx0ICBkZXZpY2VzIHVzaW5nIHRoZSBNb3JzZSBNaWNybyBNTTgxeCBjaGlwc2V0LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4ODQKCQkJCQkJCW91dHB1dDogOTAKCQkJCQkJCXRob3VnaHRzOiA5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbml0aWFsIEFzc2Vzc21lbnQgb2YgVVNCIEdhZGdldCBTdXBwb3J0IGluIFN5emthbGxlciBmb3IgYSBTcGVjaWZpYyBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYE1NODFYX1VTQmAgY29uZmlndXJhdGlvbiBvcHRpb24sIGFuZCB0aGF0IGltbWVkaWF0ZWx5IGNhdGNoZXMgbXkgZXllLiBVU0Igc3VwcG9ydCEgVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgaGFuZGxlZCBieSBgdXNiLmNgLiBUaGUgZmFjdCB0aGF0IFN5emthbGxlciBjYW4gZW11bGF0ZSBVU0IgZGV2aWNlcyB2aWEgdGhlIFVTQiBnYWRnZXQgKHNwZWNpZmljYWxseSBSYXcgR2FkZ2V0IG9yIER1bW15IEhDRCkgbWVhbnMgdGhpcyBjb3VsZCBiZSBhIHJlYWxseSBmcnVpdGZ1bCBhcmVhIGZvciBmdXp6aW5nLiBJJiMzOTttIHRoaW5raW5nLCB0aGlzIG1pZ2h0IGdpdmUgbWUgYSBuZXcgcGVyc3BlY3RpdmUgb24gc29tZXRoaW5nIHRvIGludmVzdGlnYXRlLgoKTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIHdhbnQgdG8gZGl2ZSBpbnRvIHRoZSBzcGVjaWZpYyBkcml2ZXIgaW1wbGVtZW50YXRpb24g4oCTIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L3VzYi5jYCDigJMgYW5kIGZpZ3VyZSBvdXQgaG93IGBtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnNgIGlzIHJlYWNoZWQuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiBwb3RlbnRpYWwgYnVncyB3aWxsIGJlIGZvdW5kLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHBhdGhzIHRvIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24gd2lsbCB0ZWxsIG1lIHRoZSBhcmVhcyBJIHNob3VsZCBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb24uIFRoaXMgaXMgd2hlcmUgdGhlIGdvb2Qgc3R1ZmYgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC91c2IuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQvKlxuICAgMzpcdCAqIENvcHlyaWdodCAoYykgMjAxNy0yMDI2IE1vcnNlIE1pY3JvXG4gICA0Olx0ICovXG4gICA1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvamlmZmllcy5oXHUwMDNlXG4gICA2Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAgIDc6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC91c2IuaFx1MDAzZVxuICAgODpcdCNpbmNsdWRlIFwmIzM0O2hpZi5oXCYjMzQ7XG4gICA5Olx0I2luY2x1ZGUgXCYjMzQ7YnVzLmhcJiMzNDtcbiAgMTA6XHQjaW5jbHVkZSBcJiMzNDttYWMuaFwmIzM0O1xuICAxMTpcdCNpbmNsdWRlIFwmIzM0O2NvcmUuaFwmIzM0O1xuICAxMjpcdFxuICAxMzpcdC8qXG4gIDE0Olx0ICogVVJCIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLiBJZiBhbiBVUkIgZG9lcyBub3QgY29tcGxldGUgd2l0aGluIHRoaXNcbiAgMTU6XHQgKiB0aW1lLCBpdCB3aWxsIGJlIGtpbGxlZC4gVGhpcyB0aW1lb3V0IG5lZWRzIHRvIGFjY291bnQgZm9yIFVTQiBzdXNwZW5kYW5kXG4gIDE2Olx0ICogcmVzdW1lIG9jY3VycmluZyBiZWZvcmUgdGhlIFVSQiBjYW4gYmUgdHJhbnNmZXJyZWQsIGFuZCBpdCBhbHNvIG5lZWRzIHRvXG4gIDE3Olx0ICogYWNjb3VudCBmb3IgdHJhbnNmZXJyaW5nIFVTQl9NQVhfVFJBTlNGRVJfU0laRSBieXRlcyBvdmVyIGEgcG90ZW50aWFsbHlcbiAgMTg6XHQgKiBzbG93LCBjb25nZXN0ZWQgVVNCIEZ1bGwgU3BlZWQgbGluay5cbiAgMTk6XHQgKi9cbiAgMjA6XHQjZGVmaW5lIFVSQl9USU1FT1VUX01TIDI1MFxuICAyMTpcdFxuICAyMjpcdC8qIEhpZ2ggc3BlZWQgVVNCIDJeKDQtMSkgKiAxMjV1c2VjID0gMW1zZWMgKi9cbiAgMjM6XHQjZGVmaW5lIE1NODFYX1VTQl9JTlRFUlJVUFRfSU5URVJWQUwgNFxuICAyNDpcdFxuICAyNTpcdC8qIE1heCBieXRlcyBwZXIgVVNCIHJlYWQvd3JpdGUgKi9cbiAgMjY6XHQjZGVmaW5lIFVTQl9NQVhfVFJBTlNGRVJfU0laRSAoMTYgKiAxMDI0KVxuICAyNzpcdFxuICAyODpcdC8qIElOVCBFUCBidWZmZXIgc2l6ZSAqL1xuICAyOTpcdCNkZWZpbmUgTU04MVhfRVBfSU5UX0JVRkZFUl9TSVpFIDhcbiAgMzA6XHRcbiAgMzE6XHQvKiBNb3JzZSB2ZW5kb3IgSURzKi9cbiAgMzI6XHQjZGVmaW5lIE1NODFYX1ZFTkRPUl9JRCAweDMyNWJcbiAgMzM6XHQjZGVmaW5lIE1NODFYX01NODEwWF9QUk9EVUNUX0lEIDB4ODEwMFxuICAzNDpcdFxuICAzNTpcdC8qIFBvd2VyIG1hbmFnZW1lbnQgcnVudGltZSBhdXRvLXN1c3BlbmQgZGVsYXkgdmFsdWUgaW4gbWlsbGlzZWNvbmRzICovXG4gIDM2Olx0I2RlZmluZSBQTV9SVU5USU1FX0FVVE9TVVNQRU5EX0RFTEFZX01TIDEwMFxuICAzNzpcdFxuICAzODpcdGVudW0gbW04MXhfdXNiX2VuZHBvaW50cyB7XG4gIDM5Olx0XHRNTTgxWF9FUF9DTUQgPSAwLFxuICA0MDpcdFx0TU04MVhfRVBfSU5ULFxuICA0MTpcdFx0TU04MVhfRVBfTUVNX1JELFxuICA0MjpcdFx0TU04MVhfRVBfTUVNX1dSLFxuICA0MzpcdFx0TU04MVhfRVBfUkVHX1JELFxuICA0NDpcdFx0TU04MVhfRVBfUkVHX1dSLFxuICA0NTpcdFx0TU04MVhfRVBfRVBfTUFYLFxuICA0NjpcdH07XG4gIDQ3Olx0XG4gIDQ4Olx0c3RydWN0IG1tODF4X3VzYl9lbmRwb2ludCB7XG4gIDQ5Olx0XHR1bnNpZ25lZCBjaGFyICpidWZmZXI7XG4gIDUwOlx0XHRzdHJ1Y3QgdXJiICp1cmI7XG4gIDUxOlx0XHRfX3U4IGFkZHI7XG4gIDUyOlx0XHRpbnQgc2l6ZTtcbiAgNTM6XHR9O1xuICA1NDpcdFxuICA1NTpcdGVudW0gbW04MXhfdXNiX2ZsYWdzIHsgTU04MVhfVVNCX0ZMQUdfQVRUQUNIRUQsIE1NODFYX1VTQl9GTEFHX1NVU1BFTkRFRCB9O1xuICA1NjpcdFxuICA1NzpcdHN0cnVjdCBtbTgxeF91c2Ige1xuICA1ODpcdFx0c3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7XG4gIDU5Olx0XHRzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlO1xuICA2MDpcdFx0c3RydWN0IG1tODF4X3VzYl9lbmRwb2ludCBlbmRwb2ludHNbTU04MVhfRVBfRVBfTUFYXTtcbiAgNjE6XHRcdGludCBlcnJvcnM7XG4gIDYyOlx0XG4gIDYzOlx0XHQvKiBzZXJpYWxpc2UgVVNCIGRldmljZSBzdHJ1Y3QgKi9cbiAgNjQ6XHRcdHN0cnVjdCBtdXRleCBsb2NrO1xuICA2NTpcdFxuICA2NjpcdFx0Lyogc2VyaWFsaXNlIFVTQiBidXMgYWNjZXNzICovXG4gIDY3Olx0XHRzdHJ1Y3QgbXV0ZXggYnVzX2xvY2s7XG4gIDY4Olx0XG4gIDY5Olx0XHRib29sIG9uZ29pbmdfY21kO1xuICA3MDpcdFx0Ym9vbCBvbmdvaW5nX3J3O1xuICA3MTpcdFx0d2FpdF9xdWV1ZV9oZWFkX3QgcndfaW5fd2FpdDtcbiAgNzI6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gIDczOlx0fTtcbiAgNzQ6XHRcbiAgNzU6XHRlbnVtIG1tODF4X3VzYl9jb21tYW5kX2RpcmVjdGlvbiB7XG4gIDc2Olx0XHRNTTgxWF9VU0JfV1JJVEUgPSAweDAwLFxuICA3NzpcdFx0TU04MVhfVVNCX1JFQUQgPSAweDgwLFxuICA3ODpcdFx0TU04MVhfVVNCX1JFU0VUID0gMHgwMixcbiAgNzk6XHR9O1xuICA4MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI3NTpcdFx0XHRnb3RvIG91dDtcbiAyNzY6XHRcdH1cbiAyNzc6XHRcbiAyNzg6XHRcdHJldCA9IG1tODF4X2NtZF9nZXRfZGlzYWJsZWRfY2hhbm5lbHMobW9ycywgcmVzcCwgcmVzcF9sZW4pO1xuIDI3OTpcdFx0aWYgKHJldClcbiAyODA6XHRcdFx0Z290byBvdXQ7XG4gMjgxOlx0XG4gMjgyOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKG1vcnNfczFnaHpfY2hhbm5lbHMpOyBpJiM0MzsmIzQzOykge1xuIDI4MzpcdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoID0gXHUwMDI2bW9yc19zMWdoel9jaGFubmVsc1tpXTtcbiAyODQ6XHRcbiAyODU6XHRcdFx0aWYgKGNoLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRClcbiAyODY6XHRcdFx0XHRjb250aW51ZTtcbiAyODc6XHRcbiAyODg6XHRcdFx0Y2gtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+SUVFRTgwMjExX0NIQU5fUzFHX05PX1BSSU1BUlk7XG4gMjg5Olx0XHR9XG4gMjkwOlx0XG4gMjkxOlx0XHRpZiAobGUzMl90b19jcHUocmVzcC1cdTAwM2VuX2NoYW5uZWxzKSBcdTAwM2UgQVJSQVlfU0laRShtb3JzX3MxZ2h6X2NoYW5uZWxzKSkge1xuIDI5MjpcdFx0XHRyZXQgPSAtRUlOVkFMO1xuIDI5MzpcdFx0XHRnb3RvIG91dDtcbiAyOTQ6XHRcdH1cbiAyOTU6XHRcbiAyOTY6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxlMzJfdG9fY3B1KHJlc3AtXHUwMDNlbl9jaGFubmVscyk7IGkmIzQzOyYjNDM7KSB7XG4gMjk3Olx0XHRcdHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2g7XG4gMjk4Olx0XHRcdHN0cnVjdCBob3N0X2NtZF9kaXNhYmxlZF9jaGFubmVsX2VudHJ5ICplbnRyeSA9XG4gMjk5Olx0XHRcdFx0XHUwMDI2cmVzcC1cdTAwM2VjaGFubmVsc1tpXTtcbiAzMDA6XHRcbiAzMDE6XHRcdFx0aWYgKGVudHJ5LVx1MDAzZWJ3X21oeiAhPSAxKVxuIDMwMjpcdFx0XHRcdGNvbnRpbnVlO1xuIDMwMzpcdFxuIDMwNDpcdFx0XHRjaCA9IGllZWU4MDIxMV9nZXRfY2hhbm5lbF9raHooXG4gMzA1Olx0XHRcdFx0aHctXHUwMDNld2lwaHksXG4gMzA2Olx0XHRcdFx0S0haMTAwX1RPX0tIWihsZTE2X3RvX2NwdShlbnRyeS1cdTAwM2VmcmVxXzEwMGtoeikpKTtcbiAzMDc6XHRcdFx0aWYgKCFjaClcbiAzMDg6XHRcdFx0XHRjb250aW51ZTtcbiAzMDk6XHRcbiAzMTA6XHRcdFx0Y2gtXHUwMDNlZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fUzFHX05PX1BSSU1BUlk7XG4gMzExOlx0XHRcdGRldl9kYmcobW9ycy1cdTAwM2VkZXYsIFwmIzM0O3NldCBOT19QUklNQVJZIG9uICV1IEtIelwmIzM0OyxcbiAzMTI6XHRcdFx0XHRpZWVlODAyMTFfY2hhbm5lbF90b19raHooY2gpKTtcbiAzMTM6XHRcdH1cbiAzMTQ6XHRcbiAzMTU6XHRvdXQ6XG4gMzE2Olx0XHRpZiAocmV0KVxuIDMxNzpcdFx0XHRkZXZfZXJyKG1vcnMtXHUwMDNlZGV2LCBcJiMzNDtmYWlsZWQgdG8gc2V0IGRpc2FibGVkIHByaW1hcnkgY2hhbm5lbHNcJiMzNDspO1xuIDMxODpcdFxuIDMxOTpcdFx0a2ZyZWUocmVzcCk7XG4gMzIwOlx0fVxuIDMyMTpcdFxuIDMyMjpcdHN0YXRpYyBpbnQgbW04MXhfbWFjX29wc19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodylcbiAzMjM6XHR7XG4gMzI0Olx0XHRzdHJ1Y3QgbW04MXggKm1vcnMgPSBody1cdTAwM2Vwcml2O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjE3CgkJCQkJCQlvdXRwdXQ6IDQ5CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnNgIENhbGwgU2l0ZXMqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgYG1tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFuc2AuIFRvIHJlYWxseSBncm9rIHdoYXQmIzM5O3MgaGFwcGVuaW5nLCBJIG5lZWQgdG8ga25vdyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCBmcm9tLiBTdGFuZGFyZCBwcm9jZWR1cmU6IHRpbWUgdG8gYnJlYWsgb3V0IHRoZSBncmVwLiBMZXQmIzM5O3Mgc2VlIGFsbCB0aGUgcGxhY2VzIGluIHRoZSBjb2RlYmFzZSB0aGlzIGZ1bmN0aW9uIGdldHMgaW52b2tlZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGl0cyBjb250cm9sIGZsb3cgYW5kIGludGVuZGVkIHB1cnBvc2UuIEdvdHRhIGZpZ3VyZSBvdXQgaXRzIHJvbGUgaW4gdGhlIGdyZWF0ZXIgc2NoZW1lIG9mIHRoaW5ncy4gTm8gcG9pbnQgaW4gc3Bpbm5pbmcgbXkgd2hlZWxzIHVudGlsIEkgdW5kZXJzdGFuZCB0aGUgY2FsbGVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW04MXhfbWFjX2NoZWNrX2Z3X2Rpc2FibGVkX2NoYW5zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jPTIzOD1zdGF0aWMgYm9vbCBtbTgxeF90eF9oX3BzX2ZpbHRlcmVkX2Zvcl9zdGEoc3RydWN0IG1tODF4ICptb3JzLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjYxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYzoyNjI6c3RhdGljIHZvaWQgbW04MXhfbWFjX2NoZWNrX2Z3X2Rpc2FibGVkX2NoYW5zKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yNjMte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM9MjExMj1zdGF0aWMgaW50IG1tODF4X21hY19yZXN0YXJ0KHN0cnVjdCBtbTgxeCAqbW9ycylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxNjYtXHRjbGVhcl9iaXQoTU04MVhfU1RBVEVfUkVMT0FEX0ZXX0FGVEVSX1NUQVJULCBcdTAwMjZtb3JzLVx1MDAzZXN0YXRlX2ZsYWdzKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjE2NzpcdG1tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFucyhtb3JzLVx1MDAzZWh3KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjE2OC1cdGllZWU4MDIxMV9yZXN0YXJ0X2h3KG1vcnMtXHUwMDNlaHcpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODIzCgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGlnZ2luZyBEZWVwZXIgaW50byB0aGUgbW04MXggTUFDIERyaXZlcioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgc3Vycm91bmRpbmcgYG1tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFuc2AsIGBtbTgxeF9tYWNfcmVzdGFydGAsIGFuZCBgbW04MXhfbWFjX29wc19zdGFydGAuIFRoZXNlIGFyZSBrZXkgZnVuY3Rpb25zLCBhbmQgSSBuZWVkIHRvIHNlZSAqd2hlcmUqIGFuZCAqaG93KiB0aGV5JiMzOTtyZSB1c2VkLiBNeSBnb2FsIGlzIHRvIG1hcCBvdXQgdGhlIGludGVyYWN0aW9ucyBhbmQgcGlucG9pbnQgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24gb3IgZGVidWdnaW5nLCBzbyBJIGFtIGxvb2tpbmcgdG8gdHJhY2UgaG93IGFuZCB3aGVyZSB0aGV5IGFyZSBjYWxsZWQuCgpTcGVjaWZpY2FsbHksIEkmIzM5O20gaGVhZGluZyBpbnRvIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jYC4gSSYjMzk7bSBzdGFydGluZyBteSBkZWVwIGRpdmUgYnkgZm9jdXNpbmcgb24gbGluZXMgMjUwIHRocm91Z2ggMzMwLiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIGNodW5rIHRvIGJlZ2luIHdpdGg7IHRoaXMgYXJlYSBzaG91bGQgZ2l2ZSBtZSBjb250ZXh0IG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBhbmQgaG9wZWZ1bGx5LCBJIHdpbGwgYmUgYWJsZSB0byBzZWUgZnVuY3Rpb24gY2FsbHMgdGhhdCB3aWxsIGxlYWQgbWUgZG93biB0aGUgcmlnaHQgcGF0aC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI1MDpcdFx0aWYgKCFtb3JzX3N0YS1cdTAwM2V0eF9wc19maWx0ZXJfZW4pXG4gMjUxOlx0XHRcdHJldHVybiBmYWxzZTtcbiAyNTI6XHRcbiAyNTM6XHRcdGRldl9kYmcobW9ycy1cdTAwM2VkZXYsIFwmIzM0O0ZyYW1lIGZvciBzdGFbJXBNXSBQUyBmaWx0ZXJlZFwmIzM0OywgbW9yc19zdGEtXHUwMDNlYWRkcik7XG4gMjU0Olx0XG4gMjU1Olx0XHRpbmZvLVx1MDAzZWZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX1RYX0ZJTFRFUkVEO1xuIDI1NjpcdFx0aW5mby1cdTAwM2VmbGFncyBcdTAwMjY9IH5JRUVFODAyMTFfVFhfQ1RMX0FNUERVO1xuIDI1NzpcdFxuIDI1ODpcdFx0aWVlZTgwMjExX3R4X3N0YXR1c19za2IobW9ycy1cdTAwM2Vodywgc2tiKTtcbiAyNTk6XHRcdHJldHVybiB0cnVlO1xuIDI2MDpcdH1cbiAyNjE6XHRcbiAyNjI6XHRzdGF0aWMgdm9pZCBtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpXG4gMjYzOlx0e1xuIDI2NDpcdFx0aW50IHJldCA9IDA7XG4gMjY1Olx0XHR1MzIgaTtcbiAyNjY6XHRcdHN0cnVjdCBtbTgxeCAqbW9ycyA9IGh3LVx1MDAzZXByaXY7XG4gMjY3Olx0XHRzdHJ1Y3QgaG9zdF9jbWRfcmVzcF9nZXRfZGlzYWJsZWRfY2hhbm5lbHMgKnJlc3A7XG4gMjY4Olx0XHR1MzIgcmVzcF9sZW4gPSBzaXplb2Yoc3RydWN0IGhvc3RfY21kX2Rpc2FibGVkX2NoYW5uZWxfZW50cnkpICpcbiAyNjk6XHRcdFx0XHQgICAgICAgQVJSQVlfU0laRShtb3JzX3MxZ2h6X2NoYW5uZWxzKSAmIzQzO1xuIDI3MDpcdFx0XHQgICAgICAgc2l6ZW9mKCpyZXNwKTtcbiAyNzE6XHRcbiAyNzI6XHRcdHJlc3AgPSBremFsbG9jKHJlc3BfbGVuLCBHRlBfS0VSTkVMKTtcbiAyNzM6XHRcdGlmICghcmVzcCkge1xuIDI3NDpcdFx0XHRyZXQgPSAtRU5PTUVNO1xuIDI3NTpcdFx0XHRnb3RvIG91dDtcbiAyNzY6XHRcdH1cbiAyNzc6XHRcbiAyNzg6XHRcdHJldCA9IG1tODF4X2NtZF9nZXRfZGlzYWJsZWRfY2hhbm5lbHMobW9ycywgcmVzcCwgcmVzcF9sZW4pO1xuIDI3OTpcdFx0aWYgKHJldClcbiAyODA6XHRcdFx0Z290byBvdXQ7XG4gMjgxOlx0XG4gMjgyOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKG1vcnNfczFnaHpfY2hhbm5lbHMpOyBpJiM0MzsmIzQzOykge1xuIDI4MzpcdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoID0gXHUwMDI2bW9yc19zMWdoel9jaGFubmVsc1tpXTtcbiAyODQ6XHRcbiAyODU6XHRcdFx0aWYgKGNoLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRClcbiAyODY6XHRcdFx0XHRjb250aW51ZTtcbiAyODc6XHRcbiAyODg6XHRcdFx0Y2gtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+SUVFRTgwMjExX0NIQU5fUzFHX05PX1BSSU1BUlk7XG4gMjg5Olx0XHR9XG4gMjkwOlx0XG4gMjkxOlx0XHRpZiAobGUzMl90b19jcHUocmVzcC1cdTAwM2VuX2NoYW5uZWxzKSBcdTAwM2UgQVJSQVlfU0laRShtb3JzX3MxZ2h6X2NoYW5uZWxzKSkge1xuIDI5MjpcdFx0XHRyZXQgPSAtRUlOVkFMO1xuIDI5MzpcdFx0XHRnb3RvIG91dDtcbiAyOTQ6XHRcdH1cbiAyOTU6XHRcbiAyOTY6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxlMzJfdG9fY3B1KHJlc3AtXHUwMDNlbl9jaGFubmVscyk7IGkmIzQzOyYjNDM7KSB7XG4gMjk3Olx0XHRcdHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2g7XG4gMjk4Olx0XHRcdHN0cnVjdCBob3N0X2NtZF9kaXNhYmxlZF9jaGFubmVsX2VudHJ5ICplbnRyeSA9XG4gMjk5Olx0XHRcdFx0XHUwMDI2cmVzcC1cdTAwM2VjaGFubmVsc1tpXTtcbiAzMDA6XHRcbiAzMDE6XHRcdFx0aWYgKGVudHJ5LVx1MDAzZWJ3X21oeiAhPSAxKVxuIDMwMjpcdFx0XHRcdGNvbnRpbnVlO1xuIDMwMzpcdFxuIDMwNDpcdFx0XHRjaCA9IGllZWU4MDIxMV9nZXRfY2hhbm5lbF9raHooXG4gMzA1Olx0XHRcdFx0aHctXHUwMDNld2lwaHksXG4gMzA2Olx0XHRcdFx0S0haMTAwX1RPX0tIWihsZTE2X3RvX2NwdShlbnRyeS1cdTAwM2VmcmVxXzEwMGtoeikpKTtcbiAzMDc6XHRcdFx0aWYgKCFjaClcbiAzMDg6XHRcdFx0XHRjb250aW51ZTtcbiAzMDk6XHRcbiAzMTA6XHRcdFx0Y2gtXHUwMDNlZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fUzFHX05PX1BSSU1BUlk7XG4gMzExOlx0XHRcdGRldl9kYmcobW9ycy1cdTAwM2VkZXYsIFwmIzM0O3NldCBOT19QUklNQVJZIG9uICV1IEtIelwmIzM0OyxcbiAzMTI6XHRcdFx0XHRpZWVlODAyMTFfY2hhbm5lbF90b19raHooY2gpKTtcbiAzMTM6XHRcdH1cbiAzMTQ6XHRcbiAzMTU6XHRvdXQ6XG4gMzE2Olx0XHRpZiAocmV0KVxuIDMxNzpcdFx0XHRkZXZfZXJyKG1vcnMtXHUwMDNlZGV2LCBcJiMzNDtmYWlsZWQgdG8gc2V0IGRpc2FibGVkIHByaW1hcnkgY2hhbm5lbHNcJiMzNDspO1xuIDMxODpcdFxuIDMxOTpcdFx0a2ZyZWUocmVzcCk7XG4gMzIwOlx0fVxuIDMyMTpcdFxuIDMyMjpcdHN0YXRpYyBpbnQgbW04MXhfbWFjX29wc19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodylcbiAzMjM6XHR7XG4gMzI0Olx0XHRzdHJ1Y3QgbW04MXggKm1vcnMgPSBody1cdTAwM2Vwcml2O1xuIDMyNTpcdFxuIDMyNjpcdFx0bW9ycy1cdTAwM2VzdGFydGVkID0gdHJ1ZTtcbiAzMjc6XHRcdHJldHVybiAwO1xuIDMyODpcdH1cbiAzMjk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ0NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIEZ1bmN0aW9uIENhbGwgQ29udGV4dCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0IG9mIGBtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnNgLiBUbyBkbyB0aGlzLCBJJiMzOTttIGdvaW5nIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIGNvZGUuIEdpdmVuIHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHNwZWNpZmljIGRyaXZlciwgSSYjMzk7bGwgZm9jdXMgbXkgc2VhcmNoIG9uIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9gIGRpcmVjdG9yeSwgd2hpY2ggaXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQuIEkmIzM5O2xsIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBzY2FuIHRoZSBmaWxlcyBpbiB0aGF0IGRpcmVjdG9yeSBmb3IgaW5zdGFuY2VzIG9mIHRoZSBmdW5jdGlvbiBuYW1lIGl0c2VsZiwgYG1tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFuc2AsIGFuZCBhbHNvIGZvciBhbnkgcmVmZXJlbmNlcyB0byBgZGlzYWJsZWRfY2hhbnNgLCBqdXN0IGluIGNhc2UgaXQmIzM5O3MgdXNlZCBhcyBhIHZhcmlhYmxlIG9yIHN0cnVjdHVyZSBtZW1iZXIgcmVsYXRlZCB0byB0aGUgc2FtZSBsb2dpYy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgaG93IHRoZSBmdW5jdGlvbiBpbnRlZ3JhdGVzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIG1tODF4IGRyaXZlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGlzYWJsZWRfY2hhbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM9NTQxPWludCBtbTgxeF9jbWRfc2V0X2ZyYWdfdGhyZXNob2xkKHN0cnVjdCBtbTgxeCAqbW9ycywgdTMyIGZyYWdfdGhyZXNob2xkKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTU1Mi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjU1MzppbnQgbW04MXhfY21kX2dldF9kaXNhYmxlZF9jaGFubmVscyhcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjU1NDpcdHN0cnVjdCBtbTgxeCAqbW9ycywgc3RydWN0IGhvc3RfY21kX3Jlc3BfZ2V0X2Rpc2FibGVkX2NoYW5uZWxzICpyZXNwLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNTU1LVx0dWludCByZXNwX2xlbilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaD04MD1pbnQgbW04MXhfY21kX3NldF9mcmFnX3RocmVzaG9sZChzdHJ1Y3QgbW04MXggKm1vcnMsIHUzMiBmcmFnX3RocmVzaG9sZCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaDo4MTppbnQgbW04MXhfY21kX2dldF9kaXNhYmxlZF9jaGFubmVscyhcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oOjgyOlx0c3RydWN0IG1tODF4ICptb3JzLCBzdHJ1Y3QgaG9zdF9jbWRfcmVzcF9nZXRfZGlzYWJsZWRfY2hhbm5lbHMgKnJlc3AsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaC04My1cdHVpbnQgcmVzcF9sZW4pO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZF9kZWZzLmg9ODcwPXN0cnVjdCBob3N0X2NtZF9yZXFfbGlfc2xlZXAge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZF9kZWZzLmgtODc0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kX2RlZnMuaDo4NzU6c3RydWN0IGhvc3RfY21kX2Rpc2FibGVkX2NoYW5uZWxfZW50cnkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kX2RlZnMuaC04NzYtXHRfX2xlMTYgZnJlcV8xMDBraHo7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kX2RlZnMuaC04NzktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmRfZGVmcy5oOjg4MDpzdHJ1Y3QgaG9zdF9jbWRfcmVzcF9nZXRfZGlzYWJsZWRfY2hhbm5lbHMge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kX2RlZnMuaC04ODEtXHRzdHJ1Y3QgaG9zdF9jbWRfaGVhZGVyIGhkcjtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmRfZGVmcy5oLTg4My1cdF9fbGUzMiBuX2NoYW5uZWxzO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kX2RlZnMuaDo4ODQ6XHRzdHJ1Y3QgaG9zdF9jbWRfZGlzYWJsZWRfY2hhbm5lbF9lbnRyeSBjaGFubmVsc1tdO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kX2RlZnMuaC04ODUtfSBfX3BhY2tlZDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jPTIzOD1zdGF0aWMgYm9vbCBtbTgxeF90eF9oX3BzX2ZpbHRlcmVkX2Zvcl9zdGEoc3RydWN0IG1tODF4ICptb3JzLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjYxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYzoyNjI6c3RhdGljIHZvaWQgbW04MXhfbWFjX2NoZWNrX2Z3X2Rpc2FibGVkX2NoYW5zKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yNjMte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjY2LVx0c3RydWN0IG1tODF4ICptb3JzID0gaHctXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjY3Olx0c3RydWN0IGhvc3RfY21kX3Jlc3BfZ2V0X2Rpc2FibGVkX2NoYW5uZWxzICpyZXNwO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYzoyNjg6XHR1MzIgcmVzcF9sZW4gPSBzaXplb2Yoc3RydWN0IGhvc3RfY21kX2Rpc2FibGVkX2NoYW5uZWxfZW50cnkpICpcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjY5LVx0XHRcdCAgICAgICBBUlJBWV9TSVpFKG1vcnNfczFnaHpfY2hhbm5lbHMpICYjNDM7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yNzctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jOjI3ODpcdHJldCA9IG1tODF4X2NtZF9nZXRfZGlzYWJsZWRfY2hhbm5lbHMobW9ycywgcmVzcCwgcmVzcF9sZW4pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yNzktXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjk3LVx0XHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYzoyOTg6XHRcdHN0cnVjdCBob3N0X2NtZF9kaXNhYmxlZF9jaGFubmVsX2VudHJ5ICplbnRyeSA9XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTI5OS1cdFx0XHRcdTAwMjZyZXNwLVx1MDAzZWNoYW5uZWxzW2ldO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM9MjExMj1zdGF0aWMgaW50IG1tODF4X21hY19yZXN0YXJ0KHN0cnVjdCBtbTgxeCAqbW9ycylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxNjYtXHRjbGVhcl9iaXQoTU04MVhfU1RBVEVfUkVMT0FEX0ZXX0FGVEVSX1NUQVJULCBcdTAwMjZtb3JzLVx1MDAzZXN0YXRlX2ZsYWdzKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjE2NzpcdG1tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFucyhtb3JzLVx1MDAzZWh3KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjE2OC1cdGllZWU4MDIxMV9yZXN0YXJ0X2h3KG1vcnMtXHUwMDNlaHcpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTIxNQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmUsIHVzaW5nIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyBNb3JzZSBNaWNybyBEcml2ZXIgRmlybXdhcmUgQ29udHJvbCBGbG93KioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIE1vcnNlIE1pY3JvIGRyaXZlci4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgc3Vycm91bmRpbmcgdHdvIGtleSBmdW5jdGlvbnM6IGBtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnNgIGFuZCBgbW04MXhfbWFjX3Jlc3RhcnRgLiBUaGVzZSBhcmUgY3J1Y2lhbCBmb3IgbWFuYWdpbmcgY2hhbm5lbCBkaXNhYmxpbmcgYW5kIHBvdGVudGlhbGx5IHJlc3RhcnRpbmcgdGhlIE1BQywgc28ga25vd2luZyAqd2hlcmUqIGFuZCAqaG93KiB0aGV5JiMzOTtyZSBjYWxsZWQgaXMgZXNzZW50aWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGRyaXZlciBiZWhhdmlvciBhbmQgZGVidWdnaW5nIGFueSBpc3N1ZXMgcmVsYXRlZCB0byBjaGFubmVsIG1hbmFnZW1lbnQgb3IgTUFDIGluaXRpYWxpemF0aW9uL3JlY292ZXJ5LiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGludGVncmF0ZWQgd2l0aGluIHRoZSBkcml2ZXImIzM5O3MgYXJjaGl0ZWN0dXJlLiBMb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9ucyYjMzk7IGNhbGwgc2l0ZXMgd2lsbCBnaXZlIG1lIGluc2lnaHQgaW50byB3aGVuIGZpcm13YXJlIGNoZWNrcyBhcmUgcGVyZm9ybWVkIHRvIGVuc3VyZSBvcGVyYXRpb24sIGFuZCB3aGVuIHRoZSByZXN0YXJ0IG9wZXJhdGlvbnMgbWF5IG9jY3VyLCB3aGljaCBpcyB0aGUgc29ydCBvZiB0aGluZyB0aGF0IGNhbiBwcm92aWRlIGdvb2QgY29udGV4dCBmb3IgaW52ZXN0aWdhdGluZyBzcGVjaWZpYyBoYXJkd2FyZSBpc3N1ZXMsIG9yIG9wdGltaXphdGlvbnMuIExldCYjMzk7cyBzdGFydCB0aGUgaHVudCBmb3IgY2FsbHMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21tODF4X21hY19yZXN0YXJ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jPTIwNzY9c3RhdGljIHUzMiBtbTgxeF9nZXRfZXhwZWN0ZWRfdGhyb3VnaHB1dChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIwOTUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jOjIwOTY6c3RhdGljIHZvaWQgbW04MXhfbWFjX3Jlc3RhcnRfY2xlYW51cF9pdGVyKHZvaWQgKmRhdGEsIHU4ICptYWMsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIwOTctXHRcdFx0XHRcdCAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTAyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYzoyMTAzOnN0YXRpYyB2b2lkIG1tODF4X21hY19yZXN0YXJ0X2NsZWFudXAoc3RydWN0IG1tODF4ICptb3JzKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTA0LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxMDYtXHRcdFx0XHRcdCAgICBJRUVFODAyMTFfSUZBQ0VfSVRFUl9OT1JNQUwsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jOjIxMDc6XHRcdFx0XHRcdCAgICBtbTgxeF9tYWNfcmVzdGFydF9jbGVhbnVwX2l0ZXIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxMDgtXHRcdFx0XHRcdCAgICBOVUxMKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxMTEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jOjIxMTI6c3RhdGljIGludCBtbTgxeF9tYWNfcmVzdGFydChzdHJ1Y3QgbW04MXggKm1vcnMpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxMTMte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjE0Mi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjE0MzpcdG1tODF4X21hY19yZXN0YXJ0X2NsZWFudXAobW9ycyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxNDQtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYz0yMTc1PXN0YXRpYyBpbnQgbW04MXhfbWFjX29wc19hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjE4NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjE4NjpcdFx0cmV0ID0gbW04MXhfbWFjX3Jlc3RhcnQobW9ycyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxODctXHRcdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jPTIyNjY9c3RhdGljIHZvaWQgbW04MXhfcmVnX25vdGlmaWVyKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMjc3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYzoyMjc4Olx0cmV0ID0gbW04MXhfbWFjX3Jlc3RhcnQobW9ycyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIyNzktXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM5NQoJCQkJCQkJb3V0cHV0OiA1NgoJCQkJCQkJdGhvdWdodHM6IDkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgbW04MXhgIE1BQyBEcml2ZXImIzM5O3MgUmVzdGFydCBNZWNoYW5pc20qKgoKQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgbW04MXhfbWFjX3Jlc3RhcnRgIGZ1bmN0aW9uLiBUaGUgY29kZSBzZWVtcyB0byBpbmRpY2F0ZSBpdCYjMzk7cyBpbnZva2VkIGluIHR3byBkaXN0aW5jdCBjb250ZXh0czogZmlyc3QsIHdpdGhpbiBgbW04MXhfbWFjX29wc19hZGRfaW50ZXJmYWNlYC4gUmlnaHQsIHRoYXQmIzM5O3MgYSBjYWxsYmFjayB3aXRoaW4gdGhlIG1hYzgwMjExIGZyYW1ld29yaywgc28gdGhpcyByZXN0YXJ0IGxpa2VseSBoYXBwZW5zIHdoZW4gYSBuZXcgbmV0d29yayBpbnRlcmZhY2UgaXMgYWRkZWQuIEludGVyZXN0aW5nLiBUaGUgc2Vjb25kIGNhbGwgY29tZXMgZnJvbSBgbW04MXhfcmVnX25vdGlmaWVyYCwgd2hpY2ggaGFuZGxlcyByZWd1bGF0b3J5IGRvbWFpbiBjaGFuZ2VzLiBTbywgcG90ZW50aWFsbHkgYSByZXN0YXJ0IGlzIHRyaWdnZXJlZCB3aGVuIHJlZ2lvbiBzZXR0aW5ncyBhcmUgbW9kaWZpZWQsIHdoaWNoIG1ha2VzIHNlbnNlLgoKTm93LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBiaWdnZXIgcGljdHVyZTogaG93IHRoZSBkZXZpY2UgaXRzZWxmIGdldHMgaW5pdGlhbGl6ZWQgaW4gdGhlIGZpcnN0IHBsYWNlLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIGBjb3JlLmNgIGFuZCBgdXNiLmNgIHRvIHNlZSB0aGUgZGV2aWNlIHByb2JpbmcgYW5kIHJlZ2lzdHJhdGlvbiBwcm9jZXNzZXMuIEdvdHRhIHVuZGVyc3RhbmQgdGhlIGRldmljZSYjMzk7cyBsaWZlY3ljbGUgZnJvbSB0aGUgdmVyeSBiZWdpbm5pbmcgdG8gZWZmZWN0aXZlbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgcmVzdGFydCBsb2dpYy4gVGhpcyBpbmZvcm1hdGlvbiBzaG91bGQgaWxsdW1pbmF0ZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGBtbTgxeF9tYWNfcmVzdGFydGAgYW5kIHRoZSBkZXZpY2UmIzM5O3MgZm91bmRhdGlvbmFsIHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttbTgxeF9wcm9iZXxtbTgxeF9yZWdpc3RlcnxtbTgxeF91c2JfcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvdXNiLmM9NzE2PXN0YXRpYyB2b2lkIG1tODF4X3VyYl9jbGVhbnVwKHN0cnVjdCBtbTgxeCAqbW9ycylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L3VzYi5jLTc0NC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvdXNiLmM6NzQ1OnN0YXRpYyBpbnQgbW04MXhfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L3VzYi5jLTc0Ni1cdFx0XHQgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC91c2IuYz05MjU9c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIG1tODF4X3VzYl9kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L3VzYi5jLTkyNi1cdC5uYW1lID0gXCYjMzQ7bW04MXhfdXNiXCYjMzQ7LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC91c2IuYzo5Mjc6XHQucHJvYmUgPSBtbTgxeF91c2JfcHJvYmUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L3VzYi5jLTkyOC1cdC5kaXNjb25uZWN0ID0gbW04MXhfdXNiX2Rpc2Nvbm5lY3QsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDk4CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFVTQiBEcml2ZXImIzM5O3MgUHJvYmUgRnVuY3Rpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggdGhpcyBgbW04MXhfdXNiYCBkcml2ZXIsIHNwZWNpZmljYWxseSBkdXJpbmcgZGV2aWNlIGVudW1lcmF0aW9uLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGBtbTgxeF91c2JfcHJvYmVgIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYHVzYi5jYCBmaWxlLiBUaGlzIGlzIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludCB3aGVyZSB0aGUgZHJpdmVyIGF0dGVtcHRzIHRvIGluaXRpYWxpemUgYW5kIGNvbm5lY3Qgd2l0aCBhIG5ld2x5IHBsdWdnZWQtaW4gZGV2aWNlLiBJJiMzOTttIHRoaW5raW5nLCBieSBleGFtaW5pbmcgdGhpcyBmdW5jdGlvbiwgSSBzaG91bGQgYmUgYWJsZSB0byBnYWluIGluc2lnaHRzIGludG8gaG93IHRoZSBkcml2ZXIgaWRlbnRpZmllcyBhbmQgY29uZmlndXJlcyB0aGUgYG1tODF4YCBVU0IgZGV2aWNlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSB0aGUgbWF0Y2hpbmcgdGFibGUgb2YgZGV2aWNlIElEcywgcmVzb3VyY2UgYWxsb2NhdGlvbiAobWVtb3J5LCBJUlFzLCBldGMuKSwgYW5kIHRoZSBzZXR1cCBvZiBlbmRwb2ludHMuIFVuZGVyc3RhbmRpbmcgdGhlIHByb2JlIHJvdXRpbmUgaXMgZXNzZW50aWFsIGZvciBkaWFnbm9zaW5nIGFueSBkZXZpY2UgZGV0ZWN0aW9uIG9yIGluaXRpYWxpemF0aW9uIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L3VzYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NDU6XHRzdGF0aWMgaW50IG1tODF4X3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLFxuIDc0NjpcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcbiA3NDc6XHR7XG4gNzQ4Olx0XHRpbnQgcmV0O1xuIDc0OTpcdFx0c3RydWN0IG1tODF4ICptb3JzO1xuIDc1MDpcdFx0c3RydWN0IG1tODF4X3VzYiAqbXVzYjtcbiA3NTE6XHRcbiA3NTI6XHRcdG1vcnMgPSBtbTgxeF9jb3JlX2FsbG9jKHNpemVvZigqbXVzYiksIFx1MDAyNmludGVyZmFjZS1cdTAwM2VkZXYpO1xuIDc1MzpcdFx0aWYgKCFtb3JzKVxuIDc1NDpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA3NTU6XHRcbiA3NTY6XHRcdG1vcnMtXHUwMDNlYnVzX29wcyA9IFx1MDAyNm1tODF4X3VzYl9vcHM7XG4gNzU3Olx0XHRtb3JzLVx1MDAzZWJ1c190eXBlID0gTU04MVhfQlVTX1RZUEVfVVNCO1xuIDc1ODpcdFxuIDc1OTpcdFx0bXVzYiA9IChzdHJ1Y3QgbW04MXhfdXNiICopbW9ycy1cdTAwM2VkcnZfcHJpdjtcbiA3NjA6XHRcdG11c2ItXHUwMDNldWRldiA9IHVzYl9nZXRfZGV2KGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKSk7XG4gNzYxOlx0XHRtdXNiLVx1MDAzZWludGVyZmFjZSA9IHVzYl9nZXRfaW50ZihpbnRlcmZhY2UpO1xuIDc2MjpcdFxuIDc2MzpcdFx0bXV0ZXhfaW5pdChcdTAwMjZtdXNiLVx1MDAzZWxvY2spO1xuIDc2NDpcdFx0bXV0ZXhfaW5pdChcdTAwMjZtdXNiLVx1MDAzZWJ1c19sb2NrKTtcbiA3NjU6XHRcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2bXVzYi1cdTAwM2Vyd19pbl93YWl0KTtcbiA3NjY6XHRcdHVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBtb3JzKTtcbiA3Njc6XHRcbiA3Njg6XHRcdHJldCA9IG1tODF4X3VzYl9kZXRlY3RfZW5kcG9pbnRzKG1vcnMsIGludGVyZmFjZSk7XG4gNzY5Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDc3MDpcdFx0XHRnb3RvIGVycl9jb3JlX2ZyZWU7XG4gNzcxOlx0XG4gNzcyOlx0XHRzZXRfYml0KE1NODFYX1VTQl9GTEFHX0FUVEFDSEVELCBcdTAwMjZtdXNiLVx1MDAzZWZsYWdzKTtcbiA3NzM6XHRcbiA3NzQ6XHRcdHJldCA9IG1tODF4X2NvcmVfaW5pdChtb3JzKTtcbiA3NzU6XHRcdGlmIChyZXQpXG4gNzc2Olx0XHRcdGdvdG8gZXJyX3VyYl9jbGVhbnVwO1xuIDc3NzpcdFxuIDc3ODpcdFx0SU5JVF9XT1JLKFx1MDAyNm1vcnMtXHUwMDNldXNiX2lycV93b3JrLCBtbTgxeF91c2JfaXJxX3dvcmspO1xuIDc3OTpcdFxuIDc4MDpcdFx0cmV0ID0gbW04MXhfdXNiX2ludF9lbmFibGUobW9ycyk7XG4gNzgxOlx0XHRpZiAocmV0KVxuIDc4MjpcdFx0XHRnb3RvIGVycl9jb3JlX2RlaW5pdDtcbiA3ODM6XHRcbiA3ODQ6XHRcdHJldCA9IG1tODF4X2NvcmVfcmVnaXN0ZXIobW9ycyk7XG4gNzg1Olx0XHRpZiAocmV0KVxuIDc4NjpcdFx0XHRnb3RvIGVycl91c2JfaW50X3N0b3A7XG4gNzg3Olx0XG4gNzg4Olx0XHQvKiBVU0IgcmVxdWlyZXMgcmVtb3RlIHdha2V1cCBmdW5jdGlvbmFsaXR5IGZvciBzdXNwZW5kICovXG4gNzg5Olx0XHRjbGVhcl9iaXQoTU04MVhfVVNCX0ZMQUdfU1VTUEVOREVELCBcdTAwMjZtdXNiLVx1MDAzZWZsYWdzKTtcbiA3OTA6XHRcdG11c2ItXHUwMDNlaW50ZXJmYWNlLVx1MDAzZW5lZWRzX3JlbW90ZV93YWtldXAgPSAxO1xuIDc5MTpcdFx0dXNiX2VuYWJsZV9hdXRvc3VzcGVuZChtdXNiLVx1MDAzZXVkZXYpO1xuIDc5MjpcdFx0cG1fcnVudGltZV9zZXRfYXV0b3N1c3BlbmRfZGVsYXkoXHUwMDI2bXVzYi1cdTAwM2V1ZGV2LVx1MDAzZWRldixcbiA3OTM6XHRcdFx0XHRcdFx0IFBNX1JVTlRJTUVfQVVUT1NVU1BFTkRfREVMQVlfTVMpO1xuIDc5NDpcdFxuIDc5NTpcdFx0dXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKGludGVyZmFjZSk7XG4gNzk2Olx0XHRyZXR1cm4gMDtcbiA3OTc6XHRcbiA3OTg6XHRlcnJfdXNiX2ludF9zdG9wOlxuIDc5OTpcdFx0bW04MXhfdXNiX2ludF9zdG9wKG1vcnMpO1xuIDgwMDpcdGVycl9jb3JlX2RlaW5pdDpcbiA4MDE6XHRcdG1tODF4X2NvcmVfZGVpbml0KG1vcnMpO1xuIDgwMjpcdGVycl91cmJfY2xlYW51cDpcbiA4MDM6XHRcdG1tODF4X3VyYl9jbGVhbnVwKG1vcnMpO1xuIDgwNDpcdGVycl9jb3JlX2ZyZWU6XG4gODA1Olx0XHRtbTgxeF9jb3JlX2ZyZWUobW9ycyk7XG4gODA2Olx0XHR1c2JfcHV0X2ludGYoaW50ZXJmYWNlKTtcbiA4MDc6XHRcdHVzYl9wdXRfZGV2KGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKSk7XG4gODA4Olx0XHRyZXR1cm4gcmV0O1xuIDgwOTpcdH1cbiA4MTA6XHRcbiA4MTE6XHRzdGF0aWMgdm9pZCBtbTgxeF91c2JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKVxuIDgxMjpcdHtcbiA4MTM6XHRcdHN0cnVjdCBtbTgxeCAqbW9ycyA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTtcbiA4MTQ6XHRcdHN0cnVjdCBtbTgxeF91c2IgKm11c2IgPSAoc3RydWN0IG1tODF4X3VzYiAqKW1vcnMtXHUwMDNlZHJ2X3ByaXY7XG4gODE1Olx0XHRpbnQgbWlub3IgPSBpbnRlcmZhY2UtXHUwMDNlbWlub3I7XG4gODE2Olx0XHRzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKTtcbiA4MTc6XHRcbiA4MTg6XHRcdGlmICh1ZGV2LVx1MDAzZXN0YXRlID09IFVTQl9TVEFURV9OT1RBVFRBQ0hFRCkge1xuIDgxOTpcdFx0XHRjbGVhcl9iaXQoTU04MVhfVVNCX0ZMQUdfQVRUQUNIRUQsIFx1MDAyNm11c2ItXHUwMDNlZmxhZ3MpO1xuIDgyMDpcdFx0XHRzZXRfYml0KE1NODFYX1NUQVRFX0NISVBfVU5SRVNQT05TSVZFLCBcdTAwMjZtb3JzLVx1MDAzZXN0YXRlX2ZsYWdzKTtcbiA4MjE6XHRcdFx0ZGV2X2RiZyhtb3JzLVx1MDAzZWRldiwgXCYjMzQ7VVNCIHN1ZGRlbmx5IHVucGx1Z2dlZFwmIzM0Oyk7XG4gODIyOlx0XHR9XG4gODIzOlx0XG4gODI0Olx0XHR1c2JfZGlzYWJsZV9hdXRvc3VzcGVuZCh1ZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2OTUKCQkJCQkJCW91dHB1dDogNTEKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlOgoKKipDb3JlIEluaXRpYWxpemF0aW9uIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGhlcmUuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgd2hlcmUgZG9lcyBpdCBhbGwgKnJlYWxseSogc3RhcnQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb3JlJiMzOTtzIHNldHVwIGJlZm9yZSBhbnl0aGluZyBlbHNlLiBUaGUga2V5IGVudHJ5IHBvaW50cyBJJiMzOTttIGNvbnNpZGVyaW5nIGFyZSBgbW04MXhfY29yZV9pbml0YCwgYG1tODF4X2NvcmVfcmVnaXN0ZXJgLCBhbmQgYG1tODF4X21hY19pbml0YC4gRWFjaCBvZiB0aGVzZSBjb3VsZCBiZSB0aGUgY3JpdGljYWwgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB0cmFjZSB0aHJvdWdoIHRoZXNlIGZ1bmN0aW9ucyB0byB1bmRlcnN0YW5kIHRoZSBpbml0aWFsaXphdGlvbiBmbG93IGFuZCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zLCBzbyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIHRoZSBtb3N0IGxpa2VseSBhbmQgd29yayBiYWNrd2FyZHMgaWYgbmVlZGVkLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGUgY29yZSAqaXRzZWxmKiBpcyBicm91Z2h0IG9ubGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW04MXhfY29yZV9yZWdpc3RlcnxtbTgxeF9jb3JlX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jPTExPXN0YXRpYyBpbnQgbW04MXhfY29yZV9hdHRhY2hfcmVncyhzdHJ1Y3QgbW04MXggKm1vcnMpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtMzUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYzozNjpzdGF0aWMgdm9pZCBtbTgxeF9jb3JlX2luaXRfbWFjX2FkZHIoc3RydWN0IG1tODF4ICptb3JzKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtMzcte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jPTY1PUVYUE9SVF9TWU1CT0xfR1BMKG1tODF4X2NvcmVfYWxsb2MpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtNjYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYzo2NzppbnQgbW04MXhfY29yZV9pbml0KHN0cnVjdCBtbTgxeCAqbW9ycylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTY4LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy03My1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjc0Olx0bW04MXhfY29yZV9pbml0X21hY19hZGRyKG1vcnMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtNzUtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtMTA1LX1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjEwNjpFWFBPUlRfU1lNQk9MX0dQTChtbTgxeF9jb3JlX2luaXQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtMTA3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6MTA4OmludCBtbTgxeF9jb3JlX3JlZ2lzdGVyKHN0cnVjdCBtbTgxeCAqbW9ycylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTEwOS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtMTExLX1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjExMjpFWFBPUlRfU1lNQk9MX0dQTChtbTgxeF9jb3JlX3JlZ2lzdGVyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTExMy1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaD00NDk9c3RydWN0IG1tODF4ICptbTgxeF9jb3JlX2FsbG9jKHNpemVfdCBwcml2X3NpemUsIHN0cnVjdCBkZXZpY2UgKmRldik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaDo0NTA6aW50IG1tODF4X2NvcmVfaW5pdChzdHJ1Y3QgbW04MXggKm1vcnMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmg6NDUxOmludCBtbTgxeF9jb3JlX3JlZ2lzdGVyKHN0cnVjdCBtbTgxeCAqbW9ycyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaC00NTItdm9pZCBtbTgxeF9jb3JlX3VucmVnaXN0ZXIoc3RydWN0IG1tODF4ICptb3JzKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L3NkaW8uYz01MTc9c3RhdGljIGludCBtbTgxeF9zZGlvX3Byb2JlKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9zZGlvLmMtNTUxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9zZGlvLmM6NTUyOlx0cmV0ID0gbW04MXhfY29yZV9pbml0KG1vcnMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9zZGlvLmMtNTUzLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L3NkaW8uYy01NTktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L3NkaW8uYzo1NjA6XHRyZXQgPSBtbTgxeF9jb3JlX3JlZ2lzdGVyKG1vcnMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9zZGlvLmMtNTYxLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L3VzYi5jPTc0NT1zdGF0aWMgaW50IG1tODF4X3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvdXNiLmMtNzczLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC91c2IuYzo3NzQ6XHRyZXQgPSBtbTgxeF9jb3JlX2luaXQobW9ycyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L3VzYi5jLTc3NS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC91c2IuYy03ODMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L3VzYi5jOjc4NDpcdHJldCA9IG1tODF4X2NvcmVfcmVnaXN0ZXIobW9ycyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L3VzYi5jLTc4NS1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjE3CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBtbTgxeCBDb3JlKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGBtbTgxeGAgd2lyZWxlc3MgZHJpdmVyIGNvZGUgYWdhaW4uIEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSwgc3BlY2lmaWNhbGx5IGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuY2AuIExldCYjMzk7cyB6ZXJvIGluIG9uIGxpbmVzIDYwIHRocm91Z2ggMTIwLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgdGhlIG92ZXJhbGwgZnVuY3Rpb24gc3RydWN0dXJlIGhlcmUsIHBhcnRpY3VsYXJseSBhdCBob3cgdGhlIGNvcmUgbW9kdWxlIGlzIGluaXRpYWxpemluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgYXJlIGludGVyYWN0aW5nIHdpdGggdGhlIGhhcmR3YXJlLiBUaGVyZSBzaG91bGQgYmUgc29tZSBjcml0aWNhbCBjb25maWd1cmF0aW9uIG9yIGluaXRpYWxpemF0aW9uIHN0ZXBzIGhhcHBlbmluZyBpbiB0aGlzIHNlY3Rpb24uIEkgZXhwZWN0IHRvIHNlZSBzb21lIHJlZ2lzdGVyIGFjY2VzcyBvciBwZXJoYXBzIHNvbWUgcmVzb3VyY2UgYWxsb2NhdGlvbi4gVGhlIGRyaXZlciBpcyBsaWtlbHkgZGVhbGluZyB3aXRoIGl0cyBoYXJkd2FyZSYjMzk7cyBpbnRlcnJ1cHRzLCBhbmQgaXQgcHJvYmFibHkgaGFzIHNvbWUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIEkgc2hvdWxkIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIHRpbWluZyBjb25zaWRlcmF0aW9ucy4gR2l2ZW4gdGhlIHNlY3Rpb24gSSYjMzk7dmUgY2hvc2VuLCBJIGFtIGV4cGVjdGluZyBhbiBpbnRlcnBsYXkgb2YgbG93LWxldmVsIGhhcmR3YXJlIGludGVyYWN0aW9uIGFuZCBoaWdoZXItbGV2ZWwgYWJzdHJhY3Rpb24uIEkgd2lsbCBrZWVwIGFuIGV5ZSBvdXQgZm9yIGFueSB1bnVzdWFsIGRhdGEgc3RydWN0dXJlcyBvciBlcnJvciBoYW5kbGluZyByb3V0aW5lcyBpbiB0aGlzIHNlY3Rpb24uIEhvcGVmdWxseSwgSSB3aWxsIHNlZSBlbm91Z2ggY29kZSB0aGF0IEkgY2FuIHBpZWNlIHRvZ2V0aGVyIHRoZSBiYXNpY3Mgb2YgdGhpcyBtb2R1bGUmIzM5O3Mgb3BlcmF0aW9uLiBJIGFtIGdvaW5nIHRvIHNlZSBpZiBhbnkgY29kZSBjb21tZW50cyBjb3VsZCBoZWxwIG1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2MDpcdFxuICA2MTpcdHN0cnVjdCBtbTgxeCAqbW04MXhfY29yZV9hbGxvYyhzaXplX3QgcHJpdl9zaXplLCBzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gIDYyOlx0e1xuICA2MzpcdFx0cmV0dXJuIG1tODF4X21hY19hbGxvYyhwcml2X3NpemUsIGRldik7XG4gIDY0Olx0fVxuICA2NTpcdEVYUE9SVF9TWU1CT0xfR1BMKG1tODF4X2NvcmVfYWxsb2MpO1xuICA2NjpcdFxuICA2NzpcdGludCBtbTgxeF9jb3JlX2luaXQoc3RydWN0IG1tODF4ICptb3JzKVxuICA2ODpcdHtcbiAgNjk6XHRcdGludCByZXQ7XG4gIDcwOlx0XG4gIDcxOlx0XHRzZXRfYml0KE1NODFYX1NUQVRFX0NISVBfVU5SRVNQT05TSVZFLCBcdTAwMjZtb3JzLVx1MDAzZXN0YXRlX2ZsYWdzKTtcbiAgNzI6XHRcdHNldF9iaXQoTU04MVhfU1RBVEVfUkVMT0FEX0ZXX0FGVEVSX1NUQVJULCBcdTAwMjZtb3JzLVx1MDAzZXN0YXRlX2ZsYWdzKTtcbiAgNzM6XHRcbiAgNzQ6XHRcdG1tODF4X2NvcmVfaW5pdF9tYWNfYWRkcihtb3JzKTtcbiAgNzU6XHRcbiAgNzY6XHRcdHJldCA9IG1tODF4X2NvcmVfYXR0YWNoX3JlZ3MobW9ycyk7XG4gIDc3Olx0XHRpZiAocmV0KVxuICA3ODpcdFx0XHRyZXR1cm4gcmV0O1xuICA3OTpcdFxuICA4MDpcdFx0bW9ycy1cdTAwM2VjaGlwX3dxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoXCYjMzQ7Y2hpcF93cVwmIzM0Oyk7XG4gIDgxOlx0XHRpZiAoIW1vcnMtXHUwMDNlY2hpcF93cSlcbiAgODI6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gIDgzOlx0XG4gIDg0Olx0XHRtb3JzLVx1MDAzZW5ldF93cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKFwmIzM0O25ldF93cVwmIzM0Oyk7XG4gIDg1Olx0XHRpZiAoIW1vcnMtXHUwMDNlbmV0X3dxKSB7XG4gIDg2Olx0XHRcdHJldCA9IC1FTk9NRU07XG4gIDg3Olx0XHRcdGdvdG8gZXJyX2NoaXBfd3E7XG4gIDg4Olx0XHR9XG4gIDg5Olx0XG4gIDkwOlx0XHRyZXQgPSBtbTgxeF9oaWZfaW5pdChtb3JzKTtcbiAgOTE6XHRcdGlmIChyZXQpXG4gIDkyOlx0XHRcdGdvdG8gZXJyX3dxcztcbiAgOTM6XHRcbiAgOTQ6XHRcdHJldHVybiAwO1xuICA5NTpcdFxuICA5NjpcdGVycl93cXM6XG4gIDk3Olx0XHRmbHVzaF93b3JrcXVldWUobW9ycy1cdTAwM2VuZXRfd3EpO1xuICA5ODpcdFx0ZGVzdHJveV93b3JrcXVldWUobW9ycy1cdTAwM2VuZXRfd3EpO1xuICA5OTpcdFxuIDEwMDpcdGVycl9jaGlwX3dxOlxuIDEwMTpcdFx0Zmx1c2hfd29ya3F1ZXVlKG1vcnMtXHUwMDNlY2hpcF93cSk7XG4gMTAyOlx0XHRkZXN0cm95X3dvcmtxdWV1ZShtb3JzLVx1MDAzZWNoaXBfd3EpO1xuIDEwMzpcdFxuIDEwNDpcdFx0cmV0dXJuIHJldDtcbiAxMDU6XHR9XG4gMTA2Olx0RVhQT1JUX1NZTUJPTF9HUEwobW04MXhfY29yZV9pbml0KTtcbiAxMDc6XHRcbiAxMDg6XHRpbnQgbW04MXhfY29yZV9yZWdpc3RlcihzdHJ1Y3QgbW04MXggKm1vcnMpXG4gMTA5Olx0e1xuIDExMDpcdFx0cmV0dXJuIG1tODF4X21hY19yZWdpc3Rlcihtb3JzKTtcbiAxMTE6XHR9XG4gMTEyOlx0RVhQT1JUX1NZTUJPTF9HUEwobW04MXhfY29yZV9yZWdpc3Rlcik7XG4gMTEzOlx0XG4gMTE0Olx0dm9pZCBtbTgxeF9jb3JlX3VucmVnaXN0ZXIoc3RydWN0IG1tODF4ICptb3JzKVxuIDExNTpcdHtcbiAxMTY6XHRcdG1tODF4X21hY191bnJlZ2lzdGVyKG1vcnMpO1xuIDExNzpcdH1cbiAxMTg6XHRFWFBPUlRfU1lNQk9MX0dQTChtbTgxeF9jb3JlX3VucmVnaXN0ZXIpO1xuIDExOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQxMgoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgbW04MXggTUFDIFJlZ2lzdGVyIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGBtbTgxeF9tYWNfcmVnaXN0ZXJgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBtYWMuY2AgaW4gdGhlIGBtb3JzZW1pY3JvYCB3aXJlbGVzcyBkcml2ZXIgZGlyZWN0b3J5LiBNeSBmaXJzdCBzdGVwIGlzIG9idmlvdXNseSB0byBnbyBhbmQgZmluZCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuY2AgYW5kIHplcm8gaW4gb24gdGhlIGBtbTgxeF9tYWNfcmVnaXN0ZXJgIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBNQUMgbGF5ZXIuIEZyb20gdGhhdCBzcG90IEkmIzM5O2xsIGJlIGFibGUgdG8gZ3Jhc3AgaG93IHRoaXMgcmVnaXN0cmF0aW9uIHByb2Nlc3MgZml0cyBpbnRvIHRoZSBvdmVyYWxsIGRyaXZlciBhcmNoaXRlY3R1cmUsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUsIGFuZCBhbnkgYXNzb2NpYXRlZCBkYXRhIHN0cnVjdHVyZXMuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBjcnVjaWFsIGxpbmVzIGFuZCBhbnkgcG9pbnRzIG9mIHBvc3NpYmxlIGNvbnRlbnRpb24gb3IgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBtb2R1bGVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW04MXhfbWFjX3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYz0xMDg9aW50IG1tODF4X2NvcmVfcmVnaXN0ZXIoc3RydWN0IG1tODF4ICptb3JzKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtMTA5LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjExMDpcdHJldHVybiBtbTgxeF9tYWNfcmVnaXN0ZXIobW9ycyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0xMTEtfVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM9MjM2MD1zdGF0aWMgdm9pZCBtbTgxeF9tYWNfc3RhbGVfdHhfc3RhdHVzX3RpbWVyX2luaXQoc3RydWN0IG1tODF4ICptb3JzKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjM2NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjM2NjppbnQgbW04MXhfbWFjX3JlZ2lzdGVyKHN0cnVjdCBtbTgxeCAqbW9ycylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjM2Ny17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuaD01MT1zdHJ1Y3QgbW04MXggKm1tODF4X21hY19hbGxvYyhzaXplX3QgcHJpdl9zaXplLCBzdHJ1Y3QgZGV2aWNlICpkZXYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuaDo1MjppbnQgbW04MXhfbWFjX3JlZ2lzdGVyKHN0cnVjdCBtbTgxeCAqbW9ycyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5oLTUzLXZvaWQgbW04MXhfbWFjX2ZyZWUoc3RydWN0IG1tODF4ICptb3JzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxMjUKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBwcm92aWRlZCB0ZXh0OgoKKipEaXZpbmcgaW50byB0aGUgTUFDIFJlZ2lzdGVyIERlZmluaXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIE1BQyByZWdpc3RlciBkZWZpbml0aW9uLiBUaGUgY29kZSBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBtbTgxeF9tYWNfcmVnaXN0ZXJgLCBhbmQgdGhlIGZpbGUgaXMgYG1hYy5jYC4gT2theSwgc28gdGhhdCBtZWFucyBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgYXQgdGhlIGNvcmUgc3RydWN0dXJlIGRlZmluaXRpb24gZm9yIHRoZSBNQUMgaGFyZHdhcmUgcmVnaXN0ZXJzIHdpdGhpbiB0aGlzIHBhcnRpY3VsYXIgZHJpdmVyLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgZmllbGQgZGVmaW5pdGlvbnMsIGJpdCBwb3NpdGlvbnMsIGFuZCBkZXNjcmlwdGlvbnMgdGhhdCBkZXRhaWwgaG93IHRoZSBoYXJkd2FyZSBpcyBjb250cm9sbGVkIGFuZCBtb25pdG9yZWQuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrIGZvciB0aGUgZGV2aWNlJiMzOTtzIE1BQyBmdW5jdGlvbmFsaXR5LiBOb3csIGxldCYjMzk7cyBzZWUgaG93IHRoZXkmIzM5O3ZlIHN0cnVjdHVyZWQgaXTigKYgSSYjMzk7bSBlc3BlY2lhbGx5IGtlZW4gdG8gc2VlIGhvdyB0aGV5JiMzOTt2ZSBoYW5kbGVkIHBvdGVudGlhbCBiaXRmaWVsZHMgZm9yIHNwZWVkLCBvciBpZiB0aGV5JiMzOTt2ZSB1c2VkIHNvbWUgb3RoZXIgYXBwcm9hY2guIFRoaXMgaXMgZ29pbmcgdG8gYmUgZ29vZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjM2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMzY1Olx0XG4yMzY2Olx0aW50IG1tODF4X21hY19yZWdpc3RlcihzdHJ1Y3QgbW04MXggKm1vcnMpXG4yMzY3Olx0e1xuMjM2ODpcdFx0aW50IHJldDtcbjIzNjk6XHRcdHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gbW9ycy1cdTAwM2VodztcbjIzNzA6XHRcbjIzNzE6XHRcdG1vcnMtXHUwMDNldHhfcG93ZXJfbWJtID0gSU5UX01BWDtcbjIzNzI6XHRcdG1vcnMtXHUwMDNldHhfbWF4X3Bvd2VyX21ibSA9IElOVF9NQVg7XG4yMzczOlx0XHRtb3JzLVx1MDAzZXJ0c190aHJlc2hvbGQgPSBJRUVFODAyMTFfTUFYX1JUU19USFJFU0hPTEQ7XG4yMzc0Olx0XG4yMzc1Olx0XHRyZXQgPSBtbTgxeF9wc19pbml0KG1vcnMpO1xuMjM3NjpcdFx0aWYgKHJldClcbjIzNzc6XHRcdFx0cmV0dXJuIHJldDtcbjIzNzg6XHRcbjIzNzk6XHRcdG1tODF4X21hY19jb25maWdfaHcobW9ycyk7XG4yMzgwOlx0XHRtbTgxeF9tYWNfaHdfc2Nhbl9pbml0KG1vcnMpO1xuMjM4MTpcdFx0bW04MXhfbWFjX3N0YWxlX3R4X3N0YXR1c190aW1lcl9pbml0KG1vcnMpO1xuMjM4MjpcdFxuMjM4MzpcdFx0cmV0ID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KGh3KTtcbjIzODQ6XHRcdGlmIChyZXQpIHtcbjIzODU6XHRcdFx0ZGV2X2Vycihtb3JzLVx1MDAzZWRldiwgXCYjMzQ7aWVlZTgwMjExX3JlZ2lzdGVyX2h3IGZhaWxlZCAlZFwmIzM0OywgcmV0KTtcbjIzODY6XHRcdFx0bW04MXhfbWFjX3VucmVnaXN0ZXIobW9ycyk7XG4yMzg3Olx0XHRcdHJldHVybiByZXQ7XG4yMzg4Olx0XHR9XG4yMzg5Olx0XG4yMzkwOlx0XHRtbTgxeF9yY19pbml0KG1vcnMpO1xuMjM5MTpcdFxuMjM5MjpcdFx0LypcbjIzOTM6XHRcdCAqIEF0IHRoaXMgc3RhZ2UsIHdlIGtub3cgYnVzIGFuZCBwYWdlciBzeXN0ZW0gaW50ZXJydXB0cyBhcmUgZW5hYmxlZC5cbjIzOTQ6XHRcdCAqIFRyaWdnZXIgdGhlIHJlY2VpdmUgd29ya3F1ZXVlIHRvIGRyYWluIGFueSBpbmNvbWluZyBjaGlwLXRvLWhvc3RcbjIzOTU6XHRcdCAqIHBlbmRpbmcgcGFja2V0cyBiZWVuIHB1c2hlZCBpbiB0aGUgcGVyaW9kIGJldHdlZW4gdGhlIGZpcm13YXJlXG4yMzk2Olx0XHQgKiBpbml0aWFsaXphdGlvbiBhbmQgaW50ZXJydXB0cyBiZWluZyBlbmFibGVkLlxuMjM5NzpcdFx0ICovXG4yMzk4Olx0XHRzZXRfYml0KE1NODFYX0hJRl9FVlRfUlhfUEVORCwgXHUwMDI2bW9ycy1cdTAwM2VoaWYuZXZlbnRfZmxhZ3MpO1xuMjM5OTpcdFx0cXVldWVfd29yayhtb3JzLVx1MDAzZWNoaXBfd3EsIFx1MDAyNm1vcnMtXHUwMDNlaGlmX3dvcmspO1xuMjQwMDpcdFxuMjQwMTpcdFx0cmV0dXJuIHJldDtcbjI0MDI6XHR9XG4yNDAzOlx0XG4yNDA0Olx0dm9pZCBtbTgxeF9tYWNfdW5yZWdpc3RlcihzdHJ1Y3QgbW04MXggKm1vcnMpXG4yNDA1Olx0e1xuMjQwNjpcdFx0bW04MXhfcHNfZGlzYWJsZShtb3JzKTtcbjI0MDc6XHRcdG1tODF4X3JjX2RlaW5pdChtb3JzKTtcbjI0MDg6XHRcdG1tODF4X21hY19od19zY2FuX2Rlc3Ryb3kobW9ycyk7XG4yNDA5Olx0XG4yNDEwOlx0XHRpZWVlODAyMTFfc3RvcF9xdWV1ZXMobW9ycy1cdTAwM2Vodyk7XG4yNDExOlx0XHRpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhtb3JzLVx1MDAzZWh3KTtcbjI0MTI6XHRcbjI0MTM6XHRcdG1tODF4X2hpZl9mbHVzaF90eF9kYXRhKG1vcnMpO1xuMjQxNDpcdFx0bW04MXhfaGlmX2ZsdXNoX2NtZHMobW9ycyk7XG4yNDE1Olx0XHRtbTgxeF9zdGFsZV90eF9zdGF0dXNfdGltZXJfZmluaXNoKG1vcnMpO1xuMjQxNjpcdFx0bW04MXhfcHNfZmluaXNoKG1vcnMpO1xuMjQxNzpcdFxuMjQxODpcdFx0a2ZyZWUobW9ycy1cdTAwM2VtY2FzdF9maWx0ZXIpO1xuMjQxOTpcdH1cbjI0MjA6XHRcbjI0MjE6XHRzdHJ1Y3QgbW04MXggKm1tODF4X21hY19hbGxvYyhzaXplX3QgcHJpdl9zaXplLCBzdHJ1Y3QgZGV2aWNlICpkZXYpXG4yNDIyOlx0e1xuMjQyMzpcdFx0c3RydWN0IGllZWU4MDIxMV9odyAqaHc7XG4yNDI0Olx0XHRzdHJ1Y3QgbW04MXggKm1vcnM7XG4yNDI1Olx0XG4yNDI2Olx0XHRodyA9IGllZWU4MDIxMV9hbGxvY19odyhzaXplb2YoKm1vcnMpICYjNDM7IHByaXZfc2l6ZSwgXHUwMDI2bW04MXhfb3BzKTtcbjI0Mjc6XHRcdGlmICghaHcpIHtcbjI0Mjg6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O2llZWU4MDIxMV9hbGxvY19odyBmYWlsZWRcXHJcXG5cJiMzNDspO1xuMjQyOTpcdFx0XHRyZXR1cm4gTlVMTDtcbjI0MzA6XHRcdH1cbjI0MzE6XHRcbjI0MzI6XHRcdFNFVF9JRUVFODAyMTFfREVWKGh3LCBkZXYpO1xuMjQzMzpcdFx0bWVtc2V0KGh3LVx1MDAzZXByaXYsIDAsIHNpemVvZigqbW9ycykpO1xuMjQzNDpcdFxuMjQzNTpcdFx0bW9ycyA9IGh3LVx1MDAzZXByaXY7XG4yNDM2Olx0XHRtb3JzLVx1MDAzZWh3ID0gaHc7XG4yNDM3Olx0XHRtb3JzLVx1MDAzZWRldiA9IGRldjtcbjI0Mzg6XHRcdG11dGV4X2luaXQoXHUwMDI2bW9ycy1cdTAwM2VjbWRfbG9jayk7XG4yNDM5Olx0XHRtdXRleF9pbml0KFx1MDAyNm1vcnMtXHUwMDNlY21kX3dhaXQpO1xuMjQ0MDpcdFx0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZtb3JzLVx1MDAzZXR4X2VtcHR5X3dhaXRxKTtcbjI0NDE6XHRcbjI0NDI6XHRcdHJldHVybiBtb3JzO1xuMjQ0MzpcdH1cbjI0NDQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk2ODQKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZpcm13YXJlIENoYW5uZWwgQ2hlY2sqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgbW04MXhfbWFjX2NoZWNrX2Z3X2Rpc2FibGVkX2NoYW5zKG1vcnMtJmd0O2h3KWAgZnVuY3Rpb24uIFRoZSBjb2RlIHNheXMgaXQgZ2V0cyBjYWxsZWQgZHVyaW5nIGBtbTgxeF9tYWNfcmVzdGFydGAuIFRoYXQmIzM5O3MgdGhlIGtleTogd2hlbiBkb2VzIGBtbTgxeF9tYWNfcmVzdGFydGAgKml0c2VsZiogZ2V0IHRyaWdnZXJlZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy4gTGV0JiMzOTtzIHNlZS4uLiBhIHF1aWNrIHNjYW4gb2YgYG1hYy5jYCBhcm91bmQgbGluZXMgMjE3NSB0byAyMjg1IHNob3VsZCBnaXZlIG1lIHRoZSBhbnN3ZXIuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGNhbGwgc2l0ZXMgb2YgYG1tODF4X21hY19yZXN0YXJ0YCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoYXQgcmVnaW9uIG9mIHRoZSBmaWxlIHRvIHVuZGVyc3RhbmQgdGhlIGNpcmN1bXN0YW5jZXMgdW5kZXIgd2hpY2ggdGhlIGZpcm13YXJlIGNoYW5uZWwgY2hlY2sgcnVucy4gVGhpcyBzaG91bGQgdGVsbCBtZSB0aGUgY29udGV4dCBvZiB0aGlzIGZ1bmN0aW9uJiMzOTtzIG9wZXJhdGlvbiBhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxNzA6XHRleGl0OlxuMjE3MTpcdFx0bW04MXhfcHNfZW5hYmxlKG1vcnMpO1xuMjE3MjpcdFx0cmV0dXJuIHJldDtcbjIxNzM6XHR9XG4yMTc0Olx0XG4yMTc1Olx0c3RhdGljIGludCBtbTgxeF9tYWNfb3BzX2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4yMTc2Olx0XHRcdFx0XHQgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZilcbjIxNzc6XHR7XG4yMTc4Olx0XHRpbnQgcmV0ID0gMDtcbjIxNzk6XHRcdHN0cnVjdCBtbTgxeCAqbW9ycyA9IGh3LVx1MDAzZXByaXY7XG4yMTgwOlx0XHRzdHJ1Y3QgbW04MXhfdmlmICptb3JzX3ZpZiA9IChzdHJ1Y3QgbW04MXhfdmlmICopdmlmLVx1MDAzZWRydl9wcml2O1xuMjE4MTpcdFxuMjE4MjpcdFx0aWYgKHRlc3RfYml0KE1NODFYX1NUQVRFX1JFTE9BRF9GV19BRlRFUl9TVEFSVCwgXHUwMDI2bW9ycy1cdTAwM2VzdGF0ZV9mbGFncykpIHtcbjIxODM6XHRcdFx0ZGV2X2luZm8obW9ycy1cdTAwM2VkZXYsIFwmIzM0O1Jlc3RhcnRpbmcgY2hpcCB3aXRoIHJlZ2RvbTogJXNcJiMzNDssXG4yMTg0Olx0XHRcdFx0IG1vcnMtXHUwMDNlY291bnRyeSk7XG4yMTg1Olx0XG4yMTg2Olx0XHRcdHJldCA9IG1tODF4X21hY19yZXN0YXJ0KG1vcnMpO1xuMjE4NzpcdFx0XHRpZiAocmV0KSB7XG4yMTg4Olx0XHRcdFx0ZGV2X2Vycihtb3JzLVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvIHJlc3RhcnQgY2hpcFwmIzM0Oyk7XG4yMTg5Olx0XHRcdFx0cmV0dXJuIHJldDtcbjIxOTA6XHRcdFx0fVxuMjE5MTpcdFxuMjE5MjpcdFx0XHQvKlxuMjE5MzpcdFx0XHQgKiBtYWNfcmVzdGFydCB3aWxsIHRyaWdnZXIgaWVlZTgwMjExX2h3X3Jlc3RhcnQgYW5kXG4yMTk0Olx0XHRcdCAqIGFkZF9pbnRlcmZhY2Ugd2lsbCByZS1lbnRlci4ganVzdCBleGl0IGhlcmUgaW5zdGVhZC5cbjIxOTU6XHRcdFx0ICovXG4yMTk2Olx0XHRcdHJldHVybiAwO1xuMjE5NzpcdFx0fVxuMjE5ODpcdFxuMjE5OTpcdFx0dmlmLVx1MDAzZWRyaXZlcl9mbGFncyB8PSBJRUVFODAyMTFfVklGX0JFQUNPTl9GSUxURVI7XG4yMjAwOlx0XHRtb3JzX3ZpZi1cdTAwM2Vtb3JzID0gbW9ycztcbjIyMDE6XHRcbjIyMDI6XHRcdHJldCA9IG1tODF4X2NtZF9hZGRfaWYobW9ycywgXHUwMDI2bW9yc192aWYtXHUwMDNlaWQsIHZpZi1cdTAwM2VhZGRyLCB2aWYtXHUwMDNldHlwZSk7XG4yMjAzOlx0XHRpZiAocmV0KSB7XG4yMjA0Olx0XHRcdGRldl9lcnIobW9ycy1cdTAwM2VkZXYsIFwmIzM0O21tODF4X2NtZF9hZGRfaWYgZmFpbGVkICVkXCYjMzQ7LCByZXQpO1xuMjIwNTpcdFx0XHRyZXR1cm4gcmV0O1xuMjIwNjpcdFx0fVxuMjIwNzpcdFxuMjIwODpcdFx0aWYgKG1vcnNfdmlmLVx1MDAzZWlkIFx1MDAzZT0gQVJSQVlfU0laRShtb3JzLVx1MDAzZXZpZnMpKSB7XG4yMjA5Olx0XHRcdGRldl9lcnIobW9ycy1cdTAwM2VkZXYsIFwmIzM0O3ZpZl9pZCBpcyB0b28gbGFyZ2UgJXVcJiMzNDssIG1vcnNfdmlmLVx1MDAzZWlkKTtcbjIyMTA6XHRcdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4yMjExOlx0XHRcdHJldHVybiByZXQ7XG4yMjEyOlx0XHR9XG4yMjEzOlx0XG4yMjE0Olx0XHRpZiAobW9yc192aWYtXHUwMDNlaWQgIT0gKG1vcnNfdmlmLVx1MDAzZWlkIFx1MDAyNiBNTTgxWF9UWF9DT05GX0ZMQUdTX1ZJRl9JRF9NQVNLKSkge1xuMjIxNTpcdFx0XHRkZXZfZXJyKG1vcnMtXHUwMDNlZGV2LCBcJiMzNDtpbnZhbGlkIHZpZl9pZCAldVwmIzM0OywgbW9yc192aWYtXHUwMDNlaWQpO1xuMjIxNjpcdFx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbjIyMTc6XHRcdFx0cmV0dXJuIHJldDtcbjIyMTg6XHRcdH1cbjIyMTk6XHRcbjIyMjA6XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihtb3JzLVx1MDAzZXZpZnNbbW9yc192aWYtXHUwMDNlaWRdLCB2aWYpO1xuMjIyMTpcdFxuMjIyMjpcdFx0aWYgKHZpZi1cdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKVxuMjIyMzpcdFx0XHRtbTgxeF9tYWNfYmVhY29uX2luaXQobW9yc192aWYpO1xuMjIyNDpcdFxuMjIyNTpcdFx0cmV0ID0gbW04MXhfY21kX2dldF9jYXBhYmlsaXRpZXMobW9ycywgbW9yc192aWYtXHUwMDNlaWQsIFx1MDAyNm1vcnMtXHUwMDNlZndfY2Fwcyk7XG4yMjI2Olx0XHRpZiAocmV0KSB7XG4yMjI3Olx0XHRcdGRldl9lcnIobW9ycy1cdTAwM2VkZXYsXG4yMjI4Olx0XHRcdFx0XCYjMzQ7bW04MXhfY21kX2dldF9jYXBhYmlsaXRpZXMgZmFpbGVkIGZvciB2aWYgJWRcJiMzNDssXG4yMjI5Olx0XHRcdFx0bW9yc192aWYtXHUwMDNlaWQpO1xuMjIzMDpcdFx0XHRyZXR1cm4gcmV0O1xuMjIzMTpcdFx0fVxuMjIzMjpcdFxuMjIzMzpcdFx0aWVlZTgwMjExX3dha2VfcXVldWVzKG1vcnMtXHUwMDNlaHcpO1xuMjIzNDpcdFx0cmV0dXJuIHJldDtcbjIyMzU6XHR9XG4yMjM2Olx0XG4yMjM3Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIG1tODF4X29wcyA9IHtcbjIyMzg6XHRcdC5zdGFydCA9IG1tODF4X21hY19vcHNfc3RhcnQsXG4yMjM5Olx0XHQuc3RvcCA9IG1tODF4X21hY19vcHNfc3RvcCxcbjIyNDA6XHRcdC5jb25maWcgPSBtbTgxeF9tYWNfb3BzX2NvbmZpZyxcbjIyNDE6XHRcdC53YWtlX3R4X3F1ZXVlID0gaWVlZTgwMjExX2hhbmRsZV93YWtlX3R4X3F1ZXVlLFxuMjI0MjpcdFx0LnR4ID0gbW04MXhfbWFjX29wc190eCxcbjIyNDM6XHRcdC5hZGRfaW50ZXJmYWNlID0gbW04MXhfbWFjX29wc19hZGRfaW50ZXJmYWNlLFxuMjI0NDpcdFx0LnJlbW92ZV9pbnRlcmZhY2UgPSBtbTgxeF9tYWNfb3BzX3JlbW92ZV9pbnRlcmZhY2UsXG4yMjQ1Olx0XHQuY29uZmlndXJlX2ZpbHRlciA9IG1tODF4X21hY19vcHNfY29uZmlndXJlX2ZpbHRlcixcbjIyNDY6XHRcdC5zdGFfc3RhdGUgPSBtbTgxeF9tYWNfb3BzX3N0YV9zdGF0ZSxcbjIyNDc6XHRcdC5mbHVzaCA9IG1tODF4X21hY19vcHNfZmx1c2gsXG4yMjQ4Olx0XHQuc2V0X2ZyYWdfdGhyZXNob2xkID0gbW04MXhfbWFjX3NldF9mcmFnX3RocmVzaG9sZCxcbjIyNDk6XHRcdC5zZXRfcnRzX3RocmVzaG9sZCA9IG1tODF4X21hY19vcHNfc2V0X3J0c190aHJlc2hvbGQsXG4yMjUwOlx0XHQuc3RhX3N0YXRpc3RpY3MgPSBtbTgxeF9tYWNfb3BzX3N0YV9zdGF0aXN0aWNzLFxuMjI1MTpcdFx0LmdldF9leHBlY3RlZF90aHJvdWdocHV0ID0gbW04MXhfZ2V0X2V4cGVjdGVkX3Rocm91Z2hwdXQsXG4yMjUyOlx0XHQuaHdfc2NhbiA9IG1tODF4X21hY19vcHNfaHdfc2NhbixcbjIyNTM6XHRcdC5jYW5jZWxfaHdfc2NhbiA9IG1tODF4X21hY19vcHNfY2FuY2VsX2h3X3NjYW4sXG4yMjU0Olx0XHQuZ2V0X3R4cG93ZXIgPSBtbTgxeF9tYWNfb3BzX2dldF90eHBvd2VyLFxuMjI1NTpcdFx0LmJzc19pbmZvX2NoYW5nZWQgPSBtbTgxeF9tYWNfb3BzX2Jzc19pbmZvX2NoYW5nZWQsXG4yMjU2Olx0XHQucHJlcGFyZV9tdWx0aWNhc3QgPSBtbTgxeF9tYWNfb3BzX3ByZXBhcmVfbXVsdGljYXN0LFxuMjI1NzpcdFx0LmNvbmZfdHggPSBtbTgxeF9tYWNfb3BzX2NvbmZfdHgsXG4yMjU4Olx0XHQuYW1wZHVfYWN0aW9uID0gbW04MXhfbWFjX29wc19hbXBkdV9hY3Rpb24sXG4yMjU5Olx0XHQuc2V0X2tleSA9IG1tODF4X21hY19vcHNfc2V0X2tleSxcbjIyNjA6XHRcdC5hZGRfY2hhbmN0eCA9IGllZWU4MDIxMV9lbXVsYXRlX2FkZF9jaGFuY3R4LFxuMjI2MTpcdFx0LnJlbW92ZV9jaGFuY3R4ID0gaWVlZTgwMjExX2VtdWxhdGVfcmVtb3ZlX2NoYW5jdHgsXG4yMjYyOlx0XHQuY2hhbmdlX2NoYW5jdHggPSBpZWVlODAyMTFfZW11bGF0ZV9jaGFuZ2VfY2hhbmN0eCxcbjIyNjM6XHRcdC5zd2l0Y2hfdmlmX2NoYW5jdHggPSBpZWVlODAyMTFfZW11bGF0ZV9zd2l0Y2hfdmlmX2NoYW5jdHgsXG4yMjY0Olx0fTtcbjIyNjU6XHRcbjIyNjY6XHRzdGF0aWMgdm9pZCBtbTgxeF9yZWdfbm90aWZpZXIoc3RydWN0IHdpcGh5ICp3aXBoeSxcbjIyNjc6XHRcdFx0XHQgICAgICAgc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdClcbjIyNjg6XHR7XG4yMjY5Olx0XHRpbnQgcmV0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTg4OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBmb3IgU3l6a2FsbGVyIEZ1enppbmcgb2YgdGhlIG1tODF4IERyaXZlcioqCgpPa2F5LCBzbyBgbW04MXhfbWFjX2NoZWNrX2Z3X2Rpc2FibGVkX2NoYW5zYCBpcyB0aGUgZnVuY3Rpb24gb2YgaW50ZXJlc3QgaGVyZSwgdHJpZ2dlcmVkIHdoZW4gYW4gaW50ZXJmYWNlIGlzIGFkZGVkLCBvciB0aHJvdWdoIHJlZ2lzdGVyIG5vdGlmaWVycyBvciByZXN0YXJ0cy4gVGhpcyBpcyBmb3IgTW9yc2UgTWljcm8gTU04MXggd2lyZWxlc3MgZGV2aWNlcywgd2hpY2ggaXMgZ3JlYXQgYmVjYXVzZSBpdCBzdXBwb3J0cyBib3RoIFVTQiAoYENPTkZJR19NTTgxWF9VU0JgKSBhbmQgU0RJTyAoYENPTkZJR19NTTgxWF9TRElPYCkuIFRoZSBrZXkgcXVlc3Rpb24gaW4gbXkgbWluZCBpcywgY2FuIHRoaXMgYmUgZWZmZWN0aXZlbHkgZnV6emVkIHdpdGggc3l6a2FsbGVyPyBUaGUgYW5zd2VyIGlzIGxpa2VseSB5ZXMsIHNpbmNlIHN5emthbGxlciBpcyBrbm93biB0byBoYXZlIGV4Y2VsbGVudCBVU0IgZHJpdmVyIGZ1enppbmcgY2FwYWJpbGl0aWVzIHZpYSBkdW1teV9oY2QsIHJhdy1nYWRnZXQsIGFuZCBVU0IgZW11bGF0aW9uLgoKU2luY2Ugc3l6a2FsbGVyIGNhbiBkZWZpbml0ZWx5IGZ1enogVVNCIGRyaXZlcnMsIHRoZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB3aGF0IGhhcHBlbnMgd2hlbiBhIFVTQiBkZXZpY2Ugd2l0aCBWSUQgMHgzMjViIChNTTgxWF9WRU5ET1JfSUQpIGlzIGNvbm5lY3RlZC4gVGhpcyB0cmlnZ2VycyBgbW04MXhfdXNiX3Byb2JlYC4gTm93LCBkb2VzIGBtbTgxeF91c2JfcHJvYmVgIHJlcXVpcmUgZmlybXdhcmUgb3IgZG9lcyBpdCBkaXJlY3RseSBjb21tdW5pY2F0ZSB3aXRoIHRoZSBVU0IgZGV2aWNlPyBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBjb2RlLCBzcGVjaWZpY2FsbHkgY2hlY2tpbmcgYG1tODF4X2NvcmVfYXR0YWNoX3JlZ3NgLCBmaXJtd2FyZSBsb2FkaW5nLCBhbmQgcmVsYXRlZCBmaWxlcy4gTGV0IG1lIHN0YXJ0IGxvb2tpbmcgYXQgYGZ3LmNgLCBgaHcuY2AsIGFuZCBgY29yZS5jYCB0byB1bmRlcnN0YW5kIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGFuZCBpZGVudGlmeSBwb3RlbnRpYWwgZnV6emluZyBlbnRyeSBwb2ludHMuIFRoaXMgY291bGQgYmUgcHJvbWlzaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZXF1ZXN0X2Zpcm13YXJlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmM9NjkxPWludCBtbTgxeF9md19pbml0KHN0cnVjdCBtbTgxeCAqbW9ycywgYm9vbCByZXNldClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmMtNzIyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jOjcyMzpcdHJldCA9IHJlcXVlc3RfZmlybXdhcmUoXHUwMDI2YmNmLCBiY2ZfcGF0aCwgbW9ycy1cdTAwM2VkZXYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTcyNC1cdGlmIChyZXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI2MzIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA4NTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgZm9yIE91dC1vZi1Cb3VuZHMgQWNjZXNzIGluIG1tODF4IEZpcm13YXJlIERpc2FibGVkIENoYW5uZWxzIENoZWNrKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgYG1tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFuc2AgZnVuY3Rpb24gYW5kIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2Ugd2UgaGF2ZSBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IGhlcmU6IGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGluIGhvdyB0aGUgZnVuY3Rpb24gaGFuZGxlcyB0aGUgbnVtYmVyIG9mIGRpc2FibGVkIGNoYW5uZWxzIHJlcG9ydGVkIGJ5IHRoZSBkZXZpY2UgZmlybXdhcmUuCgpUaGUgY29kZSBhbGxvY2F0ZXMgYSBidWZmZXIsIGByZXNwYCwgdG8gcmVjZWl2ZSB0aGUgZGlzYWJsZWQgY2hhbm5lbCBpbmZvcm1hdGlvbi4gVGhlIHNpemUgb2YgdGhpcyBidWZmZXIgaXMgYmFzZWQgb24gdGhlIGtub3duIHNpemUgb2YgYG1vcnNfczFnaHpfY2hhbm5lbHNgICh3aGljaCBsb29rcyBsaWtlIGFuIGFycmF5IG9mIGBpZWVlODAyMTFfY2hhbm5lbGAgc3RydWN0dXJlcykgYW5kIHNvbWUgaGVhZGVyIGluZm9ybWF0aW9uLiBUaGVuLCBpdCBjYWxscyBgbW04MXhfY21kX2dldF9kaXNhYmxlZF9jaGFubmVsc2AgdG8gcG9wdWxhdGUgYHJlc3BgLgoKVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhlIHNlY29uZCBsb29wLiBJdCBpdGVyYXRlcyB0aHJvdWdoIHRoZSBgcmVzcC0mZ3Q7Y2hhbm5lbHNgIGFycmF5LCB0aGUgc2l6ZSBvZiB3aGljaCBpcyBkZXRlcm1pbmVkIGJ5IGByZXNwLSZndDtuX2NoYW5uZWxzYCwgYSB2YWx1ZSB0aGF0IGNvbWVzIGRpcmVjdGx5IGZyb20gdGhlIGRldmljZSBmaXJtd2FyZS4gVGhlIHBhdGNoIGluY2x1ZGVzIGEgY3J1Y2lhbCBjaGVjazogaXQgdmVyaWZpZXMgdGhhdCBgcmVzcC0mZ3Q7bl9jaGFubmVsc2AgZG9lc24mIzM5O3QgZXhjZWVkIHRoZSBrbm93biBhcnJheSBzaXplIG9mIGBtb3JzX3MxZ2h6X2NoYW5uZWxzYC4gKlRoYXQmIzM5O3MqIHRoZSBmaXguIFdpdGhvdXQgdGhpcyBjaGVjaywgdGhlIGxvb3AgY291bGQgcmVhZCBiZXlvbmQgdGhlIGFsbG9jYXRlZCBidWZmZXIsIGxlYWRpbmcgdG8gYSBjcmFzaCBvciwgd29yc2UsIGFyYml0cmFyeSBtZW1vcnkgZGlzY2xvc3VyZSBvciBjb3JydXB0aW9uLgoKVGhlIHZ1bG5lcmFiaWxpdHkgc3RlbXMgZnJvbSB0aGUgZmFjdCB0aGF0IGZpcm13YXJlIGRhdGEgaXMgYmVpbmcgdHJ1c3RlZCB3aXRob3V0IGEgc2FuaXR5IGNoZWNrLiBJZiB0aGUgZmlybXdhcmUgcmV0dXJucyBhIHZhbHVlIGZvciBgbl9jaGFubmVsc2AgdGhhdCYjMzk7cyBsYXJnZXIgdGhhbiB3aGF0IHRoZSBkcml2ZXIgZXhwZWN0cywgd2UgaGF2ZSBhIHByb2JsZW0uCgpOb3csIGxldCYjMzk7cyB0aGluayBhYm91dCByZWFjaGFiaWxpdHkuIElzIHRoaXMgc29tZXRoaW5nIHRoYXQgY2FuIGJlIHByYWN0aWNhbGx5IGV4cGxvaXRlZD8gVGhpcyBpc24mIzM5O3QganVzdCBhIHRoZW9yZXRpY2FsIGlzc3VlLiBXZSBuZWVkIHRvIGNvbnNpZGVyIGhvdyBhY2Nlc3NpYmxlIHRoaXMgY29kZSBwYXRoIGlzLgoKVGhlIGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBpc24mIzM5O3Qgc29tZXRoaW5nIHRoYXQmIzM5O3MgYXV0b21hdGljYWxseSBub24tcmVhY2hhYmxlIG9yIHVuZXhlY3V0YWJsZS4gSG93ZXZlciwgdGhlIE1NODFYIGRyaXZlciAqZG9lcyogc3VwcG9ydCBVU0IgKGBDT05GSUdfTU04MVhfVVNCYCkuIFRoaXMgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGlzIG1lYW5zIGl0IGNhbiBwb3RlbnRpYWxseSBiZSBlbXVsYXRlZCB2aWEgVVNCIGdhZGdldCAoUmF3IEdhZGdldCAvIER1bW15IEhDRCkgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkuCgpBIGxpdHRsZSBtb3JlIGRpZ2dpbmcgcmV2ZWFscyB0aGF0IHllcywgVVNCIGRyaXZlcnMgKmFyZSogY29uc2lkZXJlZCByZWFjaGFibGUsIGFjY29yZGluZyB0byB0aGUgY3JpdGVyaWEgZGVmaW5lZC4gVmlydHVhbCBidXNlcyBsaWtlIFVTQiBnYWRnZXQgYXJlIGV4cGxpY2l0bHkgbGlzdGVkIGFzIGFuIGVudHJ5LgoKU28sIHRoaXMgbG9va3MgbGlrZSBhICpwb3RlbnRpYWxseSBleHBsb2l0YWJsZSogdnVsbmVyYWJpbGl0eSwgYXNzdW1pbmcgd2UgY2FuIGNvbnRyb2wgdGhlIGZpcm13YXJlJiMzOTtzIHJlc3BvbnNlIGFuZCBnZXQgaXQgdG8gcmV0dXJuIGEgbWFsZm9ybWVkIGBuX2NoYW5uZWxzYCB2YWx1ZS4gVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIHdlIGNhbiBjb250cm9sIHRoYXQgcmV0dXJuIHZhbHVlLgoKVGhlcmVmb3JlLCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL0tjb25maWdgIGFuZCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9LY29uZmlnYCB0byBzZWUgd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIG5lZWRlZCBmb3IgVVNCIHN1cHBvcnQgdG8gY29uZmlybSB0aGlzIHJlYWNoYWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgV0xBTl9WRU5ET1JfTU9SU0VNSUNST1xuICAgMzpcdFx0Ym9vbCBcJiMzNDtNb3JzZSBNaWNybyBkZXZpY2VzXCYjMzQ7XG4gICA0Olx0XHRkZWZhdWx0IHlcbiAgIDU6XHRcdGhlbHBcbiAgIDY6XHRcdCAgSWYgeW91IGhhdmUgYSB3aXJlbGVzcyBjYXJkIGJlbG9uZ2luZyB0byB0aGlzIGNsYXNzLCBzYXkgWS5cbiAgIDc6XHRcbiAgIDg6XHRcdCAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2VzbiYjMzk7dCBkaXJlY3RseSBhZmZlY3QgdGhlXG4gICA5Olx0XHQgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGwgdGhlXG4gIDEwOlx0XHQgIHF1ZXN0aW9ucyBhYm91dCB0aGVzZSBjYXJkcy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbCBiZSBhc2tlZCBmb3JcbiAgMTE6XHRcdCAgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxuICAxMjpcdFxuICAxMzpcdGlmIFdMQU5fVkVORE9SX01PUlNFTUlDUk9cbiAgMTQ6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9LY29uZmlnXCYjMzQ7XG4gIDE1Olx0ZW5kaWYgIyBXTEFOX1ZFTkRPUl9NT1JTRU1JQ1JPXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MzcxCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgTU04MXggV2lyZWxlc3MgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGlzIE1vcnNlIE1pY3JvIE1NODF4IHdpcmVsZXNzIGRyaXZlci4gRmlyc3QsIEkmIzM5O20gY2hlY2tpbmcgdGhlIGBLY29uZmlnYCBmaWxlIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2AuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSB0aGUgbWFpbiBgTU04MVhgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJdCYjMzk7cyBhIHRyaXN0YXRlIG9wdGlvbiwgYnV0IGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgaWYgYENPTVBJTEVfVEVTVGAgaXMgZGVmaW5lZC4gTWFrZXMgc2Vuc2Ug4oCTIHByb2JhYmx5IGZvciB0ZXN0IGJ1aWxkcy4gSXQgZGVwZW5kcyBvbiBgTUFDODAyMTFgLCBhcyBleHBlY3RlZCBmb3IgYSB3aXJlbGVzcyBkcml2ZXIsIGFuZCBpdCBzZWxlY3RzIGBGV19MT0FERVJgIGFuZCBgQ1JDN2AsIGluZGljYXRpbmcgaXQgcmVsaWVzIG9uIGZpcm13YXJlIGxvYWRpbmcgYW5kIGxpa2VseSB1c2VzIENSQzcgZm9yIGVycm9yIGRldGVjdGlvbi4gVGhlIGhlbHAgdGV4dCBjb25maXJtcyB0aGF0IHRoaXMgaXMgdGhlIGJhc2UgbW9kdWxlIGZvciBNTTgxeHggY2hpcHNldCBzdXBwb3J0LgoKVGhlbiwgdGhlcmUgYXJlIGBNTTgxWF9VU0JgIGFuZCBgTU04MVhfU0RJT2Agb3B0aW9ucy4gVGhleSYjMzk7cmUgYWxzbyB0cmlzdGF0ZSwgbWVhbmluZyB0aGV5IGNhbiBiZSBidWlsdCBhcyBhIG1vZHVsZSBvciBidWlsdCBpbi4gQm90aCBkZXBlbmQgb24gYE1BQzgwMjExYCBhbmQgc3BlY2lmaWMgaW50ZXJmYWNlIGRlcGVuZGVuY2llczogYFVTQmAgZm9yIHRoZSBVU0IgaW50ZXJmYWNlIGFuZCBgTU1DYCBmb3IgdGhlIFNESU8gaW50ZXJmYWNlLCByZXNwZWN0aXZlbHkuIFRoZXkgYm90aCBzZWxlY3QgYE1NODFYYCwgbWVhbmluZyB0aGUgYmFzZSBkcml2ZXIgaXMgcmVxdWlyZWQgZm9yIGVpdGhlciBpbnRlcmZhY2UuIFRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgc2V0dXAuCgpOb3csIEkmIzM5O2xsIHF1aWNrbHkgZ2xhbmNlIGF0IHRoZSBgTWFrZWZpbGVgIGluIHRoZSBzYW1lIGRpcmVjdG9yeSB0byBjb25maXJtIHdoaWNoIG9iamVjdCBmaWxlcyBhcmUgYWN0dWFsbHkgYnVpbHQgYmFzZWQgb24gdGhlc2UgY29uZmlndXJhdGlvbnMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBkcml2ZXIgaXMgc3RydWN0dXJlZCBhbmQgd2hhdCB0aGUgcmVzdWx0aW5nIGJpbmFyaWVzIHdpbGwgbG9vayBsaWtlLiBOZWVkIHRvIGVuc3VyZSB0aGUgYnVpbGQgZW52aXJvbm1lbnQgc3VwcG9ydHMgdGhpcyBhcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0XG4gICAzOlx0b2JqLSQoQ09ORklHX01NODFYKSAmIzQzOz0gbW04MXhfY29yZS5vXG4gICA0Olx0XG4gICA1Olx0bW04MXhfY29yZS15ICYjNDM7PSBjb3JlLm9cbiAgIDY6XHRtbTgxeF9jb3JlLXkgJiM0Mzs9IG1hYy5vXG4gICA3Olx0bW04MXhfY29yZS15ICYjNDM7PSBody5vXG4gICA4Olx0bW04MXhfY29yZS15ICYjNDM7PSBmdy5vXG4gICA5Olx0bW04MXhfY29yZS15ICYjNDM7PSBjb21tYW5kLm9cbiAgMTA6XHRtbTgxeF9jb3JlLXkgJiM0Mzs9IHBzLm9cbiAgMTE6XHRtbTgxeF9jb3JlLXkgJiM0Mzs9IHNrYnEub1xuICAxMjpcdG1tODF4X2NvcmUteSAmIzQzOz0geWFwc19ody5vXG4gIDEzOlx0bW04MXhfY29yZS15ICYjNDM7PSB5YXBzLm9cbiAgMTQ6XHRtbTgxeF9jb3JlLXkgJiM0Mzs9IHJjLm9cbiAgMTU6XHRtbTgxeF9jb3JlLXkgJiM0Mzs9IG1tcmMub1xuICAxNjpcdFxuICAxNzpcdG9iai0kKENPTkZJR19NTTgxWF9VU0IpICYjNDM7PSBtbTgxeF91c2Iub1xuICAxODpcdG1tODF4X3VzYi15ICYjNDM7PSB1c2Iub1xuICAxOTpcdFxuICAyMDpcdG9iai0kKENPTkZJR19NTTgxWF9TRElPKSAmIzQzOz0gbW04MXhfc2Rpby5vXG4gIDIxOlx0bW04MXhfc2Rpby15ICYjNDM7PSBzZGlvLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU0MDkKCQkJCQkJCW91dHB1dDogMjE0CgkJCQkJCQl0aG91Z2h0czogNjc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBNTTgxeCBXaXJlbGVzcyBEcml2ZXIgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSBzZWUgdGhhdCB0aGUgYG1hYy5vYCBvYmplY3QgZmlsZSBpcyBwYXJ0IG9mIGBtbTgxeF9jb3JlLm9gLCB3aGljaCBpcyBvbmx5IGNvbXBpbGVkIGlmIGBDT05GSUdfTU04MVhgIGlzIGVuYWJsZWQuIFRoYXQgaW4gdHVybiwgaXMgc2VsZWN0ZWQgYnkgYENPTkZJR19NTTgxWF9VU0JgLiBJJiMzOTttIGFsc28gbm90aW5nIHRoZSBkZXBlbmRlbmNpZXMgaGVyZTogYENPTkZJR19NTTgxWF9VU0JgIHJlcXVpcmVzIGBNQUM4MDIxMWAsIGBVU0JgLCBhbmQgYFdMQU5fVkVORE9SX01PUlNFTUlDUk9gLiBHb29kLgoKVGhlIGNyaXRpY2FsIGZ1bmN0aW9uIGJlaW5nIG1vZGlmaWVkIGFwcGVhcnMgdG8gYmUgYG1tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFuc2AuICBJdCYjMzk7cyBzdGF0aWMsIHNvIGlubGluaW5nIGlzIGEgcG9zc2liaWxpdHksIG9yIGl0IG1heSBvbmx5IGJlIGNhbGxlZCBpbnRlcm5hbGx5LiBPa2F5LCBsZXQmIzM5O3Mgc2VlIGhvdyBpdCYjMzk7cyB1c2VkLiBSaWdodCwgYG1tODF4X21hY19yZXN0YXJ0YCBjYWxscyBpdC4gQW5kIGxvb2tpbmcgZnVydGhlciB1cCB0aGUgY2FsbCBjaGFpbiwgYG1tODF4X21hY19vcHNfYWRkX2ludGVyZmFjZWAgYW5kIGBtbTgxeF9yZWdfbm90aWZpZXJgIGNhbGwgYG1tODF4X21hY19yZXN0YXJ0YC4gVGhlIFVTQiBwcm9iZSBmdW5jdGlvbiwgYG1tODF4X3VzYl9wcm9iZWAsIHdoaWNoIGlzIGluIGB1c2IuY2AsIGlzIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgcmVnaXN0cmF0aW9uIHBvaW50LgoKVG8gcmVjYXAsIGFuZCBmb3IgZnV6emluZywgSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aG9zZSBlbnRyeSBwb2ludHM6IGBtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnNgLCBgbW04MXhfbWFjX3Jlc3RhcnRgLCBgbW04MXhfbWFjX29wc19hZGRfaW50ZXJmYWNlYCwgYW5kIGBtbTgxeF9yZWdfbm90aWZpZXJgLgoKTm93LCB0aGUgY29uZmlndXJhdGlvbiBhc3BlY3RzLiBUbyBlbmFibGUgdGhpcyBjb2RlIHBhdGggYW5kIGZ1enogaXQsIEkmIzM5O2xsIG5lZWQgdG8gc2V0IHRoZXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9uczogYFdMQU5fVkVORE9SX01PUlNFTUlDUk9gLCBgTU04MVhgLCBgTU04MVhfVVNCYCwgYE1BQzgwMjExYCwgYW5kIGBVU0JgLgoKQWxyaWdodCwgSSBoYXZlIGEgY2xlYXIgcGljdHVyZS4gVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgd2l0aGluIGBtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnMoKWAgdG8gaGFuZGxlIGNhc2VzIHdoZXJlIHRoZSBmaXJtd2FyZSByZXR1cm5zIG1vcmUgY2hhbm5lbHMgdGhhbiB0aGUgZHJpdmVyIGhhcyBhbGxvY2F0ZWQgc3BhY2UgZm9yLiBUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGVzcGVjaWFsbHkgc2luY2UgdGhlIGRyaXZlciBzdXBwb3J0cyBVU0IgZGV2aWNlcywgd2hpY2ggYXJlIHJlYWRpbHkgZW11bGF0YWJsZS4KCkJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgdGhlIHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtXTEFOX1ZFTkRPUl9NT1JTRU1JQ1JPJiMzNDssCiAgICAmIzM0O01NODFYJiMzNDssCiAgICAmIzM0O01NODFYX1VTQiYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnMmIzM0OywKICAgICYjMzQ7bW04MXhfbWFjX3Jlc3RhcnQmIzM0OywKICAgICYjMzQ7bW04MXhfbWFjX29wc19hZGRfaW50ZXJmYWNlJiMzNDssCiAgICAmIzM0O21tODF4X3JlZ19ub3RpZmllciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYm91bmRzIGNoZWNrIG9uIGZpcm13YXJlIHJlc3BvbnNlcyBpbiBtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnMoKSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgd2hlbiBuX2NoYW5uZWxzIGV4Y2VlZHMgdGhlIHNpemUgb2YgbW9yc19zMWdoel9jaGFubmVscy4gVGhlIE1NODF4IHdpcmVsZXNzIGRyaXZlciBzdXBwb3J0cyBVU0IgaW50ZXJmYWNlcyAoTU04MVhfVVNCKSB3aGljaCBjYW4gYmUgcHJvYmVkIGFuZCBmdXp6ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZW11bGF0aW9uL2dhZGdldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1dMQU5fVkVORE9SX01PUlNFTUlDUk8mIzM0OywKICAgICYjMzQ7TU04MVgmIzM0OywKICAgICYjMzQ7TU04MVhfVVNCJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFucyYjMzQ7LAogICAgJiMzNDttbTgxeF9tYWNfcmVzdGFydCYjMzQ7LAogICAgJiMzNDttbTgxeF9tYWNfb3BzX2FkZF9pbnRlcmZhY2UmIzM0OywKICAgICYjMzQ7bW04MXhfcmVnX25vdGlmaWVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBib3VuZHMgY2hlY2sgb24gZmlybXdhcmUgcmVzcG9uc2VzIGluIG1tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFucygpIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyB3aGVuIG5fY2hhbm5lbHMgZXhjZWVkcyB0aGUgc2l6ZSBvZiBtb3JzX3MxZ2h6X2NoYW5uZWxzLiBUaGUgTU04MXggd2lyZWxlc3MgZHJpdmVyIHN1cHBvcnRzIFVTQiBpbnRlcmZhY2VzIChNTTgxWF9VU0IpIHdoaWNoIGNhbiBiZSBwcm9iZWQgYW5kIGZ1enplZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBlbXVsYXRpb24vZ2FkZ2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgb24gYHJlc3AtXHUwMDNlbl9jaGFubmVsc2AgYWdhaW5zdCBgQVJSQVlfU0laRShtb3JzX3MxZ2h6X2NoYW5uZWxzKWAgdG8gcHJldmVudCBoZWFwIG91dC1vZi1ib3VuZHMgcmVhZHMgd2hlbiBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgYHJlc3AtXHUwMDNlY2hhbm5lbHNgIGFycmF5IGluIGBtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnMoKWAuXG5cbkhlYXAgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgYXJlIHN0YW5kYXJkIHNwYXRpYWwgbWVtb3J5IHNhZmV0eSB2aW9sYXRpb25zIGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcmVzcG9uc2UgYnVmZmVyIGByZXNwYCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvYygpYCwgYW5kIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBhY2Nlc3Nlcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MgaW50cm9kdWNlZCBvciBtb2RpZmllZCBieSB0aGlzIGNoYW5nZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjdkMTU3YzA4ZTdhYmM5MmFlMDE4ZDZlNjRhZjI5YTUyMzhiMDgzZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMDc6MjM6NDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYwppbmRleCAwOGNhMTE2YTY4YjQ3Li5lOGVmMGQ5ZWViZDc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMKQEAgLTI4OCw2ICYjNDM7Mjg4LDExIEBAIHN0YXRpYyB2b2lkIG1tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFucyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIAkJY2gtJmd0O2ZsYWdzICZhbXA7PSB+SUVFRTgwMjExX0NIQU5fUzFHX05PX1BSSU1BUlk7CiAJfQogCiYjNDM7CWlmIChsZTMyX3RvX2NwdShyZXNwLSZndDtuX2NoYW5uZWxzKSAmZ3Q7IEFSUkFZX1NJWkUobW9yc19zMWdoel9jaGFubmVscykpIHsKJiM0MzsJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwogCWZvciAoaSA9IDA7IGkgJmx0OyBsZTMyX3RvX2NwdShyZXNwLSZndDtuX2NoYW5uZWxzKTsgaSYjNDM7JiM0MzspIHsKIAkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaDsKIAkJc3RydWN0IGhvc3RfY21kX2Rpc2FibGVkX2NoYW5uZWxfZW50cnkgKmVudHJ5ID0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxODgKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiA4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1vcnNlIE1pY3JvIE1BQyBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gdGhlIHVzZXIgd2FudHMgbWUgdG8gZGl2ZSBpbnRvIGEgcGF0Y2ggYWZmZWN0aW5nIHRoZSBgbW04MXhgIE1BQyBsYXllciB3aXRoaW4gdGhlIE1vcnNlIE1pY3JvIHdpcmVsZXNzIGRyaXZlciwgc3BlY2lmaWNhbGx5IGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvLCBvZiBjb3Vyc2UsIGFwcHJvYWNoIHRoaXMgbWV0aG9kaWNhbGx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlIGluIGNvbnRleHQuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgcmVhZGluZyB0aGUgcGF0Y2ggaXRzZWxmIGFuZCBtYWtpbmcgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIG1vZGlmaWNhdGlvbnMsIGFuZCB0aGVuIEkmIzM5O2xsIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcuCgpGaXJzdCBJIG5lZWQgdG8gZ3JhYiB0aGUgc291cmNlIGZvciBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuY2AuIEkgd2lsbCB1c2UgdGhlIHRvb2wgJiMzOTtyZWFkLWZpbGUmIzM5OyB0byBwdWxsIHRoZSBjb2RlIGFyb3VuZCBsaW5lIDI4OC4gVGhlbiBJIGNhbiBmaWd1cmUgb3V0IHdoZXJlIHRoZSBlZGl0IGxpdmVzLiBPbmNlIEkgY2FuIHNlZSB0aGF0LCBJIHdpbGwgdW5kZXJzdGFuZCB3aGF0IGlzIGJlaW5nIGNoYW5nZWQgYW5kIHdoeS4gVGhhdCYjMzk7cyB0aGUgZmlyc3Qgc3RlcC4gTGV0JiMzOTtzIGdldCB0byB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI2MDpcdH1cbiAyNjE6XHRcbiAyNjI6XHRzdGF0aWMgdm9pZCBtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpXG4gMjYzOlx0e1xuIDI2NDpcdFx0aW50IHJldCA9IDA7XG4gMjY1Olx0XHR1MzIgaTtcbiAyNjY6XHRcdHN0cnVjdCBtbTgxeCAqbW9ycyA9IGh3LVx1MDAzZXByaXY7XG4gMjY3Olx0XHRzdHJ1Y3QgaG9zdF9jbWRfcmVzcF9nZXRfZGlzYWJsZWRfY2hhbm5lbHMgKnJlc3A7XG4gMjY4Olx0XHR1MzIgcmVzcF9sZW4gPSBzaXplb2Yoc3RydWN0IGhvc3RfY21kX2Rpc2FibGVkX2NoYW5uZWxfZW50cnkpICpcbiAyNjk6XHRcdFx0XHQgICAgICAgQVJSQVlfU0laRShtb3JzX3MxZ2h6X2NoYW5uZWxzKSAmIzQzO1xuIDI3MDpcdFx0XHQgICAgICAgc2l6ZW9mKCpyZXNwKTtcbiAyNzE6XHRcbiAyNzI6XHRcdHJlc3AgPSBremFsbG9jKHJlc3BfbGVuLCBHRlBfS0VSTkVMKTtcbiAyNzM6XHRcdGlmICghcmVzcCkge1xuIDI3NDpcdFx0XHRyZXQgPSAtRU5PTUVNO1xuIDI3NTpcdFx0XHRnb3RvIG91dDtcbiAyNzY6XHRcdH1cbiAyNzc6XHRcbiAyNzg6XHRcdHJldCA9IG1tODF4X2NtZF9nZXRfZGlzYWJsZWRfY2hhbm5lbHMobW9ycywgcmVzcCwgcmVzcF9sZW4pO1xuIDI3OTpcdFx0aWYgKHJldClcbiAyODA6XHRcdFx0Z290byBvdXQ7XG4gMjgxOlx0XG4gMjgyOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKG1vcnNfczFnaHpfY2hhbm5lbHMpOyBpJiM0MzsmIzQzOykge1xuIDI4MzpcdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoID0gXHUwMDI2bW9yc19zMWdoel9jaGFubmVsc1tpXTtcbiAyODQ6XHRcbiAyODU6XHRcdFx0aWYgKGNoLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRClcbiAyODY6XHRcdFx0XHRjb250aW51ZTtcbiAyODc6XHRcbiAyODg6XHRcdFx0Y2gtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+SUVFRTgwMjExX0NIQU5fUzFHX05PX1BSSU1BUlk7XG4gMjg5Olx0XHR9XG4gMjkwOlx0XG4gMjkxOlx0XHRpZiAobGUzMl90b19jcHUocmVzcC1cdTAwM2VuX2NoYW5uZWxzKSBcdTAwM2UgQVJSQVlfU0laRShtb3JzX3MxZ2h6X2NoYW5uZWxzKSkge1xuIDI5MjpcdFx0XHRyZXQgPSAtRUlOVkFMO1xuIDI5MzpcdFx0XHRnb3RvIG91dDtcbiAyOTQ6XHRcdH1cbiAyOTU6XHRcbiAyOTY6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxlMzJfdG9fY3B1KHJlc3AtXHUwMDNlbl9jaGFubmVscyk7IGkmIzQzOyYjNDM7KSB7XG4gMjk3Olx0XHRcdHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2g7XG4gMjk4Olx0XHRcdHN0cnVjdCBob3N0X2NtZF9kaXNhYmxlZF9jaGFubmVsX2VudHJ5ICplbnRyeSA9XG4gMjk5Olx0XHRcdFx0XHUwMDI2cmVzcC1cdTAwM2VjaGFubmVsc1tpXTtcbiAzMDA6XHRcbiAzMDE6XHRcdFx0aWYgKGVudHJ5LVx1MDAzZWJ3X21oeiAhPSAxKVxuIDMwMjpcdFx0XHRcdGNvbnRpbnVlO1xuIDMwMzpcdFxuIDMwNDpcdFx0XHRjaCA9IGllZWU4MDIxMV9nZXRfY2hhbm5lbF9raHooXG4gMzA1Olx0XHRcdFx0aHctXHUwMDNld2lwaHksXG4gMzA2Olx0XHRcdFx0S0haMTAwX1RPX0tIWihsZTE2X3RvX2NwdShlbnRyeS1cdTAwM2VmcmVxXzEwMGtoeikpKTtcbiAzMDc6XHRcdFx0aWYgKCFjaClcbiAzMDg6XHRcdFx0XHRjb250aW51ZTtcbiAzMDk6XHRcbiAzMTA6XHRcdFx0Y2gtXHUwMDNlZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fUzFHX05PX1BSSU1BUlk7XG4gMzExOlx0XHRcdGRldl9kYmcobW9ycy1cdTAwM2VkZXYsIFwmIzM0O3NldCBOT19QUklNQVJZIG9uICV1IEtIelwmIzM0OyxcbiAzMTI6XHRcdFx0XHRpZWVlODAyMTFfY2hhbm5lbF90b19raHooY2gpKTtcbiAzMTM6XHRcdH1cbiAzMTQ6XHRcbiAzMTU6XHRvdXQ6XG4gMzE2Olx0XHRpZiAocmV0KVxuIDMxNzpcdFx0XHRkZXZfZXJyKG1vcnMtXHUwMDNlZGV2LCBcJiMzNDtmYWlsZWQgdG8gc2V0IGRpc2FibGVkIHByaW1hcnkgY2hhbm5lbHNcJiMzNDspO1xuIDMxODpcdFxuIDMxOTpcdFx0a2ZyZWUocmVzcCk7XG4gMzIwOlx0fVxuIDMyMTpcdFxuIDMyMjpcdHN0YXRpYyBpbnQgbW04MXhfbWFjX29wc19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodylcbiAzMjM6XHR7XG4gMzI0Olx0XHRzdHJ1Y3QgbW04MXggKm1vcnMgPSBody1cdTAwM2Vwcml2O1xuIDMyNTpcdFxuIDMyNjpcdFx0bW9ycy1cdTAwM2VzdGFydGVkID0gdHJ1ZTtcbiAzMjc6XHRcdHJldHVybiAwO1xuIDMyODpcdH1cbiAzMjk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYwNgoJCQkJCQkJb3V0cHV0OiAxNzEKCQkJCQkJCXRob3VnaHRzOiA2NTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWdWxuZXJhYmlsaXR5IFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGNsYXNzaWMgaGVhcCBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0eS4gSGVyZSYjMzk7cyB3aGF0JiMzOTtzIGhhcHBlbmluZzogYSByZXNwb25zZSBidWZmZXIsIGByZXNwYCwgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgLiBUaGlzIGVuc3VyZXMgaXQmIzM5O3MgemVyby1pbml0aWFsaXplZC4gVGhlbiwgYSBmdW5jdGlvbiBgbW04MXhfY21kX2dldF9kaXNhYmxlZF9jaGFubmVsc2AgZmlsbHMgdGhpcyBidWZmZXIgd2l0aCBkYXRhLiBUaGUgY3J1eCBvZiB0aGUgaXNzdWUgbGllcyBpbiBob3cgYHJlc3AtJmd0O25fY2hhbm5lbHNgIGlzIGhhbmRsZWQuIElmIHRoZSBmaXJtd2FyZSwgb3IgYSBtYWxmb3JtZWQgcmVzcG9uc2UsIHByb3ZpZGVzIGEgc3VzcGljaW91c2x5IGxhcmdlIHZhbHVlIGZvciBgbl9jaGFubmVsc2AsIHRoZSBzdWJzZXF1ZW50IGxvb3AgYGZvciAoaSA9IDA7IGkgJmx0OyBsZTMyX3RvX2NwdShyZXNwLSZndDtuX2NoYW5uZWxzKTsgaSYjNDM7JiM0MzspYCBjb3VsZCBpbmRleCBiZXlvbmQgdGhlIGJvdW5kcyBvZiB0aGUgYG1vcnNfczFnaHpfY2hhbm5lbHNgIGFycmF5LiBUaGF0JiMzOTtzIGEgdGV4dGJvb2sgb3V0LW9mLWJvdW5kcyBoZWFwIHJlYWQsIGEgZGVmaW5pdGUgS0FTQU4tZGV0ZWN0YWJsZSBidWcuCgpUaGUgcGF0Y2ggaXRzZWxmIGlzIHNpbXBsZTogaXQgYWRkcyBhIGNoZWNrLCBgaWYgKGxlMzJfdG9fY3B1KHJlc3AtJmd0O25fY2hhbm5lbHMpICZndDsgQVJSQVlfU0laRShtb3JzX3MxZ2h6X2NoYW5uZWxzKSlgLCB0byB2YWxpZGF0ZSB0aGUgdmFsdWUgb2YgYG5fY2hhbm5lbHNgLiBJZiBpdCBleGNlZWRzIHRoZSBhcnJheSBzaXplLCBhbiBlcnJvciwgYC1FSU5WQUxgLCBpcyByZXR1cm5lZCwgYW5kIHdlIGJhaWwgb3V0LiBUaGlzIGlzIGdvb2Q7IHdlJiMzOTtyZSBwcmV2ZW50aW5nIHRoZSBPT0IgcmVhZCBlbnRpcmVseS4KCk5vdywgSSBuZWVkIHRvIGNvbnNpZGVyIHdoZXRoZXIgdGhpcyBwYXRjaCBpdHNlbGYgaW50cm9kdWNlcyBhbnkgKm5ldyogcmlza3MsIHBhcnRpY3VsYXJseSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIGByZXNwYCBpcyBga3phbGxvY2AmIzM5O2QsIHNvIHRoYXQmIzM5O3MgZ29vZC4gYHJldGAgaXMgaW5pdGlhbGl6ZWQgdG8gMCBhbmQgb25seSBjaGFuZ2VkIHRvIC1FSU5WQUwgb24gYW4gZXJyb3IuIFRoZXJlJiMzOTtzIG5vIGtlcm5lbC10by11c2VyIGNvcHkgaGFwcGVuaW5nIGhlcmUgdGhhdCBJIGNhbiBzZWUsIHdoaWNoIGlzIGltcG9ydGFudCBmcm9tIGEgbGVhayBwZXJzcGVjdGl2ZS4gQW5kIHRoZSBrZXkgcG9pbnQgaXM6IHRoaXMgcGF0Y2ggKmFkZHJlc3NlcyogYW4gT09CIHJlYWQgdnVsbmVyYWJpbGl0eSwgc28gS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLiBLQVNBTiBpcyB0aGUgcmlnaHQgdG9vbCBmb3IgZGV0ZWN0aW5nIHRoZSBPT0IgbWVtb3J5IGFjY2Vzcy4KCkRvdWJsZS1jaGVja2luZyBhZ2FpbnN0IHRoZSBndWlkZWxpbmVzLCB0aGUgcGF0Y2ggKnNwZWNpZmljYWxseSogYWRkcmVzc2VzIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBUaGUgc3RydWN0dXJlcyBhcmUgYWxsIHplcm9lZCBvciBpbml0aWFsaXplZC4gVGhlcmUmIzM5O3Mgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBiZWluZyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuIFRoZXJlZm9yZSwgYmFzZWQgb24gdGhlIGNyaXRlcmlhLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGZhbHNlLgoKQWxyaWdodCwgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhpcyBhbmFseXNpcy4gVGltZSB0byBwcmVwYXJlIHRoZSBjYWxsIHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgb24gYHJlc3AtXHUwMDNlbl9jaGFubmVsc2AgYWdhaW5zdCBgQVJSQVlfU0laRShtb3JzX3MxZ2h6X2NoYW5uZWxzKWAgdG8gcHJldmVudCBoZWFwIG91dC1vZi1ib3VuZHMgcmVhZHMgd2hlbiBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgYHJlc3AtXHUwMDNlY2hhbm5lbHNgIGFycmF5IGluIGBtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnMoKWAuXG5cbkhlYXAgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgYXJlIHN0YW5kYXJkIHNwYXRpYWwgbWVtb3J5IHNhZmV0eSB2aW9sYXRpb25zIGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcmVzcG9uc2UgYnVmZmVyIGByZXNwYCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvYygpYCwgYW5kIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBhY2Nlc3Nlcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MgaW50cm9kdWNlZCBvciBtb2RpZmllZCBieSB0aGlzIGNoYW5nZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBvbiBgcmVzcC1cdTAwM2VuX2NoYW5uZWxzYCBhZ2FpbnN0IGBBUlJBWV9TSVpFKG1vcnNfczFnaHpfY2hhbm5lbHMpYCB0byBwcmV2ZW50IGhlYXAgb3V0LW9mLWJvdW5kcyByZWFkcyB3aGVuIGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBgcmVzcC1cdTAwM2VjaGFubmVsc2AgYXJyYXkgaW4gYG1tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFucygpYC5cblxuSGVhcCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyBhcmUgc3RhbmRhcmQgc3BhdGlhbCBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSByZXNwb25zZSBidWZmZXIgYHJlc3BgIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jKClgLCBhbmQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGFjY2Vzc2VzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGJ5IHRoaXMgY2hhbmdlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjIzOjQ2LjcxNjU4MzAyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg3MDgyNTEzOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiV0xBTl9WRU5ET1JfTU9SU0VNSUNST1wiLFxuICAgIFwiTU04MVhcIixcbiAgICBcIk1NODFYX1VTQlwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIlVTQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFuc1wiLFxuICAgIFwibW04MXhfbWFjX3Jlc3RhcnRcIixcbiAgICBcIm1tODF4X21hY19vcHNfYWRkX2ludGVyZmFjZVwiLFxuICAgIFwibW04MXhfcmVnX25vdGlmaWVyXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIG9uIGByZXNwLVxcdTAwM2VuX2NoYW5uZWxzYCBhZ2FpbnN0IGBBUlJBWV9TSVpFKG1vcnNfczFnaHpfY2hhbm5lbHMpYCB0byBwcmV2ZW50IGhlYXAgb3V0LW9mLWJvdW5kcyByZWFkcyB3aGVuIGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBgcmVzcC1cXHUwMDNlY2hhbm5lbHNgIGFycmF5IGluIGBtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnMoKWAuXFxuXFxuSGVhcCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyBhcmUgc3RhbmRhcmQgc3BhdGlhbCBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSByZXNwb25zZSBidWZmZXIgYHJlc3BgIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jKClgLCBhbmQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGFjY2Vzc2VzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGJ5IHRoaXMgY2hhbmdlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGJvdW5kcyBjaGVjayBvbiBmaXJtd2FyZSByZXNwb25zZXMgaW4gbW04MXhfbWFjX2NoZWNrX2Z3X2Rpc2FibGVkX2NoYW5zKCkgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIHdoZW4gbl9jaGFubmVscyBleGNlZWRzIHRoZSBzaXplIG9mIG1vcnNfczFnaHpfY2hhbm5lbHMuIFRoZSBNTTgxeCB3aXJlbGVzcyBkcml2ZXIgc3VwcG9ydHMgVVNCIGludGVyZmFjZXMgKE1NODFYX1VTQikgd2hpY2ggY2FuIGJlIHByb2JlZCBhbmQgZnV6emVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgVVNCIGVtdWxhdGlvbi9nYWRnZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyMzo0Ni43MTY1ODc3M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQzNTk1MzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYjdkMTU3YzA4ZTdhYmM5MmFlMDE4ZDZlNjRhZjI5YTUyMzhiMDgzZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCA3IDA3OjIzOjQ1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jXFxuaW5kZXggMDhjYTExNmE2OGI0Ny4uZThlZjBkOWVlYmQ3NSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuY1xcbkBAIC0yODgsNiArMjg4LDExIEBAIHN0YXRpYyB2b2lkIG1tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFucyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodylcXG4gXFx0XFx0Y2gtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5JRUVFODAyMTFfQ0hBTl9TMUdfTk9fUFJJTUFSWTtcXG4gXFx0fVxcbiBcXG4rXFx0aWYgKGxlMzJfdG9fY3B1KHJlc3AtXFx1MDAzZW5fY2hhbm5lbHMpIFxcdTAwM2UgQVJSQVlfU0laRShtb3JzX3MxZ2h6X2NoYW5uZWxzKSkge1xcbitcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGxlMzJfdG9fY3B1KHJlc3AtXFx1MDAzZW5fY2hhbm5lbHMpOyBpKyspIHtcXG4gXFx0XFx0c3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaDtcXG4gXFx0XFx0c3RydWN0IGhvc3RfY21kX2Rpc2FibGVkX2NoYW5uZWxfZW50cnkgKmVudHJ5ID1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjM6NDcuMjYxMTI2MTM5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo3Nzc4NDY1NDg2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJXTEFOX1ZFTkRPUl9NT1JTRU1JQ1JPXCIsXG4gICAgXCJNTTgxWFwiLFxuICAgIFwiTU04MVhfVVNCXCIsXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiVVNCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibW04MXhfbWFjX2NoZWNrX2Z3X2Rpc2FibGVkX2NoYW5zXCIsXG4gICAgXCJtbTgxeF9tYWNfcmVzdGFydFwiLFxuICAgIFwibW04MXhfbWFjX29wc19hZGRfaW50ZXJmYWNlXCIsXG4gICAgXCJtbTgxeF9yZWdfbm90aWZpZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYm91bmRzIGNoZWNrIG9uIGZpcm13YXJlIHJlc3BvbnNlcyBpbiBtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnMoKSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgd2hlbiBuX2NoYW5uZWxzIGV4Y2VlZHMgdGhlIHNpemUgb2YgbW9yc19zMWdoel9jaGFubmVscy4gVGhlIE1NODF4IHdpcmVsZXNzIGRyaXZlciBzdXBwb3J0cyBVU0IgaW50ZXJmYWNlcyAoTU04MVhfVVNCKSB3aGljaCBjYW4gYmUgcHJvYmVkIGFuZCBmdXp6ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZW11bGF0aW9uL2dhZGdldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjdkMTU3YzA4ZTdhYmM5MmFlMDE4ZDZlNjRhZjI5YTUyMzhiMDgzZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMDc6MjM6NDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuY1xuaW5kZXggMDhjYTExNmE2OGI0Ny4uZThlZjBkOWVlYmQ3NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmNcbkBAIC0yODgsNiArMjg4LDExIEBAIHN0YXRpYyB2b2lkIG1tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFucyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodylcbiBcdFx0Y2gtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+SUVFRTgwMjExX0NIQU5fUzFHX05PX1BSSU1BUlk7XG4gXHR9XG4gXG4rXHRpZiAobGUzMl90b19jcHUocmVzcC1cdTAwM2VuX2NoYW5uZWxzKSBcdTAwM2UgQVJSQVlfU0laRShtb3JzX3MxZ2h6X2NoYW5uZWxzKSkge1xuK1x0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxlMzJfdG9fY3B1KHJlc3AtXHUwMDNlbl9jaGFubmVscyk7IGkrKykge1xuIFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoO1xuIFx0XHRzdHJ1Y3QgaG9zdF9jbWRfZGlzYWJsZWRfY2hhbm5lbF9lbnRyeSAqZW50cnkgPVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjM6NDcuMjYxMTI4MjE5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTE1MDk5NzQ0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFdpcmVsZXNzIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBhc2tlZCB0byBsb29rIGF0IGEgcGF0Y2ggd2l0aGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGJlZm9yZSBldmVuICpsb29raW5nKiBhdCB0aGUgc3BlY2lmaWNzIG9mIHRoZSBwYXRjaCBpdHNlbGYsIEkgbmVlZCB0byBnZXQgYSBoaWdoLWxldmVsIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBkcml2ZXIuIEknbSBnb2luZyB0byBzdGFydCB3aXRoIGEgc3lzdGVtYXRpYyBhcHByb2FjaC4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgbW04MXhgIGlzLiBJcyBpdCBhIFBDSWUgZGV2aWNlPyBVU0I/IFNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBBbmQgaG93IGlzIHRoaXMgZHJpdmVyIHJlZ2lzdGVyZWQgd2l0aCB0aGUga2VybmVsPyBXaGF0IGJ1cyBpbmZyYXN0cnVjdHVyZSBpcyBpdCBleHBlY3RpbmcgdG8gaW50ZXJhY3Qgd2l0aD8gRG9lcyBpdCByZWx5IG9uIHNvbWUgc3BlY2lmaWMgaGFyZHdhcmUgY29uZmlndXJhdGlvbiwgb3IgaXMgaXQgbW9yZSBvZiBhIHZpcnR1YWwgYnVzIHR5cGUgc2V0dXA/XG5cbkknbGwgc3RhcnQgYnkgZGl2aW5nIGludG8gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL2AgZGlyZWN0b3J5LiBJJ2xsIHVzZSBgZ3JlcGAgb3IgZGlyZWN0b3J5IGluZGV4aW5nLCBhbmQgcmVhZGluZyB0aGUgY29kZSBkaXJlY3RseSwgSSdtIGdvaW5nIHRvIHBvcmUgb3ZlciB0aGUgYEtjb25maWdgIGZpbGUgYW5kIHRoZSBvdGhlciBzb3VyY2UgZmlsZXMgaW4gdGhhdCBkaXJlY3RvcnkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBhcmNoaXRlY3R1cmFsIGNvbnRleHQgb2YgdGhlIGRyaXZlciwgdGhlIGRldmljZSB0eXBlIGl0IHN1cHBvcnRzIGFuZCBhbnkgcmVsYXRlZCBkZXBlbmRlbmNpZXMuIFdpdGggdGhpcyBpbml0aWFsIGZyYW1ld29yayBpbiBwbGFjZSwgSSBjYW4gZXZhbHVhdGUgdGhlIHBhdGNoIG11Y2ggbW9yZSBlZmZlY3RpdmVseS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk3NiwiT3V0cHV0VG9rZW5zIjo1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjIzOjU2LjQxMjEyODAzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRmlsZXNcIjogbnVsbCxcbiAgXCJTdWJkaXJzXCI6IFtcbiAgICBcIm1tODF4XCJcbiAgXVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjM6NTYuNDEyMTgxNFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTg0MTE5MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9yc2VtaWNyb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnPTI5PXNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWljcm9jaGlwL0tjb25maWdcXFwiXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZzozMDpzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnLTMxLXNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL0tjb25maWdcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZT0xND1vYmotJChDT05GSUdfV0xBTl9WRU5ET1JfTUlDUk9DSElQKSArPSBtaWNyb2NoaXAvXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvTWFrZWZpbGU6MTU6b2JqLSQoQ09ORklHX1dMQU5fVkVORE9SX01PUlNFTUlDUk8pICs9IG1vcnNlbWljcm8vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvTWFrZWZpbGUtMTYtb2JqLSQoQ09ORklHX1dMQU5fVkVORE9SX05YUCkgKz0gbnhwL1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9LY29uZmlnPTEzPWlmIFdMQU5fVkVORE9SX01PUlNFTUlDUk9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL0tjb25maWc6MTQ6c291cmNlIFxcXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L0tjb25maWdcXFwiXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9LY29uZmlnLTE1LWVuZGlmICMgV0xBTl9WRU5ET1JfTU9SU0VNSUNST1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5oLTE1LSNkZWZpbmUgQkNGX0RBVEFCQVNFX1NJWkUgKDEwMjQpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5oOjE2OiNkZWZpbmUgTU04MVhfRldfRElSIFxcXCJtb3JzZW1pY3JvL21tODF4XFxcIlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuaC0xNy0jZGVmaW5lIE1NODFYX0ZXX0VYVCBcXFwiLmJpblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjM6NTYuODEwNTk5MTU0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzEyODgxNDY1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgbW04MXggV2lyZWxlc3MgRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgbW04MXggd2lyZWxlc3MgZHJpdmVyLiBGaXJzdCwgbGV0J3MgaGVhZCBzdHJhaWdodCB0byB0aGUgc291cmNlIOKAkyB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBpdHNlbGYuIEknbSBnb2luZyB0byBzdGFydCBieSBuYXZpZ2F0aW5nIHRvIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2AuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0aGUgbWVhdCBvZiB0aGUgZHJpdmVyIGNvZGUsIGhlYWRlciBmaWxlcywgYW5kIGhvcGVmdWxseSwgc29tZSBrZXkgZG9jdW1lbnRhdGlvbiBvciBpbnRlcm5hbCBwcm9qZWN0IHNwZWNpZmljcyB0byByZXNpZGUuIEtub3dpbmcgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgaXMgaGFsZiB0aGUgYmF0dGxlOyBpdCB0ZWxscyBtZSB0aGUgYXNzdW1lZCBkZXNpZ24gYW5kIG9yZ2FuaXphdGlvbiBvZiB0aGlzIGRyaXZlci5cblxuTm93LCBhcyBhbiBleHBlcnQsIEkga25vdyB0aGF0IGNvbmZpZ3VyYXRpb24gaXMgY3JpdGljYWwgZm9yIGhvdyBhIGRyaXZlciBpbnRlZ3JhdGVzIHdpdGggdGhlIGJyb2FkZXIga2VybmVsIGJ1aWxkLiBTbywgSSdsbCBpbW1lZGlhdGVseSBzaGlmdCBteSBmb2N1cyB0byB0aGUgYEtjb25maWdgIGZpbGUgd2l0aGluIHRoYXQgZGlyZWN0b3J5LiBUaGlzIGZpbGUgaXMgdGhlIGxpZmVibG9vZCBvZiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSBpbiB0aGlzIGNvbnRleHQsIGRlZmluaW5nIGFsbCB0aGUgY29uZmlndXJhYmxlIG9wdGlvbnMgZm9yIHRoaXMgc3BlY2lmaWMgZHJpdmVyLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOlxuXG4qICAgKipEZXBlbmRlbmNpZXM6KiogV2hhdCBvdGhlciBrZXJuZWwgY29tcG9uZW50cyBvciBkcml2ZXJzIGRvZXMgdGhpcyBkZXBlbmQgb24/IERvZXMgaXQgbGV2ZXJhZ2UgZXhpc3Rpbmcgd2lyZWxlc3MgaW5mcmFzdHJ1Y3R1cmUgb3IgaGF2ZSBhIGN1c3RvbSBzdGFjaz9cbiogICAqKkZlYXR1cmVzOioqIFdoYXQgZnVuY3Rpb25hbGl0eSBpcyBleHBvc2VkIOKAkyA4MDIuMTEgc3RhbmRhcmRzIHN1cHBvcnRlZCwgc2VjdXJpdHkgb3B0aW9ucywgcG93ZXIgbWFuYWdlbWVudCBzZXR0aW5ncz8gVGhlc2Ugd2lsbCBpbmRpY2F0ZSB0aGUgY2FwYWJpbGl0aWVzIGFuZCBzY29wZSBvZiB0aGlzIGRyaXZlci5cbiogICAqKkJ1aWxkIE9wdGlvbnM6KiogSG93IGlzIHRoZSBkcml2ZXIgZW5hYmxlZD8gSXMgaXQgc3RhdGljYWxseSBjb21waWxlZCwgYnVpbHQgYXMgYSBtb2R1bGUsIG9yIGNvbmRpdGlvbmFsbHkgaW5jbHVkZWQgYmFzZWQgb24gaGFyZHdhcmUgZGV0ZWN0aW9uPyBUaGlzIGdpdmVzIGNsdWVzIGFib3V0IGhvdyB0aGUgdGFyZ2V0IHBsYXRmb3JtcyB3b3VsZCB1c2UgaXQuXG4qICAgKipEZWZhdWx0czoqKiBBcmUgdGhlcmUgc2Vuc2libGUgZGVmYXVsdHMgdG8gYmVnaW4gd2l0aCwgb3Igd2lsbCBJIG5lZWQgdG8gZGVmaW5lIHRoZSBzZXR0aW5ncyBiYXNlZCBvbiB0aGUgdGFyZ2V0IHBsYXRmb3JtP1xuXG5JJ2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGNvbmRpdGlvbmFsIGxvZ2ljIHdpdGhpbiB0aGUgYEtjb25maWdgIOKAkyBsaWtlIGBpZi4uLmVsc2VgIHN0YXRlbWVudHMg4oCTIGFzIHRoZXkgbGlrZWx5IGRlZmluZSBob3cgdGhlIGRyaXZlciBiZWhhdmVzIG9uIGRpZmZlcmVudCBoYXJkd2FyZSBvciBwbGF0Zm9ybXMuIFRoZSBhaW0gb2YgdGhpcyBmaXJzdCByZXZpZXcgd2lsbCBiZSB0byBmb3JtIGEgZnVsbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkcml2ZXIgYW5kIGl0cyBwbGFjZSB3aXRoaW4gdGhlIGtlcm5lbC4gQXJtZWQgd2l0aCB0aGF0LCBJIGNhbiBtb3ZlIG9uIHRvIG90aGVyIHRoaW5ncyB0byBhbmFseXplLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODAxLCJPdXRwdXRUb2tlbnMiOjc1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCIsImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNDowMy45Mzk0MTY2NjZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJjb2Rlc2VhcmNoLWRpci1pbmRleCIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRmlsZXNcIjogW1xuICAgIFwiYnVzLmhcIixcbiAgICBcImNvbW1hbmQuY1wiLFxuICAgIFwiY29tbWFuZC5oXCIsXG4gICAgXCJjb21tYW5kX2RlZnMuaFwiLFxuICAgIFwiY29yZS5jXCIsXG4gICAgXCJjb3JlLmhcIixcbiAgICBcImZ3LmNcIixcbiAgICBcImZ3LmhcIixcbiAgICBcImhpZi5oXCIsXG4gICAgXCJody5jXCIsXG4gICAgXCJody5oXCIsXG4gICAgXCJtYWMuY1wiLFxuICAgIFwibWFjLmhcIixcbiAgICBcIm1tcmMuY1wiLFxuICAgIFwibW1yYy5oXCIsXG4gICAgXCJwcy5jXCIsXG4gICAgXCJwcy5oXCIsXG4gICAgXCJyYXRlX2NvZGUuaFwiLFxuICAgIFwicmMuY1wiLFxuICAgIFwicmMuaFwiLFxuICAgIFwic2Rpby5jXCIsXG4gICAgXCJza2JxLmNcIixcbiAgICBcInNrYnEuaFwiLFxuICAgIFwidXNiLmNcIixcbiAgICBcInlhcHMuY1wiLFxuICAgIFwieWFwcy5oXCIsXG4gICAgXCJ5YXBzX2h3LmNcIixcbiAgICBcInlhcHNfaHcuaFwiXG4gIF0sXG4gIFwiU3ViZGlyc1wiOiBudWxsXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNDowMy45Mzk1NjQ5NjZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRcXG4gICAzOlxcdGNvbmZpZyBNTTgxWFxcbiAgIDQ6XFx0XFx0dHJpc3RhdGUgXFxcIk1vcnNlIE1pY3JvIE1NODF4IHdpcmVsZXNzIGRldmljZXNcXFwiIGlmIENPTVBJTEVfVEVTVFxcbiAgIDU6XFx0XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxcbiAgIDY6XFx0XFx0c2VsZWN0IEZXX0xPQURFUlxcbiAgIDc6XFx0XFx0c2VsZWN0IENSQzdcXG4gICA4OlxcdFxcdGhlbHBcXG4gICA5OlxcdFxcdCAgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IGZvciB3aXJlbGVzcyBkZXZpY2VzIGJhc2VkXFxuICAxMDpcXHRcXHQgIG9uIE1vcnNlIE1pY3JvIE1NODF4eCBjaGlwc2V0cy5cXG4gIDExOlxcdFxcbiAgMTI6XFx0Y29uZmlnIE1NODFYX1VTQlxcbiAgMTM6XFx0XFx0dHJpc3RhdGUgXFxcIk1vcnNlIE1pY3JvIE1NODF4IFVTQiBzdXBwb3J0XFxcIlxcbiAgMTQ6XFx0XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMSBcXHUwMDI2XFx1MDAyNiBVU0JcXG4gIDE1OlxcdFxcdHNlbGVjdCBNTTgxWFxcbiAgMTY6XFx0XFx0aGVscFxcbiAgMTc6XFx0XFx0ICBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIHRoZSBVU0IgaW50ZXJmYWNlIG9mXFxuICAxODpcXHRcXHQgIGRldmljZXMgdXNpbmcgdGhlIE1vcnNlIE1pY3JvIE1NODF4IGNoaXBzZXQuXFxuICAxOTpcXHRcXG4gIDIwOlxcdGNvbmZpZyBNTTgxWF9TRElPXFxuICAyMTpcXHRcXHR0cmlzdGF0ZSBcXFwiTW9yc2UgTWljcm8gTU04MXggU0RJTyBzdXBwb3J0XFxcIlxcbiAgMjI6XFx0XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMSBcXHUwMDI2XFx1MDAyNiBNTUNcXG4gIDIzOlxcdFxcdHNlbGVjdCBNTTgxWFxcbiAgMjQ6XFx0XFx0aGVscFxcbiAgMjU6XFx0XFx0ICBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIHRoZSBTRElPIGludGVyZmFjZSBvZlxcbiAgMjY6XFx0XFx0ICBkZXZpY2VzIHVzaW5nIHRoZSBNb3JzZSBNaWNybyBNTTgxeCBjaGlwc2V0LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNDowMy45Mzk2NTMwOTZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTAxMDMzMTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkluaXRpYWwgQXNzZXNzbWVudCBvZiBVU0IgR2FkZ2V0IFN1cHBvcnQgaW4gU3l6a2FsbGVyIGZvciBhIFNwZWNpZmljIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYE1NODFYX1VTQmAgY29uZmlndXJhdGlvbiBvcHRpb24sIGFuZCB0aGF0IGltbWVkaWF0ZWx5IGNhdGNoZXMgbXkgZXllLiBVU0Igc3VwcG9ydCEgVGhhdCdzIGludGVyZXN0aW5nLCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIGhhbmRsZWQgYnkgYHVzYi5jYC4gVGhlIGZhY3QgdGhhdCBTeXprYWxsZXIgY2FuIGVtdWxhdGUgVVNCIGRldmljZXMgdmlhIHRoZSBVU0IgZ2FkZ2V0IChzcGVjaWZpY2FsbHkgUmF3IEdhZGdldCBvciBEdW1teSBIQ0QpIG1lYW5zIHRoaXMgY291bGQgYmUgYSByZWFsbHkgZnJ1aXRmdWwgYXJlYSBmb3IgZnV6emluZy4gSSdtIHRoaW5raW5nLCB0aGlzIG1pZ2h0IGdpdmUgbWUgYSBuZXcgcGVyc3BlY3RpdmUgb24gc29tZXRoaW5nIHRvIGludmVzdGlnYXRlLlxuXG5NeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgd2FudCB0byBkaXZlIGludG8gdGhlIHNwZWNpZmljIGRyaXZlciBpbXBsZW1lbnRhdGlvbiDigJMgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvdXNiLmNgIOKAkyBhbmQgZmlndXJlIG91dCBob3cgYG1tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFuc2AgaXMgcmVhY2hlZC4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBtZWF0IG9mIHBvdGVudGlhbCBidWdzIHdpbGwgYmUgZm91bmQuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgcGF0aHMgdG8gdGhhdCBzcGVjaWZpYyBmdW5jdGlvbiB3aWxsIHRlbGwgbWUgdGhlIGFyZWFzIEkgc2hvdWxkIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbi4gVGhpcyBpcyB3aGVyZSB0aGUgZ29vZCBzdHVmZiBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg4NCwiT3V0cHV0VG9rZW5zIjo5MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkxLCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNDowNi40NDA2ODkzNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC91c2IuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyNiBNb3JzZSBNaWNyb1xcbiAgIDQ6XFx0ICovXFxuICAgNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvamlmZmllcy5oXFx1MDAzZVxcbiAgIDY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAgIDc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VzYi5oXFx1MDAzZVxcbiAgIDg6XFx0I2luY2x1ZGUgXFxcImhpZi5oXFxcIlxcbiAgIDk6XFx0I2luY2x1ZGUgXFxcImJ1cy5oXFxcIlxcbiAgMTA6XFx0I2luY2x1ZGUgXFxcIm1hYy5oXFxcIlxcbiAgMTE6XFx0I2luY2x1ZGUgXFxcImNvcmUuaFxcXCJcXG4gIDEyOlxcdFxcbiAgMTM6XFx0LypcXG4gIDE0OlxcdCAqIFVSQiB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcy4gSWYgYW4gVVJCIGRvZXMgbm90IGNvbXBsZXRlIHdpdGhpbiB0aGlzXFxuICAxNTpcXHQgKiB0aW1lLCBpdCB3aWxsIGJlIGtpbGxlZC4gVGhpcyB0aW1lb3V0IG5lZWRzIHRvIGFjY291bnQgZm9yIFVTQiBzdXNwZW5kYW5kXFxuICAxNjpcXHQgKiByZXN1bWUgb2NjdXJyaW5nIGJlZm9yZSB0aGUgVVJCIGNhbiBiZSB0cmFuc2ZlcnJlZCwgYW5kIGl0IGFsc28gbmVlZHMgdG9cXG4gIDE3OlxcdCAqIGFjY291bnQgZm9yIHRyYW5zZmVycmluZyBVU0JfTUFYX1RSQU5TRkVSX1NJWkUgYnl0ZXMgb3ZlciBhIHBvdGVudGlhbGx5XFxuICAxODpcXHQgKiBzbG93LCBjb25nZXN0ZWQgVVNCIEZ1bGwgU3BlZWQgbGluay5cXG4gIDE5OlxcdCAqL1xcbiAgMjA6XFx0I2RlZmluZSBVUkJfVElNRU9VVF9NUyAyNTBcXG4gIDIxOlxcdFxcbiAgMjI6XFx0LyogSGlnaCBzcGVlZCBVU0IgMl4oNC0xKSAqIDEyNXVzZWMgPSAxbXNlYyAqL1xcbiAgMjM6XFx0I2RlZmluZSBNTTgxWF9VU0JfSU5URVJSVVBUX0lOVEVSVkFMIDRcXG4gIDI0OlxcdFxcbiAgMjU6XFx0LyogTWF4IGJ5dGVzIHBlciBVU0IgcmVhZC93cml0ZSAqL1xcbiAgMjY6XFx0I2RlZmluZSBVU0JfTUFYX1RSQU5TRkVSX1NJWkUgKDE2ICogMTAyNClcXG4gIDI3OlxcdFxcbiAgMjg6XFx0LyogSU5UIEVQIGJ1ZmZlciBzaXplICovXFxuICAyOTpcXHQjZGVmaW5lIE1NODFYX0VQX0lOVF9CVUZGRVJfU0laRSA4XFxuICAzMDpcXHRcXG4gIDMxOlxcdC8qIE1vcnNlIHZlbmRvciBJRHMqL1xcbiAgMzI6XFx0I2RlZmluZSBNTTgxWF9WRU5ET1JfSUQgMHgzMjViXFxuICAzMzpcXHQjZGVmaW5lIE1NODFYX01NODEwWF9QUk9EVUNUX0lEIDB4ODEwMFxcbiAgMzQ6XFx0XFxuICAzNTpcXHQvKiBQb3dlciBtYW5hZ2VtZW50IHJ1bnRpbWUgYXV0by1zdXNwZW5kIGRlbGF5IHZhbHVlIGluIG1pbGxpc2Vjb25kcyAqL1xcbiAgMzY6XFx0I2RlZmluZSBQTV9SVU5USU1FX0FVVE9TVVNQRU5EX0RFTEFZX01TIDEwMFxcbiAgMzc6XFx0XFxuICAzODpcXHRlbnVtIG1tODF4X3VzYl9lbmRwb2ludHMge1xcbiAgMzk6XFx0XFx0TU04MVhfRVBfQ01EID0gMCxcXG4gIDQwOlxcdFxcdE1NODFYX0VQX0lOVCxcXG4gIDQxOlxcdFxcdE1NODFYX0VQX01FTV9SRCxcXG4gIDQyOlxcdFxcdE1NODFYX0VQX01FTV9XUixcXG4gIDQzOlxcdFxcdE1NODFYX0VQX1JFR19SRCxcXG4gIDQ0OlxcdFxcdE1NODFYX0VQX1JFR19XUixcXG4gIDQ1OlxcdFxcdE1NODFYX0VQX0VQX01BWCxcXG4gIDQ2OlxcdH07XFxuICA0NzpcXHRcXG4gIDQ4OlxcdHN0cnVjdCBtbTgxeF91c2JfZW5kcG9pbnQge1xcbiAgNDk6XFx0XFx0dW5zaWduZWQgY2hhciAqYnVmZmVyO1xcbiAgNTA6XFx0XFx0c3RydWN0IHVyYiAqdXJiO1xcbiAgNTE6XFx0XFx0X191OCBhZGRyO1xcbiAgNTI6XFx0XFx0aW50IHNpemU7XFxuICA1MzpcXHR9O1xcbiAgNTQ6XFx0XFxuICA1NTpcXHRlbnVtIG1tODF4X3VzYl9mbGFncyB7IE1NODFYX1VTQl9GTEFHX0FUVEFDSEVELCBNTTgxWF9VU0JfRkxBR19TVVNQRU5ERUQgfTtcXG4gIDU2OlxcdFxcbiAgNTc6XFx0c3RydWN0IG1tODF4X3VzYiB7XFxuICA1ODpcXHRcXHRzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjtcXG4gIDU5OlxcdFxcdHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2U7XFxuICA2MDpcXHRcXHRzdHJ1Y3QgbW04MXhfdXNiX2VuZHBvaW50IGVuZHBvaW50c1tNTTgxWF9FUF9FUF9NQVhdO1xcbiAgNjE6XFx0XFx0aW50IGVycm9ycztcXG4gIDYyOlxcdFxcbiAgNjM6XFx0XFx0Lyogc2VyaWFsaXNlIFVTQiBkZXZpY2Ugc3RydWN0ICovXFxuICA2NDpcXHRcXHRzdHJ1Y3QgbXV0ZXggbG9jaztcXG4gIDY1OlxcdFxcbiAgNjY6XFx0XFx0Lyogc2VyaWFsaXNlIFVTQiBidXMgYWNjZXNzICovXFxuICA2NzpcXHRcXHRzdHJ1Y3QgbXV0ZXggYnVzX2xvY2s7XFxuICA2ODpcXHRcXG4gIDY5OlxcdFxcdGJvb2wgb25nb2luZ19jbWQ7XFxuICA3MDpcXHRcXHRib29sIG9uZ29pbmdfcnc7XFxuICA3MTpcXHRcXHR3YWl0X3F1ZXVlX2hlYWRfdCByd19pbl93YWl0O1xcbiAgNzI6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gIDczOlxcdH07XFxuICA3NDpcXHRcXG4gIDc1OlxcdGVudW0gbW04MXhfdXNiX2NvbW1hbmRfZGlyZWN0aW9uIHtcXG4gIDc2OlxcdFxcdE1NODFYX1VTQl9XUklURSA9IDB4MDAsXFxuICA3NzpcXHRcXHRNTTgxWF9VU0JfUkVBRCA9IDB4ODAsXFxuICA3ODpcXHRcXHRNTTgxWF9VU0JfUkVTRVQgPSAweDAyLFxcbiAgNzk6XFx0fTtcXG4gIDgwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNDowNi40NDA4NTA2OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzc0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNzU6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDI3NjpcXHRcXHR9XFxuIDI3NzpcXHRcXG4gMjc4OlxcdFxcdHJldCA9IG1tODF4X2NtZF9nZXRfZGlzYWJsZWRfY2hhbm5lbHMobW9ycywgcmVzcCwgcmVzcF9sZW4pO1xcbiAyNzk6XFx0XFx0aWYgKHJldClcXG4gMjgwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAyODE6XFx0XFxuIDI4MjpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShtb3JzX3MxZ2h6X2NoYW5uZWxzKTsgaSsrKSB7XFxuIDI4MzpcXHRcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoID0gXFx1MDAyNm1vcnNfczFnaHpfY2hhbm5lbHNbaV07XFxuIDI4NDpcXHRcXG4gMjg1OlxcdFxcdFxcdGlmIChjaC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRClcXG4gMjg2OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAyODc6XFx0XFxuIDI4ODpcXHRcXHRcXHRjaC1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfklFRUU4MDIxMV9DSEFOX1MxR19OT19QUklNQVJZO1xcbiAyODk6XFx0XFx0fVxcbiAyOTA6XFx0XFxuIDI5MTpcXHRcXHRpZiAobGUzMl90b19jcHUocmVzcC1cXHUwMDNlbl9jaGFubmVscykgXFx1MDAzZSBBUlJBWV9TSVpFKG1vcnNfczFnaHpfY2hhbm5lbHMpKSB7XFxuIDI5MjpcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbiAyOTM6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDI5NDpcXHRcXHR9XFxuIDI5NTpcXHRcXG4gMjk2OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBsZTMyX3RvX2NwdShyZXNwLVxcdTAwM2VuX2NoYW5uZWxzKTsgaSsrKSB7XFxuIDI5NzpcXHRcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoO1xcbiAyOTg6XFx0XFx0XFx0c3RydWN0IGhvc3RfY21kX2Rpc2FibGVkX2NoYW5uZWxfZW50cnkgKmVudHJ5ID1cXG4gMjk5OlxcdFxcdFxcdFxcdFxcdTAwMjZyZXNwLVxcdTAwM2VjaGFubmVsc1tpXTtcXG4gMzAwOlxcdFxcbiAzMDE6XFx0XFx0XFx0aWYgKGVudHJ5LVxcdTAwM2Vid19taHogIT0gMSlcXG4gMzAyOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAzMDM6XFx0XFxuIDMwNDpcXHRcXHRcXHRjaCA9IGllZWU4MDIxMV9nZXRfY2hhbm5lbF9raHooXFxuIDMwNTpcXHRcXHRcXHRcXHRody1cXHUwMDNld2lwaHksXFxuIDMwNjpcXHRcXHRcXHRcXHRLSFoxMDBfVE9fS0haKGxlMTZfdG9fY3B1KGVudHJ5LVxcdTAwM2VmcmVxXzEwMGtoeikpKTtcXG4gMzA3OlxcdFxcdFxcdGlmICghY2gpXFxuIDMwODpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gMzA5OlxcdFxcbiAzMTA6XFx0XFx0XFx0Y2gtXFx1MDAzZWZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX1MxR19OT19QUklNQVJZO1xcbiAzMTE6XFx0XFx0XFx0ZGV2X2RiZyhtb3JzLVxcdTAwM2VkZXYsIFxcXCJzZXQgTk9fUFJJTUFSWSBvbiAldSBLSHpcXFwiLFxcbiAzMTI6XFx0XFx0XFx0XFx0aWVlZTgwMjExX2NoYW5uZWxfdG9fa2h6KGNoKSk7XFxuIDMxMzpcXHRcXHR9XFxuIDMxNDpcXHRcXG4gMzE1OlxcdG91dDpcXG4gMzE2OlxcdFxcdGlmIChyZXQpXFxuIDMxNzpcXHRcXHRcXHRkZXZfZXJyKG1vcnMtXFx1MDAzZWRldiwgXFxcImZhaWxlZCB0byBzZXQgZGlzYWJsZWQgcHJpbWFyeSBjaGFubmVsc1xcXCIpO1xcbiAzMTg6XFx0XFxuIDMxOTpcXHRcXHRrZnJlZShyZXNwKTtcXG4gMzIwOlxcdH1cXG4gMzIxOlxcdFxcbiAzMjI6XFx0c3RhdGljIGludCBtbTgxeF9tYWNfb3BzX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KVxcbiAzMjM6XFx0e1xcbiAzMjQ6XFx0XFx0c3RydWN0IG1tODF4ICptb3JzID0gaHctXFx1MDAzZXByaXY7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI0OjA2LjQ0MDk5MDI4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYxMzkwNzg3MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgbW04MXhfbWFjX2NoZWNrX2Z3X2Rpc2FibGVkX2NoYW5zYCBDYWxsIFNpdGVzKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBgbW04MXhfbWFjX2NoZWNrX2Z3X2Rpc2FibGVkX2NoYW5zYC4gVG8gcmVhbGx5IGdyb2sgd2hhdCdzIGhhcHBlbmluZywgSSBuZWVkIHRvIGtub3cgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgZnJvbS4gU3RhbmRhcmQgcHJvY2VkdXJlOiB0aW1lIHRvIGJyZWFrIG91dCB0aGUgZ3JlcC4gTGV0J3Mgc2VlIGFsbCB0aGUgcGxhY2VzIGluIHRoZSBjb2RlYmFzZSB0aGlzIGZ1bmN0aW9uIGdldHMgaW52b2tlZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGl0cyBjb250cm9sIGZsb3cgYW5kIGludGVuZGVkIHB1cnBvc2UuIEdvdHRhIGZpZ3VyZSBvdXQgaXRzIHJvbGUgaW4gdGhlIGdyZWF0ZXIgc2NoZW1lIG9mIHRoaW5ncy4gTm8gcG9pbnQgaW4gc3Bpbm5pbmcgbXkgd2hlZWxzIHVudGlsIEkgdW5kZXJzdGFuZCB0aGUgY2FsbGVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzIxNywiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjQ6MTIuNTgwMDcyNjQyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTA4MTM5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jPTIzOD1zdGF0aWMgYm9vbCBtbTgxeF90eF9oX3BzX2ZpbHRlcmVkX2Zvcl9zdGEoc3RydWN0IG1tODF4ICptb3JzLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yNjEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYzoyNjI6c3RhdGljIHZvaWQgbW04MXhfbWFjX2NoZWNrX2Z3X2Rpc2FibGVkX2NoYW5zKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjYzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM9MjExMj1zdGF0aWMgaW50IG1tODF4X21hY19yZXN0YXJ0KHN0cnVjdCBtbTgxeCAqbW9ycylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjE2Ni1cXHRjbGVhcl9iaXQoTU04MVhfU1RBVEVfUkVMT0FEX0ZXX0FGVEVSX1NUQVJULCBcXHUwMDI2bW9ycy1cXHUwMDNlc3RhdGVfZmxhZ3MpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjE2NzpcXHRtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnMobW9ycy1cXHUwMDNlaHcpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjE2OC1cXHRpZWVlODAyMTFfcmVzdGFydF9odyhtb3JzLVxcdTAwM2Vodyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI0OjEyLjY2NTE2MTUxNloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjQyNTY4OTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpZ2dpbmcgRGVlcGVyIGludG8gdGhlIG1tODF4IE1BQyBEcml2ZXIqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBzdXJyb3VuZGluZyBgbW04MXhfbWFjX2NoZWNrX2Z3X2Rpc2FibGVkX2NoYW5zYCwgYG1tODF4X21hY19yZXN0YXJ0YCwgYW5kIGBtbTgxeF9tYWNfb3BzX3N0YXJ0YC4gVGhlc2UgYXJlIGtleSBmdW5jdGlvbnMsIGFuZCBJIG5lZWQgdG8gc2VlICp3aGVyZSogYW5kICpob3cqIHRoZXkncmUgdXNlZC4gTXkgZ29hbCBpcyB0byBtYXAgb3V0IHRoZSBpbnRlcmFjdGlvbnMgYW5kIHBpbnBvaW50IHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIG9yIGRlYnVnZ2luZywgc28gSSBhbSBsb29raW5nIHRvIHRyYWNlIGhvdyBhbmQgd2hlcmUgdGhleSBhcmUgY2FsbGVkLlxuXG5TcGVjaWZpY2FsbHksIEknbSBoZWFkaW5nIGludG8gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmNgLiBJJ20gc3RhcnRpbmcgbXkgZGVlcCBkaXZlIGJ5IGZvY3VzaW5nIG9uIGxpbmVzIDI1MCB0aHJvdWdoIDMzMC4gVGhpcyBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBjaHVuayB0byBiZWdpbiB3aXRoOyB0aGlzIGFyZWEgc2hvdWxkIGdpdmUgbWUgY29udGV4dCBvbiB0aGUgc3Vycm91bmRpbmcgY29kZSwgYW5kIGhvcGVmdWxseSwgSSB3aWxsIGJlIGFibGUgdG8gc2VlIGZ1bmN0aW9uIGNhbGxzIHRoYXQgd2lsbCBsZWFkIG1lIGRvd24gdGhlIHJpZ2h0IHBhdGguIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kIVxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODIzLCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjQ6MTQuOTA3NzM0MDM0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzY2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI1MDpcXHRcXHRpZiAoIW1vcnNfc3RhLVxcdTAwM2V0eF9wc19maWx0ZXJfZW4pXFxuIDI1MTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDI1MjpcXHRcXG4gMjUzOlxcdFxcdGRldl9kYmcobW9ycy1cXHUwMDNlZGV2LCBcXFwiRnJhbWUgZm9yIHN0YVslcE1dIFBTIGZpbHRlcmVkXFxcIiwgbW9yc19zdGEtXFx1MDAzZWFkZHIpO1xcbiAyNTQ6XFx0XFxuIDI1NTpcXHRcXHRpbmZvLVxcdTAwM2VmbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9UWF9GSUxURVJFRDtcXG4gMjU2OlxcdFxcdGluZm8tXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5JRUVFODAyMTFfVFhfQ1RMX0FNUERVO1xcbiAyNTc6XFx0XFxuIDI1ODpcXHRcXHRpZWVlODAyMTFfdHhfc3RhdHVzX3NrYihtb3JzLVxcdTAwM2Vodywgc2tiKTtcXG4gMjU5OlxcdFxcdHJldHVybiB0cnVlO1xcbiAyNjA6XFx0fVxcbiAyNjE6XFx0XFxuIDI2MjpcXHRzdGF0aWMgdm9pZCBtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpXFxuIDI2MzpcXHR7XFxuIDI2NDpcXHRcXHRpbnQgcmV0ID0gMDtcXG4gMjY1OlxcdFxcdHUzMiBpO1xcbiAyNjY6XFx0XFx0c3RydWN0IG1tODF4ICptb3JzID0gaHctXFx1MDAzZXByaXY7XFxuIDI2NzpcXHRcXHRzdHJ1Y3QgaG9zdF9jbWRfcmVzcF9nZXRfZGlzYWJsZWRfY2hhbm5lbHMgKnJlc3A7XFxuIDI2ODpcXHRcXHR1MzIgcmVzcF9sZW4gPSBzaXplb2Yoc3RydWN0IGhvc3RfY21kX2Rpc2FibGVkX2NoYW5uZWxfZW50cnkpICpcXG4gMjY5OlxcdFxcdFxcdFxcdCAgICAgICBBUlJBWV9TSVpFKG1vcnNfczFnaHpfY2hhbm5lbHMpICtcXG4gMjcwOlxcdFxcdFxcdCAgICAgICBzaXplb2YoKnJlc3ApO1xcbiAyNzE6XFx0XFxuIDI3MjpcXHRcXHRyZXNwID0ga3phbGxvYyhyZXNwX2xlbiwgR0ZQX0tFUk5FTCk7XFxuIDI3MzpcXHRcXHRpZiAoIXJlc3ApIHtcXG4gMjc0OlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuIDI3NTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMjc2OlxcdFxcdH1cXG4gMjc3OlxcdFxcbiAyNzg6XFx0XFx0cmV0ID0gbW04MXhfY21kX2dldF9kaXNhYmxlZF9jaGFubmVscyhtb3JzLCByZXNwLCByZXNwX2xlbik7XFxuIDI3OTpcXHRcXHRpZiAocmV0KVxcbiAyODA6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDI4MTpcXHRcXG4gMjgyOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKG1vcnNfczFnaHpfY2hhbm5lbHMpOyBpKyspIHtcXG4gMjgzOlxcdFxcdFxcdHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2ggPSBcXHUwMDI2bW9yc19zMWdoel9jaGFubmVsc1tpXTtcXG4gMjg0OlxcdFxcbiAyODU6XFx0XFx0XFx0aWYgKGNoLVxcdTAwM2VmbGFncyBcXHUwMDI2IElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEKVxcbiAyODY6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDI4NzpcXHRcXG4gMjg4OlxcdFxcdFxcdGNoLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+SUVFRTgwMjExX0NIQU5fUzFHX05PX1BSSU1BUlk7XFxuIDI4OTpcXHRcXHR9XFxuIDI5MDpcXHRcXG4gMjkxOlxcdFxcdGlmIChsZTMyX3RvX2NwdShyZXNwLVxcdTAwM2VuX2NoYW5uZWxzKSBcXHUwMDNlIEFSUkFZX1NJWkUobW9yc19zMWdoel9jaGFubmVscykpIHtcXG4gMjkyOlxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuIDI5MzpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMjk0OlxcdFxcdH1cXG4gMjk1OlxcdFxcbiAyOTY6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGxlMzJfdG9fY3B1KHJlc3AtXFx1MDAzZW5fY2hhbm5lbHMpOyBpKyspIHtcXG4gMjk3OlxcdFxcdFxcdHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2g7XFxuIDI5ODpcXHRcXHRcXHRzdHJ1Y3QgaG9zdF9jbWRfZGlzYWJsZWRfY2hhbm5lbF9lbnRyeSAqZW50cnkgPVxcbiAyOTk6XFx0XFx0XFx0XFx0XFx1MDAyNnJlc3AtXFx1MDAzZWNoYW5uZWxzW2ldO1xcbiAzMDA6XFx0XFxuIDMwMTpcXHRcXHRcXHRpZiAoZW50cnktXFx1MDAzZWJ3X21oeiAhPSAxKVxcbiAzMDI6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDMwMzpcXHRcXG4gMzA0OlxcdFxcdFxcdGNoID0gaWVlZTgwMjExX2dldF9jaGFubmVsX2toeihcXG4gMzA1OlxcdFxcdFxcdFxcdGh3LVxcdTAwM2V3aXBoeSxcXG4gMzA2OlxcdFxcdFxcdFxcdEtIWjEwMF9UT19LSFoobGUxNl90b19jcHUoZW50cnktXFx1MDAzZWZyZXFfMTAwa2h6KSkpO1xcbiAzMDc6XFx0XFx0XFx0aWYgKCFjaClcXG4gMzA4OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAzMDk6XFx0XFxuIDMxMDpcXHRcXHRcXHRjaC1cXHUwMDNlZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fUzFHX05PX1BSSU1BUlk7XFxuIDMxMTpcXHRcXHRcXHRkZXZfZGJnKG1vcnMtXFx1MDAzZWRldiwgXFxcInNldCBOT19QUklNQVJZIG9uICV1IEtIelxcXCIsXFxuIDMxMjpcXHRcXHRcXHRcXHRpZWVlODAyMTFfY2hhbm5lbF90b19raHooY2gpKTtcXG4gMzEzOlxcdFxcdH1cXG4gMzE0OlxcdFxcbiAzMTU6XFx0b3V0OlxcbiAzMTY6XFx0XFx0aWYgKHJldClcXG4gMzE3OlxcdFxcdFxcdGRldl9lcnIobW9ycy1cXHUwMDNlZGV2LCBcXFwiZmFpbGVkIHRvIHNldCBkaXNhYmxlZCBwcmltYXJ5IGNoYW5uZWxzXFxcIik7XFxuIDMxODpcXHRcXG4gMzE5OlxcdFxcdGtmcmVlKHJlc3ApO1xcbiAzMjA6XFx0fVxcbiAzMjE6XFx0XFxuIDMyMjpcXHRzdGF0aWMgaW50IG1tODF4X21hY19vcHNfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpXFxuIDMyMzpcXHR7XFxuIDMyNDpcXHRcXHRzdHJ1Y3QgbW04MXggKm1vcnMgPSBody1cXHUwMDNlcHJpdjtcXG4gMzI1OlxcdFxcbiAzMjY6XFx0XFx0bW9ycy1cXHUwMDNlc3RhcnRlZCA9IHRydWU7XFxuIDMyNzpcXHRcXHRyZXR1cm4gMDtcXG4gMzI4OlxcdH1cXG4gMzI5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNDoxNC45MDc4OTkyNTRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk3OTEzMTc2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBGdW5jdGlvbiBDYWxsIENvbnRleHQqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0IG9mIGBtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnNgLiBUbyBkbyB0aGlzLCBJJ20gZ29pbmcgdG8gdHJhY2sgZG93biB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUgY29kZS4gR2l2ZW4gdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggYSBzcGVjaWZpYyBkcml2ZXIsIEknbGwgZm9jdXMgbXkgc2VhcmNoIG9uIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9gIGRpcmVjdG9yeSwgd2hpY2ggaXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQuIEknbGwgdXNlIGBncmVwYCB0byBxdWlja2x5IHNjYW4gdGhlIGZpbGVzIGluIHRoYXQgZGlyZWN0b3J5IGZvciBpbnN0YW5jZXMgb2YgdGhlIGZ1bmN0aW9uIG5hbWUgaXRzZWxmLCBgbW04MXhfbWFjX2NoZWNrX2Z3X2Rpc2FibGVkX2NoYW5zYCwgYW5kIGFsc28gZm9yIGFueSByZWZlcmVuY2VzIHRvIGBkaXNhYmxlZF9jaGFuc2AsIGp1c3QgaW4gY2FzZSBpdCdzIHVzZWQgYXMgYSB2YXJpYWJsZSBvciBzdHJ1Y3R1cmUgbWVtYmVyIHJlbGF0ZWQgdG8gdGhlIHNhbWUgbG9naWMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIGhvdyB0aGUgZnVuY3Rpb24gaW50ZWdyYXRlcyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBtbTgxeCBkcml2ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0NDQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI0OjE2Ljg4NzAzNDA1MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU4NzE3NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGlzYWJsZWRfY2hhblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jPTU0MT1pbnQgbW04MXhfY21kX3NldF9mcmFnX3RocmVzaG9sZChzdHJ1Y3QgbW04MXggKm1vcnMsIHUzMiBmcmFnX3RocmVzaG9sZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTU1Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzo1NTM6aW50IG1tODF4X2NtZF9nZXRfZGlzYWJsZWRfY2hhbm5lbHMoXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6NTU0OlxcdHN0cnVjdCBtbTgxeCAqbW9ycywgc3RydWN0IGhvc3RfY21kX3Jlc3BfZ2V0X2Rpc2FibGVkX2NoYW5uZWxzICpyZXNwLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTU1NS1cXHR1aW50IHJlc3BfbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmg9ODA9aW50IG1tODF4X2NtZF9zZXRfZnJhZ190aHJlc2hvbGQoc3RydWN0IG1tODF4ICptb3JzLCB1MzIgZnJhZ190aHJlc2hvbGQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oOjgxOmludCBtbTgxeF9jbWRfZ2V0X2Rpc2FibGVkX2NoYW5uZWxzKFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oOjgyOlxcdHN0cnVjdCBtbTgxeCAqbW9ycywgc3RydWN0IGhvc3RfY21kX3Jlc3BfZ2V0X2Rpc2FibGVkX2NoYW5uZWxzICpyZXNwLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oLTgzLVxcdHVpbnQgcmVzcF9sZW4pO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kX2RlZnMuaD04NzA9c3RydWN0IGhvc3RfY21kX3JlcV9saV9zbGVlcCB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmRfZGVmcy5oLTg3NC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmRfZGVmcy5oOjg3NTpzdHJ1Y3QgaG9zdF9jbWRfZGlzYWJsZWRfY2hhbm5lbF9lbnRyeSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kX2RlZnMuaC04NzYtXFx0X19sZTE2IGZyZXFfMTAwa2h6O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kX2RlZnMuaC04NzktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kX2RlZnMuaDo4ODA6c3RydWN0IGhvc3RfY21kX3Jlc3BfZ2V0X2Rpc2FibGVkX2NoYW5uZWxzIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmRfZGVmcy5oLTg4MS1cXHRzdHJ1Y3QgaG9zdF9jbWRfaGVhZGVyIGhkcjtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZF9kZWZzLmgtODgzLVxcdF9fbGUzMiBuX2NoYW5uZWxzO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZF9kZWZzLmg6ODg0OlxcdHN0cnVjdCBob3N0X2NtZF9kaXNhYmxlZF9jaGFubmVsX2VudHJ5IGNoYW5uZWxzW107XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kX2RlZnMuaC04ODUtfSBfX3BhY2tlZDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM9MjM4PXN0YXRpYyBib29sIG1tODF4X3R4X2hfcHNfZmlsdGVyZWRfZm9yX3N0YShzdHJ1Y3QgbW04MXggKm1vcnMsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTI2MS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jOjI2MjpzdGF0aWMgdm9pZCBtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yNjMte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yNjYtXFx0c3RydWN0IG1tODF4ICptb3JzID0gaHctXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYzoyNjc6XFx0c3RydWN0IGhvc3RfY21kX3Jlc3BfZ2V0X2Rpc2FibGVkX2NoYW5uZWxzICpyZXNwO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjY4OlxcdHUzMiByZXNwX2xlbiA9IHNpemVvZihzdHJ1Y3QgaG9zdF9jbWRfZGlzYWJsZWRfY2hhbm5lbF9lbnRyeSkgKlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjY5LVxcdFxcdFxcdCAgICAgICBBUlJBWV9TSVpFKG1vcnNfczFnaHpfY2hhbm5lbHMpICtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjc3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6Mjc4OlxcdHJldCA9IG1tODF4X2NtZF9nZXRfZGlzYWJsZWRfY2hhbm5lbHMobW9ycywgcmVzcCwgcmVzcF9sZW4pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjc5LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTI5Ny1cXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6Mjk4OlxcdFxcdHN0cnVjdCBob3N0X2NtZF9kaXNhYmxlZF9jaGFubmVsX2VudHJ5ICplbnRyeSA9XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yOTktXFx0XFx0XFx0XFx1MDAyNnJlc3AtXFx1MDAzZWNoYW5uZWxzW2ldO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYz0yMTEyPXN0YXRpYyBpbnQgbW04MXhfbWFjX3Jlc3RhcnQoc3RydWN0IG1tODF4ICptb3JzKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTY2LVxcdGNsZWFyX2JpdChNTTgxWF9TVEFURV9SRUxPQURfRldfQUZURVJfU1RBUlQsIFxcdTAwMjZtb3JzLVxcdTAwM2VzdGF0ZV9mbGFncyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYzoyMTY3OlxcdG1tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFucyhtb3JzLVxcdTAwM2Vodyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTY4LVxcdGllZWU4MDIxMV9yZXN0YXJ0X2h3KG1vcnMtXFx1MDAzZWh3KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjQ6MTYuOTUyOTExMTM3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxMzM0MzgxOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmUsIHVzaW5nIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIE1vcnNlIE1pY3JvIERyaXZlciBGaXJtd2FyZSBDb250cm9sIEZsb3cqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBNb3JzZSBNaWNybyBkcml2ZXIuIE15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IHN1cnJvdW5kaW5nIHR3byBrZXkgZnVuY3Rpb25zOiBgbW04MXhfbWFjX2NoZWNrX2Z3X2Rpc2FibGVkX2NoYW5zYCBhbmQgYG1tODF4X21hY19yZXN0YXJ0YC4gVGhlc2UgYXJlIGNydWNpYWwgZm9yIG1hbmFnaW5nIGNoYW5uZWwgZGlzYWJsaW5nIGFuZCBwb3RlbnRpYWxseSByZXN0YXJ0aW5nIHRoZSBNQUMsIHNvIGtub3dpbmcgKndoZXJlKiBhbmQgKmhvdyogdGhleSdyZSBjYWxsZWQgaXMgZXNzZW50aWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGRyaXZlciBiZWhhdmlvciBhbmQgZGVidWdnaW5nIGFueSBpc3N1ZXMgcmVsYXRlZCB0byBjaGFubmVsIG1hbmFnZW1lbnQgb3IgTUFDIGluaXRpYWxpemF0aW9uL3JlY292ZXJ5LiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGludGVncmF0ZWQgd2l0aGluIHRoZSBkcml2ZXIncyBhcmNoaXRlY3R1cmUuIExvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zJyBjYWxsIHNpdGVzIHdpbGwgZ2l2ZSBtZSBpbnNpZ2h0IGludG8gd2hlbiBmaXJtd2FyZSBjaGVja3MgYXJlIHBlcmZvcm1lZCB0byBlbnN1cmUgb3BlcmF0aW9uLCBhbmQgd2hlbiB0aGUgcmVzdGFydCBvcGVyYXRpb25zIG1heSBvY2N1ciwgd2hpY2ggaXMgdGhlIHNvcnQgb2YgdGhpbmcgdGhhdCBjYW4gcHJvdmlkZSBnb29kIGNvbnRleHQgZm9yIGludmVzdGlnYXRpbmcgc3BlY2lmaWMgaGFyZHdhcmUgaXNzdWVzLCBvciBvcHRpbWl6YXRpb25zLiBMZXQncyBzdGFydCB0aGUgaHVudCBmb3IgY2FsbHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjE1LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjQ6MjEuMDg2MzUzOTY2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTg3NzM1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtbTgxeF9tYWNfcmVzdGFydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM9MjA3Nj1zdGF0aWMgdTMyIG1tODF4X2dldF9leHBlY3RlZF90aHJvdWdocHV0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMDk1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjA5NjpzdGF0aWMgdm9pZCBtbTgxeF9tYWNfcmVzdGFydF9jbGVhbnVwX2l0ZXIodm9pZCAqZGF0YSwgdTggKm1hYyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIwOTctXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjEwMi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jOjIxMDM6c3RhdGljIHZvaWQgbW04MXhfbWFjX3Jlc3RhcnRfY2xlYW51cChzdHJ1Y3QgbW04MXggKm1vcnMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTA0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjEwNi1cXHRcXHRcXHRcXHRcXHQgICAgSUVFRTgwMjExX0lGQUNFX0lURVJfTk9STUFMLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjEwNzpcXHRcXHRcXHRcXHRcXHQgICAgbW04MXhfbWFjX3Jlc3RhcnRfY2xlYW51cF9pdGVyLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjEwOC1cXHRcXHRcXHRcXHRcXHQgICAgTlVMTCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxMTEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYzoyMTEyOnN0YXRpYyBpbnQgbW04MXhfbWFjX3Jlc3RhcnQoc3RydWN0IG1tODF4ICptb3JzKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjExMy17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxNDItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYzoyMTQzOlxcdG1tODF4X21hY19yZXN0YXJ0X2NsZWFudXAobW9ycyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTQ0LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYz0yMTc1PXN0YXRpYyBpbnQgbW04MXhfbWFjX29wc19hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTg1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjE4NjpcXHRcXHRyZXQgPSBtbTgxeF9tYWNfcmVzdGFydChtb3JzKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxODctXFx0XFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYz0yMjY2PXN0YXRpYyB2b2lkIG1tODF4X3JlZ19ub3RpZmllcihzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMjc3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjI3ODpcXHRyZXQgPSBtbTgxeF9tYWNfcmVzdGFydChtb3JzKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIyNzktXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjQ6MjEuMTU4MjM3Njg3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NDc2NTQwMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgbW04MXhgIE1BQyBEcml2ZXIncyBSZXN0YXJ0IE1lY2hhbmlzbSoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYG1tODF4X21hY19yZXN0YXJ0YCBmdW5jdGlvbi4gVGhlIGNvZGUgc2VlbXMgdG8gaW5kaWNhdGUgaXQncyBpbnZva2VkIGluIHR3byBkaXN0aW5jdCBjb250ZXh0czogZmlyc3QsIHdpdGhpbiBgbW04MXhfbWFjX29wc19hZGRfaW50ZXJmYWNlYC4gUmlnaHQsIHRoYXQncyBhIGNhbGxiYWNrIHdpdGhpbiB0aGUgbWFjODAyMTEgZnJhbWV3b3JrLCBzbyB0aGlzIHJlc3RhcnQgbGlrZWx5IGhhcHBlbnMgd2hlbiBhIG5ldyBuZXR3b3JrIGludGVyZmFjZSBpcyBhZGRlZC4gSW50ZXJlc3RpbmcuIFRoZSBzZWNvbmQgY2FsbCBjb21lcyBmcm9tIGBtbTgxeF9yZWdfbm90aWZpZXJgLCB3aGljaCBoYW5kbGVzIHJlZ3VsYXRvcnkgZG9tYWluIGNoYW5nZXMuIFNvLCBwb3RlbnRpYWxseSBhIHJlc3RhcnQgaXMgdHJpZ2dlcmVkIHdoZW4gcmVnaW9uIHNldHRpbmdzIGFyZSBtb2RpZmllZCwgd2hpY2ggbWFrZXMgc2Vuc2UuXG5cbk5vdywgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBiaWdnZXIgcGljdHVyZTogaG93IHRoZSBkZXZpY2UgaXRzZWxmIGdldHMgaW5pdGlhbGl6ZWQgaW4gdGhlIGZpcnN0IHBsYWNlLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gYGNvcmUuY2AgYW5kIGB1c2IuY2AgdG8gc2VlIHRoZSBkZXZpY2UgcHJvYmluZyBhbmQgcmVnaXN0cmF0aW9uIHByb2Nlc3Nlcy4gR290dGEgdW5kZXJzdGFuZCB0aGUgZGV2aWNlJ3MgbGlmZWN5Y2xlIGZyb20gdGhlIHZlcnkgYmVnaW5uaW5nIHRvIGVmZmVjdGl2ZWx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIHJlc3RhcnQgbG9naWMuIFRoaXMgaW5mb3JtYXRpb24gc2hvdWxkIGlsbHVtaW5hdGUgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBgbW04MXhfbWFjX3Jlc3RhcnRgIGFuZCB0aGUgZGV2aWNlJ3MgZm91bmRhdGlvbmFsIHNldHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM5NSwiT3V0cHV0VG9rZW5zIjo1NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI0OjIzLjcwNTg5NDIwN1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5Njg5NDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1tODF4X3Byb2JlfG1tODF4X3JlZ2lzdGVyfG1tODF4X3VzYl9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvdXNiLmM9NzE2PXN0YXRpYyB2b2lkIG1tODF4X3VyYl9jbGVhbnVwKHN0cnVjdCBtbTgxeCAqbW9ycylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvdXNiLmMtNzQ0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvdXNiLmM6NzQ1OnN0YXRpYyBpbnQgbW04MXhfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC91c2IuYy03NDYtXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC91c2IuYz05MjU9c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIG1tODF4X3VzYl9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC91c2IuYy05MjYtXFx0Lm5hbWUgPSBcXFwibW04MXhfdXNiXFxcIixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L3VzYi5jOjkyNzpcXHQucHJvYmUgPSBtbTgxeF91c2JfcHJvYmUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC91c2IuYy05MjgtXFx0LmRpc2Nvbm5lY3QgPSBtbTgxeF91c2JfZGlzY29ubmVjdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjQ6MjMuODE1NTg4MjY1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4Mzg1NzUzMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBVU0IgRHJpdmVyJ3MgUHJvYmUgRnVuY3Rpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoIHRoaXMgYG1tODF4X3VzYmAgZHJpdmVyLCBzcGVjaWZpY2FsbHkgZHVyaW5nIGRldmljZSBlbnVtZXJhdGlvbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgbW04MXhfdXNiX3Byb2JlYCBmdW5jdGlvbiB3aXRoaW4gdGhlIGB1c2IuY2AgZmlsZS4gVGhpcyBpcyB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnQgd2hlcmUgdGhlIGRyaXZlciBhdHRlbXB0cyB0byBpbml0aWFsaXplIGFuZCBjb25uZWN0IHdpdGggYSBuZXdseSBwbHVnZ2VkLWluIGRldmljZS4gSSdtIHRoaW5raW5nLCBieSBleGFtaW5pbmcgdGhpcyBmdW5jdGlvbiwgSSBzaG91bGQgYmUgYWJsZSB0byBnYWluIGluc2lnaHRzIGludG8gaG93IHRoZSBkcml2ZXIgaWRlbnRpZmllcyBhbmQgY29uZmlndXJlcyB0aGUgYG1tODF4YCBVU0IgZGV2aWNlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHRoZSBtYXRjaGluZyB0YWJsZSBvZiBkZXZpY2UgSURzLCByZXNvdXJjZSBhbGxvY2F0aW9uIChtZW1vcnksIElSUXMsIGV0Yy4pLCBhbmQgdGhlIHNldHVwIG9mIGVuZHBvaW50cy4gVW5kZXJzdGFuZGluZyB0aGUgcHJvYmUgcm91dGluZSBpcyBlc3NlbnRpYWwgZm9yIGRpYWdub3NpbmcgYW55IGRldmljZSBkZXRlY3Rpb24gb3IgaW5pdGlhbGl6YXRpb24gaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA5OCwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI0OjI1LjY1NDE2NjQ4NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTI5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC91c2IuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NDUsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NDU6XFx0c3RhdGljIGludCBtbTgxeF91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSxcXG4gNzQ2OlxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcXG4gNzQ3OlxcdHtcXG4gNzQ4OlxcdFxcdGludCByZXQ7XFxuIDc0OTpcXHRcXHRzdHJ1Y3QgbW04MXggKm1vcnM7XFxuIDc1MDpcXHRcXHRzdHJ1Y3QgbW04MXhfdXNiICptdXNiO1xcbiA3NTE6XFx0XFxuIDc1MjpcXHRcXHRtb3JzID0gbW04MXhfY29yZV9hbGxvYyhzaXplb2YoKm11c2IpLCBcXHUwMDI2aW50ZXJmYWNlLVxcdTAwM2VkZXYpO1xcbiA3NTM6XFx0XFx0aWYgKCFtb3JzKVxcbiA3NTQ6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDc1NTpcXHRcXG4gNzU2OlxcdFxcdG1vcnMtXFx1MDAzZWJ1c19vcHMgPSBcXHUwMDI2bW04MXhfdXNiX29wcztcXG4gNzU3OlxcdFxcdG1vcnMtXFx1MDAzZWJ1c190eXBlID0gTU04MVhfQlVTX1RZUEVfVVNCO1xcbiA3NTg6XFx0XFxuIDc1OTpcXHRcXHRtdXNiID0gKHN0cnVjdCBtbTgxeF91c2IgKiltb3JzLVxcdTAwM2VkcnZfcHJpdjtcXG4gNzYwOlxcdFxcdG11c2ItXFx1MDAzZXVkZXYgPSB1c2JfZ2V0X2RldihpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSkpO1xcbiA3NjE6XFx0XFx0bXVzYi1cXHUwMDNlaW50ZXJmYWNlID0gdXNiX2dldF9pbnRmKGludGVyZmFjZSk7XFxuIDc2MjpcXHRcXG4gNzYzOlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNm11c2ItXFx1MDAzZWxvY2spO1xcbiA3NjQ6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2bXVzYi1cXHUwMDNlYnVzX2xvY2spO1xcbiA3NjU6XFx0XFx0aW5pdF93YWl0cXVldWVfaGVhZChcXHUwMDI2bXVzYi1cXHUwMDNlcndfaW5fd2FpdCk7XFxuIDc2NjpcXHRcXHR1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgbW9ycyk7XFxuIDc2NzpcXHRcXG4gNzY4OlxcdFxcdHJldCA9IG1tODF4X3VzYl9kZXRlY3RfZW5kcG9pbnRzKG1vcnMsIGludGVyZmFjZSk7XFxuIDc2OTpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gNzcwOlxcdFxcdFxcdGdvdG8gZXJyX2NvcmVfZnJlZTtcXG4gNzcxOlxcdFxcbiA3NzI6XFx0XFx0c2V0X2JpdChNTTgxWF9VU0JfRkxBR19BVFRBQ0hFRCwgXFx1MDAyNm11c2ItXFx1MDAzZWZsYWdzKTtcXG4gNzczOlxcdFxcbiA3NzQ6XFx0XFx0cmV0ID0gbW04MXhfY29yZV9pbml0KG1vcnMpO1xcbiA3NzU6XFx0XFx0aWYgKHJldClcXG4gNzc2OlxcdFxcdFxcdGdvdG8gZXJyX3VyYl9jbGVhbnVwO1xcbiA3Nzc6XFx0XFxuIDc3ODpcXHRcXHRJTklUX1dPUksoXFx1MDAyNm1vcnMtXFx1MDAzZXVzYl9pcnFfd29yaywgbW04MXhfdXNiX2lycV93b3JrKTtcXG4gNzc5OlxcdFxcbiA3ODA6XFx0XFx0cmV0ID0gbW04MXhfdXNiX2ludF9lbmFibGUobW9ycyk7XFxuIDc4MTpcXHRcXHRpZiAocmV0KVxcbiA3ODI6XFx0XFx0XFx0Z290byBlcnJfY29yZV9kZWluaXQ7XFxuIDc4MzpcXHRcXG4gNzg0OlxcdFxcdHJldCA9IG1tODF4X2NvcmVfcmVnaXN0ZXIobW9ycyk7XFxuIDc4NTpcXHRcXHRpZiAocmV0KVxcbiA3ODY6XFx0XFx0XFx0Z290byBlcnJfdXNiX2ludF9zdG9wO1xcbiA3ODc6XFx0XFxuIDc4ODpcXHRcXHQvKiBVU0IgcmVxdWlyZXMgcmVtb3RlIHdha2V1cCBmdW5jdGlvbmFsaXR5IGZvciBzdXNwZW5kICovXFxuIDc4OTpcXHRcXHRjbGVhcl9iaXQoTU04MVhfVVNCX0ZMQUdfU1VTUEVOREVELCBcXHUwMDI2bXVzYi1cXHUwMDNlZmxhZ3MpO1xcbiA3OTA6XFx0XFx0bXVzYi1cXHUwMDNlaW50ZXJmYWNlLVxcdTAwM2VuZWVkc19yZW1vdGVfd2FrZXVwID0gMTtcXG4gNzkxOlxcdFxcdHVzYl9lbmFibGVfYXV0b3N1c3BlbmQobXVzYi1cXHUwMDNldWRldik7XFxuIDc5MjpcXHRcXHRwbV9ydW50aW1lX3NldF9hdXRvc3VzcGVuZF9kZWxheShcXHUwMDI2bXVzYi1cXHUwMDNldWRldi1cXHUwMDNlZGV2LFxcbiA3OTM6XFx0XFx0XFx0XFx0XFx0XFx0IFBNX1JVTlRJTUVfQVVUT1NVU1BFTkRfREVMQVlfTVMpO1xcbiA3OTQ6XFx0XFxuIDc5NTpcXHRcXHR1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UoaW50ZXJmYWNlKTtcXG4gNzk2OlxcdFxcdHJldHVybiAwO1xcbiA3OTc6XFx0XFxuIDc5ODpcXHRlcnJfdXNiX2ludF9zdG9wOlxcbiA3OTk6XFx0XFx0bW04MXhfdXNiX2ludF9zdG9wKG1vcnMpO1xcbiA4MDA6XFx0ZXJyX2NvcmVfZGVpbml0OlxcbiA4MDE6XFx0XFx0bW04MXhfY29yZV9kZWluaXQobW9ycyk7XFxuIDgwMjpcXHRlcnJfdXJiX2NsZWFudXA6XFxuIDgwMzpcXHRcXHRtbTgxeF91cmJfY2xlYW51cChtb3JzKTtcXG4gODA0OlxcdGVycl9jb3JlX2ZyZWU6XFxuIDgwNTpcXHRcXHRtbTgxeF9jb3JlX2ZyZWUobW9ycyk7XFxuIDgwNjpcXHRcXHR1c2JfcHV0X2ludGYoaW50ZXJmYWNlKTtcXG4gODA3OlxcdFxcdHVzYl9wdXRfZGV2KGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKSk7XFxuIDgwODpcXHRcXHRyZXR1cm4gcmV0O1xcbiA4MDk6XFx0fVxcbiA4MTA6XFx0XFxuIDgxMTpcXHRzdGF0aWMgdm9pZCBtbTgxeF91c2JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKVxcbiA4MTI6XFx0e1xcbiA4MTM6XFx0XFx0c3RydWN0IG1tODF4ICptb3JzID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpO1xcbiA4MTQ6XFx0XFx0c3RydWN0IG1tODF4X3VzYiAqbXVzYiA9IChzdHJ1Y3QgbW04MXhfdXNiICopbW9ycy1cXHUwMDNlZHJ2X3ByaXY7XFxuIDgxNTpcXHRcXHRpbnQgbWlub3IgPSBpbnRlcmZhY2UtXFx1MDAzZW1pbm9yO1xcbiA4MTY6XFx0XFx0c3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSk7XFxuIDgxNzpcXHRcXG4gODE4OlxcdFxcdGlmICh1ZGV2LVxcdTAwM2VzdGF0ZSA9PSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQpIHtcXG4gODE5OlxcdFxcdFxcdGNsZWFyX2JpdChNTTgxWF9VU0JfRkxBR19BVFRBQ0hFRCwgXFx1MDAyNm11c2ItXFx1MDAzZWZsYWdzKTtcXG4gODIwOlxcdFxcdFxcdHNldF9iaXQoTU04MVhfU1RBVEVfQ0hJUF9VTlJFU1BPTlNJVkUsIFxcdTAwMjZtb3JzLVxcdTAwM2VzdGF0ZV9mbGFncyk7XFxuIDgyMTpcXHRcXHRcXHRkZXZfZGJnKG1vcnMtXFx1MDAzZWRldiwgXFxcIlVTQiBzdWRkZW5seSB1bnBsdWdnZWRcXFwiKTtcXG4gODIyOlxcdFxcdH1cXG4gODIzOlxcdFxcbiA4MjQ6XFx0XFx0dXNiX2Rpc2FibGVfYXV0b3N1c3BlbmQodWRldik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI0OjI1LjY1NDMyMTg2NFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzE2OTY2MjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZTpcblxuKipDb3JlIEluaXRpYWxpemF0aW9uIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBoZXJlLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIHdoZXJlIGRvZXMgaXQgYWxsICpyZWFsbHkqIHN0YXJ0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSdzIHNldHVwIGJlZm9yZSBhbnl0aGluZyBlbHNlLiBUaGUga2V5IGVudHJ5IHBvaW50cyBJJ20gY29uc2lkZXJpbmcgYXJlIGBtbTgxeF9jb3JlX2luaXRgLCBgbW04MXhfY29yZV9yZWdpc3RlcmAsIGFuZCBgbW04MXhfbWFjX2luaXRgLiBFYWNoIG9mIHRoZXNlIGNvdWxkIGJlIHRoZSBjcml0aWNhbCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHRyYWNlIHRocm91Z2ggdGhlc2UgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgdGhlIGluaXRpYWxpemF0aW9uIGZsb3cgYW5kIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMsIHNvIEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCB0aGUgbW9zdCBsaWtlbHkgYW5kIHdvcmsgYmFja3dhcmRzIGlmIG5lZWRlZC4gTGV0J3Mgc2VlIGhvdyB0aGUgY29yZSAqaXRzZWxmKiBpcyBicm91Z2h0IG9ubGluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2OTUsIk91dHB1dFRva2VucyI6NTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI0OjI5LjM3MTI5MDczWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjAzMDEzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtbTgxeF9jb3JlX3JlZ2lzdGVyfG1tODF4X2NvcmVfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jPTExPXN0YXRpYyBpbnQgbW04MXhfY29yZV9hdHRhY2hfcmVncyhzdHJ1Y3QgbW04MXggKm1vcnMpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0zNS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYzozNjpzdGF0aWMgdm9pZCBtbTgxeF9jb3JlX2luaXRfbWFjX2FkZHIoc3RydWN0IG1tODF4ICptb3JzKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTM3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jPTY1PUVYUE9SVF9TWU1CT0xfR1BMKG1tODF4X2NvcmVfYWxsb2MpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTY2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjY3OmludCBtbTgxeF9jb3JlX2luaXQoc3RydWN0IG1tODF4ICptb3JzKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTY4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTczLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjc0OlxcdG1tODF4X2NvcmVfaW5pdF9tYWNfYWRkcihtb3JzKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy03NS1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTEwNS19XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6MTA2OkVYUE9SVF9TWU1CT0xfR1BMKG1tODF4X2NvcmVfaW5pdCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtMTA3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjEwODppbnQgbW04MXhfY29yZV9yZWdpc3RlcihzdHJ1Y3QgbW04MXggKm1vcnMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtMTA5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTExMS19XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6MTEyOkVYUE9SVF9TWU1CT0xfR1BMKG1tODF4X2NvcmVfcmVnaXN0ZXIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTExMy1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oPTQ0OT1zdHJ1Y3QgbW04MXggKm1tODF4X2NvcmVfYWxsb2Moc2l6ZV90IHByaXZfc2l6ZSwgc3RydWN0IGRldmljZSAqZGV2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaDo0NTA6aW50IG1tODF4X2NvcmVfaW5pdChzdHJ1Y3QgbW04MXggKm1vcnMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oOjQ1MTppbnQgbW04MXhfY29yZV9yZWdpc3RlcihzdHJ1Y3QgbW04MXggKm1vcnMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTQ1Mi12b2lkIG1tODF4X2NvcmVfdW5yZWdpc3RlcihzdHJ1Y3QgbW04MXggKm1vcnMpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9zZGlvLmM9NTE3PXN0YXRpYyBpbnQgbW04MXhfc2Rpb19wcm9iZShzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9zZGlvLmMtNTUxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvc2Rpby5jOjU1MjpcXHRyZXQgPSBtbTgxeF9jb3JlX2luaXQobW9ycyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9zZGlvLmMtNTUzLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L3NkaW8uYy01NTktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9zZGlvLmM6NTYwOlxcdHJldCA9IG1tODF4X2NvcmVfcmVnaXN0ZXIobW9ycyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9zZGlvLmMtNTYxLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L3VzYi5jPTc0NT1zdGF0aWMgaW50IG1tODF4X3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC91c2IuYy03NzMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC91c2IuYzo3NzQ6XFx0cmV0ID0gbW04MXhfY29yZV9pbml0KG1vcnMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvdXNiLmMtNzc1LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L3VzYi5jLTc4My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L3VzYi5jOjc4NDpcXHRyZXQgPSBtbTgxeF9jb3JlX3JlZ2lzdGVyKG1vcnMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvdXNiLmMtNzg1LVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI0OjI5LjQzMzMyNTQ3MloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjU3NjU2ODc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gdGhlIG1tODF4IENvcmUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgbW04MXhgIHdpcmVsZXNzIGRyaXZlciBjb2RlIGFnYWluLiBJIHdhbnQgdG8gcmVmcmVzaCBteSBtZW1vcnksIHNwZWNpZmljYWxseSBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmNgLiBMZXQncyB6ZXJvIGluIG9uIGxpbmVzIDYwIHRocm91Z2ggMTIwLiBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgb3ZlcmFsbCBmdW5jdGlvbiBzdHJ1Y3R1cmUgaGVyZSwgcGFydGljdWxhcmx5IGF0IGhvdyB0aGUgY29yZSBtb2R1bGUgaXMgaW5pdGlhbGl6aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBhcmUgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgaGFyZHdhcmUuIFRoZXJlIHNob3VsZCBiZSBzb21lIGNyaXRpY2FsIGNvbmZpZ3VyYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gc3RlcHMgaGFwcGVuaW5nIGluIHRoaXMgc2VjdGlvbi4gSSBleHBlY3QgdG8gc2VlIHNvbWUgcmVnaXN0ZXIgYWNjZXNzIG9yIHBlcmhhcHMgc29tZSByZXNvdXJjZSBhbGxvY2F0aW9uLiBUaGUgZHJpdmVyIGlzIGxpa2VseSBkZWFsaW5nIHdpdGggaXRzIGhhcmR3YXJlJ3MgaW50ZXJydXB0cywgYW5kIGl0IHByb2JhYmx5IGhhcyBzb21lIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBJIHNob3VsZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyB0aW1pbmcgY29uc2lkZXJhdGlvbnMuIEdpdmVuIHRoZSBzZWN0aW9uIEkndmUgY2hvc2VuLCBJIGFtIGV4cGVjdGluZyBhbiBpbnRlcnBsYXkgb2YgbG93LWxldmVsIGhhcmR3YXJlIGludGVyYWN0aW9uIGFuZCBoaWdoZXItbGV2ZWwgYWJzdHJhY3Rpb24uIEkgd2lsbCBrZWVwIGFuIGV5ZSBvdXQgZm9yIGFueSB1bnVzdWFsIGRhdGEgc3RydWN0dXJlcyBvciBlcnJvciBoYW5kbGluZyByb3V0aW5lcyBpbiB0aGlzIHNlY3Rpb24uIEhvcGVmdWxseSwgSSB3aWxsIHNlZSBlbm91Z2ggY29kZSB0aGF0IEkgY2FuIHBpZWNlIHRvZ2V0aGVyIHRoZSBiYXNpY3Mgb2YgdGhpcyBtb2R1bGUncyBvcGVyYXRpb24uIEkgYW0gZ29pbmcgdG8gc2VlIGlmIGFueSBjb2RlIGNvbW1lbnRzIGNvdWxkIGhlbHAgbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MjE3LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjQ6MzIuMDkwOTg1ODhaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzg1MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDYwOlxcdFxcbiAgNjE6XFx0c3RydWN0IG1tODF4ICptbTgxeF9jb3JlX2FsbG9jKHNpemVfdCBwcml2X3NpemUsIHN0cnVjdCBkZXZpY2UgKmRldilcXG4gIDYyOlxcdHtcXG4gIDYzOlxcdFxcdHJldHVybiBtbTgxeF9tYWNfYWxsb2MocHJpdl9zaXplLCBkZXYpO1xcbiAgNjQ6XFx0fVxcbiAgNjU6XFx0RVhQT1JUX1NZTUJPTF9HUEwobW04MXhfY29yZV9hbGxvYyk7XFxuICA2NjpcXHRcXG4gIDY3OlxcdGludCBtbTgxeF9jb3JlX2luaXQoc3RydWN0IG1tODF4ICptb3JzKVxcbiAgNjg6XFx0e1xcbiAgNjk6XFx0XFx0aW50IHJldDtcXG4gIDcwOlxcdFxcbiAgNzE6XFx0XFx0c2V0X2JpdChNTTgxWF9TVEFURV9DSElQX1VOUkVTUE9OU0lWRSwgXFx1MDAyNm1vcnMtXFx1MDAzZXN0YXRlX2ZsYWdzKTtcXG4gIDcyOlxcdFxcdHNldF9iaXQoTU04MVhfU1RBVEVfUkVMT0FEX0ZXX0FGVEVSX1NUQVJULCBcXHUwMDI2bW9ycy1cXHUwMDNlc3RhdGVfZmxhZ3MpO1xcbiAgNzM6XFx0XFxuICA3NDpcXHRcXHRtbTgxeF9jb3JlX2luaXRfbWFjX2FkZHIobW9ycyk7XFxuICA3NTpcXHRcXG4gIDc2OlxcdFxcdHJldCA9IG1tODF4X2NvcmVfYXR0YWNoX3JlZ3MobW9ycyk7XFxuICA3NzpcXHRcXHRpZiAocmV0KVxcbiAgNzg6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gIDc5OlxcdFxcbiAgODA6XFx0XFx0bW9ycy1cXHUwMDNlY2hpcF93cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKFxcXCJjaGlwX3dxXFxcIik7XFxuICA4MTpcXHRcXHRpZiAoIW1vcnMtXFx1MDAzZWNoaXBfd3EpXFxuICA4MjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gIDgzOlxcdFxcbiAgODQ6XFx0XFx0bW9ycy1cXHUwMDNlbmV0X3dxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoXFxcIm5ldF93cVxcXCIpO1xcbiAgODU6XFx0XFx0aWYgKCFtb3JzLVxcdTAwM2VuZXRfd3EpIHtcXG4gIDg2OlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuICA4NzpcXHRcXHRcXHRnb3RvIGVycl9jaGlwX3dxO1xcbiAgODg6XFx0XFx0fVxcbiAgODk6XFx0XFxuICA5MDpcXHRcXHRyZXQgPSBtbTgxeF9oaWZfaW5pdChtb3JzKTtcXG4gIDkxOlxcdFxcdGlmIChyZXQpXFxuICA5MjpcXHRcXHRcXHRnb3RvIGVycl93cXM7XFxuICA5MzpcXHRcXG4gIDk0OlxcdFxcdHJldHVybiAwO1xcbiAgOTU6XFx0XFxuICA5NjpcXHRlcnJfd3FzOlxcbiAgOTc6XFx0XFx0Zmx1c2hfd29ya3F1ZXVlKG1vcnMtXFx1MDAzZW5ldF93cSk7XFxuICA5ODpcXHRcXHRkZXN0cm95X3dvcmtxdWV1ZShtb3JzLVxcdTAwM2VuZXRfd3EpO1xcbiAgOTk6XFx0XFxuIDEwMDpcXHRlcnJfY2hpcF93cTpcXG4gMTAxOlxcdFxcdGZsdXNoX3dvcmtxdWV1ZShtb3JzLVxcdTAwM2VjaGlwX3dxKTtcXG4gMTAyOlxcdFxcdGRlc3Ryb3lfd29ya3F1ZXVlKG1vcnMtXFx1MDAzZWNoaXBfd3EpO1xcbiAxMDM6XFx0XFxuIDEwNDpcXHRcXHRyZXR1cm4gcmV0O1xcbiAxMDU6XFx0fVxcbiAxMDY6XFx0RVhQT1JUX1NZTUJPTF9HUEwobW04MXhfY29yZV9pbml0KTtcXG4gMTA3OlxcdFxcbiAxMDg6XFx0aW50IG1tODF4X2NvcmVfcmVnaXN0ZXIoc3RydWN0IG1tODF4ICptb3JzKVxcbiAxMDk6XFx0e1xcbiAxMTA6XFx0XFx0cmV0dXJuIG1tODF4X21hY19yZWdpc3Rlcihtb3JzKTtcXG4gMTExOlxcdH1cXG4gMTEyOlxcdEVYUE9SVF9TWU1CT0xfR1BMKG1tODF4X2NvcmVfcmVnaXN0ZXIpO1xcbiAxMTM6XFx0XFxuIDExNDpcXHR2b2lkIG1tODF4X2NvcmVfdW5yZWdpc3RlcihzdHJ1Y3QgbW04MXggKm1vcnMpXFxuIDExNTpcXHR7XFxuIDExNjpcXHRcXHRtbTgxeF9tYWNfdW5yZWdpc3Rlcihtb3JzKTtcXG4gMTE3OlxcdH1cXG4gMTE4OlxcdEVYUE9SVF9TWU1CT0xfR1BMKG1tODF4X2NvcmVfdW5yZWdpc3Rlcik7XFxuIDExOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjQ6MzIuMDkxMzc0NDFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg5Mjg5MDMwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBtbTgxeCBNQUMgUmVnaXN0ZXIgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIGBtbTgxeF9tYWNfcmVnaXN0ZXJgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBtYWMuY2AgaW4gdGhlIGBtb3JzZW1pY3JvYCB3aXJlbGVzcyBkcml2ZXIgZGlyZWN0b3J5LiBNeSBmaXJzdCBzdGVwIGlzIG9idmlvdXNseSB0byBnbyBhbmQgZmluZCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuY2AgYW5kIHplcm8gaW4gb24gdGhlIGBtbTgxeF9tYWNfcmVnaXN0ZXJgIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBNQUMgbGF5ZXIuIEZyb20gdGhhdCBzcG90IEknbGwgYmUgYWJsZSB0byBncmFzcCBob3cgdGhpcyByZWdpc3RyYXRpb24gcHJvY2VzcyBmaXRzIGludG8gdGhlIG92ZXJhbGwgZHJpdmVyIGFyY2hpdGVjdHVyZSwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSwgYW5kIGFueSBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcy4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGNydWNpYWwgbGluZXMgYW5kIGFueSBwb2ludHMgb2YgcG9zc2libGUgY29udGVudGlvbiBvciBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIG1vZHVsZXMuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTc0MTIsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI0OjMzLjk4NDI2OTUyM1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg2Njc3MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW04MXhfbWFjX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM9MTA4PWludCBtbTgxeF9jb3JlX3JlZ2lzdGVyKHN0cnVjdCBtbTgxeCAqbW9ycylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0xMDkte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjExMDpcXHRyZXR1cm4gbW04MXhfbWFjX3JlZ2lzdGVyKG1vcnMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTExMS19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jPTIzNjA9c3RhdGljIHZvaWQgbW04MXhfbWFjX3N0YWxlX3R4X3N0YXR1c190aW1lcl9pbml0KHN0cnVjdCBtbTgxeCAqbW9ycylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjM2NS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jOjIzNjY6aW50IG1tODF4X21hY19yZWdpc3RlcihzdHJ1Y3QgbW04MXggKm1vcnMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMzY3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmg9NTE9c3RydWN0IG1tODF4ICptbTgxeF9tYWNfYWxsb2Moc2l6ZV90IHByaXZfc2l6ZSwgc3RydWN0IGRldmljZSAqZGV2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5oOjUyOmludCBtbTgxeF9tYWNfcmVnaXN0ZXIoc3RydWN0IG1tODF4ICptb3JzKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5oLTUzLXZvaWQgbW04MXhfbWFjX2ZyZWUoc3RydWN0IG1tODF4ICptb3JzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjQ6MzQuMDYyOTQ0NDAxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNjEwMTkxMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHJlYWRpbmcgYW5kIHByb2Nlc3NpbmcgdGhlIHByb3ZpZGVkIHRleHQ6XG5cbioqRGl2aW5nIGludG8gdGhlIE1BQyBSZWdpc3RlciBEZWZpbml0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgTUFDIHJlZ2lzdGVyIGRlZmluaXRpb24uIFRoZSBjb2RlIHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBgbW04MXhfbWFjX3JlZ2lzdGVyYCwgYW5kIHRoZSBmaWxlIGlzIGBtYWMuY2AuIE9rYXksIHNvIHRoYXQgbWVhbnMgSSdtIHByb2JhYmx5IGxvb2tpbmcgYXQgdGhlIGNvcmUgc3RydWN0dXJlIGRlZmluaXRpb24gZm9yIHRoZSBNQUMgaGFyZHdhcmUgcmVnaXN0ZXJzIHdpdGhpbiB0aGlzIHBhcnRpY3VsYXIgZHJpdmVyLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBmaWVsZCBkZWZpbml0aW9ucywgYml0IHBvc2l0aW9ucywgYW5kIGRlc2NyaXB0aW9ucyB0aGF0IGRldGFpbCBob3cgdGhlIGhhcmR3YXJlIGlzIGNvbnRyb2xsZWQgYW5kIG1vbml0b3JlZC4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2sgZm9yIHRoZSBkZXZpY2UncyBNQUMgZnVuY3Rpb25hbGl0eS4gTm93LCBsZXQncyBzZWUgaG93IHRoZXkndmUgc3RydWN0dXJlZCBpdOKApiBJJ20gZXNwZWNpYWxseSBrZWVuIHRvIHNlZSBob3cgdGhleSd2ZSBoYW5kbGVkIHBvdGVudGlhbCBiaXRmaWVsZHMgZm9yIHNwZWVkLCBvciBpZiB0aGV5J3ZlIHVzZWQgc29tZSBvdGhlciBhcHByb2FjaC4gVGhpcyBpcyBnb2luZyB0byBiZSBnb29kIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxODEyNSwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI0OjM2LjEyMzk2NjQyOVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjgzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMzY1LFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMzY1OlxcdFxcbjIzNjY6XFx0aW50IG1tODF4X21hY19yZWdpc3RlcihzdHJ1Y3QgbW04MXggKm1vcnMpXFxuMjM2NzpcXHR7XFxuMjM2ODpcXHRcXHRpbnQgcmV0O1xcbjIzNjk6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBtb3JzLVxcdTAwM2VodztcXG4yMzcwOlxcdFxcbjIzNzE6XFx0XFx0bW9ycy1cXHUwMDNldHhfcG93ZXJfbWJtID0gSU5UX01BWDtcXG4yMzcyOlxcdFxcdG1vcnMtXFx1MDAzZXR4X21heF9wb3dlcl9tYm0gPSBJTlRfTUFYO1xcbjIzNzM6XFx0XFx0bW9ycy1cXHUwMDNlcnRzX3RocmVzaG9sZCA9IElFRUU4MDIxMV9NQVhfUlRTX1RIUkVTSE9MRDtcXG4yMzc0OlxcdFxcbjIzNzU6XFx0XFx0cmV0ID0gbW04MXhfcHNfaW5pdChtb3JzKTtcXG4yMzc2OlxcdFxcdGlmIChyZXQpXFxuMjM3NzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjIzNzg6XFx0XFxuMjM3OTpcXHRcXHRtbTgxeF9tYWNfY29uZmlnX2h3KG1vcnMpO1xcbjIzODA6XFx0XFx0bW04MXhfbWFjX2h3X3NjYW5faW5pdChtb3JzKTtcXG4yMzgxOlxcdFxcdG1tODF4X21hY19zdGFsZV90eF9zdGF0dXNfdGltZXJfaW5pdChtb3JzKTtcXG4yMzgyOlxcdFxcbjIzODM6XFx0XFx0cmV0ID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KGh3KTtcXG4yMzg0OlxcdFxcdGlmIChyZXQpIHtcXG4yMzg1OlxcdFxcdFxcdGRldl9lcnIobW9ycy1cXHUwMDNlZGV2LCBcXFwiaWVlZTgwMjExX3JlZ2lzdGVyX2h3IGZhaWxlZCAlZFxcXCIsIHJldCk7XFxuMjM4NjpcXHRcXHRcXHRtbTgxeF9tYWNfdW5yZWdpc3Rlcihtb3JzKTtcXG4yMzg3OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMjM4ODpcXHRcXHR9XFxuMjM4OTpcXHRcXG4yMzkwOlxcdFxcdG1tODF4X3JjX2luaXQobW9ycyk7XFxuMjM5MTpcXHRcXG4yMzkyOlxcdFxcdC8qXFxuMjM5MzpcXHRcXHQgKiBBdCB0aGlzIHN0YWdlLCB3ZSBrbm93IGJ1cyBhbmQgcGFnZXIgc3lzdGVtIGludGVycnVwdHMgYXJlIGVuYWJsZWQuXFxuMjM5NDpcXHRcXHQgKiBUcmlnZ2VyIHRoZSByZWNlaXZlIHdvcmtxdWV1ZSB0byBkcmFpbiBhbnkgaW5jb21pbmcgY2hpcC10by1ob3N0XFxuMjM5NTpcXHRcXHQgKiBwZW5kaW5nIHBhY2tldHMgYmVlbiBwdXNoZWQgaW4gdGhlIHBlcmlvZCBiZXR3ZWVuIHRoZSBmaXJtd2FyZVxcbjIzOTY6XFx0XFx0ICogaW5pdGlhbGl6YXRpb24gYW5kIGludGVycnVwdHMgYmVpbmcgZW5hYmxlZC5cXG4yMzk3OlxcdFxcdCAqL1xcbjIzOTg6XFx0XFx0c2V0X2JpdChNTTgxWF9ISUZfRVZUX1JYX1BFTkQsIFxcdTAwMjZtb3JzLVxcdTAwM2VoaWYuZXZlbnRfZmxhZ3MpO1xcbjIzOTk6XFx0XFx0cXVldWVfd29yayhtb3JzLVxcdTAwM2VjaGlwX3dxLCBcXHUwMDI2bW9ycy1cXHUwMDNlaGlmX3dvcmspO1xcbjI0MDA6XFx0XFxuMjQwMTpcXHRcXHRyZXR1cm4gcmV0O1xcbjI0MDI6XFx0fVxcbjI0MDM6XFx0XFxuMjQwNDpcXHR2b2lkIG1tODF4X21hY191bnJlZ2lzdGVyKHN0cnVjdCBtbTgxeCAqbW9ycylcXG4yNDA1OlxcdHtcXG4yNDA2OlxcdFxcdG1tODF4X3BzX2Rpc2FibGUobW9ycyk7XFxuMjQwNzpcXHRcXHRtbTgxeF9yY19kZWluaXQobW9ycyk7XFxuMjQwODpcXHRcXHRtbTgxeF9tYWNfaHdfc2Nhbl9kZXN0cm95KG1vcnMpO1xcbjI0MDk6XFx0XFxuMjQxMDpcXHRcXHRpZWVlODAyMTFfc3RvcF9xdWV1ZXMobW9ycy1cXHUwMDNlaHcpO1xcbjI0MTE6XFx0XFx0aWVlZTgwMjExX3VucmVnaXN0ZXJfaHcobW9ycy1cXHUwMDNlaHcpO1xcbjI0MTI6XFx0XFxuMjQxMzpcXHRcXHRtbTgxeF9oaWZfZmx1c2hfdHhfZGF0YShtb3JzKTtcXG4yNDE0OlxcdFxcdG1tODF4X2hpZl9mbHVzaF9jbWRzKG1vcnMpO1xcbjI0MTU6XFx0XFx0bW04MXhfc3RhbGVfdHhfc3RhdHVzX3RpbWVyX2ZpbmlzaChtb3JzKTtcXG4yNDE2OlxcdFxcdG1tODF4X3BzX2ZpbmlzaChtb3JzKTtcXG4yNDE3OlxcdFxcbjI0MTg6XFx0XFx0a2ZyZWUobW9ycy1cXHUwMDNlbWNhc3RfZmlsdGVyKTtcXG4yNDE5OlxcdH1cXG4yNDIwOlxcdFxcbjI0MjE6XFx0c3RydWN0IG1tODF4ICptbTgxeF9tYWNfYWxsb2Moc2l6ZV90IHByaXZfc2l6ZSwgc3RydWN0IGRldmljZSAqZGV2KVxcbjI0MjI6XFx0e1xcbjI0MjM6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9odyAqaHc7XFxuMjQyNDpcXHRcXHRzdHJ1Y3QgbW04MXggKm1vcnM7XFxuMjQyNTpcXHRcXG4yNDI2OlxcdFxcdGh3ID0gaWVlZTgwMjExX2FsbG9jX2h3KHNpemVvZigqbW9ycykgKyBwcml2X3NpemUsIFxcdTAwMjZtbTgxeF9vcHMpO1xcbjI0Mjc6XFx0XFx0aWYgKCFodykge1xcbjI0Mjg6XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJpZWVlODAyMTFfYWxsb2NfaHcgZmFpbGVkXFxcXHJcXFxcblxcXCIpO1xcbjI0Mjk6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMjQzMDpcXHRcXHR9XFxuMjQzMTpcXHRcXG4yNDMyOlxcdFxcdFNFVF9JRUVFODAyMTFfREVWKGh3LCBkZXYpO1xcbjI0MzM6XFx0XFx0bWVtc2V0KGh3LVxcdTAwM2Vwcml2LCAwLCBzaXplb2YoKm1vcnMpKTtcXG4yNDM0OlxcdFxcbjI0MzU6XFx0XFx0bW9ycyA9IGh3LVxcdTAwM2Vwcml2O1xcbjI0MzY6XFx0XFx0bW9ycy1cXHUwMDNlaHcgPSBodztcXG4yNDM3OlxcdFxcdG1vcnMtXFx1MDAzZWRldiA9IGRldjtcXG4yNDM4OlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNm1vcnMtXFx1MDAzZWNtZF9sb2NrKTtcXG4yNDM5OlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNm1vcnMtXFx1MDAzZWNtZF93YWl0KTtcXG4yNDQwOlxcdFxcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXFx1MDAyNm1vcnMtXFx1MDAzZXR4X2VtcHR5X3dhaXRxKTtcXG4yNDQxOlxcdFxcbjI0NDI6XFx0XFx0cmV0dXJuIG1vcnM7XFxuMjQ0MzpcXHR9XFxuMjQ0NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjQ6MzYuMTI0MDk1OTQ5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5ODA0MDIzODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGaXJtd2FyZSBDaGFubmVsIENoZWNrKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnMobW9ycy1cdTAwM2VodylgIGZ1bmN0aW9uLiBUaGUgY29kZSBzYXlzIGl0IGdldHMgY2FsbGVkIGR1cmluZyBgbW04MXhfbWFjX3Jlc3RhcnRgLiBUaGF0J3MgdGhlIGtleTogd2hlbiBkb2VzIGBtbTgxeF9tYWNfcmVzdGFydGAgKml0c2VsZiogZ2V0IHRyaWdnZXJlZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy4gTGV0J3Mgc2VlLi4uIGEgcXVpY2sgc2NhbiBvZiBgbWFjLmNgIGFyb3VuZCBsaW5lcyAyMTc1IHRvIDIyODUgc2hvdWxkIGdpdmUgbWUgdGhlIGFuc3dlci4gSSdtIGxvb2tpbmcgZm9yIHRoZSBjYWxsIHNpdGVzIG9mIGBtbTgxeF9tYWNfcmVzdGFydGAgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGF0IHJlZ2lvbiBvZiB0aGUgZmlsZSB0byB1bmRlcnN0YW5kIHRoZSBjaXJjdW1zdGFuY2VzIHVuZGVyIHdoaWNoIHRoZSBmaXJtd2FyZSBjaGFubmVsIGNoZWNrIHJ1bnMuIFRoaXMgc2hvdWxkIHRlbGwgbWUgdGhlIGNvbnRleHQgb2YgdGhpcyBmdW5jdGlvbidzIG9wZXJhdGlvbiBhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5Njg0LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNDo0MS4xMDQ1MDA4ODVaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3ODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjE3MCxcbiAgXCJMaW5lQ291bnRcIjogMTE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIxNzA6XFx0ZXhpdDpcXG4yMTcxOlxcdFxcdG1tODF4X3BzX2VuYWJsZShtb3JzKTtcXG4yMTcyOlxcdFxcdHJldHVybiByZXQ7XFxuMjE3MzpcXHR9XFxuMjE3NDpcXHRcXG4yMTc1OlxcdHN0YXRpYyBpbnQgbW04MXhfbWFjX29wc19hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbjIxNzY6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpXFxuMjE3NzpcXHR7XFxuMjE3ODpcXHRcXHRpbnQgcmV0ID0gMDtcXG4yMTc5OlxcdFxcdHN0cnVjdCBtbTgxeCAqbW9ycyA9IGh3LVxcdTAwM2Vwcml2O1xcbjIxODA6XFx0XFx0c3RydWN0IG1tODF4X3ZpZiAqbW9yc192aWYgPSAoc3RydWN0IG1tODF4X3ZpZiAqKXZpZi1cXHUwMDNlZHJ2X3ByaXY7XFxuMjE4MTpcXHRcXG4yMTgyOlxcdFxcdGlmICh0ZXN0X2JpdChNTTgxWF9TVEFURV9SRUxPQURfRldfQUZURVJfU1RBUlQsIFxcdTAwMjZtb3JzLVxcdTAwM2VzdGF0ZV9mbGFncykpIHtcXG4yMTgzOlxcdFxcdFxcdGRldl9pbmZvKG1vcnMtXFx1MDAzZWRldiwgXFxcIlJlc3RhcnRpbmcgY2hpcCB3aXRoIHJlZ2RvbTogJXNcXFwiLFxcbjIxODQ6XFx0XFx0XFx0XFx0IG1vcnMtXFx1MDAzZWNvdW50cnkpO1xcbjIxODU6XFx0XFxuMjE4NjpcXHRcXHRcXHRyZXQgPSBtbTgxeF9tYWNfcmVzdGFydChtb3JzKTtcXG4yMTg3OlxcdFxcdFxcdGlmIChyZXQpIHtcXG4yMTg4OlxcdFxcdFxcdFxcdGRldl9lcnIobW9ycy1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHJlc3RhcnQgY2hpcFxcXCIpO1xcbjIxODk6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4yMTkwOlxcdFxcdFxcdH1cXG4yMTkxOlxcdFxcbjIxOTI6XFx0XFx0XFx0LypcXG4yMTkzOlxcdFxcdFxcdCAqIG1hY19yZXN0YXJ0IHdpbGwgdHJpZ2dlciBpZWVlODAyMTFfaHdfcmVzdGFydCBhbmRcXG4yMTk0OlxcdFxcdFxcdCAqIGFkZF9pbnRlcmZhY2Ugd2lsbCByZS1lbnRlci4ganVzdCBleGl0IGhlcmUgaW5zdGVhZC5cXG4yMTk1OlxcdFxcdFxcdCAqL1xcbjIxOTY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjE5NzpcXHRcXHR9XFxuMjE5ODpcXHRcXG4yMTk5OlxcdFxcdHZpZi1cXHUwMDNlZHJpdmVyX2ZsYWdzIHw9IElFRUU4MDIxMV9WSUZfQkVBQ09OX0ZJTFRFUjtcXG4yMjAwOlxcdFxcdG1vcnNfdmlmLVxcdTAwM2Vtb3JzID0gbW9ycztcXG4yMjAxOlxcdFxcbjIyMDI6XFx0XFx0cmV0ID0gbW04MXhfY21kX2FkZF9pZihtb3JzLCBcXHUwMDI2bW9yc192aWYtXFx1MDAzZWlkLCB2aWYtXFx1MDAzZWFkZHIsIHZpZi1cXHUwMDNldHlwZSk7XFxuMjIwMzpcXHRcXHRpZiAocmV0KSB7XFxuMjIwNDpcXHRcXHRcXHRkZXZfZXJyKG1vcnMtXFx1MDAzZWRldiwgXFxcIm1tODF4X2NtZF9hZGRfaWYgZmFpbGVkICVkXFxcIiwgcmV0KTtcXG4yMjA1OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMjIwNjpcXHRcXHR9XFxuMjIwNzpcXHRcXG4yMjA4OlxcdFxcdGlmIChtb3JzX3ZpZi1cXHUwMDNlaWQgXFx1MDAzZT0gQVJSQVlfU0laRShtb3JzLVxcdTAwM2V2aWZzKSkge1xcbjIyMDk6XFx0XFx0XFx0ZGV2X2Vycihtb3JzLVxcdTAwM2VkZXYsIFxcXCJ2aWZfaWQgaXMgdG9vIGxhcmdlICV1XFxcIiwgbW9yc192aWYtXFx1MDAzZWlkKTtcXG4yMjEwOlxcdFxcdFxcdHJldCA9IC1FT1BOT1RTVVBQO1xcbjIyMTE6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4yMjEyOlxcdFxcdH1cXG4yMjEzOlxcdFxcbjIyMTQ6XFx0XFx0aWYgKG1vcnNfdmlmLVxcdTAwM2VpZCAhPSAobW9yc192aWYtXFx1MDAzZWlkIFxcdTAwMjYgTU04MVhfVFhfQ09ORl9GTEFHU19WSUZfSURfTUFTSykpIHtcXG4yMjE1OlxcdFxcdFxcdGRldl9lcnIobW9ycy1cXHUwMDNlZGV2LCBcXFwiaW52YWxpZCB2aWZfaWQgJXVcXFwiLCBtb3JzX3ZpZi1cXHUwMDNlaWQpO1xcbjIyMTY6XFx0XFx0XFx0cmV0ID0gLUVPUE5PVFNVUFA7XFxuMjIxNzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjIyMTg6XFx0XFx0fVxcbjIyMTk6XFx0XFxuMjIyMDpcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIobW9ycy1cXHUwMDNldmlmc1ttb3JzX3ZpZi1cXHUwMDNlaWRdLCB2aWYpO1xcbjIyMjE6XFx0XFxuMjIyMjpcXHRcXHRpZiAodmlmLVxcdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKVxcbjIyMjM6XFx0XFx0XFx0bW04MXhfbWFjX2JlYWNvbl9pbml0KG1vcnNfdmlmKTtcXG4yMjI0OlxcdFxcbjIyMjU6XFx0XFx0cmV0ID0gbW04MXhfY21kX2dldF9jYXBhYmlsaXRpZXMobW9ycywgbW9yc192aWYtXFx1MDAzZWlkLCBcXHUwMDI2bW9ycy1cXHUwMDNlZndfY2Fwcyk7XFxuMjIyNjpcXHRcXHRpZiAocmV0KSB7XFxuMjIyNzpcXHRcXHRcXHRkZXZfZXJyKG1vcnMtXFx1MDAzZWRldixcXG4yMjI4OlxcdFxcdFxcdFxcdFxcXCJtbTgxeF9jbWRfZ2V0X2NhcGFiaWxpdGllcyBmYWlsZWQgZm9yIHZpZiAlZFxcXCIsXFxuMjIyOTpcXHRcXHRcXHRcXHRtb3JzX3ZpZi1cXHUwMDNlaWQpO1xcbjIyMzA6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4yMjMxOlxcdFxcdH1cXG4yMjMyOlxcdFxcbjIyMzM6XFx0XFx0aWVlZTgwMjExX3dha2VfcXVldWVzKG1vcnMtXFx1MDAzZWh3KTtcXG4yMjM0OlxcdFxcdHJldHVybiByZXQ7XFxuMjIzNTpcXHR9XFxuMjIzNjpcXHRcXG4yMjM3OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyBtbTgxeF9vcHMgPSB7XFxuMjIzODpcXHRcXHQuc3RhcnQgPSBtbTgxeF9tYWNfb3BzX3N0YXJ0LFxcbjIyMzk6XFx0XFx0LnN0b3AgPSBtbTgxeF9tYWNfb3BzX3N0b3AsXFxuMjI0MDpcXHRcXHQuY29uZmlnID0gbW04MXhfbWFjX29wc19jb25maWcsXFxuMjI0MTpcXHRcXHQud2FrZV90eF9xdWV1ZSA9IGllZWU4MDIxMV9oYW5kbGVfd2FrZV90eF9xdWV1ZSxcXG4yMjQyOlxcdFxcdC50eCA9IG1tODF4X21hY19vcHNfdHgsXFxuMjI0MzpcXHRcXHQuYWRkX2ludGVyZmFjZSA9IG1tODF4X21hY19vcHNfYWRkX2ludGVyZmFjZSxcXG4yMjQ0OlxcdFxcdC5yZW1vdmVfaW50ZXJmYWNlID0gbW04MXhfbWFjX29wc19yZW1vdmVfaW50ZXJmYWNlLFxcbjIyNDU6XFx0XFx0LmNvbmZpZ3VyZV9maWx0ZXIgPSBtbTgxeF9tYWNfb3BzX2NvbmZpZ3VyZV9maWx0ZXIsXFxuMjI0NjpcXHRcXHQuc3RhX3N0YXRlID0gbW04MXhfbWFjX29wc19zdGFfc3RhdGUsXFxuMjI0NzpcXHRcXHQuZmx1c2ggPSBtbTgxeF9tYWNfb3BzX2ZsdXNoLFxcbjIyNDg6XFx0XFx0LnNldF9mcmFnX3RocmVzaG9sZCA9IG1tODF4X21hY19zZXRfZnJhZ190aHJlc2hvbGQsXFxuMjI0OTpcXHRcXHQuc2V0X3J0c190aHJlc2hvbGQgPSBtbTgxeF9tYWNfb3BzX3NldF9ydHNfdGhyZXNob2xkLFxcbjIyNTA6XFx0XFx0LnN0YV9zdGF0aXN0aWNzID0gbW04MXhfbWFjX29wc19zdGFfc3RhdGlzdGljcyxcXG4yMjUxOlxcdFxcdC5nZXRfZXhwZWN0ZWRfdGhyb3VnaHB1dCA9IG1tODF4X2dldF9leHBlY3RlZF90aHJvdWdocHV0LFxcbjIyNTI6XFx0XFx0Lmh3X3NjYW4gPSBtbTgxeF9tYWNfb3BzX2h3X3NjYW4sXFxuMjI1MzpcXHRcXHQuY2FuY2VsX2h3X3NjYW4gPSBtbTgxeF9tYWNfb3BzX2NhbmNlbF9od19zY2FuLFxcbjIyNTQ6XFx0XFx0LmdldF90eHBvd2VyID0gbW04MXhfbWFjX29wc19nZXRfdHhwb3dlcixcXG4yMjU1OlxcdFxcdC5ic3NfaW5mb19jaGFuZ2VkID0gbW04MXhfbWFjX29wc19ic3NfaW5mb19jaGFuZ2VkLFxcbjIyNTY6XFx0XFx0LnByZXBhcmVfbXVsdGljYXN0ID0gbW04MXhfbWFjX29wc19wcmVwYXJlX211bHRpY2FzdCxcXG4yMjU3OlxcdFxcdC5jb25mX3R4ID0gbW04MXhfbWFjX29wc19jb25mX3R4LFxcbjIyNTg6XFx0XFx0LmFtcGR1X2FjdGlvbiA9IG1tODF4X21hY19vcHNfYW1wZHVfYWN0aW9uLFxcbjIyNTk6XFx0XFx0LnNldF9rZXkgPSBtbTgxeF9tYWNfb3BzX3NldF9rZXksXFxuMjI2MDpcXHRcXHQuYWRkX2NoYW5jdHggPSBpZWVlODAyMTFfZW11bGF0ZV9hZGRfY2hhbmN0eCxcXG4yMjYxOlxcdFxcdC5yZW1vdmVfY2hhbmN0eCA9IGllZWU4MDIxMV9lbXVsYXRlX3JlbW92ZV9jaGFuY3R4LFxcbjIyNjI6XFx0XFx0LmNoYW5nZV9jaGFuY3R4ID0gaWVlZTgwMjExX2VtdWxhdGVfY2hhbmdlX2NoYW5jdHgsXFxuMjI2MzpcXHRcXHQuc3dpdGNoX3ZpZl9jaGFuY3R4ID0gaWVlZTgwMjExX2VtdWxhdGVfc3dpdGNoX3ZpZl9jaGFuY3R4LFxcbjIyNjQ6XFx0fTtcXG4yMjY1OlxcdFxcbjIyNjY6XFx0c3RhdGljIHZvaWQgbW04MXhfcmVnX25vdGlmaWVyKHN0cnVjdCB3aXBoeSAqd2lwaHksXFxuMjI2NzpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdClcXG4yMjY4OlxcdHtcXG4yMjY5OlxcdFxcdGludCByZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI0OjQxLjEwNDY0MDIzNVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTM0MjY2ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIGZvciBTeXprYWxsZXIgRnV6emluZyBvZiB0aGUgbW04MXggRHJpdmVyKipcblxuT2theSwgc28gYG1tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFuc2AgaXMgdGhlIGZ1bmN0aW9uIG9mIGludGVyZXN0IGhlcmUsIHRyaWdnZXJlZCB3aGVuIGFuIGludGVyZmFjZSBpcyBhZGRlZCwgb3IgdGhyb3VnaCByZWdpc3RlciBub3RpZmllcnMgb3IgcmVzdGFydHMuIFRoaXMgaXMgZm9yIE1vcnNlIE1pY3JvIE1NODF4IHdpcmVsZXNzIGRldmljZXMsIHdoaWNoIGlzIGdyZWF0IGJlY2F1c2UgaXQgc3VwcG9ydHMgYm90aCBVU0IgKGBDT05GSUdfTU04MVhfVVNCYCkgYW5kIFNESU8gKGBDT05GSUdfTU04MVhfU0RJT2ApLiBUaGUga2V5IHF1ZXN0aW9uIGluIG15IG1pbmQgaXMsIGNhbiB0aGlzIGJlIGVmZmVjdGl2ZWx5IGZ1enplZCB3aXRoIHN5emthbGxlcj8gVGhlIGFuc3dlciBpcyBsaWtlbHkgeWVzLCBzaW5jZSBzeXprYWxsZXIgaXMga25vd24gdG8gaGF2ZSBleGNlbGxlbnQgVVNCIGRyaXZlciBmdXp6aW5nIGNhcGFiaWxpdGllcyB2aWEgZHVtbXlfaGNkLCByYXctZ2FkZ2V0LCBhbmQgVVNCIGVtdWxhdGlvbi5cblxuU2luY2Ugc3l6a2FsbGVyIGNhbiBkZWZpbml0ZWx5IGZ1enogVVNCIGRyaXZlcnMsIHRoZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB3aGF0IGhhcHBlbnMgd2hlbiBhIFVTQiBkZXZpY2Ugd2l0aCBWSUQgMHgzMjViIChNTTgxWF9WRU5ET1JfSUQpIGlzIGNvbm5lY3RlZC4gVGhpcyB0cmlnZ2VycyBgbW04MXhfdXNiX3Byb2JlYC4gTm93LCBkb2VzIGBtbTgxeF91c2JfcHJvYmVgIHJlcXVpcmUgZmlybXdhcmUgb3IgZG9lcyBpdCBkaXJlY3RseSBjb21tdW5pY2F0ZSB3aXRoIHRoZSBVU0IgZGV2aWNlPyBJJ20gZ29pbmcgdG8gZGlnIGludG8gdGhlIGNvZGUsIHNwZWNpZmljYWxseSBjaGVja2luZyBgbW04MXhfY29yZV9hdHRhY2hfcmVnc2AsIGZpcm13YXJlIGxvYWRpbmcsIGFuZCByZWxhdGVkIGZpbGVzLiBMZXQgbWUgc3RhcnQgbG9va2luZyBhdCBgZncuY2AsIGBody5jYCwgYW5kIGBjb3JlLmNgIHRvIHVuZGVyc3RhbmQgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MgYW5kIGlkZW50aWZ5IHBvdGVudGlhbCBmdXp6aW5nIGVudHJ5IHBvaW50cy4gVGhpcyBjb3VsZCBiZSBwcm9taXNpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxODg5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjQ6NDUuMjM4OTA5ODM0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzkzNTQ1NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVxdWVzdF9maXJtd2FyZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYz02OTE9aW50IG1tODF4X2Z3X2luaXQoc3RydWN0IG1tODF4ICptb3JzLCBib29sIHJlc2V0KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTcyMi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmM6NzIzOlxcdHJldCA9IHJlcXVlc3RfZmlybXdhcmUoXFx1MDAyNmJjZiwgYmNmX3BhdGgsIG1vcnMtXFx1MDAzZWRldik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTcyNC1cXHRpZiAocmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI0OjQ1LjQxODI2OTM4MloiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NTkxOTMwMDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIGZvciBPdXQtb2YtQm91bmRzIEFjY2VzcyBpbiBtbTgxeCBGaXJtd2FyZSBEaXNhYmxlZCBDaGFubmVscyBDaGVjayoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBgbW04MXhfbWFjX2NoZWNrX2Z3X2Rpc2FibGVkX2NoYW5zYCBmdW5jdGlvbiBhbmQgdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSB3ZSBoYXZlIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgaGVyZTogYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgcmVhZC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgaW4gaG93IHRoZSBmdW5jdGlvbiBoYW5kbGVzIHRoZSBudW1iZXIgb2YgZGlzYWJsZWQgY2hhbm5lbHMgcmVwb3J0ZWQgYnkgdGhlIGRldmljZSBmaXJtd2FyZS5cblxuVGhlIGNvZGUgYWxsb2NhdGVzIGEgYnVmZmVyLCBgcmVzcGAsIHRvIHJlY2VpdmUgdGhlIGRpc2FibGVkIGNoYW5uZWwgaW5mb3JtYXRpb24uIFRoZSBzaXplIG9mIHRoaXMgYnVmZmVyIGlzIGJhc2VkIG9uIHRoZSBrbm93biBzaXplIG9mIGBtb3JzX3MxZ2h6X2NoYW5uZWxzYCAod2hpY2ggbG9va3MgbGlrZSBhbiBhcnJheSBvZiBgaWVlZTgwMjExX2NoYW5uZWxgIHN0cnVjdHVyZXMpIGFuZCBzb21lIGhlYWRlciBpbmZvcm1hdGlvbi4gVGhlbiwgaXQgY2FsbHMgYG1tODF4X2NtZF9nZXRfZGlzYWJsZWRfY2hhbm5lbHNgIHRvIHBvcHVsYXRlIGByZXNwYC5cblxuVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhlIHNlY29uZCBsb29wLiBJdCBpdGVyYXRlcyB0aHJvdWdoIHRoZSBgcmVzcC1cdTAwM2VjaGFubmVsc2AgYXJyYXksIHRoZSBzaXplIG9mIHdoaWNoIGlzIGRldGVybWluZWQgYnkgYHJlc3AtXHUwMDNlbl9jaGFubmVsc2AsIGEgdmFsdWUgdGhhdCBjb21lcyBkaXJlY3RseSBmcm9tIHRoZSBkZXZpY2UgZmlybXdhcmUuIFRoZSBwYXRjaCBpbmNsdWRlcyBhIGNydWNpYWwgY2hlY2s6IGl0IHZlcmlmaWVzIHRoYXQgYHJlc3AtXHUwMDNlbl9jaGFubmVsc2AgZG9lc24ndCBleGNlZWQgdGhlIGtub3duIGFycmF5IHNpemUgb2YgYG1vcnNfczFnaHpfY2hhbm5lbHNgLiAqVGhhdCdzKiB0aGUgZml4LiBXaXRob3V0IHRoaXMgY2hlY2ssIHRoZSBsb29wIGNvdWxkIHJlYWQgYmV5b25kIHRoZSBhbGxvY2F0ZWQgYnVmZmVyLCBsZWFkaW5nIHRvIGEgY3Jhc2ggb3IsIHdvcnNlLCBhcmJpdHJhcnkgbWVtb3J5IGRpc2Nsb3N1cmUgb3IgY29ycnVwdGlvbi5cblxuVGhlIHZ1bG5lcmFiaWxpdHkgc3RlbXMgZnJvbSB0aGUgZmFjdCB0aGF0IGZpcm13YXJlIGRhdGEgaXMgYmVpbmcgdHJ1c3RlZCB3aXRob3V0IGEgc2FuaXR5IGNoZWNrLiBJZiB0aGUgZmlybXdhcmUgcmV0dXJucyBhIHZhbHVlIGZvciBgbl9jaGFubmVsc2AgdGhhdCdzIGxhcmdlciB0aGFuIHdoYXQgdGhlIGRyaXZlciBleHBlY3RzLCB3ZSBoYXZlIGEgcHJvYmxlbS5cblxuTm93LCBsZXQncyB0aGluayBhYm91dCByZWFjaGFiaWxpdHkuIElzIHRoaXMgc29tZXRoaW5nIHRoYXQgY2FuIGJlIHByYWN0aWNhbGx5IGV4cGxvaXRlZD8gVGhpcyBpc24ndCBqdXN0IGEgdGhlb3JldGljYWwgaXNzdWUuIFdlIG5lZWQgdG8gY29uc2lkZXIgaG93IGFjY2Vzc2libGUgdGhpcyBjb2RlIHBhdGggaXMuXG5cblRoZSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgaXNuJ3Qgc29tZXRoaW5nIHRoYXQncyBhdXRvbWF0aWNhbGx5IG5vbi1yZWFjaGFibGUgb3IgdW5leGVjdXRhYmxlLiBIb3dldmVyLCB0aGUgTU04MVggZHJpdmVyICpkb2VzKiBzdXBwb3J0IFVTQiAoYENPTkZJR19NTTgxWF9VU0JgKS4gVGhpcyBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIHRoaXMgbWVhbnMgaXQgY2FuIHBvdGVudGlhbGx5IGJlIGVtdWxhdGVkIHZpYSBVU0IgZ2FkZ2V0IChSYXcgR2FkZ2V0IC8gRHVtbXkgSENEKSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKS5cblxuQSBsaXR0bGUgbW9yZSBkaWdnaW5nIHJldmVhbHMgdGhhdCB5ZXMsIFVTQiBkcml2ZXJzICphcmUqIGNvbnNpZGVyZWQgcmVhY2hhYmxlLCBhY2NvcmRpbmcgdG8gdGhlIGNyaXRlcmlhIGRlZmluZWQuIFZpcnR1YWwgYnVzZXMgbGlrZSBVU0IgZ2FkZ2V0IGFyZSBleHBsaWNpdGx5IGxpc3RlZCBhcyBhbiBlbnRyeS5cblxuU28sIHRoaXMgbG9va3MgbGlrZSBhICpwb3RlbnRpYWxseSBleHBsb2l0YWJsZSogdnVsbmVyYWJpbGl0eSwgYXNzdW1pbmcgd2UgY2FuIGNvbnRyb2wgdGhlIGZpcm13YXJlJ3MgcmVzcG9uc2UgYW5kIGdldCBpdCB0byByZXR1cm4gYSBtYWxmb3JtZWQgYG5fY2hhbm5lbHNgIHZhbHVlLiBUaGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgd2UgY2FuIGNvbnRyb2wgdGhhdCByZXR1cm4gdmFsdWUuXG5cblRoZXJlZm9yZSwgbGV0J3MgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL0tjb25maWdgIGFuZCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9LY29uZmlnYCB0byBzZWUgd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIG5lZWRlZCBmb3IgVVNCIHN1cHBvcnQgdG8gY29uZmlybSB0aGlzIHJlYWNoYWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI2MzIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjQ6NTIuMDEwMjAyNTExWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyOTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFdMQU5fVkVORE9SX01PUlNFTUlDUk9cXG4gICAzOlxcdFxcdGJvb2wgXFxcIk1vcnNlIE1pY3JvIGRldmljZXNcXFwiXFxuICAgNDpcXHRcXHRkZWZhdWx0IHlcXG4gICA1OlxcdFxcdGhlbHBcXG4gICA2OlxcdFxcdCAgSWYgeW91IGhhdmUgYSB3aXJlbGVzcyBjYXJkIGJlbG9uZ2luZyB0byB0aGlzIGNsYXNzLCBzYXkgWS5cXG4gICA3OlxcdFxcbiAgIDg6XFx0XFx0ICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJ3QgZGlyZWN0bHkgYWZmZWN0IHRoZVxcbiAgIDk6XFx0XFx0ICBrZXJuZWw6IHNheWluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsIHRoZVxcbiAgMTA6XFx0XFx0ICBxdWVzdGlvbnMgYWJvdXQgdGhlc2UgY2FyZHMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGwgYmUgYXNrZWQgZm9yXFxuICAxMTpcXHRcXHQgIHlvdXIgc3BlY2lmaWMgY2FyZCBpbiB0aGUgZm9sbG93aW5nIHF1ZXN0aW9ucy5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0aWYgV0xBTl9WRU5ET1JfTU9SU0VNSUNST1xcbiAgMTQ6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L0tjb25maWdcXFwiXFxuICAxNTpcXHRlbmRpZiAjIFdMQU5fVkVORE9SX01PUlNFTUlDUk9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjQ6NTIuMDEwMjc4ODEyWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3MTM3MTEwODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBNTTgxeCBXaXJlbGVzcyBEcml2ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGlzIE1vcnNlIE1pY3JvIE1NODF4IHdpcmVsZXNzIGRyaXZlci4gRmlyc3QsIEknbSBjaGVja2luZyB0aGUgYEtjb25maWdgIGZpbGUgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIHRoZSBtYWluIGBNTTgxWGAgY29uZmlndXJhdGlvbiBvcHRpb24uIEl0J3MgYSB0cmlzdGF0ZSBvcHRpb24sIGJ1dCBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGlmIGBDT01QSUxFX1RFU1RgIGlzIGRlZmluZWQuIE1ha2VzIHNlbnNlIOKAkyBwcm9iYWJseSBmb3IgdGVzdCBidWlsZHMuIEl0IGRlcGVuZHMgb24gYE1BQzgwMjExYCwgYXMgZXhwZWN0ZWQgZm9yIGEgd2lyZWxlc3MgZHJpdmVyLCBhbmQgaXQgc2VsZWN0cyBgRldfTE9BREVSYCBhbmQgYENSQzdgLCBpbmRpY2F0aW5nIGl0IHJlbGllcyBvbiBmaXJtd2FyZSBsb2FkaW5nIGFuZCBsaWtlbHkgdXNlcyBDUkM3IGZvciBlcnJvciBkZXRlY3Rpb24uIFRoZSBoZWxwIHRleHQgY29uZmlybXMgdGhhdCB0aGlzIGlzIHRoZSBiYXNlIG1vZHVsZSBmb3IgTU04MXh4IGNoaXBzZXQgc3VwcG9ydC5cblxuVGhlbiwgdGhlcmUgYXJlIGBNTTgxWF9VU0JgIGFuZCBgTU04MVhfU0RJT2Agb3B0aW9ucy4gVGhleSdyZSBhbHNvIHRyaXN0YXRlLCBtZWFuaW5nIHRoZXkgY2FuIGJlIGJ1aWx0IGFzIGEgbW9kdWxlIG9yIGJ1aWx0IGluLiBCb3RoIGRlcGVuZCBvbiBgTUFDODAyMTFgIGFuZCBzcGVjaWZpYyBpbnRlcmZhY2UgZGVwZW5kZW5jaWVzOiBgVVNCYCBmb3IgdGhlIFVTQiBpbnRlcmZhY2UgYW5kIGBNTUNgIGZvciB0aGUgU0RJTyBpbnRlcmZhY2UsIHJlc3BlY3RpdmVseS4gVGhleSBib3RoIHNlbGVjdCBgTU04MVhgLCBtZWFuaW5nIHRoZSBiYXNlIGRyaXZlciBpcyByZXF1aXJlZCBmb3IgZWl0aGVyIGludGVyZmFjZS4gVGhpcyBpcyBhIHByZXR0eSBzdGFuZGFyZCBzZXR1cC5cblxuTm93LCBJJ2xsIHF1aWNrbHkgZ2xhbmNlIGF0IHRoZSBgTWFrZWZpbGVgIGluIHRoZSBzYW1lIGRpcmVjdG9yeSB0byBjb25maXJtIHdoaWNoIG9iamVjdCBmaWxlcyBhcmUgYWN0dWFsbHkgYnVpbHQgYmFzZWQgb24gdGhlc2UgY29uZmlndXJhdGlvbnMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBkcml2ZXIgaXMgc3RydWN0dXJlZCBhbmQgd2hhdCB0aGUgcmVzdWx0aW5nIGJpbmFyaWVzIHdpbGwgbG9vayBsaWtlLiBOZWVkIHRvIGVuc3VyZSB0aGUgYnVpbGQgZW52aXJvbm1lbnQgc3VwcG9ydHMgdGhpcyBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDM3MSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI0OjU2LjcyMzk5MTkzNFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0XFxuICAgMzpcXHRvYmotJChDT05GSUdfTU04MVgpICs9IG1tODF4X2NvcmUub1xcbiAgIDQ6XFx0XFxuICAgNTpcXHRtbTgxeF9jb3JlLXkgKz0gY29yZS5vXFxuICAgNjpcXHRtbTgxeF9jb3JlLXkgKz0gbWFjLm9cXG4gICA3OlxcdG1tODF4X2NvcmUteSArPSBody5vXFxuICAgODpcXHRtbTgxeF9jb3JlLXkgKz0gZncub1xcbiAgIDk6XFx0bW04MXhfY29yZS15ICs9IGNvbW1hbmQub1xcbiAgMTA6XFx0bW04MXhfY29yZS15ICs9IHBzLm9cXG4gIDExOlxcdG1tODF4X2NvcmUteSArPSBza2JxLm9cXG4gIDEyOlxcdG1tODF4X2NvcmUteSArPSB5YXBzX2h3Lm9cXG4gIDEzOlxcdG1tODF4X2NvcmUteSArPSB5YXBzLm9cXG4gIDE0OlxcdG1tODF4X2NvcmUteSArPSByYy5vXFxuICAxNTpcXHRtbTgxeF9jb3JlLXkgKz0gbW1yYy5vXFxuICAxNjpcXHRcXG4gIDE3OlxcdG9iai0kKENPTkZJR19NTTgxWF9VU0IpICs9IG1tODF4X3VzYi5vXFxuICAxODpcXHRtbTgxeF91c2IteSArPSB1c2Iub1xcbiAgMTk6XFx0XFxuICAyMDpcXHRvYmotJChDT05GSUdfTU04MVhfU0RJTykgKz0gbW04MXhfc2Rpby5vXFxuICAyMTpcXHRtbTgxeF9zZGlvLXkgKz0gc2Rpby5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI0OjU2LjcyNDA1Mzc4NFoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MjQ4ODcyOTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBNTTgxeCBXaXJlbGVzcyBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgc2VlIHRoYXQgdGhlIGBtYWMub2Agb2JqZWN0IGZpbGUgaXMgcGFydCBvZiBgbW04MXhfY29yZS5vYCwgd2hpY2ggaXMgb25seSBjb21waWxlZCBpZiBgQ09ORklHX01NODFYYCBpcyBlbmFibGVkLiBUaGF0IGluIHR1cm4sIGlzIHNlbGVjdGVkIGJ5IGBDT05GSUdfTU04MVhfVVNCYC4gSSdtIGFsc28gbm90aW5nIHRoZSBkZXBlbmRlbmNpZXMgaGVyZTogYENPTkZJR19NTTgxWF9VU0JgIHJlcXVpcmVzIGBNQUM4MDIxMWAsIGBVU0JgLCBhbmQgYFdMQU5fVkVORE9SX01PUlNFTUlDUk9gLiBHb29kLlxuXG5UaGUgY3JpdGljYWwgZnVuY3Rpb24gYmVpbmcgbW9kaWZpZWQgYXBwZWFycyB0byBiZSBgbW04MXhfbWFjX2NoZWNrX2Z3X2Rpc2FibGVkX2NoYW5zYC4gIEl0J3Mgc3RhdGljLCBzbyBpbmxpbmluZyBpcyBhIHBvc3NpYmlsaXR5LCBvciBpdCBtYXkgb25seSBiZSBjYWxsZWQgaW50ZXJuYWxseS4gT2theSwgbGV0J3Mgc2VlIGhvdyBpdCdzIHVzZWQuIFJpZ2h0LCBgbW04MXhfbWFjX3Jlc3RhcnRgIGNhbGxzIGl0LiBBbmQgbG9va2luZyBmdXJ0aGVyIHVwIHRoZSBjYWxsIGNoYWluLCBgbW04MXhfbWFjX29wc19hZGRfaW50ZXJmYWNlYCBhbmQgYG1tODF4X3JlZ19ub3RpZmllcmAgY2FsbCBgbW04MXhfbWFjX3Jlc3RhcnRgLiBUaGUgVVNCIHByb2JlIGZ1bmN0aW9uLCBgbW04MXhfdXNiX3Byb2JlYCwgd2hpY2ggaXMgaW4gYHVzYi5jYCwgaXMgdGhlIGluaXRpYWxpemF0aW9uIGFuZCByZWdpc3RyYXRpb24gcG9pbnQuXG5cblRvIHJlY2FwLCBhbmQgZm9yIGZ1enppbmcsIEknbGwgbmVlZCB0byByZW1lbWJlciB0aG9zZSBlbnRyeSBwb2ludHM6IGBtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnNgLCBgbW04MXhfbWFjX3Jlc3RhcnRgLCBgbW04MXhfbWFjX29wc19hZGRfaW50ZXJmYWNlYCwgYW5kIGBtbTgxeF9yZWdfbm90aWZpZXJgLlxuXG5Ob3csIHRoZSBjb25maWd1cmF0aW9uIGFzcGVjdHMuIFRvIGVuYWJsZSB0aGlzIGNvZGUgcGF0aCBhbmQgZnV6eiBpdCwgSSdsbCBuZWVkIHRvIHNldCB0aGVzZSBjb25maWd1cmF0aW9uIG9wdGlvbnM6IGBXTEFOX1ZFTkRPUl9NT1JTRU1JQ1JPYCwgYE1NODFYYCwgYE1NODFYX1VTQmAsIGBNQUM4MDIxMWAsIGFuZCBgVVNCYC5cblxuQWxyaWdodCwgSSBoYXZlIGEgY2xlYXIgcGljdHVyZS4gVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgd2l0aGluIGBtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnMoKWAgdG8gaGFuZGxlIGNhc2VzIHdoZXJlIHRoZSBmaXJtd2FyZSByZXR1cm5zIG1vcmUgY2hhbm5lbHMgdGhhbiB0aGUgZHJpdmVyIGhhcyBhbGxvY2F0ZWQgc3BhY2UgZm9yLiBUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGVzcGVjaWFsbHkgc2luY2UgdGhlIGRyaXZlciBzdXBwb3J0cyBVU0IgZGV2aWNlcywgd2hpY2ggYXJlIHJlYWRpbHkgZW11bGF0YWJsZS5cblxuQmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSdtIGNvbmZpZGVudCBpbiBzZXR0aW5nIHRoZSByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTQwOSwiT3V0cHV0VG9rZW5zIjoyMTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNTowNC45NzI5Mjk0MDNaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Mjg0OTY1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiV0xBTl9WRU5ET1JfTU9SU0VNSUNST1wiLFxuICAgIFwiTU04MVhcIixcbiAgICBcIk1NODFYX1VTQlwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIlVTQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFuc1wiLFxuICAgIFwibW04MXhfbWFjX3Jlc3RhcnRcIixcbiAgICBcIm1tODF4X21hY19vcHNfYWRkX2ludGVyZmFjZVwiLFxuICAgIFwibW04MXhfcmVnX25vdGlmaWVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGJvdW5kcyBjaGVjayBvbiBmaXJtd2FyZSByZXNwb25zZXMgaW4gbW04MXhfbWFjX2NoZWNrX2Z3X2Rpc2FibGVkX2NoYW5zKCkgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIHdoZW4gbl9jaGFubmVscyBleGNlZWRzIHRoZSBzaXplIG9mIG1vcnNfczFnaHpfY2hhbm5lbHMuIFRoZSBNTTgxeCB3aXJlbGVzcyBkcml2ZXIgc3VwcG9ydHMgVVNCIGludGVyZmFjZXMgKE1NODFYX1VTQikgd2hpY2ggY2FuIGJlIHByb2JlZCBhbmQgZnV6emVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgVVNCIGVtdWxhdGlvbi9nYWRnZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIldMQU5fVkVORE9SX01PUlNFTUlDUk9cIixcbiAgICBcIk1NODFYXCIsXG4gICAgXCJNTTgxWF9VU0JcIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJVU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnNcIixcbiAgICBcIm1tODF4X21hY19yZXN0YXJ0XCIsXG4gICAgXCJtbTgxeF9tYWNfb3BzX2FkZF9pbnRlcmZhY2VcIixcbiAgICBcIm1tODF4X3JlZ19ub3RpZmllclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBib3VuZHMgY2hlY2sgb24gZmlybXdhcmUgcmVzcG9uc2VzIGluIG1tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFucygpIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyB3aGVuIG5fY2hhbm5lbHMgZXhjZWVkcyB0aGUgc2l6ZSBvZiBtb3JzX3MxZ2h6X2NoYW5uZWxzLiBUaGUgTU04MXggd2lyZWxlc3MgZHJpdmVyIHN1cHBvcnRzIFVTQiBpbnRlcmZhY2VzIChNTTgxWF9VU0IpIHdoaWNoIGNhbiBiZSBwcm9iZWQgYW5kIGZ1enplZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBlbXVsYXRpb24vZ2FkZ2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjU6MDUuMDQ1Nzk2NDU1WiIsIlNlcSI6NDIsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM3OTAyNjM2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI1OjA1LjA0NjIyOTg0NVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEwMzc4NTg3NTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIG9uIGByZXNwLVxcdTAwM2VuX2NoYW5uZWxzYCBhZ2FpbnN0IGBBUlJBWV9TSVpFKG1vcnNfczFnaHpfY2hhbm5lbHMpYCB0byBwcmV2ZW50IGhlYXAgb3V0LW9mLWJvdW5kcyByZWFkcyB3aGVuIGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBgcmVzcC1cXHUwMDNlY2hhbm5lbHNgIGFycmF5IGluIGBtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnMoKWAuXFxuXFxuSGVhcCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyBhcmUgc3RhbmRhcmQgc3BhdGlhbCBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSByZXNwb25zZSBidWZmZXIgYHJlc3BgIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jKClgLCBhbmQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGFjY2Vzc2VzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGJ5IHRoaXMgY2hhbmdlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjdkMTU3YzA4ZTdhYmM5MmFlMDE4ZDZlNjRhZjI5YTUyMzhiMDgzZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMDc6MjM6NDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuY1xuaW5kZXggMDhjYTExNmE2OGI0Ny4uZThlZjBkOWVlYmQ3NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmNcbkBAIC0yODgsNiArMjg4LDExIEBAIHN0YXRpYyB2b2lkIG1tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFucyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodylcbiBcdFx0Y2gtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+SUVFRTgwMjExX0NIQU5fUzFHX05PX1BSSU1BUlk7XG4gXHR9XG4gXG4rXHRpZiAobGUzMl90b19jcHUocmVzcC1cdTAwM2VuX2NoYW5uZWxzKSBcdTAwM2UgQVJSQVlfU0laRShtb3JzX3MxZ2h6X2NoYW5uZWxzKSkge1xuK1x0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxlMzJfdG9fY3B1KHJlc3AtXHUwMDNlbl9jaGFubmVscyk7IGkrKykge1xuIFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoO1xuIFx0XHRzdHJ1Y3QgaG9zdF9jbWRfZGlzYWJsZWRfY2hhbm5lbF9lbnRyeSAqZW50cnkgPVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjU6MDUuMDQ2MjMwODI1WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4ODYzOTYzNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNb3JzZSBNaWNybyBNQUMgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gdGhlIHVzZXIgd2FudHMgbWUgdG8gZGl2ZSBpbnRvIGEgcGF0Y2ggYWZmZWN0aW5nIHRoZSBgbW04MXhgIE1BQyBsYXllciB3aXRoaW4gdGhlIE1vcnNlIE1pY3JvIHdpcmVsZXNzIGRyaXZlciwgc3BlY2lmaWNhbGx5IGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvLCBvZiBjb3Vyc2UsIGFwcHJvYWNoIHRoaXMgbWV0aG9kaWNhbGx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlIGluIGNvbnRleHQuIEknbSBnb2luZyB0byBzdGFydCBieSByZWFkaW5nIHRoZSBwYXRjaCBpdHNlbGYgYW5kIG1ha2luZyBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgbW9kaWZpY2F0aW9ucywgYW5kIHRoZW4gSSdsbCBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBhIGJldHRlciB1bmRlcnN0YW5kaW5nLlxuXG5GaXJzdCBJIG5lZWQgdG8gZ3JhYiB0aGUgc291cmNlIGZvciBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuY2AuIEkgd2lsbCB1c2UgdGhlIHRvb2wgJ3JlYWQtZmlsZScgdG8gcHVsbCB0aGUgY29kZSBhcm91bmQgbGluZSAyODguIFRoZW4gSSBjYW4gZmlndXJlIG91dCB3aGVyZSB0aGUgZWRpdCBsaXZlcy4gT25jZSBJIGNhbiBzZWUgdGhhdCwgSSB3aWxsIHVuZGVyc3RhbmQgd2hhdCBpcyBiZWluZyBjaGFuZ2VkIGFuZCB3aHkuIFRoYXQncyB0aGUgZmlyc3Qgc3RlcC4gTGV0J3MgZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxODgsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI1OjA5LjkzMjYzMDYwOFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTI4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNjA6XFx0fVxcbiAyNjE6XFx0XFxuIDI2MjpcXHRzdGF0aWMgdm9pZCBtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpXFxuIDI2MzpcXHR7XFxuIDI2NDpcXHRcXHRpbnQgcmV0ID0gMDtcXG4gMjY1OlxcdFxcdHUzMiBpO1xcbiAyNjY6XFx0XFx0c3RydWN0IG1tODF4ICptb3JzID0gaHctXFx1MDAzZXByaXY7XFxuIDI2NzpcXHRcXHRzdHJ1Y3QgaG9zdF9jbWRfcmVzcF9nZXRfZGlzYWJsZWRfY2hhbm5lbHMgKnJlc3A7XFxuIDI2ODpcXHRcXHR1MzIgcmVzcF9sZW4gPSBzaXplb2Yoc3RydWN0IGhvc3RfY21kX2Rpc2FibGVkX2NoYW5uZWxfZW50cnkpICpcXG4gMjY5OlxcdFxcdFxcdFxcdCAgICAgICBBUlJBWV9TSVpFKG1vcnNfczFnaHpfY2hhbm5lbHMpICtcXG4gMjcwOlxcdFxcdFxcdCAgICAgICBzaXplb2YoKnJlc3ApO1xcbiAyNzE6XFx0XFxuIDI3MjpcXHRcXHRyZXNwID0ga3phbGxvYyhyZXNwX2xlbiwgR0ZQX0tFUk5FTCk7XFxuIDI3MzpcXHRcXHRpZiAoIXJlc3ApIHtcXG4gMjc0OlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuIDI3NTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMjc2OlxcdFxcdH1cXG4gMjc3OlxcdFxcbiAyNzg6XFx0XFx0cmV0ID0gbW04MXhfY21kX2dldF9kaXNhYmxlZF9jaGFubmVscyhtb3JzLCByZXNwLCByZXNwX2xlbik7XFxuIDI3OTpcXHRcXHRpZiAocmV0KVxcbiAyODA6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDI4MTpcXHRcXG4gMjgyOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKG1vcnNfczFnaHpfY2hhbm5lbHMpOyBpKyspIHtcXG4gMjgzOlxcdFxcdFxcdHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2ggPSBcXHUwMDI2bW9yc19zMWdoel9jaGFubmVsc1tpXTtcXG4gMjg0OlxcdFxcbiAyODU6XFx0XFx0XFx0aWYgKGNoLVxcdTAwM2VmbGFncyBcXHUwMDI2IElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEKVxcbiAyODY6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDI4NzpcXHRcXG4gMjg4OlxcdFxcdFxcdGNoLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+SUVFRTgwMjExX0NIQU5fUzFHX05PX1BSSU1BUlk7XFxuIDI4OTpcXHRcXHR9XFxuIDI5MDpcXHRcXG4gMjkxOlxcdFxcdGlmIChsZTMyX3RvX2NwdShyZXNwLVxcdTAwM2VuX2NoYW5uZWxzKSBcXHUwMDNlIEFSUkFZX1NJWkUobW9yc19zMWdoel9jaGFubmVscykpIHtcXG4gMjkyOlxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuIDI5MzpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMjk0OlxcdFxcdH1cXG4gMjk1OlxcdFxcbiAyOTY6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGxlMzJfdG9fY3B1KHJlc3AtXFx1MDAzZW5fY2hhbm5lbHMpOyBpKyspIHtcXG4gMjk3OlxcdFxcdFxcdHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2g7XFxuIDI5ODpcXHRcXHRcXHRzdHJ1Y3QgaG9zdF9jbWRfZGlzYWJsZWRfY2hhbm5lbF9lbnRyeSAqZW50cnkgPVxcbiAyOTk6XFx0XFx0XFx0XFx0XFx1MDAyNnJlc3AtXFx1MDAzZWNoYW5uZWxzW2ldO1xcbiAzMDA6XFx0XFxuIDMwMTpcXHRcXHRcXHRpZiAoZW50cnktXFx1MDAzZWJ3X21oeiAhPSAxKVxcbiAzMDI6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDMwMzpcXHRcXG4gMzA0OlxcdFxcdFxcdGNoID0gaWVlZTgwMjExX2dldF9jaGFubmVsX2toeihcXG4gMzA1OlxcdFxcdFxcdFxcdGh3LVxcdTAwM2V3aXBoeSxcXG4gMzA2OlxcdFxcdFxcdFxcdEtIWjEwMF9UT19LSFoobGUxNl90b19jcHUoZW50cnktXFx1MDAzZWZyZXFfMTAwa2h6KSkpO1xcbiAzMDc6XFx0XFx0XFx0aWYgKCFjaClcXG4gMzA4OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAzMDk6XFx0XFxuIDMxMDpcXHRcXHRcXHRjaC1cXHUwMDNlZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fUzFHX05PX1BSSU1BUlk7XFxuIDMxMTpcXHRcXHRcXHRkZXZfZGJnKG1vcnMtXFx1MDAzZWRldiwgXFxcInNldCBOT19QUklNQVJZIG9uICV1IEtIelxcXCIsXFxuIDMxMjpcXHRcXHRcXHRcXHRpZWVlODAyMTFfY2hhbm5lbF90b19raHooY2gpKTtcXG4gMzEzOlxcdFxcdH1cXG4gMzE0OlxcdFxcbiAzMTU6XFx0b3V0OlxcbiAzMTY6XFx0XFx0aWYgKHJldClcXG4gMzE3OlxcdFxcdFxcdGRldl9lcnIobW9ycy1cXHUwMDNlZGV2LCBcXFwiZmFpbGVkIHRvIHNldCBkaXNhYmxlZCBwcmltYXJ5IGNoYW5uZWxzXFxcIik7XFxuIDMxODpcXHRcXG4gMzE5OlxcdFxcdGtmcmVlKHJlc3ApO1xcbiAzMjA6XFx0fVxcbiAzMjE6XFx0XFxuIDMyMjpcXHRzdGF0aWMgaW50IG1tODF4X21hY19vcHNfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpXFxuIDMyMzpcXHR7XFxuIDMyNDpcXHRcXHRzdHJ1Y3QgbW04MXggKm1vcnMgPSBody1cXHUwMDNlcHJpdjtcXG4gMzI1OlxcdFxcbiAzMjY6XFx0XFx0bW9ycy1cXHUwMDNlc3RhcnRlZCA9IHRydWU7XFxuIDMyNzpcXHRcXHRyZXR1cm4gMDtcXG4gMzI4OlxcdH1cXG4gMzI5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNTowOS45MzI5ODUzMDhaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQ5MTc5MDI2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFZ1bG5lcmFiaWxpdHkgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGNsYXNzaWMgaGVhcCBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0eS4gSGVyZSdzIHdoYXQncyBoYXBwZW5pbmc6IGEgcmVzcG9uc2UgYnVmZmVyLCBgcmVzcGAsIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYC4gVGhpcyBlbnN1cmVzIGl0J3MgemVyby1pbml0aWFsaXplZC4gVGhlbiwgYSBmdW5jdGlvbiBgbW04MXhfY21kX2dldF9kaXNhYmxlZF9jaGFubmVsc2AgZmlsbHMgdGhpcyBidWZmZXIgd2l0aCBkYXRhLiBUaGUgY3J1eCBvZiB0aGUgaXNzdWUgbGllcyBpbiBob3cgYHJlc3AtXHUwMDNlbl9jaGFubmVsc2AgaXMgaGFuZGxlZC4gSWYgdGhlIGZpcm13YXJlLCBvciBhIG1hbGZvcm1lZCByZXNwb25zZSwgcHJvdmlkZXMgYSBzdXNwaWNpb3VzbHkgbGFyZ2UgdmFsdWUgZm9yIGBuX2NoYW5uZWxzYCwgdGhlIHN1YnNlcXVlbnQgbG9vcCBgZm9yIChpID0gMDsgaSBcdTAwM2MgbGUzMl90b19jcHUocmVzcC1cdTAwM2VuX2NoYW5uZWxzKTsgaSsrKWAgY291bGQgaW5kZXggYmV5b25kIHRoZSBib3VuZHMgb2YgdGhlIGBtb3JzX3MxZ2h6X2NoYW5uZWxzYCBhcnJheS4gVGhhdCdzIGEgdGV4dGJvb2sgb3V0LW9mLWJvdW5kcyBoZWFwIHJlYWQsIGEgZGVmaW5pdGUgS0FTQU4tZGV0ZWN0YWJsZSBidWcuXG5cblRoZSBwYXRjaCBpdHNlbGYgaXMgc2ltcGxlOiBpdCBhZGRzIGEgY2hlY2ssIGBpZiAobGUzMl90b19jcHUocmVzcC1cdTAwM2VuX2NoYW5uZWxzKSBcdTAwM2UgQVJSQVlfU0laRShtb3JzX3MxZ2h6X2NoYW5uZWxzKSlgLCB0byB2YWxpZGF0ZSB0aGUgdmFsdWUgb2YgYG5fY2hhbm5lbHNgLiBJZiBpdCBleGNlZWRzIHRoZSBhcnJheSBzaXplLCBhbiBlcnJvciwgYC1FSU5WQUxgLCBpcyByZXR1cm5lZCwgYW5kIHdlIGJhaWwgb3V0LiBUaGlzIGlzIGdvb2Q7IHdlJ3JlIHByZXZlbnRpbmcgdGhlIE9PQiByZWFkIGVudGlyZWx5LlxuXG5Ob3csIEkgbmVlZCB0byBjb25zaWRlciB3aGV0aGVyIHRoaXMgcGF0Y2ggaXRzZWxmIGludHJvZHVjZXMgYW55ICpuZXcqIHJpc2tzLCBwYXJ0aWN1bGFybHkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBgcmVzcGAgaXMgYGt6YWxsb2NgJ2QsIHNvIHRoYXQncyBnb29kLiBgcmV0YCBpcyBpbml0aWFsaXplZCB0byAwIGFuZCBvbmx5IGNoYW5nZWQgdG8gLUVJTlZBTCBvbiBhbiBlcnJvci4gVGhlcmUncyBubyBrZXJuZWwtdG8tdXNlciBjb3B5IGhhcHBlbmluZyBoZXJlIHRoYXQgSSBjYW4gc2VlLCB3aGljaCBpcyBpbXBvcnRhbnQgZnJvbSBhIGxlYWsgcGVyc3BlY3RpdmUuIEFuZCB0aGUga2V5IHBvaW50IGlzOiB0aGlzIHBhdGNoICphZGRyZXNzZXMqIGFuIE9PQiByZWFkIHZ1bG5lcmFiaWxpdHksIHNvIEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBLQVNBTiBpcyB0aGUgcmlnaHQgdG9vbCBmb3IgZGV0ZWN0aW5nIHRoZSBPT0IgbWVtb3J5IGFjY2Vzcy5cblxuRG91YmxlLWNoZWNraW5nIGFnYWluc3QgdGhlIGd1aWRlbGluZXMsIHRoZSBwYXRjaCAqc3BlY2lmaWNhbGx5KiBhZGRyZXNzZXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIFRoZSBzdHJ1Y3R1cmVzIGFyZSBhbGwgemVyb2VkIG9yIGluaXRpYWxpemVkLiBUaGVyZSdzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgYmVpbmcgaW50cm9kdWNlZCBvciBleHBvc2VkLiBUaGVyZWZvcmUsIGJhc2VkIG9uIHRoZSBjcml0ZXJpYSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBmYWxzZS5cblxuQWxyaWdodCwgSSdtIGNvbmZpZGVudCBpbiB0aGlzIGFuYWx5c2lzLiBUaW1lIHRvIHByZXBhcmUgdGhlIGNhbGwgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYwNiwiT3V0cHV0VG9rZW5zIjoxNzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNToxNS40MjQ3Nzg5NDdaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgb24gYHJlc3AtXFx1MDAzZW5fY2hhbm5lbHNgIGFnYWluc3QgYEFSUkFZX1NJWkUobW9yc19zMWdoel9jaGFubmVscylgIHRvIHByZXZlbnQgaGVhcCBvdXQtb2YtYm91bmRzIHJlYWRzIHdoZW4gaXRlcmF0aW5nIHRocm91Z2ggdGhlIGByZXNwLVxcdTAwM2VjaGFubmVsc2AgYXJyYXkgaW4gYG1tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFucygpYC5cXG5cXG5IZWFwIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIGFyZSBzdGFuZGFyZCBzcGF0aWFsIG1lbW9yeSBzYWZldHkgdmlvbGF0aW9ucyBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHJlc3BvbnNlIGJ1ZmZlciBgcmVzcGAgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2MoKWAsIGFuZCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgYWNjZXNzZXMsIG9yIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgYnkgdGhpcyBjaGFuZ2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIG9uIGByZXNwLVxcdTAwM2VuX2NoYW5uZWxzYCBhZ2FpbnN0IGBBUlJBWV9TSVpFKG1vcnNfczFnaHpfY2hhbm5lbHMpYCB0byBwcmV2ZW50IGhlYXAgb3V0LW9mLWJvdW5kcyByZWFkcyB3aGVuIGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBgcmVzcC1cXHUwMDNlY2hhbm5lbHNgIGFycmF5IGluIGBtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnMoKWAuXFxuXFxuSGVhcCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyBhcmUgc3RhbmRhcmQgc3BhdGlhbCBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSByZXNwb25zZSBidWZmZXIgYHJlc3BgIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jKClgLCBhbmQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGFjY2Vzc2VzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGJ5IHRoaXMgY2hhbmdlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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,} --------- Name: series-workflow7p7g4[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 07:05:24 +0000 UTC FinishedAt: 2026-09-07 07:25:17 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "1b60ed34f712e9f606d80951f1586f4274ebadf1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "WLAN_VENDOR_MORSEMICRO", "MM81X", "MM81X_USB", "MAC80211", "USB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "1b60ed34f712e9f606d80951f1586f4274ebadf1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "WLAN_VENDOR_MORSEMICRO", "MM81X", "MM81X_USB", "MAC80211", "USB" ], "series_id": "107188c7-ccfc-447c-9cef-dad6e869481a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mm81x_mac_check_fw_disabled_chans", "mm81x_mac_restart", "mm81x_mac_ops_add_interface", "mm81x_reg_notifier" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1dMQU5fVkVORE9SX01PUlNFTUlDUk8mIzM0OywKICAgICYjMzQ7TU04MVgmIzM0OywKICAgICYjMzQ7TU04MVhfVVNCJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFucyYjMzQ7LAogICAgJiMzNDttbTgxeF9tYWNfcmVzdGFydCYjMzQ7LAogICAgJiMzNDttbTgxeF9tYWNfb3BzX2FkZF9pbnRlcmZhY2UmIzM0OywKICAgICYjMzQ7bW04MXhfcmVnX25vdGlmaWVyJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBvbiBgcmVzcC1cdTAwM2VuX2NoYW5uZWxzYCBhZ2FpbnN0IGBBUlJBWV9TSVpFKG1vcnNfczFnaHpfY2hhbm5lbHMpYCB0byBwcmV2ZW50IGhlYXAgb3V0LW9mLWJvdW5kcyByZWFkcyB3aGVuIGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBgcmVzcC1cdTAwM2VjaGFubmVsc2AgYXJyYXkgaW4gYG1tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFucygpYC5cblxuSGVhcCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyBhcmUgc3RhbmRhcmQgc3BhdGlhbCBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSByZXNwb25zZSBidWZmZXIgYHJlc3BgIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jKClgLCBhbmQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGFjY2Vzc2VzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGJ5IHRoaXMgY2hhbmdlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBib3VuZHMgY2hlY2sgb24gZmlybXdhcmUgcmVzcG9uc2VzIGluIG1tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFucygpIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyB3aGVuIG5fY2hhbm5lbHMgZXhjZWVkcyB0aGUgc2l6ZSBvZiBtb3JzX3MxZ2h6X2NoYW5uZWxzLiBUaGUgTU04MXggd2lyZWxlc3MgZHJpdmVyIHN1cHBvcnRzIFVTQiBpbnRlcmZhY2VzIChNTTgxWF9VU0IpIHdoaWNoIGNhbiBiZSBwcm9iZWQgYW5kIGZ1enplZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBlbXVsYXRpb24vZ2FkZ2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGI3ZDE1N2MwOGU3YWJjOTJhZTAxOGQ2ZTY0YWYyOWE1MjM4YjA4M2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDA3OjIzOjQ1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jXG5pbmRleCAwOGNhMTE2YTY4YjQ3Li5lOGVmMGQ5ZWViZDc1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuY1xuQEAgLTI4OCw2ICYjNDM7Mjg4LDExIEBAIHN0YXRpYyB2b2lkIG1tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFucyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodylcbiBcdFx0Y2gtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+SUVFRTgwMjExX0NIQU5fUzFHX05PX1BSSU1BUlk7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKGxlMzJfdG9fY3B1KHJlc3AtXHUwMDNlbl9jaGFubmVscykgXHUwMDNlIEFSUkFZX1NJWkUobW9yc19zMWdoel9jaGFubmVscykpIHtcbiYjNDM7XHRcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbGUzMl90b19jcHUocmVzcC1cdTAwM2VuX2NoYW5uZWxzKTsgaSYjNDM7JiM0MzspIHtcbiBcdFx0c3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaDtcbiBcdFx0c3RydWN0IGhvc3RfY21kX2Rpc2FibGVkX2NoYW5uZWxfZW50cnkgKmVudHJ5ID1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtXTEFOX1ZFTkRPUl9NT1JTRU1JQ1JPJiMzNDssCiAgICAmIzM0O01NODFYJiMzNDssCiAgICAmIzM0O01NODFYX1VTQiYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnMmIzM0OywKICAgICYjMzQ7bW04MXhfbWFjX3Jlc3RhcnQmIzM0OywKICAgICYjMzQ7bW04MXhfbWFjX29wc19hZGRfaW50ZXJmYWNlJiMzNDssCiAgICAmIzM0O21tODF4X3JlZ19ub3RpZmllciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYm91bmRzIGNoZWNrIG9uIGZpcm13YXJlIHJlc3BvbnNlcyBpbiBtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnMoKSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgd2hlbiBuX2NoYW5uZWxzIGV4Y2VlZHMgdGhlIHNpemUgb2YgbW9yc19zMWdoel9jaGFubmVscy4gVGhlIE1NODF4IHdpcmVsZXNzIGRyaXZlciBzdXBwb3J0cyBVU0IgaW50ZXJmYWNlcyAoTU04MVhfVVNCKSB3aGljaCBjYW4gYmUgcHJvYmVkIGFuZCBmdXp6ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZW11bGF0aW9uL2dhZGdldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiN2QxNTdjMDhlN2FiYzkyYWUwMThkNmU2NGFmMjlhNTIzOGIwODNmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAwNzoyMzo0NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jCmluZGV4IDA4Y2ExMTZhNjhiNDcuLmU4ZWYwZDllZWJkNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYwpAQCAtMjg4LDYgJiM0MzsyODgsMTEgQEAgc3RhdGljIHZvaWQgbW04MXhfbWFjX2NoZWNrX2Z3X2Rpc2FibGVkX2NoYW5zKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogCQljaC0mZ3Q7ZmxhZ3MgJmFtcDs9IH5JRUVFODAyMTFfQ0hBTl9TMUdfTk9fUFJJTUFSWTsKIAl9CiAKJiM0MzsJaWYgKGxlMzJfdG9fY3B1KHJlc3AtJmd0O25fY2hhbm5lbHMpICZndDsgQVJSQVlfU0laRShtb3JzX3MxZ2h6X2NoYW5uZWxzKSkgewomIzQzOwkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiAJZm9yIChpID0gMDsgaSAmbHQ7IGxlMzJfdG9fY3B1KHJlc3AtJmd0O25fY2hhbm5lbHMpOyBpJiM0MzsmIzQzOykgewogCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoOwogCQlzdHJ1Y3QgaG9zdF9jbWRfZGlzYWJsZWRfY2hhbm5lbF9lbnRyeSAqZW50cnkgPQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTc2CgkJCQkJCQlvdXRwdXQ6IDU1CgkJCQkJCQl0aG91Z2h0czogMTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgV2lyZWxlc3MgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gYXNrZWQgdG8gbG9vayBhdCBhIHBhdGNoIHdpdGhpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBiZWZvcmUgZXZlbiAqbG9va2luZyogYXQgdGhlIHNwZWNpZmljcyBvZiB0aGUgcGF0Y2ggaXRzZWxmLCBJIG5lZWQgdG8gZ2V0IGEgaGlnaC1sZXZlbCB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgZHJpdmVyLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBzeXN0ZW1hdGljIGFwcHJvYWNoLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGBtbTgxeGAgaXMuIElzIGl0IGEgUENJZSBkZXZpY2U/IFVTQj8gU29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEFuZCBob3cgaXMgdGhpcyBkcml2ZXIgcmVnaXN0ZXJlZCB3aXRoIHRoZSBrZXJuZWw/IFdoYXQgYnVzIGluZnJhc3RydWN0dXJlIGlzIGl0IGV4cGVjdGluZyB0byBpbnRlcmFjdCB3aXRoPyBEb2VzIGl0IHJlbHkgb24gc29tZSBzcGVjaWZpYyBoYXJkd2FyZSBjb25maWd1cmF0aW9uLCBvciBpcyBpdCBtb3JlIG9mIGEgdmlydHVhbCBidXMgdHlwZSBzZXR1cD8KCkkmIzM5O2xsIHN0YXJ0IGJ5IGRpdmluZyBpbnRvIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9gIGRpcmVjdG9yeS4gSSYjMzk7bGwgdXNlIGBncmVwYCBvciBkaXJlY3RvcnkgaW5kZXhpbmcsIGFuZCByZWFkaW5nIHRoZSBjb2RlIGRpcmVjdGx5LCBJJiMzOTttIGdvaW5nIHRvIHBvcmUgb3ZlciB0aGUgYEtjb25maWdgIGZpbGUgYW5kIHRoZSBvdGhlciBzb3VyY2UgZmlsZXMgaW4gdGhhdCBkaXJlY3RvcnkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBhcmNoaXRlY3R1cmFsIGNvbnRleHQgb2YgdGhlIGRyaXZlciwgdGhlIGRldmljZSB0eXBlIGl0IHN1cHBvcnRzIGFuZCBhbnkgcmVsYXRlZCBkZXBlbmRlbmNpZXMuIFdpdGggdGhpcyBpbml0aWFsIGZyYW1ld29yayBpbiBwbGFjZSwgSSBjYW4gZXZhbHVhdGUgdGhlIHBhdGNoIG11Y2ggbW9yZSBlZmZlY3RpdmVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGVzJiMzNDs6IG51bGwsCiAgJiMzNDtTdWJkaXJzJiMzNDs6IFsKICAgICYjMzQ7bW04MXgmIzM0OwogIF0KfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vcnNlbWljcm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnPTI5PXNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9taWNyb2NoaXAvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZzozMDpzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnLTMxLXNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvS2NvbmZpZ1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL01ha2VmaWxlPTE0PW9iai0kKENPTkZJR19XTEFOX1ZFTkRPUl9NSUNST0NISVApICYjNDM7PSBtaWNyb2NoaXAvXG5kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZToxNTpvYmotJChDT05GSUdfV0xBTl9WRU5ET1JfTU9SU0VNSUNSTykgJiM0Mzs9IG1vcnNlbWljcm8vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZS0xNi1vYmotJChDT05GSUdfV0xBTl9WRU5ET1JfTlhQKSAmIzQzOz0gbnhwL1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vS2NvbmZpZz0xMz1pZiBXTEFOX1ZFTkRPUl9NT1JTRU1JQ1JPXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL0tjb25maWc6MTQ6c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9LY29uZmlnLTE1LWVuZGlmICMgV0xBTl9WRU5ET1JfTU9SU0VNSUNST1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuaC0xNS0jZGVmaW5lIEJDRl9EQVRBQkFTRV9TSVpFICgxMDI0KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5oOjE2OiNkZWZpbmUgTU04MVhfRldfRElSIFwmIzM0O21vcnNlbWljcm8vbW04MXhcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuaC0xNy0jZGVmaW5lIE1NODFYX0ZXX0VYVCBcJiMzNDsuYmluXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgwMQoJCQkJCQkJb3V0cHV0OiA3NQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gdGhlIG1tODF4IFdpcmVsZXNzIERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBtbTgxeCB3aXJlbGVzcyBkcml2ZXIuIEZpcnN0LCBsZXQmIzM5O3MgaGVhZCBzdHJhaWdodCB0byB0aGUgc291cmNlIOKAkyB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBpdHNlbGYuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgbmF2aWdhdGluZyB0byBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9gLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRoZSBtZWF0IG9mIHRoZSBkcml2ZXIgY29kZSwgaGVhZGVyIGZpbGVzLCBhbmQgaG9wZWZ1bGx5LCBzb21lIGtleSBkb2N1bWVudGF0aW9uIG9yIGludGVybmFsIHByb2plY3Qgc3BlY2lmaWNzIHRvIHJlc2lkZS4gS25vd2luZyB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBpcyBoYWxmIHRoZSBiYXR0bGU7IGl0IHRlbGxzIG1lIHRoZSBhc3N1bWVkIGRlc2lnbiBhbmQgb3JnYW5pemF0aW9uIG9mIHRoaXMgZHJpdmVyLgoKTm93LCBhcyBhbiBleHBlcnQsIEkga25vdyB0aGF0IGNvbmZpZ3VyYXRpb24gaXMgY3JpdGljYWwgZm9yIGhvdyBhIGRyaXZlciBpbnRlZ3JhdGVzIHdpdGggdGhlIGJyb2FkZXIga2VybmVsIGJ1aWxkLiBTbywgSSYjMzk7bGwgaW1tZWRpYXRlbHkgc2hpZnQgbXkgZm9jdXMgdG8gdGhlIGBLY29uZmlnYCBmaWxlIHdpdGhpbiB0aGF0IGRpcmVjdG9yeS4gVGhpcyBmaWxlIGlzIHRoZSBsaWZlYmxvb2Qgb2YgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gaW4gdGhpcyBjb250ZXh0LCBkZWZpbmluZyBhbGwgdGhlIGNvbmZpZ3VyYWJsZSBvcHRpb25zIGZvciB0aGlzIHNwZWNpZmljIGRyaXZlci4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6CgoqICAgKipEZXBlbmRlbmNpZXM6KiogV2hhdCBvdGhlciBrZXJuZWwgY29tcG9uZW50cyBvciBkcml2ZXJzIGRvZXMgdGhpcyBkZXBlbmQgb24/IERvZXMgaXQgbGV2ZXJhZ2UgZXhpc3Rpbmcgd2lyZWxlc3MgaW5mcmFzdHJ1Y3R1cmUgb3IgaGF2ZSBhIGN1c3RvbSBzdGFjaz8KKiAgICoqRmVhdHVyZXM6KiogV2hhdCBmdW5jdGlvbmFsaXR5IGlzIGV4cG9zZWQg4oCTIDgwMi4xMSBzdGFuZGFyZHMgc3VwcG9ydGVkLCBzZWN1cml0eSBvcHRpb25zLCBwb3dlciBtYW5hZ2VtZW50IHNldHRpbmdzPyBUaGVzZSB3aWxsIGluZGljYXRlIHRoZSBjYXBhYmlsaXRpZXMgYW5kIHNjb3BlIG9mIHRoaXMgZHJpdmVyLgoqICAgKipCdWlsZCBPcHRpb25zOioqIEhvdyBpcyB0aGUgZHJpdmVyIGVuYWJsZWQ/IElzIGl0IHN0YXRpY2FsbHkgY29tcGlsZWQsIGJ1aWx0IGFzIGEgbW9kdWxlLCBvciBjb25kaXRpb25hbGx5IGluY2x1ZGVkIGJhc2VkIG9uIGhhcmR3YXJlIGRldGVjdGlvbj8gVGhpcyBnaXZlcyBjbHVlcyBhYm91dCBob3cgdGhlIHRhcmdldCBwbGF0Zm9ybXMgd291bGQgdXNlIGl0LgoqICAgKipEZWZhdWx0czoqKiBBcmUgdGhlcmUgc2Vuc2libGUgZGVmYXVsdHMgdG8gYmVnaW4gd2l0aCwgb3Igd2lsbCBJIG5lZWQgdG8gZGVmaW5lIHRoZSBzZXR0aW5ncyBiYXNlZCBvbiB0aGUgdGFyZ2V0IHBsYXRmb3JtPwoKSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgY29uZGl0aW9uYWwgbG9naWMgd2l0aGluIHRoZSBgS2NvbmZpZ2Ag4oCTIGxpa2UgYGlmLi4uZWxzZWAgc3RhdGVtZW50cyDigJMgYXMgdGhleSBsaWtlbHkgZGVmaW5lIGhvdyB0aGUgZHJpdmVyIGJlaGF2ZXMgb24gZGlmZmVyZW50IGhhcmR3YXJlIG9yIHBsYXRmb3Jtcy4gVGhlIGFpbSBvZiB0aGlzIGZpcnN0IHJldmlldyB3aWxsIGJlIHRvIGZvcm0gYSBmdWxsIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRyaXZlciBhbmQgaXRzIHBsYWNlIHdpdGhpbiB0aGUga2VybmVsLiBBcm1lZCB3aXRoIHRoYXQsIEkgY2FuIG1vdmUgb24gdG8gb3RoZXIgdGhpbmdzIHRvIGFuYWx5emUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5jb2Rlc2VhcmNoLWRpci1pbmRleDwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RGlyJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlcyYjMzQ7OiBbCiAgICAmIzM0O2J1cy5oJiMzNDssCiAgICAmIzM0O2NvbW1hbmQuYyYjMzQ7LAogICAgJiMzNDtjb21tYW5kLmgmIzM0OywKICAgICYjMzQ7Y29tbWFuZF9kZWZzLmgmIzM0OywKICAgICYjMzQ7Y29yZS5jJiMzNDssCiAgICAmIzM0O2NvcmUuaCYjMzQ7LAogICAgJiMzNDtmdy5jJiMzNDssCiAgICAmIzM0O2Z3LmgmIzM0OywKICAgICYjMzQ7aGlmLmgmIzM0OywKICAgICYjMzQ7aHcuYyYjMzQ7LAogICAgJiMzNDtody5oJiMzNDssCiAgICAmIzM0O21hYy5jJiMzNDssCiAgICAmIzM0O21hYy5oJiMzNDssCiAgICAmIzM0O21tcmMuYyYjMzQ7LAogICAgJiMzNDttbXJjLmgmIzM0OywKICAgICYjMzQ7cHMuYyYjMzQ7LAogICAgJiMzNDtwcy5oJiMzNDssCiAgICAmIzM0O3JhdGVfY29kZS5oJiMzNDssCiAgICAmIzM0O3JjLmMmIzM0OywKICAgICYjMzQ7cmMuaCYjMzQ7LAogICAgJiMzNDtzZGlvLmMmIzM0OywKICAgICYjMzQ7c2ticS5jJiMzNDssCiAgICAmIzM0O3NrYnEuaCYjMzQ7LAogICAgJiMzNDt1c2IuYyYjMzQ7LAogICAgJiMzNDt5YXBzLmMmIzM0OywKICAgICYjMzQ7eWFwcy5oJiMzNDssCiAgICAmIzM0O3lhcHNfaHcuYyYjMzQ7LAogICAgJiMzNDt5YXBzX2h3LmgmIzM0OwogIF0sCiAgJiMzNDtTdWJkaXJzJiMzNDs6IG51bGwKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdFxuICAgMzpcdGNvbmZpZyBNTTgxWFxuICAgNDpcdFx0dHJpc3RhdGUgXCYjMzQ7TW9yc2UgTWljcm8gTU04MXggd2lyZWxlc3MgZGV2aWNlc1wmIzM0OyBpZiBDT01QSUxFX1RFU1RcbiAgIDU6XHRcdGRlcGVuZHMgb24gTUFDODAyMTFcbiAgIDY6XHRcdHNlbGVjdCBGV19MT0FERVJcbiAgIDc6XHRcdHNlbGVjdCBDUkM3XG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3Igd2lyZWxlc3MgZGV2aWNlcyBiYXNlZFxuICAxMDpcdFx0ICBvbiBNb3JzZSBNaWNybyBNTTgxeHggY2hpcHNldHMuXG4gIDExOlx0XG4gIDEyOlx0Y29uZmlnIE1NODFYX1VTQlxuICAxMzpcdFx0dHJpc3RhdGUgXCYjMzQ7TW9yc2UgTWljcm8gTU04MXggVVNCIHN1cHBvcnRcJiMzNDtcbiAgMTQ6XHRcdGRlcGVuZHMgb24gTUFDODAyMTEgXHUwMDI2XHUwMDI2IFVTQlxuICAxNTpcdFx0c2VsZWN0IE1NODFYXG4gIDE2Olx0XHRoZWxwXG4gIDE3Olx0XHQgIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3IgdGhlIFVTQiBpbnRlcmZhY2Ugb2ZcbiAgMTg6XHRcdCAgZGV2aWNlcyB1c2luZyB0aGUgTW9yc2UgTWljcm8gTU04MXggY2hpcHNldC5cbiAgMTk6XHRcbiAgMjA6XHRjb25maWcgTU04MVhfU0RJT1xuICAyMTpcdFx0dHJpc3RhdGUgXCYjMzQ7TW9yc2UgTWljcm8gTU04MXggU0RJTyBzdXBwb3J0XCYjMzQ7XG4gIDIyOlx0XHRkZXBlbmRzIG9uIE1BQzgwMjExIFx1MDAyNlx1MDAyNiBNTUNcbiAgMjM6XHRcdHNlbGVjdCBNTTgxWFxuICAyNDpcdFx0aGVscFxuICAyNTpcdFx0ICBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIHRoZSBTRElPIGludGVyZmFjZSBvZlxuICAyNjpcdFx0ICBkZXZpY2VzIHVzaW5nIHRoZSBNb3JzZSBNaWNybyBNTTgxeCBjaGlwc2V0LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4ODQKCQkJCQkJCW91dHB1dDogOTAKCQkJCQkJCXRob3VnaHRzOiA5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbml0aWFsIEFzc2Vzc21lbnQgb2YgVVNCIEdhZGdldCBTdXBwb3J0IGluIFN5emthbGxlciBmb3IgYSBTcGVjaWZpYyBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYE1NODFYX1VTQmAgY29uZmlndXJhdGlvbiBvcHRpb24sIGFuZCB0aGF0IGltbWVkaWF0ZWx5IGNhdGNoZXMgbXkgZXllLiBVU0Igc3VwcG9ydCEgVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgaGFuZGxlZCBieSBgdXNiLmNgLiBUaGUgZmFjdCB0aGF0IFN5emthbGxlciBjYW4gZW11bGF0ZSBVU0IgZGV2aWNlcyB2aWEgdGhlIFVTQiBnYWRnZXQgKHNwZWNpZmljYWxseSBSYXcgR2FkZ2V0IG9yIER1bW15IEhDRCkgbWVhbnMgdGhpcyBjb3VsZCBiZSBhIHJlYWxseSBmcnVpdGZ1bCBhcmVhIGZvciBmdXp6aW5nLiBJJiMzOTttIHRoaW5raW5nLCB0aGlzIG1pZ2h0IGdpdmUgbWUgYSBuZXcgcGVyc3BlY3RpdmUgb24gc29tZXRoaW5nIHRvIGludmVzdGlnYXRlLgoKTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIHdhbnQgdG8gZGl2ZSBpbnRvIHRoZSBzcGVjaWZpYyBkcml2ZXIgaW1wbGVtZW50YXRpb24g4oCTIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L3VzYi5jYCDigJMgYW5kIGZpZ3VyZSBvdXQgaG93IGBtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnNgIGlzIHJlYWNoZWQuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiBwb3RlbnRpYWwgYnVncyB3aWxsIGJlIGZvdW5kLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHBhdGhzIHRvIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24gd2lsbCB0ZWxsIG1lIHRoZSBhcmVhcyBJIHNob3VsZCBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb24uIFRoaXMgaXMgd2hlcmUgdGhlIGdvb2Qgc3R1ZmYgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC91c2IuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQvKlxuICAgMzpcdCAqIENvcHlyaWdodCAoYykgMjAxNy0yMDI2IE1vcnNlIE1pY3JvXG4gICA0Olx0ICovXG4gICA1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvamlmZmllcy5oXHUwMDNlXG4gICA2Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAgIDc6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC91c2IuaFx1MDAzZVxuICAgODpcdCNpbmNsdWRlIFwmIzM0O2hpZi5oXCYjMzQ7XG4gICA5Olx0I2luY2x1ZGUgXCYjMzQ7YnVzLmhcJiMzNDtcbiAgMTA6XHQjaW5jbHVkZSBcJiMzNDttYWMuaFwmIzM0O1xuICAxMTpcdCNpbmNsdWRlIFwmIzM0O2NvcmUuaFwmIzM0O1xuICAxMjpcdFxuICAxMzpcdC8qXG4gIDE0Olx0ICogVVJCIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLiBJZiBhbiBVUkIgZG9lcyBub3QgY29tcGxldGUgd2l0aGluIHRoaXNcbiAgMTU6XHQgKiB0aW1lLCBpdCB3aWxsIGJlIGtpbGxlZC4gVGhpcyB0aW1lb3V0IG5lZWRzIHRvIGFjY291bnQgZm9yIFVTQiBzdXNwZW5kYW5kXG4gIDE2Olx0ICogcmVzdW1lIG9jY3VycmluZyBiZWZvcmUgdGhlIFVSQiBjYW4gYmUgdHJhbnNmZXJyZWQsIGFuZCBpdCBhbHNvIG5lZWRzIHRvXG4gIDE3Olx0ICogYWNjb3VudCBmb3IgdHJhbnNmZXJyaW5nIFVTQl9NQVhfVFJBTlNGRVJfU0laRSBieXRlcyBvdmVyIGEgcG90ZW50aWFsbHlcbiAgMTg6XHQgKiBzbG93LCBjb25nZXN0ZWQgVVNCIEZ1bGwgU3BlZWQgbGluay5cbiAgMTk6XHQgKi9cbiAgMjA6XHQjZGVmaW5lIFVSQl9USU1FT1VUX01TIDI1MFxuICAyMTpcdFxuICAyMjpcdC8qIEhpZ2ggc3BlZWQgVVNCIDJeKDQtMSkgKiAxMjV1c2VjID0gMW1zZWMgKi9cbiAgMjM6XHQjZGVmaW5lIE1NODFYX1VTQl9JTlRFUlJVUFRfSU5URVJWQUwgNFxuICAyNDpcdFxuICAyNTpcdC8qIE1heCBieXRlcyBwZXIgVVNCIHJlYWQvd3JpdGUgKi9cbiAgMjY6XHQjZGVmaW5lIFVTQl9NQVhfVFJBTlNGRVJfU0laRSAoMTYgKiAxMDI0KVxuICAyNzpcdFxuICAyODpcdC8qIElOVCBFUCBidWZmZXIgc2l6ZSAqL1xuICAyOTpcdCNkZWZpbmUgTU04MVhfRVBfSU5UX0JVRkZFUl9TSVpFIDhcbiAgMzA6XHRcbiAgMzE6XHQvKiBNb3JzZSB2ZW5kb3IgSURzKi9cbiAgMzI6XHQjZGVmaW5lIE1NODFYX1ZFTkRPUl9JRCAweDMyNWJcbiAgMzM6XHQjZGVmaW5lIE1NODFYX01NODEwWF9QUk9EVUNUX0lEIDB4ODEwMFxuICAzNDpcdFxuICAzNTpcdC8qIFBvd2VyIG1hbmFnZW1lbnQgcnVudGltZSBhdXRvLXN1c3BlbmQgZGVsYXkgdmFsdWUgaW4gbWlsbGlzZWNvbmRzICovXG4gIDM2Olx0I2RlZmluZSBQTV9SVU5USU1FX0FVVE9TVVNQRU5EX0RFTEFZX01TIDEwMFxuICAzNzpcdFxuICAzODpcdGVudW0gbW04MXhfdXNiX2VuZHBvaW50cyB7XG4gIDM5Olx0XHRNTTgxWF9FUF9DTUQgPSAwLFxuICA0MDpcdFx0TU04MVhfRVBfSU5ULFxuICA0MTpcdFx0TU04MVhfRVBfTUVNX1JELFxuICA0MjpcdFx0TU04MVhfRVBfTUVNX1dSLFxuICA0MzpcdFx0TU04MVhfRVBfUkVHX1JELFxuICA0NDpcdFx0TU04MVhfRVBfUkVHX1dSLFxuICA0NTpcdFx0TU04MVhfRVBfRVBfTUFYLFxuICA0NjpcdH07XG4gIDQ3Olx0XG4gIDQ4Olx0c3RydWN0IG1tODF4X3VzYl9lbmRwb2ludCB7XG4gIDQ5Olx0XHR1bnNpZ25lZCBjaGFyICpidWZmZXI7XG4gIDUwOlx0XHRzdHJ1Y3QgdXJiICp1cmI7XG4gIDUxOlx0XHRfX3U4IGFkZHI7XG4gIDUyOlx0XHRpbnQgc2l6ZTtcbiAgNTM6XHR9O1xuICA1NDpcdFxuICA1NTpcdGVudW0gbW04MXhfdXNiX2ZsYWdzIHsgTU04MVhfVVNCX0ZMQUdfQVRUQUNIRUQsIE1NODFYX1VTQl9GTEFHX1NVU1BFTkRFRCB9O1xuICA1NjpcdFxuICA1NzpcdHN0cnVjdCBtbTgxeF91c2Ige1xuICA1ODpcdFx0c3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7XG4gIDU5Olx0XHRzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlO1xuICA2MDpcdFx0c3RydWN0IG1tODF4X3VzYl9lbmRwb2ludCBlbmRwb2ludHNbTU04MVhfRVBfRVBfTUFYXTtcbiAgNjE6XHRcdGludCBlcnJvcnM7XG4gIDYyOlx0XG4gIDYzOlx0XHQvKiBzZXJpYWxpc2UgVVNCIGRldmljZSBzdHJ1Y3QgKi9cbiAgNjQ6XHRcdHN0cnVjdCBtdXRleCBsb2NrO1xuICA2NTpcdFxuICA2NjpcdFx0Lyogc2VyaWFsaXNlIFVTQiBidXMgYWNjZXNzICovXG4gIDY3Olx0XHRzdHJ1Y3QgbXV0ZXggYnVzX2xvY2s7XG4gIDY4Olx0XG4gIDY5Olx0XHRib29sIG9uZ29pbmdfY21kO1xuICA3MDpcdFx0Ym9vbCBvbmdvaW5nX3J3O1xuICA3MTpcdFx0d2FpdF9xdWV1ZV9oZWFkX3QgcndfaW5fd2FpdDtcbiAgNzI6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gIDczOlx0fTtcbiAgNzQ6XHRcbiAgNzU6XHRlbnVtIG1tODF4X3VzYl9jb21tYW5kX2RpcmVjdGlvbiB7XG4gIDc2Olx0XHRNTTgxWF9VU0JfV1JJVEUgPSAweDAwLFxuICA3NzpcdFx0TU04MVhfVVNCX1JFQUQgPSAweDgwLFxuICA3ODpcdFx0TU04MVhfVVNCX1JFU0VUID0gMHgwMixcbiAgNzk6XHR9O1xuICA4MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI3NTpcdFx0XHRnb3RvIG91dDtcbiAyNzY6XHRcdH1cbiAyNzc6XHRcbiAyNzg6XHRcdHJldCA9IG1tODF4X2NtZF9nZXRfZGlzYWJsZWRfY2hhbm5lbHMobW9ycywgcmVzcCwgcmVzcF9sZW4pO1xuIDI3OTpcdFx0aWYgKHJldClcbiAyODA6XHRcdFx0Z290byBvdXQ7XG4gMjgxOlx0XG4gMjgyOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKG1vcnNfczFnaHpfY2hhbm5lbHMpOyBpJiM0MzsmIzQzOykge1xuIDI4MzpcdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoID0gXHUwMDI2bW9yc19zMWdoel9jaGFubmVsc1tpXTtcbiAyODQ6XHRcbiAyODU6XHRcdFx0aWYgKGNoLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRClcbiAyODY6XHRcdFx0XHRjb250aW51ZTtcbiAyODc6XHRcbiAyODg6XHRcdFx0Y2gtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+SUVFRTgwMjExX0NIQU5fUzFHX05PX1BSSU1BUlk7XG4gMjg5Olx0XHR9XG4gMjkwOlx0XG4gMjkxOlx0XHRpZiAobGUzMl90b19jcHUocmVzcC1cdTAwM2VuX2NoYW5uZWxzKSBcdTAwM2UgQVJSQVlfU0laRShtb3JzX3MxZ2h6X2NoYW5uZWxzKSkge1xuIDI5MjpcdFx0XHRyZXQgPSAtRUlOVkFMO1xuIDI5MzpcdFx0XHRnb3RvIG91dDtcbiAyOTQ6XHRcdH1cbiAyOTU6XHRcbiAyOTY6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxlMzJfdG9fY3B1KHJlc3AtXHUwMDNlbl9jaGFubmVscyk7IGkmIzQzOyYjNDM7KSB7XG4gMjk3Olx0XHRcdHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2g7XG4gMjk4Olx0XHRcdHN0cnVjdCBob3N0X2NtZF9kaXNhYmxlZF9jaGFubmVsX2VudHJ5ICplbnRyeSA9XG4gMjk5Olx0XHRcdFx0XHUwMDI2cmVzcC1cdTAwM2VjaGFubmVsc1tpXTtcbiAzMDA6XHRcbiAzMDE6XHRcdFx0aWYgKGVudHJ5LVx1MDAzZWJ3X21oeiAhPSAxKVxuIDMwMjpcdFx0XHRcdGNvbnRpbnVlO1xuIDMwMzpcdFxuIDMwNDpcdFx0XHRjaCA9IGllZWU4MDIxMV9nZXRfY2hhbm5lbF9raHooXG4gMzA1Olx0XHRcdFx0aHctXHUwMDNld2lwaHksXG4gMzA2Olx0XHRcdFx0S0haMTAwX1RPX0tIWihsZTE2X3RvX2NwdShlbnRyeS1cdTAwM2VmcmVxXzEwMGtoeikpKTtcbiAzMDc6XHRcdFx0aWYgKCFjaClcbiAzMDg6XHRcdFx0XHRjb250aW51ZTtcbiAzMDk6XHRcbiAzMTA6XHRcdFx0Y2gtXHUwMDNlZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fUzFHX05PX1BSSU1BUlk7XG4gMzExOlx0XHRcdGRldl9kYmcobW9ycy1cdTAwM2VkZXYsIFwmIzM0O3NldCBOT19QUklNQVJZIG9uICV1IEtIelwmIzM0OyxcbiAzMTI6XHRcdFx0XHRpZWVlODAyMTFfY2hhbm5lbF90b19raHooY2gpKTtcbiAzMTM6XHRcdH1cbiAzMTQ6XHRcbiAzMTU6XHRvdXQ6XG4gMzE2Olx0XHRpZiAocmV0KVxuIDMxNzpcdFx0XHRkZXZfZXJyKG1vcnMtXHUwMDNlZGV2LCBcJiMzNDtmYWlsZWQgdG8gc2V0IGRpc2FibGVkIHByaW1hcnkgY2hhbm5lbHNcJiMzNDspO1xuIDMxODpcdFxuIDMxOTpcdFx0a2ZyZWUocmVzcCk7XG4gMzIwOlx0fVxuIDMyMTpcdFxuIDMyMjpcdHN0YXRpYyBpbnQgbW04MXhfbWFjX29wc19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodylcbiAzMjM6XHR7XG4gMzI0Olx0XHRzdHJ1Y3QgbW04MXggKm1vcnMgPSBody1cdTAwM2Vwcml2O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjE3CgkJCQkJCQlvdXRwdXQ6IDQ5CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnNgIENhbGwgU2l0ZXMqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgYG1tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFuc2AuIFRvIHJlYWxseSBncm9rIHdoYXQmIzM5O3MgaGFwcGVuaW5nLCBJIG5lZWQgdG8ga25vdyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCBmcm9tLiBTdGFuZGFyZCBwcm9jZWR1cmU6IHRpbWUgdG8gYnJlYWsgb3V0IHRoZSBncmVwLiBMZXQmIzM5O3Mgc2VlIGFsbCB0aGUgcGxhY2VzIGluIHRoZSBjb2RlYmFzZSB0aGlzIGZ1bmN0aW9uIGdldHMgaW52b2tlZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGl0cyBjb250cm9sIGZsb3cgYW5kIGludGVuZGVkIHB1cnBvc2UuIEdvdHRhIGZpZ3VyZSBvdXQgaXRzIHJvbGUgaW4gdGhlIGdyZWF0ZXIgc2NoZW1lIG9mIHRoaW5ncy4gTm8gcG9pbnQgaW4gc3Bpbm5pbmcgbXkgd2hlZWxzIHVudGlsIEkgdW5kZXJzdGFuZCB0aGUgY2FsbGVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW04MXhfbWFjX2NoZWNrX2Z3X2Rpc2FibGVkX2NoYW5zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jPTIzOD1zdGF0aWMgYm9vbCBtbTgxeF90eF9oX3BzX2ZpbHRlcmVkX2Zvcl9zdGEoc3RydWN0IG1tODF4ICptb3JzLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjYxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYzoyNjI6c3RhdGljIHZvaWQgbW04MXhfbWFjX2NoZWNrX2Z3X2Rpc2FibGVkX2NoYW5zKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yNjMte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM9MjExMj1zdGF0aWMgaW50IG1tODF4X21hY19yZXN0YXJ0KHN0cnVjdCBtbTgxeCAqbW9ycylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxNjYtXHRjbGVhcl9iaXQoTU04MVhfU1RBVEVfUkVMT0FEX0ZXX0FGVEVSX1NUQVJULCBcdTAwMjZtb3JzLVx1MDAzZXN0YXRlX2ZsYWdzKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjE2NzpcdG1tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFucyhtb3JzLVx1MDAzZWh3KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjE2OC1cdGllZWU4MDIxMV9yZXN0YXJ0X2h3KG1vcnMtXHUwMDNlaHcpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODIzCgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGlnZ2luZyBEZWVwZXIgaW50byB0aGUgbW04MXggTUFDIERyaXZlcioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgc3Vycm91bmRpbmcgYG1tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFuc2AsIGBtbTgxeF9tYWNfcmVzdGFydGAsIGFuZCBgbW04MXhfbWFjX29wc19zdGFydGAuIFRoZXNlIGFyZSBrZXkgZnVuY3Rpb25zLCBhbmQgSSBuZWVkIHRvIHNlZSAqd2hlcmUqIGFuZCAqaG93KiB0aGV5JiMzOTtyZSB1c2VkLiBNeSBnb2FsIGlzIHRvIG1hcCBvdXQgdGhlIGludGVyYWN0aW9ucyBhbmQgcGlucG9pbnQgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24gb3IgZGVidWdnaW5nLCBzbyBJIGFtIGxvb2tpbmcgdG8gdHJhY2UgaG93IGFuZCB3aGVyZSB0aGV5IGFyZSBjYWxsZWQuCgpTcGVjaWZpY2FsbHksIEkmIzM5O20gaGVhZGluZyBpbnRvIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jYC4gSSYjMzk7bSBzdGFydGluZyBteSBkZWVwIGRpdmUgYnkgZm9jdXNpbmcgb24gbGluZXMgMjUwIHRocm91Z2ggMzMwLiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIGNodW5rIHRvIGJlZ2luIHdpdGg7IHRoaXMgYXJlYSBzaG91bGQgZ2l2ZSBtZSBjb250ZXh0IG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBhbmQgaG9wZWZ1bGx5LCBJIHdpbGwgYmUgYWJsZSB0byBzZWUgZnVuY3Rpb24gY2FsbHMgdGhhdCB3aWxsIGxlYWQgbWUgZG93biB0aGUgcmlnaHQgcGF0aC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI1MDpcdFx0aWYgKCFtb3JzX3N0YS1cdTAwM2V0eF9wc19maWx0ZXJfZW4pXG4gMjUxOlx0XHRcdHJldHVybiBmYWxzZTtcbiAyNTI6XHRcbiAyNTM6XHRcdGRldl9kYmcobW9ycy1cdTAwM2VkZXYsIFwmIzM0O0ZyYW1lIGZvciBzdGFbJXBNXSBQUyBmaWx0ZXJlZFwmIzM0OywgbW9yc19zdGEtXHUwMDNlYWRkcik7XG4gMjU0Olx0XG4gMjU1Olx0XHRpbmZvLVx1MDAzZWZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX1RYX0ZJTFRFUkVEO1xuIDI1NjpcdFx0aW5mby1cdTAwM2VmbGFncyBcdTAwMjY9IH5JRUVFODAyMTFfVFhfQ1RMX0FNUERVO1xuIDI1NzpcdFxuIDI1ODpcdFx0aWVlZTgwMjExX3R4X3N0YXR1c19za2IobW9ycy1cdTAwM2Vodywgc2tiKTtcbiAyNTk6XHRcdHJldHVybiB0cnVlO1xuIDI2MDpcdH1cbiAyNjE6XHRcbiAyNjI6XHRzdGF0aWMgdm9pZCBtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpXG4gMjYzOlx0e1xuIDI2NDpcdFx0aW50IHJldCA9IDA7XG4gMjY1Olx0XHR1MzIgaTtcbiAyNjY6XHRcdHN0cnVjdCBtbTgxeCAqbW9ycyA9IGh3LVx1MDAzZXByaXY7XG4gMjY3Olx0XHRzdHJ1Y3QgaG9zdF9jbWRfcmVzcF9nZXRfZGlzYWJsZWRfY2hhbm5lbHMgKnJlc3A7XG4gMjY4Olx0XHR1MzIgcmVzcF9sZW4gPSBzaXplb2Yoc3RydWN0IGhvc3RfY21kX2Rpc2FibGVkX2NoYW5uZWxfZW50cnkpICpcbiAyNjk6XHRcdFx0XHQgICAgICAgQVJSQVlfU0laRShtb3JzX3MxZ2h6X2NoYW5uZWxzKSAmIzQzO1xuIDI3MDpcdFx0XHQgICAgICAgc2l6ZW9mKCpyZXNwKTtcbiAyNzE6XHRcbiAyNzI6XHRcdHJlc3AgPSBremFsbG9jKHJlc3BfbGVuLCBHRlBfS0VSTkVMKTtcbiAyNzM6XHRcdGlmICghcmVzcCkge1xuIDI3NDpcdFx0XHRyZXQgPSAtRU5PTUVNO1xuIDI3NTpcdFx0XHRnb3RvIG91dDtcbiAyNzY6XHRcdH1cbiAyNzc6XHRcbiAyNzg6XHRcdHJldCA9IG1tODF4X2NtZF9nZXRfZGlzYWJsZWRfY2hhbm5lbHMobW9ycywgcmVzcCwgcmVzcF9sZW4pO1xuIDI3OTpcdFx0aWYgKHJldClcbiAyODA6XHRcdFx0Z290byBvdXQ7XG4gMjgxOlx0XG4gMjgyOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKG1vcnNfczFnaHpfY2hhbm5lbHMpOyBpJiM0MzsmIzQzOykge1xuIDI4MzpcdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoID0gXHUwMDI2bW9yc19zMWdoel9jaGFubmVsc1tpXTtcbiAyODQ6XHRcbiAyODU6XHRcdFx0aWYgKGNoLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRClcbiAyODY6XHRcdFx0XHRjb250aW51ZTtcbiAyODc6XHRcbiAyODg6XHRcdFx0Y2gtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+SUVFRTgwMjExX0NIQU5fUzFHX05PX1BSSU1BUlk7XG4gMjg5Olx0XHR9XG4gMjkwOlx0XG4gMjkxOlx0XHRpZiAobGUzMl90b19jcHUocmVzcC1cdTAwM2VuX2NoYW5uZWxzKSBcdTAwM2UgQVJSQVlfU0laRShtb3JzX3MxZ2h6X2NoYW5uZWxzKSkge1xuIDI5MjpcdFx0XHRyZXQgPSAtRUlOVkFMO1xuIDI5MzpcdFx0XHRnb3RvIG91dDtcbiAyOTQ6XHRcdH1cbiAyOTU6XHRcbiAyOTY6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxlMzJfdG9fY3B1KHJlc3AtXHUwMDNlbl9jaGFubmVscyk7IGkmIzQzOyYjNDM7KSB7XG4gMjk3Olx0XHRcdHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2g7XG4gMjk4Olx0XHRcdHN0cnVjdCBob3N0X2NtZF9kaXNhYmxlZF9jaGFubmVsX2VudHJ5ICplbnRyeSA9XG4gMjk5Olx0XHRcdFx0XHUwMDI2cmVzcC1cdTAwM2VjaGFubmVsc1tpXTtcbiAzMDA6XHRcbiAzMDE6XHRcdFx0aWYgKGVudHJ5LVx1MDAzZWJ3X21oeiAhPSAxKVxuIDMwMjpcdFx0XHRcdGNvbnRpbnVlO1xuIDMwMzpcdFxuIDMwNDpcdFx0XHRjaCA9IGllZWU4MDIxMV9nZXRfY2hhbm5lbF9raHooXG4gMzA1Olx0XHRcdFx0aHctXHUwMDNld2lwaHksXG4gMzA2Olx0XHRcdFx0S0haMTAwX1RPX0tIWihsZTE2X3RvX2NwdShlbnRyeS1cdTAwM2VmcmVxXzEwMGtoeikpKTtcbiAzMDc6XHRcdFx0aWYgKCFjaClcbiAzMDg6XHRcdFx0XHRjb250aW51ZTtcbiAzMDk6XHRcbiAzMTA6XHRcdFx0Y2gtXHUwMDNlZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fUzFHX05PX1BSSU1BUlk7XG4gMzExOlx0XHRcdGRldl9kYmcobW9ycy1cdTAwM2VkZXYsIFwmIzM0O3NldCBOT19QUklNQVJZIG9uICV1IEtIelwmIzM0OyxcbiAzMTI6XHRcdFx0XHRpZWVlODAyMTFfY2hhbm5lbF90b19raHooY2gpKTtcbiAzMTM6XHRcdH1cbiAzMTQ6XHRcbiAzMTU6XHRvdXQ6XG4gMzE2Olx0XHRpZiAocmV0KVxuIDMxNzpcdFx0XHRkZXZfZXJyKG1vcnMtXHUwMDNlZGV2LCBcJiMzNDtmYWlsZWQgdG8gc2V0IGRpc2FibGVkIHByaW1hcnkgY2hhbm5lbHNcJiMzNDspO1xuIDMxODpcdFxuIDMxOTpcdFx0a2ZyZWUocmVzcCk7XG4gMzIwOlx0fVxuIDMyMTpcdFxuIDMyMjpcdHN0YXRpYyBpbnQgbW04MXhfbWFjX29wc19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodylcbiAzMjM6XHR7XG4gMzI0Olx0XHRzdHJ1Y3QgbW04MXggKm1vcnMgPSBody1cdTAwM2Vwcml2O1xuIDMyNTpcdFxuIDMyNjpcdFx0bW9ycy1cdTAwM2VzdGFydGVkID0gdHJ1ZTtcbiAzMjc6XHRcdHJldHVybiAwO1xuIDMyODpcdH1cbiAzMjk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ0NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIEZ1bmN0aW9uIENhbGwgQ29udGV4dCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0IG9mIGBtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnNgLiBUbyBkbyB0aGlzLCBJJiMzOTttIGdvaW5nIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIGNvZGUuIEdpdmVuIHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHNwZWNpZmljIGRyaXZlciwgSSYjMzk7bGwgZm9jdXMgbXkgc2VhcmNoIG9uIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9gIGRpcmVjdG9yeSwgd2hpY2ggaXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQuIEkmIzM5O2xsIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBzY2FuIHRoZSBmaWxlcyBpbiB0aGF0IGRpcmVjdG9yeSBmb3IgaW5zdGFuY2VzIG9mIHRoZSBmdW5jdGlvbiBuYW1lIGl0c2VsZiwgYG1tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFuc2AsIGFuZCBhbHNvIGZvciBhbnkgcmVmZXJlbmNlcyB0byBgZGlzYWJsZWRfY2hhbnNgLCBqdXN0IGluIGNhc2UgaXQmIzM5O3MgdXNlZCBhcyBhIHZhcmlhYmxlIG9yIHN0cnVjdHVyZSBtZW1iZXIgcmVsYXRlZCB0byB0aGUgc2FtZSBsb2dpYy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgaG93IHRoZSBmdW5jdGlvbiBpbnRlZ3JhdGVzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIG1tODF4IGRyaXZlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGlzYWJsZWRfY2hhbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM9NTQxPWludCBtbTgxeF9jbWRfc2V0X2ZyYWdfdGhyZXNob2xkKHN0cnVjdCBtbTgxeCAqbW9ycywgdTMyIGZyYWdfdGhyZXNob2xkKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTU1Mi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjU1MzppbnQgbW04MXhfY21kX2dldF9kaXNhYmxlZF9jaGFubmVscyhcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jOjU1NDpcdHN0cnVjdCBtbTgxeCAqbW9ycywgc3RydWN0IGhvc3RfY21kX3Jlc3BfZ2V0X2Rpc2FibGVkX2NoYW5uZWxzICpyZXNwLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmMtNTU1LVx0dWludCByZXNwX2xlbilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaD04MD1pbnQgbW04MXhfY21kX3NldF9mcmFnX3RocmVzaG9sZChzdHJ1Y3QgbW04MXggKm1vcnMsIHUzMiBmcmFnX3RocmVzaG9sZCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaDo4MTppbnQgbW04MXhfY21kX2dldF9kaXNhYmxlZF9jaGFubmVscyhcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oOjgyOlx0c3RydWN0IG1tODF4ICptb3JzLCBzdHJ1Y3QgaG9zdF9jbWRfcmVzcF9nZXRfZGlzYWJsZWRfY2hhbm5lbHMgKnJlc3AsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuaC04My1cdHVpbnQgcmVzcF9sZW4pO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZF9kZWZzLmg9ODcwPXN0cnVjdCBob3N0X2NtZF9yZXFfbGlfc2xlZXAge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZF9kZWZzLmgtODc0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kX2RlZnMuaDo4NzU6c3RydWN0IGhvc3RfY21kX2Rpc2FibGVkX2NoYW5uZWxfZW50cnkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kX2RlZnMuaC04NzYtXHRfX2xlMTYgZnJlcV8xMDBraHo7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kX2RlZnMuaC04NzktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmRfZGVmcy5oOjg4MDpzdHJ1Y3QgaG9zdF9jbWRfcmVzcF9nZXRfZGlzYWJsZWRfY2hhbm5lbHMge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kX2RlZnMuaC04ODEtXHRzdHJ1Y3QgaG9zdF9jbWRfaGVhZGVyIGhkcjtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmRfZGVmcy5oLTg4My1cdF9fbGUzMiBuX2NoYW5uZWxzO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kX2RlZnMuaDo4ODQ6XHRzdHJ1Y3QgaG9zdF9jbWRfZGlzYWJsZWRfY2hhbm5lbF9lbnRyeSBjaGFubmVsc1tdO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kX2RlZnMuaC04ODUtfSBfX3BhY2tlZDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jPTIzOD1zdGF0aWMgYm9vbCBtbTgxeF90eF9oX3BzX2ZpbHRlcmVkX2Zvcl9zdGEoc3RydWN0IG1tODF4ICptb3JzLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjYxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYzoyNjI6c3RhdGljIHZvaWQgbW04MXhfbWFjX2NoZWNrX2Z3X2Rpc2FibGVkX2NoYW5zKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yNjMte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjY2LVx0c3RydWN0IG1tODF4ICptb3JzID0gaHctXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjY3Olx0c3RydWN0IGhvc3RfY21kX3Jlc3BfZ2V0X2Rpc2FibGVkX2NoYW5uZWxzICpyZXNwO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYzoyNjg6XHR1MzIgcmVzcF9sZW4gPSBzaXplb2Yoc3RydWN0IGhvc3RfY21kX2Rpc2FibGVkX2NoYW5uZWxfZW50cnkpICpcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjY5LVx0XHRcdCAgICAgICBBUlJBWV9TSVpFKG1vcnNfczFnaHpfY2hhbm5lbHMpICYjNDM7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yNzctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jOjI3ODpcdHJldCA9IG1tODF4X2NtZF9nZXRfZGlzYWJsZWRfY2hhbm5lbHMobW9ycywgcmVzcCwgcmVzcF9sZW4pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yNzktXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjk3LVx0XHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYzoyOTg6XHRcdHN0cnVjdCBob3N0X2NtZF9kaXNhYmxlZF9jaGFubmVsX2VudHJ5ICplbnRyeSA9XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTI5OS1cdFx0XHRcdTAwMjZyZXNwLVx1MDAzZWNoYW5uZWxzW2ldO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM9MjExMj1zdGF0aWMgaW50IG1tODF4X21hY19yZXN0YXJ0KHN0cnVjdCBtbTgxeCAqbW9ycylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxNjYtXHRjbGVhcl9iaXQoTU04MVhfU1RBVEVfUkVMT0FEX0ZXX0FGVEVSX1NUQVJULCBcdTAwMjZtb3JzLVx1MDAzZXN0YXRlX2ZsYWdzKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjE2NzpcdG1tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFucyhtb3JzLVx1MDAzZWh3KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjE2OC1cdGllZWU4MDIxMV9yZXN0YXJ0X2h3KG1vcnMtXHUwMDNlaHcpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTIxNQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmUsIHVzaW5nIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyBNb3JzZSBNaWNybyBEcml2ZXIgRmlybXdhcmUgQ29udHJvbCBGbG93KioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIE1vcnNlIE1pY3JvIGRyaXZlci4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgc3Vycm91bmRpbmcgdHdvIGtleSBmdW5jdGlvbnM6IGBtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnNgIGFuZCBgbW04MXhfbWFjX3Jlc3RhcnRgLiBUaGVzZSBhcmUgY3J1Y2lhbCBmb3IgbWFuYWdpbmcgY2hhbm5lbCBkaXNhYmxpbmcgYW5kIHBvdGVudGlhbGx5IHJlc3RhcnRpbmcgdGhlIE1BQywgc28ga25vd2luZyAqd2hlcmUqIGFuZCAqaG93KiB0aGV5JiMzOTtyZSBjYWxsZWQgaXMgZXNzZW50aWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGRyaXZlciBiZWhhdmlvciBhbmQgZGVidWdnaW5nIGFueSBpc3N1ZXMgcmVsYXRlZCB0byBjaGFubmVsIG1hbmFnZW1lbnQgb3IgTUFDIGluaXRpYWxpemF0aW9uL3JlY292ZXJ5LiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGludGVncmF0ZWQgd2l0aGluIHRoZSBkcml2ZXImIzM5O3MgYXJjaGl0ZWN0dXJlLiBMb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9ucyYjMzk7IGNhbGwgc2l0ZXMgd2lsbCBnaXZlIG1lIGluc2lnaHQgaW50byB3aGVuIGZpcm13YXJlIGNoZWNrcyBhcmUgcGVyZm9ybWVkIHRvIGVuc3VyZSBvcGVyYXRpb24sIGFuZCB3aGVuIHRoZSByZXN0YXJ0IG9wZXJhdGlvbnMgbWF5IG9jY3VyLCB3aGljaCBpcyB0aGUgc29ydCBvZiB0aGluZyB0aGF0IGNhbiBwcm92aWRlIGdvb2QgY29udGV4dCBmb3IgaW52ZXN0aWdhdGluZyBzcGVjaWZpYyBoYXJkd2FyZSBpc3N1ZXMsIG9yIG9wdGltaXphdGlvbnMuIExldCYjMzk7cyBzdGFydCB0aGUgaHVudCBmb3IgY2FsbHMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21tODF4X21hY19yZXN0YXJ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jPTIwNzY9c3RhdGljIHUzMiBtbTgxeF9nZXRfZXhwZWN0ZWRfdGhyb3VnaHB1dChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIwOTUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jOjIwOTY6c3RhdGljIHZvaWQgbW04MXhfbWFjX3Jlc3RhcnRfY2xlYW51cF9pdGVyKHZvaWQgKmRhdGEsIHU4ICptYWMsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIwOTctXHRcdFx0XHRcdCAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTAyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYzoyMTAzOnN0YXRpYyB2b2lkIG1tODF4X21hY19yZXN0YXJ0X2NsZWFudXAoc3RydWN0IG1tODF4ICptb3JzKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTA0LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxMDYtXHRcdFx0XHRcdCAgICBJRUVFODAyMTFfSUZBQ0VfSVRFUl9OT1JNQUwsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jOjIxMDc6XHRcdFx0XHRcdCAgICBtbTgxeF9tYWNfcmVzdGFydF9jbGVhbnVwX2l0ZXIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxMDgtXHRcdFx0XHRcdCAgICBOVUxMKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxMTEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jOjIxMTI6c3RhdGljIGludCBtbTgxeF9tYWNfcmVzdGFydChzdHJ1Y3QgbW04MXggKm1vcnMpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxMTMte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjE0Mi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjE0MzpcdG1tODF4X21hY19yZXN0YXJ0X2NsZWFudXAobW9ycyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxNDQtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYz0yMTc1PXN0YXRpYyBpbnQgbW04MXhfbWFjX29wc19hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjE4NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjE4NjpcdFx0cmV0ID0gbW04MXhfbWFjX3Jlc3RhcnQobW9ycyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxODctXHRcdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jPTIyNjY9c3RhdGljIHZvaWQgbW04MXhfcmVnX25vdGlmaWVyKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMjc3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYzoyMjc4Olx0cmV0ID0gbW04MXhfbWFjX3Jlc3RhcnQobW9ycyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIyNzktXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM5NQoJCQkJCQkJb3V0cHV0OiA1NgoJCQkJCQkJdGhvdWdodHM6IDkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgbW04MXhgIE1BQyBEcml2ZXImIzM5O3MgUmVzdGFydCBNZWNoYW5pc20qKgoKQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgbW04MXhfbWFjX3Jlc3RhcnRgIGZ1bmN0aW9uLiBUaGUgY29kZSBzZWVtcyB0byBpbmRpY2F0ZSBpdCYjMzk7cyBpbnZva2VkIGluIHR3byBkaXN0aW5jdCBjb250ZXh0czogZmlyc3QsIHdpdGhpbiBgbW04MXhfbWFjX29wc19hZGRfaW50ZXJmYWNlYC4gUmlnaHQsIHRoYXQmIzM5O3MgYSBjYWxsYmFjayB3aXRoaW4gdGhlIG1hYzgwMjExIGZyYW1ld29yaywgc28gdGhpcyByZXN0YXJ0IGxpa2VseSBoYXBwZW5zIHdoZW4gYSBuZXcgbmV0d29yayBpbnRlcmZhY2UgaXMgYWRkZWQuIEludGVyZXN0aW5nLiBUaGUgc2Vjb25kIGNhbGwgY29tZXMgZnJvbSBgbW04MXhfcmVnX25vdGlmaWVyYCwgd2hpY2ggaGFuZGxlcyByZWd1bGF0b3J5IGRvbWFpbiBjaGFuZ2VzLiBTbywgcG90ZW50aWFsbHkgYSByZXN0YXJ0IGlzIHRyaWdnZXJlZCB3aGVuIHJlZ2lvbiBzZXR0aW5ncyBhcmUgbW9kaWZpZWQsIHdoaWNoIG1ha2VzIHNlbnNlLgoKTm93LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBiaWdnZXIgcGljdHVyZTogaG93IHRoZSBkZXZpY2UgaXRzZWxmIGdldHMgaW5pdGlhbGl6ZWQgaW4gdGhlIGZpcnN0IHBsYWNlLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIGBjb3JlLmNgIGFuZCBgdXNiLmNgIHRvIHNlZSB0aGUgZGV2aWNlIHByb2JpbmcgYW5kIHJlZ2lzdHJhdGlvbiBwcm9jZXNzZXMuIEdvdHRhIHVuZGVyc3RhbmQgdGhlIGRldmljZSYjMzk7cyBsaWZlY3ljbGUgZnJvbSB0aGUgdmVyeSBiZWdpbm5pbmcgdG8gZWZmZWN0aXZlbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgcmVzdGFydCBsb2dpYy4gVGhpcyBpbmZvcm1hdGlvbiBzaG91bGQgaWxsdW1pbmF0ZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGBtbTgxeF9tYWNfcmVzdGFydGAgYW5kIHRoZSBkZXZpY2UmIzM5O3MgZm91bmRhdGlvbmFsIHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttbTgxeF9wcm9iZXxtbTgxeF9yZWdpc3RlcnxtbTgxeF91c2JfcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvdXNiLmM9NzE2PXN0YXRpYyB2b2lkIG1tODF4X3VyYl9jbGVhbnVwKHN0cnVjdCBtbTgxeCAqbW9ycylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L3VzYi5jLTc0NC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvdXNiLmM6NzQ1OnN0YXRpYyBpbnQgbW04MXhfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L3VzYi5jLTc0Ni1cdFx0XHQgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC91c2IuYz05MjU9c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIG1tODF4X3VzYl9kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L3VzYi5jLTkyNi1cdC5uYW1lID0gXCYjMzQ7bW04MXhfdXNiXCYjMzQ7LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC91c2IuYzo5Mjc6XHQucHJvYmUgPSBtbTgxeF91c2JfcHJvYmUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L3VzYi5jLTkyOC1cdC5kaXNjb25uZWN0ID0gbW04MXhfdXNiX2Rpc2Nvbm5lY3QsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDk4CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFVTQiBEcml2ZXImIzM5O3MgUHJvYmUgRnVuY3Rpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggdGhpcyBgbW04MXhfdXNiYCBkcml2ZXIsIHNwZWNpZmljYWxseSBkdXJpbmcgZGV2aWNlIGVudW1lcmF0aW9uLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGBtbTgxeF91c2JfcHJvYmVgIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYHVzYi5jYCBmaWxlLiBUaGlzIGlzIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludCB3aGVyZSB0aGUgZHJpdmVyIGF0dGVtcHRzIHRvIGluaXRpYWxpemUgYW5kIGNvbm5lY3Qgd2l0aCBhIG5ld2x5IHBsdWdnZWQtaW4gZGV2aWNlLiBJJiMzOTttIHRoaW5raW5nLCBieSBleGFtaW5pbmcgdGhpcyBmdW5jdGlvbiwgSSBzaG91bGQgYmUgYWJsZSB0byBnYWluIGluc2lnaHRzIGludG8gaG93IHRoZSBkcml2ZXIgaWRlbnRpZmllcyBhbmQgY29uZmlndXJlcyB0aGUgYG1tODF4YCBVU0IgZGV2aWNlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSB0aGUgbWF0Y2hpbmcgdGFibGUgb2YgZGV2aWNlIElEcywgcmVzb3VyY2UgYWxsb2NhdGlvbiAobWVtb3J5LCBJUlFzLCBldGMuKSwgYW5kIHRoZSBzZXR1cCBvZiBlbmRwb2ludHMuIFVuZGVyc3RhbmRpbmcgdGhlIHByb2JlIHJvdXRpbmUgaXMgZXNzZW50aWFsIGZvciBkaWFnbm9zaW5nIGFueSBkZXZpY2UgZGV0ZWN0aW9uIG9yIGluaXRpYWxpemF0aW9uIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L3VzYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NDU6XHRzdGF0aWMgaW50IG1tODF4X3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLFxuIDc0NjpcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcbiA3NDc6XHR7XG4gNzQ4Olx0XHRpbnQgcmV0O1xuIDc0OTpcdFx0c3RydWN0IG1tODF4ICptb3JzO1xuIDc1MDpcdFx0c3RydWN0IG1tODF4X3VzYiAqbXVzYjtcbiA3NTE6XHRcbiA3NTI6XHRcdG1vcnMgPSBtbTgxeF9jb3JlX2FsbG9jKHNpemVvZigqbXVzYiksIFx1MDAyNmludGVyZmFjZS1cdTAwM2VkZXYpO1xuIDc1MzpcdFx0aWYgKCFtb3JzKVxuIDc1NDpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA3NTU6XHRcbiA3NTY6XHRcdG1vcnMtXHUwMDNlYnVzX29wcyA9IFx1MDAyNm1tODF4X3VzYl9vcHM7XG4gNzU3Olx0XHRtb3JzLVx1MDAzZWJ1c190eXBlID0gTU04MVhfQlVTX1RZUEVfVVNCO1xuIDc1ODpcdFxuIDc1OTpcdFx0bXVzYiA9IChzdHJ1Y3QgbW04MXhfdXNiICopbW9ycy1cdTAwM2VkcnZfcHJpdjtcbiA3NjA6XHRcdG11c2ItXHUwMDNldWRldiA9IHVzYl9nZXRfZGV2KGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKSk7XG4gNzYxOlx0XHRtdXNiLVx1MDAzZWludGVyZmFjZSA9IHVzYl9nZXRfaW50ZihpbnRlcmZhY2UpO1xuIDc2MjpcdFxuIDc2MzpcdFx0bXV0ZXhfaW5pdChcdTAwMjZtdXNiLVx1MDAzZWxvY2spO1xuIDc2NDpcdFx0bXV0ZXhfaW5pdChcdTAwMjZtdXNiLVx1MDAzZWJ1c19sb2NrKTtcbiA3NjU6XHRcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2bXVzYi1cdTAwM2Vyd19pbl93YWl0KTtcbiA3NjY6XHRcdHVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBtb3JzKTtcbiA3Njc6XHRcbiA3Njg6XHRcdHJldCA9IG1tODF4X3VzYl9kZXRlY3RfZW5kcG9pbnRzKG1vcnMsIGludGVyZmFjZSk7XG4gNzY5Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDc3MDpcdFx0XHRnb3RvIGVycl9jb3JlX2ZyZWU7XG4gNzcxOlx0XG4gNzcyOlx0XHRzZXRfYml0KE1NODFYX1VTQl9GTEFHX0FUVEFDSEVELCBcdTAwMjZtdXNiLVx1MDAzZWZsYWdzKTtcbiA3NzM6XHRcbiA3NzQ6XHRcdHJldCA9IG1tODF4X2NvcmVfaW5pdChtb3JzKTtcbiA3NzU6XHRcdGlmIChyZXQpXG4gNzc2Olx0XHRcdGdvdG8gZXJyX3VyYl9jbGVhbnVwO1xuIDc3NzpcdFxuIDc3ODpcdFx0SU5JVF9XT1JLKFx1MDAyNm1vcnMtXHUwMDNldXNiX2lycV93b3JrLCBtbTgxeF91c2JfaXJxX3dvcmspO1xuIDc3OTpcdFxuIDc4MDpcdFx0cmV0ID0gbW04MXhfdXNiX2ludF9lbmFibGUobW9ycyk7XG4gNzgxOlx0XHRpZiAocmV0KVxuIDc4MjpcdFx0XHRnb3RvIGVycl9jb3JlX2RlaW5pdDtcbiA3ODM6XHRcbiA3ODQ6XHRcdHJldCA9IG1tODF4X2NvcmVfcmVnaXN0ZXIobW9ycyk7XG4gNzg1Olx0XHRpZiAocmV0KVxuIDc4NjpcdFx0XHRnb3RvIGVycl91c2JfaW50X3N0b3A7XG4gNzg3Olx0XG4gNzg4Olx0XHQvKiBVU0IgcmVxdWlyZXMgcmVtb3RlIHdha2V1cCBmdW5jdGlvbmFsaXR5IGZvciBzdXNwZW5kICovXG4gNzg5Olx0XHRjbGVhcl9iaXQoTU04MVhfVVNCX0ZMQUdfU1VTUEVOREVELCBcdTAwMjZtdXNiLVx1MDAzZWZsYWdzKTtcbiA3OTA6XHRcdG11c2ItXHUwMDNlaW50ZXJmYWNlLVx1MDAzZW5lZWRzX3JlbW90ZV93YWtldXAgPSAxO1xuIDc5MTpcdFx0dXNiX2VuYWJsZV9hdXRvc3VzcGVuZChtdXNiLVx1MDAzZXVkZXYpO1xuIDc5MjpcdFx0cG1fcnVudGltZV9zZXRfYXV0b3N1c3BlbmRfZGVsYXkoXHUwMDI2bXVzYi1cdTAwM2V1ZGV2LVx1MDAzZWRldixcbiA3OTM6XHRcdFx0XHRcdFx0IFBNX1JVTlRJTUVfQVVUT1NVU1BFTkRfREVMQVlfTVMpO1xuIDc5NDpcdFxuIDc5NTpcdFx0dXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKGludGVyZmFjZSk7XG4gNzk2Olx0XHRyZXR1cm4gMDtcbiA3OTc6XHRcbiA3OTg6XHRlcnJfdXNiX2ludF9zdG9wOlxuIDc5OTpcdFx0bW04MXhfdXNiX2ludF9zdG9wKG1vcnMpO1xuIDgwMDpcdGVycl9jb3JlX2RlaW5pdDpcbiA4MDE6XHRcdG1tODF4X2NvcmVfZGVpbml0KG1vcnMpO1xuIDgwMjpcdGVycl91cmJfY2xlYW51cDpcbiA4MDM6XHRcdG1tODF4X3VyYl9jbGVhbnVwKG1vcnMpO1xuIDgwNDpcdGVycl9jb3JlX2ZyZWU6XG4gODA1Olx0XHRtbTgxeF9jb3JlX2ZyZWUobW9ycyk7XG4gODA2Olx0XHR1c2JfcHV0X2ludGYoaW50ZXJmYWNlKTtcbiA4MDc6XHRcdHVzYl9wdXRfZGV2KGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKSk7XG4gODA4Olx0XHRyZXR1cm4gcmV0O1xuIDgwOTpcdH1cbiA4MTA6XHRcbiA4MTE6XHRzdGF0aWMgdm9pZCBtbTgxeF91c2JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKVxuIDgxMjpcdHtcbiA4MTM6XHRcdHN0cnVjdCBtbTgxeCAqbW9ycyA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTtcbiA4MTQ6XHRcdHN0cnVjdCBtbTgxeF91c2IgKm11c2IgPSAoc3RydWN0IG1tODF4X3VzYiAqKW1vcnMtXHUwMDNlZHJ2X3ByaXY7XG4gODE1Olx0XHRpbnQgbWlub3IgPSBpbnRlcmZhY2UtXHUwMDNlbWlub3I7XG4gODE2Olx0XHRzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKTtcbiA4MTc6XHRcbiA4MTg6XHRcdGlmICh1ZGV2LVx1MDAzZXN0YXRlID09IFVTQl9TVEFURV9OT1RBVFRBQ0hFRCkge1xuIDgxOTpcdFx0XHRjbGVhcl9iaXQoTU04MVhfVVNCX0ZMQUdfQVRUQUNIRUQsIFx1MDAyNm11c2ItXHUwMDNlZmxhZ3MpO1xuIDgyMDpcdFx0XHRzZXRfYml0KE1NODFYX1NUQVRFX0NISVBfVU5SRVNQT05TSVZFLCBcdTAwMjZtb3JzLVx1MDAzZXN0YXRlX2ZsYWdzKTtcbiA4MjE6XHRcdFx0ZGV2X2RiZyhtb3JzLVx1MDAzZWRldiwgXCYjMzQ7VVNCIHN1ZGRlbmx5IHVucGx1Z2dlZFwmIzM0Oyk7XG4gODIyOlx0XHR9XG4gODIzOlx0XG4gODI0Olx0XHR1c2JfZGlzYWJsZV9hdXRvc3VzcGVuZCh1ZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2OTUKCQkJCQkJCW91dHB1dDogNTEKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlOgoKKipDb3JlIEluaXRpYWxpemF0aW9uIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGhlcmUuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgd2hlcmUgZG9lcyBpdCBhbGwgKnJlYWxseSogc3RhcnQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb3JlJiMzOTtzIHNldHVwIGJlZm9yZSBhbnl0aGluZyBlbHNlLiBUaGUga2V5IGVudHJ5IHBvaW50cyBJJiMzOTttIGNvbnNpZGVyaW5nIGFyZSBgbW04MXhfY29yZV9pbml0YCwgYG1tODF4X2NvcmVfcmVnaXN0ZXJgLCBhbmQgYG1tODF4X21hY19pbml0YC4gRWFjaCBvZiB0aGVzZSBjb3VsZCBiZSB0aGUgY3JpdGljYWwgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB0cmFjZSB0aHJvdWdoIHRoZXNlIGZ1bmN0aW9ucyB0byB1bmRlcnN0YW5kIHRoZSBpbml0aWFsaXphdGlvbiBmbG93IGFuZCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zLCBzbyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIHRoZSBtb3N0IGxpa2VseSBhbmQgd29yayBiYWNrd2FyZHMgaWYgbmVlZGVkLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGUgY29yZSAqaXRzZWxmKiBpcyBicm91Z2h0IG9ubGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW04MXhfY29yZV9yZWdpc3RlcnxtbTgxeF9jb3JlX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jPTExPXN0YXRpYyBpbnQgbW04MXhfY29yZV9hdHRhY2hfcmVncyhzdHJ1Y3QgbW04MXggKm1vcnMpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtMzUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYzozNjpzdGF0aWMgdm9pZCBtbTgxeF9jb3JlX2luaXRfbWFjX2FkZHIoc3RydWN0IG1tODF4ICptb3JzKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtMzcte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jPTY1PUVYUE9SVF9TWU1CT0xfR1BMKG1tODF4X2NvcmVfYWxsb2MpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtNjYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYzo2NzppbnQgbW04MXhfY29yZV9pbml0KHN0cnVjdCBtbTgxeCAqbW9ycylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTY4LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy03My1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjc0Olx0bW04MXhfY29yZV9pbml0X21hY19hZGRyKG1vcnMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtNzUtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtMTA1LX1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjEwNjpFWFBPUlRfU1lNQk9MX0dQTChtbTgxeF9jb3JlX2luaXQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtMTA3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6MTA4OmludCBtbTgxeF9jb3JlX3JlZ2lzdGVyKHN0cnVjdCBtbTgxeCAqbW9ycylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTEwOS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtMTExLX1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjExMjpFWFBPUlRfU1lNQk9MX0dQTChtbTgxeF9jb3JlX3JlZ2lzdGVyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTExMy1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaD00NDk9c3RydWN0IG1tODF4ICptbTgxeF9jb3JlX2FsbG9jKHNpemVfdCBwcml2X3NpemUsIHN0cnVjdCBkZXZpY2UgKmRldik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaDo0NTA6aW50IG1tODF4X2NvcmVfaW5pdChzdHJ1Y3QgbW04MXggKm1vcnMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmg6NDUxOmludCBtbTgxeF9jb3JlX3JlZ2lzdGVyKHN0cnVjdCBtbTgxeCAqbW9ycyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaC00NTItdm9pZCBtbTgxeF9jb3JlX3VucmVnaXN0ZXIoc3RydWN0IG1tODF4ICptb3JzKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L3NkaW8uYz01MTc9c3RhdGljIGludCBtbTgxeF9zZGlvX3Byb2JlKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9zZGlvLmMtNTUxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9zZGlvLmM6NTUyOlx0cmV0ID0gbW04MXhfY29yZV9pbml0KG1vcnMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9zZGlvLmMtNTUzLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L3NkaW8uYy01NTktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L3NkaW8uYzo1NjA6XHRyZXQgPSBtbTgxeF9jb3JlX3JlZ2lzdGVyKG1vcnMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9zZGlvLmMtNTYxLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L3VzYi5jPTc0NT1zdGF0aWMgaW50IG1tODF4X3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvdXNiLmMtNzczLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC91c2IuYzo3NzQ6XHRyZXQgPSBtbTgxeF9jb3JlX2luaXQobW9ycyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L3VzYi5jLTc3NS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC91c2IuYy03ODMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L3VzYi5jOjc4NDpcdHJldCA9IG1tODF4X2NvcmVfcmVnaXN0ZXIobW9ycyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L3VzYi5jLTc4NS1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjE3CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBtbTgxeCBDb3JlKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGBtbTgxeGAgd2lyZWxlc3MgZHJpdmVyIGNvZGUgYWdhaW4uIEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSwgc3BlY2lmaWNhbGx5IGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuY2AuIExldCYjMzk7cyB6ZXJvIGluIG9uIGxpbmVzIDYwIHRocm91Z2ggMTIwLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgdGhlIG92ZXJhbGwgZnVuY3Rpb24gc3RydWN0dXJlIGhlcmUsIHBhcnRpY3VsYXJseSBhdCBob3cgdGhlIGNvcmUgbW9kdWxlIGlzIGluaXRpYWxpemluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgYXJlIGludGVyYWN0aW5nIHdpdGggdGhlIGhhcmR3YXJlLiBUaGVyZSBzaG91bGQgYmUgc29tZSBjcml0aWNhbCBjb25maWd1cmF0aW9uIG9yIGluaXRpYWxpemF0aW9uIHN0ZXBzIGhhcHBlbmluZyBpbiB0aGlzIHNlY3Rpb24uIEkgZXhwZWN0IHRvIHNlZSBzb21lIHJlZ2lzdGVyIGFjY2VzcyBvciBwZXJoYXBzIHNvbWUgcmVzb3VyY2UgYWxsb2NhdGlvbi4gVGhlIGRyaXZlciBpcyBsaWtlbHkgZGVhbGluZyB3aXRoIGl0cyBoYXJkd2FyZSYjMzk7cyBpbnRlcnJ1cHRzLCBhbmQgaXQgcHJvYmFibHkgaGFzIHNvbWUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIEkgc2hvdWxkIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIHRpbWluZyBjb25zaWRlcmF0aW9ucy4gR2l2ZW4gdGhlIHNlY3Rpb24gSSYjMzk7dmUgY2hvc2VuLCBJIGFtIGV4cGVjdGluZyBhbiBpbnRlcnBsYXkgb2YgbG93LWxldmVsIGhhcmR3YXJlIGludGVyYWN0aW9uIGFuZCBoaWdoZXItbGV2ZWwgYWJzdHJhY3Rpb24uIEkgd2lsbCBrZWVwIGFuIGV5ZSBvdXQgZm9yIGFueSB1bnVzdWFsIGRhdGEgc3RydWN0dXJlcyBvciBlcnJvciBoYW5kbGluZyByb3V0aW5lcyBpbiB0aGlzIHNlY3Rpb24uIEhvcGVmdWxseSwgSSB3aWxsIHNlZSBlbm91Z2ggY29kZSB0aGF0IEkgY2FuIHBpZWNlIHRvZ2V0aGVyIHRoZSBiYXNpY3Mgb2YgdGhpcyBtb2R1bGUmIzM5O3Mgb3BlcmF0aW9uLiBJIGFtIGdvaW5nIHRvIHNlZSBpZiBhbnkgY29kZSBjb21tZW50cyBjb3VsZCBoZWxwIG1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2MDpcdFxuICA2MTpcdHN0cnVjdCBtbTgxeCAqbW04MXhfY29yZV9hbGxvYyhzaXplX3QgcHJpdl9zaXplLCBzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gIDYyOlx0e1xuICA2MzpcdFx0cmV0dXJuIG1tODF4X21hY19hbGxvYyhwcml2X3NpemUsIGRldik7XG4gIDY0Olx0fVxuICA2NTpcdEVYUE9SVF9TWU1CT0xfR1BMKG1tODF4X2NvcmVfYWxsb2MpO1xuICA2NjpcdFxuICA2NzpcdGludCBtbTgxeF9jb3JlX2luaXQoc3RydWN0IG1tODF4ICptb3JzKVxuICA2ODpcdHtcbiAgNjk6XHRcdGludCByZXQ7XG4gIDcwOlx0XG4gIDcxOlx0XHRzZXRfYml0KE1NODFYX1NUQVRFX0NISVBfVU5SRVNQT05TSVZFLCBcdTAwMjZtb3JzLVx1MDAzZXN0YXRlX2ZsYWdzKTtcbiAgNzI6XHRcdHNldF9iaXQoTU04MVhfU1RBVEVfUkVMT0FEX0ZXX0FGVEVSX1NUQVJULCBcdTAwMjZtb3JzLVx1MDAzZXN0YXRlX2ZsYWdzKTtcbiAgNzM6XHRcbiAgNzQ6XHRcdG1tODF4X2NvcmVfaW5pdF9tYWNfYWRkcihtb3JzKTtcbiAgNzU6XHRcbiAgNzY6XHRcdHJldCA9IG1tODF4X2NvcmVfYXR0YWNoX3JlZ3MobW9ycyk7XG4gIDc3Olx0XHRpZiAocmV0KVxuICA3ODpcdFx0XHRyZXR1cm4gcmV0O1xuICA3OTpcdFxuICA4MDpcdFx0bW9ycy1cdTAwM2VjaGlwX3dxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoXCYjMzQ7Y2hpcF93cVwmIzM0Oyk7XG4gIDgxOlx0XHRpZiAoIW1vcnMtXHUwMDNlY2hpcF93cSlcbiAgODI6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gIDgzOlx0XG4gIDg0Olx0XHRtb3JzLVx1MDAzZW5ldF93cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKFwmIzM0O25ldF93cVwmIzM0Oyk7XG4gIDg1Olx0XHRpZiAoIW1vcnMtXHUwMDNlbmV0X3dxKSB7XG4gIDg2Olx0XHRcdHJldCA9IC1FTk9NRU07XG4gIDg3Olx0XHRcdGdvdG8gZXJyX2NoaXBfd3E7XG4gIDg4Olx0XHR9XG4gIDg5Olx0XG4gIDkwOlx0XHRyZXQgPSBtbTgxeF9oaWZfaW5pdChtb3JzKTtcbiAgOTE6XHRcdGlmIChyZXQpXG4gIDkyOlx0XHRcdGdvdG8gZXJyX3dxcztcbiAgOTM6XHRcbiAgOTQ6XHRcdHJldHVybiAwO1xuICA5NTpcdFxuICA5NjpcdGVycl93cXM6XG4gIDk3Olx0XHRmbHVzaF93b3JrcXVldWUobW9ycy1cdTAwM2VuZXRfd3EpO1xuICA5ODpcdFx0ZGVzdHJveV93b3JrcXVldWUobW9ycy1cdTAwM2VuZXRfd3EpO1xuICA5OTpcdFxuIDEwMDpcdGVycl9jaGlwX3dxOlxuIDEwMTpcdFx0Zmx1c2hfd29ya3F1ZXVlKG1vcnMtXHUwMDNlY2hpcF93cSk7XG4gMTAyOlx0XHRkZXN0cm95X3dvcmtxdWV1ZShtb3JzLVx1MDAzZWNoaXBfd3EpO1xuIDEwMzpcdFxuIDEwNDpcdFx0cmV0dXJuIHJldDtcbiAxMDU6XHR9XG4gMTA2Olx0RVhQT1JUX1NZTUJPTF9HUEwobW04MXhfY29yZV9pbml0KTtcbiAxMDc6XHRcbiAxMDg6XHRpbnQgbW04MXhfY29yZV9yZWdpc3RlcihzdHJ1Y3QgbW04MXggKm1vcnMpXG4gMTA5Olx0e1xuIDExMDpcdFx0cmV0dXJuIG1tODF4X21hY19yZWdpc3Rlcihtb3JzKTtcbiAxMTE6XHR9XG4gMTEyOlx0RVhQT1JUX1NZTUJPTF9HUEwobW04MXhfY29yZV9yZWdpc3Rlcik7XG4gMTEzOlx0XG4gMTE0Olx0dm9pZCBtbTgxeF9jb3JlX3VucmVnaXN0ZXIoc3RydWN0IG1tODF4ICptb3JzKVxuIDExNTpcdHtcbiAxMTY6XHRcdG1tODF4X21hY191bnJlZ2lzdGVyKG1vcnMpO1xuIDExNzpcdH1cbiAxMTg6XHRFWFBPUlRfU1lNQk9MX0dQTChtbTgxeF9jb3JlX3VucmVnaXN0ZXIpO1xuIDExOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQxMgoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgbW04MXggTUFDIFJlZ2lzdGVyIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGBtbTgxeF9tYWNfcmVnaXN0ZXJgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBtYWMuY2AgaW4gdGhlIGBtb3JzZW1pY3JvYCB3aXJlbGVzcyBkcml2ZXIgZGlyZWN0b3J5LiBNeSBmaXJzdCBzdGVwIGlzIG9idmlvdXNseSB0byBnbyBhbmQgZmluZCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuY2AgYW5kIHplcm8gaW4gb24gdGhlIGBtbTgxeF9tYWNfcmVnaXN0ZXJgIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBNQUMgbGF5ZXIuIEZyb20gdGhhdCBzcG90IEkmIzM5O2xsIGJlIGFibGUgdG8gZ3Jhc3AgaG93IHRoaXMgcmVnaXN0cmF0aW9uIHByb2Nlc3MgZml0cyBpbnRvIHRoZSBvdmVyYWxsIGRyaXZlciBhcmNoaXRlY3R1cmUsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUsIGFuZCBhbnkgYXNzb2NpYXRlZCBkYXRhIHN0cnVjdHVyZXMuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBjcnVjaWFsIGxpbmVzIGFuZCBhbnkgcG9pbnRzIG9mIHBvc3NpYmxlIGNvbnRlbnRpb24gb3IgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBtb2R1bGVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW04MXhfbWFjX3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYz0xMDg9aW50IG1tODF4X2NvcmVfcmVnaXN0ZXIoc3RydWN0IG1tODF4ICptb3JzKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtMTA5LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjExMDpcdHJldHVybiBtbTgxeF9tYWNfcmVnaXN0ZXIobW9ycyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0xMTEtfVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM9MjM2MD1zdGF0aWMgdm9pZCBtbTgxeF9tYWNfc3RhbGVfdHhfc3RhdHVzX3RpbWVyX2luaXQoc3RydWN0IG1tODF4ICptb3JzKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjM2NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjM2NjppbnQgbW04MXhfbWFjX3JlZ2lzdGVyKHN0cnVjdCBtbTgxeCAqbW9ycylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjM2Ny17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuaD01MT1zdHJ1Y3QgbW04MXggKm1tODF4X21hY19hbGxvYyhzaXplX3QgcHJpdl9zaXplLCBzdHJ1Y3QgZGV2aWNlICpkZXYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuaDo1MjppbnQgbW04MXhfbWFjX3JlZ2lzdGVyKHN0cnVjdCBtbTgxeCAqbW9ycyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5oLTUzLXZvaWQgbW04MXhfbWFjX2ZyZWUoc3RydWN0IG1tODF4ICptb3JzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxMjUKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBwcm92aWRlZCB0ZXh0OgoKKipEaXZpbmcgaW50byB0aGUgTUFDIFJlZ2lzdGVyIERlZmluaXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIE1BQyByZWdpc3RlciBkZWZpbml0aW9uLiBUaGUgY29kZSBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBtbTgxeF9tYWNfcmVnaXN0ZXJgLCBhbmQgdGhlIGZpbGUgaXMgYG1hYy5jYC4gT2theSwgc28gdGhhdCBtZWFucyBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgYXQgdGhlIGNvcmUgc3RydWN0dXJlIGRlZmluaXRpb24gZm9yIHRoZSBNQUMgaGFyZHdhcmUgcmVnaXN0ZXJzIHdpdGhpbiB0aGlzIHBhcnRpY3VsYXIgZHJpdmVyLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgZmllbGQgZGVmaW5pdGlvbnMsIGJpdCBwb3NpdGlvbnMsIGFuZCBkZXNjcmlwdGlvbnMgdGhhdCBkZXRhaWwgaG93IHRoZSBoYXJkd2FyZSBpcyBjb250cm9sbGVkIGFuZCBtb25pdG9yZWQuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrIGZvciB0aGUgZGV2aWNlJiMzOTtzIE1BQyBmdW5jdGlvbmFsaXR5LiBOb3csIGxldCYjMzk7cyBzZWUgaG93IHRoZXkmIzM5O3ZlIHN0cnVjdHVyZWQgaXTigKYgSSYjMzk7bSBlc3BlY2lhbGx5IGtlZW4gdG8gc2VlIGhvdyB0aGV5JiMzOTt2ZSBoYW5kbGVkIHBvdGVudGlhbCBiaXRmaWVsZHMgZm9yIHNwZWVkLCBvciBpZiB0aGV5JiMzOTt2ZSB1c2VkIHNvbWUgb3RoZXIgYXBwcm9hY2guIFRoaXMgaXMgZ29pbmcgdG8gYmUgZ29vZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjM2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMzY1Olx0XG4yMzY2Olx0aW50IG1tODF4X21hY19yZWdpc3RlcihzdHJ1Y3QgbW04MXggKm1vcnMpXG4yMzY3Olx0e1xuMjM2ODpcdFx0aW50IHJldDtcbjIzNjk6XHRcdHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gbW9ycy1cdTAwM2VodztcbjIzNzA6XHRcbjIzNzE6XHRcdG1vcnMtXHUwMDNldHhfcG93ZXJfbWJtID0gSU5UX01BWDtcbjIzNzI6XHRcdG1vcnMtXHUwMDNldHhfbWF4X3Bvd2VyX21ibSA9IElOVF9NQVg7XG4yMzczOlx0XHRtb3JzLVx1MDAzZXJ0c190aHJlc2hvbGQgPSBJRUVFODAyMTFfTUFYX1JUU19USFJFU0hPTEQ7XG4yMzc0Olx0XG4yMzc1Olx0XHRyZXQgPSBtbTgxeF9wc19pbml0KG1vcnMpO1xuMjM3NjpcdFx0aWYgKHJldClcbjIzNzc6XHRcdFx0cmV0dXJuIHJldDtcbjIzNzg6XHRcbjIzNzk6XHRcdG1tODF4X21hY19jb25maWdfaHcobW9ycyk7XG4yMzgwOlx0XHRtbTgxeF9tYWNfaHdfc2Nhbl9pbml0KG1vcnMpO1xuMjM4MTpcdFx0bW04MXhfbWFjX3N0YWxlX3R4X3N0YXR1c190aW1lcl9pbml0KG1vcnMpO1xuMjM4MjpcdFxuMjM4MzpcdFx0cmV0ID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KGh3KTtcbjIzODQ6XHRcdGlmIChyZXQpIHtcbjIzODU6XHRcdFx0ZGV2X2Vycihtb3JzLVx1MDAzZWRldiwgXCYjMzQ7aWVlZTgwMjExX3JlZ2lzdGVyX2h3IGZhaWxlZCAlZFwmIzM0OywgcmV0KTtcbjIzODY6XHRcdFx0bW04MXhfbWFjX3VucmVnaXN0ZXIobW9ycyk7XG4yMzg3Olx0XHRcdHJldHVybiByZXQ7XG4yMzg4Olx0XHR9XG4yMzg5Olx0XG4yMzkwOlx0XHRtbTgxeF9yY19pbml0KG1vcnMpO1xuMjM5MTpcdFxuMjM5MjpcdFx0LypcbjIzOTM6XHRcdCAqIEF0IHRoaXMgc3RhZ2UsIHdlIGtub3cgYnVzIGFuZCBwYWdlciBzeXN0ZW0gaW50ZXJydXB0cyBhcmUgZW5hYmxlZC5cbjIzOTQ6XHRcdCAqIFRyaWdnZXIgdGhlIHJlY2VpdmUgd29ya3F1ZXVlIHRvIGRyYWluIGFueSBpbmNvbWluZyBjaGlwLXRvLWhvc3RcbjIzOTU6XHRcdCAqIHBlbmRpbmcgcGFja2V0cyBiZWVuIHB1c2hlZCBpbiB0aGUgcGVyaW9kIGJldHdlZW4gdGhlIGZpcm13YXJlXG4yMzk2Olx0XHQgKiBpbml0aWFsaXphdGlvbiBhbmQgaW50ZXJydXB0cyBiZWluZyBlbmFibGVkLlxuMjM5NzpcdFx0ICovXG4yMzk4Olx0XHRzZXRfYml0KE1NODFYX0hJRl9FVlRfUlhfUEVORCwgXHUwMDI2bW9ycy1cdTAwM2VoaWYuZXZlbnRfZmxhZ3MpO1xuMjM5OTpcdFx0cXVldWVfd29yayhtb3JzLVx1MDAzZWNoaXBfd3EsIFx1MDAyNm1vcnMtXHUwMDNlaGlmX3dvcmspO1xuMjQwMDpcdFxuMjQwMTpcdFx0cmV0dXJuIHJldDtcbjI0MDI6XHR9XG4yNDAzOlx0XG4yNDA0Olx0dm9pZCBtbTgxeF9tYWNfdW5yZWdpc3RlcihzdHJ1Y3QgbW04MXggKm1vcnMpXG4yNDA1Olx0e1xuMjQwNjpcdFx0bW04MXhfcHNfZGlzYWJsZShtb3JzKTtcbjI0MDc6XHRcdG1tODF4X3JjX2RlaW5pdChtb3JzKTtcbjI0MDg6XHRcdG1tODF4X21hY19od19zY2FuX2Rlc3Ryb3kobW9ycyk7XG4yNDA5Olx0XG4yNDEwOlx0XHRpZWVlODAyMTFfc3RvcF9xdWV1ZXMobW9ycy1cdTAwM2Vodyk7XG4yNDExOlx0XHRpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhtb3JzLVx1MDAzZWh3KTtcbjI0MTI6XHRcbjI0MTM6XHRcdG1tODF4X2hpZl9mbHVzaF90eF9kYXRhKG1vcnMpO1xuMjQxNDpcdFx0bW04MXhfaGlmX2ZsdXNoX2NtZHMobW9ycyk7XG4yNDE1Olx0XHRtbTgxeF9zdGFsZV90eF9zdGF0dXNfdGltZXJfZmluaXNoKG1vcnMpO1xuMjQxNjpcdFx0bW04MXhfcHNfZmluaXNoKG1vcnMpO1xuMjQxNzpcdFxuMjQxODpcdFx0a2ZyZWUobW9ycy1cdTAwM2VtY2FzdF9maWx0ZXIpO1xuMjQxOTpcdH1cbjI0MjA6XHRcbjI0MjE6XHRzdHJ1Y3QgbW04MXggKm1tODF4X21hY19hbGxvYyhzaXplX3QgcHJpdl9zaXplLCBzdHJ1Y3QgZGV2aWNlICpkZXYpXG4yNDIyOlx0e1xuMjQyMzpcdFx0c3RydWN0IGllZWU4MDIxMV9odyAqaHc7XG4yNDI0Olx0XHRzdHJ1Y3QgbW04MXggKm1vcnM7XG4yNDI1Olx0XG4yNDI2Olx0XHRodyA9IGllZWU4MDIxMV9hbGxvY19odyhzaXplb2YoKm1vcnMpICYjNDM7IHByaXZfc2l6ZSwgXHUwMDI2bW04MXhfb3BzKTtcbjI0Mjc6XHRcdGlmICghaHcpIHtcbjI0Mjg6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O2llZWU4MDIxMV9hbGxvY19odyBmYWlsZWRcXHJcXG5cJiMzNDspO1xuMjQyOTpcdFx0XHRyZXR1cm4gTlVMTDtcbjI0MzA6XHRcdH1cbjI0MzE6XHRcbjI0MzI6XHRcdFNFVF9JRUVFODAyMTFfREVWKGh3LCBkZXYpO1xuMjQzMzpcdFx0bWVtc2V0KGh3LVx1MDAzZXByaXYsIDAsIHNpemVvZigqbW9ycykpO1xuMjQzNDpcdFxuMjQzNTpcdFx0bW9ycyA9IGh3LVx1MDAzZXByaXY7XG4yNDM2Olx0XHRtb3JzLVx1MDAzZWh3ID0gaHc7XG4yNDM3Olx0XHRtb3JzLVx1MDAzZWRldiA9IGRldjtcbjI0Mzg6XHRcdG11dGV4X2luaXQoXHUwMDI2bW9ycy1cdTAwM2VjbWRfbG9jayk7XG4yNDM5Olx0XHRtdXRleF9pbml0KFx1MDAyNm1vcnMtXHUwMDNlY21kX3dhaXQpO1xuMjQ0MDpcdFx0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZtb3JzLVx1MDAzZXR4X2VtcHR5X3dhaXRxKTtcbjI0NDE6XHRcbjI0NDI6XHRcdHJldHVybiBtb3JzO1xuMjQ0MzpcdH1cbjI0NDQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk2ODQKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZpcm13YXJlIENoYW5uZWwgQ2hlY2sqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgbW04MXhfbWFjX2NoZWNrX2Z3X2Rpc2FibGVkX2NoYW5zKG1vcnMtJmd0O2h3KWAgZnVuY3Rpb24uIFRoZSBjb2RlIHNheXMgaXQgZ2V0cyBjYWxsZWQgZHVyaW5nIGBtbTgxeF9tYWNfcmVzdGFydGAuIFRoYXQmIzM5O3MgdGhlIGtleTogd2hlbiBkb2VzIGBtbTgxeF9tYWNfcmVzdGFydGAgKml0c2VsZiogZ2V0IHRyaWdnZXJlZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy4gTGV0JiMzOTtzIHNlZS4uLiBhIHF1aWNrIHNjYW4gb2YgYG1hYy5jYCBhcm91bmQgbGluZXMgMjE3NSB0byAyMjg1IHNob3VsZCBnaXZlIG1lIHRoZSBhbnN3ZXIuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGNhbGwgc2l0ZXMgb2YgYG1tODF4X21hY19yZXN0YXJ0YCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoYXQgcmVnaW9uIG9mIHRoZSBmaWxlIHRvIHVuZGVyc3RhbmQgdGhlIGNpcmN1bXN0YW5jZXMgdW5kZXIgd2hpY2ggdGhlIGZpcm13YXJlIGNoYW5uZWwgY2hlY2sgcnVucy4gVGhpcyBzaG91bGQgdGVsbCBtZSB0aGUgY29udGV4dCBvZiB0aGlzIGZ1bmN0aW9uJiMzOTtzIG9wZXJhdGlvbiBhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxNzA6XHRleGl0OlxuMjE3MTpcdFx0bW04MXhfcHNfZW5hYmxlKG1vcnMpO1xuMjE3MjpcdFx0cmV0dXJuIHJldDtcbjIxNzM6XHR9XG4yMTc0Olx0XG4yMTc1Olx0c3RhdGljIGludCBtbTgxeF9tYWNfb3BzX2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4yMTc2Olx0XHRcdFx0XHQgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZilcbjIxNzc6XHR7XG4yMTc4Olx0XHRpbnQgcmV0ID0gMDtcbjIxNzk6XHRcdHN0cnVjdCBtbTgxeCAqbW9ycyA9IGh3LVx1MDAzZXByaXY7XG4yMTgwOlx0XHRzdHJ1Y3QgbW04MXhfdmlmICptb3JzX3ZpZiA9IChzdHJ1Y3QgbW04MXhfdmlmICopdmlmLVx1MDAzZWRydl9wcml2O1xuMjE4MTpcdFxuMjE4MjpcdFx0aWYgKHRlc3RfYml0KE1NODFYX1NUQVRFX1JFTE9BRF9GV19BRlRFUl9TVEFSVCwgXHUwMDI2bW9ycy1cdTAwM2VzdGF0ZV9mbGFncykpIHtcbjIxODM6XHRcdFx0ZGV2X2luZm8obW9ycy1cdTAwM2VkZXYsIFwmIzM0O1Jlc3RhcnRpbmcgY2hpcCB3aXRoIHJlZ2RvbTogJXNcJiMzNDssXG4yMTg0Olx0XHRcdFx0IG1vcnMtXHUwMDNlY291bnRyeSk7XG4yMTg1Olx0XG4yMTg2Olx0XHRcdHJldCA9IG1tODF4X21hY19yZXN0YXJ0KG1vcnMpO1xuMjE4NzpcdFx0XHRpZiAocmV0KSB7XG4yMTg4Olx0XHRcdFx0ZGV2X2Vycihtb3JzLVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvIHJlc3RhcnQgY2hpcFwmIzM0Oyk7XG4yMTg5Olx0XHRcdFx0cmV0dXJuIHJldDtcbjIxOTA6XHRcdFx0fVxuMjE5MTpcdFxuMjE5MjpcdFx0XHQvKlxuMjE5MzpcdFx0XHQgKiBtYWNfcmVzdGFydCB3aWxsIHRyaWdnZXIgaWVlZTgwMjExX2h3X3Jlc3RhcnQgYW5kXG4yMTk0Olx0XHRcdCAqIGFkZF9pbnRlcmZhY2Ugd2lsbCByZS1lbnRlci4ganVzdCBleGl0IGhlcmUgaW5zdGVhZC5cbjIxOTU6XHRcdFx0ICovXG4yMTk2Olx0XHRcdHJldHVybiAwO1xuMjE5NzpcdFx0fVxuMjE5ODpcdFxuMjE5OTpcdFx0dmlmLVx1MDAzZWRyaXZlcl9mbGFncyB8PSBJRUVFODAyMTFfVklGX0JFQUNPTl9GSUxURVI7XG4yMjAwOlx0XHRtb3JzX3ZpZi1cdTAwM2Vtb3JzID0gbW9ycztcbjIyMDE6XHRcbjIyMDI6XHRcdHJldCA9IG1tODF4X2NtZF9hZGRfaWYobW9ycywgXHUwMDI2bW9yc192aWYtXHUwMDNlaWQsIHZpZi1cdTAwM2VhZGRyLCB2aWYtXHUwMDNldHlwZSk7XG4yMjAzOlx0XHRpZiAocmV0KSB7XG4yMjA0Olx0XHRcdGRldl9lcnIobW9ycy1cdTAwM2VkZXYsIFwmIzM0O21tODF4X2NtZF9hZGRfaWYgZmFpbGVkICVkXCYjMzQ7LCByZXQpO1xuMjIwNTpcdFx0XHRyZXR1cm4gcmV0O1xuMjIwNjpcdFx0fVxuMjIwNzpcdFxuMjIwODpcdFx0aWYgKG1vcnNfdmlmLVx1MDAzZWlkIFx1MDAzZT0gQVJSQVlfU0laRShtb3JzLVx1MDAzZXZpZnMpKSB7XG4yMjA5Olx0XHRcdGRldl9lcnIobW9ycy1cdTAwM2VkZXYsIFwmIzM0O3ZpZl9pZCBpcyB0b28gbGFyZ2UgJXVcJiMzNDssIG1vcnNfdmlmLVx1MDAzZWlkKTtcbjIyMTA6XHRcdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4yMjExOlx0XHRcdHJldHVybiByZXQ7XG4yMjEyOlx0XHR9XG4yMjEzOlx0XG4yMjE0Olx0XHRpZiAobW9yc192aWYtXHUwMDNlaWQgIT0gKG1vcnNfdmlmLVx1MDAzZWlkIFx1MDAyNiBNTTgxWF9UWF9DT05GX0ZMQUdTX1ZJRl9JRF9NQVNLKSkge1xuMjIxNTpcdFx0XHRkZXZfZXJyKG1vcnMtXHUwMDNlZGV2LCBcJiMzNDtpbnZhbGlkIHZpZl9pZCAldVwmIzM0OywgbW9yc192aWYtXHUwMDNlaWQpO1xuMjIxNjpcdFx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbjIyMTc6XHRcdFx0cmV0dXJuIHJldDtcbjIyMTg6XHRcdH1cbjIyMTk6XHRcbjIyMjA6XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihtb3JzLVx1MDAzZXZpZnNbbW9yc192aWYtXHUwMDNlaWRdLCB2aWYpO1xuMjIyMTpcdFxuMjIyMjpcdFx0aWYgKHZpZi1cdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKVxuMjIyMzpcdFx0XHRtbTgxeF9tYWNfYmVhY29uX2luaXQobW9yc192aWYpO1xuMjIyNDpcdFxuMjIyNTpcdFx0cmV0ID0gbW04MXhfY21kX2dldF9jYXBhYmlsaXRpZXMobW9ycywgbW9yc192aWYtXHUwMDNlaWQsIFx1MDAyNm1vcnMtXHUwMDNlZndfY2Fwcyk7XG4yMjI2Olx0XHRpZiAocmV0KSB7XG4yMjI3Olx0XHRcdGRldl9lcnIobW9ycy1cdTAwM2VkZXYsXG4yMjI4Olx0XHRcdFx0XCYjMzQ7bW04MXhfY21kX2dldF9jYXBhYmlsaXRpZXMgZmFpbGVkIGZvciB2aWYgJWRcJiMzNDssXG4yMjI5Olx0XHRcdFx0bW9yc192aWYtXHUwMDNlaWQpO1xuMjIzMDpcdFx0XHRyZXR1cm4gcmV0O1xuMjIzMTpcdFx0fVxuMjIzMjpcdFxuMjIzMzpcdFx0aWVlZTgwMjExX3dha2VfcXVldWVzKG1vcnMtXHUwMDNlaHcpO1xuMjIzNDpcdFx0cmV0dXJuIHJldDtcbjIyMzU6XHR9XG4yMjM2Olx0XG4yMjM3Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIG1tODF4X29wcyA9IHtcbjIyMzg6XHRcdC5zdGFydCA9IG1tODF4X21hY19vcHNfc3RhcnQsXG4yMjM5Olx0XHQuc3RvcCA9IG1tODF4X21hY19vcHNfc3RvcCxcbjIyNDA6XHRcdC5jb25maWcgPSBtbTgxeF9tYWNfb3BzX2NvbmZpZyxcbjIyNDE6XHRcdC53YWtlX3R4X3F1ZXVlID0gaWVlZTgwMjExX2hhbmRsZV93YWtlX3R4X3F1ZXVlLFxuMjI0MjpcdFx0LnR4ID0gbW04MXhfbWFjX29wc190eCxcbjIyNDM6XHRcdC5hZGRfaW50ZXJmYWNlID0gbW04MXhfbWFjX29wc19hZGRfaW50ZXJmYWNlLFxuMjI0NDpcdFx0LnJlbW92ZV9pbnRlcmZhY2UgPSBtbTgxeF9tYWNfb3BzX3JlbW92ZV9pbnRlcmZhY2UsXG4yMjQ1Olx0XHQuY29uZmlndXJlX2ZpbHRlciA9IG1tODF4X21hY19vcHNfY29uZmlndXJlX2ZpbHRlcixcbjIyNDY6XHRcdC5zdGFfc3RhdGUgPSBtbTgxeF9tYWNfb3BzX3N0YV9zdGF0ZSxcbjIyNDc6XHRcdC5mbHVzaCA9IG1tODF4X21hY19vcHNfZmx1c2gsXG4yMjQ4Olx0XHQuc2V0X2ZyYWdfdGhyZXNob2xkID0gbW04MXhfbWFjX3NldF9mcmFnX3RocmVzaG9sZCxcbjIyNDk6XHRcdC5zZXRfcnRzX3RocmVzaG9sZCA9IG1tODF4X21hY19vcHNfc2V0X3J0c190aHJlc2hvbGQsXG4yMjUwOlx0XHQuc3RhX3N0YXRpc3RpY3MgPSBtbTgxeF9tYWNfb3BzX3N0YV9zdGF0aXN0aWNzLFxuMjI1MTpcdFx0LmdldF9leHBlY3RlZF90aHJvdWdocHV0ID0gbW04MXhfZ2V0X2V4cGVjdGVkX3Rocm91Z2hwdXQsXG4yMjUyOlx0XHQuaHdfc2NhbiA9IG1tODF4X21hY19vcHNfaHdfc2NhbixcbjIyNTM6XHRcdC5jYW5jZWxfaHdfc2NhbiA9IG1tODF4X21hY19vcHNfY2FuY2VsX2h3X3NjYW4sXG4yMjU0Olx0XHQuZ2V0X3R4cG93ZXIgPSBtbTgxeF9tYWNfb3BzX2dldF90eHBvd2VyLFxuMjI1NTpcdFx0LmJzc19pbmZvX2NoYW5nZWQgPSBtbTgxeF9tYWNfb3BzX2Jzc19pbmZvX2NoYW5nZWQsXG4yMjU2Olx0XHQucHJlcGFyZV9tdWx0aWNhc3QgPSBtbTgxeF9tYWNfb3BzX3ByZXBhcmVfbXVsdGljYXN0LFxuMjI1NzpcdFx0LmNvbmZfdHggPSBtbTgxeF9tYWNfb3BzX2NvbmZfdHgsXG4yMjU4Olx0XHQuYW1wZHVfYWN0aW9uID0gbW04MXhfbWFjX29wc19hbXBkdV9hY3Rpb24sXG4yMjU5Olx0XHQuc2V0X2tleSA9IG1tODF4X21hY19vcHNfc2V0X2tleSxcbjIyNjA6XHRcdC5hZGRfY2hhbmN0eCA9IGllZWU4MDIxMV9lbXVsYXRlX2FkZF9jaGFuY3R4LFxuMjI2MTpcdFx0LnJlbW92ZV9jaGFuY3R4ID0gaWVlZTgwMjExX2VtdWxhdGVfcmVtb3ZlX2NoYW5jdHgsXG4yMjYyOlx0XHQuY2hhbmdlX2NoYW5jdHggPSBpZWVlODAyMTFfZW11bGF0ZV9jaGFuZ2VfY2hhbmN0eCxcbjIyNjM6XHRcdC5zd2l0Y2hfdmlmX2NoYW5jdHggPSBpZWVlODAyMTFfZW11bGF0ZV9zd2l0Y2hfdmlmX2NoYW5jdHgsXG4yMjY0Olx0fTtcbjIyNjU6XHRcbjIyNjY6XHRzdGF0aWMgdm9pZCBtbTgxeF9yZWdfbm90aWZpZXIoc3RydWN0IHdpcGh5ICp3aXBoeSxcbjIyNjc6XHRcdFx0XHQgICAgICAgc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdClcbjIyNjg6XHR7XG4yMjY5Olx0XHRpbnQgcmV0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTg4OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBmb3IgU3l6a2FsbGVyIEZ1enppbmcgb2YgdGhlIG1tODF4IERyaXZlcioqCgpPa2F5LCBzbyBgbW04MXhfbWFjX2NoZWNrX2Z3X2Rpc2FibGVkX2NoYW5zYCBpcyB0aGUgZnVuY3Rpb24gb2YgaW50ZXJlc3QgaGVyZSwgdHJpZ2dlcmVkIHdoZW4gYW4gaW50ZXJmYWNlIGlzIGFkZGVkLCBvciB0aHJvdWdoIHJlZ2lzdGVyIG5vdGlmaWVycyBvciByZXN0YXJ0cy4gVGhpcyBpcyBmb3IgTW9yc2UgTWljcm8gTU04MXggd2lyZWxlc3MgZGV2aWNlcywgd2hpY2ggaXMgZ3JlYXQgYmVjYXVzZSBpdCBzdXBwb3J0cyBib3RoIFVTQiAoYENPTkZJR19NTTgxWF9VU0JgKSBhbmQgU0RJTyAoYENPTkZJR19NTTgxWF9TRElPYCkuIFRoZSBrZXkgcXVlc3Rpb24gaW4gbXkgbWluZCBpcywgY2FuIHRoaXMgYmUgZWZmZWN0aXZlbHkgZnV6emVkIHdpdGggc3l6a2FsbGVyPyBUaGUgYW5zd2VyIGlzIGxpa2VseSB5ZXMsIHNpbmNlIHN5emthbGxlciBpcyBrbm93biB0byBoYXZlIGV4Y2VsbGVudCBVU0IgZHJpdmVyIGZ1enppbmcgY2FwYWJpbGl0aWVzIHZpYSBkdW1teV9oY2QsIHJhdy1nYWRnZXQsIGFuZCBVU0IgZW11bGF0aW9uLgoKU2luY2Ugc3l6a2FsbGVyIGNhbiBkZWZpbml0ZWx5IGZ1enogVVNCIGRyaXZlcnMsIHRoZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB3aGF0IGhhcHBlbnMgd2hlbiBhIFVTQiBkZXZpY2Ugd2l0aCBWSUQgMHgzMjViIChNTTgxWF9WRU5ET1JfSUQpIGlzIGNvbm5lY3RlZC4gVGhpcyB0cmlnZ2VycyBgbW04MXhfdXNiX3Byb2JlYC4gTm93LCBkb2VzIGBtbTgxeF91c2JfcHJvYmVgIHJlcXVpcmUgZmlybXdhcmUgb3IgZG9lcyBpdCBkaXJlY3RseSBjb21tdW5pY2F0ZSB3aXRoIHRoZSBVU0IgZGV2aWNlPyBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBjb2RlLCBzcGVjaWZpY2FsbHkgY2hlY2tpbmcgYG1tODF4X2NvcmVfYXR0YWNoX3JlZ3NgLCBmaXJtd2FyZSBsb2FkaW5nLCBhbmQgcmVsYXRlZCBmaWxlcy4gTGV0IG1lIHN0YXJ0IGxvb2tpbmcgYXQgYGZ3LmNgLCBgaHcuY2AsIGFuZCBgY29yZS5jYCB0byB1bmRlcnN0YW5kIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGFuZCBpZGVudGlmeSBwb3RlbnRpYWwgZnV6emluZyBlbnRyeSBwb2ludHMuIFRoaXMgY291bGQgYmUgcHJvbWlzaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZXF1ZXN0X2Zpcm13YXJlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmM9NjkxPWludCBtbTgxeF9md19pbml0KHN0cnVjdCBtbTgxeCAqbW9ycywgYm9vbCByZXNldClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmMtNzIyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jOjcyMzpcdHJldCA9IHJlcXVlc3RfZmlybXdhcmUoXHUwMDI2YmNmLCBiY2ZfcGF0aCwgbW9ycy1cdTAwM2VkZXYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTcyNC1cdGlmIChyZXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI2MzIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA4NTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgZm9yIE91dC1vZi1Cb3VuZHMgQWNjZXNzIGluIG1tODF4IEZpcm13YXJlIERpc2FibGVkIENoYW5uZWxzIENoZWNrKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgYG1tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFuc2AgZnVuY3Rpb24gYW5kIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2Ugd2UgaGF2ZSBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IGhlcmU6IGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGluIGhvdyB0aGUgZnVuY3Rpb24gaGFuZGxlcyB0aGUgbnVtYmVyIG9mIGRpc2FibGVkIGNoYW5uZWxzIHJlcG9ydGVkIGJ5IHRoZSBkZXZpY2UgZmlybXdhcmUuCgpUaGUgY29kZSBhbGxvY2F0ZXMgYSBidWZmZXIsIGByZXNwYCwgdG8gcmVjZWl2ZSB0aGUgZGlzYWJsZWQgY2hhbm5lbCBpbmZvcm1hdGlvbi4gVGhlIHNpemUgb2YgdGhpcyBidWZmZXIgaXMgYmFzZWQgb24gdGhlIGtub3duIHNpemUgb2YgYG1vcnNfczFnaHpfY2hhbm5lbHNgICh3aGljaCBsb29rcyBsaWtlIGFuIGFycmF5IG9mIGBpZWVlODAyMTFfY2hhbm5lbGAgc3RydWN0dXJlcykgYW5kIHNvbWUgaGVhZGVyIGluZm9ybWF0aW9uLiBUaGVuLCBpdCBjYWxscyBgbW04MXhfY21kX2dldF9kaXNhYmxlZF9jaGFubmVsc2AgdG8gcG9wdWxhdGUgYHJlc3BgLgoKVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhlIHNlY29uZCBsb29wLiBJdCBpdGVyYXRlcyB0aHJvdWdoIHRoZSBgcmVzcC0mZ3Q7Y2hhbm5lbHNgIGFycmF5LCB0aGUgc2l6ZSBvZiB3aGljaCBpcyBkZXRlcm1pbmVkIGJ5IGByZXNwLSZndDtuX2NoYW5uZWxzYCwgYSB2YWx1ZSB0aGF0IGNvbWVzIGRpcmVjdGx5IGZyb20gdGhlIGRldmljZSBmaXJtd2FyZS4gVGhlIHBhdGNoIGluY2x1ZGVzIGEgY3J1Y2lhbCBjaGVjazogaXQgdmVyaWZpZXMgdGhhdCBgcmVzcC0mZ3Q7bl9jaGFubmVsc2AgZG9lc24mIzM5O3QgZXhjZWVkIHRoZSBrbm93biBhcnJheSBzaXplIG9mIGBtb3JzX3MxZ2h6X2NoYW5uZWxzYC4gKlRoYXQmIzM5O3MqIHRoZSBmaXguIFdpdGhvdXQgdGhpcyBjaGVjaywgdGhlIGxvb3AgY291bGQgcmVhZCBiZXlvbmQgdGhlIGFsbG9jYXRlZCBidWZmZXIsIGxlYWRpbmcgdG8gYSBjcmFzaCBvciwgd29yc2UsIGFyYml0cmFyeSBtZW1vcnkgZGlzY2xvc3VyZSBvciBjb3JydXB0aW9uLgoKVGhlIHZ1bG5lcmFiaWxpdHkgc3RlbXMgZnJvbSB0aGUgZmFjdCB0aGF0IGZpcm13YXJlIGRhdGEgaXMgYmVpbmcgdHJ1c3RlZCB3aXRob3V0IGEgc2FuaXR5IGNoZWNrLiBJZiB0aGUgZmlybXdhcmUgcmV0dXJucyBhIHZhbHVlIGZvciBgbl9jaGFubmVsc2AgdGhhdCYjMzk7cyBsYXJnZXIgdGhhbiB3aGF0IHRoZSBkcml2ZXIgZXhwZWN0cywgd2UgaGF2ZSBhIHByb2JsZW0uCgpOb3csIGxldCYjMzk7cyB0aGluayBhYm91dCByZWFjaGFiaWxpdHkuIElzIHRoaXMgc29tZXRoaW5nIHRoYXQgY2FuIGJlIHByYWN0aWNhbGx5IGV4cGxvaXRlZD8gVGhpcyBpc24mIzM5O3QganVzdCBhIHRoZW9yZXRpY2FsIGlzc3VlLiBXZSBuZWVkIHRvIGNvbnNpZGVyIGhvdyBhY2Nlc3NpYmxlIHRoaXMgY29kZSBwYXRoIGlzLgoKVGhlIGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBpc24mIzM5O3Qgc29tZXRoaW5nIHRoYXQmIzM5O3MgYXV0b21hdGljYWxseSBub24tcmVhY2hhYmxlIG9yIHVuZXhlY3V0YWJsZS4gSG93ZXZlciwgdGhlIE1NODFYIGRyaXZlciAqZG9lcyogc3VwcG9ydCBVU0IgKGBDT05GSUdfTU04MVhfVVNCYCkuIFRoaXMgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGlzIG1lYW5zIGl0IGNhbiBwb3RlbnRpYWxseSBiZSBlbXVsYXRlZCB2aWEgVVNCIGdhZGdldCAoUmF3IEdhZGdldCAvIER1bW15IEhDRCkgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkuCgpBIGxpdHRsZSBtb3JlIGRpZ2dpbmcgcmV2ZWFscyB0aGF0IHllcywgVVNCIGRyaXZlcnMgKmFyZSogY29uc2lkZXJlZCByZWFjaGFibGUsIGFjY29yZGluZyB0byB0aGUgY3JpdGVyaWEgZGVmaW5lZC4gVmlydHVhbCBidXNlcyBsaWtlIFVTQiBnYWRnZXQgYXJlIGV4cGxpY2l0bHkgbGlzdGVkIGFzIGFuIGVudHJ5LgoKU28sIHRoaXMgbG9va3MgbGlrZSBhICpwb3RlbnRpYWxseSBleHBsb2l0YWJsZSogdnVsbmVyYWJpbGl0eSwgYXNzdW1pbmcgd2UgY2FuIGNvbnRyb2wgdGhlIGZpcm13YXJlJiMzOTtzIHJlc3BvbnNlIGFuZCBnZXQgaXQgdG8gcmV0dXJuIGEgbWFsZm9ybWVkIGBuX2NoYW5uZWxzYCB2YWx1ZS4gVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIHdlIGNhbiBjb250cm9sIHRoYXQgcmV0dXJuIHZhbHVlLgoKVGhlcmVmb3JlLCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL0tjb25maWdgIGFuZCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9LY29uZmlnYCB0byBzZWUgd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIG5lZWRlZCBmb3IgVVNCIHN1cHBvcnQgdG8gY29uZmlybSB0aGlzIHJlYWNoYWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgV0xBTl9WRU5ET1JfTU9SU0VNSUNST1xuICAgMzpcdFx0Ym9vbCBcJiMzNDtNb3JzZSBNaWNybyBkZXZpY2VzXCYjMzQ7XG4gICA0Olx0XHRkZWZhdWx0IHlcbiAgIDU6XHRcdGhlbHBcbiAgIDY6XHRcdCAgSWYgeW91IGhhdmUgYSB3aXJlbGVzcyBjYXJkIGJlbG9uZ2luZyB0byB0aGlzIGNsYXNzLCBzYXkgWS5cbiAgIDc6XHRcbiAgIDg6XHRcdCAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2VzbiYjMzk7dCBkaXJlY3RseSBhZmZlY3QgdGhlXG4gICA5Olx0XHQgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGwgdGhlXG4gIDEwOlx0XHQgIHF1ZXN0aW9ucyBhYm91dCB0aGVzZSBjYXJkcy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbCBiZSBhc2tlZCBmb3JcbiAgMTE6XHRcdCAgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxuICAxMjpcdFxuICAxMzpcdGlmIFdMQU5fVkVORE9SX01PUlNFTUlDUk9cbiAgMTQ6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9LY29uZmlnXCYjMzQ7XG4gIDE1Olx0ZW5kaWYgIyBXTEFOX1ZFTkRPUl9NT1JTRU1JQ1JPXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MzcxCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgTU04MXggV2lyZWxlc3MgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGlzIE1vcnNlIE1pY3JvIE1NODF4IHdpcmVsZXNzIGRyaXZlci4gRmlyc3QsIEkmIzM5O20gY2hlY2tpbmcgdGhlIGBLY29uZmlnYCBmaWxlIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2AuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSB0aGUgbWFpbiBgTU04MVhgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJdCYjMzk7cyBhIHRyaXN0YXRlIG9wdGlvbiwgYnV0IGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgaWYgYENPTVBJTEVfVEVTVGAgaXMgZGVmaW5lZC4gTWFrZXMgc2Vuc2Ug4oCTIHByb2JhYmx5IGZvciB0ZXN0IGJ1aWxkcy4gSXQgZGVwZW5kcyBvbiBgTUFDODAyMTFgLCBhcyBleHBlY3RlZCBmb3IgYSB3aXJlbGVzcyBkcml2ZXIsIGFuZCBpdCBzZWxlY3RzIGBGV19MT0FERVJgIGFuZCBgQ1JDN2AsIGluZGljYXRpbmcgaXQgcmVsaWVzIG9uIGZpcm13YXJlIGxvYWRpbmcgYW5kIGxpa2VseSB1c2VzIENSQzcgZm9yIGVycm9yIGRldGVjdGlvbi4gVGhlIGhlbHAgdGV4dCBjb25maXJtcyB0aGF0IHRoaXMgaXMgdGhlIGJhc2UgbW9kdWxlIGZvciBNTTgxeHggY2hpcHNldCBzdXBwb3J0LgoKVGhlbiwgdGhlcmUgYXJlIGBNTTgxWF9VU0JgIGFuZCBgTU04MVhfU0RJT2Agb3B0aW9ucy4gVGhleSYjMzk7cmUgYWxzbyB0cmlzdGF0ZSwgbWVhbmluZyB0aGV5IGNhbiBiZSBidWlsdCBhcyBhIG1vZHVsZSBvciBidWlsdCBpbi4gQm90aCBkZXBlbmQgb24gYE1BQzgwMjExYCBhbmQgc3BlY2lmaWMgaW50ZXJmYWNlIGRlcGVuZGVuY2llczogYFVTQmAgZm9yIHRoZSBVU0IgaW50ZXJmYWNlIGFuZCBgTU1DYCBmb3IgdGhlIFNESU8gaW50ZXJmYWNlLCByZXNwZWN0aXZlbHkuIFRoZXkgYm90aCBzZWxlY3QgYE1NODFYYCwgbWVhbmluZyB0aGUgYmFzZSBkcml2ZXIgaXMgcmVxdWlyZWQgZm9yIGVpdGhlciBpbnRlcmZhY2UuIFRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgc2V0dXAuCgpOb3csIEkmIzM5O2xsIHF1aWNrbHkgZ2xhbmNlIGF0IHRoZSBgTWFrZWZpbGVgIGluIHRoZSBzYW1lIGRpcmVjdG9yeSB0byBjb25maXJtIHdoaWNoIG9iamVjdCBmaWxlcyBhcmUgYWN0dWFsbHkgYnVpbHQgYmFzZWQgb24gdGhlc2UgY29uZmlndXJhdGlvbnMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBkcml2ZXIgaXMgc3RydWN0dXJlZCBhbmQgd2hhdCB0aGUgcmVzdWx0aW5nIGJpbmFyaWVzIHdpbGwgbG9vayBsaWtlLiBOZWVkIHRvIGVuc3VyZSB0aGUgYnVpbGQgZW52aXJvbm1lbnQgc3VwcG9ydHMgdGhpcyBhcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0XG4gICAzOlx0b2JqLSQoQ09ORklHX01NODFYKSAmIzQzOz0gbW04MXhfY29yZS5vXG4gICA0Olx0XG4gICA1Olx0bW04MXhfY29yZS15ICYjNDM7PSBjb3JlLm9cbiAgIDY6XHRtbTgxeF9jb3JlLXkgJiM0Mzs9IG1hYy5vXG4gICA3Olx0bW04MXhfY29yZS15ICYjNDM7PSBody5vXG4gICA4Olx0bW04MXhfY29yZS15ICYjNDM7PSBmdy5vXG4gICA5Olx0bW04MXhfY29yZS15ICYjNDM7PSBjb21tYW5kLm9cbiAgMTA6XHRtbTgxeF9jb3JlLXkgJiM0Mzs9IHBzLm9cbiAgMTE6XHRtbTgxeF9jb3JlLXkgJiM0Mzs9IHNrYnEub1xuICAxMjpcdG1tODF4X2NvcmUteSAmIzQzOz0geWFwc19ody5vXG4gIDEzOlx0bW04MXhfY29yZS15ICYjNDM7PSB5YXBzLm9cbiAgMTQ6XHRtbTgxeF9jb3JlLXkgJiM0Mzs9IHJjLm9cbiAgMTU6XHRtbTgxeF9jb3JlLXkgJiM0Mzs9IG1tcmMub1xuICAxNjpcdFxuICAxNzpcdG9iai0kKENPTkZJR19NTTgxWF9VU0IpICYjNDM7PSBtbTgxeF91c2Iub1xuICAxODpcdG1tODF4X3VzYi15ICYjNDM7PSB1c2Iub1xuICAxOTpcdFxuICAyMDpcdG9iai0kKENPTkZJR19NTTgxWF9TRElPKSAmIzQzOz0gbW04MXhfc2Rpby5vXG4gIDIxOlx0bW04MXhfc2Rpby15ICYjNDM7PSBzZGlvLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU0MDkKCQkJCQkJCW91dHB1dDogMjE0CgkJCQkJCQl0aG91Z2h0czogNjc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBNTTgxeCBXaXJlbGVzcyBEcml2ZXIgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSBzZWUgdGhhdCB0aGUgYG1hYy5vYCBvYmplY3QgZmlsZSBpcyBwYXJ0IG9mIGBtbTgxeF9jb3JlLm9gLCB3aGljaCBpcyBvbmx5IGNvbXBpbGVkIGlmIGBDT05GSUdfTU04MVhgIGlzIGVuYWJsZWQuIFRoYXQgaW4gdHVybiwgaXMgc2VsZWN0ZWQgYnkgYENPTkZJR19NTTgxWF9VU0JgLiBJJiMzOTttIGFsc28gbm90aW5nIHRoZSBkZXBlbmRlbmNpZXMgaGVyZTogYENPTkZJR19NTTgxWF9VU0JgIHJlcXVpcmVzIGBNQUM4MDIxMWAsIGBVU0JgLCBhbmQgYFdMQU5fVkVORE9SX01PUlNFTUlDUk9gLiBHb29kLgoKVGhlIGNyaXRpY2FsIGZ1bmN0aW9uIGJlaW5nIG1vZGlmaWVkIGFwcGVhcnMgdG8gYmUgYG1tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFuc2AuICBJdCYjMzk7cyBzdGF0aWMsIHNvIGlubGluaW5nIGlzIGEgcG9zc2liaWxpdHksIG9yIGl0IG1heSBvbmx5IGJlIGNhbGxlZCBpbnRlcm5hbGx5LiBPa2F5LCBsZXQmIzM5O3Mgc2VlIGhvdyBpdCYjMzk7cyB1c2VkLiBSaWdodCwgYG1tODF4X21hY19yZXN0YXJ0YCBjYWxscyBpdC4gQW5kIGxvb2tpbmcgZnVydGhlciB1cCB0aGUgY2FsbCBjaGFpbiwgYG1tODF4X21hY19vcHNfYWRkX2ludGVyZmFjZWAgYW5kIGBtbTgxeF9yZWdfbm90aWZpZXJgIGNhbGwgYG1tODF4X21hY19yZXN0YXJ0YC4gVGhlIFVTQiBwcm9iZSBmdW5jdGlvbiwgYG1tODF4X3VzYl9wcm9iZWAsIHdoaWNoIGlzIGluIGB1c2IuY2AsIGlzIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgcmVnaXN0cmF0aW9uIHBvaW50LgoKVG8gcmVjYXAsIGFuZCBmb3IgZnV6emluZywgSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aG9zZSBlbnRyeSBwb2ludHM6IGBtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnNgLCBgbW04MXhfbWFjX3Jlc3RhcnRgLCBgbW04MXhfbWFjX29wc19hZGRfaW50ZXJmYWNlYCwgYW5kIGBtbTgxeF9yZWdfbm90aWZpZXJgLgoKTm93LCB0aGUgY29uZmlndXJhdGlvbiBhc3BlY3RzLiBUbyBlbmFibGUgdGhpcyBjb2RlIHBhdGggYW5kIGZ1enogaXQsIEkmIzM5O2xsIG5lZWQgdG8gc2V0IHRoZXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9uczogYFdMQU5fVkVORE9SX01PUlNFTUlDUk9gLCBgTU04MVhgLCBgTU04MVhfVVNCYCwgYE1BQzgwMjExYCwgYW5kIGBVU0JgLgoKQWxyaWdodCwgSSBoYXZlIGEgY2xlYXIgcGljdHVyZS4gVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgd2l0aGluIGBtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnMoKWAgdG8gaGFuZGxlIGNhc2VzIHdoZXJlIHRoZSBmaXJtd2FyZSByZXR1cm5zIG1vcmUgY2hhbm5lbHMgdGhhbiB0aGUgZHJpdmVyIGhhcyBhbGxvY2F0ZWQgc3BhY2UgZm9yLiBUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGVzcGVjaWFsbHkgc2luY2UgdGhlIGRyaXZlciBzdXBwb3J0cyBVU0IgZGV2aWNlcywgd2hpY2ggYXJlIHJlYWRpbHkgZW11bGF0YWJsZS4KCkJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgdGhlIHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtXTEFOX1ZFTkRPUl9NT1JTRU1JQ1JPJiMzNDssCiAgICAmIzM0O01NODFYJiMzNDssCiAgICAmIzM0O01NODFYX1VTQiYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnMmIzM0OywKICAgICYjMzQ7bW04MXhfbWFjX3Jlc3RhcnQmIzM0OywKICAgICYjMzQ7bW04MXhfbWFjX29wc19hZGRfaW50ZXJmYWNlJiMzNDssCiAgICAmIzM0O21tODF4X3JlZ19ub3RpZmllciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYm91bmRzIGNoZWNrIG9uIGZpcm13YXJlIHJlc3BvbnNlcyBpbiBtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnMoKSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgd2hlbiBuX2NoYW5uZWxzIGV4Y2VlZHMgdGhlIHNpemUgb2YgbW9yc19zMWdoel9jaGFubmVscy4gVGhlIE1NODF4IHdpcmVsZXNzIGRyaXZlciBzdXBwb3J0cyBVU0IgaW50ZXJmYWNlcyAoTU04MVhfVVNCKSB3aGljaCBjYW4gYmUgcHJvYmVkIGFuZCBmdXp6ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZW11bGF0aW9uL2dhZGdldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1dMQU5fVkVORE9SX01PUlNFTUlDUk8mIzM0OywKICAgICYjMzQ7TU04MVgmIzM0OywKICAgICYjMzQ7TU04MVhfVVNCJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFucyYjMzQ7LAogICAgJiMzNDttbTgxeF9tYWNfcmVzdGFydCYjMzQ7LAogICAgJiMzNDttbTgxeF9tYWNfb3BzX2FkZF9pbnRlcmZhY2UmIzM0OywKICAgICYjMzQ7bW04MXhfcmVnX25vdGlmaWVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBib3VuZHMgY2hlY2sgb24gZmlybXdhcmUgcmVzcG9uc2VzIGluIG1tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFucygpIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyB3aGVuIG5fY2hhbm5lbHMgZXhjZWVkcyB0aGUgc2l6ZSBvZiBtb3JzX3MxZ2h6X2NoYW5uZWxzLiBUaGUgTU04MXggd2lyZWxlc3MgZHJpdmVyIHN1cHBvcnRzIFVTQiBpbnRlcmZhY2VzIChNTTgxWF9VU0IpIHdoaWNoIGNhbiBiZSBwcm9iZWQgYW5kIGZ1enplZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBlbXVsYXRpb24vZ2FkZ2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgb24gYHJlc3AtXHUwMDNlbl9jaGFubmVsc2AgYWdhaW5zdCBgQVJSQVlfU0laRShtb3JzX3MxZ2h6X2NoYW5uZWxzKWAgdG8gcHJldmVudCBoZWFwIG91dC1vZi1ib3VuZHMgcmVhZHMgd2hlbiBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgYHJlc3AtXHUwMDNlY2hhbm5lbHNgIGFycmF5IGluIGBtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnMoKWAuXG5cbkhlYXAgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgYXJlIHN0YW5kYXJkIHNwYXRpYWwgbWVtb3J5IHNhZmV0eSB2aW9sYXRpb25zIGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcmVzcG9uc2UgYnVmZmVyIGByZXNwYCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvYygpYCwgYW5kIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBhY2Nlc3Nlcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MgaW50cm9kdWNlZCBvciBtb2RpZmllZCBieSB0aGlzIGNoYW5nZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjdkMTU3YzA4ZTdhYmM5MmFlMDE4ZDZlNjRhZjI5YTUyMzhiMDgzZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMDc6MjM6NDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYwppbmRleCAwOGNhMTE2YTY4YjQ3Li5lOGVmMGQ5ZWViZDc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMKQEAgLTI4OCw2ICYjNDM7Mjg4LDExIEBAIHN0YXRpYyB2b2lkIG1tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFucyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIAkJY2gtJmd0O2ZsYWdzICZhbXA7PSB+SUVFRTgwMjExX0NIQU5fUzFHX05PX1BSSU1BUlk7CiAJfQogCiYjNDM7CWlmIChsZTMyX3RvX2NwdShyZXNwLSZndDtuX2NoYW5uZWxzKSAmZ3Q7IEFSUkFZX1NJWkUobW9yc19zMWdoel9jaGFubmVscykpIHsKJiM0MzsJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwogCWZvciAoaSA9IDA7IGkgJmx0OyBsZTMyX3RvX2NwdShyZXNwLSZndDtuX2NoYW5uZWxzKTsgaSYjNDM7JiM0MzspIHsKIAkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaDsKIAkJc3RydWN0IGhvc3RfY21kX2Rpc2FibGVkX2NoYW5uZWxfZW50cnkgKmVudHJ5ID0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxODgKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiA4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1vcnNlIE1pY3JvIE1BQyBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gdGhlIHVzZXIgd2FudHMgbWUgdG8gZGl2ZSBpbnRvIGEgcGF0Y2ggYWZmZWN0aW5nIHRoZSBgbW04MXhgIE1BQyBsYXllciB3aXRoaW4gdGhlIE1vcnNlIE1pY3JvIHdpcmVsZXNzIGRyaXZlciwgc3BlY2lmaWNhbGx5IGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvLCBvZiBjb3Vyc2UsIGFwcHJvYWNoIHRoaXMgbWV0aG9kaWNhbGx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlIGluIGNvbnRleHQuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgcmVhZGluZyB0aGUgcGF0Y2ggaXRzZWxmIGFuZCBtYWtpbmcgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIG1vZGlmaWNhdGlvbnMsIGFuZCB0aGVuIEkmIzM5O2xsIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcuCgpGaXJzdCBJIG5lZWQgdG8gZ3JhYiB0aGUgc291cmNlIGZvciBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuY2AuIEkgd2lsbCB1c2UgdGhlIHRvb2wgJiMzOTtyZWFkLWZpbGUmIzM5OyB0byBwdWxsIHRoZSBjb2RlIGFyb3VuZCBsaW5lIDI4OC4gVGhlbiBJIGNhbiBmaWd1cmUgb3V0IHdoZXJlIHRoZSBlZGl0IGxpdmVzLiBPbmNlIEkgY2FuIHNlZSB0aGF0LCBJIHdpbGwgdW5kZXJzdGFuZCB3aGF0IGlzIGJlaW5nIGNoYW5nZWQgYW5kIHdoeS4gVGhhdCYjMzk7cyB0aGUgZmlyc3Qgc3RlcC4gTGV0JiMzOTtzIGdldCB0byB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI2MDpcdH1cbiAyNjE6XHRcbiAyNjI6XHRzdGF0aWMgdm9pZCBtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpXG4gMjYzOlx0e1xuIDI2NDpcdFx0aW50IHJldCA9IDA7XG4gMjY1Olx0XHR1MzIgaTtcbiAyNjY6XHRcdHN0cnVjdCBtbTgxeCAqbW9ycyA9IGh3LVx1MDAzZXByaXY7XG4gMjY3Olx0XHRzdHJ1Y3QgaG9zdF9jbWRfcmVzcF9nZXRfZGlzYWJsZWRfY2hhbm5lbHMgKnJlc3A7XG4gMjY4Olx0XHR1MzIgcmVzcF9sZW4gPSBzaXplb2Yoc3RydWN0IGhvc3RfY21kX2Rpc2FibGVkX2NoYW5uZWxfZW50cnkpICpcbiAyNjk6XHRcdFx0XHQgICAgICAgQVJSQVlfU0laRShtb3JzX3MxZ2h6X2NoYW5uZWxzKSAmIzQzO1xuIDI3MDpcdFx0XHQgICAgICAgc2l6ZW9mKCpyZXNwKTtcbiAyNzE6XHRcbiAyNzI6XHRcdHJlc3AgPSBremFsbG9jKHJlc3BfbGVuLCBHRlBfS0VSTkVMKTtcbiAyNzM6XHRcdGlmICghcmVzcCkge1xuIDI3NDpcdFx0XHRyZXQgPSAtRU5PTUVNO1xuIDI3NTpcdFx0XHRnb3RvIG91dDtcbiAyNzY6XHRcdH1cbiAyNzc6XHRcbiAyNzg6XHRcdHJldCA9IG1tODF4X2NtZF9nZXRfZGlzYWJsZWRfY2hhbm5lbHMobW9ycywgcmVzcCwgcmVzcF9sZW4pO1xuIDI3OTpcdFx0aWYgKHJldClcbiAyODA6XHRcdFx0Z290byBvdXQ7XG4gMjgxOlx0XG4gMjgyOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKG1vcnNfczFnaHpfY2hhbm5lbHMpOyBpJiM0MzsmIzQzOykge1xuIDI4MzpcdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoID0gXHUwMDI2bW9yc19zMWdoel9jaGFubmVsc1tpXTtcbiAyODQ6XHRcbiAyODU6XHRcdFx0aWYgKGNoLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRClcbiAyODY6XHRcdFx0XHRjb250aW51ZTtcbiAyODc6XHRcbiAyODg6XHRcdFx0Y2gtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+SUVFRTgwMjExX0NIQU5fUzFHX05PX1BSSU1BUlk7XG4gMjg5Olx0XHR9XG4gMjkwOlx0XG4gMjkxOlx0XHRpZiAobGUzMl90b19jcHUocmVzcC1cdTAwM2VuX2NoYW5uZWxzKSBcdTAwM2UgQVJSQVlfU0laRShtb3JzX3MxZ2h6X2NoYW5uZWxzKSkge1xuIDI5MjpcdFx0XHRyZXQgPSAtRUlOVkFMO1xuIDI5MzpcdFx0XHRnb3RvIG91dDtcbiAyOTQ6XHRcdH1cbiAyOTU6XHRcbiAyOTY6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxlMzJfdG9fY3B1KHJlc3AtXHUwMDNlbl9jaGFubmVscyk7IGkmIzQzOyYjNDM7KSB7XG4gMjk3Olx0XHRcdHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2g7XG4gMjk4Olx0XHRcdHN0cnVjdCBob3N0X2NtZF9kaXNhYmxlZF9jaGFubmVsX2VudHJ5ICplbnRyeSA9XG4gMjk5Olx0XHRcdFx0XHUwMDI2cmVzcC1cdTAwM2VjaGFubmVsc1tpXTtcbiAzMDA6XHRcbiAzMDE6XHRcdFx0aWYgKGVudHJ5LVx1MDAzZWJ3X21oeiAhPSAxKVxuIDMwMjpcdFx0XHRcdGNvbnRpbnVlO1xuIDMwMzpcdFxuIDMwNDpcdFx0XHRjaCA9IGllZWU4MDIxMV9nZXRfY2hhbm5lbF9raHooXG4gMzA1Olx0XHRcdFx0aHctXHUwMDNld2lwaHksXG4gMzA2Olx0XHRcdFx0S0haMTAwX1RPX0tIWihsZTE2X3RvX2NwdShlbnRyeS1cdTAwM2VmcmVxXzEwMGtoeikpKTtcbiAzMDc6XHRcdFx0aWYgKCFjaClcbiAzMDg6XHRcdFx0XHRjb250aW51ZTtcbiAzMDk6XHRcbiAzMTA6XHRcdFx0Y2gtXHUwMDNlZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fUzFHX05PX1BSSU1BUlk7XG4gMzExOlx0XHRcdGRldl9kYmcobW9ycy1cdTAwM2VkZXYsIFwmIzM0O3NldCBOT19QUklNQVJZIG9uICV1IEtIelwmIzM0OyxcbiAzMTI6XHRcdFx0XHRpZWVlODAyMTFfY2hhbm5lbF90b19raHooY2gpKTtcbiAzMTM6XHRcdH1cbiAzMTQ6XHRcbiAzMTU6XHRvdXQ6XG4gMzE2Olx0XHRpZiAocmV0KVxuIDMxNzpcdFx0XHRkZXZfZXJyKG1vcnMtXHUwMDNlZGV2LCBcJiMzNDtmYWlsZWQgdG8gc2V0IGRpc2FibGVkIHByaW1hcnkgY2hhbm5lbHNcJiMzNDspO1xuIDMxODpcdFxuIDMxOTpcdFx0a2ZyZWUocmVzcCk7XG4gMzIwOlx0fVxuIDMyMTpcdFxuIDMyMjpcdHN0YXRpYyBpbnQgbW04MXhfbWFjX29wc19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodylcbiAzMjM6XHR7XG4gMzI0Olx0XHRzdHJ1Y3QgbW04MXggKm1vcnMgPSBody1cdTAwM2Vwcml2O1xuIDMyNTpcdFxuIDMyNjpcdFx0bW9ycy1cdTAwM2VzdGFydGVkID0gdHJ1ZTtcbiAzMjc6XHRcdHJldHVybiAwO1xuIDMyODpcdH1cbiAzMjk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYwNgoJCQkJCQkJb3V0cHV0OiAxNzEKCQkJCQkJCXRob3VnaHRzOiA2NTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWdWxuZXJhYmlsaXR5IFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGNsYXNzaWMgaGVhcCBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0eS4gSGVyZSYjMzk7cyB3aGF0JiMzOTtzIGhhcHBlbmluZzogYSByZXNwb25zZSBidWZmZXIsIGByZXNwYCwgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgLiBUaGlzIGVuc3VyZXMgaXQmIzM5O3MgemVyby1pbml0aWFsaXplZC4gVGhlbiwgYSBmdW5jdGlvbiBgbW04MXhfY21kX2dldF9kaXNhYmxlZF9jaGFubmVsc2AgZmlsbHMgdGhpcyBidWZmZXIgd2l0aCBkYXRhLiBUaGUgY3J1eCBvZiB0aGUgaXNzdWUgbGllcyBpbiBob3cgYHJlc3AtJmd0O25fY2hhbm5lbHNgIGlzIGhhbmRsZWQuIElmIHRoZSBmaXJtd2FyZSwgb3IgYSBtYWxmb3JtZWQgcmVzcG9uc2UsIHByb3ZpZGVzIGEgc3VzcGljaW91c2x5IGxhcmdlIHZhbHVlIGZvciBgbl9jaGFubmVsc2AsIHRoZSBzdWJzZXF1ZW50IGxvb3AgYGZvciAoaSA9IDA7IGkgJmx0OyBsZTMyX3RvX2NwdShyZXNwLSZndDtuX2NoYW5uZWxzKTsgaSYjNDM7JiM0MzspYCBjb3VsZCBpbmRleCBiZXlvbmQgdGhlIGJvdW5kcyBvZiB0aGUgYG1vcnNfczFnaHpfY2hhbm5lbHNgIGFycmF5LiBUaGF0JiMzOTtzIGEgdGV4dGJvb2sgb3V0LW9mLWJvdW5kcyBoZWFwIHJlYWQsIGEgZGVmaW5pdGUgS0FTQU4tZGV0ZWN0YWJsZSBidWcuCgpUaGUgcGF0Y2ggaXRzZWxmIGlzIHNpbXBsZTogaXQgYWRkcyBhIGNoZWNrLCBgaWYgKGxlMzJfdG9fY3B1KHJlc3AtJmd0O25fY2hhbm5lbHMpICZndDsgQVJSQVlfU0laRShtb3JzX3MxZ2h6X2NoYW5uZWxzKSlgLCB0byB2YWxpZGF0ZSB0aGUgdmFsdWUgb2YgYG5fY2hhbm5lbHNgLiBJZiBpdCBleGNlZWRzIHRoZSBhcnJheSBzaXplLCBhbiBlcnJvciwgYC1FSU5WQUxgLCBpcyByZXR1cm5lZCwgYW5kIHdlIGJhaWwgb3V0LiBUaGlzIGlzIGdvb2Q7IHdlJiMzOTtyZSBwcmV2ZW50aW5nIHRoZSBPT0IgcmVhZCBlbnRpcmVseS4KCk5vdywgSSBuZWVkIHRvIGNvbnNpZGVyIHdoZXRoZXIgdGhpcyBwYXRjaCBpdHNlbGYgaW50cm9kdWNlcyBhbnkgKm5ldyogcmlza3MsIHBhcnRpY3VsYXJseSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIGByZXNwYCBpcyBga3phbGxvY2AmIzM5O2QsIHNvIHRoYXQmIzM5O3MgZ29vZC4gYHJldGAgaXMgaW5pdGlhbGl6ZWQgdG8gMCBhbmQgb25seSBjaGFuZ2VkIHRvIC1FSU5WQUwgb24gYW4gZXJyb3IuIFRoZXJlJiMzOTtzIG5vIGtlcm5lbC10by11c2VyIGNvcHkgaGFwcGVuaW5nIGhlcmUgdGhhdCBJIGNhbiBzZWUsIHdoaWNoIGlzIGltcG9ydGFudCBmcm9tIGEgbGVhayBwZXJzcGVjdGl2ZS4gQW5kIHRoZSBrZXkgcG9pbnQgaXM6IHRoaXMgcGF0Y2ggKmFkZHJlc3NlcyogYW4gT09CIHJlYWQgdnVsbmVyYWJpbGl0eSwgc28gS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLiBLQVNBTiBpcyB0aGUgcmlnaHQgdG9vbCBmb3IgZGV0ZWN0aW5nIHRoZSBPT0IgbWVtb3J5IGFjY2Vzcy4KCkRvdWJsZS1jaGVja2luZyBhZ2FpbnN0IHRoZSBndWlkZWxpbmVzLCB0aGUgcGF0Y2ggKnNwZWNpZmljYWxseSogYWRkcmVzc2VzIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBUaGUgc3RydWN0dXJlcyBhcmUgYWxsIHplcm9lZCBvciBpbml0aWFsaXplZC4gVGhlcmUmIzM5O3Mgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBiZWluZyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuIFRoZXJlZm9yZSwgYmFzZWQgb24gdGhlIGNyaXRlcmlhLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGZhbHNlLgoKQWxyaWdodCwgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhpcyBhbmFseXNpcy4gVGltZSB0byBwcmVwYXJlIHRoZSBjYWxsIHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgb24gYHJlc3AtXHUwMDNlbl9jaGFubmVsc2AgYWdhaW5zdCBgQVJSQVlfU0laRShtb3JzX3MxZ2h6X2NoYW5uZWxzKWAgdG8gcHJldmVudCBoZWFwIG91dC1vZi1ib3VuZHMgcmVhZHMgd2hlbiBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgYHJlc3AtXHUwMDNlY2hhbm5lbHNgIGFycmF5IGluIGBtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnMoKWAuXG5cbkhlYXAgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgYXJlIHN0YW5kYXJkIHNwYXRpYWwgbWVtb3J5IHNhZmV0eSB2aW9sYXRpb25zIGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcmVzcG9uc2UgYnVmZmVyIGByZXNwYCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvYygpYCwgYW5kIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBhY2Nlc3Nlcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MgaW50cm9kdWNlZCBvciBtb2RpZmllZCBieSB0aGlzIGNoYW5nZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBvbiBgcmVzcC1cdTAwM2VuX2NoYW5uZWxzYCBhZ2FpbnN0IGBBUlJBWV9TSVpFKG1vcnNfczFnaHpfY2hhbm5lbHMpYCB0byBwcmV2ZW50IGhlYXAgb3V0LW9mLWJvdW5kcyByZWFkcyB3aGVuIGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBgcmVzcC1cdTAwM2VjaGFubmVsc2AgYXJyYXkgaW4gYG1tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFucygpYC5cblxuSGVhcCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyBhcmUgc3RhbmRhcmQgc3BhdGlhbCBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSByZXNwb25zZSBidWZmZXIgYHJlc3BgIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jKClgLCBhbmQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGFjY2Vzc2VzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGJ5IHRoaXMgY2hhbmdlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjIzOjQ2LjcxNjU4MzAyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg3MDgyNTEzOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiV0xBTl9WRU5ET1JfTU9SU0VNSUNST1wiLFxuICAgIFwiTU04MVhcIixcbiAgICBcIk1NODFYX1VTQlwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIlVTQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFuc1wiLFxuICAgIFwibW04MXhfbWFjX3Jlc3RhcnRcIixcbiAgICBcIm1tODF4X21hY19vcHNfYWRkX2ludGVyZmFjZVwiLFxuICAgIFwibW04MXhfcmVnX25vdGlmaWVyXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIG9uIGByZXNwLVxcdTAwM2VuX2NoYW5uZWxzYCBhZ2FpbnN0IGBBUlJBWV9TSVpFKG1vcnNfczFnaHpfY2hhbm5lbHMpYCB0byBwcmV2ZW50IGhlYXAgb3V0LW9mLWJvdW5kcyByZWFkcyB3aGVuIGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBgcmVzcC1cXHUwMDNlY2hhbm5lbHNgIGFycmF5IGluIGBtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnMoKWAuXFxuXFxuSGVhcCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyBhcmUgc3RhbmRhcmQgc3BhdGlhbCBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSByZXNwb25zZSBidWZmZXIgYHJlc3BgIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jKClgLCBhbmQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGFjY2Vzc2VzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGJ5IHRoaXMgY2hhbmdlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGJvdW5kcyBjaGVjayBvbiBmaXJtd2FyZSByZXNwb25zZXMgaW4gbW04MXhfbWFjX2NoZWNrX2Z3X2Rpc2FibGVkX2NoYW5zKCkgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIHdoZW4gbl9jaGFubmVscyBleGNlZWRzIHRoZSBzaXplIG9mIG1vcnNfczFnaHpfY2hhbm5lbHMuIFRoZSBNTTgxeCB3aXJlbGVzcyBkcml2ZXIgc3VwcG9ydHMgVVNCIGludGVyZmFjZXMgKE1NODFYX1VTQikgd2hpY2ggY2FuIGJlIHByb2JlZCBhbmQgZnV6emVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgVVNCIGVtdWxhdGlvbi9nYWRnZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyMzo0Ni43MTY1ODc3M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQzNTk1MzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYjdkMTU3YzA4ZTdhYmM5MmFlMDE4ZDZlNjRhZjI5YTUyMzhiMDgzZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCA3IDA3OjIzOjQ1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jXFxuaW5kZXggMDhjYTExNmE2OGI0Ny4uZThlZjBkOWVlYmQ3NSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuY1xcbkBAIC0yODgsNiArMjg4LDExIEBAIHN0YXRpYyB2b2lkIG1tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFucyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodylcXG4gXFx0XFx0Y2gtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5JRUVFODAyMTFfQ0hBTl9TMUdfTk9fUFJJTUFSWTtcXG4gXFx0fVxcbiBcXG4rXFx0aWYgKGxlMzJfdG9fY3B1KHJlc3AtXFx1MDAzZW5fY2hhbm5lbHMpIFxcdTAwM2UgQVJSQVlfU0laRShtb3JzX3MxZ2h6X2NoYW5uZWxzKSkge1xcbitcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGxlMzJfdG9fY3B1KHJlc3AtXFx1MDAzZW5fY2hhbm5lbHMpOyBpKyspIHtcXG4gXFx0XFx0c3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaDtcXG4gXFx0XFx0c3RydWN0IGhvc3RfY21kX2Rpc2FibGVkX2NoYW5uZWxfZW50cnkgKmVudHJ5ID1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjM6NDcuMjYxMTI2MTM5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo3Nzc4NDY1NDg2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJXTEFOX1ZFTkRPUl9NT1JTRU1JQ1JPXCIsXG4gICAgXCJNTTgxWFwiLFxuICAgIFwiTU04MVhfVVNCXCIsXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiVVNCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibW04MXhfbWFjX2NoZWNrX2Z3X2Rpc2FibGVkX2NoYW5zXCIsXG4gICAgXCJtbTgxeF9tYWNfcmVzdGFydFwiLFxuICAgIFwibW04MXhfbWFjX29wc19hZGRfaW50ZXJmYWNlXCIsXG4gICAgXCJtbTgxeF9yZWdfbm90aWZpZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYm91bmRzIGNoZWNrIG9uIGZpcm13YXJlIHJlc3BvbnNlcyBpbiBtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnMoKSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgd2hlbiBuX2NoYW5uZWxzIGV4Y2VlZHMgdGhlIHNpemUgb2YgbW9yc19zMWdoel9jaGFubmVscy4gVGhlIE1NODF4IHdpcmVsZXNzIGRyaXZlciBzdXBwb3J0cyBVU0IgaW50ZXJmYWNlcyAoTU04MVhfVVNCKSB3aGljaCBjYW4gYmUgcHJvYmVkIGFuZCBmdXp6ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZW11bGF0aW9uL2dhZGdldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjdkMTU3YzA4ZTdhYmM5MmFlMDE4ZDZlNjRhZjI5YTUyMzhiMDgzZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMDc6MjM6NDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuY1xuaW5kZXggMDhjYTExNmE2OGI0Ny4uZThlZjBkOWVlYmQ3NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmNcbkBAIC0yODgsNiArMjg4LDExIEBAIHN0YXRpYyB2b2lkIG1tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFucyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodylcbiBcdFx0Y2gtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+SUVFRTgwMjExX0NIQU5fUzFHX05PX1BSSU1BUlk7XG4gXHR9XG4gXG4rXHRpZiAobGUzMl90b19jcHUocmVzcC1cdTAwM2VuX2NoYW5uZWxzKSBcdTAwM2UgQVJSQVlfU0laRShtb3JzX3MxZ2h6X2NoYW5uZWxzKSkge1xuK1x0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxlMzJfdG9fY3B1KHJlc3AtXHUwMDNlbl9jaGFubmVscyk7IGkrKykge1xuIFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoO1xuIFx0XHRzdHJ1Y3QgaG9zdF9jbWRfZGlzYWJsZWRfY2hhbm5lbF9lbnRyeSAqZW50cnkgPVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjM6NDcuMjYxMTI4MjE5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTE1MDk5NzQ0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFdpcmVsZXNzIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBhc2tlZCB0byBsb29rIGF0IGEgcGF0Y2ggd2l0aGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGJlZm9yZSBldmVuICpsb29raW5nKiBhdCB0aGUgc3BlY2lmaWNzIG9mIHRoZSBwYXRjaCBpdHNlbGYsIEkgbmVlZCB0byBnZXQgYSBoaWdoLWxldmVsIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBkcml2ZXIuIEknbSBnb2luZyB0byBzdGFydCB3aXRoIGEgc3lzdGVtYXRpYyBhcHByb2FjaC4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgbW04MXhgIGlzLiBJcyBpdCBhIFBDSWUgZGV2aWNlPyBVU0I/IFNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBBbmQgaG93IGlzIHRoaXMgZHJpdmVyIHJlZ2lzdGVyZWQgd2l0aCB0aGUga2VybmVsPyBXaGF0IGJ1cyBpbmZyYXN0cnVjdHVyZSBpcyBpdCBleHBlY3RpbmcgdG8gaW50ZXJhY3Qgd2l0aD8gRG9lcyBpdCByZWx5IG9uIHNvbWUgc3BlY2lmaWMgaGFyZHdhcmUgY29uZmlndXJhdGlvbiwgb3IgaXMgaXQgbW9yZSBvZiBhIHZpcnR1YWwgYnVzIHR5cGUgc2V0dXA/XG5cbkknbGwgc3RhcnQgYnkgZGl2aW5nIGludG8gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL2AgZGlyZWN0b3J5LiBJJ2xsIHVzZSBgZ3JlcGAgb3IgZGlyZWN0b3J5IGluZGV4aW5nLCBhbmQgcmVhZGluZyB0aGUgY29kZSBkaXJlY3RseSwgSSdtIGdvaW5nIHRvIHBvcmUgb3ZlciB0aGUgYEtjb25maWdgIGZpbGUgYW5kIHRoZSBvdGhlciBzb3VyY2UgZmlsZXMgaW4gdGhhdCBkaXJlY3RvcnkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBhcmNoaXRlY3R1cmFsIGNvbnRleHQgb2YgdGhlIGRyaXZlciwgdGhlIGRldmljZSB0eXBlIGl0IHN1cHBvcnRzIGFuZCBhbnkgcmVsYXRlZCBkZXBlbmRlbmNpZXMuIFdpdGggdGhpcyBpbml0aWFsIGZyYW1ld29yayBpbiBwbGFjZSwgSSBjYW4gZXZhbHVhdGUgdGhlIHBhdGNoIG11Y2ggbW9yZSBlZmZlY3RpdmVseS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk3NiwiT3V0cHV0VG9rZW5zIjo1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjIzOjU2LjQxMjEyODAzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRmlsZXNcIjogbnVsbCxcbiAgXCJTdWJkaXJzXCI6IFtcbiAgICBcIm1tODF4XCJcbiAgXVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjM6NTYuNDEyMTgxNFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTg0MTE5MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9yc2VtaWNyb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnPTI5PXNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWljcm9jaGlwL0tjb25maWdcXFwiXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZzozMDpzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnLTMxLXNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL0tjb25maWdcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZT0xND1vYmotJChDT05GSUdfV0xBTl9WRU5ET1JfTUlDUk9DSElQKSArPSBtaWNyb2NoaXAvXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvTWFrZWZpbGU6MTU6b2JqLSQoQ09ORklHX1dMQU5fVkVORE9SX01PUlNFTUlDUk8pICs9IG1vcnNlbWljcm8vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvTWFrZWZpbGUtMTYtb2JqLSQoQ09ORklHX1dMQU5fVkVORE9SX05YUCkgKz0gbnhwL1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9LY29uZmlnPTEzPWlmIFdMQU5fVkVORE9SX01PUlNFTUlDUk9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL0tjb25maWc6MTQ6c291cmNlIFxcXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L0tjb25maWdcXFwiXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9LY29uZmlnLTE1LWVuZGlmICMgV0xBTl9WRU5ET1JfTU9SU0VNSUNST1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5oLTE1LSNkZWZpbmUgQkNGX0RBVEFCQVNFX1NJWkUgKDEwMjQpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5oOjE2OiNkZWZpbmUgTU04MVhfRldfRElSIFxcXCJtb3JzZW1pY3JvL21tODF4XFxcIlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuaC0xNy0jZGVmaW5lIE1NODFYX0ZXX0VYVCBcXFwiLmJpblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjM6NTYuODEwNTk5MTU0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzEyODgxNDY1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgbW04MXggV2lyZWxlc3MgRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgbW04MXggd2lyZWxlc3MgZHJpdmVyLiBGaXJzdCwgbGV0J3MgaGVhZCBzdHJhaWdodCB0byB0aGUgc291cmNlIOKAkyB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBpdHNlbGYuIEknbSBnb2luZyB0byBzdGFydCBieSBuYXZpZ2F0aW5nIHRvIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2AuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0aGUgbWVhdCBvZiB0aGUgZHJpdmVyIGNvZGUsIGhlYWRlciBmaWxlcywgYW5kIGhvcGVmdWxseSwgc29tZSBrZXkgZG9jdW1lbnRhdGlvbiBvciBpbnRlcm5hbCBwcm9qZWN0IHNwZWNpZmljcyB0byByZXNpZGUuIEtub3dpbmcgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgaXMgaGFsZiB0aGUgYmF0dGxlOyBpdCB0ZWxscyBtZSB0aGUgYXNzdW1lZCBkZXNpZ24gYW5kIG9yZ2FuaXphdGlvbiBvZiB0aGlzIGRyaXZlci5cblxuTm93LCBhcyBhbiBleHBlcnQsIEkga25vdyB0aGF0IGNvbmZpZ3VyYXRpb24gaXMgY3JpdGljYWwgZm9yIGhvdyBhIGRyaXZlciBpbnRlZ3JhdGVzIHdpdGggdGhlIGJyb2FkZXIga2VybmVsIGJ1aWxkLiBTbywgSSdsbCBpbW1lZGlhdGVseSBzaGlmdCBteSBmb2N1cyB0byB0aGUgYEtjb25maWdgIGZpbGUgd2l0aGluIHRoYXQgZGlyZWN0b3J5LiBUaGlzIGZpbGUgaXMgdGhlIGxpZmVibG9vZCBvZiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSBpbiB0aGlzIGNvbnRleHQsIGRlZmluaW5nIGFsbCB0aGUgY29uZmlndXJhYmxlIG9wdGlvbnMgZm9yIHRoaXMgc3BlY2lmaWMgZHJpdmVyLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOlxuXG4qICAgKipEZXBlbmRlbmNpZXM6KiogV2hhdCBvdGhlciBrZXJuZWwgY29tcG9uZW50cyBvciBkcml2ZXJzIGRvZXMgdGhpcyBkZXBlbmQgb24/IERvZXMgaXQgbGV2ZXJhZ2UgZXhpc3Rpbmcgd2lyZWxlc3MgaW5mcmFzdHJ1Y3R1cmUgb3IgaGF2ZSBhIGN1c3RvbSBzdGFjaz9cbiogICAqKkZlYXR1cmVzOioqIFdoYXQgZnVuY3Rpb25hbGl0eSBpcyBleHBvc2VkIOKAkyA4MDIuMTEgc3RhbmRhcmRzIHN1cHBvcnRlZCwgc2VjdXJpdHkgb3B0aW9ucywgcG93ZXIgbWFuYWdlbWVudCBzZXR0aW5ncz8gVGhlc2Ugd2lsbCBpbmRpY2F0ZSB0aGUgY2FwYWJpbGl0aWVzIGFuZCBzY29wZSBvZiB0aGlzIGRyaXZlci5cbiogICAqKkJ1aWxkIE9wdGlvbnM6KiogSG93IGlzIHRoZSBkcml2ZXIgZW5hYmxlZD8gSXMgaXQgc3RhdGljYWxseSBjb21waWxlZCwgYnVpbHQgYXMgYSBtb2R1bGUsIG9yIGNvbmRpdGlvbmFsbHkgaW5jbHVkZWQgYmFzZWQgb24gaGFyZHdhcmUgZGV0ZWN0aW9uPyBUaGlzIGdpdmVzIGNsdWVzIGFib3V0IGhvdyB0aGUgdGFyZ2V0IHBsYXRmb3JtcyB3b3VsZCB1c2UgaXQuXG4qICAgKipEZWZhdWx0czoqKiBBcmUgdGhlcmUgc2Vuc2libGUgZGVmYXVsdHMgdG8gYmVnaW4gd2l0aCwgb3Igd2lsbCBJIG5lZWQgdG8gZGVmaW5lIHRoZSBzZXR0aW5ncyBiYXNlZCBvbiB0aGUgdGFyZ2V0IHBsYXRmb3JtP1xuXG5JJ2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGNvbmRpdGlvbmFsIGxvZ2ljIHdpdGhpbiB0aGUgYEtjb25maWdgIOKAkyBsaWtlIGBpZi4uLmVsc2VgIHN0YXRlbWVudHMg4oCTIGFzIHRoZXkgbGlrZWx5IGRlZmluZSBob3cgdGhlIGRyaXZlciBiZWhhdmVzIG9uIGRpZmZlcmVudCBoYXJkd2FyZSBvciBwbGF0Zm9ybXMuIFRoZSBhaW0gb2YgdGhpcyBmaXJzdCByZXZpZXcgd2lsbCBiZSB0byBmb3JtIGEgZnVsbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkcml2ZXIgYW5kIGl0cyBwbGFjZSB3aXRoaW4gdGhlIGtlcm5lbC4gQXJtZWQgd2l0aCB0aGF0LCBJIGNhbiBtb3ZlIG9uIHRvIG90aGVyIHRoaW5ncyB0byBhbmFseXplLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODAxLCJPdXRwdXRUb2tlbnMiOjc1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCIsImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNDowMy45Mzk0MTY2NjZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJjb2Rlc2VhcmNoLWRpci1pbmRleCIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRmlsZXNcIjogW1xuICAgIFwiYnVzLmhcIixcbiAgICBcImNvbW1hbmQuY1wiLFxuICAgIFwiY29tbWFuZC5oXCIsXG4gICAgXCJjb21tYW5kX2RlZnMuaFwiLFxuICAgIFwiY29yZS5jXCIsXG4gICAgXCJjb3JlLmhcIixcbiAgICBcImZ3LmNcIixcbiAgICBcImZ3LmhcIixcbiAgICBcImhpZi5oXCIsXG4gICAgXCJody5jXCIsXG4gICAgXCJody5oXCIsXG4gICAgXCJtYWMuY1wiLFxuICAgIFwibWFjLmhcIixcbiAgICBcIm1tcmMuY1wiLFxuICAgIFwibW1yYy5oXCIsXG4gICAgXCJwcy5jXCIsXG4gICAgXCJwcy5oXCIsXG4gICAgXCJyYXRlX2NvZGUuaFwiLFxuICAgIFwicmMuY1wiLFxuICAgIFwicmMuaFwiLFxuICAgIFwic2Rpby5jXCIsXG4gICAgXCJza2JxLmNcIixcbiAgICBcInNrYnEuaFwiLFxuICAgIFwidXNiLmNcIixcbiAgICBcInlhcHMuY1wiLFxuICAgIFwieWFwcy5oXCIsXG4gICAgXCJ5YXBzX2h3LmNcIixcbiAgICBcInlhcHNfaHcuaFwiXG4gIF0sXG4gIFwiU3ViZGlyc1wiOiBudWxsXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNDowMy45Mzk1NjQ5NjZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRcXG4gICAzOlxcdGNvbmZpZyBNTTgxWFxcbiAgIDQ6XFx0XFx0dHJpc3RhdGUgXFxcIk1vcnNlIE1pY3JvIE1NODF4IHdpcmVsZXNzIGRldmljZXNcXFwiIGlmIENPTVBJTEVfVEVTVFxcbiAgIDU6XFx0XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxcbiAgIDY6XFx0XFx0c2VsZWN0IEZXX0xPQURFUlxcbiAgIDc6XFx0XFx0c2VsZWN0IENSQzdcXG4gICA4OlxcdFxcdGhlbHBcXG4gICA5OlxcdFxcdCAgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IGZvciB3aXJlbGVzcyBkZXZpY2VzIGJhc2VkXFxuICAxMDpcXHRcXHQgIG9uIE1vcnNlIE1pY3JvIE1NODF4eCBjaGlwc2V0cy5cXG4gIDExOlxcdFxcbiAgMTI6XFx0Y29uZmlnIE1NODFYX1VTQlxcbiAgMTM6XFx0XFx0dHJpc3RhdGUgXFxcIk1vcnNlIE1pY3JvIE1NODF4IFVTQiBzdXBwb3J0XFxcIlxcbiAgMTQ6XFx0XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMSBcXHUwMDI2XFx1MDAyNiBVU0JcXG4gIDE1OlxcdFxcdHNlbGVjdCBNTTgxWFxcbiAgMTY6XFx0XFx0aGVscFxcbiAgMTc6XFx0XFx0ICBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIHRoZSBVU0IgaW50ZXJmYWNlIG9mXFxuICAxODpcXHRcXHQgIGRldmljZXMgdXNpbmcgdGhlIE1vcnNlIE1pY3JvIE1NODF4IGNoaXBzZXQuXFxuICAxOTpcXHRcXG4gIDIwOlxcdGNvbmZpZyBNTTgxWF9TRElPXFxuICAyMTpcXHRcXHR0cmlzdGF0ZSBcXFwiTW9yc2UgTWljcm8gTU04MXggU0RJTyBzdXBwb3J0XFxcIlxcbiAgMjI6XFx0XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMSBcXHUwMDI2XFx1MDAyNiBNTUNcXG4gIDIzOlxcdFxcdHNlbGVjdCBNTTgxWFxcbiAgMjQ6XFx0XFx0aGVscFxcbiAgMjU6XFx0XFx0ICBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIHRoZSBTRElPIGludGVyZmFjZSBvZlxcbiAgMjY6XFx0XFx0ICBkZXZpY2VzIHVzaW5nIHRoZSBNb3JzZSBNaWNybyBNTTgxeCBjaGlwc2V0LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNDowMy45Mzk2NTMwOTZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTAxMDMzMTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkluaXRpYWwgQXNzZXNzbWVudCBvZiBVU0IgR2FkZ2V0IFN1cHBvcnQgaW4gU3l6a2FsbGVyIGZvciBhIFNwZWNpZmljIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYE1NODFYX1VTQmAgY29uZmlndXJhdGlvbiBvcHRpb24sIGFuZCB0aGF0IGltbWVkaWF0ZWx5IGNhdGNoZXMgbXkgZXllLiBVU0Igc3VwcG9ydCEgVGhhdCdzIGludGVyZXN0aW5nLCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIGhhbmRsZWQgYnkgYHVzYi5jYC4gVGhlIGZhY3QgdGhhdCBTeXprYWxsZXIgY2FuIGVtdWxhdGUgVVNCIGRldmljZXMgdmlhIHRoZSBVU0IgZ2FkZ2V0IChzcGVjaWZpY2FsbHkgUmF3IEdhZGdldCBvciBEdW1teSBIQ0QpIG1lYW5zIHRoaXMgY291bGQgYmUgYSByZWFsbHkgZnJ1aXRmdWwgYXJlYSBmb3IgZnV6emluZy4gSSdtIHRoaW5raW5nLCB0aGlzIG1pZ2h0IGdpdmUgbWUgYSBuZXcgcGVyc3BlY3RpdmUgb24gc29tZXRoaW5nIHRvIGludmVzdGlnYXRlLlxuXG5NeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgd2FudCB0byBkaXZlIGludG8gdGhlIHNwZWNpZmljIGRyaXZlciBpbXBsZW1lbnRhdGlvbiDigJMgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvdXNiLmNgIOKAkyBhbmQgZmlndXJlIG91dCBob3cgYG1tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFuc2AgaXMgcmVhY2hlZC4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBtZWF0IG9mIHBvdGVudGlhbCBidWdzIHdpbGwgYmUgZm91bmQuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgcGF0aHMgdG8gdGhhdCBzcGVjaWZpYyBmdW5jdGlvbiB3aWxsIHRlbGwgbWUgdGhlIGFyZWFzIEkgc2hvdWxkIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbi4gVGhpcyBpcyB3aGVyZSB0aGUgZ29vZCBzdHVmZiBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg4NCwiT3V0cHV0VG9rZW5zIjo5MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkxLCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNDowNi40NDA2ODkzNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC91c2IuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyNiBNb3JzZSBNaWNyb1xcbiAgIDQ6XFx0ICovXFxuICAgNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvamlmZmllcy5oXFx1MDAzZVxcbiAgIDY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAgIDc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VzYi5oXFx1MDAzZVxcbiAgIDg6XFx0I2luY2x1ZGUgXFxcImhpZi5oXFxcIlxcbiAgIDk6XFx0I2luY2x1ZGUgXFxcImJ1cy5oXFxcIlxcbiAgMTA6XFx0I2luY2x1ZGUgXFxcIm1hYy5oXFxcIlxcbiAgMTE6XFx0I2luY2x1ZGUgXFxcImNvcmUuaFxcXCJcXG4gIDEyOlxcdFxcbiAgMTM6XFx0LypcXG4gIDE0OlxcdCAqIFVSQiB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcy4gSWYgYW4gVVJCIGRvZXMgbm90IGNvbXBsZXRlIHdpdGhpbiB0aGlzXFxuICAxNTpcXHQgKiB0aW1lLCBpdCB3aWxsIGJlIGtpbGxlZC4gVGhpcyB0aW1lb3V0IG5lZWRzIHRvIGFjY291bnQgZm9yIFVTQiBzdXNwZW5kYW5kXFxuICAxNjpcXHQgKiByZXN1bWUgb2NjdXJyaW5nIGJlZm9yZSB0aGUgVVJCIGNhbiBiZSB0cmFuc2ZlcnJlZCwgYW5kIGl0IGFsc28gbmVlZHMgdG9cXG4gIDE3OlxcdCAqIGFjY291bnQgZm9yIHRyYW5zZmVycmluZyBVU0JfTUFYX1RSQU5TRkVSX1NJWkUgYnl0ZXMgb3ZlciBhIHBvdGVudGlhbGx5XFxuICAxODpcXHQgKiBzbG93LCBjb25nZXN0ZWQgVVNCIEZ1bGwgU3BlZWQgbGluay5cXG4gIDE5OlxcdCAqL1xcbiAgMjA6XFx0I2RlZmluZSBVUkJfVElNRU9VVF9NUyAyNTBcXG4gIDIxOlxcdFxcbiAgMjI6XFx0LyogSGlnaCBzcGVlZCBVU0IgMl4oNC0xKSAqIDEyNXVzZWMgPSAxbXNlYyAqL1xcbiAgMjM6XFx0I2RlZmluZSBNTTgxWF9VU0JfSU5URVJSVVBUX0lOVEVSVkFMIDRcXG4gIDI0OlxcdFxcbiAgMjU6XFx0LyogTWF4IGJ5dGVzIHBlciBVU0IgcmVhZC93cml0ZSAqL1xcbiAgMjY6XFx0I2RlZmluZSBVU0JfTUFYX1RSQU5TRkVSX1NJWkUgKDE2ICogMTAyNClcXG4gIDI3OlxcdFxcbiAgMjg6XFx0LyogSU5UIEVQIGJ1ZmZlciBzaXplICovXFxuICAyOTpcXHQjZGVmaW5lIE1NODFYX0VQX0lOVF9CVUZGRVJfU0laRSA4XFxuICAzMDpcXHRcXG4gIDMxOlxcdC8qIE1vcnNlIHZlbmRvciBJRHMqL1xcbiAgMzI6XFx0I2RlZmluZSBNTTgxWF9WRU5ET1JfSUQgMHgzMjViXFxuICAzMzpcXHQjZGVmaW5lIE1NODFYX01NODEwWF9QUk9EVUNUX0lEIDB4ODEwMFxcbiAgMzQ6XFx0XFxuICAzNTpcXHQvKiBQb3dlciBtYW5hZ2VtZW50IHJ1bnRpbWUgYXV0by1zdXNwZW5kIGRlbGF5IHZhbHVlIGluIG1pbGxpc2Vjb25kcyAqL1xcbiAgMzY6XFx0I2RlZmluZSBQTV9SVU5USU1FX0FVVE9TVVNQRU5EX0RFTEFZX01TIDEwMFxcbiAgMzc6XFx0XFxuICAzODpcXHRlbnVtIG1tODF4X3VzYl9lbmRwb2ludHMge1xcbiAgMzk6XFx0XFx0TU04MVhfRVBfQ01EID0gMCxcXG4gIDQwOlxcdFxcdE1NODFYX0VQX0lOVCxcXG4gIDQxOlxcdFxcdE1NODFYX0VQX01FTV9SRCxcXG4gIDQyOlxcdFxcdE1NODFYX0VQX01FTV9XUixcXG4gIDQzOlxcdFxcdE1NODFYX0VQX1JFR19SRCxcXG4gIDQ0OlxcdFxcdE1NODFYX0VQX1JFR19XUixcXG4gIDQ1OlxcdFxcdE1NODFYX0VQX0VQX01BWCxcXG4gIDQ2OlxcdH07XFxuICA0NzpcXHRcXG4gIDQ4OlxcdHN0cnVjdCBtbTgxeF91c2JfZW5kcG9pbnQge1xcbiAgNDk6XFx0XFx0dW5zaWduZWQgY2hhciAqYnVmZmVyO1xcbiAgNTA6XFx0XFx0c3RydWN0IHVyYiAqdXJiO1xcbiAgNTE6XFx0XFx0X191OCBhZGRyO1xcbiAgNTI6XFx0XFx0aW50IHNpemU7XFxuICA1MzpcXHR9O1xcbiAgNTQ6XFx0XFxuICA1NTpcXHRlbnVtIG1tODF4X3VzYl9mbGFncyB7IE1NODFYX1VTQl9GTEFHX0FUVEFDSEVELCBNTTgxWF9VU0JfRkxBR19TVVNQRU5ERUQgfTtcXG4gIDU2OlxcdFxcbiAgNTc6XFx0c3RydWN0IG1tODF4X3VzYiB7XFxuICA1ODpcXHRcXHRzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjtcXG4gIDU5OlxcdFxcdHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2U7XFxuICA2MDpcXHRcXHRzdHJ1Y3QgbW04MXhfdXNiX2VuZHBvaW50IGVuZHBvaW50c1tNTTgxWF9FUF9FUF9NQVhdO1xcbiAgNjE6XFx0XFx0aW50IGVycm9ycztcXG4gIDYyOlxcdFxcbiAgNjM6XFx0XFx0Lyogc2VyaWFsaXNlIFVTQiBkZXZpY2Ugc3RydWN0ICovXFxuICA2NDpcXHRcXHRzdHJ1Y3QgbXV0ZXggbG9jaztcXG4gIDY1OlxcdFxcbiAgNjY6XFx0XFx0Lyogc2VyaWFsaXNlIFVTQiBidXMgYWNjZXNzICovXFxuICA2NzpcXHRcXHRzdHJ1Y3QgbXV0ZXggYnVzX2xvY2s7XFxuICA2ODpcXHRcXG4gIDY5OlxcdFxcdGJvb2wgb25nb2luZ19jbWQ7XFxuICA3MDpcXHRcXHRib29sIG9uZ29pbmdfcnc7XFxuICA3MTpcXHRcXHR3YWl0X3F1ZXVlX2hlYWRfdCByd19pbl93YWl0O1xcbiAgNzI6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gIDczOlxcdH07XFxuICA3NDpcXHRcXG4gIDc1OlxcdGVudW0gbW04MXhfdXNiX2NvbW1hbmRfZGlyZWN0aW9uIHtcXG4gIDc2OlxcdFxcdE1NODFYX1VTQl9XUklURSA9IDB4MDAsXFxuICA3NzpcXHRcXHRNTTgxWF9VU0JfUkVBRCA9IDB4ODAsXFxuICA3ODpcXHRcXHRNTTgxWF9VU0JfUkVTRVQgPSAweDAyLFxcbiAgNzk6XFx0fTtcXG4gIDgwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNDowNi40NDA4NTA2OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzc0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNzU6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDI3NjpcXHRcXHR9XFxuIDI3NzpcXHRcXG4gMjc4OlxcdFxcdHJldCA9IG1tODF4X2NtZF9nZXRfZGlzYWJsZWRfY2hhbm5lbHMobW9ycywgcmVzcCwgcmVzcF9sZW4pO1xcbiAyNzk6XFx0XFx0aWYgKHJldClcXG4gMjgwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAyODE6XFx0XFxuIDI4MjpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShtb3JzX3MxZ2h6X2NoYW5uZWxzKTsgaSsrKSB7XFxuIDI4MzpcXHRcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoID0gXFx1MDAyNm1vcnNfczFnaHpfY2hhbm5lbHNbaV07XFxuIDI4NDpcXHRcXG4gMjg1OlxcdFxcdFxcdGlmIChjaC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRClcXG4gMjg2OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAyODc6XFx0XFxuIDI4ODpcXHRcXHRcXHRjaC1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfklFRUU4MDIxMV9DSEFOX1MxR19OT19QUklNQVJZO1xcbiAyODk6XFx0XFx0fVxcbiAyOTA6XFx0XFxuIDI5MTpcXHRcXHRpZiAobGUzMl90b19jcHUocmVzcC1cXHUwMDNlbl9jaGFubmVscykgXFx1MDAzZSBBUlJBWV9TSVpFKG1vcnNfczFnaHpfY2hhbm5lbHMpKSB7XFxuIDI5MjpcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbiAyOTM6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDI5NDpcXHRcXHR9XFxuIDI5NTpcXHRcXG4gMjk2OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBsZTMyX3RvX2NwdShyZXNwLVxcdTAwM2VuX2NoYW5uZWxzKTsgaSsrKSB7XFxuIDI5NzpcXHRcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoO1xcbiAyOTg6XFx0XFx0XFx0c3RydWN0IGhvc3RfY21kX2Rpc2FibGVkX2NoYW5uZWxfZW50cnkgKmVudHJ5ID1cXG4gMjk5OlxcdFxcdFxcdFxcdFxcdTAwMjZyZXNwLVxcdTAwM2VjaGFubmVsc1tpXTtcXG4gMzAwOlxcdFxcbiAzMDE6XFx0XFx0XFx0aWYgKGVudHJ5LVxcdTAwM2Vid19taHogIT0gMSlcXG4gMzAyOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAzMDM6XFx0XFxuIDMwNDpcXHRcXHRcXHRjaCA9IGllZWU4MDIxMV9nZXRfY2hhbm5lbF9raHooXFxuIDMwNTpcXHRcXHRcXHRcXHRody1cXHUwMDNld2lwaHksXFxuIDMwNjpcXHRcXHRcXHRcXHRLSFoxMDBfVE9fS0haKGxlMTZfdG9fY3B1KGVudHJ5LVxcdTAwM2VmcmVxXzEwMGtoeikpKTtcXG4gMzA3OlxcdFxcdFxcdGlmICghY2gpXFxuIDMwODpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gMzA5OlxcdFxcbiAzMTA6XFx0XFx0XFx0Y2gtXFx1MDAzZWZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX1MxR19OT19QUklNQVJZO1xcbiAzMTE6XFx0XFx0XFx0ZGV2X2RiZyhtb3JzLVxcdTAwM2VkZXYsIFxcXCJzZXQgTk9fUFJJTUFSWSBvbiAldSBLSHpcXFwiLFxcbiAzMTI6XFx0XFx0XFx0XFx0aWVlZTgwMjExX2NoYW5uZWxfdG9fa2h6KGNoKSk7XFxuIDMxMzpcXHRcXHR9XFxuIDMxNDpcXHRcXG4gMzE1OlxcdG91dDpcXG4gMzE2OlxcdFxcdGlmIChyZXQpXFxuIDMxNzpcXHRcXHRcXHRkZXZfZXJyKG1vcnMtXFx1MDAzZWRldiwgXFxcImZhaWxlZCB0byBzZXQgZGlzYWJsZWQgcHJpbWFyeSBjaGFubmVsc1xcXCIpO1xcbiAzMTg6XFx0XFxuIDMxOTpcXHRcXHRrZnJlZShyZXNwKTtcXG4gMzIwOlxcdH1cXG4gMzIxOlxcdFxcbiAzMjI6XFx0c3RhdGljIGludCBtbTgxeF9tYWNfb3BzX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KVxcbiAzMjM6XFx0e1xcbiAzMjQ6XFx0XFx0c3RydWN0IG1tODF4ICptb3JzID0gaHctXFx1MDAzZXByaXY7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI0OjA2LjQ0MDk5MDI4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYxMzkwNzg3MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgbW04MXhfbWFjX2NoZWNrX2Z3X2Rpc2FibGVkX2NoYW5zYCBDYWxsIFNpdGVzKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBgbW04MXhfbWFjX2NoZWNrX2Z3X2Rpc2FibGVkX2NoYW5zYC4gVG8gcmVhbGx5IGdyb2sgd2hhdCdzIGhhcHBlbmluZywgSSBuZWVkIHRvIGtub3cgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgZnJvbS4gU3RhbmRhcmQgcHJvY2VkdXJlOiB0aW1lIHRvIGJyZWFrIG91dCB0aGUgZ3JlcC4gTGV0J3Mgc2VlIGFsbCB0aGUgcGxhY2VzIGluIHRoZSBjb2RlYmFzZSB0aGlzIGZ1bmN0aW9uIGdldHMgaW52b2tlZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGl0cyBjb250cm9sIGZsb3cgYW5kIGludGVuZGVkIHB1cnBvc2UuIEdvdHRhIGZpZ3VyZSBvdXQgaXRzIHJvbGUgaW4gdGhlIGdyZWF0ZXIgc2NoZW1lIG9mIHRoaW5ncy4gTm8gcG9pbnQgaW4gc3Bpbm5pbmcgbXkgd2hlZWxzIHVudGlsIEkgdW5kZXJzdGFuZCB0aGUgY2FsbGVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzIxNywiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjQ6MTIuNTgwMDcyNjQyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTA4MTM5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jPTIzOD1zdGF0aWMgYm9vbCBtbTgxeF90eF9oX3BzX2ZpbHRlcmVkX2Zvcl9zdGEoc3RydWN0IG1tODF4ICptb3JzLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yNjEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYzoyNjI6c3RhdGljIHZvaWQgbW04MXhfbWFjX2NoZWNrX2Z3X2Rpc2FibGVkX2NoYW5zKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjYzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM9MjExMj1zdGF0aWMgaW50IG1tODF4X21hY19yZXN0YXJ0KHN0cnVjdCBtbTgxeCAqbW9ycylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjE2Ni1cXHRjbGVhcl9iaXQoTU04MVhfU1RBVEVfUkVMT0FEX0ZXX0FGVEVSX1NUQVJULCBcXHUwMDI2bW9ycy1cXHUwMDNlc3RhdGVfZmxhZ3MpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjE2NzpcXHRtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnMobW9ycy1cXHUwMDNlaHcpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjE2OC1cXHRpZWVlODAyMTFfcmVzdGFydF9odyhtb3JzLVxcdTAwM2Vodyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI0OjEyLjY2NTE2MTUxNloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjQyNTY4OTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpZ2dpbmcgRGVlcGVyIGludG8gdGhlIG1tODF4IE1BQyBEcml2ZXIqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBzdXJyb3VuZGluZyBgbW04MXhfbWFjX2NoZWNrX2Z3X2Rpc2FibGVkX2NoYW5zYCwgYG1tODF4X21hY19yZXN0YXJ0YCwgYW5kIGBtbTgxeF9tYWNfb3BzX3N0YXJ0YC4gVGhlc2UgYXJlIGtleSBmdW5jdGlvbnMsIGFuZCBJIG5lZWQgdG8gc2VlICp3aGVyZSogYW5kICpob3cqIHRoZXkncmUgdXNlZC4gTXkgZ29hbCBpcyB0byBtYXAgb3V0IHRoZSBpbnRlcmFjdGlvbnMgYW5kIHBpbnBvaW50IHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIG9yIGRlYnVnZ2luZywgc28gSSBhbSBsb29raW5nIHRvIHRyYWNlIGhvdyBhbmQgd2hlcmUgdGhleSBhcmUgY2FsbGVkLlxuXG5TcGVjaWZpY2FsbHksIEknbSBoZWFkaW5nIGludG8gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmNgLiBJJ20gc3RhcnRpbmcgbXkgZGVlcCBkaXZlIGJ5IGZvY3VzaW5nIG9uIGxpbmVzIDI1MCB0aHJvdWdoIDMzMC4gVGhpcyBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBjaHVuayB0byBiZWdpbiB3aXRoOyB0aGlzIGFyZWEgc2hvdWxkIGdpdmUgbWUgY29udGV4dCBvbiB0aGUgc3Vycm91bmRpbmcgY29kZSwgYW5kIGhvcGVmdWxseSwgSSB3aWxsIGJlIGFibGUgdG8gc2VlIGZ1bmN0aW9uIGNhbGxzIHRoYXQgd2lsbCBsZWFkIG1lIGRvd24gdGhlIHJpZ2h0IHBhdGguIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kIVxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODIzLCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjQ6MTQuOTA3NzM0MDM0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzY2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI1MDpcXHRcXHRpZiAoIW1vcnNfc3RhLVxcdTAwM2V0eF9wc19maWx0ZXJfZW4pXFxuIDI1MTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDI1MjpcXHRcXG4gMjUzOlxcdFxcdGRldl9kYmcobW9ycy1cXHUwMDNlZGV2LCBcXFwiRnJhbWUgZm9yIHN0YVslcE1dIFBTIGZpbHRlcmVkXFxcIiwgbW9yc19zdGEtXFx1MDAzZWFkZHIpO1xcbiAyNTQ6XFx0XFxuIDI1NTpcXHRcXHRpbmZvLVxcdTAwM2VmbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9UWF9GSUxURVJFRDtcXG4gMjU2OlxcdFxcdGluZm8tXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5JRUVFODAyMTFfVFhfQ1RMX0FNUERVO1xcbiAyNTc6XFx0XFxuIDI1ODpcXHRcXHRpZWVlODAyMTFfdHhfc3RhdHVzX3NrYihtb3JzLVxcdTAwM2Vodywgc2tiKTtcXG4gMjU5OlxcdFxcdHJldHVybiB0cnVlO1xcbiAyNjA6XFx0fVxcbiAyNjE6XFx0XFxuIDI2MjpcXHRzdGF0aWMgdm9pZCBtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpXFxuIDI2MzpcXHR7XFxuIDI2NDpcXHRcXHRpbnQgcmV0ID0gMDtcXG4gMjY1OlxcdFxcdHUzMiBpO1xcbiAyNjY6XFx0XFx0c3RydWN0IG1tODF4ICptb3JzID0gaHctXFx1MDAzZXByaXY7XFxuIDI2NzpcXHRcXHRzdHJ1Y3QgaG9zdF9jbWRfcmVzcF9nZXRfZGlzYWJsZWRfY2hhbm5lbHMgKnJlc3A7XFxuIDI2ODpcXHRcXHR1MzIgcmVzcF9sZW4gPSBzaXplb2Yoc3RydWN0IGhvc3RfY21kX2Rpc2FibGVkX2NoYW5uZWxfZW50cnkpICpcXG4gMjY5OlxcdFxcdFxcdFxcdCAgICAgICBBUlJBWV9TSVpFKG1vcnNfczFnaHpfY2hhbm5lbHMpICtcXG4gMjcwOlxcdFxcdFxcdCAgICAgICBzaXplb2YoKnJlc3ApO1xcbiAyNzE6XFx0XFxuIDI3MjpcXHRcXHRyZXNwID0ga3phbGxvYyhyZXNwX2xlbiwgR0ZQX0tFUk5FTCk7XFxuIDI3MzpcXHRcXHRpZiAoIXJlc3ApIHtcXG4gMjc0OlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuIDI3NTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMjc2OlxcdFxcdH1cXG4gMjc3OlxcdFxcbiAyNzg6XFx0XFx0cmV0ID0gbW04MXhfY21kX2dldF9kaXNhYmxlZF9jaGFubmVscyhtb3JzLCByZXNwLCByZXNwX2xlbik7XFxuIDI3OTpcXHRcXHRpZiAocmV0KVxcbiAyODA6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDI4MTpcXHRcXG4gMjgyOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKG1vcnNfczFnaHpfY2hhbm5lbHMpOyBpKyspIHtcXG4gMjgzOlxcdFxcdFxcdHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2ggPSBcXHUwMDI2bW9yc19zMWdoel9jaGFubmVsc1tpXTtcXG4gMjg0OlxcdFxcbiAyODU6XFx0XFx0XFx0aWYgKGNoLVxcdTAwM2VmbGFncyBcXHUwMDI2IElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEKVxcbiAyODY6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDI4NzpcXHRcXG4gMjg4OlxcdFxcdFxcdGNoLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+SUVFRTgwMjExX0NIQU5fUzFHX05PX1BSSU1BUlk7XFxuIDI4OTpcXHRcXHR9XFxuIDI5MDpcXHRcXG4gMjkxOlxcdFxcdGlmIChsZTMyX3RvX2NwdShyZXNwLVxcdTAwM2VuX2NoYW5uZWxzKSBcXHUwMDNlIEFSUkFZX1NJWkUobW9yc19zMWdoel9jaGFubmVscykpIHtcXG4gMjkyOlxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuIDI5MzpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMjk0OlxcdFxcdH1cXG4gMjk1OlxcdFxcbiAyOTY6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGxlMzJfdG9fY3B1KHJlc3AtXFx1MDAzZW5fY2hhbm5lbHMpOyBpKyspIHtcXG4gMjk3OlxcdFxcdFxcdHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2g7XFxuIDI5ODpcXHRcXHRcXHRzdHJ1Y3QgaG9zdF9jbWRfZGlzYWJsZWRfY2hhbm5lbF9lbnRyeSAqZW50cnkgPVxcbiAyOTk6XFx0XFx0XFx0XFx0XFx1MDAyNnJlc3AtXFx1MDAzZWNoYW5uZWxzW2ldO1xcbiAzMDA6XFx0XFxuIDMwMTpcXHRcXHRcXHRpZiAoZW50cnktXFx1MDAzZWJ3X21oeiAhPSAxKVxcbiAzMDI6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDMwMzpcXHRcXG4gMzA0OlxcdFxcdFxcdGNoID0gaWVlZTgwMjExX2dldF9jaGFubmVsX2toeihcXG4gMzA1OlxcdFxcdFxcdFxcdGh3LVxcdTAwM2V3aXBoeSxcXG4gMzA2OlxcdFxcdFxcdFxcdEtIWjEwMF9UT19LSFoobGUxNl90b19jcHUoZW50cnktXFx1MDAzZWZyZXFfMTAwa2h6KSkpO1xcbiAzMDc6XFx0XFx0XFx0aWYgKCFjaClcXG4gMzA4OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAzMDk6XFx0XFxuIDMxMDpcXHRcXHRcXHRjaC1cXHUwMDNlZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fUzFHX05PX1BSSU1BUlk7XFxuIDMxMTpcXHRcXHRcXHRkZXZfZGJnKG1vcnMtXFx1MDAzZWRldiwgXFxcInNldCBOT19QUklNQVJZIG9uICV1IEtIelxcXCIsXFxuIDMxMjpcXHRcXHRcXHRcXHRpZWVlODAyMTFfY2hhbm5lbF90b19raHooY2gpKTtcXG4gMzEzOlxcdFxcdH1cXG4gMzE0OlxcdFxcbiAzMTU6XFx0b3V0OlxcbiAzMTY6XFx0XFx0aWYgKHJldClcXG4gMzE3OlxcdFxcdFxcdGRldl9lcnIobW9ycy1cXHUwMDNlZGV2LCBcXFwiZmFpbGVkIHRvIHNldCBkaXNhYmxlZCBwcmltYXJ5IGNoYW5uZWxzXFxcIik7XFxuIDMxODpcXHRcXG4gMzE5OlxcdFxcdGtmcmVlKHJlc3ApO1xcbiAzMjA6XFx0fVxcbiAzMjE6XFx0XFxuIDMyMjpcXHRzdGF0aWMgaW50IG1tODF4X21hY19vcHNfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpXFxuIDMyMzpcXHR7XFxuIDMyNDpcXHRcXHRzdHJ1Y3QgbW04MXggKm1vcnMgPSBody1cXHUwMDNlcHJpdjtcXG4gMzI1OlxcdFxcbiAzMjY6XFx0XFx0bW9ycy1cXHUwMDNlc3RhcnRlZCA9IHRydWU7XFxuIDMyNzpcXHRcXHRyZXR1cm4gMDtcXG4gMzI4OlxcdH1cXG4gMzI5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNDoxNC45MDc4OTkyNTRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk3OTEzMTc2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBGdW5jdGlvbiBDYWxsIENvbnRleHQqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0IG9mIGBtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnNgLiBUbyBkbyB0aGlzLCBJJ20gZ29pbmcgdG8gdHJhY2sgZG93biB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUgY29kZS4gR2l2ZW4gdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggYSBzcGVjaWZpYyBkcml2ZXIsIEknbGwgZm9jdXMgbXkgc2VhcmNoIG9uIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9gIGRpcmVjdG9yeSwgd2hpY2ggaXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQuIEknbGwgdXNlIGBncmVwYCB0byBxdWlja2x5IHNjYW4gdGhlIGZpbGVzIGluIHRoYXQgZGlyZWN0b3J5IGZvciBpbnN0YW5jZXMgb2YgdGhlIGZ1bmN0aW9uIG5hbWUgaXRzZWxmLCBgbW04MXhfbWFjX2NoZWNrX2Z3X2Rpc2FibGVkX2NoYW5zYCwgYW5kIGFsc28gZm9yIGFueSByZWZlcmVuY2VzIHRvIGBkaXNhYmxlZF9jaGFuc2AsIGp1c3QgaW4gY2FzZSBpdCdzIHVzZWQgYXMgYSB2YXJpYWJsZSBvciBzdHJ1Y3R1cmUgbWVtYmVyIHJlbGF0ZWQgdG8gdGhlIHNhbWUgbG9naWMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIGhvdyB0aGUgZnVuY3Rpb24gaW50ZWdyYXRlcyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBtbTgxeCBkcml2ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0NDQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI0OjE2Ljg4NzAzNDA1MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU4NzE3NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGlzYWJsZWRfY2hhblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jPTU0MT1pbnQgbW04MXhfY21kX3NldF9mcmFnX3RocmVzaG9sZChzdHJ1Y3QgbW04MXggKm1vcnMsIHUzMiBmcmFnX3RocmVzaG9sZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTU1Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmQuYzo1NTM6aW50IG1tODF4X2NtZF9nZXRfZGlzYWJsZWRfY2hhbm5lbHMoXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmM6NTU0OlxcdHN0cnVjdCBtbTgxeCAqbW9ycywgc3RydWN0IGhvc3RfY21kX3Jlc3BfZ2V0X2Rpc2FibGVkX2NoYW5uZWxzICpyZXNwLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5jLTU1NS1cXHR1aW50IHJlc3BfbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kLmg9ODA9aW50IG1tODF4X2NtZF9zZXRfZnJhZ190aHJlc2hvbGQoc3RydWN0IG1tODF4ICptb3JzLCB1MzIgZnJhZ190aHJlc2hvbGQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oOjgxOmludCBtbTgxeF9jbWRfZ2V0X2Rpc2FibGVkX2NoYW5uZWxzKFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oOjgyOlxcdHN0cnVjdCBtbTgxeCAqbW9ycywgc3RydWN0IGhvc3RfY21kX3Jlc3BfZ2V0X2Rpc2FibGVkX2NoYW5uZWxzICpyZXNwLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZC5oLTgzLVxcdHVpbnQgcmVzcF9sZW4pO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kX2RlZnMuaD04NzA9c3RydWN0IGhvc3RfY21kX3JlcV9saV9zbGVlcCB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmRfZGVmcy5oLTg3NC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmRfZGVmcy5oOjg3NTpzdHJ1Y3QgaG9zdF9jbWRfZGlzYWJsZWRfY2hhbm5lbF9lbnRyeSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kX2RlZnMuaC04NzYtXFx0X19sZTE2IGZyZXFfMTAwa2h6O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kX2RlZnMuaC04NzktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kX2RlZnMuaDo4ODA6c3RydWN0IGhvc3RfY21kX3Jlc3BfZ2V0X2Rpc2FibGVkX2NoYW5uZWxzIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvbW1hbmRfZGVmcy5oLTg4MS1cXHRzdHJ1Y3QgaG9zdF9jbWRfaGVhZGVyIGhkcjtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZF9kZWZzLmgtODgzLVxcdF9fbGUzMiBuX2NoYW5uZWxzO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29tbWFuZF9kZWZzLmg6ODg0OlxcdHN0cnVjdCBob3N0X2NtZF9kaXNhYmxlZF9jaGFubmVsX2VudHJ5IGNoYW5uZWxzW107XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb21tYW5kX2RlZnMuaC04ODUtfSBfX3BhY2tlZDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM9MjM4PXN0YXRpYyBib29sIG1tODF4X3R4X2hfcHNfZmlsdGVyZWRfZm9yX3N0YShzdHJ1Y3QgbW04MXggKm1vcnMsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTI2MS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jOjI2MjpzdGF0aWMgdm9pZCBtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yNjMte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yNjYtXFx0c3RydWN0IG1tODF4ICptb3JzID0gaHctXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYzoyNjc6XFx0c3RydWN0IGhvc3RfY21kX3Jlc3BfZ2V0X2Rpc2FibGVkX2NoYW5uZWxzICpyZXNwO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjY4OlxcdHUzMiByZXNwX2xlbiA9IHNpemVvZihzdHJ1Y3QgaG9zdF9jbWRfZGlzYWJsZWRfY2hhbm5lbF9lbnRyeSkgKlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjY5LVxcdFxcdFxcdCAgICAgICBBUlJBWV9TSVpFKG1vcnNfczFnaHpfY2hhbm5lbHMpICtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjc3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6Mjc4OlxcdHJldCA9IG1tODF4X2NtZF9nZXRfZGlzYWJsZWRfY2hhbm5lbHMobW9ycywgcmVzcCwgcmVzcF9sZW4pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjc5LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTI5Ny1cXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6Mjk4OlxcdFxcdHN0cnVjdCBob3N0X2NtZF9kaXNhYmxlZF9jaGFubmVsX2VudHJ5ICplbnRyeSA9XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yOTktXFx0XFx0XFx0XFx1MDAyNnJlc3AtXFx1MDAzZWNoYW5uZWxzW2ldO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYz0yMTEyPXN0YXRpYyBpbnQgbW04MXhfbWFjX3Jlc3RhcnQoc3RydWN0IG1tODF4ICptb3JzKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTY2LVxcdGNsZWFyX2JpdChNTTgxWF9TVEFURV9SRUxPQURfRldfQUZURVJfU1RBUlQsIFxcdTAwMjZtb3JzLVxcdTAwM2VzdGF0ZV9mbGFncyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYzoyMTY3OlxcdG1tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFucyhtb3JzLVxcdTAwM2Vodyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTY4LVxcdGllZWU4MDIxMV9yZXN0YXJ0X2h3KG1vcnMtXFx1MDAzZWh3KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjQ6MTYuOTUyOTExMTM3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxMzM0MzgxOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmUsIHVzaW5nIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIE1vcnNlIE1pY3JvIERyaXZlciBGaXJtd2FyZSBDb250cm9sIEZsb3cqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBNb3JzZSBNaWNybyBkcml2ZXIuIE15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IHN1cnJvdW5kaW5nIHR3byBrZXkgZnVuY3Rpb25zOiBgbW04MXhfbWFjX2NoZWNrX2Z3X2Rpc2FibGVkX2NoYW5zYCBhbmQgYG1tODF4X21hY19yZXN0YXJ0YC4gVGhlc2UgYXJlIGNydWNpYWwgZm9yIG1hbmFnaW5nIGNoYW5uZWwgZGlzYWJsaW5nIGFuZCBwb3RlbnRpYWxseSByZXN0YXJ0aW5nIHRoZSBNQUMsIHNvIGtub3dpbmcgKndoZXJlKiBhbmQgKmhvdyogdGhleSdyZSBjYWxsZWQgaXMgZXNzZW50aWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGRyaXZlciBiZWhhdmlvciBhbmQgZGVidWdnaW5nIGFueSBpc3N1ZXMgcmVsYXRlZCB0byBjaGFubmVsIG1hbmFnZW1lbnQgb3IgTUFDIGluaXRpYWxpemF0aW9uL3JlY292ZXJ5LiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGludGVncmF0ZWQgd2l0aGluIHRoZSBkcml2ZXIncyBhcmNoaXRlY3R1cmUuIExvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zJyBjYWxsIHNpdGVzIHdpbGwgZ2l2ZSBtZSBpbnNpZ2h0IGludG8gd2hlbiBmaXJtd2FyZSBjaGVja3MgYXJlIHBlcmZvcm1lZCB0byBlbnN1cmUgb3BlcmF0aW9uLCBhbmQgd2hlbiB0aGUgcmVzdGFydCBvcGVyYXRpb25zIG1heSBvY2N1ciwgd2hpY2ggaXMgdGhlIHNvcnQgb2YgdGhpbmcgdGhhdCBjYW4gcHJvdmlkZSBnb29kIGNvbnRleHQgZm9yIGludmVzdGlnYXRpbmcgc3BlY2lmaWMgaGFyZHdhcmUgaXNzdWVzLCBvciBvcHRpbWl6YXRpb25zLiBMZXQncyBzdGFydCB0aGUgaHVudCBmb3IgY2FsbHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjE1LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjQ6MjEuMDg2MzUzOTY2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTg3NzM1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtbTgxeF9tYWNfcmVzdGFydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM9MjA3Nj1zdGF0aWMgdTMyIG1tODF4X2dldF9leHBlY3RlZF90aHJvdWdocHV0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMDk1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjA5NjpzdGF0aWMgdm9pZCBtbTgxeF9tYWNfcmVzdGFydF9jbGVhbnVwX2l0ZXIodm9pZCAqZGF0YSwgdTggKm1hYyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIwOTctXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjEwMi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jOjIxMDM6c3RhdGljIHZvaWQgbW04MXhfbWFjX3Jlc3RhcnRfY2xlYW51cChzdHJ1Y3QgbW04MXggKm1vcnMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTA0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjEwNi1cXHRcXHRcXHRcXHRcXHQgICAgSUVFRTgwMjExX0lGQUNFX0lURVJfTk9STUFMLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjEwNzpcXHRcXHRcXHRcXHRcXHQgICAgbW04MXhfbWFjX3Jlc3RhcnRfY2xlYW51cF9pdGVyLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjEwOC1cXHRcXHRcXHRcXHRcXHQgICAgTlVMTCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxMTEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYzoyMTEyOnN0YXRpYyBpbnQgbW04MXhfbWFjX3Jlc3RhcnQoc3RydWN0IG1tODF4ICptb3JzKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjExMy17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxNDItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYzoyMTQzOlxcdG1tODF4X21hY19yZXN0YXJ0X2NsZWFudXAobW9ycyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTQ0LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYz0yMTc1PXN0YXRpYyBpbnQgbW04MXhfbWFjX29wc19hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMTg1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjE4NjpcXHRcXHRyZXQgPSBtbTgxeF9tYWNfcmVzdGFydChtb3JzKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIxODctXFx0XFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYz0yMjY2PXN0YXRpYyB2b2lkIG1tODF4X3JlZ19ub3RpZmllcihzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMjc3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmM6MjI3ODpcXHRyZXQgPSBtbTgxeF9tYWNfcmVzdGFydChtb3JzKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jLTIyNzktXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjQ6MjEuMTU4MjM3Njg3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NDc2NTQwMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgbW04MXhgIE1BQyBEcml2ZXIncyBSZXN0YXJ0IE1lY2hhbmlzbSoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYG1tODF4X21hY19yZXN0YXJ0YCBmdW5jdGlvbi4gVGhlIGNvZGUgc2VlbXMgdG8gaW5kaWNhdGUgaXQncyBpbnZva2VkIGluIHR3byBkaXN0aW5jdCBjb250ZXh0czogZmlyc3QsIHdpdGhpbiBgbW04MXhfbWFjX29wc19hZGRfaW50ZXJmYWNlYC4gUmlnaHQsIHRoYXQncyBhIGNhbGxiYWNrIHdpdGhpbiB0aGUgbWFjODAyMTEgZnJhbWV3b3JrLCBzbyB0aGlzIHJlc3RhcnQgbGlrZWx5IGhhcHBlbnMgd2hlbiBhIG5ldyBuZXR3b3JrIGludGVyZmFjZSBpcyBhZGRlZC4gSW50ZXJlc3RpbmcuIFRoZSBzZWNvbmQgY2FsbCBjb21lcyBmcm9tIGBtbTgxeF9yZWdfbm90aWZpZXJgLCB3aGljaCBoYW5kbGVzIHJlZ3VsYXRvcnkgZG9tYWluIGNoYW5nZXMuIFNvLCBwb3RlbnRpYWxseSBhIHJlc3RhcnQgaXMgdHJpZ2dlcmVkIHdoZW4gcmVnaW9uIHNldHRpbmdzIGFyZSBtb2RpZmllZCwgd2hpY2ggbWFrZXMgc2Vuc2UuXG5cbk5vdywgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBiaWdnZXIgcGljdHVyZTogaG93IHRoZSBkZXZpY2UgaXRzZWxmIGdldHMgaW5pdGlhbGl6ZWQgaW4gdGhlIGZpcnN0IHBsYWNlLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gYGNvcmUuY2AgYW5kIGB1c2IuY2AgdG8gc2VlIHRoZSBkZXZpY2UgcHJvYmluZyBhbmQgcmVnaXN0cmF0aW9uIHByb2Nlc3Nlcy4gR290dGEgdW5kZXJzdGFuZCB0aGUgZGV2aWNlJ3MgbGlmZWN5Y2xlIGZyb20gdGhlIHZlcnkgYmVnaW5uaW5nIHRvIGVmZmVjdGl2ZWx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIHJlc3RhcnQgbG9naWMuIFRoaXMgaW5mb3JtYXRpb24gc2hvdWxkIGlsbHVtaW5hdGUgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBgbW04MXhfbWFjX3Jlc3RhcnRgIGFuZCB0aGUgZGV2aWNlJ3MgZm91bmRhdGlvbmFsIHNldHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM5NSwiT3V0cHV0VG9rZW5zIjo1NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI0OjIzLjcwNTg5NDIwN1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5Njg5NDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1tODF4X3Byb2JlfG1tODF4X3JlZ2lzdGVyfG1tODF4X3VzYl9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvdXNiLmM9NzE2PXN0YXRpYyB2b2lkIG1tODF4X3VyYl9jbGVhbnVwKHN0cnVjdCBtbTgxeCAqbW9ycylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvdXNiLmMtNzQ0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvdXNiLmM6NzQ1OnN0YXRpYyBpbnQgbW04MXhfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC91c2IuYy03NDYtXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC91c2IuYz05MjU9c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIG1tODF4X3VzYl9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC91c2IuYy05MjYtXFx0Lm5hbWUgPSBcXFwibW04MXhfdXNiXFxcIixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L3VzYi5jOjkyNzpcXHQucHJvYmUgPSBtbTgxeF91c2JfcHJvYmUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC91c2IuYy05MjgtXFx0LmRpc2Nvbm5lY3QgPSBtbTgxeF91c2JfZGlzY29ubmVjdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjQ6MjMuODE1NTg4MjY1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4Mzg1NzUzMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBVU0IgRHJpdmVyJ3MgUHJvYmUgRnVuY3Rpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoIHRoaXMgYG1tODF4X3VzYmAgZHJpdmVyLCBzcGVjaWZpY2FsbHkgZHVyaW5nIGRldmljZSBlbnVtZXJhdGlvbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgbW04MXhfdXNiX3Byb2JlYCBmdW5jdGlvbiB3aXRoaW4gdGhlIGB1c2IuY2AgZmlsZS4gVGhpcyBpcyB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnQgd2hlcmUgdGhlIGRyaXZlciBhdHRlbXB0cyB0byBpbml0aWFsaXplIGFuZCBjb25uZWN0IHdpdGggYSBuZXdseSBwbHVnZ2VkLWluIGRldmljZS4gSSdtIHRoaW5raW5nLCBieSBleGFtaW5pbmcgdGhpcyBmdW5jdGlvbiwgSSBzaG91bGQgYmUgYWJsZSB0byBnYWluIGluc2lnaHRzIGludG8gaG93IHRoZSBkcml2ZXIgaWRlbnRpZmllcyBhbmQgY29uZmlndXJlcyB0aGUgYG1tODF4YCBVU0IgZGV2aWNlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHRoZSBtYXRjaGluZyB0YWJsZSBvZiBkZXZpY2UgSURzLCByZXNvdXJjZSBhbGxvY2F0aW9uIChtZW1vcnksIElSUXMsIGV0Yy4pLCBhbmQgdGhlIHNldHVwIG9mIGVuZHBvaW50cy4gVW5kZXJzdGFuZGluZyB0aGUgcHJvYmUgcm91dGluZSBpcyBlc3NlbnRpYWwgZm9yIGRpYWdub3NpbmcgYW55IGRldmljZSBkZXRlY3Rpb24gb3IgaW5pdGlhbGl6YXRpb24gaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA5OCwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI0OjI1LjY1NDE2NjQ4NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTI5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC91c2IuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NDUsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NDU6XFx0c3RhdGljIGludCBtbTgxeF91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSxcXG4gNzQ2OlxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcXG4gNzQ3OlxcdHtcXG4gNzQ4OlxcdFxcdGludCByZXQ7XFxuIDc0OTpcXHRcXHRzdHJ1Y3QgbW04MXggKm1vcnM7XFxuIDc1MDpcXHRcXHRzdHJ1Y3QgbW04MXhfdXNiICptdXNiO1xcbiA3NTE6XFx0XFxuIDc1MjpcXHRcXHRtb3JzID0gbW04MXhfY29yZV9hbGxvYyhzaXplb2YoKm11c2IpLCBcXHUwMDI2aW50ZXJmYWNlLVxcdTAwM2VkZXYpO1xcbiA3NTM6XFx0XFx0aWYgKCFtb3JzKVxcbiA3NTQ6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDc1NTpcXHRcXG4gNzU2OlxcdFxcdG1vcnMtXFx1MDAzZWJ1c19vcHMgPSBcXHUwMDI2bW04MXhfdXNiX29wcztcXG4gNzU3OlxcdFxcdG1vcnMtXFx1MDAzZWJ1c190eXBlID0gTU04MVhfQlVTX1RZUEVfVVNCO1xcbiA3NTg6XFx0XFxuIDc1OTpcXHRcXHRtdXNiID0gKHN0cnVjdCBtbTgxeF91c2IgKiltb3JzLVxcdTAwM2VkcnZfcHJpdjtcXG4gNzYwOlxcdFxcdG11c2ItXFx1MDAzZXVkZXYgPSB1c2JfZ2V0X2RldihpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSkpO1xcbiA3NjE6XFx0XFx0bXVzYi1cXHUwMDNlaW50ZXJmYWNlID0gdXNiX2dldF9pbnRmKGludGVyZmFjZSk7XFxuIDc2MjpcXHRcXG4gNzYzOlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNm11c2ItXFx1MDAzZWxvY2spO1xcbiA3NjQ6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2bXVzYi1cXHUwMDNlYnVzX2xvY2spO1xcbiA3NjU6XFx0XFx0aW5pdF93YWl0cXVldWVfaGVhZChcXHUwMDI2bXVzYi1cXHUwMDNlcndfaW5fd2FpdCk7XFxuIDc2NjpcXHRcXHR1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgbW9ycyk7XFxuIDc2NzpcXHRcXG4gNzY4OlxcdFxcdHJldCA9IG1tODF4X3VzYl9kZXRlY3RfZW5kcG9pbnRzKG1vcnMsIGludGVyZmFjZSk7XFxuIDc2OTpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gNzcwOlxcdFxcdFxcdGdvdG8gZXJyX2NvcmVfZnJlZTtcXG4gNzcxOlxcdFxcbiA3NzI6XFx0XFx0c2V0X2JpdChNTTgxWF9VU0JfRkxBR19BVFRBQ0hFRCwgXFx1MDAyNm11c2ItXFx1MDAzZWZsYWdzKTtcXG4gNzczOlxcdFxcbiA3NzQ6XFx0XFx0cmV0ID0gbW04MXhfY29yZV9pbml0KG1vcnMpO1xcbiA3NzU6XFx0XFx0aWYgKHJldClcXG4gNzc2OlxcdFxcdFxcdGdvdG8gZXJyX3VyYl9jbGVhbnVwO1xcbiA3Nzc6XFx0XFxuIDc3ODpcXHRcXHRJTklUX1dPUksoXFx1MDAyNm1vcnMtXFx1MDAzZXVzYl9pcnFfd29yaywgbW04MXhfdXNiX2lycV93b3JrKTtcXG4gNzc5OlxcdFxcbiA3ODA6XFx0XFx0cmV0ID0gbW04MXhfdXNiX2ludF9lbmFibGUobW9ycyk7XFxuIDc4MTpcXHRcXHRpZiAocmV0KVxcbiA3ODI6XFx0XFx0XFx0Z290byBlcnJfY29yZV9kZWluaXQ7XFxuIDc4MzpcXHRcXG4gNzg0OlxcdFxcdHJldCA9IG1tODF4X2NvcmVfcmVnaXN0ZXIobW9ycyk7XFxuIDc4NTpcXHRcXHRpZiAocmV0KVxcbiA3ODY6XFx0XFx0XFx0Z290byBlcnJfdXNiX2ludF9zdG9wO1xcbiA3ODc6XFx0XFxuIDc4ODpcXHRcXHQvKiBVU0IgcmVxdWlyZXMgcmVtb3RlIHdha2V1cCBmdW5jdGlvbmFsaXR5IGZvciBzdXNwZW5kICovXFxuIDc4OTpcXHRcXHRjbGVhcl9iaXQoTU04MVhfVVNCX0ZMQUdfU1VTUEVOREVELCBcXHUwMDI2bXVzYi1cXHUwMDNlZmxhZ3MpO1xcbiA3OTA6XFx0XFx0bXVzYi1cXHUwMDNlaW50ZXJmYWNlLVxcdTAwM2VuZWVkc19yZW1vdGVfd2FrZXVwID0gMTtcXG4gNzkxOlxcdFxcdHVzYl9lbmFibGVfYXV0b3N1c3BlbmQobXVzYi1cXHUwMDNldWRldik7XFxuIDc5MjpcXHRcXHRwbV9ydW50aW1lX3NldF9hdXRvc3VzcGVuZF9kZWxheShcXHUwMDI2bXVzYi1cXHUwMDNldWRldi1cXHUwMDNlZGV2LFxcbiA3OTM6XFx0XFx0XFx0XFx0XFx0XFx0IFBNX1JVTlRJTUVfQVVUT1NVU1BFTkRfREVMQVlfTVMpO1xcbiA3OTQ6XFx0XFxuIDc5NTpcXHRcXHR1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UoaW50ZXJmYWNlKTtcXG4gNzk2OlxcdFxcdHJldHVybiAwO1xcbiA3OTc6XFx0XFxuIDc5ODpcXHRlcnJfdXNiX2ludF9zdG9wOlxcbiA3OTk6XFx0XFx0bW04MXhfdXNiX2ludF9zdG9wKG1vcnMpO1xcbiA4MDA6XFx0ZXJyX2NvcmVfZGVpbml0OlxcbiA4MDE6XFx0XFx0bW04MXhfY29yZV9kZWluaXQobW9ycyk7XFxuIDgwMjpcXHRlcnJfdXJiX2NsZWFudXA6XFxuIDgwMzpcXHRcXHRtbTgxeF91cmJfY2xlYW51cChtb3JzKTtcXG4gODA0OlxcdGVycl9jb3JlX2ZyZWU6XFxuIDgwNTpcXHRcXHRtbTgxeF9jb3JlX2ZyZWUobW9ycyk7XFxuIDgwNjpcXHRcXHR1c2JfcHV0X2ludGYoaW50ZXJmYWNlKTtcXG4gODA3OlxcdFxcdHVzYl9wdXRfZGV2KGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKSk7XFxuIDgwODpcXHRcXHRyZXR1cm4gcmV0O1xcbiA4MDk6XFx0fVxcbiA4MTA6XFx0XFxuIDgxMTpcXHRzdGF0aWMgdm9pZCBtbTgxeF91c2JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKVxcbiA4MTI6XFx0e1xcbiA4MTM6XFx0XFx0c3RydWN0IG1tODF4ICptb3JzID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpO1xcbiA4MTQ6XFx0XFx0c3RydWN0IG1tODF4X3VzYiAqbXVzYiA9IChzdHJ1Y3QgbW04MXhfdXNiICopbW9ycy1cXHUwMDNlZHJ2X3ByaXY7XFxuIDgxNTpcXHRcXHRpbnQgbWlub3IgPSBpbnRlcmZhY2UtXFx1MDAzZW1pbm9yO1xcbiA4MTY6XFx0XFx0c3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSk7XFxuIDgxNzpcXHRcXG4gODE4OlxcdFxcdGlmICh1ZGV2LVxcdTAwM2VzdGF0ZSA9PSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQpIHtcXG4gODE5OlxcdFxcdFxcdGNsZWFyX2JpdChNTTgxWF9VU0JfRkxBR19BVFRBQ0hFRCwgXFx1MDAyNm11c2ItXFx1MDAzZWZsYWdzKTtcXG4gODIwOlxcdFxcdFxcdHNldF9iaXQoTU04MVhfU1RBVEVfQ0hJUF9VTlJFU1BPTlNJVkUsIFxcdTAwMjZtb3JzLVxcdTAwM2VzdGF0ZV9mbGFncyk7XFxuIDgyMTpcXHRcXHRcXHRkZXZfZGJnKG1vcnMtXFx1MDAzZWRldiwgXFxcIlVTQiBzdWRkZW5seSB1bnBsdWdnZWRcXFwiKTtcXG4gODIyOlxcdFxcdH1cXG4gODIzOlxcdFxcbiA4MjQ6XFx0XFx0dXNiX2Rpc2FibGVfYXV0b3N1c3BlbmQodWRldik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI0OjI1LjY1NDMyMTg2NFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzE2OTY2MjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZTpcblxuKipDb3JlIEluaXRpYWxpemF0aW9uIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBoZXJlLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIHdoZXJlIGRvZXMgaXQgYWxsICpyZWFsbHkqIHN0YXJ0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSdzIHNldHVwIGJlZm9yZSBhbnl0aGluZyBlbHNlLiBUaGUga2V5IGVudHJ5IHBvaW50cyBJJ20gY29uc2lkZXJpbmcgYXJlIGBtbTgxeF9jb3JlX2luaXRgLCBgbW04MXhfY29yZV9yZWdpc3RlcmAsIGFuZCBgbW04MXhfbWFjX2luaXRgLiBFYWNoIG9mIHRoZXNlIGNvdWxkIGJlIHRoZSBjcml0aWNhbCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHRyYWNlIHRocm91Z2ggdGhlc2UgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgdGhlIGluaXRpYWxpemF0aW9uIGZsb3cgYW5kIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMsIHNvIEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCB0aGUgbW9zdCBsaWtlbHkgYW5kIHdvcmsgYmFja3dhcmRzIGlmIG5lZWRlZC4gTGV0J3Mgc2VlIGhvdyB0aGUgY29yZSAqaXRzZWxmKiBpcyBicm91Z2h0IG9ubGluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2OTUsIk91dHB1dFRva2VucyI6NTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI0OjI5LjM3MTI5MDczWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjAzMDEzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtbTgxeF9jb3JlX3JlZ2lzdGVyfG1tODF4X2NvcmVfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jPTExPXN0YXRpYyBpbnQgbW04MXhfY29yZV9hdHRhY2hfcmVncyhzdHJ1Y3QgbW04MXggKm1vcnMpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0zNS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYzozNjpzdGF0aWMgdm9pZCBtbTgxeF9jb3JlX2luaXRfbWFjX2FkZHIoc3RydWN0IG1tODF4ICptb3JzKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTM3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jPTY1PUVYUE9SVF9TWU1CT0xfR1BMKG1tODF4X2NvcmVfYWxsb2MpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTY2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjY3OmludCBtbTgxeF9jb3JlX2luaXQoc3RydWN0IG1tODF4ICptb3JzKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTY4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTczLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjc0OlxcdG1tODF4X2NvcmVfaW5pdF9tYWNfYWRkcihtb3JzKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy03NS1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTEwNS19XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6MTA2OkVYUE9SVF9TWU1CT0xfR1BMKG1tODF4X2NvcmVfaW5pdCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtMTA3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjEwODppbnQgbW04MXhfY29yZV9yZWdpc3RlcihzdHJ1Y3QgbW04MXggKm1vcnMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmMtMTA5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTExMS19XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM6MTEyOkVYUE9SVF9TWU1CT0xfR1BMKG1tODF4X2NvcmVfcmVnaXN0ZXIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTExMy1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oPTQ0OT1zdHJ1Y3QgbW04MXggKm1tODF4X2NvcmVfYWxsb2Moc2l6ZV90IHByaXZfc2l6ZSwgc3RydWN0IGRldmljZSAqZGV2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuaDo0NTA6aW50IG1tODF4X2NvcmVfaW5pdChzdHJ1Y3QgbW04MXggKm1vcnMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oOjQ1MTppbnQgbW04MXhfY29yZV9yZWdpc3RlcihzdHJ1Y3QgbW04MXggKm1vcnMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5oLTQ1Mi12b2lkIG1tODF4X2NvcmVfdW5yZWdpc3RlcihzdHJ1Y3QgbW04MXggKm1vcnMpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9zZGlvLmM9NTE3PXN0YXRpYyBpbnQgbW04MXhfc2Rpb19wcm9iZShzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9zZGlvLmMtNTUxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvc2Rpby5jOjU1MjpcXHRyZXQgPSBtbTgxeF9jb3JlX2luaXQobW9ycyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9zZGlvLmMtNTUzLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L3NkaW8uYy01NTktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9zZGlvLmM6NTYwOlxcdHJldCA9IG1tODF4X2NvcmVfcmVnaXN0ZXIobW9ycyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9zZGlvLmMtNTYxLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L3VzYi5jPTc0NT1zdGF0aWMgaW50IG1tODF4X3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC91c2IuYy03NzMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC91c2IuYzo3NzQ6XFx0cmV0ID0gbW04MXhfY29yZV9pbml0KG1vcnMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvdXNiLmMtNzc1LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L3VzYi5jLTc4My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L3VzYi5jOjc4NDpcXHRyZXQgPSBtbTgxeF9jb3JlX3JlZ2lzdGVyKG1vcnMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvdXNiLmMtNzg1LVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI0OjI5LjQzMzMyNTQ3MloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjU3NjU2ODc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gdGhlIG1tODF4IENvcmUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgbW04MXhgIHdpcmVsZXNzIGRyaXZlciBjb2RlIGFnYWluLiBJIHdhbnQgdG8gcmVmcmVzaCBteSBtZW1vcnksIHNwZWNpZmljYWxseSBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmNgLiBMZXQncyB6ZXJvIGluIG9uIGxpbmVzIDYwIHRocm91Z2ggMTIwLiBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgb3ZlcmFsbCBmdW5jdGlvbiBzdHJ1Y3R1cmUgaGVyZSwgcGFydGljdWxhcmx5IGF0IGhvdyB0aGUgY29yZSBtb2R1bGUgaXMgaW5pdGlhbGl6aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBhcmUgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgaGFyZHdhcmUuIFRoZXJlIHNob3VsZCBiZSBzb21lIGNyaXRpY2FsIGNvbmZpZ3VyYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gc3RlcHMgaGFwcGVuaW5nIGluIHRoaXMgc2VjdGlvbi4gSSBleHBlY3QgdG8gc2VlIHNvbWUgcmVnaXN0ZXIgYWNjZXNzIG9yIHBlcmhhcHMgc29tZSByZXNvdXJjZSBhbGxvY2F0aW9uLiBUaGUgZHJpdmVyIGlzIGxpa2VseSBkZWFsaW5nIHdpdGggaXRzIGhhcmR3YXJlJ3MgaW50ZXJydXB0cywgYW5kIGl0IHByb2JhYmx5IGhhcyBzb21lIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBJIHNob3VsZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyB0aW1pbmcgY29uc2lkZXJhdGlvbnMuIEdpdmVuIHRoZSBzZWN0aW9uIEkndmUgY2hvc2VuLCBJIGFtIGV4cGVjdGluZyBhbiBpbnRlcnBsYXkgb2YgbG93LWxldmVsIGhhcmR3YXJlIGludGVyYWN0aW9uIGFuZCBoaWdoZXItbGV2ZWwgYWJzdHJhY3Rpb24uIEkgd2lsbCBrZWVwIGFuIGV5ZSBvdXQgZm9yIGFueSB1bnVzdWFsIGRhdGEgc3RydWN0dXJlcyBvciBlcnJvciBoYW5kbGluZyByb3V0aW5lcyBpbiB0aGlzIHNlY3Rpb24uIEhvcGVmdWxseSwgSSB3aWxsIHNlZSBlbm91Z2ggY29kZSB0aGF0IEkgY2FuIHBpZWNlIHRvZ2V0aGVyIHRoZSBiYXNpY3Mgb2YgdGhpcyBtb2R1bGUncyBvcGVyYXRpb24uIEkgYW0gZ29pbmcgdG8gc2VlIGlmIGFueSBjb2RlIGNvbW1lbnRzIGNvdWxkIGhlbHAgbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MjE3LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjQ6MzIuMDkwOTg1ODhaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzg1MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDYwOlxcdFxcbiAgNjE6XFx0c3RydWN0IG1tODF4ICptbTgxeF9jb3JlX2FsbG9jKHNpemVfdCBwcml2X3NpemUsIHN0cnVjdCBkZXZpY2UgKmRldilcXG4gIDYyOlxcdHtcXG4gIDYzOlxcdFxcdHJldHVybiBtbTgxeF9tYWNfYWxsb2MocHJpdl9zaXplLCBkZXYpO1xcbiAgNjQ6XFx0fVxcbiAgNjU6XFx0RVhQT1JUX1NZTUJPTF9HUEwobW04MXhfY29yZV9hbGxvYyk7XFxuICA2NjpcXHRcXG4gIDY3OlxcdGludCBtbTgxeF9jb3JlX2luaXQoc3RydWN0IG1tODF4ICptb3JzKVxcbiAgNjg6XFx0e1xcbiAgNjk6XFx0XFx0aW50IHJldDtcXG4gIDcwOlxcdFxcbiAgNzE6XFx0XFx0c2V0X2JpdChNTTgxWF9TVEFURV9DSElQX1VOUkVTUE9OU0lWRSwgXFx1MDAyNm1vcnMtXFx1MDAzZXN0YXRlX2ZsYWdzKTtcXG4gIDcyOlxcdFxcdHNldF9iaXQoTU04MVhfU1RBVEVfUkVMT0FEX0ZXX0FGVEVSX1NUQVJULCBcXHUwMDI2bW9ycy1cXHUwMDNlc3RhdGVfZmxhZ3MpO1xcbiAgNzM6XFx0XFxuICA3NDpcXHRcXHRtbTgxeF9jb3JlX2luaXRfbWFjX2FkZHIobW9ycyk7XFxuICA3NTpcXHRcXG4gIDc2OlxcdFxcdHJldCA9IG1tODF4X2NvcmVfYXR0YWNoX3JlZ3MobW9ycyk7XFxuICA3NzpcXHRcXHRpZiAocmV0KVxcbiAgNzg6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gIDc5OlxcdFxcbiAgODA6XFx0XFx0bW9ycy1cXHUwMDNlY2hpcF93cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKFxcXCJjaGlwX3dxXFxcIik7XFxuICA4MTpcXHRcXHRpZiAoIW1vcnMtXFx1MDAzZWNoaXBfd3EpXFxuICA4MjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gIDgzOlxcdFxcbiAgODQ6XFx0XFx0bW9ycy1cXHUwMDNlbmV0X3dxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoXFxcIm5ldF93cVxcXCIpO1xcbiAgODU6XFx0XFx0aWYgKCFtb3JzLVxcdTAwM2VuZXRfd3EpIHtcXG4gIDg2OlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuICA4NzpcXHRcXHRcXHRnb3RvIGVycl9jaGlwX3dxO1xcbiAgODg6XFx0XFx0fVxcbiAgODk6XFx0XFxuICA5MDpcXHRcXHRyZXQgPSBtbTgxeF9oaWZfaW5pdChtb3JzKTtcXG4gIDkxOlxcdFxcdGlmIChyZXQpXFxuICA5MjpcXHRcXHRcXHRnb3RvIGVycl93cXM7XFxuICA5MzpcXHRcXG4gIDk0OlxcdFxcdHJldHVybiAwO1xcbiAgOTU6XFx0XFxuICA5NjpcXHRlcnJfd3FzOlxcbiAgOTc6XFx0XFx0Zmx1c2hfd29ya3F1ZXVlKG1vcnMtXFx1MDAzZW5ldF93cSk7XFxuICA5ODpcXHRcXHRkZXN0cm95X3dvcmtxdWV1ZShtb3JzLVxcdTAwM2VuZXRfd3EpO1xcbiAgOTk6XFx0XFxuIDEwMDpcXHRlcnJfY2hpcF93cTpcXG4gMTAxOlxcdFxcdGZsdXNoX3dvcmtxdWV1ZShtb3JzLVxcdTAwM2VjaGlwX3dxKTtcXG4gMTAyOlxcdFxcdGRlc3Ryb3lfd29ya3F1ZXVlKG1vcnMtXFx1MDAzZWNoaXBfd3EpO1xcbiAxMDM6XFx0XFxuIDEwNDpcXHRcXHRyZXR1cm4gcmV0O1xcbiAxMDU6XFx0fVxcbiAxMDY6XFx0RVhQT1JUX1NZTUJPTF9HUEwobW04MXhfY29yZV9pbml0KTtcXG4gMTA3OlxcdFxcbiAxMDg6XFx0aW50IG1tODF4X2NvcmVfcmVnaXN0ZXIoc3RydWN0IG1tODF4ICptb3JzKVxcbiAxMDk6XFx0e1xcbiAxMTA6XFx0XFx0cmV0dXJuIG1tODF4X21hY19yZWdpc3Rlcihtb3JzKTtcXG4gMTExOlxcdH1cXG4gMTEyOlxcdEVYUE9SVF9TWU1CT0xfR1BMKG1tODF4X2NvcmVfcmVnaXN0ZXIpO1xcbiAxMTM6XFx0XFxuIDExNDpcXHR2b2lkIG1tODF4X2NvcmVfdW5yZWdpc3RlcihzdHJ1Y3QgbW04MXggKm1vcnMpXFxuIDExNTpcXHR7XFxuIDExNjpcXHRcXHRtbTgxeF9tYWNfdW5yZWdpc3Rlcihtb3JzKTtcXG4gMTE3OlxcdH1cXG4gMTE4OlxcdEVYUE9SVF9TWU1CT0xfR1BMKG1tODF4X2NvcmVfdW5yZWdpc3Rlcik7XFxuIDExOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjQ6MzIuMDkxMzc0NDFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg5Mjg5MDMwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBtbTgxeCBNQUMgUmVnaXN0ZXIgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIGBtbTgxeF9tYWNfcmVnaXN0ZXJgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBtYWMuY2AgaW4gdGhlIGBtb3JzZW1pY3JvYCB3aXJlbGVzcyBkcml2ZXIgZGlyZWN0b3J5LiBNeSBmaXJzdCBzdGVwIGlzIG9idmlvdXNseSB0byBnbyBhbmQgZmluZCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuY2AgYW5kIHplcm8gaW4gb24gdGhlIGBtbTgxeF9tYWNfcmVnaXN0ZXJgIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBNQUMgbGF5ZXIuIEZyb20gdGhhdCBzcG90IEknbGwgYmUgYWJsZSB0byBncmFzcCBob3cgdGhpcyByZWdpc3RyYXRpb24gcHJvY2VzcyBmaXRzIGludG8gdGhlIG92ZXJhbGwgZHJpdmVyIGFyY2hpdGVjdHVyZSwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSwgYW5kIGFueSBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcy4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGNydWNpYWwgbGluZXMgYW5kIGFueSBwb2ludHMgb2YgcG9zc2libGUgY29udGVudGlvbiBvciBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIG1vZHVsZXMuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTc0MTIsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI0OjMzLjk4NDI2OTUyM1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg2Njc3MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW04MXhfbWFjX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9jb3JlLmM9MTA4PWludCBtbTgxeF9jb3JlX3JlZ2lzdGVyKHN0cnVjdCBtbTgxeCAqbW9ycylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2NvcmUuYy0xMDkte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jOjExMDpcXHRyZXR1cm4gbW04MXhfbWFjX3JlZ2lzdGVyKG1vcnMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvY29yZS5jLTExMS19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jPTIzNjA9c3RhdGljIHZvaWQgbW04MXhfbWFjX3N0YWxlX3R4X3N0YXR1c190aW1lcl9pbml0KHN0cnVjdCBtbTgxeCAqbW9ycylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmMtMjM2NS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jOjIzNjY6aW50IG1tODF4X21hY19yZWdpc3RlcihzdHJ1Y3QgbW04MXggKm1vcnMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuYy0yMzY3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmg9NTE9c3RydWN0IG1tODF4ICptbTgxeF9tYWNfYWxsb2Moc2l6ZV90IHByaXZfc2l6ZSwgc3RydWN0IGRldmljZSAqZGV2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5oOjUyOmludCBtbTgxeF9tYWNfcmVnaXN0ZXIoc3RydWN0IG1tODF4ICptb3JzKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5oLTUzLXZvaWQgbW04MXhfbWFjX2ZyZWUoc3RydWN0IG1tODF4ICptb3JzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjQ6MzQuMDYyOTQ0NDAxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNjEwMTkxMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHJlYWRpbmcgYW5kIHByb2Nlc3NpbmcgdGhlIHByb3ZpZGVkIHRleHQ6XG5cbioqRGl2aW5nIGludG8gdGhlIE1BQyBSZWdpc3RlciBEZWZpbml0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgTUFDIHJlZ2lzdGVyIGRlZmluaXRpb24uIFRoZSBjb2RlIHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBgbW04MXhfbWFjX3JlZ2lzdGVyYCwgYW5kIHRoZSBmaWxlIGlzIGBtYWMuY2AuIE9rYXksIHNvIHRoYXQgbWVhbnMgSSdtIHByb2JhYmx5IGxvb2tpbmcgYXQgdGhlIGNvcmUgc3RydWN0dXJlIGRlZmluaXRpb24gZm9yIHRoZSBNQUMgaGFyZHdhcmUgcmVnaXN0ZXJzIHdpdGhpbiB0aGlzIHBhcnRpY3VsYXIgZHJpdmVyLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBmaWVsZCBkZWZpbml0aW9ucywgYml0IHBvc2l0aW9ucywgYW5kIGRlc2NyaXB0aW9ucyB0aGF0IGRldGFpbCBob3cgdGhlIGhhcmR3YXJlIGlzIGNvbnRyb2xsZWQgYW5kIG1vbml0b3JlZC4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2sgZm9yIHRoZSBkZXZpY2UncyBNQUMgZnVuY3Rpb25hbGl0eS4gTm93LCBsZXQncyBzZWUgaG93IHRoZXkndmUgc3RydWN0dXJlZCBpdOKApiBJJ20gZXNwZWNpYWxseSBrZWVuIHRvIHNlZSBob3cgdGhleSd2ZSBoYW5kbGVkIHBvdGVudGlhbCBiaXRmaWVsZHMgZm9yIHNwZWVkLCBvciBpZiB0aGV5J3ZlIHVzZWQgc29tZSBvdGhlciBhcHByb2FjaC4gVGhpcyBpcyBnb2luZyB0byBiZSBnb29kIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxODEyNSwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI0OjM2LjEyMzk2NjQyOVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjgzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMzY1LFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMzY1OlxcdFxcbjIzNjY6XFx0aW50IG1tODF4X21hY19yZWdpc3RlcihzdHJ1Y3QgbW04MXggKm1vcnMpXFxuMjM2NzpcXHR7XFxuMjM2ODpcXHRcXHRpbnQgcmV0O1xcbjIzNjk6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBtb3JzLVxcdTAwM2VodztcXG4yMzcwOlxcdFxcbjIzNzE6XFx0XFx0bW9ycy1cXHUwMDNldHhfcG93ZXJfbWJtID0gSU5UX01BWDtcXG4yMzcyOlxcdFxcdG1vcnMtXFx1MDAzZXR4X21heF9wb3dlcl9tYm0gPSBJTlRfTUFYO1xcbjIzNzM6XFx0XFx0bW9ycy1cXHUwMDNlcnRzX3RocmVzaG9sZCA9IElFRUU4MDIxMV9NQVhfUlRTX1RIUkVTSE9MRDtcXG4yMzc0OlxcdFxcbjIzNzU6XFx0XFx0cmV0ID0gbW04MXhfcHNfaW5pdChtb3JzKTtcXG4yMzc2OlxcdFxcdGlmIChyZXQpXFxuMjM3NzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjIzNzg6XFx0XFxuMjM3OTpcXHRcXHRtbTgxeF9tYWNfY29uZmlnX2h3KG1vcnMpO1xcbjIzODA6XFx0XFx0bW04MXhfbWFjX2h3X3NjYW5faW5pdChtb3JzKTtcXG4yMzgxOlxcdFxcdG1tODF4X21hY19zdGFsZV90eF9zdGF0dXNfdGltZXJfaW5pdChtb3JzKTtcXG4yMzgyOlxcdFxcbjIzODM6XFx0XFx0cmV0ID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KGh3KTtcXG4yMzg0OlxcdFxcdGlmIChyZXQpIHtcXG4yMzg1OlxcdFxcdFxcdGRldl9lcnIobW9ycy1cXHUwMDNlZGV2LCBcXFwiaWVlZTgwMjExX3JlZ2lzdGVyX2h3IGZhaWxlZCAlZFxcXCIsIHJldCk7XFxuMjM4NjpcXHRcXHRcXHRtbTgxeF9tYWNfdW5yZWdpc3Rlcihtb3JzKTtcXG4yMzg3OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMjM4ODpcXHRcXHR9XFxuMjM4OTpcXHRcXG4yMzkwOlxcdFxcdG1tODF4X3JjX2luaXQobW9ycyk7XFxuMjM5MTpcXHRcXG4yMzkyOlxcdFxcdC8qXFxuMjM5MzpcXHRcXHQgKiBBdCB0aGlzIHN0YWdlLCB3ZSBrbm93IGJ1cyBhbmQgcGFnZXIgc3lzdGVtIGludGVycnVwdHMgYXJlIGVuYWJsZWQuXFxuMjM5NDpcXHRcXHQgKiBUcmlnZ2VyIHRoZSByZWNlaXZlIHdvcmtxdWV1ZSB0byBkcmFpbiBhbnkgaW5jb21pbmcgY2hpcC10by1ob3N0XFxuMjM5NTpcXHRcXHQgKiBwZW5kaW5nIHBhY2tldHMgYmVlbiBwdXNoZWQgaW4gdGhlIHBlcmlvZCBiZXR3ZWVuIHRoZSBmaXJtd2FyZVxcbjIzOTY6XFx0XFx0ICogaW5pdGlhbGl6YXRpb24gYW5kIGludGVycnVwdHMgYmVpbmcgZW5hYmxlZC5cXG4yMzk3OlxcdFxcdCAqL1xcbjIzOTg6XFx0XFx0c2V0X2JpdChNTTgxWF9ISUZfRVZUX1JYX1BFTkQsIFxcdTAwMjZtb3JzLVxcdTAwM2VoaWYuZXZlbnRfZmxhZ3MpO1xcbjIzOTk6XFx0XFx0cXVldWVfd29yayhtb3JzLVxcdTAwM2VjaGlwX3dxLCBcXHUwMDI2bW9ycy1cXHUwMDNlaGlmX3dvcmspO1xcbjI0MDA6XFx0XFxuMjQwMTpcXHRcXHRyZXR1cm4gcmV0O1xcbjI0MDI6XFx0fVxcbjI0MDM6XFx0XFxuMjQwNDpcXHR2b2lkIG1tODF4X21hY191bnJlZ2lzdGVyKHN0cnVjdCBtbTgxeCAqbW9ycylcXG4yNDA1OlxcdHtcXG4yNDA2OlxcdFxcdG1tODF4X3BzX2Rpc2FibGUobW9ycyk7XFxuMjQwNzpcXHRcXHRtbTgxeF9yY19kZWluaXQobW9ycyk7XFxuMjQwODpcXHRcXHRtbTgxeF9tYWNfaHdfc2Nhbl9kZXN0cm95KG1vcnMpO1xcbjI0MDk6XFx0XFxuMjQxMDpcXHRcXHRpZWVlODAyMTFfc3RvcF9xdWV1ZXMobW9ycy1cXHUwMDNlaHcpO1xcbjI0MTE6XFx0XFx0aWVlZTgwMjExX3VucmVnaXN0ZXJfaHcobW9ycy1cXHUwMDNlaHcpO1xcbjI0MTI6XFx0XFxuMjQxMzpcXHRcXHRtbTgxeF9oaWZfZmx1c2hfdHhfZGF0YShtb3JzKTtcXG4yNDE0OlxcdFxcdG1tODF4X2hpZl9mbHVzaF9jbWRzKG1vcnMpO1xcbjI0MTU6XFx0XFx0bW04MXhfc3RhbGVfdHhfc3RhdHVzX3RpbWVyX2ZpbmlzaChtb3JzKTtcXG4yNDE2OlxcdFxcdG1tODF4X3BzX2ZpbmlzaChtb3JzKTtcXG4yNDE3OlxcdFxcbjI0MTg6XFx0XFx0a2ZyZWUobW9ycy1cXHUwMDNlbWNhc3RfZmlsdGVyKTtcXG4yNDE5OlxcdH1cXG4yNDIwOlxcdFxcbjI0MjE6XFx0c3RydWN0IG1tODF4ICptbTgxeF9tYWNfYWxsb2Moc2l6ZV90IHByaXZfc2l6ZSwgc3RydWN0IGRldmljZSAqZGV2KVxcbjI0MjI6XFx0e1xcbjI0MjM6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9odyAqaHc7XFxuMjQyNDpcXHRcXHRzdHJ1Y3QgbW04MXggKm1vcnM7XFxuMjQyNTpcXHRcXG4yNDI2OlxcdFxcdGh3ID0gaWVlZTgwMjExX2FsbG9jX2h3KHNpemVvZigqbW9ycykgKyBwcml2X3NpemUsIFxcdTAwMjZtbTgxeF9vcHMpO1xcbjI0Mjc6XFx0XFx0aWYgKCFodykge1xcbjI0Mjg6XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJpZWVlODAyMTFfYWxsb2NfaHcgZmFpbGVkXFxcXHJcXFxcblxcXCIpO1xcbjI0Mjk6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMjQzMDpcXHRcXHR9XFxuMjQzMTpcXHRcXG4yNDMyOlxcdFxcdFNFVF9JRUVFODAyMTFfREVWKGh3LCBkZXYpO1xcbjI0MzM6XFx0XFx0bWVtc2V0KGh3LVxcdTAwM2Vwcml2LCAwLCBzaXplb2YoKm1vcnMpKTtcXG4yNDM0OlxcdFxcbjI0MzU6XFx0XFx0bW9ycyA9IGh3LVxcdTAwM2Vwcml2O1xcbjI0MzY6XFx0XFx0bW9ycy1cXHUwMDNlaHcgPSBodztcXG4yNDM3OlxcdFxcdG1vcnMtXFx1MDAzZWRldiA9IGRldjtcXG4yNDM4OlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNm1vcnMtXFx1MDAzZWNtZF9sb2NrKTtcXG4yNDM5OlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNm1vcnMtXFx1MDAzZWNtZF93YWl0KTtcXG4yNDQwOlxcdFxcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXFx1MDAyNm1vcnMtXFx1MDAzZXR4X2VtcHR5X3dhaXRxKTtcXG4yNDQxOlxcdFxcbjI0NDI6XFx0XFx0cmV0dXJuIG1vcnM7XFxuMjQ0MzpcXHR9XFxuMjQ0NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjQ6MzYuMTI0MDk1OTQ5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5ODA0MDIzODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGaXJtd2FyZSBDaGFubmVsIENoZWNrKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnMobW9ycy1cdTAwM2VodylgIGZ1bmN0aW9uLiBUaGUgY29kZSBzYXlzIGl0IGdldHMgY2FsbGVkIGR1cmluZyBgbW04MXhfbWFjX3Jlc3RhcnRgLiBUaGF0J3MgdGhlIGtleTogd2hlbiBkb2VzIGBtbTgxeF9tYWNfcmVzdGFydGAgKml0c2VsZiogZ2V0IHRyaWdnZXJlZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy4gTGV0J3Mgc2VlLi4uIGEgcXVpY2sgc2NhbiBvZiBgbWFjLmNgIGFyb3VuZCBsaW5lcyAyMTc1IHRvIDIyODUgc2hvdWxkIGdpdmUgbWUgdGhlIGFuc3dlci4gSSdtIGxvb2tpbmcgZm9yIHRoZSBjYWxsIHNpdGVzIG9mIGBtbTgxeF9tYWNfcmVzdGFydGAgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGF0IHJlZ2lvbiBvZiB0aGUgZmlsZSB0byB1bmRlcnN0YW5kIHRoZSBjaXJjdW1zdGFuY2VzIHVuZGVyIHdoaWNoIHRoZSBmaXJtd2FyZSBjaGFubmVsIGNoZWNrIHJ1bnMuIFRoaXMgc2hvdWxkIHRlbGwgbWUgdGhlIGNvbnRleHQgb2YgdGhpcyBmdW5jdGlvbidzIG9wZXJhdGlvbiBhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5Njg0LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNDo0MS4xMDQ1MDA4ODVaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3ODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjE3MCxcbiAgXCJMaW5lQ291bnRcIjogMTE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIxNzA6XFx0ZXhpdDpcXG4yMTcxOlxcdFxcdG1tODF4X3BzX2VuYWJsZShtb3JzKTtcXG4yMTcyOlxcdFxcdHJldHVybiByZXQ7XFxuMjE3MzpcXHR9XFxuMjE3NDpcXHRcXG4yMTc1OlxcdHN0YXRpYyBpbnQgbW04MXhfbWFjX29wc19hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbjIxNzY6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpXFxuMjE3NzpcXHR7XFxuMjE3ODpcXHRcXHRpbnQgcmV0ID0gMDtcXG4yMTc5OlxcdFxcdHN0cnVjdCBtbTgxeCAqbW9ycyA9IGh3LVxcdTAwM2Vwcml2O1xcbjIxODA6XFx0XFx0c3RydWN0IG1tODF4X3ZpZiAqbW9yc192aWYgPSAoc3RydWN0IG1tODF4X3ZpZiAqKXZpZi1cXHUwMDNlZHJ2X3ByaXY7XFxuMjE4MTpcXHRcXG4yMTgyOlxcdFxcdGlmICh0ZXN0X2JpdChNTTgxWF9TVEFURV9SRUxPQURfRldfQUZURVJfU1RBUlQsIFxcdTAwMjZtb3JzLVxcdTAwM2VzdGF0ZV9mbGFncykpIHtcXG4yMTgzOlxcdFxcdFxcdGRldl9pbmZvKG1vcnMtXFx1MDAzZWRldiwgXFxcIlJlc3RhcnRpbmcgY2hpcCB3aXRoIHJlZ2RvbTogJXNcXFwiLFxcbjIxODQ6XFx0XFx0XFx0XFx0IG1vcnMtXFx1MDAzZWNvdW50cnkpO1xcbjIxODU6XFx0XFxuMjE4NjpcXHRcXHRcXHRyZXQgPSBtbTgxeF9tYWNfcmVzdGFydChtb3JzKTtcXG4yMTg3OlxcdFxcdFxcdGlmIChyZXQpIHtcXG4yMTg4OlxcdFxcdFxcdFxcdGRldl9lcnIobW9ycy1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHJlc3RhcnQgY2hpcFxcXCIpO1xcbjIxODk6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4yMTkwOlxcdFxcdFxcdH1cXG4yMTkxOlxcdFxcbjIxOTI6XFx0XFx0XFx0LypcXG4yMTkzOlxcdFxcdFxcdCAqIG1hY19yZXN0YXJ0IHdpbGwgdHJpZ2dlciBpZWVlODAyMTFfaHdfcmVzdGFydCBhbmRcXG4yMTk0OlxcdFxcdFxcdCAqIGFkZF9pbnRlcmZhY2Ugd2lsbCByZS1lbnRlci4ganVzdCBleGl0IGhlcmUgaW5zdGVhZC5cXG4yMTk1OlxcdFxcdFxcdCAqL1xcbjIxOTY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjE5NzpcXHRcXHR9XFxuMjE5ODpcXHRcXG4yMTk5OlxcdFxcdHZpZi1cXHUwMDNlZHJpdmVyX2ZsYWdzIHw9IElFRUU4MDIxMV9WSUZfQkVBQ09OX0ZJTFRFUjtcXG4yMjAwOlxcdFxcdG1vcnNfdmlmLVxcdTAwM2Vtb3JzID0gbW9ycztcXG4yMjAxOlxcdFxcbjIyMDI6XFx0XFx0cmV0ID0gbW04MXhfY21kX2FkZF9pZihtb3JzLCBcXHUwMDI2bW9yc192aWYtXFx1MDAzZWlkLCB2aWYtXFx1MDAzZWFkZHIsIHZpZi1cXHUwMDNldHlwZSk7XFxuMjIwMzpcXHRcXHRpZiAocmV0KSB7XFxuMjIwNDpcXHRcXHRcXHRkZXZfZXJyKG1vcnMtXFx1MDAzZWRldiwgXFxcIm1tODF4X2NtZF9hZGRfaWYgZmFpbGVkICVkXFxcIiwgcmV0KTtcXG4yMjA1OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMjIwNjpcXHRcXHR9XFxuMjIwNzpcXHRcXG4yMjA4OlxcdFxcdGlmIChtb3JzX3ZpZi1cXHUwMDNlaWQgXFx1MDAzZT0gQVJSQVlfU0laRShtb3JzLVxcdTAwM2V2aWZzKSkge1xcbjIyMDk6XFx0XFx0XFx0ZGV2X2Vycihtb3JzLVxcdTAwM2VkZXYsIFxcXCJ2aWZfaWQgaXMgdG9vIGxhcmdlICV1XFxcIiwgbW9yc192aWYtXFx1MDAzZWlkKTtcXG4yMjEwOlxcdFxcdFxcdHJldCA9IC1FT1BOT1RTVVBQO1xcbjIyMTE6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4yMjEyOlxcdFxcdH1cXG4yMjEzOlxcdFxcbjIyMTQ6XFx0XFx0aWYgKG1vcnNfdmlmLVxcdTAwM2VpZCAhPSAobW9yc192aWYtXFx1MDAzZWlkIFxcdTAwMjYgTU04MVhfVFhfQ09ORl9GTEFHU19WSUZfSURfTUFTSykpIHtcXG4yMjE1OlxcdFxcdFxcdGRldl9lcnIobW9ycy1cXHUwMDNlZGV2LCBcXFwiaW52YWxpZCB2aWZfaWQgJXVcXFwiLCBtb3JzX3ZpZi1cXHUwMDNlaWQpO1xcbjIyMTY6XFx0XFx0XFx0cmV0ID0gLUVPUE5PVFNVUFA7XFxuMjIxNzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjIyMTg6XFx0XFx0fVxcbjIyMTk6XFx0XFxuMjIyMDpcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIobW9ycy1cXHUwMDNldmlmc1ttb3JzX3ZpZi1cXHUwMDNlaWRdLCB2aWYpO1xcbjIyMjE6XFx0XFxuMjIyMjpcXHRcXHRpZiAodmlmLVxcdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKVxcbjIyMjM6XFx0XFx0XFx0bW04MXhfbWFjX2JlYWNvbl9pbml0KG1vcnNfdmlmKTtcXG4yMjI0OlxcdFxcbjIyMjU6XFx0XFx0cmV0ID0gbW04MXhfY21kX2dldF9jYXBhYmlsaXRpZXMobW9ycywgbW9yc192aWYtXFx1MDAzZWlkLCBcXHUwMDI2bW9ycy1cXHUwMDNlZndfY2Fwcyk7XFxuMjIyNjpcXHRcXHRpZiAocmV0KSB7XFxuMjIyNzpcXHRcXHRcXHRkZXZfZXJyKG1vcnMtXFx1MDAzZWRldixcXG4yMjI4OlxcdFxcdFxcdFxcdFxcXCJtbTgxeF9jbWRfZ2V0X2NhcGFiaWxpdGllcyBmYWlsZWQgZm9yIHZpZiAlZFxcXCIsXFxuMjIyOTpcXHRcXHRcXHRcXHRtb3JzX3ZpZi1cXHUwMDNlaWQpO1xcbjIyMzA6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4yMjMxOlxcdFxcdH1cXG4yMjMyOlxcdFxcbjIyMzM6XFx0XFx0aWVlZTgwMjExX3dha2VfcXVldWVzKG1vcnMtXFx1MDAzZWh3KTtcXG4yMjM0OlxcdFxcdHJldHVybiByZXQ7XFxuMjIzNTpcXHR9XFxuMjIzNjpcXHRcXG4yMjM3OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyBtbTgxeF9vcHMgPSB7XFxuMjIzODpcXHRcXHQuc3RhcnQgPSBtbTgxeF9tYWNfb3BzX3N0YXJ0LFxcbjIyMzk6XFx0XFx0LnN0b3AgPSBtbTgxeF9tYWNfb3BzX3N0b3AsXFxuMjI0MDpcXHRcXHQuY29uZmlnID0gbW04MXhfbWFjX29wc19jb25maWcsXFxuMjI0MTpcXHRcXHQud2FrZV90eF9xdWV1ZSA9IGllZWU4MDIxMV9oYW5kbGVfd2FrZV90eF9xdWV1ZSxcXG4yMjQyOlxcdFxcdC50eCA9IG1tODF4X21hY19vcHNfdHgsXFxuMjI0MzpcXHRcXHQuYWRkX2ludGVyZmFjZSA9IG1tODF4X21hY19vcHNfYWRkX2ludGVyZmFjZSxcXG4yMjQ0OlxcdFxcdC5yZW1vdmVfaW50ZXJmYWNlID0gbW04MXhfbWFjX29wc19yZW1vdmVfaW50ZXJmYWNlLFxcbjIyNDU6XFx0XFx0LmNvbmZpZ3VyZV9maWx0ZXIgPSBtbTgxeF9tYWNfb3BzX2NvbmZpZ3VyZV9maWx0ZXIsXFxuMjI0NjpcXHRcXHQuc3RhX3N0YXRlID0gbW04MXhfbWFjX29wc19zdGFfc3RhdGUsXFxuMjI0NzpcXHRcXHQuZmx1c2ggPSBtbTgxeF9tYWNfb3BzX2ZsdXNoLFxcbjIyNDg6XFx0XFx0LnNldF9mcmFnX3RocmVzaG9sZCA9IG1tODF4X21hY19zZXRfZnJhZ190aHJlc2hvbGQsXFxuMjI0OTpcXHRcXHQuc2V0X3J0c190aHJlc2hvbGQgPSBtbTgxeF9tYWNfb3BzX3NldF9ydHNfdGhyZXNob2xkLFxcbjIyNTA6XFx0XFx0LnN0YV9zdGF0aXN0aWNzID0gbW04MXhfbWFjX29wc19zdGFfc3RhdGlzdGljcyxcXG4yMjUxOlxcdFxcdC5nZXRfZXhwZWN0ZWRfdGhyb3VnaHB1dCA9IG1tODF4X2dldF9leHBlY3RlZF90aHJvdWdocHV0LFxcbjIyNTI6XFx0XFx0Lmh3X3NjYW4gPSBtbTgxeF9tYWNfb3BzX2h3X3NjYW4sXFxuMjI1MzpcXHRcXHQuY2FuY2VsX2h3X3NjYW4gPSBtbTgxeF9tYWNfb3BzX2NhbmNlbF9od19zY2FuLFxcbjIyNTQ6XFx0XFx0LmdldF90eHBvd2VyID0gbW04MXhfbWFjX29wc19nZXRfdHhwb3dlcixcXG4yMjU1OlxcdFxcdC5ic3NfaW5mb19jaGFuZ2VkID0gbW04MXhfbWFjX29wc19ic3NfaW5mb19jaGFuZ2VkLFxcbjIyNTY6XFx0XFx0LnByZXBhcmVfbXVsdGljYXN0ID0gbW04MXhfbWFjX29wc19wcmVwYXJlX211bHRpY2FzdCxcXG4yMjU3OlxcdFxcdC5jb25mX3R4ID0gbW04MXhfbWFjX29wc19jb25mX3R4LFxcbjIyNTg6XFx0XFx0LmFtcGR1X2FjdGlvbiA9IG1tODF4X21hY19vcHNfYW1wZHVfYWN0aW9uLFxcbjIyNTk6XFx0XFx0LnNldF9rZXkgPSBtbTgxeF9tYWNfb3BzX3NldF9rZXksXFxuMjI2MDpcXHRcXHQuYWRkX2NoYW5jdHggPSBpZWVlODAyMTFfZW11bGF0ZV9hZGRfY2hhbmN0eCxcXG4yMjYxOlxcdFxcdC5yZW1vdmVfY2hhbmN0eCA9IGllZWU4MDIxMV9lbXVsYXRlX3JlbW92ZV9jaGFuY3R4LFxcbjIyNjI6XFx0XFx0LmNoYW5nZV9jaGFuY3R4ID0gaWVlZTgwMjExX2VtdWxhdGVfY2hhbmdlX2NoYW5jdHgsXFxuMjI2MzpcXHRcXHQuc3dpdGNoX3ZpZl9jaGFuY3R4ID0gaWVlZTgwMjExX2VtdWxhdGVfc3dpdGNoX3ZpZl9jaGFuY3R4LFxcbjIyNjQ6XFx0fTtcXG4yMjY1OlxcdFxcbjIyNjY6XFx0c3RhdGljIHZvaWQgbW04MXhfcmVnX25vdGlmaWVyKHN0cnVjdCB3aXBoeSAqd2lwaHksXFxuMjI2NzpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdClcXG4yMjY4OlxcdHtcXG4yMjY5OlxcdFxcdGludCByZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI0OjQxLjEwNDY0MDIzNVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTM0MjY2ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIGZvciBTeXprYWxsZXIgRnV6emluZyBvZiB0aGUgbW04MXggRHJpdmVyKipcblxuT2theSwgc28gYG1tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFuc2AgaXMgdGhlIGZ1bmN0aW9uIG9mIGludGVyZXN0IGhlcmUsIHRyaWdnZXJlZCB3aGVuIGFuIGludGVyZmFjZSBpcyBhZGRlZCwgb3IgdGhyb3VnaCByZWdpc3RlciBub3RpZmllcnMgb3IgcmVzdGFydHMuIFRoaXMgaXMgZm9yIE1vcnNlIE1pY3JvIE1NODF4IHdpcmVsZXNzIGRldmljZXMsIHdoaWNoIGlzIGdyZWF0IGJlY2F1c2UgaXQgc3VwcG9ydHMgYm90aCBVU0IgKGBDT05GSUdfTU04MVhfVVNCYCkgYW5kIFNESU8gKGBDT05GSUdfTU04MVhfU0RJT2ApLiBUaGUga2V5IHF1ZXN0aW9uIGluIG15IG1pbmQgaXMsIGNhbiB0aGlzIGJlIGVmZmVjdGl2ZWx5IGZ1enplZCB3aXRoIHN5emthbGxlcj8gVGhlIGFuc3dlciBpcyBsaWtlbHkgeWVzLCBzaW5jZSBzeXprYWxsZXIgaXMga25vd24gdG8gaGF2ZSBleGNlbGxlbnQgVVNCIGRyaXZlciBmdXp6aW5nIGNhcGFiaWxpdGllcyB2aWEgZHVtbXlfaGNkLCByYXctZ2FkZ2V0LCBhbmQgVVNCIGVtdWxhdGlvbi5cblxuU2luY2Ugc3l6a2FsbGVyIGNhbiBkZWZpbml0ZWx5IGZ1enogVVNCIGRyaXZlcnMsIHRoZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB3aGF0IGhhcHBlbnMgd2hlbiBhIFVTQiBkZXZpY2Ugd2l0aCBWSUQgMHgzMjViIChNTTgxWF9WRU5ET1JfSUQpIGlzIGNvbm5lY3RlZC4gVGhpcyB0cmlnZ2VycyBgbW04MXhfdXNiX3Byb2JlYC4gTm93LCBkb2VzIGBtbTgxeF91c2JfcHJvYmVgIHJlcXVpcmUgZmlybXdhcmUgb3IgZG9lcyBpdCBkaXJlY3RseSBjb21tdW5pY2F0ZSB3aXRoIHRoZSBVU0IgZGV2aWNlPyBJJ20gZ29pbmcgdG8gZGlnIGludG8gdGhlIGNvZGUsIHNwZWNpZmljYWxseSBjaGVja2luZyBgbW04MXhfY29yZV9hdHRhY2hfcmVnc2AsIGZpcm13YXJlIGxvYWRpbmcsIGFuZCByZWxhdGVkIGZpbGVzLiBMZXQgbWUgc3RhcnQgbG9va2luZyBhdCBgZncuY2AsIGBody5jYCwgYW5kIGBjb3JlLmNgIHRvIHVuZGVyc3RhbmQgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MgYW5kIGlkZW50aWZ5IHBvdGVudGlhbCBmdXp6aW5nIGVudHJ5IHBvaW50cy4gVGhpcyBjb3VsZCBiZSBwcm9taXNpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxODg5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjQ6NDUuMjM4OTA5ODM0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzkzNTQ1NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVxdWVzdF9maXJtd2FyZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvZncuYz02OTE9aW50IG1tODF4X2Z3X2luaXQoc3RydWN0IG1tODF4ICptb3JzLCBib29sIHJlc2V0KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTcyMi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L2Z3LmM6NzIzOlxcdHJldCA9IHJlcXVlc3RfZmlybXdhcmUoXFx1MDAyNmJjZiwgYmNmX3BhdGgsIG1vcnMtXFx1MDAzZWRldik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9mdy5jLTcyNC1cXHRpZiAocmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI0OjQ1LjQxODI2OTM4MloiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NTkxOTMwMDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIGZvciBPdXQtb2YtQm91bmRzIEFjY2VzcyBpbiBtbTgxeCBGaXJtd2FyZSBEaXNhYmxlZCBDaGFubmVscyBDaGVjayoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBgbW04MXhfbWFjX2NoZWNrX2Z3X2Rpc2FibGVkX2NoYW5zYCBmdW5jdGlvbiBhbmQgdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSB3ZSBoYXZlIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgaGVyZTogYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgcmVhZC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgaW4gaG93IHRoZSBmdW5jdGlvbiBoYW5kbGVzIHRoZSBudW1iZXIgb2YgZGlzYWJsZWQgY2hhbm5lbHMgcmVwb3J0ZWQgYnkgdGhlIGRldmljZSBmaXJtd2FyZS5cblxuVGhlIGNvZGUgYWxsb2NhdGVzIGEgYnVmZmVyLCBgcmVzcGAsIHRvIHJlY2VpdmUgdGhlIGRpc2FibGVkIGNoYW5uZWwgaW5mb3JtYXRpb24uIFRoZSBzaXplIG9mIHRoaXMgYnVmZmVyIGlzIGJhc2VkIG9uIHRoZSBrbm93biBzaXplIG9mIGBtb3JzX3MxZ2h6X2NoYW5uZWxzYCAod2hpY2ggbG9va3MgbGlrZSBhbiBhcnJheSBvZiBgaWVlZTgwMjExX2NoYW5uZWxgIHN0cnVjdHVyZXMpIGFuZCBzb21lIGhlYWRlciBpbmZvcm1hdGlvbi4gVGhlbiwgaXQgY2FsbHMgYG1tODF4X2NtZF9nZXRfZGlzYWJsZWRfY2hhbm5lbHNgIHRvIHBvcHVsYXRlIGByZXNwYC5cblxuVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhlIHNlY29uZCBsb29wLiBJdCBpdGVyYXRlcyB0aHJvdWdoIHRoZSBgcmVzcC1cdTAwM2VjaGFubmVsc2AgYXJyYXksIHRoZSBzaXplIG9mIHdoaWNoIGlzIGRldGVybWluZWQgYnkgYHJlc3AtXHUwMDNlbl9jaGFubmVsc2AsIGEgdmFsdWUgdGhhdCBjb21lcyBkaXJlY3RseSBmcm9tIHRoZSBkZXZpY2UgZmlybXdhcmUuIFRoZSBwYXRjaCBpbmNsdWRlcyBhIGNydWNpYWwgY2hlY2s6IGl0IHZlcmlmaWVzIHRoYXQgYHJlc3AtXHUwMDNlbl9jaGFubmVsc2AgZG9lc24ndCBleGNlZWQgdGhlIGtub3duIGFycmF5IHNpemUgb2YgYG1vcnNfczFnaHpfY2hhbm5lbHNgLiAqVGhhdCdzKiB0aGUgZml4LiBXaXRob3V0IHRoaXMgY2hlY2ssIHRoZSBsb29wIGNvdWxkIHJlYWQgYmV5b25kIHRoZSBhbGxvY2F0ZWQgYnVmZmVyLCBsZWFkaW5nIHRvIGEgY3Jhc2ggb3IsIHdvcnNlLCBhcmJpdHJhcnkgbWVtb3J5IGRpc2Nsb3N1cmUgb3IgY29ycnVwdGlvbi5cblxuVGhlIHZ1bG5lcmFiaWxpdHkgc3RlbXMgZnJvbSB0aGUgZmFjdCB0aGF0IGZpcm13YXJlIGRhdGEgaXMgYmVpbmcgdHJ1c3RlZCB3aXRob3V0IGEgc2FuaXR5IGNoZWNrLiBJZiB0aGUgZmlybXdhcmUgcmV0dXJucyBhIHZhbHVlIGZvciBgbl9jaGFubmVsc2AgdGhhdCdzIGxhcmdlciB0aGFuIHdoYXQgdGhlIGRyaXZlciBleHBlY3RzLCB3ZSBoYXZlIGEgcHJvYmxlbS5cblxuTm93LCBsZXQncyB0aGluayBhYm91dCByZWFjaGFiaWxpdHkuIElzIHRoaXMgc29tZXRoaW5nIHRoYXQgY2FuIGJlIHByYWN0aWNhbGx5IGV4cGxvaXRlZD8gVGhpcyBpc24ndCBqdXN0IGEgdGhlb3JldGljYWwgaXNzdWUuIFdlIG5lZWQgdG8gY29uc2lkZXIgaG93IGFjY2Vzc2libGUgdGhpcyBjb2RlIHBhdGggaXMuXG5cblRoZSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgaXNuJ3Qgc29tZXRoaW5nIHRoYXQncyBhdXRvbWF0aWNhbGx5IG5vbi1yZWFjaGFibGUgb3IgdW5leGVjdXRhYmxlLiBIb3dldmVyLCB0aGUgTU04MVggZHJpdmVyICpkb2VzKiBzdXBwb3J0IFVTQiAoYENPTkZJR19NTTgxWF9VU0JgKS4gVGhpcyBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIHRoaXMgbWVhbnMgaXQgY2FuIHBvdGVudGlhbGx5IGJlIGVtdWxhdGVkIHZpYSBVU0IgZ2FkZ2V0IChSYXcgR2FkZ2V0IC8gRHVtbXkgSENEKSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKS5cblxuQSBsaXR0bGUgbW9yZSBkaWdnaW5nIHJldmVhbHMgdGhhdCB5ZXMsIFVTQiBkcml2ZXJzICphcmUqIGNvbnNpZGVyZWQgcmVhY2hhYmxlLCBhY2NvcmRpbmcgdG8gdGhlIGNyaXRlcmlhIGRlZmluZWQuIFZpcnR1YWwgYnVzZXMgbGlrZSBVU0IgZ2FkZ2V0IGFyZSBleHBsaWNpdGx5IGxpc3RlZCBhcyBhbiBlbnRyeS5cblxuU28sIHRoaXMgbG9va3MgbGlrZSBhICpwb3RlbnRpYWxseSBleHBsb2l0YWJsZSogdnVsbmVyYWJpbGl0eSwgYXNzdW1pbmcgd2UgY2FuIGNvbnRyb2wgdGhlIGZpcm13YXJlJ3MgcmVzcG9uc2UgYW5kIGdldCBpdCB0byByZXR1cm4gYSBtYWxmb3JtZWQgYG5fY2hhbm5lbHNgIHZhbHVlLiBUaGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgd2UgY2FuIGNvbnRyb2wgdGhhdCByZXR1cm4gdmFsdWUuXG5cblRoZXJlZm9yZSwgbGV0J3MgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL0tjb25maWdgIGFuZCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9LY29uZmlnYCB0byBzZWUgd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIG5lZWRlZCBmb3IgVVNCIHN1cHBvcnQgdG8gY29uZmlybSB0aGlzIHJlYWNoYWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI2MzIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjQ6NTIuMDEwMjAyNTExWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyOTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFdMQU5fVkVORE9SX01PUlNFTUlDUk9cXG4gICAzOlxcdFxcdGJvb2wgXFxcIk1vcnNlIE1pY3JvIGRldmljZXNcXFwiXFxuICAgNDpcXHRcXHRkZWZhdWx0IHlcXG4gICA1OlxcdFxcdGhlbHBcXG4gICA2OlxcdFxcdCAgSWYgeW91IGhhdmUgYSB3aXJlbGVzcyBjYXJkIGJlbG9uZ2luZyB0byB0aGlzIGNsYXNzLCBzYXkgWS5cXG4gICA3OlxcdFxcbiAgIDg6XFx0XFx0ICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJ3QgZGlyZWN0bHkgYWZmZWN0IHRoZVxcbiAgIDk6XFx0XFx0ICBrZXJuZWw6IHNheWluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsIHRoZVxcbiAgMTA6XFx0XFx0ICBxdWVzdGlvbnMgYWJvdXQgdGhlc2UgY2FyZHMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGwgYmUgYXNrZWQgZm9yXFxuICAxMTpcXHRcXHQgIHlvdXIgc3BlY2lmaWMgY2FyZCBpbiB0aGUgZm9sbG93aW5nIHF1ZXN0aW9ucy5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0aWYgV0xBTl9WRU5ET1JfTU9SU0VNSUNST1xcbiAgMTQ6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L0tjb25maWdcXFwiXFxuICAxNTpcXHRlbmRpZiAjIFdMQU5fVkVORE9SX01PUlNFTUlDUk9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjQ6NTIuMDEwMjc4ODEyWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3MTM3MTEwODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBNTTgxeCBXaXJlbGVzcyBEcml2ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGlzIE1vcnNlIE1pY3JvIE1NODF4IHdpcmVsZXNzIGRyaXZlci4gRmlyc3QsIEknbSBjaGVja2luZyB0aGUgYEtjb25maWdgIGZpbGUgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIHRoZSBtYWluIGBNTTgxWGAgY29uZmlndXJhdGlvbiBvcHRpb24uIEl0J3MgYSB0cmlzdGF0ZSBvcHRpb24sIGJ1dCBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGlmIGBDT01QSUxFX1RFU1RgIGlzIGRlZmluZWQuIE1ha2VzIHNlbnNlIOKAkyBwcm9iYWJseSBmb3IgdGVzdCBidWlsZHMuIEl0IGRlcGVuZHMgb24gYE1BQzgwMjExYCwgYXMgZXhwZWN0ZWQgZm9yIGEgd2lyZWxlc3MgZHJpdmVyLCBhbmQgaXQgc2VsZWN0cyBgRldfTE9BREVSYCBhbmQgYENSQzdgLCBpbmRpY2F0aW5nIGl0IHJlbGllcyBvbiBmaXJtd2FyZSBsb2FkaW5nIGFuZCBsaWtlbHkgdXNlcyBDUkM3IGZvciBlcnJvciBkZXRlY3Rpb24uIFRoZSBoZWxwIHRleHQgY29uZmlybXMgdGhhdCB0aGlzIGlzIHRoZSBiYXNlIG1vZHVsZSBmb3IgTU04MXh4IGNoaXBzZXQgc3VwcG9ydC5cblxuVGhlbiwgdGhlcmUgYXJlIGBNTTgxWF9VU0JgIGFuZCBgTU04MVhfU0RJT2Agb3B0aW9ucy4gVGhleSdyZSBhbHNvIHRyaXN0YXRlLCBtZWFuaW5nIHRoZXkgY2FuIGJlIGJ1aWx0IGFzIGEgbW9kdWxlIG9yIGJ1aWx0IGluLiBCb3RoIGRlcGVuZCBvbiBgTUFDODAyMTFgIGFuZCBzcGVjaWZpYyBpbnRlcmZhY2UgZGVwZW5kZW5jaWVzOiBgVVNCYCBmb3IgdGhlIFVTQiBpbnRlcmZhY2UgYW5kIGBNTUNgIGZvciB0aGUgU0RJTyBpbnRlcmZhY2UsIHJlc3BlY3RpdmVseS4gVGhleSBib3RoIHNlbGVjdCBgTU04MVhgLCBtZWFuaW5nIHRoZSBiYXNlIGRyaXZlciBpcyByZXF1aXJlZCBmb3IgZWl0aGVyIGludGVyZmFjZS4gVGhpcyBpcyBhIHByZXR0eSBzdGFuZGFyZCBzZXR1cC5cblxuTm93LCBJJ2xsIHF1aWNrbHkgZ2xhbmNlIGF0IHRoZSBgTWFrZWZpbGVgIGluIHRoZSBzYW1lIGRpcmVjdG9yeSB0byBjb25maXJtIHdoaWNoIG9iamVjdCBmaWxlcyBhcmUgYWN0dWFsbHkgYnVpbHQgYmFzZWQgb24gdGhlc2UgY29uZmlndXJhdGlvbnMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBkcml2ZXIgaXMgc3RydWN0dXJlZCBhbmQgd2hhdCB0aGUgcmVzdWx0aW5nIGJpbmFyaWVzIHdpbGwgbG9vayBsaWtlLiBOZWVkIHRvIGVuc3VyZSB0aGUgYnVpbGQgZW52aXJvbm1lbnQgc3VwcG9ydHMgdGhpcyBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDM3MSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI0OjU2LjcyMzk5MTkzNFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0XFxuICAgMzpcXHRvYmotJChDT05GSUdfTU04MVgpICs9IG1tODF4X2NvcmUub1xcbiAgIDQ6XFx0XFxuICAgNTpcXHRtbTgxeF9jb3JlLXkgKz0gY29yZS5vXFxuICAgNjpcXHRtbTgxeF9jb3JlLXkgKz0gbWFjLm9cXG4gICA3OlxcdG1tODF4X2NvcmUteSArPSBody5vXFxuICAgODpcXHRtbTgxeF9jb3JlLXkgKz0gZncub1xcbiAgIDk6XFx0bW04MXhfY29yZS15ICs9IGNvbW1hbmQub1xcbiAgMTA6XFx0bW04MXhfY29yZS15ICs9IHBzLm9cXG4gIDExOlxcdG1tODF4X2NvcmUteSArPSBza2JxLm9cXG4gIDEyOlxcdG1tODF4X2NvcmUteSArPSB5YXBzX2h3Lm9cXG4gIDEzOlxcdG1tODF4X2NvcmUteSArPSB5YXBzLm9cXG4gIDE0OlxcdG1tODF4X2NvcmUteSArPSByYy5vXFxuICAxNTpcXHRtbTgxeF9jb3JlLXkgKz0gbW1yYy5vXFxuICAxNjpcXHRcXG4gIDE3OlxcdG9iai0kKENPTkZJR19NTTgxWF9VU0IpICs9IG1tODF4X3VzYi5vXFxuICAxODpcXHRtbTgxeF91c2IteSArPSB1c2Iub1xcbiAgMTk6XFx0XFxuICAyMDpcXHRvYmotJChDT05GSUdfTU04MVhfU0RJTykgKz0gbW04MXhfc2Rpby5vXFxuICAyMTpcXHRtbTgxeF9zZGlvLXkgKz0gc2Rpby5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI0OjU2LjcyNDA1Mzc4NFoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MjQ4ODcyOTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBNTTgxeCBXaXJlbGVzcyBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgc2VlIHRoYXQgdGhlIGBtYWMub2Agb2JqZWN0IGZpbGUgaXMgcGFydCBvZiBgbW04MXhfY29yZS5vYCwgd2hpY2ggaXMgb25seSBjb21waWxlZCBpZiBgQ09ORklHX01NODFYYCBpcyBlbmFibGVkLiBUaGF0IGluIHR1cm4sIGlzIHNlbGVjdGVkIGJ5IGBDT05GSUdfTU04MVhfVVNCYC4gSSdtIGFsc28gbm90aW5nIHRoZSBkZXBlbmRlbmNpZXMgaGVyZTogYENPTkZJR19NTTgxWF9VU0JgIHJlcXVpcmVzIGBNQUM4MDIxMWAsIGBVU0JgLCBhbmQgYFdMQU5fVkVORE9SX01PUlNFTUlDUk9gLiBHb29kLlxuXG5UaGUgY3JpdGljYWwgZnVuY3Rpb24gYmVpbmcgbW9kaWZpZWQgYXBwZWFycyB0byBiZSBgbW04MXhfbWFjX2NoZWNrX2Z3X2Rpc2FibGVkX2NoYW5zYC4gIEl0J3Mgc3RhdGljLCBzbyBpbmxpbmluZyBpcyBhIHBvc3NpYmlsaXR5LCBvciBpdCBtYXkgb25seSBiZSBjYWxsZWQgaW50ZXJuYWxseS4gT2theSwgbGV0J3Mgc2VlIGhvdyBpdCdzIHVzZWQuIFJpZ2h0LCBgbW04MXhfbWFjX3Jlc3RhcnRgIGNhbGxzIGl0LiBBbmQgbG9va2luZyBmdXJ0aGVyIHVwIHRoZSBjYWxsIGNoYWluLCBgbW04MXhfbWFjX29wc19hZGRfaW50ZXJmYWNlYCBhbmQgYG1tODF4X3JlZ19ub3RpZmllcmAgY2FsbCBgbW04MXhfbWFjX3Jlc3RhcnRgLiBUaGUgVVNCIHByb2JlIGZ1bmN0aW9uLCBgbW04MXhfdXNiX3Byb2JlYCwgd2hpY2ggaXMgaW4gYHVzYi5jYCwgaXMgdGhlIGluaXRpYWxpemF0aW9uIGFuZCByZWdpc3RyYXRpb24gcG9pbnQuXG5cblRvIHJlY2FwLCBhbmQgZm9yIGZ1enppbmcsIEknbGwgbmVlZCB0byByZW1lbWJlciB0aG9zZSBlbnRyeSBwb2ludHM6IGBtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnNgLCBgbW04MXhfbWFjX3Jlc3RhcnRgLCBgbW04MXhfbWFjX29wc19hZGRfaW50ZXJmYWNlYCwgYW5kIGBtbTgxeF9yZWdfbm90aWZpZXJgLlxuXG5Ob3csIHRoZSBjb25maWd1cmF0aW9uIGFzcGVjdHMuIFRvIGVuYWJsZSB0aGlzIGNvZGUgcGF0aCBhbmQgZnV6eiBpdCwgSSdsbCBuZWVkIHRvIHNldCB0aGVzZSBjb25maWd1cmF0aW9uIG9wdGlvbnM6IGBXTEFOX1ZFTkRPUl9NT1JTRU1JQ1JPYCwgYE1NODFYYCwgYE1NODFYX1VTQmAsIGBNQUM4MDIxMWAsIGFuZCBgVVNCYC5cblxuQWxyaWdodCwgSSBoYXZlIGEgY2xlYXIgcGljdHVyZS4gVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgd2l0aGluIGBtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnMoKWAgdG8gaGFuZGxlIGNhc2VzIHdoZXJlIHRoZSBmaXJtd2FyZSByZXR1cm5zIG1vcmUgY2hhbm5lbHMgdGhhbiB0aGUgZHJpdmVyIGhhcyBhbGxvY2F0ZWQgc3BhY2UgZm9yLiBUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGVzcGVjaWFsbHkgc2luY2UgdGhlIGRyaXZlciBzdXBwb3J0cyBVU0IgZGV2aWNlcywgd2hpY2ggYXJlIHJlYWRpbHkgZW11bGF0YWJsZS5cblxuQmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSdtIGNvbmZpZGVudCBpbiBzZXR0aW5nIHRoZSByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTQwOSwiT3V0cHV0VG9rZW5zIjoyMTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNTowNC45NzI5Mjk0MDNaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Mjg0OTY1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiV0xBTl9WRU5ET1JfTU9SU0VNSUNST1wiLFxuICAgIFwiTU04MVhcIixcbiAgICBcIk1NODFYX1VTQlwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIlVTQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFuc1wiLFxuICAgIFwibW04MXhfbWFjX3Jlc3RhcnRcIixcbiAgICBcIm1tODF4X21hY19vcHNfYWRkX2ludGVyZmFjZVwiLFxuICAgIFwibW04MXhfcmVnX25vdGlmaWVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGJvdW5kcyBjaGVjayBvbiBmaXJtd2FyZSByZXNwb25zZXMgaW4gbW04MXhfbWFjX2NoZWNrX2Z3X2Rpc2FibGVkX2NoYW5zKCkgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIHdoZW4gbl9jaGFubmVscyBleGNlZWRzIHRoZSBzaXplIG9mIG1vcnNfczFnaHpfY2hhbm5lbHMuIFRoZSBNTTgxeCB3aXJlbGVzcyBkcml2ZXIgc3VwcG9ydHMgVVNCIGludGVyZmFjZXMgKE1NODFYX1VTQikgd2hpY2ggY2FuIGJlIHByb2JlZCBhbmQgZnV6emVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgVVNCIGVtdWxhdGlvbi9nYWRnZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIldMQU5fVkVORE9SX01PUlNFTUlDUk9cIixcbiAgICBcIk1NODFYXCIsXG4gICAgXCJNTTgxWF9VU0JcIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJVU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnNcIixcbiAgICBcIm1tODF4X21hY19yZXN0YXJ0XCIsXG4gICAgXCJtbTgxeF9tYWNfb3BzX2FkZF9pbnRlcmZhY2VcIixcbiAgICBcIm1tODF4X3JlZ19ub3RpZmllclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBib3VuZHMgY2hlY2sgb24gZmlybXdhcmUgcmVzcG9uc2VzIGluIG1tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFucygpIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyB3aGVuIG5fY2hhbm5lbHMgZXhjZWVkcyB0aGUgc2l6ZSBvZiBtb3JzX3MxZ2h6X2NoYW5uZWxzLiBUaGUgTU04MXggd2lyZWxlc3MgZHJpdmVyIHN1cHBvcnRzIFVTQiBpbnRlcmZhY2VzIChNTTgxWF9VU0IpIHdoaWNoIGNhbiBiZSBwcm9iZWQgYW5kIGZ1enplZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBlbXVsYXRpb24vZ2FkZ2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjU6MDUuMDQ1Nzk2NDU1WiIsIlNlcSI6NDIsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM3OTAyNjM2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI1OjA1LjA0NjIyOTg0NVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEwMzc4NTg3NTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIG9uIGByZXNwLVxcdTAwM2VuX2NoYW5uZWxzYCBhZ2FpbnN0IGBBUlJBWV9TSVpFKG1vcnNfczFnaHpfY2hhbm5lbHMpYCB0byBwcmV2ZW50IGhlYXAgb3V0LW9mLWJvdW5kcyByZWFkcyB3aGVuIGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBgcmVzcC1cXHUwMDNlY2hhbm5lbHNgIGFycmF5IGluIGBtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnMoKWAuXFxuXFxuSGVhcCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyBhcmUgc3RhbmRhcmQgc3BhdGlhbCBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSByZXNwb25zZSBidWZmZXIgYHJlc3BgIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jKClgLCBhbmQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGFjY2Vzc2VzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGJ5IHRoaXMgY2hhbmdlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjdkMTU3YzA4ZTdhYmM5MmFlMDE4ZDZlNjRhZjI5YTUyMzhiMDgzZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMDc6MjM6NDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuY1xuaW5kZXggMDhjYTExNmE2OGI0Ny4uZThlZjBkOWVlYmQ3NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21vcnNlbWljcm8vbW04MXgvbWFjLmNcbkBAIC0yODgsNiArMjg4LDExIEBAIHN0YXRpYyB2b2lkIG1tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFucyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodylcbiBcdFx0Y2gtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+SUVFRTgwMjExX0NIQU5fUzFHX05PX1BSSU1BUlk7XG4gXHR9XG4gXG4rXHRpZiAobGUzMl90b19jcHUocmVzcC1cdTAwM2VuX2NoYW5uZWxzKSBcdTAwM2UgQVJSQVlfU0laRShtb3JzX3MxZ2h6X2NoYW5uZWxzKSkge1xuK1x0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxlMzJfdG9fY3B1KHJlc3AtXHUwMDNlbl9jaGFubmVscyk7IGkrKykge1xuIFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoO1xuIFx0XHRzdHJ1Y3QgaG9zdF9jbWRfZGlzYWJsZWRfY2hhbm5lbF9lbnRyeSAqZW50cnkgPVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6MjU6MDUuMDQ2MjMwODI1WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4ODYzOTYzNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNb3JzZSBNaWNybyBNQUMgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gdGhlIHVzZXIgd2FudHMgbWUgdG8gZGl2ZSBpbnRvIGEgcGF0Y2ggYWZmZWN0aW5nIHRoZSBgbW04MXhgIE1BQyBsYXllciB3aXRoaW4gdGhlIE1vcnNlIE1pY3JvIHdpcmVsZXNzIGRyaXZlciwgc3BlY2lmaWNhbGx5IGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL21tODF4L21hYy5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvLCBvZiBjb3Vyc2UsIGFwcHJvYWNoIHRoaXMgbWV0aG9kaWNhbGx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlIGluIGNvbnRleHQuIEknbSBnb2luZyB0byBzdGFydCBieSByZWFkaW5nIHRoZSBwYXRjaCBpdHNlbGYgYW5kIG1ha2luZyBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgbW9kaWZpY2F0aW9ucywgYW5kIHRoZW4gSSdsbCBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBhIGJldHRlciB1bmRlcnN0YW5kaW5nLlxuXG5GaXJzdCBJIG5lZWQgdG8gZ3JhYiB0aGUgc291cmNlIGZvciBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuY2AuIEkgd2lsbCB1c2UgdGhlIHRvb2wgJ3JlYWQtZmlsZScgdG8gcHVsbCB0aGUgY29kZSBhcm91bmQgbGluZSAyODguIFRoZW4gSSBjYW4gZmlndXJlIG91dCB3aGVyZSB0aGUgZWRpdCBsaXZlcy4gT25jZSBJIGNhbiBzZWUgdGhhdCwgSSB3aWxsIHVuZGVyc3RhbmQgd2hhdCBpcyBiZWluZyBjaGFuZ2VkIGFuZCB3aHkuIFRoYXQncyB0aGUgZmlyc3Qgc3RlcC4gTGV0J3MgZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxODgsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjI1OjA5LjkzMjYzMDYwOFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTI4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9tbTgxeC9tYWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNjA6XFx0fVxcbiAyNjE6XFx0XFxuIDI2MjpcXHRzdGF0aWMgdm9pZCBtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpXFxuIDI2MzpcXHR7XFxuIDI2NDpcXHRcXHRpbnQgcmV0ID0gMDtcXG4gMjY1OlxcdFxcdHUzMiBpO1xcbiAyNjY6XFx0XFx0c3RydWN0IG1tODF4ICptb3JzID0gaHctXFx1MDAzZXByaXY7XFxuIDI2NzpcXHRcXHRzdHJ1Y3QgaG9zdF9jbWRfcmVzcF9nZXRfZGlzYWJsZWRfY2hhbm5lbHMgKnJlc3A7XFxuIDI2ODpcXHRcXHR1MzIgcmVzcF9sZW4gPSBzaXplb2Yoc3RydWN0IGhvc3RfY21kX2Rpc2FibGVkX2NoYW5uZWxfZW50cnkpICpcXG4gMjY5OlxcdFxcdFxcdFxcdCAgICAgICBBUlJBWV9TSVpFKG1vcnNfczFnaHpfY2hhbm5lbHMpICtcXG4gMjcwOlxcdFxcdFxcdCAgICAgICBzaXplb2YoKnJlc3ApO1xcbiAyNzE6XFx0XFxuIDI3MjpcXHRcXHRyZXNwID0ga3phbGxvYyhyZXNwX2xlbiwgR0ZQX0tFUk5FTCk7XFxuIDI3MzpcXHRcXHRpZiAoIXJlc3ApIHtcXG4gMjc0OlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuIDI3NTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMjc2OlxcdFxcdH1cXG4gMjc3OlxcdFxcbiAyNzg6XFx0XFx0cmV0ID0gbW04MXhfY21kX2dldF9kaXNhYmxlZF9jaGFubmVscyhtb3JzLCByZXNwLCByZXNwX2xlbik7XFxuIDI3OTpcXHRcXHRpZiAocmV0KVxcbiAyODA6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDI4MTpcXHRcXG4gMjgyOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKG1vcnNfczFnaHpfY2hhbm5lbHMpOyBpKyspIHtcXG4gMjgzOlxcdFxcdFxcdHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2ggPSBcXHUwMDI2bW9yc19zMWdoel9jaGFubmVsc1tpXTtcXG4gMjg0OlxcdFxcbiAyODU6XFx0XFx0XFx0aWYgKGNoLVxcdTAwM2VmbGFncyBcXHUwMDI2IElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEKVxcbiAyODY6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDI4NzpcXHRcXG4gMjg4OlxcdFxcdFxcdGNoLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+SUVFRTgwMjExX0NIQU5fUzFHX05PX1BSSU1BUlk7XFxuIDI4OTpcXHRcXHR9XFxuIDI5MDpcXHRcXG4gMjkxOlxcdFxcdGlmIChsZTMyX3RvX2NwdShyZXNwLVxcdTAwM2VuX2NoYW5uZWxzKSBcXHUwMDNlIEFSUkFZX1NJWkUobW9yc19zMWdoel9jaGFubmVscykpIHtcXG4gMjkyOlxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuIDI5MzpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMjk0OlxcdFxcdH1cXG4gMjk1OlxcdFxcbiAyOTY6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGxlMzJfdG9fY3B1KHJlc3AtXFx1MDAzZW5fY2hhbm5lbHMpOyBpKyspIHtcXG4gMjk3OlxcdFxcdFxcdHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2g7XFxuIDI5ODpcXHRcXHRcXHRzdHJ1Y3QgaG9zdF9jbWRfZGlzYWJsZWRfY2hhbm5lbF9lbnRyeSAqZW50cnkgPVxcbiAyOTk6XFx0XFx0XFx0XFx0XFx1MDAyNnJlc3AtXFx1MDAzZWNoYW5uZWxzW2ldO1xcbiAzMDA6XFx0XFxuIDMwMTpcXHRcXHRcXHRpZiAoZW50cnktXFx1MDAzZWJ3X21oeiAhPSAxKVxcbiAzMDI6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDMwMzpcXHRcXG4gMzA0OlxcdFxcdFxcdGNoID0gaWVlZTgwMjExX2dldF9jaGFubmVsX2toeihcXG4gMzA1OlxcdFxcdFxcdFxcdGh3LVxcdTAwM2V3aXBoeSxcXG4gMzA2OlxcdFxcdFxcdFxcdEtIWjEwMF9UT19LSFoobGUxNl90b19jcHUoZW50cnktXFx1MDAzZWZyZXFfMTAwa2h6KSkpO1xcbiAzMDc6XFx0XFx0XFx0aWYgKCFjaClcXG4gMzA4OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAzMDk6XFx0XFxuIDMxMDpcXHRcXHRcXHRjaC1cXHUwMDNlZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fUzFHX05PX1BSSU1BUlk7XFxuIDMxMTpcXHRcXHRcXHRkZXZfZGJnKG1vcnMtXFx1MDAzZWRldiwgXFxcInNldCBOT19QUklNQVJZIG9uICV1IEtIelxcXCIsXFxuIDMxMjpcXHRcXHRcXHRcXHRpZWVlODAyMTFfY2hhbm5lbF90b19raHooY2gpKTtcXG4gMzEzOlxcdFxcdH1cXG4gMzE0OlxcdFxcbiAzMTU6XFx0b3V0OlxcbiAzMTY6XFx0XFx0aWYgKHJldClcXG4gMzE3OlxcdFxcdFxcdGRldl9lcnIobW9ycy1cXHUwMDNlZGV2LCBcXFwiZmFpbGVkIHRvIHNldCBkaXNhYmxlZCBwcmltYXJ5IGNoYW5uZWxzXFxcIik7XFxuIDMxODpcXHRcXG4gMzE5OlxcdFxcdGtmcmVlKHJlc3ApO1xcbiAzMjA6XFx0fVxcbiAzMjE6XFx0XFxuIDMyMjpcXHRzdGF0aWMgaW50IG1tODF4X21hY19vcHNfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpXFxuIDMyMzpcXHR7XFxuIDMyNDpcXHRcXHRzdHJ1Y3QgbW04MXggKm1vcnMgPSBody1cXHUwMDNlcHJpdjtcXG4gMzI1OlxcdFxcbiAzMjY6XFx0XFx0bW9ycy1cXHUwMDNlc3RhcnRlZCA9IHRydWU7XFxuIDMyNzpcXHRcXHRyZXR1cm4gMDtcXG4gMzI4OlxcdH1cXG4gMzI5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNTowOS45MzI5ODUzMDhaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQ5MTc5MDI2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFZ1bG5lcmFiaWxpdHkgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGNsYXNzaWMgaGVhcCBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0eS4gSGVyZSdzIHdoYXQncyBoYXBwZW5pbmc6IGEgcmVzcG9uc2UgYnVmZmVyLCBgcmVzcGAsIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYC4gVGhpcyBlbnN1cmVzIGl0J3MgemVyby1pbml0aWFsaXplZC4gVGhlbiwgYSBmdW5jdGlvbiBgbW04MXhfY21kX2dldF9kaXNhYmxlZF9jaGFubmVsc2AgZmlsbHMgdGhpcyBidWZmZXIgd2l0aCBkYXRhLiBUaGUgY3J1eCBvZiB0aGUgaXNzdWUgbGllcyBpbiBob3cgYHJlc3AtXHUwMDNlbl9jaGFubmVsc2AgaXMgaGFuZGxlZC4gSWYgdGhlIGZpcm13YXJlLCBvciBhIG1hbGZvcm1lZCByZXNwb25zZSwgcHJvdmlkZXMgYSBzdXNwaWNpb3VzbHkgbGFyZ2UgdmFsdWUgZm9yIGBuX2NoYW5uZWxzYCwgdGhlIHN1YnNlcXVlbnQgbG9vcCBgZm9yIChpID0gMDsgaSBcdTAwM2MgbGUzMl90b19jcHUocmVzcC1cdTAwM2VuX2NoYW5uZWxzKTsgaSsrKWAgY291bGQgaW5kZXggYmV5b25kIHRoZSBib3VuZHMgb2YgdGhlIGBtb3JzX3MxZ2h6X2NoYW5uZWxzYCBhcnJheS4gVGhhdCdzIGEgdGV4dGJvb2sgb3V0LW9mLWJvdW5kcyBoZWFwIHJlYWQsIGEgZGVmaW5pdGUgS0FTQU4tZGV0ZWN0YWJsZSBidWcuXG5cblRoZSBwYXRjaCBpdHNlbGYgaXMgc2ltcGxlOiBpdCBhZGRzIGEgY2hlY2ssIGBpZiAobGUzMl90b19jcHUocmVzcC1cdTAwM2VuX2NoYW5uZWxzKSBcdTAwM2UgQVJSQVlfU0laRShtb3JzX3MxZ2h6X2NoYW5uZWxzKSlgLCB0byB2YWxpZGF0ZSB0aGUgdmFsdWUgb2YgYG5fY2hhbm5lbHNgLiBJZiBpdCBleGNlZWRzIHRoZSBhcnJheSBzaXplLCBhbiBlcnJvciwgYC1FSU5WQUxgLCBpcyByZXR1cm5lZCwgYW5kIHdlIGJhaWwgb3V0LiBUaGlzIGlzIGdvb2Q7IHdlJ3JlIHByZXZlbnRpbmcgdGhlIE9PQiByZWFkIGVudGlyZWx5LlxuXG5Ob3csIEkgbmVlZCB0byBjb25zaWRlciB3aGV0aGVyIHRoaXMgcGF0Y2ggaXRzZWxmIGludHJvZHVjZXMgYW55ICpuZXcqIHJpc2tzLCBwYXJ0aWN1bGFybHkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBgcmVzcGAgaXMgYGt6YWxsb2NgJ2QsIHNvIHRoYXQncyBnb29kLiBgcmV0YCBpcyBpbml0aWFsaXplZCB0byAwIGFuZCBvbmx5IGNoYW5nZWQgdG8gLUVJTlZBTCBvbiBhbiBlcnJvci4gVGhlcmUncyBubyBrZXJuZWwtdG8tdXNlciBjb3B5IGhhcHBlbmluZyBoZXJlIHRoYXQgSSBjYW4gc2VlLCB3aGljaCBpcyBpbXBvcnRhbnQgZnJvbSBhIGxlYWsgcGVyc3BlY3RpdmUuIEFuZCB0aGUga2V5IHBvaW50IGlzOiB0aGlzIHBhdGNoICphZGRyZXNzZXMqIGFuIE9PQiByZWFkIHZ1bG5lcmFiaWxpdHksIHNvIEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBLQVNBTiBpcyB0aGUgcmlnaHQgdG9vbCBmb3IgZGV0ZWN0aW5nIHRoZSBPT0IgbWVtb3J5IGFjY2Vzcy5cblxuRG91YmxlLWNoZWNraW5nIGFnYWluc3QgdGhlIGd1aWRlbGluZXMsIHRoZSBwYXRjaCAqc3BlY2lmaWNhbGx5KiBhZGRyZXNzZXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIFRoZSBzdHJ1Y3R1cmVzIGFyZSBhbGwgemVyb2VkIG9yIGluaXRpYWxpemVkLiBUaGVyZSdzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgYmVpbmcgaW50cm9kdWNlZCBvciBleHBvc2VkLiBUaGVyZWZvcmUsIGJhc2VkIG9uIHRoZSBjcml0ZXJpYSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBmYWxzZS5cblxuQWxyaWdodCwgSSdtIGNvbmZpZGVudCBpbiB0aGlzIGFuYWx5c2lzLiBUaW1lIHRvIHByZXBhcmUgdGhlIGNhbGwgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYwNiwiT3V0cHV0VG9rZW5zIjoxNzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzoyNToxNS40MjQ3Nzg5NDdaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgb24gYHJlc3AtXFx1MDAzZW5fY2hhbm5lbHNgIGFnYWluc3QgYEFSUkFZX1NJWkUobW9yc19zMWdoel9jaGFubmVscylgIHRvIHByZXZlbnQgaGVhcCBvdXQtb2YtYm91bmRzIHJlYWRzIHdoZW4gaXRlcmF0aW5nIHRocm91Z2ggdGhlIGByZXNwLVxcdTAwM2VjaGFubmVsc2AgYXJyYXkgaW4gYG1tODF4X21hY19jaGVja19md19kaXNhYmxlZF9jaGFucygpYC5cXG5cXG5IZWFwIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIGFyZSBzdGFuZGFyZCBzcGF0aWFsIG1lbW9yeSBzYWZldHkgdmlvbGF0aW9ucyBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHJlc3BvbnNlIGJ1ZmZlciBgcmVzcGAgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2MoKWAsIGFuZCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgYWNjZXNzZXMsIG9yIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgYnkgdGhpcyBjaGFuZ2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIG9uIGByZXNwLVxcdTAwM2VuX2NoYW5uZWxzYCBhZ2FpbnN0IGBBUlJBWV9TSVpFKG1vcnNfczFnaHpfY2hhbm5lbHMpYCB0byBwcmV2ZW50IGhlYXAgb3V0LW9mLWJvdW5kcyByZWFkcyB3aGVuIGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBgcmVzcC1cXHUwMDNlY2hhbm5lbHNgIGFycmF5IGluIGBtbTgxeF9tYWNfY2hlY2tfZndfZGlzYWJsZWRfY2hhbnMoKWAuXFxuXFxuSGVhcCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyBhcmUgc3RhbmRhcmQgc3BhdGlhbCBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSByZXNwb25zZSBidWZmZXIgYHJlc3BgIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jKClgLCBhbmQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGFjY2Vzc2VzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGJ5IHRoaXMgY2hhbmdlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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,} --------- Name: series-workflow7p7g4[1] Phase: Succeeded StartedAt: 2026-09-07 07:25:40 +0000 UTC FinishedAt: 2026-09-07 07:25:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7p7g4[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-07 07:25:40 +0000 UTC FinishedAt: 2026-09-07 07:25:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7p7g4[2] Phase: Succeeded StartedAt: 2026-09-07 07:25:40 +0000 UTC FinishedAt: 2026-09-07 08:59:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7p7g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_mac_check_fw_disabled_chans","mm81x_mac_restart","mm81x_mac_ops_add_interface","mm81x_reg_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"107188c7-ccfc-447c-9cef-dad6e869481a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-07 07:25:40 +0000 UTC FinishedAt: 2026-09-07 08:59:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_mac_check_fw_disabled_chans","mm81x_mac_restart","mm81x_mac_ops_add_interface","mm81x_reg_notifier"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"107188c7-ccfc-447c-9cef-dad6e869481a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow7p7g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_mac_check_fw_disabled_chans","mm81x_mac_restart","mm81x_mac_ops_add_interface","mm81x_reg_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"107188c7-ccfc-447c-9cef-dad6e869481a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-07 07:25:40 +0000 UTC FinishedAt: 2026-09-07 07:25:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7p7g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_mac_check_fw_disabled_chans","mm81x_mac_restart","mm81x_mac_ops_add_interface","mm81x_reg_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"107188c7-ccfc-447c-9cef-dad6e869481a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-07 07:25:40 +0000 UTC FinishedAt: 2026-09-07 07:25:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7p7g4/series-workflow7p7g4-convert-artifact-4245816953/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7p7g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_mac_check_fw_disabled_chans","mm81x_mac_restart","mm81x_mac_ops_add_interface","mm81x_reg_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"107188c7-ccfc-447c-9cef-dad6e869481a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-07 07:25:50 +0000 UTC FinishedAt: 2026-09-07 07:41:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7p7g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_mac_check_fw_disabled_chans","mm81x_mac_restart","mm81x_mac_ops_add_interface","mm81x_reg_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"107188c7-ccfc-447c-9cef-dad6e869481a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-07 07:25:50 +0000 UTC FinishedAt: 2026-09-07 07:41:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b5de4c5e-c51d-4686-b9c7-d4b8c404a423,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7p7g4/series-workflow7p7g4-convert-artifact-4245816953/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "7243d8b9-ad50-47fe-86b6-387b466c047b", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7p7g4/series-workflow7p7g4-build-action-2603261847/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7p7g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_mac_check_fw_disabled_chans","mm81x_mac_restart","mm81x_mac_ops_add_interface","mm81x_reg_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"107188c7-ccfc-447c-9cef-dad6e869481a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-07 07:25:50 +0000 UTC FinishedAt: 2026-09-07 07:41:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b5de4c5e-c51d-4686-b9c7-d4b8c404a423,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7p7g4/series-workflow7p7g4-convert-artifact-4245816953/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "7243d8b9-ad50-47fe-86b6-387b466c047b", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7p7g4/series-workflow7p7g4-build-action-2603261847/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7p7g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_mac_check_fw_disabled_chans","mm81x_mac_restart","mm81x_mac_ops_add_interface","mm81x_reg_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"107188c7-ccfc-447c-9cef-dad6e869481a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-07 07:41:58 +0000 UTC FinishedAt: 2026-09-07 07:41:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7p7g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_mac_check_fw_disabled_chans","mm81x_mac_restart","mm81x_mac_ops_add_interface","mm81x_reg_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"107188c7-ccfc-447c-9cef-dad6e869481a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-07 07:41:58 +0000 UTC FinishedAt: 2026-09-07 07:41:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7p7g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_mac_check_fw_disabled_chans","mm81x_mac_restart","mm81x_mac_ops_add_interface","mm81x_reg_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"107188c7-ccfc-447c-9cef-dad6e869481a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-07 07:41:58 +0000 UTC FinishedAt: 2026-09-07 07:42:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7p7g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_mac_check_fw_disabled_chans","mm81x_mac_restart","mm81x_mac_ops_add_interface","mm81x_reg_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"107188c7-ccfc-447c-9cef-dad6e869481a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-07 07:41:58 +0000 UTC FinishedAt: 2026-09-07 07:42:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"107188c7-ccfc-447c-9cef-dad6e869481a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7p7g4/series-workflow7p7g4-convert-artifact-3626852172/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7p7g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_mac_check_fw_disabled_chans","mm81x_mac_restart","mm81x_mac_ops_add_interface","mm81x_reg_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"107188c7-ccfc-447c-9cef-dad6e869481a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-07 07:42:08 +0000 UTC FinishedAt: 2026-09-07 07:44:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7p7g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_mac_check_fw_disabled_chans","mm81x_mac_restart","mm81x_mac_ops_add_interface","mm81x_reg_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"107188c7-ccfc-447c-9cef-dad6e869481a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-07 07:42:08 +0000 UTC FinishedAt: 2026-09-07 07:44:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7243d8b9-ad50-47fe-86b6-387b466c047b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7p7g4/series-workflow7p7g4-build-action-2603261847/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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,} --------- Name: series-workflow7p7g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_mac_check_fw_disabled_chans","mm81x_mac_restart","mm81x_mac_ops_add_interface","mm81x_reg_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"107188c7-ccfc-447c-9cef-dad6e869481a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-07 07:44:19 +0000 UTC FinishedAt: 2026-09-07 07:44:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7p7g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_mac_check_fw_disabled_chans","mm81x_mac_restart","mm81x_mac_ops_add_interface","mm81x_reg_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"107188c7-ccfc-447c-9cef-dad6e869481a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-07 07:44:19 +0000 UTC FinishedAt: 2026-09-07 07:44:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7p7g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_mac_check_fw_disabled_chans","mm81x_mac_restart","mm81x_mac_ops_add_interface","mm81x_reg_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"107188c7-ccfc-447c-9cef-dad6e869481a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-07 07:44:19 +0000 UTC FinishedAt: 2026-09-07 08:04:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7p7g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_mac_check_fw_disabled_chans","mm81x_mac_restart","mm81x_mac_ops_add_interface","mm81x_reg_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"107188c7-ccfc-447c-9cef-dad6e869481a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-07 07:44:19 +0000 UTC FinishedAt: 2026-09-07 08:04:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b5de4c5e-c51d-4686-b9c7-d4b8c404a423,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7p7g4/series-workflow7p7g4-convert-artifact-3626852172/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "b92fea5f-9e3a-492a-a874-a087acf1ec6d", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7p7g4/series-workflow7p7g4-build-action-3129453928/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7p7g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_mac_check_fw_disabled_chans","mm81x_mac_restart","mm81x_mac_ops_add_interface","mm81x_reg_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"107188c7-ccfc-447c-9cef-dad6e869481a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-07 07:44:19 +0000 UTC FinishedAt: 2026-09-07 08:04:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b5de4c5e-c51d-4686-b9c7-d4b8c404a423,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7p7g4/series-workflow7p7g4-convert-artifact-3626852172/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "b92fea5f-9e3a-492a-a874-a087acf1ec6d", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7p7g4/series-workflow7p7g4-build-action-3129453928/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7p7g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_mac_check_fw_disabled_chans","mm81x_mac_restart","mm81x_mac_ops_add_interface","mm81x_reg_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"107188c7-ccfc-447c-9cef-dad6e869481a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-07 08:04:44 +0000 UTC FinishedAt: 2026-09-07 08:04:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7p7g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_mac_check_fw_disabled_chans","mm81x_mac_restart","mm81x_mac_ops_add_interface","mm81x_reg_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"107188c7-ccfc-447c-9cef-dad6e869481a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-07 08:04:44 +0000 UTC FinishedAt: 2026-09-07 08:04:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7p7g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_mac_check_fw_disabled_chans","mm81x_mac_restart","mm81x_mac_ops_add_interface","mm81x_reg_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"107188c7-ccfc-447c-9cef-dad6e869481a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-07 08:04:44 +0000 UTC FinishedAt: 2026-09-07 08:06:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7p7g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_mac_check_fw_disabled_chans","mm81x_mac_restart","mm81x_mac_ops_add_interface","mm81x_reg_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"107188c7-ccfc-447c-9cef-dad6e869481a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-07 08:04:44 +0000 UTC FinishedAt: 2026-09-07 08:06:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b92fea5f-9e3a-492a-a874-a087acf1ec6d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7p7g4/series-workflow7p7g4-build-action-3129453928/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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,} --------- Name: series-workflow7p7g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_mac_check_fw_disabled_chans","mm81x_mac_restart","mm81x_mac_ops_add_interface","mm81x_reg_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"107188c7-ccfc-447c-9cef-dad6e869481a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-07 08:06:16 +0000 UTC FinishedAt: 2026-09-07 08:59:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7p7g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_mac_check_fw_disabled_chans","mm81x_mac_restart","mm81x_mac_ops_add_interface","mm81x_reg_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"107188c7-ccfc-447c-9cef-dad6e869481a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-07 08:06:16 +0000 UTC FinishedAt: 2026-09-07 08:59:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_mac_check_fw_disabled_chans","mm81x_mac_restart","mm81x_mac_ops_add_interface","mm81x_reg_notifier"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*7243d8b9-ad50-47fe-86b6-387b466c047b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b92fea5f-9e3a-492a-a874-a087acf1ec6d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7p7g4/series-workflow7p7g4-build-action-2603261847/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7p7g4/series-workflow7p7g4-build-action-3129453928/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow7p7g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_mac_check_fw_disabled_chans","mm81x_mac_restart","mm81x_mac_ops_add_interface","mm81x_reg_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"107188c7-ccfc-447c-9cef-dad6e869481a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-07 08:06:16 +0000 UTC FinishedAt: 2026-09-07 08:06:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7p7g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_mac_check_fw_disabled_chans","mm81x_mac_restart","mm81x_mac_ops_add_interface","mm81x_reg_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"107188c7-ccfc-447c-9cef-dad6e869481a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-07 08:06:16 +0000 UTC FinishedAt: 2026-09-07 08:06:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_mac_check_fw_disabled_chans","mm81x_mac_restart","mm81x_mac_ops_add_interface","mm81x_reg_notifier"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7p7g4/series-workflow7p7g4-convert-artifact-2111759541/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7p7g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_mac_check_fw_disabled_chans","mm81x_mac_restart","mm81x_mac_ops_add_interface","mm81x_reg_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"107188c7-ccfc-447c-9cef-dad6e869481a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-07 08:06:16 +0000 UTC FinishedAt: 2026-09-07 08:06:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7p7g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_mac_check_fw_disabled_chans","mm81x_mac_restart","mm81x_mac_ops_add_interface","mm81x_reg_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"107188c7-ccfc-447c-9cef-dad6e869481a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-07 08:06:16 +0000 UTC FinishedAt: 2026-09-07 08:06:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7p7g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_mac_check_fw_disabled_chans","mm81x_mac_restart","mm81x_mac_ops_add_interface","mm81x_reg_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"107188c7-ccfc-447c-9cef-dad6e869481a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-07 08:06:16 +0000 UTC FinishedAt: 2026-09-07 08:06:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7p7g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_mac_check_fw_disabled_chans","mm81x_mac_restart","mm81x_mac_ops_add_interface","mm81x_reg_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"107188c7-ccfc-447c-9cef-dad6e869481a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-07 08:06:26 +0000 UTC FinishedAt: 2026-09-07 08:59:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7p7g4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mm81x_mac_check_fw_disabled_chans","mm81x_mac_restart","mm81x_mac_ops_add_interface","mm81x_reg_notifier"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN_VENDOR_MORSEMICRO","MM81X","MM81X_USB","MAC80211","USB"],"series_id":"107188c7-ccfc-447c-9cef-dad6e869481a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-07 08:06:26 +0000 UTC FinishedAt: 2026-09-07 08:59:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7243d8b9-ad50-47fe-86b6-387b466c047b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b92fea5f-9e3a-492a-a874-a087acf1ec6d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7p7g4/series-workflow7p7g4-build-action-2603261847/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7p7g4/series-workflow7p7g4-build-action-3129453928/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7p7g4/series-workflow7p7g4-convert-artifact-2111759541/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}