Name: series-workflow52b6l Phase: Succeeded StartedAt: 2026-09-05 09:22:47 +0000 UTC FinishedAt: 2026-09-05 13:08:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52b6l[0] Phase: Succeeded StartedAt: 2026-09-05 09:22:47 +0000 UTC FinishedAt: 2026-09-05 09:25:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52b6l[0].run-triage Phase: Succeeded StartedAt: 2026-09-05 09:22:47 +0000 UTC FinishedAt: 2026-09-05 09:25:22 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL" ], "series_id": "5641ba85-6f23-473f-8bc1-e77ee42483b1" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "vt_handle_exit_irqoff", "vt_handle_nmi", "vt_vcpu_pi_load", "vt_vcpu_pi_put", "vt_pi_start_bypass", "vt_pi_update_irte", "vmx_handle_exit", "vmx_vcpu_run", "nested_vmx_reflect_vmexit" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA5OjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2dF9oYW5kbGVfZXhpdF9pcnFvZmYmIzM0OywKICAgICYjMzQ7dnRfaGFuZGxlX25taSYjMzQ7LAogICAgJiMzNDt2dF92Y3B1X3BpX2xvYWQmIzM0OywKICAgICYjMzQ7dnRfdmNwdV9waV9wdXQmIzM0OywKICAgICYjMzQ7dnRfcGlfc3RhcnRfYnlwYXNzJiMzNDssCiAgICAmIzM0O3Z0X3BpX3VwZGF0ZV9pcnRlJiMzNDssCiAgICAmIzM0O3ZteF9oYW5kbGVfZXhpdCYjMzQ7LAogICAgJiMzNDt2bXhfdmNwdV9ydW4mIzM0OywKICAgICYjMzQ7bmVzdGVkX3ZteF9yZWZsZWN0X3ZtZXhpdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcmVmYWN0b3Jpbmcgb2YgS1ZNIEludGVsIFZNWCBhbmQgVERYIGNvZGUgdG8gY29uc29saWRhdGUgY29tbW9uIHZpcnR1YWxpemF0aW9uIGluZnJhc3RydWN0dXJlIChWVCkgYmV0d2VlbiBzdGFuZGFyZCBWTVggYW5kIFREWCB2Q1BVczpcbjEuIEl0IGRlZmluZXMgYSBjb21tb24gd3JhcHBlciBsYXlvdXQgYHN0cnVjdCB2Y3B1X3ZteF90ZHhgIHdpdGggY29tcGlsZS10aW1lIGFzc2VydGlvbnMgKGBzdGF0aWNfYXNzZXJ0YCkgZW5zdXJpbmcgb2Zmc2V0IG1hdGNoaW5nIG9mIGBzdHJ1Y3QgdmNwdV92dGAgYWNyb3NzIGB2Y3B1X3ZteGAgYW5kIGB2Y3B1X3RkeGAuXG4yLiBJdCBtb3ZlcyBhbmQgcmVuYW1lcyBoZWxwZXIgZnVuY3Rpb25zIChgdG9fdnRgLCBgdnRfZ2V0X2V4aXRfcmVhc29uYCwgYHZ0X2dldF9leGl0X3F1YWxgLCBgdnRfZ2V0X2ludHJfaW5mb2AsIGV0Yy4pIGZyb20gYHZteC5oYC9gdm14LmNgIHRvIGBjb21tb24uaGAvYG1haW4uY2AuXG4zLiBJdCBtb3ZlcyBjb21tb24gZXhpdCBhbmQgaW50ZXJydXB0IGhhbmRsaW5nIGZ1bmN0aW9ucyAoYHZ0X2hhbmRsZV9leGl0X2lycW9mZmAsIGB2dF9oYW5kbGVfbm1pYCwgYGhhbmRsZV9leHRlcm5hbF9pbnRlcnJ1cHRfaXJxb2ZmYCwgZXRjLikgdG8gYG1haW4uY2AuXG40LiBJdCByZW5hbWVzIHBvc3RlZCBpbnRlcnJ1cHQgcm91dGluZXMgdG8gdXNlIHRoZSBgdnRfYCBwcmVmaXggYWNyb3NzIHRoZSBjb2RlYmFzZS5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBleHBvc2UgdW5pbml0aWFsaXplZCBmaWVsZHMgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlLCBvciBhbHRlciBidWZmZXIgYm91bmRzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHN0cnVjdCBsYXlvdXQgb3Igb2Zmc2V0cyBhcmUgZ3VhcmRlZCBhdCBjb21waWxlIHRpbWUgYnkgYHN0YXRpY19hc3NlcnRgIG9yIHdvdWxkIG1hbmlmZXN0IGFzIG1lbW9yeSBjb3JydXB0aW9uL09PQiBhY2Nlc3MgZGV0ZWN0YWJsZSBieSBzdGFuZGFyZCBidWlsZHMgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgS1ZNIEludGVsIChWTVgvVERYKSB2aXJ0dWFsaXphdGlvbiBsb2dpYyBieSBjb25zb2xpZGF0aW5nIGV4aXQgc3RhdHVzIGhhbmRsaW5nLCBleGl0IElSUS1vZmYgcHJvY2Vzc2luZywgcG9zdGVkIGludGVycnVwdCBoZWxwZXJzLCBhbmQgVk1DUyBleGl0IHF1YWxpZmljYXRpb24gYWNjZXNzb3JzIHVuZGVyIGNvbW1vbiB2dF8qIGFic3RyYWN0aW9ucy4gVGhpcyBhZmZlY3RzIGNvcmUgS1ZNIFZNIGV4aXQgaGFuZGxpbmcgYW5kIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiByZWFjaGFibGUgb24gYW1kNjQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MjQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5ZDI1ZjA2YTkzYWFiZTY0ZmJhZDBkZWQ3NGY3MzAwMGY0YTQ3Y2MzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAwOToyNDoyMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oIGIvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaFxuaW5kZXggMDgwMDU2NzY3MDJjMi4uM2U2OGZhMTJhY2E2NSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmhcbkBAIC0yLDEwICYjNDM7MiwxMiBAQFxuICNpZm5kZWYgX19LVk1fWDg2X1ZNWF9DT01NT05fSFxuICNkZWZpbmUgX19LVk1fWDg2X1ZNWF9DT01NT05fSFxuIFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jb250YWluZXJfb2YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bV9ob3N0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcG9zdGVkX2ludHIuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O21tdS5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3ZteF9vcHMuaFwmIzM0O1xuIFxuIHVuaW9uIHZteF9leGl0X3JlYXNvbiB7XG4gXHRzdHJ1Y3Qge1xuQEAgLTc0LDE0ICYjNDM7NzYsNjIgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3RkX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7IHJldHVybiBmYWxzZTsgfVxuIFxuICNlbmRpZlxuIFxuJiM0MztzdHJ1Y3QgdmNwdV92bXhfdGR4IHtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHUgdmNwdTtcbiYjNDM7XHRzdHJ1Y3QgdmNwdV92dCB2dDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IHZjcHVfdnQgKnRvX3Z0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBcdTAwMjYoY29udGFpbmVyX29mKHZjcHUsIHN0cnVjdCB2Y3B1X3ZteF90ZHgsIHZjcHUpLVx1MDAzZXZ0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSBzdHJ1Y3Qga3ZtX3ZjcHUgKnZ0X3RvX3ZjcHUoc3RydWN0IHZjcHVfdnQgKnZ0KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIFx1MDAyNihjb250YWluZXJfb2YodnQsIHN0cnVjdCB2Y3B1X3ZteF90ZHgsIHZ0KS1cdTAwM2V2Y3B1KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB1bmlvbiB2bXhfZXhpdF9yZWFzb24gdnRfZ2V0X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiB0b192dCh2Y3B1KS1cdTAwM2VleGl0X3JlYXNvbjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBsb25nIHZ0X2dldF9leGl0X3F1YWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHZjcHVfdnQgKnZ0ID0gdG9fdnQodmNwdSk7XG4mIzQzO1xuJiM0MztcdGlmICgha3ZtX3JlZ2lzdGVyX3Rlc3RfYW5kX21hcmtfYXZhaWxhYmxlKHZjcHUsIFZDUFVfUkVHX0VYSVRfSU5GT18xKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIVdBUk5fT05fT05DRShpc190ZF92Y3B1KHZjcHUpKSlcbiYjNDM7XHRcdHZ0LVx1MDAzZWV4aXRfcXVhbGlmaWNhdGlvbiA9IHZtY3NfcmVhZGwoRVhJVF9RVUFMSUZJQ0FUSU9OKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHZ0LVx1MDAzZWV4aXRfcXVhbGlmaWNhdGlvbjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdnRfZ2V0X2ludHJfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdmNwdV92dCAqdnQgPSB0b192dCh2Y3B1KTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFrdm1fcmVnaXN0ZXJfdGVzdF9hbmRfbWFya19hdmFpbGFibGUodmNwdSwgVkNQVV9SRUdfRVhJVF9JTkZPXzIpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhV0FSTl9PTl9PTkNFKGlzX3RkX3ZjcHUodmNwdSkpKVxuJiM0MztcdFx0dnQtXHUwMDNlZXhpdF9pbnRyX2luZm8gPSB2bWNzX3JlYWQzMihWTV9FWElUX0lOVFJfSU5GTyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiB2dC1cdTAwM2VleGl0X2ludHJfaW5mbztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGlzX3hmZF9ubV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gdmNwdS1cdTAwM2VhcmNoLmd1ZXN0X2ZwdS5mcHN0YXRlLVx1MDAzZXhmZCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICAgIWt2bV9pc19jcjBfYml0X3NldCh2Y3B1LCBYODZfQ1IwX1RTKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIGJvb2wgdnRfaXNfdGR4X3ByaXZhdGVfZ3BhKHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3QgZ3BhKVxuIHtcbiBcdC8qIEZvciBURFggdGhlIGRpcmVjdCBtYXNrIGlzIHRoZSBzaGFyZWQgbWFzay4gKi9cbiBcdHJldHVybiAha3ZtX2lzX2FkZHJfZGlyZWN0KGt2bSwgZ3BhKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgX192bXhfaGFuZGxlX2VwdF92aW9sYXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsXG4tXHRcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24pXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IF9fdnRfaGFuZGxlX2VwdF92aW9sYXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsXG4mIzQzO1x0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24pXG4ge1xuIFx0dTY0IGVycm9yX2NvZGU7XG4gXG5AQCAtMTY0LDggJiM0MzsyMTQsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3ZjcHVfdHJpZ2dlcl9wb3N0ZWRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiAgKiBQb3N0IGFuIGludGVycnVwdCB0byBhIHZDUFUmIzM5O3MgUElSIGFuZCB0cmlnZ2VyIHRoZSB2Q1BVIHRvIHByb2Nlc3MgdGhlXG4gICogaW50ZXJydXB0IGlmIG5lY2Vzc2FyeS5cbiAgKi9cbi1zdGF0aWMgaW5saW5lIHZvaWQgX192bXhfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi1cdFx0XHRcdFx0XHQgIHN0cnVjdCBwaV9kZXNjICpwaV9kZXNjLCBpbnQgdmVjdG9yKVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgX192dF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuJiM0MztcdFx0XHRcdFx0XHQgc3RydWN0IHBpX2Rlc2MgKnBpX2Rlc2MsIGludCB2ZWN0b3IpXG4ge1xuIFx0aWYgKHBpX3Rlc3RfYW5kX3NldF9waXIodmVjdG9yLCBwaV9kZXNjKSlcbiBcdFx0cmV0dXJuO1xuQEAgLTE4Myw2ICYjNDM7MjMzLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdm14X2RlbGl2ZXJfcG9zdGVkX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRrdm1fdmNwdV90cmlnZ2VyX3Bvc3RlZF9pbnRlcnJ1cHQodmNwdSwgUE9TVEVEX0lOVFJfVkVDVE9SKTtcbiB9XG4gXG4tbm9pbnN0ciB2b2lkIHZteF9oYW5kbGVfbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4mIzQzO25vaW5zdHIgdm9pZCB2dF9oYW5kbGVfbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG4gI2VuZGlmIC8qIF9fS1ZNX1g4Nl9WTVhfQ09NTU9OX0ggKi9cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uYyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXG5pbmRleCA0YzUyYWI4ZDA3ODY5Li42ZTBiMzk1OWQ3M2FiIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXG5AQCAtMSw0ICYjNDM7MSw1IEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZW50cnktY29tbW9uLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGVwYXJhbS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7eDg2X29wcy5oXCYjMzQ7XG5AQCAtMTAsOCAmIzQzOzExLDEyIEBAXG4gI2luY2x1ZGUgXCYjMzQ7dGR4LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt0ZHhfYXJjaC5oXCYjMzQ7XG4gXG4mIzQzOyNwcmFnbWEgR0NDIHBvaXNvbiB0b192bXhcbiYjNDM7XG4mIzQzO3N0YXRpY19hc3NlcnQob2Zmc2V0b2Yoc3RydWN0IHZjcHVfdm14X3RkeCwgdnQpID09IG9mZnNldG9mKHN0cnVjdCB2Y3B1X3ZteCwgdnQpKTtcbiYjNDM7XG4gI2lmZGVmIENPTkZJR19LVk1fSU5URUxfVERYXG4tc3RhdGljX2Fzc2VydChvZmZzZXRvZihzdHJ1Y3QgdmNwdV92bXgsIHZ0KSA9PSBvZmZzZXRvZihzdHJ1Y3QgdmNwdV90ZHgsIHZ0KSk7XG4mIzQzO3N0YXRpY19hc3NlcnQob2Zmc2V0b2Yoc3RydWN0IHZjcHVfdm14X3RkeCwgdnQpID09IG9mZnNldG9mKHN0cnVjdCB2Y3B1X3RkeCwgdnQpKTtcbiBcbiBzdGF0aWMgdm9pZCB2dF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKVxuIHtcbkBAIC04NzYsNiAmIzQzOzg4MSw4NSBAQCBzdGF0aWMgaW50IHZ0X2dtZW1fbWF4X21hcHBpbmdfbGV2ZWwoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLFxuICNkZWZpbmUgdnRfb3BfdGR4X29ubHkobmFtZSkgTlVMTFxuICNlbmRpZiAvKiBDT05GSUdfS1ZNX0lOVEVMX1REWCAqL1xuIFxuJiM0MztzdGF0aWMgdm9pZCBoYW5kbGVfbm1fZmF1bHRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogU2F2ZSB4ZmRfZXJyIHRvIGd1ZXN0X2ZwdSBiZWZvcmUgaW50ZXJydXB0IGlzIGVuYWJsZWQsIHNvIHRoZVxuJiM0MztcdCAqIE1TUiB2YWx1ZSBpcyBub3QgY2xvYmJlcmVkIGJ5IHRoZSBob3N0IGFjdGl2aXR5IGJlZm9yZSB0aGUgZ3Vlc3RcbiYjNDM7XHQgKiBoYXMgY2hhbmNlIHRvIGNvbnN1bWUgaXQuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBVcGRhdGUgdGhlIGd1ZXN0JiMzOTtzIFhGRF9FUlIgaWYgYW5kIG9ubHkgaWYgWEZEIGlzIGVuYWJsZWQsIGFzIHRoZSAjTk1cbiYjNDM7XHQgKiBpbnRlcmNlcHRpb24gbWF5IGhhdmUgYmVlbiBjYXVzZWQgYnkgTDEgaW50ZXJjZXB0aW9uLiAgUGVyIHRoZSBTRE0sXG4mIzQzO1x0ICogWEZEX0VSUiBpcyBub3QgbW9kaWZpZWQgZm9yIG5vbi1YRkQgI05NLCBpLmUuIGlmIENSMC5UUz0xLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogTm90ZSwgWEZEX0VSUiBpcyB1cGRhdGVkIF9iZWZvcmVfIHRoZSAjTk0gaW50ZXJjZXB0aW9uIGNoZWNrLCBpLmUuXG4mIzQzO1x0ICogdW5saWtlIENSMiBhbmQgRFI2LCB0aGUgdmFsdWUgaXMgbm90IGEgcGF5bG9hZCB0aGF0IGlzIGF0dGFjaGVkIHRvXG4mIzQzO1x0ICogdGhlICNOTSBleGNlcHRpb24uXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGlzX3hmZF9ubV9mYXVsdCh2Y3B1KSlcbiYjNDM7XHRcdHJkbXNycShNU1JfSUEzMl9YRkRfRVJSLCB2Y3B1LVx1MDAzZWFyY2guZ3Vlc3RfZnB1LnhmZF9lcnIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBoYW5kbGVfZXhjZXB0aW9uX2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBpbnRyX2luZm8pXG4mIzQzO3tcbiYjNDM7XHQvKiBpZiBleGl0IGR1ZSB0byBQRiBjaGVjayBmb3IgYXN5bmMgUEYgKi9cbiYjNDM7XHRpZiAoaXNfcGFnZV9mYXVsdChpbnRyX2luZm8pKVxuJiM0MztcdFx0dmNwdS1cdTAwM2VhcmNoLmFwZi5ob3N0X2FwZl9mbGFncyA9IGt2bV9yZWFkX2FuZF9yZXNldF9hcGZfZmxhZ3MoKTtcbiYjNDM7XHQvKiBpZiBleGl0IGR1ZSB0byBOTSwgaGFuZGxlIGJlZm9yZSBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkICovXG4mIzQzO1x0ZWxzZSBpZiAoaXNfbm1fZmF1bHQoaW50cl9pbmZvKSlcbiYjNDM7XHRcdGhhbmRsZV9ubV9mYXVsdF9pcnFvZmYodmNwdSk7XG4mIzQzO1x0LyogSGFuZGxlIG1hY2hpbmUgY2hlY2tzIGJlZm9yZSBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkICovXG4mIzQzO1x0ZWxzZSBpZiAoaXNfbWFjaGluZV9jaGVjayhpbnRyX2luZm8pKVxuJiM0MztcdFx0a3ZtX21hY2hpbmVfY2hlY2soKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaGFuZGxlX2V4dGVybmFsX2ludGVycnVwdF9pcnFvZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuJiM0MztcdFx0XHRcdFx0ICAgICB1MzIgaW50cl9pbmZvKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IHZlY3RvciA9IGludHJfaW5mbyBcdTAwMjYgSU5UUl9JTkZPX1ZFQ1RPUl9NQVNLO1xuJiM0MztcbiYjNDM7XHRpZiAoS1ZNX0JVRyghaXNfZXh0ZXJuYWxfaW50cihpbnRyX2luZm8pLCB2Y3B1LVx1MDAzZWt2bSxcbiYjNDM7XHQgICAgXCYjMzQ7dW5leHBlY3RlZCBWTS1FeGl0IGludGVycnVwdCBpbmZvOiAweCV4XCYjMzQ7LCBpbnRyX2luZm8pKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRrdm1fYmVmb3JlX2ludGVycnVwdCh2Y3B1LCBLVk1fSEFORExJTkdfSVJRKTtcbiYjNDM7XHR4ODZfZW50cnlfZnJvbV9rdm0oRVZFTlRfVFlQRV9FWFRJTlQsIHZlY3Rvcik7XG4mIzQzO1x0a3ZtX2FmdGVyX2ludGVycnVwdCh2Y3B1KTtcbiYjNDM7XG4mIzQzO1x0dmNwdS1cdTAwM2VhcmNoLmF0X2luc3RydWN0aW9uX2JvdW5kYXJ5ID0gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdnRfaGFuZGxlX2V4aXRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7e1xuJiM0MztcdGlmICh0b192dCh2Y3B1KS1cdTAwM2VlbXVsYXRpb25fcmVxdWlyZWQpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAodnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljKSB7XG4mIzQzO1x0Y2FzZSBFWElUX1JFQVNPTl9FWFRFUk5BTF9JTlRFUlJVUFQ6XG4mIzQzO1x0XHRoYW5kbGVfZXh0ZXJuYWxfaW50ZXJydXB0X2lycW9mZih2Y3B1LCB2dF9nZXRfaW50cl9pbmZvKHZjcHUpKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgRVhJVF9SRUFTT05fRVhDRVBUSU9OX05NSTpcbiYjNDM7XHRcdGhhbmRsZV9leGNlcHRpb25faXJxb2ZmKHZjcHUsIHZ0X2dldF9pbnRyX2luZm8odmNwdSkpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBFWElUX1JFQVNPTl9NQ0VfRFVSSU5HX1ZNRU5UUlk6XG4mIzQzO1x0XHRrdm1fbWFjaGluZV9jaGVjaygpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7bm9pbnN0ciB2b2lkIHZ0X2hhbmRsZV9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCh1MTYpdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljICE9IEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUkgfHxcbiYjNDM7XHQgICAgIWlzX25taSh2dF9nZXRfaW50cl9pbmZvKHZjcHUpKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0a3ZtX2JlZm9yZV9pbnRlcnJ1cHQodmNwdSwgS1ZNX0hBTkRMSU5HX05NSSk7XG4mIzQzO1x0eDg2X2VudHJ5X2Zyb21fa3ZtKEVWRU5UX1RZUEVfTk1JLCBOTUlfVkVDVE9SKTtcbiYjNDM7XHRrdm1fYWZ0ZXJfaW50ZXJydXB0KHZjcHUpO1xuJiM0Mzt9XG4mIzQzO1xuICNkZWZpbmUgVk1YX1JFUVVJUkVEX0FQSUNWX0lOSElCSVRTXHRcdFx0XHRcXFxuIFx0KEJJVChBUElDVl9JTkhJQklUX1JFQVNPTl9ESVNBQkxFRCkgfFx0XHRcdFxcXG4gXHQgQklUKEFQSUNWX0lOSElCSVRfUkVBU09OX0FCU0VOVCkgfFx0XHRcdFxcXG5AQCAtMTAwMCwxMiAmIzQzOzEwODQsMTIgQEAgc3RydWN0IGt2bV94ODZfb3BzIHZ0X3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcbiBcdC5sb2FkX21tdV9wZ2QgPSB2dF9vcChsb2FkX21tdV9wZ2QpLFxuIFxuIFx0LmNoZWNrX2ludGVyY2VwdCA9IHZteF9jaGVja19pbnRlcmNlcHQsXG4tXHQuaGFuZGxlX2V4aXRfaXJxb2ZmID0gdm14X2hhbmRsZV9leGl0X2lycW9mZixcbiYjNDM7XHQuaGFuZGxlX2V4aXRfaXJxb2ZmID0gdnRfaGFuZGxlX2V4aXRfaXJxb2ZmLFxuIFxuIFx0LnVwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyA9IHZ0X29wKHVwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyksXG4gXG4tXHQucGlfdXBkYXRlX2lydGUgPSB2bXhfcGlfdXBkYXRlX2lydGUsXG4tXHQucGlfc3RhcnRfYnlwYXNzID0gdm14X3BpX3N0YXJ0X2J5cGFzcyxcbiYjNDM7XHQucGlfdXBkYXRlX2lydGUgPSB2dF9waV91cGRhdGVfaXJ0ZSxcbiYjNDM7XHQucGlfc3RhcnRfYnlwYXNzID0gdnRfcGlfc3RhcnRfYnlwYXNzLFxuIFxuICNpZmRlZiBDT05GSUdfWDg2XzY0XG4gXHQuc2V0X2h2X3RpbWVyID0gdnRfb3Aoc2V0X2h2X3RpbWVyKSxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xuaW5kZXggMTUxODczNDA3YWJkMy4uNDc1OTllNzMxMmNmZCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbkBAIC00NDYsNyAmIzQzOzQ0Niw3IEBAIHN0YXRpYyB2b2lkIG5lc3RlZF9lcHRfaW5qZWN0X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHQgKiBcJiMzNDtOTUkgdW5ibG9ja2luZyBkdWUgdG8gSVJFVFwmIzM0OywgaS5lLiB0aGUgYml0IGNhbiBiZSBwcm9wYWdhdGVkXG4gXHRcdCAqIGFzLWlzIGZyb20gdGhlIG9yaWdpbmFsIEVYSVRfUVVBTElGSUNBVElPTi5cbiBcdFx0ICovXG4tXHRcdGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpIFx1MDAyNiBJTlRSX0lORk9fVU5CTE9DS19OTUk7XG4mIzQzO1x0XHRleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpIFx1MDAyNiBJTlRSX0lORk9fVU5CTE9DS19OTUk7XG4gXHR9IGVsc2Uge1xuIFx0XHRpZiAoZmF1bHQtXHUwMDNlZXJyb3JfY29kZSBcdTAwMjYgUEZFUlJfUlNWRF9NQVNLKSB7XG4gXHRcdFx0dm1fZXhpdF9yZWFzb24gPSBFWElUX1JFQVNPTl9FUFRfTUlTQ09ORklHO1xuQEAgLTQ3Miw3ICYjNDM7NDcyLDcgQEAgc3RhdGljIHZvaWQgbmVzdGVkX2VwdF9pbmplY3RfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRcdFx0ICogYW5kIHdhbGtzIHRoZSBmYXVsdGluZyBHUEEuXG4gXHRcdFx0ICovXG4gXHRcdFx0aWYgKGZyb21faGFyZHdhcmUpXG4tXHRcdFx0XHRleGl0X3F1YWxpZmljYXRpb24gfD0gdm14X2dldF9leGl0X3F1YWwodmNwdSkgXHUwMDI2IG1hc2s7XG4mIzQzO1x0XHRcdFx0ZXhpdF9xdWFsaWZpY2F0aW9uIHw9IHZ0X2dldF9leGl0X3F1YWwodmNwdSkgXHUwMDI2IG1hc2s7XG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0ZXhpdF9xdWFsaWZpY2F0aW9uIHw9IGZhdWx0LVx1MDAzZWV4aXRfcXVhbGlmaWNhdGlvbiBcdTAwMjYgbWFzaztcbiBcbkBAIC00NzQ3LDcgJiM0Mzs0NzQ3LDcgQEAgc3RhdGljIHZvaWQgcHJlcGFyZV92bWNzMTIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgdm1jczEyICp2bWNzMTIsXG4ge1xuIFx0LyogdXBkYXRlIGV4aXQgaW5mb3JtYXRpb24gZmllbGRzOiAqL1xuIFx0dm1jczEyLVx1MDAzZXZtX2V4aXRfcmVhc29uID0gdm1fZXhpdF9yZWFzb247XG4tXHRpZiAodm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5lbmNsYXZlX21vZGUpXG4mIzQzO1x0aWYgKHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5lbmNsYXZlX21vZGUpXG4gXHRcdHZtY3MxMi1cdTAwM2V2bV9leGl0X3JlYXNvbiB8PSBWTVhfRVhJVF9SRUFTT05TX1NHWF9FTkNMQVZFX01PREU7XG4gXHR2bWNzMTItXHUwMDNlZXhpdF9xdWFsaWZpY2F0aW9uID0gZXhpdF9xdWFsaWZpY2F0aW9uO1xuIFxuQEAgLTUzNzMsNyAmIzQzOzUzNzMsNyBAQCBzdGF0aWMgaW50IG5lc3RlZF92bXhfZ2V0X3ZtcHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgKnZtcG9pbnRlcixcbiBcdHN0cnVjdCB4ODZfZXhjZXB0aW9uIGU7XG4gXHRpbnQgcjtcbiBcbi1cdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxuJiM0MztcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZ0X2dldF9leGl0X3F1YWwodmNwdSksXG4gXHRcdFx0XHR2bWNzX3JlYWQzMihWTVhfSU5TVFJVQ1RJT05fSU5GTyksIGZhbHNlLFxuIFx0XHRcdFx0c2l6ZW9mKCp2bXBvaW50ZXIpLCBcdTAwMjZndmEpKSB7XG4gXHRcdCpyZXQgPSAxO1xuQEAgLTU2NjUsNyAmIzQzOzU2NjUsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXJlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCB2bWNzMTIgKnZtY3MxMiA9IGlzX2d1ZXN0X21vZGUodmNwdSkgPyBnZXRfc2hhZG93X3ZtY3MxMih2Y3B1KVxuIFx0XHRcdFx0XHRcdCAgICA6IGdldF92bWNzMTIodmNwdSk7XG4tXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdHUzMiBpbnN0cl9pbmZvID0gdm1jc19yZWFkMzIoVk1YX0lOU1RSVUNUSU9OX0lORk8pO1xuIFx0c3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7XG4gXHRzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBlO1xuQEAgLTU3NzEsNyAmIzQzOzU3NzEsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXdyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRzdHJ1Y3Qgdm1jczEyICp2bWNzMTIgPSBpc19ndWVzdF9tb2RlKHZjcHUpID8gZ2V0X3NoYWRvd192bWNzMTIodmNwdSlcbiBcdFx0XHRcdFx0XHQgICAgOiBnZXRfdm1jczEyKHZjcHUpO1xuLVx0dW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXHR1MzIgaW5zdHJfaW5mbyA9IHZtY3NfcmVhZDMyKFZNWF9JTlNUUlVDVElPTl9JTkZPKTtcbiBcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xuIFx0c3RydWN0IHg4Nl9leGNlcHRpb24gZTtcbkBAIC01OTYwLDcgJiM0Mzs1OTYwLDcgQEAgc3RhdGljIGludCBoYW5kbGVfdm1wdHJsZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gLyogRW11bGF0ZSB0aGUgVk1QVFJTVCBpbnN0cnVjdGlvbiAqL1xuIHN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRyc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBleGl0X3F1YWwgPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFx0dTMyIGluc3RyX2luZm8gPSB2bWNzX3JlYWQzMihWTVhfSU5TVFJVQ1RJT05fSU5GTyk7XG4gXHRncGFfdCBjdXJyZW50X3ZtcHRyID0gdG9fdm14KHZjcHUpLVx1MDAzZW5lc3RlZC5jdXJyZW50X3ZtcHRyO1xuIFx0c3RydWN0IHg4Nl9leGNlcHRpb24gZTtcbkBAIC02MDIxLDcgJiM0Mzs2MDIxLDcgQEAgc3RhdGljIGludCBoYW5kbGVfaW52ZXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdC8qIEFjY29yZGluZyB0byB0aGUgSW50ZWwgVk1YIGluc3RydWN0aW9uIHJlZmVyZW5jZSwgdGhlIG1lbW9yeVxuIFx0ICogb3BlcmFuZCBpcyByZWFkIGV2ZW4gaWYgaXQgaXNuJiMzOTt0IG5lZWRlZCAoZS5nLiwgZm9yIHR5cGU9PWdsb2JhbClcbiBcdCAqL1xuLVx0aWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgdm14X2dldF9leGl0X3F1YWwodmNwdSksXG4mIzQzO1x0aWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KSxcbiBcdFx0XHR2bXhfaW5zdHJ1Y3Rpb25faW5mbywgZmFsc2UsIHNpemVvZihvcGVyYW5kKSwgXHUwMDI2Z3ZhKSlcbiBcdFx0cmV0dXJuIDE7XG4gXHRyID0ga3ZtX3JlYWRfZ3Vlc3RfdmlydCh2Y3B1LCBndmEsIFx1MDAyNm9wZXJhbmQsIHNpemVvZihvcGVyYW5kKSwgXHUwMDI2ZSk7XG5AQCAtNjEwNCw3ICYjNDM7NjEwNCw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2ludnZwaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0LyogYWNjb3JkaW5nIHRvIHRoZSBpbnRlbCB2bXggaW5zdHJ1Y3Rpb24gcmVmZXJlbmNlLCB0aGUgbWVtb3J5XG4gXHQgKiBvcGVyYW5kIGlzIHJlYWQgZXZlbiBpZiBpdCBpc24mIzM5O3QgbmVlZGVkIChlLmcuLCBmb3IgdHlwZT09Z2xvYmFsKVxuIFx0ICovXG4tXHRpZiAoZ2V0X3ZteF9tZW1fYWRkcmVzcyh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSxcbiYjNDM7XHRpZiAoZ2V0X3ZteF9tZW1fYWRkcmVzcyh2Y3B1LCB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxuIFx0XHRcdHZteF9pbnN0cnVjdGlvbl9pbmZvLCBmYWxzZSwgc2l6ZW9mKG9wZXJhbmQpLCBcdTAwMjZndmEpKVxuIFx0XHRyZXR1cm4gMTtcbiBcdHIgPSBrdm1fcmVhZF9ndWVzdF92aXJ0KHZjcHUsIGd2YSwgXHUwMDI2b3BlcmFuZCwgc2l6ZW9mKG9wZXJhbmQpLCBcdTAwMjZlKTtcbkBAIC02MjM2LDggJiM0Mzs2MjM2LDggQEAgc3RhdGljIGludCBoYW5kbGVfdm1mdW5jKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdCAqIEVYSVRfUkVBU09OX1ZNRlVOQyBhcyB0aGUgZXhpdCByZWFzb24uXG4gXHQgKi9cbiBcdG5lc3RlZF92bXhfdm1leGl0KHZjcHUsIHZteC1cdTAwM2V2dC5leGl0X3JlYXNvbi5mdWxsLFxuLVx0XHRcdCAgdm14X2dldF9pbnRyX2luZm8odmNwdSksXG4tXHRcdFx0ICB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSk7XG4mIzQzO1x0XHRcdCAgdnRfZ2V0X2ludHJfaW5mbyh2Y3B1KSxcbiYjNDM7XHRcdFx0ICB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpKTtcbiBcdHJldHVybiAxO1xuIH1cbiBcbkBAIC02Mjg4LDcgJiM0Mzs2Mjg4LDcgQEAgc3RhdGljIGJvb2wgbmVzdGVkX3ZteF9leGl0X2hhbmRsZWRfaW8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0aWYgKCFuZXN0ZWRfY3B1X2hhcyh2bWNzMTIsIENQVV9CQVNFRF9VU0VfSU9fQklUTUFQUykpXG4gXHRcdHJldHVybiBuZXN0ZWRfY3B1X2hhcyh2bWNzMTIsIENQVV9CQVNFRF9VTkNPTkRfSU9fRVhJVElORyk7XG4gXG4tXHRleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiYjNDM7XHRleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFxuIFx0cG9ydCA9IGV4aXRfcXVhbGlmaWNhdGlvbiBcdTAwM2VcdTAwM2UgMTY7XG4gXHRzaXplID0gKGV4aXRfcXVhbGlmaWNhdGlvbiBcdTAwMjYgNykgJiM0MzsgMTtcbkBAIC02MzE0LDcgJiM0Mzs2MzE0LDcgQEAgc3RhdGljIGJvb2wgbmVzdGVkX3ZteF9leGl0X2hhbmRsZWRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcbiBcdGlmIChleGl0X3JlYXNvbi5iYXNpYyA9PSBFWElUX1JFQVNPTl9NU1JfUkVBRF9JTU0gfHxcbiBcdCAgICBleGl0X3JlYXNvbi5iYXNpYyA9PSBFWElUX1JFQVNPTl9NU1JfV1JJVEVfSU1NKVxuLVx0XHRtc3JfaW5kZXggPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiYjNDM7XHRcdG1zcl9pbmRleCA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXHRlbHNlXG4gXHRcdG1zcl9pbmRleCA9IGt2bV9lY3hfcmVhZCh2Y3B1KTtcbiBcbkBAIC02MzUwLDcgJiM0Mzs2MzUwLDcgQEAgc3RhdGljIGJvb2wgbmVzdGVkX3ZteF9leGl0X2hhbmRsZWRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBzdGF0aWMgYm9vbCBuZXN0ZWRfdm14X2V4aXRfaGFuZGxlZF9jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRzdHJ1Y3Qgdm1jczEyICp2bWNzMTIpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXHRpbnQgY3IgPSBleGl0X3F1YWxpZmljYXRpb24gXHUwMDI2IDE1O1xuIFx0aW50IHJlZztcbiBcdHVuc2lnbmVkIGxvbmcgdmFsO1xuQEAgLTY0ODQsNyAmIzQzOzY0ODQsNyBAQCBzdGF0aWMgYm9vbCBuZXN0ZWRfdm14X2wwX3dhbnRzX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFxuIFx0c3dpdGNoICgodTE2KWV4aXRfcmVhc29uLmJhc2ljKSB7XG4gXHRjYXNlIEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUk6XG4tXHRcdGludHJfaW5mbyA9IHZteF9nZXRfaW50cl9pbmZvKHZjcHUpO1xuJiM0MztcdFx0aW50cl9pbmZvID0gdnRfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcbiBcdFx0aWYgKGlzX25taShpbnRyX2luZm8pKVxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0XHRlbHNlIGlmIChpc19wYWdlX2ZhdWx0KGludHJfaW5mbykpXG5AQCAtNjU2Nyw3ICYjNDM7NjU2Nyw3IEBAIHN0YXRpYyBib29sIG5lc3RlZF92bXhfbDFfd2FudHNfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXG4gXHRzd2l0Y2ggKCh1MTYpZXhpdF9yZWFzb24uYmFzaWMpIHtcbiBcdGNhc2UgRVhJVF9SRUFTT05fRVhDRVBUSU9OX05NSTpcbi1cdFx0aW50cl9pbmZvID0gdm14X2dldF9pbnRyX2luZm8odmNwdSk7XG4mIzQzO1x0XHRpbnRyX2luZm8gPSB2dF9nZXRfaW50cl9pbmZvKHZjcHUpO1xuIFx0XHRpZiAoaXNfbm1pKGludHJfaW5mbykpXG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHRcdGVsc2UgaWYgKGlzX3BhZ2VfZmF1bHQoaW50cl9pbmZvKSlcbkBAIC02NzM3LDE0ICYjNDM7NjczNywxNCBAQCBib29sIG5lc3RlZF92bXhfcmVmbGVjdF92bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICogbmVlZCB0byBiZSBzeW50aGVzaXplZCBieSBxdWVyeWluZyB0aGUgaW4ta2VybmVsIExBUElDLCBidXQgZXh0ZXJuYWxcbiBcdCAqIGludGVycnVwdHMgYXJlIG5ldmVyIHJlZmxlY3RlZCB0byBMMSBzbyBpdCYjMzk7cyBhIG5vbi1pc3N1ZS5cbiBcdCAqL1xuLVx0ZXhpdF9pbnRyX2luZm8gPSB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcbiYjNDM7XHRleGl0X2ludHJfaW5mbyA9IHZ0X2dldF9pbnRyX2luZm8odmNwdSk7XG4gXHRpZiAoaXNfZXhjZXB0aW9uX3dpdGhfZXJyb3JfY29kZShleGl0X2ludHJfaW5mbykpIHtcbiBcdFx0c3RydWN0IHZtY3MxMiAqdm1jczEyID0gZ2V0X3ZtY3MxMih2Y3B1KTtcbiBcbiBcdFx0dm1jczEyLVx1MDAzZXZtX2V4aXRfaW50cl9lcnJvcl9jb2RlID1cbiBcdFx0XHR2bWNzX3JlYWQzMihWTV9FWElUX0lOVFJfRVJST1JfQ09ERSk7XG4gXHR9XG4tXHRleGl0X3F1YWwgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiYjNDM7XHRleGl0X3F1YWwgPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFxuIHJlZmxlY3Rfdm1leGl0OlxuIFx0bmVzdGVkX3ZteF92bWV4aXQodmNwdSwgZXhpdF9yZWFzb24uZnVsbCwgZXhpdF9pbnRyX2luZm8sIGV4aXRfcXVhbCk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5jIGIvYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5jXG5pbmRleCA0YTZkOWExN2RhMjM4Li4yNjQ0YWRkNTRiNzZiIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmNcbkBAIC0xNCw2ICYjNDM7MTQsOCBAQFxuICNpbmNsdWRlIFwmIzM0O3ZteC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dGR4LmhcJiMzNDtcbiBcbiYjNDM7I3ByYWdtYSBHQ0MgcG9pc29uIHRvX3ZteFxuJiM0MztcbiAvKlxuICAqIE1haW50YWluIGEgcGVyLUNQVSBsaXN0IG9mIHZDUFVzIHRoYXQgbmVlZCB0byBiZSBhd2FrZW5lZCBieSB3YWtldXBfaGFuZGxlcigpXG4gICogd2hlbiBhIFdBS0VVUF9WRUNUT1IgaW50ZXJydXB0ZWQgaXMgcG9zdGVkLiAgdkNQVXMgYXJlIGFkZGVkIHRvIHRoZSBsaXN0IHdoZW5cbkBAIC01NCw3ICYjNDM7NTYsNyBAQCBzdGF0aWMgaW50IHBpX3RyeV9zZXRfY29udHJvbChzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYywgdTY0ICpwb2xkLCB1NjQgbmV3KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXZvaWQgdm14X3ZjcHVfcGlfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4mIzQzO3ZvaWQgdnRfdmNwdV9waV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcbiB7XG4gXHRzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYyA9IHZjcHVfdG9fcGlfZGVzYyh2Y3B1KTtcbiBcdHN0cnVjdCB2Y3B1X3Z0ICp2dCA9IHRvX3Z0KHZjcHUpO1xuQEAgLTE0NCwxMSAmIzQzOzE0NiwxMSBAQCB2b2lkIHZteF92Y3B1X3BpX2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KVxuIFx0XHRwaV9zZXRfb24ocGlfZGVzYyk7XG4gfVxuIFxuLXN0YXRpYyBib29sIHZteF9jYW5fdXNlX3Z0ZF9waShzdHJ1Y3Qga3ZtICprdm0pXG4mIzQzO3N0YXRpYyBib29sIHZ0X2Nhbl91c2VfdnRkX3BpKHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4gXHQvKlxuIFx0ICogTm90ZSwgcmVhZGluZyB0aGUgbnVtYmVyIG9mIHBvc3NpYmxlIGJ5cGFzcyBJUlFzIGNhbiByYWNlIHdpdGggYVxuLVx0ICogYnlwYXNzIElSUSBiZWluZyBhdHRhY2hlZCB0byB0aGUgVk0uICB2bXhfcGlfc3RhcnRfYnlwYXNzKCkgZW5zdXJlc1xuJiM0MztcdCAqIGJ5cGFzcyBJUlEgYmVpbmcgYXR0YWNoZWQgdG8gdGhlIFZNLiAgdnRfcGlfc3RhcnRfYnlwYXNzKCkgZW5zdXJlc1xuIFx0ICogYmxvY2tuZyB2Q1BVcyB3aWxsIHNlZSBhbiBlbGV2YXRlZCBjb3VudCBvciBnZXQgS1ZNX1JFUV9VTkJMT0NLLlxuIFx0ICovXG4gXHRyZXR1cm4gaXJxY2hpcF9pbl9rZXJuZWwoa3ZtKSBcdTAwMjZcdTAwMjYga3ZtX2FyY2hfaGFzX2lycV9ieXBhc3MoKSBcdTAwMjZcdTAwMjZcbkBAIC0yMDYsNyAmIzQzOzIwOCw3IEBAIHN0YXRpYyB2b2lkIHBpX2VuYWJsZV93YWtldXBfaGFuZGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdF9fYXBpY19zZW5kX0lQSV9zZWxmKFBPU1RFRF9JTlRSX1dBS0VVUF9WRUNUT1IpO1xuIH1cbiBcbi1zdGF0aWMgYm9vbCB2bXhfbmVlZHNfcGlfd2FrZXVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7c3RhdGljIGJvb2wgdnRfbmVlZHNfcGlfd2FrZXVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHQvKlxuIFx0ICogVGhlIGRlZmF1bHQgcG9zdGVkIGludGVycnVwdCB2ZWN0b3IgZG9lcyBub3RoaW5nIHdoZW5cbkBAIC0yMTcsMTQgJiM0MzsyMTksMTQgQEAgc3RhdGljIGJvb2wgdm14X25lZWRzX3BpX3dha2V1cChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHQgKiBiYWNrIHRvIHRoZSBwaV93YWtldXBfaGFuZGxlcigpIGZ1bmN0aW9uLlxuIFx0ICovXG4gXHRyZXR1cm4gKHZteF9jYW5fdXNlX2lwaXYodmNwdSkgXHUwMDI2XHUwMDI2ICFpc190ZF92Y3B1KHZjcHUpKSB8fFxuLVx0XHR2bXhfY2FuX3VzZV92dGRfcGkodmNwdS1cdTAwM2Vrdm0pO1xuJiM0MztcdFx0dnRfY2FuX3VzZV92dGRfcGkodmNwdS1cdTAwM2Vrdm0pO1xuIH1cbiBcbi12b2lkIHZteF92Y3B1X3BpX3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3ZvaWQgdnRfdmNwdV9waV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCBwaV9kZXNjICpwaV9kZXNjID0gdmNwdV90b19waV9kZXNjKHZjcHUpO1xuIFxuLVx0aWYgKCF2bXhfbmVlZHNfcGlfd2FrZXVwKHZjcHUpKVxuJiM0MztcdGlmICghdnRfbmVlZHNfcGlfd2FrZXVwKHZjcHUpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHQvKlxuQEAgLTI5MiwxNyAmIzQzOzI5NCwxNyBAQCBib29sIHBpX2hhc19wZW5kaW5nX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gLypcbiAgKiBLaWNrIGFsbCB2Q1BVcyB3aGVuIHRoZSBmaXJzdCBwb3NzaWJsZSBieXBhc3MgSVJRIGlzIGF0dGFjaGVkIHRvIGEgVk0sIGFzXG4gICogYmxvY2tpbmcgdkNQVXMgbWF5IHNjaGVkdWxlZCBvdXQgd2l0aG91dCByZWNvbmZpZ3VyaW5nIFBJRC5OViB0byB0aGUgd2FrZXVwXG4tICogdmVjdG9yLCBpLmUuIGlmIHRoZSBieXBhc3MgSVJRIGNhbWUgYWxvbmcgYWZ0ZXIgdm14X3ZjcHVfcGlfcHV0KCkuXG4mIzQzOyAqIHZlY3RvciwgaS5lLiBpZiB0aGUgYnlwYXNzIElSUSBjYW1lIGFsb25nIGFmdGVyIHZ0X3ZjcHVfcGlfcHV0KCkuXG4gICovXG4tdm9pZCB2bXhfcGlfc3RhcnRfYnlwYXNzKHN0cnVjdCBrdm0gKmt2bSlcbiYjNDM7dm9pZCB2dF9waV9zdGFydF9ieXBhc3Moc3RydWN0IGt2bSAqa3ZtKVxuIHtcbi1cdGlmIChXQVJOX09OX09OQ0UoIXZteF9jYW5fdXNlX3Z0ZF9waShrdm0pKSlcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKCF2dF9jYW5fdXNlX3Z0ZF9waShrdm0pKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0a3ZtX21ha2VfYWxsX2NwdXNfcmVxdWVzdChrdm0sIEtWTV9SRVFfVU5CTE9DSyk7XG4gfVxuIFxuLWludCB2bXhfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sXG4mIzQzO2ludCB2dF9waV91cGRhdGVfaXJ0ZShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQsIHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0ICAgICAgIHVuc2lnbmVkIGludCBob3N0X2lycSwgdWludDMyX3QgZ3Vlc3RfaXJxLFxuIFx0XHQgICAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdmVjdG9yKVxuIHtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmggYi9hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmhcbmluZGV4IGE0YWYzOTk0OGNmMDQuLmM1ODYwZWE4MjhhZTkgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuaFxuQEAgLTgsMTYgJiM0Mzs4LDE2IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3Bvc3RlZF9pbnRyLmhcdTAwM2VcbiBcbi12b2lkIHZteF92Y3B1X3BpX2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTtcbi12b2lkIHZteF92Y3B1X3BpX3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuJiM0Mzt2b2lkIHZ0X3ZjcHVfcGlfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpO1xuJiM0Mzt2b2lkIHZ0X3ZjcHVfcGlfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCBwaV93YWtldXBfaGFuZGxlcih2b2lkKTtcbiB2b2lkIF9faW5pdCBwaV9pbml0X2NwdShpbnQgY3B1KTtcbiB2b2lkIHBpX2FwaWN2X3ByZV9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gYm9vbCBwaV9oYXNfcGVuZGluZ19pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbi1pbnQgdm14X3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLFxuJiM0MztpbnQgdnRfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdCAgICAgICB1bnNpZ25lZCBpbnQgaG9zdF9pcnEsIHVpbnQzMl90IGd1ZXN0X2lycSxcbiBcdFx0ICAgICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZlY3Rvcik7XG4tdm9pZCB2bXhfcGlfc3RhcnRfYnlwYXNzKHN0cnVjdCBrdm0gKmt2bSk7XG4mIzQzO3ZvaWQgdnRfcGlfc3RhcnRfYnlwYXNzKHN0cnVjdCBrdm0gKmt2bSk7XG4gXG4gc3RhdGljIGlubGluZSBpbnQgcGlfZmluZF9oaWdoZXN0X3ZlY3RvcihzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYylcbiB7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbmluZGV4IGIyNzJjMjA1ODZhNzQuLmVmYmIxYWM2ZjUxZWEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG5AQCAtNzE2LDcgJiM0Mzs3MTYsNyBAQCB2b2lkIHRkeF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3RkeCAqdGR4ID0gdG9fdGR4KHZjcHUpO1xuIFxuLVx0dm14X3ZjcHVfcGlfbG9hZCh2Y3B1LCBjcHUpO1xuJiM0MztcdHZ0X3ZjcHVfcGlfbG9hZCh2Y3B1LCBjcHUpO1xuIFx0aWYgKHZjcHUtXHUwMDNlY3B1ID09IGNwdSB8fCAhaXNfaGtpZF9hc3NpZ25lZCh0b19rdm1fdGR4KHZjcHUtXHUwMDNla3ZtKSkpXG4gXHRcdHJldHVybjtcbiBcbkBAIC03NDEsNyAmIzQzOzc0MSw3IEBAIGJvb2wgdGR4X2ludGVycnVwdF9hbGxvd2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdCAqIGludGVycnVwdCBpcyBhbHdheXMgYWxsb3dlZCB1bmxlc3MgVERYIGd1ZXN0IGNhbGxzIFREVk1DQUxMIHdpdGggSExULFxuIFx0ICogd2hpY2ggcGFzc2VzIHRoZSBpbnRlcnJ1cHQgYmxvY2tlZCBmbGFnLlxuIFx0ICovXG4tXHRyZXR1cm4gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYyAhPSBFWElUX1JFQVNPTl9ITFQgfHxcbiYjNDM7XHRyZXR1cm4gdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljICE9IEVYSVRfUkVBU09OX0hMVCB8fFxuIFx0ICAgICAgICF0b190ZHgodmNwdSktXHUwMDNldnBfZW50ZXJfYXJncy5yMTI7XG4gfVxuIFxuQEAgLTc1OSw3ICYjNDM7NzU5LDcgQEAgc3RhdGljIGJvb2wgdGR4X3Byb3RlY3RlZF9hcGljX2hhc19pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICogb3RoZXJ3aXNlIHRoZSBpbnRlcnJ1cHQgd291bGQgaGF2ZSBiZWVuIHNlcnZpY2VkIGF0IHRoZSBpbnN0cnVjdGlvblxuIFx0ICogYm91bmRhcnkuXG4gXHQgKi9cbi1cdGlmICh2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljICE9IEVYSVRfUkVBU09OX0hMVCB8fFxuJiM0MztcdGlmICh2dF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMgIT0gRVhJVF9SRUFTT05fSExUIHx8XG4gXHQgICAgdG9fdGR4KHZjcHUpLVx1MDAzZXZwX2VudGVyX2FyZ3MucjEyKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG5AQCAtODI2LDcgJiM0Mzs4MjYsNyBAQCBzdGF0aWMgdm9pZCB0ZHhfcHJlcGFyZV9zd2l0Y2hfdG9faG9zdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gdm9pZCB0ZHhfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHZteF92Y3B1X3BpX3B1dCh2Y3B1KTtcbiYjNDM7XHR2dF92Y3B1X3BpX3B1dCh2Y3B1KTtcbiBcdHRkeF9wcmVwYXJlX3N3aXRjaF90b19ob3N0KHZjcHUpO1xuIH1cbiBcbkBAIC05NzQsMTUgJiM0Mzs5NzQsMTUgQEAgc3RhdGljIG5vaW5zdHIgdm9pZCB0ZHhfdmNwdV9lbnRlcl9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHRkeC1cdTAwM2VleGl0X2dwYSA9IHRkeC1cdTAwM2V2cF9lbnRlcl9hcmdzLnI4O1xuIFx0dnQtXHUwMDNlZXhpdF9pbnRyX2luZm8gPSB0ZHgtXHUwMDNldnBfZW50ZXJfYXJncy5yOTtcbiBcbi1cdHZteF9oYW5kbGVfbm1pKHZjcHUpO1xuJiM0MztcdHZ0X2hhbmRsZV9ubWkodmNwdSk7XG4gXG4gXHRndWVzdF9zdGF0ZV9leGl0X2lycW9mZigpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCB0ZHhfZmFpbGVkX3ZtZW50cnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHJldHVybiB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5IFx1MDAyNlx1MDAyNlxuLVx0ICAgICAgIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZnVsbCAhPSAtMXU7XG4mIzQzO1x0cmV0dXJuIHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mYWlsZWRfdm1lbnRyeSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICAgdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZ1bGwgIT0gLTF1O1xuIH1cbiBcbiBzdGF0aWMgZmFzdHBhdGhfdCB0ZHhfZXhpdF9oYW5kbGVyc19mYXN0cGF0aChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5AQCAtMTEzMSw3ICYjNDM7MTEzMSw3IEBAIHZvaWQgdGR4X2luamVjdF9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIHN0YXRpYyBpbnQgdGR4X2hhbmRsZV9leGNlcHRpb25fbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHR1MzIgaW50cl9pbmZvID0gdm14X2dldF9pbnRyX2luZm8odmNwdSk7XG4mIzQzO1x0dTMyIGludHJfaW5mbyA9IHZ0X2dldF9pbnRyX2luZm8odmNwdSk7XG4gXG4gXHQvKlxuIFx0ICogTWFjaGluZSBjaGVja3MgYXJlIGhhbmRsZWQgYnkgaGFuZGxlX2V4Y2VwdGlvbl9pcnFvZmYoKSwgb3IgYnlcbkBAIC0xODk1LDcgJiM0MzsxODk1LDcgQEAgdm9pZCB0ZHhfZGVsaXZlcl9pbnRlcnJ1cHQoc3RydWN0IGt2bV9sYXBpYyAqYXBpYywgaW50IGRlbGl2ZXJ5X21vZGUsXG4gXHRzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTtcbiBcbiBcdC8qIFREWCBzdXBwb3J0cyBvbmx5IHBvc3RlZCBpbnRlcnJ1cHQuICBObyBsYXBpYyBlbXVsYXRpb24uICovXG4tXHRfX3ZteF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHQodmNwdSwgXHUwMDI2dGR4LVx1MDAzZXZ0LnBpX2Rlc2MsIHZlY3Rvcik7XG4mIzQzO1x0X192dF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHQodmNwdSwgXHUwMDI2dGR4LVx1MDAzZXZ0LnBpX2Rlc2MsIHZlY3Rvcik7XG4gXG4gXHR0cmFjZV9rdm1fYXBpY3ZfYWNjZXB0X2lycSh2Y3B1LVx1MDAzZXZjcHVfaWQsIGRlbGl2ZXJ5X21vZGUsIHRyaWdfbW9kZSwgdmVjdG9yKTtcbiB9XG5AQCAtMTkwMyw3ICYjNDM7MTkwMyw3IEBAIHZvaWQgdGR4X2RlbGl2ZXJfaW50ZXJydXB0KHN0cnVjdCBrdm1fbGFwaWMgKmFwaWMsIGludCBkZWxpdmVyeV9tb2RlLFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB0ZHhfaXNfc2VwdF92aW9sYXRpb25fdW5leHBlY3RlZF9wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHR1NjQgZWVxX3R5cGUgPSB0b190ZHgodmNwdSktXHUwMDNlZXh0X2V4aXRfcXVhbGlmaWNhdGlvbiBcdTAwMjYgVERYX0VYVF9FWElUX1FVQUxfVFlQRV9NQVNLO1xuLVx0dTY0IGVxID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4mIzQzO1x0dTY0IGVxID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcbiBcdGlmIChlZXFfdHlwZSAhPSBURFhfRVhUX0VYSVRfUVVBTF9UWVBFX1BFTkRJTkdfRVBUX1ZJT0xBVElPTilcbiBcdFx0cmV0dXJuIGZhbHNlO1xuQEAgLTE5MzksNyAmIzQzOzE5MzksNyBAQCBzdGF0aWMgaW50IHRkeF9oYW5kbGVfZXB0X3Zpb2xhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdC8qIE9ubHkgcHJpdmF0ZSBHUEEgdHJpZ2dlcnMgemVyby1zdGVwIG1pdGlnYXRpb24gKi9cbiBcdFx0bG9jYWxfcmV0cnkgPSB0cnVlO1xuIFx0fSBlbHNlIHtcbi1cdFx0ZXhpdF9xdWFsID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4mIzQzO1x0XHRleGl0X3F1YWwgPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFx0XHQvKlxuIFx0XHQgKiBFUFQgdmlvbGF0aW9uIGR1ZSB0byBpbnN0cnVjdGlvbiBmZXRjaCBzaG91bGQgbmV2ZXIgYmVcbiBcdFx0ICogdHJpZ2dlcmVkIGZyb20gc2hhcmVkIG1lbW9yeSBpbiBURFggZ3Vlc3QuICBJZiBzdWNoIEVQVFxuQEAgLTE5ODcsNyAmIzQzOzE5ODcsNyBAQCBzdGF0aWMgaW50IHRkeF9oYW5kbGVfZXB0X3Zpb2xhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHR3aGlsZSAoMSkge1xuIFx0XHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90O1xuIFxuLVx0XHRyZXQgPSBfX3ZteF9oYW5kbGVfZXB0X3Zpb2xhdGlvbih2Y3B1LCBncGEsIGV4aXRfcXVhbCk7XG4mIzQzO1x0XHRyZXQgPSBfX3Z0X2hhbmRsZV9lcHRfdmlvbGF0aW9uKHZjcHUsIGdwYSwgZXhpdF9xdWFsKTtcbiBcbiBcdFx0aWYgKHJldCAhPSBSRVRfUEZfUkVUUlkgfHwgIWxvY2FsX3JldHJ5KVxuIFx0XHRcdGJyZWFrO1xuQEAgLTIwMjEsNyAmIzQzOzIwMjEsNyBAQCBpbnQgdGR4X2NvbXBsZXRlX2VtdWxhdGVkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlcnIpXG4gXHRcdHJldHVybiAxO1xuIFx0fVxuIFxuLVx0aWYgKHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMgPT0gRVhJVF9SRUFTT05fTVNSX1JFQUQpXG4mIzQzO1x0aWYgKHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYyA9PSBFWElUX1JFQVNPTl9NU1JfUkVBRClcbiBcdFx0dGR2bWNhbGxfc2V0X3JldHVybl92YWwodmNwdSwga3ZtX3JlYWRfZWR4X2VheCh2Y3B1KSk7XG4gXG4gXHRyZXR1cm4gMTtcbkBAIC0yMDMyLDcgJiM0MzsyMDMyLDcgQEAgaW50IHRkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZmFzdHBhdGgpXG4ge1xuIFx0c3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7XG4gXHR1NjQgdnBfZW50ZXJfcmV0ID0gdGR4LVx1MDAzZXZwX2VudGVyX3JldDtcbi1cdHVuaW9uIHZteF9leGl0X3JlYXNvbiBleGl0X3JlYXNvbiA9IHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSk7XG4mIzQzO1x0dW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uID0gdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpO1xuIFxuIFx0aWYgKGZhc3RwYXRoICE9IEVYSVRfRkFTVFBBVEhfTk9ORSlcbiBcdFx0cmV0dXJuIDE7XG5AQCAtMjE0Miw5ICYjNDM7MjE0Miw5IEBAIHZvaWQgdGR4X2dldF9leGl0X2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgKnJlYXNvbixcbiBcbiBcdCpyZWFzb24gPSB0ZHgtXHUwMDNldnQuZXhpdF9yZWFzb24uZnVsbDtcbiBcdGlmICgqcmVhc29uICE9IC0xdSkge1xuLVx0XHQqaW5mbzEgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiYjNDM7XHRcdCppbmZvMSA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXHRcdCppbmZvMiA9IHRkeC1cdTAwM2VleHRfZXhpdF9xdWFsaWZpY2F0aW9uO1xuLVx0XHQqaW50cl9pbmZvID0gdm14X2dldF9pbnRyX2luZm8odmNwdSk7XG4mIzQzO1x0XHQqaW50cl9pbmZvID0gdnRfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcbiBcdH0gZWxzZSB7XG4gXHRcdCppbmZvMSA9IDA7XG4gXHRcdCppbmZvMiA9IDA7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguYyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbmluZGV4IDUwNDYzMGYwZWI0MGYuLjdlMzVjMmQwM2M2OWUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG5AQCAtMTU3NywxMiAmIzQzOzE1NzcsMTIgQEAgdm9pZCB2bXhfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcbiBcbiBcdHZteF92Y3B1X2xvYWRfdm1jcyh2Y3B1LCBjcHUpO1xuIFxuLVx0dm14X3ZjcHVfcGlfbG9hZCh2Y3B1LCBjcHUpO1xuJiM0MztcdHZ0X3ZjcHVfcGlfbG9hZCh2Y3B1LCBjcHUpO1xuIH1cbiBcbiB2b2lkIHZteF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0dm14X3ZjcHVfcGlfcHV0KHZjcHUpO1xuJiM0MztcdHZ0X3ZjcHVfcGlfcHV0KHZjcHUpO1xuIFxuIFx0dm14X3ByZXBhcmVfc3dpdGNoX3RvX2hvc3QodG9fdm14KHZjcHUpKTtcbiB9XG5AQCAtMTc5MSw3ICYjNDM7MTc5MSw3IEBAIGludCB2bXhfY2hlY2tfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlbXVsX3R5cGUsXG4gXHQgKiBzbyB0aGF0IGd1ZXN0IHVzZXJzcGFjZSBjYW4mIzM5O3QgRG9TIHRoZSBndWVzdCBzaW1wbHkgYnkgdHJpZ2dlcmluZ1xuIFx0ICogZW11bGF0aW9uIChlbmNsYXZlcyBhcmUgQ1BMMyBvbmx5KS5cbiBcdCAqL1xuLVx0aWYgKHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZW5jbGF2ZV9tb2RlKSB7XG4mIzQzO1x0aWYgKHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5lbmNsYXZlX21vZGUpIHtcbiBcdFx0a3ZtX3F1ZXVlX2V4Y2VwdGlvbih2Y3B1LCBVRF9WRUNUT1IpO1xuIFx0XHRyZXR1cm4gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQ7XG4gXHR9XG5AQCAtMTgwNiw3ICYjNDM7MTgwNiw3IEBAIGludCB2bXhfY2hlY2tfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlbXVsX3R5cGUsXG4gXG4gc3RhdGljIGludCBza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHR1bmlvbiB2bXhfZXhpdF9yZWFzb24gZXhpdF9yZWFzb24gPSB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpO1xuJiM0MztcdHVuaW9uIHZteF9leGl0X3JlYXNvbiBleGl0X3JlYXNvbiA9IHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KTtcbiBcdHVuc2lnbmVkIGxvbmcgcmlwLCBvcmlnX3JpcDtcbiBcdHUzMiBpbnN0cl9sZW47XG4gXG5AQCAtNDQyNCw3ICYjNDM7NDQyNCw3IEBAIHN0YXRpYyBpbnQgdm14X2RlbGl2ZXJfcG9zdGVkX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCB2ZWN0b3IpXG4gXHRpZiAoIXZjcHUtXHUwMDNlYXJjaC5hcGljLVx1MDAzZWFwaWN2X2FjdGl2ZSlcbiBcdFx0cmV0dXJuIC0xO1xuIFxuLVx0X192bXhfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0KHZjcHUsIFx1MDAyNnZ0LVx1MDAzZXBpX2Rlc2MsIHZlY3Rvcik7XG4mIzQzO1x0X192dF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHQodmNwdSwgXHUwMDI2dnQtXHUwMDNlcGlfZGVzYywgdmVjdG9yKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC01Mzc5LDE1ICYjNDM7NTM3OSw5IEBAIGJvb2wgdm14X2d1ZXN0X2luamVjdF9hYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHQgICAgICAgKGt2bV9nZXRfcmZsYWdzKHZjcHUpIFx1MDAyNiBYODZfRUZMQUdTX0FDKTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgaXNfeGZkX25tX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi17XG4tXHRyZXR1cm4gdmNwdS1cdTAwM2VhcmNoLmd1ZXN0X2ZwdS5mcHN0YXRlLVx1MDAzZXhmZCBcdTAwMjZcdTAwMjZcbi1cdCAgICAgICAha3ZtX2lzX2NyMF9iaXRfc2V0KHZjcHUsIFg4Nl9DUjBfVFMpO1xuLX1cbi1cbiBzdGF0aWMgaW50IHZteF9oYW5kbGVfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBlcnJvcl9jb2RlKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgY3IyID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBjcjIgPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFxuIFx0aWYgKHZjcHUtXHUwMDNlYXJjaC5hcGYuaG9zdF9hcGZfZmxhZ3MpXG4gXHRcdGdvdG8gaGFuZGxlX3BmO1xuQEAgLTU0MzUsNyAmIzQzOzU0MjksNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9leGNlcHRpb25fbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHUzMiB2ZWN0X2luZm87XG4gXG4gXHR2ZWN0X2luZm8gPSB2bXgtXHUwMDNlaWR0X3ZlY3RvcmluZ19pbmZvO1xuLVx0aW50cl9pbmZvID0gdm14X2dldF9pbnRyX2luZm8odmNwdSk7XG4mIzQzO1x0aW50cl9pbmZvID0gdnRfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcbiBcbiBcdC8qXG4gXHQgKiBNYWNoaW5lIGNoZWNrcyBhcmUgaGFuZGxlZCBieSBoYW5kbGVfZXhjZXB0aW9uX2lycW9mZigpLCBvciBieVxuQEAgLTU1MTYsNyAmIzQzOzU1MTAsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9leGNlcHRpb25fbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBcdHN3aXRjaCAoZXhfbm8pIHtcbiBcdGNhc2UgREJfVkVDVE9SOlxuLVx0XHRkcjYgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiYjNDM7XHRcdGRyNiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXHRcdGlmICghKHZjcHUtXHUwMDNlZ3Vlc3RfZGVidWcgXHUwMDI2XG4gXHRcdCAgICAgIChLVk1fR1VFU1REQkdfU0lOR0xFU1RFUCB8IEtWTV9HVUVTVERCR19VU0VfSFdfQlApKSkge1xuIFx0XHRcdC8qXG5AQCAtNTU5Miw3ICYjNDM7NTU4Niw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2lvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGludCBzaXplLCBpbiwgc3RyaW5nO1xuIFx0dW5zaWduZWQgcG9ydDtcbiBcbi1cdGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuJiM0MztcdGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXHRzdHJpbmcgPSAoZXhpdF9xdWFsaWZpY2F0aW9uIFx1MDAyNiAxNikgIT0gMDtcbiBcbiBcdCYjNDM7JiM0Mzt2Y3B1LVx1MDAzZXN0YXQuaW9fZXhpdHM7XG5AQCAtNTY4MSw3ICYjNDM7NTY3NSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGludCBlcnI7XG4gXHRpbnQgcmV0O1xuIFxuLVx0ZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4mIzQzO1x0ZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdGNyID0gZXhpdF9xdWFsaWZpY2F0aW9uIFx1MDAyNiAxNTtcbiBcdHJlZyA9IChleGl0X3F1YWxpZmljYXRpb24gXHUwMDNlXHUwMDNlIDgpIFx1MDAyNiAxNTtcbiBcdHN3aXRjaCAoKGV4aXRfcXVhbGlmaWNhdGlvbiBcdTAwM2VcdTAwM2UgNCkgXHUwMDI2IDMpIHtcbkBAIC01NzU5LDcgJiM0Mzs1NzUzLDcgQEAgc3RhdGljIGludCBoYW5kbGVfZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aW50IGRyLCBkcjcsIHJlZztcbiBcdGludCBlcnIgPSAxO1xuIFxuLVx0ZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4mIzQzO1x0ZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdGRyID0gZXhpdF9xdWFsaWZpY2F0aW9uIFx1MDAyNiBERUJVR19SRUdfQUNDRVNTX05VTTtcbiBcbiBcdC8qIEZpcnN0LCBpZiBEUiBkb2VzIG5vdCBleGlzdCwgdHJpZ2dlciBVRCAqL1xuQEAgLTU4NTUsNyAmIzQzOzU4NDksNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9pbnRlcnJ1cHRfd2luZG93KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBzdGF0aWMgaW50IGhhbmRsZV9pbnZscGcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFxuIFx0a3ZtX21tdV9pbnZscGcodmNwdSwgZXhpdF9xdWFsaWZpY2F0aW9uKTtcbiBcdHJldHVybiBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcbkBAIC01ODY0LDcgJiM0Mzs1ODU4LDcgQEAgc3RhdGljIGludCBoYW5kbGVfaW52bHBnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBzdGF0aWMgaW50IGhhbmRsZV9hcGljX2FjY2VzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0aWYgKGxpa2VseShmYXN0ZW9pKSkge1xuLVx0XHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFx0XHRpbnQgYWNjZXNzX3R5cGUsIG9mZnNldDtcbiBcbiBcdFx0YWNjZXNzX3R5cGUgPSBleGl0X3F1YWxpZmljYXRpb24gXHUwMDI2IEFQSUNfQUNDRVNTX1RZUEU7XG5AQCAtNTg4NSw3ICYjNDM7NTg3OSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2FwaWNfYWNjZXNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBzdGF0aWMgaW50IGhhbmRsZV9hcGljX2VvaV9pbmR1Y2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdGludCB2ZWN0b3IgPSBleGl0X3F1YWxpZmljYXRpb24gXHUwMDI2IDB4ZmY7XG4gXG4gXHQvKiBFT0ktaW5kdWNlZCBWTSBleGl0IGlzIHRyYXAtbGlrZSBhbmQgdGh1cyBubyBuZWVkIHRvIGFkanVzdCBJUCAqL1xuQEAgLTU4OTUsNyAmIzQzOzU4ODksNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9hcGljX2VvaV9pbmR1Y2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBzdGF0aWMgaW50IGhhbmRsZV9hcGljX3dyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcbiBcdC8qXG4gXHQgKiBBUElDLXdyaXRlIFZNLUV4aXQgaXMgdHJhcC1saWtlLCBLVk0gZG9lc24mIzM5O3QgbmVlZCB0byBhZHZhbmNlIFJJUCBhbmRcbkBAIC01OTIzLDcgJiM0Mzs1OTE3LDcgQEAgc3RhdGljIGludCBoYW5kbGVfdGFza19zd2l0Y2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWR0X2luZGV4ID0gKHZteC1cdTAwM2VpZHRfdmVjdG9yaW5nX2luZm8gXHUwMDI2IFZFQ1RPUklOR19JTkZPX1ZFQ1RPUl9NQVNLKTtcbiBcdHR5cGUgPSAodm14LVx1MDAzZWlkdF92ZWN0b3JpbmdfaW5mbyBcdTAwMjYgVkVDVE9SSU5HX0lORk9fVFlQRV9NQVNLKTtcbiBcbi1cdGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuJiM0MztcdGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXG4gXHRyZWFzb24gPSAodTMyKWV4aXRfcXVhbGlmaWNhdGlvbiBcdTAwM2VcdTAwM2UgMzA7XG4gXHRpZiAocmVhc29uID09IFRBU0tfU1dJVENIX0dBVEUgXHUwMDI2XHUwMDI2IGlkdF92KSB7XG5AQCAtNTk2OSw3ICYjNDM7NTk2Myw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3Rhc2tfc3dpdGNoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBzdGF0aWMgaW50IGhhbmRsZV9lcHRfdmlvbGF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdGdwYV90IGdwYTtcbiBcbiBcdC8qXG5AQCAtNTk5Nyw3ICYjNDM7NTk5MSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2VwdF92aW9sYXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKHVubGlrZWx5KGFsbG93X3NtYWxsZXJfbWF4cGh5YWRkciBcdTAwMjZcdTAwMjYgIWt2bV92Y3B1X2lzX2xlZ2FsX2dwYSh2Y3B1LCBncGEpKSlcbiBcdFx0cmV0dXJuIGt2bV9lbXVsYXRlX2luc3RydWN0aW9uKHZjcHUsIDApO1xuIFxuLVx0cmV0dXJuIF9fdm14X2hhbmRsZV9lcHRfdmlvbGF0aW9uKHZjcHUsIGdwYSwgZXhpdF9xdWFsaWZpY2F0aW9uKTtcbiYjNDM7XHRyZXR1cm4gX192dF9oYW5kbGVfZXB0X3Zpb2xhdGlvbih2Y3B1LCBncGEsIGV4aXRfcXVhbGlmaWNhdGlvbik7XG4gfVxuIFxuIHN0YXRpYyBpbnQgaGFuZGxlX2VwdF9taXNjb25maWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuQEAgLTYxNjAsNyAmIzQzOzYxNTQsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9pbnZwY2lkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdC8qIEFjY29yZGluZyB0byB0aGUgSW50ZWwgaW5zdHJ1Y3Rpb24gcmVmZXJlbmNlLCB0aGUgbWVtb3J5IG9wZXJhbmRcbiBcdCAqIGlzIHJlYWQgZXZlbiBpZiBpdCBpc24mIzM5O3QgbmVlZGVkIChlLmcuLCBmb3IgdHlwZT09YWxsKVxuIFx0ICovXG4tXHRpZiAoZ2V0X3ZteF9tZW1fYWRkcmVzcyh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSxcbiYjNDM7XHRpZiAoZ2V0X3ZteF9tZW1fYWRkcmVzcyh2Y3B1LCB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxuIFx0XHRcdFx0dm14X2luc3RydWN0aW9uX2luZm8sIGZhbHNlLFxuIFx0XHRcdFx0c2l6ZW9mKG9wZXJhbmQpLCBcdTAwMjZndmEpKVxuIFx0XHRyZXR1cm4gMTtcbkBAIC02MTc0LDcgJiM0Mzs2MTY4LDcgQEAgc3RhdGljIGludCBoYW5kbGVfcG1sX2Z1bGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIFx0dHJhY2Vfa3ZtX3BtbF9mdWxsKHZjcHUtXHUwMDNldmNwdV9pZCk7XG4gXG4tXHRleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiYjNDM7XHRleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFxuIFx0LypcbiBcdCAqIFBNTCBidWZmZXIgRlVMTCBoYXBwZW5lZCB3aGlsZSBleGVjdXRpbmcgaXJldCBmcm9tIE5NSSxcbkBAIC02Mjc4LDcgJiM0Mzs2MjcyLDcgQEAgc3RhdGljIGludCBoYW5kbGVfYnVzX2xvY2tfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBzdGF0aWMgaW50IGhhbmRsZV9ub3RpZnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBleGl0X3F1YWwgPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFx0Ym9vbCBjb250ZXh0X2ludmFsaWQgPSBleGl0X3F1YWwgXHUwMDI2IE5PVElGWV9WTV9DT05URVhUX0lOVkFMSUQ7XG4gXG4gXHQmIzQzOyYjNDM7dmNwdS1cdTAwM2VzdGF0Lm5vdGlmeV93aW5kb3dfZXhpdHM7XG5AQCAtNjMwOSwxMyAmIzQzOzYzMDMsMTMgQEAgc3RhdGljIGludCB2bXhfZ2V0X21zcl9pbW1fcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBzdGF0aWMgaW50IGhhbmRsZV9yZG1zcl9pbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHJldHVybiBrdm1fZW11bGF0ZV9yZG1zcl9pbW0odmNwdSwgdm14X2dldF9leGl0X3F1YWwodmNwdSksXG4mIzQzO1x0cmV0dXJuIGt2bV9lbXVsYXRlX3JkbXNyX2ltbSh2Y3B1LCB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxuIFx0XHRcdFx0ICAgICB2bXhfZ2V0X21zcl9pbW1fcmVnKHZjcHUpKTtcbiB9XG4gXG4gc3RhdGljIGludCBoYW5kbGVfd3Jtc3JfaW1tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRyZXR1cm4ga3ZtX2VtdWxhdGVfd3Jtc3JfaW1tKHZjcHUsIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxuJiM0MztcdHJldHVybiBrdm1fZW11bGF0ZV93cm1zcl9pbW0odmNwdSwgdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KSxcbiBcdFx0XHRcdCAgICAgdm14X2dldF9tc3JfaW1tX3JlZyh2Y3B1KSk7XG4gfVxuIFxuQEAgLTYzOTIsMTAgJiM0Mzs2Mzg2LDEwIEBAIHZvaWQgdm14X2dldF9leGl0X2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgKnJlYXNvbixcbiBcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xuIFxuIFx0KnJlYXNvbiA9IHZteC1cdTAwM2V2dC5leGl0X3JlYXNvbi5mdWxsO1xuLVx0KmluZm8xID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4mIzQzO1x0KmluZm8xID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdGlmICghKHZteC1cdTAwM2V2dC5leGl0X3JlYXNvbi5mYWlsZWRfdm1lbnRyeSkpIHtcbiBcdFx0KmluZm8yID0gdm14LVx1MDAzZWlkdF92ZWN0b3JpbmdfaW5mbztcbi1cdFx0KmludHJfaW5mbyA9IHZteF9nZXRfaW50cl9pbmZvKHZjcHUpO1xuJiM0MztcdFx0KmludHJfaW5mbyA9IHZ0X2dldF9pbnRyX2luZm8odmNwdSk7XG4gXHRcdGlmIChpc19leGNlcHRpb25fd2l0aF9lcnJvcl9jb2RlKCppbnRyX2luZm8pKVxuIFx0XHRcdCplcnJvcl9jb2RlID0gdm1jc19yZWFkMzIoVk1fRVhJVF9JTlRSX0VSUk9SX0NPREUpO1xuIFx0XHRlbHNlXG5AQCAtNjcwNiw3ICYjNDM7NjcwMCw3IEBAIHZvaWQgZHVtcF92bWNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBzdGF0aWMgaW50IF9fdm14X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xuLVx0dW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uID0gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KTtcbiYjNDM7XHR1bmlvbiB2bXhfZXhpdF9yZWFzb24gZXhpdF9yZWFzb24gPSB2dF9nZXRfZXhpdF9yZWFzb24odmNwdSk7XG4gXHR1MzIgdmVjdG9yaW5nX2luZm8gPSB2bXgtXHUwMDNlaWR0X3ZlY3RvcmluZ19pbmZvO1xuIFx0dTE2IGV4aXRfaGFuZGxlcl9pbmRleDtcbiBcbkBAIC02ODcwLDcgJiM0Mzs2ODY0LDcgQEAgaW50IHZteF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aClcbiBcdCAqIEV4aXQgdG8gdXNlciBzcGFjZSB3aGVuIGJ1cyBsb2NrIGRldGVjdGVkIHRvIGluZm9ybSB0aGF0IHRoZXJlIGlzXG4gXHQgKiBhIGJ1cyBsb2NrIGluIGd1ZXN0LlxuIFx0ICovXG4tXHRpZiAodm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5idXNfbG9ja19kZXRlY3RlZCkge1xuJiM0MztcdGlmICh2dF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYnVzX2xvY2tfZGV0ZWN0ZWQpIHtcbiBcdFx0aWYgKHJldCBcdTAwM2UgMClcbiBcdFx0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX1g4Nl9CVVNfTE9DSztcbiBcbkBAIC03MTQzLDc0ICYjNDM7NzEzNyw2IEBAIHZvaWQgdm14X2xvYWRfZW9pX2V4aXRtYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKmVvaV9leGl0X2JpdG1hcClcbiBcdHZtY3Nfd3JpdGU2NChFT0lfRVhJVF9CSVRNQVAzLCBlb2lfZXhpdF9iaXRtYXBbM10pO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBoYW5kbGVfbm1fZmF1bHRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi17XG4tXHQvKlxuLVx0ICogU2F2ZSB4ZmRfZXJyIHRvIGd1ZXN0X2ZwdSBiZWZvcmUgaW50ZXJydXB0IGlzIGVuYWJsZWQsIHNvIHRoZVxuLVx0ICogTVNSIHZhbHVlIGlzIG5vdCBjbG9iYmVyZWQgYnkgdGhlIGhvc3QgYWN0aXZpdHkgYmVmb3JlIHRoZSBndWVzdFxuLVx0ICogaGFzIGNoYW5jZSB0byBjb25zdW1lIGl0LlxuLVx0ICpcbi1cdCAqIFVwZGF0ZSB0aGUgZ3Vlc3QmIzM5O3MgWEZEX0VSUiBpZiBhbmQgb25seSBpZiBYRkQgaXMgZW5hYmxlZCwgYXMgdGhlICNOTVxuLVx0ICogaW50ZXJjZXB0aW9uIG1heSBoYXZlIGJlZW4gY2F1c2VkIGJ5IEwxIGludGVyY2VwdGlvbi4gIFBlciB0aGUgU0RNLFxuLVx0ICogWEZEX0VSUiBpcyBub3QgbW9kaWZpZWQgZm9yIG5vbi1YRkQgI05NLCBpLmUuIGlmIENSMC5UUz0xLlxuLVx0ICpcbi1cdCAqIE5vdGUsIFhGRF9FUlIgaXMgdXBkYXRlZCBfYmVmb3JlXyB0aGUgI05NIGludGVyY2VwdGlvbiBjaGVjaywgaS5lLlxuLVx0ICogdW5saWtlIENSMiBhbmQgRFI2LCB0aGUgdmFsdWUgaXMgbm90IGEgcGF5bG9hZCB0aGF0IGlzIGF0dGFjaGVkIHRvXG4tXHQgKiB0aGUgI05NIGV4Y2VwdGlvbi5cbi1cdCAqL1xuLVx0aWYgKGlzX3hmZF9ubV9mYXVsdCh2Y3B1KSlcbi1cdFx0cmRtc3JxKE1TUl9JQTMyX1hGRF9FUlIsIHZjcHUtXHUwMDNlYXJjaC5ndWVzdF9mcHUueGZkX2Vycik7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIGhhbmRsZV9leGNlcHRpb25faXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGludHJfaW5mbylcbi17XG4tXHQvKiBpZiBleGl0IGR1ZSB0byBQRiBjaGVjayBmb3IgYXN5bmMgUEYgKi9cbi1cdGlmIChpc19wYWdlX2ZhdWx0KGludHJfaW5mbykpXG4tXHRcdHZjcHUtXHUwMDNlYXJjaC5hcGYuaG9zdF9hcGZfZmxhZ3MgPSBrdm1fcmVhZF9hbmRfcmVzZXRfYXBmX2ZsYWdzKCk7XG4tXHQvKiBpZiBleGl0IGR1ZSB0byBOTSwgaGFuZGxlIGJlZm9yZSBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkICovXG4tXHRlbHNlIGlmIChpc19ubV9mYXVsdChpbnRyX2luZm8pKVxuLVx0XHRoYW5kbGVfbm1fZmF1bHRfaXJxb2ZmKHZjcHUpO1xuLVx0LyogSGFuZGxlIG1hY2hpbmUgY2hlY2tzIGJlZm9yZSBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkICovXG4tXHRlbHNlIGlmIChpc19tYWNoaW5lX2NoZWNrKGludHJfaW5mbykpXG4tXHRcdGt2bV9tYWNoaW5lX2NoZWNrKCk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIGhhbmRsZV9leHRlcm5hbF9pbnRlcnJ1cHRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi1cdFx0XHRcdFx0ICAgICB1MzIgaW50cl9pbmZvKVxuLXtcbi1cdHVuc2lnbmVkIGludCB2ZWN0b3IgPSBpbnRyX2luZm8gXHUwMDI2IElOVFJfSU5GT19WRUNUT1JfTUFTSztcbi1cbi1cdGlmIChLVk1fQlVHKCFpc19leHRlcm5hbF9pbnRyKGludHJfaW5mbyksIHZjcHUtXHUwMDNla3ZtLFxuLVx0ICAgIFwmIzM0O3VuZXhwZWN0ZWQgVk0tRXhpdCBpbnRlcnJ1cHQgaW5mbzogMHgleFwmIzM0OywgaW50cl9pbmZvKSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0a3ZtX2JlZm9yZV9pbnRlcnJ1cHQodmNwdSwgS1ZNX0hBTkRMSU5HX0lSUSk7XG4tXHR4ODZfZW50cnlfZnJvbV9rdm0oRVZFTlRfVFlQRV9FWFRJTlQsIHZlY3Rvcik7XG4tXHRrdm1fYWZ0ZXJfaW50ZXJydXB0KHZjcHUpO1xuLVxuLVx0dmNwdS1cdTAwM2VhcmNoLmF0X2luc3RydWN0aW9uX2JvdW5kYXJ5ID0gdHJ1ZTtcbi19XG4tXG4tdm9pZCB2bXhfaGFuZGxlX2V4aXRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi17XG4tXHRpZiAodG9fdnQodmNwdSktXHUwMDNlZW11bGF0aW9uX3JlcXVpcmVkKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRzd2l0Y2ggKHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMpIHtcbi1cdGNhc2UgRVhJVF9SRUFTT05fRVhURVJOQUxfSU5URVJSVVBUOlxuLVx0XHRoYW5kbGVfZXh0ZXJuYWxfaW50ZXJydXB0X2lycW9mZih2Y3B1LCB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KSk7XG4tXHRcdGJyZWFrO1xuLVx0Y2FzZSBFWElUX1JFQVNPTl9FWENFUFRJT05fTk1JOlxuLVx0XHRoYW5kbGVfZXhjZXB0aW9uX2lycW9mZih2Y3B1LCB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KSk7XG4tXHRcdGJyZWFrO1xuLVx0Y2FzZSBFWElUX1JFQVNPTl9NQ0VfRFVSSU5HX1ZNRU5UUlk6XG4tXHRcdGt2bV9tYWNoaW5lX2NoZWNrKCk7XG4tXHRcdGJyZWFrO1xuLVx0ZGVmYXVsdDpcbi1cdFx0YnJlYWs7XG4tXHR9XG4tfVxuLVxuIC8qXG4gICogVGhlIGt2bSBwYXJhbWV0ZXIgY2FuIGJlIE5VTEwgKG1vZHVsZSBpbml0aWFsaXphdGlvbiwgb3IgaW52b2NhdGlvbiBiZWZvcmVcbiAgKiBWTSBjcmVhdGlvbikuIEJlIHN1cmUgdG8gY2hlY2sgdGhlIGt2bSBwYXJhbWV0ZXIgYmVmb3JlIHVzaW5nIGl0LlxuQEAgLTcyNTAsNyAmIzQzOzcxNzYsNyBAQCBzdGF0aWMgdm9pZCB2bXhfcmVjb3Zlcl9ubWlfYmxvY2tpbmcoc3RydWN0IHZjcHVfdm14ICp2bXgpXG4gXHRcdGlmICh2bXgtXHUwMDNlbG9hZGVkX3ZtY3MtXHUwMDNlbm1pX2tub3duX3VubWFza2VkKVxuIFx0XHRcdHJldHVybjtcbiBcbi1cdFx0ZXhpdF9pbnRyX2luZm8gPSB2bXhfZ2V0X2ludHJfaW5mbyhcdTAwMjZ2bXgtXHUwMDNldmNwdSk7XG4mIzQzO1x0XHRleGl0X2ludHJfaW5mbyA9IHZ0X2dldF9pbnRyX2luZm8oXHUwMDI2dm14LVx1MDAzZXZjcHUpO1xuIFx0XHR1bmJsb2NrX25taSA9IChleGl0X2ludHJfaW5mbyBcdTAwMjYgSU5UUl9JTkZPX1VOQkxPQ0tfTk1JKSAhPSAwO1xuIFx0XHR2ZWN0b3IgPSBleGl0X2ludHJfaW5mbyBcdTAwMjYgSU5UUl9JTkZPX1ZFQ1RPUl9NQVNLO1xuIFx0XHQvKlxuQEAgLTc0MTcsMTQgJiM0Mzs3MzQzLDE0IEBAIHN0YXRpYyBmYXN0cGF0aF90IHZteF9leGl0X2hhbmRsZXJzX2Zhc3RwYXRoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdCAqIHRoZSBmYXN0cGF0aCBldmVuLCBhbGwgb3RoZXIgZXhpdHMgbXVzdCB1c2UgdGhlIHNsb3cgcGF0aC5cbiBcdCAqL1xuIFx0aWYgKGlzX2d1ZXN0X21vZGUodmNwdSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYyAhPSBFWElUX1JFQVNPTl9QUkVFTVBUSU9OX1RJTUVSKVxuJiM0MztcdCAgICB2dF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMgIT0gRVhJVF9SRUFTT05fUFJFRU1QVElPTl9USU1FUilcbiBcdFx0cmV0dXJuIEVYSVRfRkFTVFBBVEhfTk9ORTtcbiBcbi1cdHN3aXRjaCAodm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYykge1xuJiM0MztcdHN3aXRjaCAodnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljKSB7XG4gXHRjYXNlIEVYSVRfUkVBU09OX01TUl9XUklURTpcbiBcdFx0cmV0dXJuIGhhbmRsZV9mYXN0cGF0aF93cm1zcih2Y3B1KTtcbiBcdGNhc2UgRVhJVF9SRUFTT05fTVNSX1dSSVRFX0lNTTpcbi1cdFx0cmV0dXJuIGhhbmRsZV9mYXN0cGF0aF93cm1zcl9pbW0odmNwdSwgdm14X2dldF9leGl0X3F1YWwodmNwdSksXG4mIzQzO1x0XHRyZXR1cm4gaGFuZGxlX2Zhc3RwYXRoX3dybXNyX2ltbSh2Y3B1LCB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxuIFx0XHRcdFx0XHRcdCB2bXhfZ2V0X21zcl9pbW1fcmVnKHZjcHUpKTtcbiBcdGNhc2UgRVhJVF9SRUFTT05fUFJFRU1QVElPTl9USU1FUjpcbiBcdFx0cmV0dXJuIGhhbmRsZV9mYXN0cGF0aF9wcmVlbXB0aW9uX3RpbWVyKHZjcHUsIGZvcmNlX2ltbWVkaWF0ZV9leGl0KTtcbkBAIC03NDM3LDE3ICYjNDM7NzM2Myw2IEBAIHN0YXRpYyBmYXN0cGF0aF90IHZteF9leGl0X2hhbmRsZXJzX2Zhc3RwYXRoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdH1cbiB9XG4gXG4tbm9pbnN0ciB2b2lkIHZteF9oYW5kbGVfbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi17XG4tXHRpZiAoKHUxNil2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljICE9IEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUkgfHxcbi1cdCAgICAhaXNfbm1pKHZteF9nZXRfaW50cl9pbmZvKHZjcHUpKSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0a3ZtX2JlZm9yZV9pbnRlcnJ1cHQodmNwdSwgS1ZNX0hBTkRMSU5HX05NSSk7XG4tXHR4ODZfZW50cnlfZnJvbV9rdm0oRVZFTlRfVFlQRV9OTUksIE5NSV9WRUNUT1IpO1xuLVx0a3ZtX2FmdGVyX2ludGVycnVwdCh2Y3B1KTtcbi19XG4tXG4gc3RhdGljIG5vaW5zdHIgdm9pZCB2bXhfdmNwdV9lbnRlcl9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0XHRcdFx0dW5zaWduZWQgaW50IGZsYWdzKVxuIHtcbkBAIC03NDc3LDEwICYjNDM7NzM5MiwxMCBAQCBzdGF0aWMgbm9pbnN0ciB2b2lkIHZteF92Y3B1X2VudGVyX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0fVxuIFxuIFx0dm14LVx1MDAzZXZ0LmV4aXRfcmVhc29uLmZ1bGwgPSB2bWNzX3JlYWQzMihWTV9FWElUX1JFQVNPTik7XG4tXHRpZiAobGlrZWx5KCF2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5KSlcbiYjNDM7XHRpZiAobGlrZWx5KCF2dF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkpKVxuIFx0XHR2bXgtXHUwMDNlaWR0X3ZlY3RvcmluZ19pbmZvID0gdm1jc19yZWFkMzIoSURUX1ZFQ1RPUklOR19JTkZPX0ZJRUxEKTtcbiBcbi1cdHZteF9oYW5kbGVfbm1pKHZjcHUpO1xuJiM0MztcdHZ0X2hhbmRsZV9ubWkodmNwdSk7XG4gXG4gb3V0OlxuIFx0Z3Vlc3Rfc3RhdGVfZXhpdF9pcnFvZmYoKTtcbkBAIC03NjE3LDcgJiM0Mzs3NTMyLDcgQEAgZmFzdHBhdGhfdCB2bXhfdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcnVuX2ZsYWdzKVxuIFx0XHQgKiBjaGVja2luZy5cbiBcdFx0ICovXG4gXHRcdGlmICh2Y3B1LVx1MDAzZWFyY2gubmVzdGVkX3J1bl9wZW5kaW5nIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIXZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkpXG4mIzQzO1x0XHQgICAgIXZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mYWlsZWRfdm1lbnRyeSlcbiBcdFx0XHQmIzQzOyYjNDM7dmNwdS1cdTAwM2VzdGF0Lm5lc3RlZF9ydW47XG4gXG4gXHRcdHZjcHUtXHUwMDNlYXJjaC5uZXN0ZWRfcnVuX3BlbmRpbmcgPSAwO1xuQEAgLTc2MjgsNyAmIzQzOzc1NDMsNyBAQCBmYXN0cGF0aF90IHZteF92Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBydW5fZmxhZ3MpXG4gXG4gXHR0cmFjZV9rdm1fZXhpdCh2Y3B1LCBLVk1fSVNBX1ZNWCk7XG4gXG4tXHRpZiAodW5saWtlbHkodm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mYWlsZWRfdm1lbnRyeSkpXG4mIzQzO1x0aWYgKHVubGlrZWx5KHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mYWlsZWRfdm1lbnRyeSkpXG4gXHRcdHJldHVybiBFWElUX0ZBU1RQQVRIX05PTkU7XG4gXG4gXHR2bXgtXHUwMDNlbG9hZGVkX3ZtY3MtXHUwMDNlbGF1bmNoZWQgPSAxO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmggYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oXG5pbmRleCBkYzg1MTdmMTViYzQ2Li4zMjQ3YjU1YjM0ODQzIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC92bXguaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC92bXguaFxuQEAgLTMwNCw0MyAmIzQzOzMwNCw2IEBAIHN0cnVjdCBrdm1fdm14IHtcbiBcdHU2NCAqcGlkX3RhYmxlO1xuIH07XG4gXG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSBzdHJ1Y3QgdmNwdV92dCAqdG9fdnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLXtcbi1cdHJldHVybiBcdTAwMjYoY29udGFpbmVyX29mKHZjcHUsIHN0cnVjdCB2Y3B1X3ZteCwgdmNwdSktXHUwMDNldnQpO1xuLX1cbi1cbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHN0cnVjdCBrdm1fdmNwdSAqdnRfdG9fdmNwdShzdHJ1Y3QgdmNwdV92dCAqdnQpXG4te1xuLVx0cmV0dXJuIFx1MDAyNihjb250YWluZXJfb2YodnQsIHN0cnVjdCB2Y3B1X3ZteCwgdnQpLVx1MDAzZXZjcHUpO1xuLX1cbi1cbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHVuaW9uIHZteF9leGl0X3JlYXNvbiB2bXhfZ2V0X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi17XG4tXHRyZXR1cm4gdG9fdnQodmNwdSktXHUwMDNlZXhpdF9yZWFzb247XG4tfVxuLVxuLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgbG9uZyB2bXhfZ2V0X2V4aXRfcXVhbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4te1xuLVx0c3RydWN0IHZjcHVfdnQgKnZ0ID0gdG9fdnQodmNwdSk7XG4tXG4tXHRpZiAoIWt2bV9yZWdpc3Rlcl90ZXN0X2FuZF9tYXJrX2F2YWlsYWJsZSh2Y3B1LCBWQ1BVX1JFR19FWElUX0lORk9fMSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgIVdBUk5fT05fT05DRShpc190ZF92Y3B1KHZjcHUpKSlcbi1cdFx0dnQtXHUwMDNlZXhpdF9xdWFsaWZpY2F0aW9uID0gdm1jc19yZWFkbChFWElUX1FVQUxJRklDQVRJT04pO1xuLVxuLVx0cmV0dXJuIHZ0LVx1MDAzZWV4aXRfcXVhbGlmaWNhdGlvbjtcbi19XG4tXG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdm14X2dldF9pbnRyX2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLXtcbi1cdHN0cnVjdCB2Y3B1X3Z0ICp2dCA9IHRvX3Z0KHZjcHUpO1xuLVxuLVx0aWYgKCFrdm1fcmVnaXN0ZXJfdGVzdF9hbmRfbWFya19hdmFpbGFibGUodmNwdSwgVkNQVV9SRUdfRVhJVF9JTkZPXzIpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICFXQVJOX09OX09OQ0UoaXNfdGRfdmNwdSh2Y3B1KSkpXG4tXHRcdHZ0LVx1MDAzZWV4aXRfaW50cl9pbmZvID0gdm1jc19yZWFkMzIoVk1fRVhJVF9JTlRSX0lORk8pO1xuLVxuLVx0cmV0dXJuIHZ0LVx1MDAzZWV4aXRfaW50cl9pbmZvO1xuLX1cbi1cbiB2b2lkIHZteF92Y3B1X2xvYWRfdm1jcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpO1xuIGludCBhbGxvY2F0ZV92cGlkKHZvaWQpO1xuIHZvaWQgZnJlZV92cGlkKGludCB2cGlkKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaCBiL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oXG5pbmRleCAwNTRmZDE0YmIyZTE2Li43YWMwMmM2ODQ1N2YxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oXG5AQCAtMjcsNyAmIzQzOzI3LDYgQEAgdm9pZCB2bXhfdmNwdV9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaW5pdF9ldmVudCk7XG4gdm9pZCB2bXhfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSk7XG4gdm9pZCB2bXhfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBpbnQgdm14X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKTtcbi12b2lkIHZteF9oYW5kbGVfZXhpdF9pcnFvZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBpbnQgdm14X3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIHZteF91cGRhdGVfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBib29sIHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MjQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Z0X2hhbmRsZV9leGl0X2lycW9mZiYjMzQ7LAogICAgJiMzNDt2dF9oYW5kbGVfbm1pJiMzNDssCiAgICAmIzM0O3Z0X3ZjcHVfcGlfbG9hZCYjMzQ7LAogICAgJiMzNDt2dF92Y3B1X3BpX3B1dCYjMzQ7LAogICAgJiMzNDt2dF9waV9zdGFydF9ieXBhc3MmIzM0OywKICAgICYjMzQ7dnRfcGlfdXBkYXRlX2lydGUmIzM0OywKICAgICYjMzQ7dm14X2hhbmRsZV9leGl0JiMzNDssCiAgICAmIzM0O3ZteF92Y3B1X3J1biYjMzQ7LAogICAgJiMzNDtuZXN0ZWRfdm14X3JlZmxlY3Rfdm1leGl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBLVk0gSW50ZWwgKFZNWC9URFgpIHZpcnR1YWxpemF0aW9uIGxvZ2ljIGJ5IGNvbnNvbGlkYXRpbmcgZXhpdCBzdGF0dXMgaGFuZGxpbmcsIGV4aXQgSVJRLW9mZiBwcm9jZXNzaW5nLCBwb3N0ZWQgaW50ZXJydXB0IGhlbHBlcnMsIGFuZCBWTUNTIGV4aXQgcXVhbGlmaWNhdGlvbiBhY2Nlc3NvcnMgdW5kZXIgY29tbW9uIHZ0XyogYWJzdHJhY3Rpb25zLiBUaGlzIGFmZmVjdHMgY29yZSBLVk0gVk0gZXhpdCBoYW5kbGluZyBhbmQgbmVzdGVkIHZpcnR1YWxpemF0aW9uIHJlYWNoYWJsZSBvbiBhbWQ2NC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDlkMjVmMDZhOTNhYWJlNjRmYmFkMGRlZDc0ZjczMDAwZjRhNDdjYzMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDA5OjI0OjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaCBiL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmgKaW5kZXggMDgwMDU2NzY3MDJjMi4uM2U2OGZhMTJhY2E2NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oCkBAIC0yLDEwICYjNDM7MiwxMiBAQAogI2lmbmRlZiBfX0tWTV9YODZfVk1YX0NPTU1PTl9ICiAjZGVmaW5lIF9fS1ZNX1g4Nl9WTVhfQ09NTU9OX0gKIAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jb250YWluZXJfb2YuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rdm1faG9zdC5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9wb3N0ZWRfaW50ci5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O21tdS5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3ZteF9vcHMuaCYjMzQ7CiAKIHVuaW9uIHZteF9leGl0X3JlYXNvbiB7CiAJc3RydWN0IHsKQEAgLTc0LDE0ICYjNDM7NzYsNjIgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3RkX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7IHJldHVybiBmYWxzZTsgfQogCiAjZW5kaWYKIAomIzQzO3N0cnVjdCB2Y3B1X3ZteF90ZHggewomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgdmNwdTsKJiM0MzsJc3RydWN0IHZjcHVfdnQgdnQ7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHN0cnVjdCB2Y3B1X3Z0ICp0b192dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlyZXR1cm4gJmFtcDsoY29udGFpbmVyX29mKHZjcHUsIHN0cnVjdCB2Y3B1X3ZteF90ZHgsIHZjcHUpLSZndDt2dCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IGt2bV92Y3B1ICp2dF90b192Y3B1KHN0cnVjdCB2Y3B1X3Z0ICp2dCkKJiM0Mzt7CiYjNDM7CXJldHVybiAmYW1wOyhjb250YWluZXJfb2YodnQsIHN0cnVjdCB2Y3B1X3ZteF90ZHgsIHZ0KS0mZ3Q7dmNwdSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5pb24gdm14X2V4aXRfcmVhc29uIHZ0X2dldF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlyZXR1cm4gdG9fdnQodmNwdSktJmd0O2V4aXRfcmVhc29uOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcgdnRfZ2V0X2V4aXRfcXVhbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdmNwdV92dCAqdnQgPSB0b192dCh2Y3B1KTsKJiM0MzsKJiM0MzsJaWYgKCFrdm1fcmVnaXN0ZXJfdGVzdF9hbmRfbWFya19hdmFpbGFibGUodmNwdSwgVkNQVV9SRUdfRVhJVF9JTkZPXzEpICZhbXA7JmFtcDsKJiM0MzsJICAgICFXQVJOX09OX09OQ0UoaXNfdGRfdmNwdSh2Y3B1KSkpCiYjNDM7CQl2dC0mZ3Q7ZXhpdF9xdWFsaWZpY2F0aW9uID0gdm1jc19yZWFkbChFWElUX1FVQUxJRklDQVRJT04pOwomIzQzOwomIzQzOwlyZXR1cm4gdnQtJmd0O2V4aXRfcXVhbGlmaWNhdGlvbjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdnRfZ2V0X2ludHJfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdmNwdV92dCAqdnQgPSB0b192dCh2Y3B1KTsKJiM0MzsKJiM0MzsJaWYgKCFrdm1fcmVnaXN0ZXJfdGVzdF9hbmRfbWFya19hdmFpbGFibGUodmNwdSwgVkNQVV9SRUdfRVhJVF9JTkZPXzIpICZhbXA7JmFtcDsKJiM0MzsJICAgICFXQVJOX09OX09OQ0UoaXNfdGRfdmNwdSh2Y3B1KSkpCiYjNDM7CQl2dC0mZ3Q7ZXhpdF9pbnRyX2luZm8gPSB2bWNzX3JlYWQzMihWTV9FWElUX0lOVFJfSU5GTyk7CiYjNDM7CiYjNDM7CXJldHVybiB2dC0mZ3Q7ZXhpdF9pbnRyX2luZm87CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBpc194ZmRfbm1fZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJcmV0dXJuIHZjcHUtJmd0O2FyY2guZ3Vlc3RfZnB1LmZwc3RhdGUtJmd0O3hmZCAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICAha3ZtX2lzX2NyMF9iaXRfc2V0KHZjcHUsIFg4Nl9DUjBfVFMpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgYm9vbCB2dF9pc190ZHhfcHJpdmF0ZV9ncGEoc3RydWN0IGt2bSAqa3ZtLCBncGFfdCBncGEpCiB7CiAJLyogRm9yIFREWCB0aGUgZGlyZWN0IG1hc2sgaXMgdGhlIHNoYXJlZCBtYXNrLiAqLwogCXJldHVybiAha3ZtX2lzX2FkZHJfZGlyZWN0KGt2bSwgZ3BhKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgX192bXhfaGFuZGxlX2VwdF92aW9sYXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsCi0JCQkJCSAgICAgdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24pCiYjNDM7c3RhdGljIGlubGluZSBpbnQgX192dF9oYW5kbGVfZXB0X3Zpb2xhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwKJiM0MzsJCQkJCSAgICB1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbikKIHsKIAl1NjQgZXJyb3JfY29kZTsKIApAQCAtMTY0LDggJiM0MzsyMTQsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3ZjcHVfdHJpZ2dlcl9wb3N0ZWRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKICAqIFBvc3QgYW4gaW50ZXJydXB0IHRvIGEgdkNQVSYjMzk7cyBQSVIgYW5kIHRyaWdnZXIgdGhlIHZDUFUgdG8gcHJvY2VzcyB0aGUKICAqIGludGVycnVwdCBpZiBuZWNlc3NhcnkuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3ZteF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJCQkJICBzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYywgaW50IHZlY3RvcikKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgX192dF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAomIzQzOwkJCQkJCSBzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYywgaW50IHZlY3RvcikKIHsKIAlpZiAocGlfdGVzdF9hbmRfc2V0X3Bpcih2ZWN0b3IsIHBpX2Rlc2MpKQogCQlyZXR1cm47CkBAIC0xODMsNiAmIzQzOzIzMyw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3ZteF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCWt2bV92Y3B1X3RyaWdnZXJfcG9zdGVkX2ludGVycnVwdCh2Y3B1LCBQT1NURURfSU5UUl9WRUNUT1IpOwogfQogCi1ub2luc3RyIHZvaWQgdm14X2hhbmRsZV9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKJiM0Mztub2luc3RyIHZvaWQgdnRfaGFuZGxlX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiAjZW5kaWYgLyogX19LVk1fWDg2X1ZNWF9DT01NT05fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9tYWluLmMgYi9hcmNoL3g4Ni9rdm0vdm14L21haW4uYwppbmRleCA0YzUyYWI4ZDA3ODY5Li42ZTBiMzk1OWQ3M2FiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L21haW4uYwpAQCAtMSw0ICYjNDM7MSw1IEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9lbnRyeS1jb21tb24uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGVwYXJhbS5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O3g4Nl9vcHMuaCYjMzQ7CkBAIC0xMCw4ICYjNDM7MTEsMTIgQEAKICNpbmNsdWRlICYjMzQ7dGR4LmgmIzM0OwogI2luY2x1ZGUgJiMzNDt0ZHhfYXJjaC5oJiMzNDsKIAomIzQzOyNwcmFnbWEgR0NDIHBvaXNvbiB0b192bXgKJiM0MzsKJiM0MztzdGF0aWNfYXNzZXJ0KG9mZnNldG9mKHN0cnVjdCB2Y3B1X3ZteF90ZHgsIHZ0KSA9PSBvZmZzZXRvZihzdHJ1Y3QgdmNwdV92bXgsIHZ0KSk7CiYjNDM7CiAjaWZkZWYgQ09ORklHX0tWTV9JTlRFTF9URFgKLXN0YXRpY19hc3NlcnQob2Zmc2V0b2Yoc3RydWN0IHZjcHVfdm14LCB2dCkgPT0gb2Zmc2V0b2Yoc3RydWN0IHZjcHVfdGR4LCB2dCkpOwomIzQzO3N0YXRpY19hc3NlcnQob2Zmc2V0b2Yoc3RydWN0IHZjcHVfdm14X3RkeCwgdnQpID09IG9mZnNldG9mKHN0cnVjdCB2Y3B1X3RkeCwgdnQpKTsKIAogc3RhdGljIHZvaWQgdnRfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUodm9pZCkKIHsKQEAgLTg3Niw2ICYjNDM7ODgxLDg1IEBAIHN0YXRpYyBpbnQgdnRfZ21lbV9tYXhfbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sCiAjZGVmaW5lIHZ0X29wX3RkeF9vbmx5KG5hbWUpIE5VTEwKICNlbmRpZiAvKiBDT05GSUdfS1ZNX0lOVEVMX1REWCAqLwogCiYjNDM7c3RhdGljIHZvaWQgaGFuZGxlX25tX2ZhdWx0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBTYXZlIHhmZF9lcnIgdG8gZ3Vlc3RfZnB1IGJlZm9yZSBpbnRlcnJ1cHQgaXMgZW5hYmxlZCwgc28gdGhlCiYjNDM7CSAqIE1TUiB2YWx1ZSBpcyBub3QgY2xvYmJlcmVkIGJ5IHRoZSBob3N0IGFjdGl2aXR5IGJlZm9yZSB0aGUgZ3Vlc3QKJiM0MzsJICogaGFzIGNoYW5jZSB0byBjb25zdW1lIGl0LgomIzQzOwkgKgomIzQzOwkgKiBVcGRhdGUgdGhlIGd1ZXN0JiMzOTtzIFhGRF9FUlIgaWYgYW5kIG9ubHkgaWYgWEZEIGlzIGVuYWJsZWQsIGFzIHRoZSAjTk0KJiM0MzsJICogaW50ZXJjZXB0aW9uIG1heSBoYXZlIGJlZW4gY2F1c2VkIGJ5IEwxIGludGVyY2VwdGlvbi4gIFBlciB0aGUgU0RNLAomIzQzOwkgKiBYRkRfRVJSIGlzIG5vdCBtb2RpZmllZCBmb3Igbm9uLVhGRCAjTk0sIGkuZS4gaWYgQ1IwLlRTPTEuCiYjNDM7CSAqCiYjNDM7CSAqIE5vdGUsIFhGRF9FUlIgaXMgdXBkYXRlZCBfYmVmb3JlXyB0aGUgI05NIGludGVyY2VwdGlvbiBjaGVjaywgaS5lLgomIzQzOwkgKiB1bmxpa2UgQ1IyIGFuZCBEUjYsIHRoZSB2YWx1ZSBpcyBub3QgYSBwYXlsb2FkIHRoYXQgaXMgYXR0YWNoZWQgdG8KJiM0MzsJICogdGhlICNOTSBleGNlcHRpb24uCiYjNDM7CSAqLwomIzQzOwlpZiAoaXNfeGZkX25tX2ZhdWx0KHZjcHUpKQomIzQzOwkJcmRtc3JxKE1TUl9JQTMyX1hGRF9FUlIsIHZjcHUtJmd0O2FyY2guZ3Vlc3RfZnB1LnhmZF9lcnIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBoYW5kbGVfZXhjZXB0aW9uX2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBpbnRyX2luZm8pCiYjNDM7ewomIzQzOwkvKiBpZiBleGl0IGR1ZSB0byBQRiBjaGVjayBmb3IgYXN5bmMgUEYgKi8KJiM0MzsJaWYgKGlzX3BhZ2VfZmF1bHQoaW50cl9pbmZvKSkKJiM0MzsJCXZjcHUtJmd0O2FyY2guYXBmLmhvc3RfYXBmX2ZsYWdzID0ga3ZtX3JlYWRfYW5kX3Jlc2V0X2FwZl9mbGFncygpOwomIzQzOwkvKiBpZiBleGl0IGR1ZSB0byBOTSwgaGFuZGxlIGJlZm9yZSBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkICovCiYjNDM7CWVsc2UgaWYgKGlzX25tX2ZhdWx0KGludHJfaW5mbykpCiYjNDM7CQloYW5kbGVfbm1fZmF1bHRfaXJxb2ZmKHZjcHUpOwomIzQzOwkvKiBIYW5kbGUgbWFjaGluZSBjaGVja3MgYmVmb3JlIGludGVycnVwdHMgYXJlIGVuYWJsZWQgKi8KJiM0MzsJZWxzZSBpZiAoaXNfbWFjaGluZV9jaGVjayhpbnRyX2luZm8pKQomIzQzOwkJa3ZtX21hY2hpbmVfY2hlY2soKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaGFuZGxlX2V4dGVybmFsX2ludGVycnVwdF9pcnFvZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAomIzQzOwkJCQkJICAgICB1MzIgaW50cl9pbmZvKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IHZlY3RvciA9IGludHJfaW5mbyAmYW1wOyBJTlRSX0lORk9fVkVDVE9SX01BU0s7CiYjNDM7CiYjNDM7CWlmIChLVk1fQlVHKCFpc19leHRlcm5hbF9pbnRyKGludHJfaW5mbyksIHZjcHUtJmd0O2t2bSwKJiM0MzsJICAgICYjMzQ7dW5leHBlY3RlZCBWTS1FeGl0IGludGVycnVwdCBpbmZvOiAweCV4JiMzNDssIGludHJfaW5mbykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWt2bV9iZWZvcmVfaW50ZXJydXB0KHZjcHUsIEtWTV9IQU5ETElOR19JUlEpOwomIzQzOwl4ODZfZW50cnlfZnJvbV9rdm0oRVZFTlRfVFlQRV9FWFRJTlQsIHZlY3Rvcik7CiYjNDM7CWt2bV9hZnRlcl9pbnRlcnJ1cHQodmNwdSk7CiYjNDM7CiYjNDM7CXZjcHUtJmd0O2FyY2guYXRfaW5zdHJ1Y3Rpb25fYm91bmRhcnkgPSB0cnVlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB2dF9oYW5kbGVfZXhpdF9pcnFvZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJaWYgKHRvX3Z0KHZjcHUpLSZndDtlbXVsYXRpb25fcmVxdWlyZWQpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXN3aXRjaCAodnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljKSB7CiYjNDM7CWNhc2UgRVhJVF9SRUFTT05fRVhURVJOQUxfSU5URVJSVVBUOgomIzQzOwkJaGFuZGxlX2V4dGVybmFsX2ludGVycnVwdF9pcnFvZmYodmNwdSwgdnRfZ2V0X2ludHJfaW5mbyh2Y3B1KSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBFWElUX1JFQVNPTl9FWENFUFRJT05fTk1JOgomIzQzOwkJaGFuZGxlX2V4Y2VwdGlvbl9pcnFvZmYodmNwdSwgdnRfZ2V0X2ludHJfaW5mbyh2Y3B1KSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBFWElUX1JFQVNPTl9NQ0VfRFVSSU5HX1ZNRU5UUlk6CiYjNDM7CQlrdm1fbWFjaGluZV9jaGVjaygpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0Mztub2luc3RyIHZvaWQgdnRfaGFuZGxlX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlpZiAoKHUxNil2dF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMgIT0gRVhJVF9SRUFTT05fRVhDRVBUSU9OX05NSSB8fAomIzQzOwkgICAgIWlzX25taSh2dF9nZXRfaW50cl9pbmZvKHZjcHUpKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJa3ZtX2JlZm9yZV9pbnRlcnJ1cHQodmNwdSwgS1ZNX0hBTkRMSU5HX05NSSk7CiYjNDM7CXg4Nl9lbnRyeV9mcm9tX2t2bShFVkVOVF9UWVBFX05NSSwgTk1JX1ZFQ1RPUik7CiYjNDM7CWt2bV9hZnRlcl9pbnRlcnJ1cHQodmNwdSk7CiYjNDM7fQomIzQzOwogI2RlZmluZSBWTVhfUkVRVUlSRURfQVBJQ1ZfSU5ISUJJVFMJCQkJXAogCShCSVQoQVBJQ1ZfSU5ISUJJVF9SRUFTT05fRElTQUJMRUQpIHwJCQlcCiAJIEJJVChBUElDVl9JTkhJQklUX1JFQVNPTl9BQlNFTlQpIHwJCQlcCkBAIC0xMDAwLDEyICYjNDM7MTA4NCwxMiBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgdnRfeDg2X29wcyBfX2luaXRkYXRhID0gewogCS5sb2FkX21tdV9wZ2QgPSB2dF9vcChsb2FkX21tdV9wZ2QpLAogCiAJLmNoZWNrX2ludGVyY2VwdCA9IHZteF9jaGVja19pbnRlcmNlcHQsCi0JLmhhbmRsZV9leGl0X2lycW9mZiA9IHZteF9oYW5kbGVfZXhpdF9pcnFvZmYsCiYjNDM7CS5oYW5kbGVfZXhpdF9pcnFvZmYgPSB2dF9oYW5kbGVfZXhpdF9pcnFvZmYsCiAKIAkudXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nID0gdnRfb3AodXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKSwKIAotCS5waV91cGRhdGVfaXJ0ZSA9IHZteF9waV91cGRhdGVfaXJ0ZSwKLQkucGlfc3RhcnRfYnlwYXNzID0gdm14X3BpX3N0YXJ0X2J5cGFzcywKJiM0MzsJLnBpX3VwZGF0ZV9pcnRlID0gdnRfcGlfdXBkYXRlX2lydGUsCiYjNDM7CS5waV9zdGFydF9ieXBhc3MgPSB2dF9waV9zdGFydF9ieXBhc3MsCiAKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAJLnNldF9odl90aW1lciA9IHZ0X29wKHNldF9odl90aW1lciksCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYwppbmRleCAxNTE4NzM0MDdhYmQzLi40NzU5OWU3MzEyY2ZkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMKQEAgLTQ0Niw3ICYjNDM7NDQ2LDcgQEAgc3RhdGljIHZvaWQgbmVzdGVkX2VwdF9pbmplY3RfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCSAqICYjMzQ7Tk1JIHVuYmxvY2tpbmcgZHVlIHRvIElSRVQmIzM0OywgaS5lLiB0aGUgYml0IGNhbiBiZSBwcm9wYWdhdGVkCiAJCSAqIGFzLWlzIGZyb20gdGhlIG9yaWdpbmFsIEVYSVRfUVVBTElGSUNBVElPTi4KIAkJICovCi0JCWV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpICZhbXA7IElOVFJfSU5GT19VTkJMT0NLX05NSTsKJiM0MzsJCWV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSkgJmFtcDsgSU5UUl9JTkZPX1VOQkxPQ0tfTk1JOwogCX0gZWxzZSB7CiAJCWlmIChmYXVsdC0mZ3Q7ZXJyb3JfY29kZSAmYW1wOyBQRkVSUl9SU1ZEX01BU0spIHsKIAkJCXZtX2V4aXRfcmVhc29uID0gRVhJVF9SRUFTT05fRVBUX01JU0NPTkZJRzsKQEAgLTQ3Miw3ICYjNDM7NDcyLDcgQEAgc3RhdGljIHZvaWQgbmVzdGVkX2VwdF9pbmplY3RfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkgKiBhbmQgd2Fsa3MgdGhlIGZhdWx0aW5nIEdQQS4KIAkJCSAqLwogCQkJaWYgKGZyb21faGFyZHdhcmUpCi0JCQkJZXhpdF9xdWFsaWZpY2F0aW9uIHw9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpICZhbXA7IG1hc2s7CiYjNDM7CQkJCWV4aXRfcXVhbGlmaWNhdGlvbiB8PSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpICZhbXA7IG1hc2s7CiAJCQllbHNlCiAJCQkJZXhpdF9xdWFsaWZpY2F0aW9uIHw9IGZhdWx0LSZndDtleGl0X3F1YWxpZmljYXRpb24gJmFtcDsgbWFzazsKIApAQCAtNDc0Nyw3ICYjNDM7NDc0Nyw3IEBAIHN0YXRpYyB2b2lkIHByZXBhcmVfdm1jczEyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZtY3MxMiAqdm1jczEyLAogewogCS8qIHVwZGF0ZSBleGl0IGluZm9ybWF0aW9uIGZpZWxkczogKi8KIAl2bWNzMTItJmd0O3ZtX2V4aXRfcmVhc29uID0gdm1fZXhpdF9yZWFzb247Ci0JaWYgKHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZW5jbGF2ZV9tb2RlKQomIzQzOwlpZiAodnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmVuY2xhdmVfbW9kZSkKIAkJdm1jczEyLSZndDt2bV9leGl0X3JlYXNvbiB8PSBWTVhfRVhJVF9SRUFTT05TX1NHWF9FTkNMQVZFX01PREU7CiAJdm1jczEyLSZndDtleGl0X3F1YWxpZmljYXRpb24gPSBleGl0X3F1YWxpZmljYXRpb247CiAKQEAgLTUzNzMsNyAmIzQzOzUzNzMsNyBAQCBzdGF0aWMgaW50IG5lc3RlZF92bXhfZ2V0X3ZtcHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgKnZtcG9pbnRlciwKIAlzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBlOwogCWludCByOwogCi0JaWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgdm14X2dldF9leGl0X3F1YWwodmNwdSksCiYjNDM7CWlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZ0X2dldF9leGl0X3F1YWwodmNwdSksCiAJCQkJdm1jc19yZWFkMzIoVk1YX0lOU1RSVUNUSU9OX0lORk8pLCBmYWxzZSwKIAkJCQlzaXplb2YoKnZtcG9pbnRlciksICZhbXA7Z3ZhKSkgewogCQkqcmV0ID0gMTsKQEAgLTU2NjUsNyAmIzQzOzU2NjUsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXJlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXN0cnVjdCB2bWNzMTIgKnZtY3MxMiA9IGlzX2d1ZXN0X21vZGUodmNwdSkgPyBnZXRfc2hhZG93X3ZtY3MxMih2Y3B1KQogCQkJCQkJICAgIDogZ2V0X3ZtY3MxMih2Y3B1KTsKLQl1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpOwomIzQzOwl1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7CiAJdTMyIGluc3RyX2luZm8gPSB2bWNzX3JlYWQzMihWTVhfSU5TVFJVQ1RJT05fSU5GTyk7CiAJc3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7CiAJc3RydWN0IHg4Nl9leGNlcHRpb24gZTsKQEAgLTU3NzEsNyAmIzQzOzU3NzEsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXdyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3Qgdm1jczEyICp2bWNzMTIgPSBpc19ndWVzdF9tb2RlKHZjcHUpID8gZ2V0X3NoYWRvd192bWNzMTIodmNwdSkKIAkJCQkJCSAgICA6IGdldF92bWNzMTIodmNwdSk7Ci0JdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKJiM0MzsJdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpOwogCXUzMiBpbnN0cl9pbmZvID0gdm1jc19yZWFkMzIoVk1YX0lOU1RSVUNUSU9OX0lORk8pOwogCXN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpOwogCXN0cnVjdCB4ODZfZXhjZXB0aW9uIGU7CkBAIC01OTYwLDcgJiM0Mzs1OTYwLDcgQEAgc3RhdGljIGludCBoYW5kbGVfdm1wdHJsZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAvKiBFbXVsYXRlIHRoZSBWTVBUUlNUIGluc3RydWN0aW9uICovCiBzdGF0aWMgaW50IGhhbmRsZV92bXB0cnN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQl1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpOwomIzQzOwl1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7CiAJdTMyIGluc3RyX2luZm8gPSB2bWNzX3JlYWQzMihWTVhfSU5TVFJVQ1RJT05fSU5GTyk7CiAJZ3BhX3QgY3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS0mZ3Q7bmVzdGVkLmN1cnJlbnRfdm1wdHI7CiAJc3RydWN0IHg4Nl9leGNlcHRpb24gZTsKQEAgLTYwMjEsNyAmIzQzOzYwMjEsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9pbnZlcHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCS8qIEFjY29yZGluZyB0byB0aGUgSW50ZWwgVk1YIGluc3RydWN0aW9uIHJlZmVyZW5jZSwgdGhlIG1lbW9yeQogCSAqIG9wZXJhbmQgaXMgcmVhZCBldmVuIGlmIGl0IGlzbiYjMzk7dCBuZWVkZWQgKGUuZy4sIGZvciB0eXBlPT1nbG9iYWwpCiAJICovCi0JaWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgdm14X2dldF9leGl0X3F1YWwodmNwdSksCiYjNDM7CWlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZ0X2dldF9leGl0X3F1YWwodmNwdSksCiAJCQl2bXhfaW5zdHJ1Y3Rpb25faW5mbywgZmFsc2UsIHNpemVvZihvcGVyYW5kKSwgJmFtcDtndmEpKQogCQlyZXR1cm4gMTsKIAlyID0ga3ZtX3JlYWRfZ3Vlc3RfdmlydCh2Y3B1LCBndmEsICZhbXA7b3BlcmFuZCwgc2l6ZW9mKG9wZXJhbmQpLCAmYW1wO2UpOwpAQCAtNjEwNCw3ICYjNDM7NjEwNCw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2ludnZwaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCS8qIGFjY29yZGluZyB0byB0aGUgaW50ZWwgdm14IGluc3RydWN0aW9uIHJlZmVyZW5jZSwgdGhlIG1lbW9yeQogCSAqIG9wZXJhbmQgaXMgcmVhZCBldmVuIGlmIGl0IGlzbiYjMzk7dCBuZWVkZWQgKGUuZy4sIGZvciB0eXBlPT1nbG9iYWwpCiAJICovCi0JaWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgdm14X2dldF9leGl0X3F1YWwodmNwdSksCiYjNDM7CWlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZ0X2dldF9leGl0X3F1YWwodmNwdSksCiAJCQl2bXhfaW5zdHJ1Y3Rpb25faW5mbywgZmFsc2UsIHNpemVvZihvcGVyYW5kKSwgJmFtcDtndmEpKQogCQlyZXR1cm4gMTsKIAlyID0ga3ZtX3JlYWRfZ3Vlc3RfdmlydCh2Y3B1LCBndmEsICZhbXA7b3BlcmFuZCwgc2l6ZW9mKG9wZXJhbmQpLCAmYW1wO2UpOwpAQCAtNjIzNiw4ICYjNDM7NjIzNiw4IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3ZtZnVuYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJICogRVhJVF9SRUFTT05fVk1GVU5DIGFzIHRoZSBleGl0IHJlYXNvbi4KIAkgKi8KIAluZXN0ZWRfdm14X3ZtZXhpdCh2Y3B1LCB2bXgtJmd0O3Z0LmV4aXRfcmVhc29uLmZ1bGwsCi0JCQkgIHZteF9nZXRfaW50cl9pbmZvKHZjcHUpLAotCQkJICB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSk7CiYjNDM7CQkJICB2dF9nZXRfaW50cl9pbmZvKHZjcHUpLAomIzQzOwkJCSAgdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KSk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTYyODgsNyAmIzQzOzYyODgsNyBAQCBzdGF0aWMgYm9vbCBuZXN0ZWRfdm14X2V4aXRfaGFuZGxlZF9pbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJaWYgKCFuZXN0ZWRfY3B1X2hhcyh2bWNzMTIsIENQVV9CQVNFRF9VU0VfSU9fQklUTUFQUykpCiAJCXJldHVybiBuZXN0ZWRfY3B1X2hhcyh2bWNzMTIsIENQVV9CQVNFRF9VTkNPTkRfSU9fRVhJVElORyk7CiAKLQlleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKJiM0MzsJZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKIAogCXBvcnQgPSBleGl0X3F1YWxpZmljYXRpb24gJmd0OyZndDsgMTY7CiAJc2l6ZSA9IChleGl0X3F1YWxpZmljYXRpb24gJmFtcDsgNykgJiM0MzsgMTsKQEAgLTYzMTQsNyAmIzQzOzYzMTQsNyBAQCBzdGF0aWMgYm9vbCBuZXN0ZWRfdm14X2V4aXRfaGFuZGxlZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCiAJaWYgKGV4aXRfcmVhc29uLmJhc2ljID09IEVYSVRfUkVBU09OX01TUl9SRUFEX0lNTSB8fAogCSAgICBleGl0X3JlYXNvbi5iYXNpYyA9PSBFWElUX1JFQVNPTl9NU1JfV1JJVEVfSU1NKQotCQltc3JfaW5kZXggPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKJiM0MzsJCW1zcl9pbmRleCA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7CiAJZWxzZQogCQltc3JfaW5kZXggPSBrdm1fZWN4X3JlYWQodmNwdSk7CiAKQEAgLTYzNTAsNyAmIzQzOzYzNTAsNyBAQCBzdGF0aWMgYm9vbCBuZXN0ZWRfdm14X2V4aXRfaGFuZGxlZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogc3RhdGljIGJvb2wgbmVzdGVkX3ZteF9leGl0X2hhbmRsZWRfY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCXN0cnVjdCB2bWNzMTIgKnZtY3MxMikKIHsKLQl1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpOwomIzQzOwl1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7CiAJaW50IGNyID0gZXhpdF9xdWFsaWZpY2F0aW9uICZhbXA7IDE1OwogCWludCByZWc7CiAJdW5zaWduZWQgbG9uZyB2YWw7CkBAIC02NDg0LDcgJiM0Mzs2NDg0LDcgQEAgc3RhdGljIGJvb2wgbmVzdGVkX3ZteF9sMF93YW50c19leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAogCXN3aXRjaCAoKHUxNilleGl0X3JlYXNvbi5iYXNpYykgewogCWNhc2UgRVhJVF9SRUFTT05fRVhDRVBUSU9OX05NSToKLQkJaW50cl9pbmZvID0gdm14X2dldF9pbnRyX2luZm8odmNwdSk7CiYjNDM7CQlpbnRyX2luZm8gPSB2dF9nZXRfaW50cl9pbmZvKHZjcHUpOwogCQlpZiAoaXNfbm1pKGludHJfaW5mbykpCiAJCQlyZXR1cm4gdHJ1ZTsKIAkJZWxzZSBpZiAoaXNfcGFnZV9mYXVsdChpbnRyX2luZm8pKQpAQCAtNjU2Nyw3ICYjNDM7NjU2Nyw3IEBAIHN0YXRpYyBib29sIG5lc3RlZF92bXhfbDFfd2FudHNfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAKIAlzd2l0Y2ggKCh1MTYpZXhpdF9yZWFzb24uYmFzaWMpIHsKIAljYXNlIEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUk6Ci0JCWludHJfaW5mbyA9IHZteF9nZXRfaW50cl9pbmZvKHZjcHUpOwomIzQzOwkJaW50cl9pbmZvID0gdnRfZ2V0X2ludHJfaW5mbyh2Y3B1KTsKIAkJaWYgKGlzX25taShpbnRyX2luZm8pKQogCQkJcmV0dXJuIHRydWU7CiAJCWVsc2UgaWYgKGlzX3BhZ2VfZmF1bHQoaW50cl9pbmZvKSkKQEAgLTY3MzcsMTQgJiM0Mzs2NzM3LDE0IEBAIGJvb2wgbmVzdGVkX3ZteF9yZWZsZWN0X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJICogbmVlZCB0byBiZSBzeW50aGVzaXplZCBieSBxdWVyeWluZyB0aGUgaW4ta2VybmVsIExBUElDLCBidXQgZXh0ZXJuYWwKIAkgKiBpbnRlcnJ1cHRzIGFyZSBuZXZlciByZWZsZWN0ZWQgdG8gTDEgc28gaXQmIzM5O3MgYSBub24taXNzdWUuCiAJICovCi0JZXhpdF9pbnRyX2luZm8gPSB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KTsKJiM0MzsJZXhpdF9pbnRyX2luZm8gPSB2dF9nZXRfaW50cl9pbmZvKHZjcHUpOwogCWlmIChpc19leGNlcHRpb25fd2l0aF9lcnJvcl9jb2RlKGV4aXRfaW50cl9pbmZvKSkgewogCQlzdHJ1Y3Qgdm1jczEyICp2bWNzMTIgPSBnZXRfdm1jczEyKHZjcHUpOwogCiAJCXZtY3MxMi0mZ3Q7dm1fZXhpdF9pbnRyX2Vycm9yX2NvZGUgPQogCQkJdm1jc19yZWFkMzIoVk1fRVhJVF9JTlRSX0VSUk9SX0NPREUpOwogCX0KLQlleGl0X3F1YWwgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKJiM0MzsJZXhpdF9xdWFsID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKIAogcmVmbGVjdF92bWV4aXQ6CiAJbmVzdGVkX3ZteF92bWV4aXQodmNwdSwgZXhpdF9yZWFzb24uZnVsbCwgZXhpdF9pbnRyX2luZm8sIGV4aXRfcXVhbCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmMgYi9hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmMKaW5kZXggNGE2ZDlhMTdkYTIzOC4uMjY0NGFkZDU0Yjc2YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYwpAQCAtMTQsNiAmIzQzOzE0LDggQEAKICNpbmNsdWRlICYjMzQ7dm14LmgmIzM0OwogI2luY2x1ZGUgJiMzNDt0ZHguaCYjMzQ7CiAKJiM0MzsjcHJhZ21hIEdDQyBwb2lzb24gdG9fdm14CiYjNDM7CiAvKgogICogTWFpbnRhaW4gYSBwZXItQ1BVIGxpc3Qgb2YgdkNQVXMgdGhhdCBuZWVkIHRvIGJlIGF3YWtlbmVkIGJ5IHdha2V1cF9oYW5kbGVyKCkKICAqIHdoZW4gYSBXQUtFVVBfVkVDVE9SIGludGVycnVwdGVkIGlzIHBvc3RlZC4gIHZDUFVzIGFyZSBhZGRlZCB0byB0aGUgbGlzdCB3aGVuCkBAIC01NCw3ICYjNDM7NTYsNyBAQCBzdGF0aWMgaW50IHBpX3RyeV9zZXRfY29udHJvbChzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYywgdTY0ICpwb2xkLCB1NjQgbmV3KQogCXJldHVybiAwOwogfQogCi12b2lkIHZteF92Y3B1X3BpX2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KQomIzQzO3ZvaWQgdnRfdmNwdV9waV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSkKIHsKIAlzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYyA9IHZjcHVfdG9fcGlfZGVzYyh2Y3B1KTsKIAlzdHJ1Y3QgdmNwdV92dCAqdnQgPSB0b192dCh2Y3B1KTsKQEAgLTE0NCwxMSAmIzQzOzE0NiwxMSBAQCB2b2lkIHZteF92Y3B1X3BpX2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KQogCQlwaV9zZXRfb24ocGlfZGVzYyk7CiB9CiAKLXN0YXRpYyBib29sIHZteF9jYW5fdXNlX3Z0ZF9waShzdHJ1Y3Qga3ZtICprdm0pCiYjNDM7c3RhdGljIGJvb2wgdnRfY2FuX3VzZV92dGRfcGkoc3RydWN0IGt2bSAqa3ZtKQogewogCS8qCiAJICogTm90ZSwgcmVhZGluZyB0aGUgbnVtYmVyIG9mIHBvc3NpYmxlIGJ5cGFzcyBJUlFzIGNhbiByYWNlIHdpdGggYQotCSAqIGJ5cGFzcyBJUlEgYmVpbmcgYXR0YWNoZWQgdG8gdGhlIFZNLiAgdm14X3BpX3N0YXJ0X2J5cGFzcygpIGVuc3VyZXMKJiM0MzsJICogYnlwYXNzIElSUSBiZWluZyBhdHRhY2hlZCB0byB0aGUgVk0uICB2dF9waV9zdGFydF9ieXBhc3MoKSBlbnN1cmVzCiAJICogYmxvY2tuZyB2Q1BVcyB3aWxsIHNlZSBhbiBlbGV2YXRlZCBjb3VudCBvciBnZXQgS1ZNX1JFUV9VTkJMT0NLLgogCSAqLwogCXJldHVybiBpcnFjaGlwX2luX2tlcm5lbChrdm0pICZhbXA7JmFtcDsga3ZtX2FyY2hfaGFzX2lycV9ieXBhc3MoKSAmYW1wOyZhbXA7CkBAIC0yMDYsNyAmIzQzOzIwOCw3IEBAIHN0YXRpYyB2b2lkIHBpX2VuYWJsZV93YWtldXBfaGFuZGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJCV9fYXBpY19zZW5kX0lQSV9zZWxmKFBPU1RFRF9JTlRSX1dBS0VVUF9WRUNUT1IpOwogfQogCi1zdGF0aWMgYm9vbCB2bXhfbmVlZHNfcGlfd2FrZXVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0MztzdGF0aWMgYm9vbCB2dF9uZWVkc19waV93YWtldXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCS8qCiAJICogVGhlIGRlZmF1bHQgcG9zdGVkIGludGVycnVwdCB2ZWN0b3IgZG9lcyBub3RoaW5nIHdoZW4KQEAgLTIxNywxNCAmIzQzOzIxOSwxNCBAQCBzdGF0aWMgYm9vbCB2bXhfbmVlZHNfcGlfd2FrZXVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkgKiBiYWNrIHRvIHRoZSBwaV93YWtldXBfaGFuZGxlcigpIGZ1bmN0aW9uLgogCSAqLwogCXJldHVybiAodm14X2Nhbl91c2VfaXBpdih2Y3B1KSAmYW1wOyZhbXA7ICFpc190ZF92Y3B1KHZjcHUpKSB8fAotCQl2bXhfY2FuX3VzZV92dGRfcGkodmNwdS0mZ3Q7a3ZtKTsKJiM0MzsJCXZ0X2Nhbl91c2VfdnRkX3BpKHZjcHUtJmd0O2t2bSk7CiB9CiAKLXZvaWQgdm14X3ZjcHVfcGlfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mzt2b2lkIHZ0X3ZjcHVfcGlfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYyA9IHZjcHVfdG9fcGlfZGVzYyh2Y3B1KTsKIAotCWlmICghdm14X25lZWRzX3BpX3dha2V1cCh2Y3B1KSkKJiM0MzsJaWYgKCF2dF9uZWVkc19waV93YWtldXAodmNwdSkpCiAJCXJldHVybjsKIAogCS8qCkBAIC0yOTIsMTcgJiM0MzsyOTQsMTcgQEAgYm9vbCBwaV9oYXNfcGVuZGluZ19pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogLyoKICAqIEtpY2sgYWxsIHZDUFVzIHdoZW4gdGhlIGZpcnN0IHBvc3NpYmxlIGJ5cGFzcyBJUlEgaXMgYXR0YWNoZWQgdG8gYSBWTSwgYXMKICAqIGJsb2NraW5nIHZDUFVzIG1heSBzY2hlZHVsZWQgb3V0IHdpdGhvdXQgcmVjb25maWd1cmluZyBQSUQuTlYgdG8gdGhlIHdha2V1cAotICogdmVjdG9yLCBpLmUuIGlmIHRoZSBieXBhc3MgSVJRIGNhbWUgYWxvbmcgYWZ0ZXIgdm14X3ZjcHVfcGlfcHV0KCkuCiYjNDM7ICogdmVjdG9yLCBpLmUuIGlmIHRoZSBieXBhc3MgSVJRIGNhbWUgYWxvbmcgYWZ0ZXIgdnRfdmNwdV9waV9wdXQoKS4KICAqLwotdm9pZCB2bXhfcGlfc3RhcnRfYnlwYXNzKHN0cnVjdCBrdm0gKmt2bSkKJiM0Mzt2b2lkIHZ0X3BpX3N0YXJ0X2J5cGFzcyhzdHJ1Y3Qga3ZtICprdm0pCiB7Ci0JaWYgKFdBUk5fT05fT05DRSghdm14X2Nhbl91c2VfdnRkX3BpKGt2bSkpKQomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCF2dF9jYW5fdXNlX3Z0ZF9waShrdm0pKSkKIAkJcmV0dXJuOwogCiAJa3ZtX21ha2VfYWxsX2NwdXNfcmVxdWVzdChrdm0sIEtWTV9SRVFfVU5CTE9DSyk7CiB9CiAKLWludCB2bXhfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sCiYjNDM7aW50IHZ0X3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLAogCQkgICAgICAgdW5zaWduZWQgaW50IGhvc3RfaXJxLCB1aW50MzJfdCBndWVzdF9pcnEsCiAJCSAgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2ZWN0b3IpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmggYi9hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmgKaW5kZXggYTRhZjM5OTQ4Y2YwNC4uYzU4NjBlYTgyOGFlOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuaApAQCAtOCwxNiAmIzQzOzgsMTYgQEAKIAogI2luY2x1ZGUgJmx0O2FzbS9wb3N0ZWRfaW50ci5oJmd0OwogCi12b2lkIHZteF92Y3B1X3BpX2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTsKLXZvaWQgdm14X3ZjcHVfcGlfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiYjNDM7dm9pZCB2dF92Y3B1X3BpX2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTsKJiM0Mzt2b2lkIHZ0X3ZjcHVfcGlfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiB2b2lkIHBpX3dha2V1cF9oYW5kbGVyKHZvaWQpOwogdm9pZCBfX2luaXQgcGlfaW5pdF9jcHUoaW50IGNwdSk7CiB2b2lkIHBpX2FwaWN2X3ByZV9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBib29sIHBpX2hhc19wZW5kaW5nX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwotaW50IHZteF9waV91cGRhdGVfaXJ0ZShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQsIHN0cnVjdCBrdm0gKmt2bSwKJiM0MztpbnQgdnRfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sCiAJCSAgICAgICB1bnNpZ25lZCBpbnQgaG9zdF9pcnEsIHVpbnQzMl90IGd1ZXN0X2lycSwKIAkJICAgICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZlY3Rvcik7Ci12b2lkIHZteF9waV9zdGFydF9ieXBhc3Moc3RydWN0IGt2bSAqa3ZtKTsKJiM0Mzt2b2lkIHZ0X3BpX3N0YXJ0X2J5cGFzcyhzdHJ1Y3Qga3ZtICprdm0pOwogCiBzdGF0aWMgaW5saW5lIGludCBwaV9maW5kX2hpZ2hlc3RfdmVjdG9yKHN0cnVjdCBwaV9kZXNjICpwaV9kZXNjKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmMKaW5kZXggYjI3MmMyMDU4NmE3NC4uZWZiYjFhYzZmNTFlYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jCkBAIC03MTYsNyAmIzQzOzcxNiw3IEBAIHZvaWQgdGR4X3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpCiB7CiAJc3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7CiAKLQl2bXhfdmNwdV9waV9sb2FkKHZjcHUsIGNwdSk7CiYjNDM7CXZ0X3ZjcHVfcGlfbG9hZCh2Y3B1LCBjcHUpOwogCWlmICh2Y3B1LSZndDtjcHUgPT0gY3B1IHx8ICFpc19oa2lkX2Fzc2lnbmVkKHRvX2t2bV90ZHgodmNwdS0mZ3Q7a3ZtKSkpCiAJCXJldHVybjsKIApAQCAtNzQxLDcgJiM0Mzs3NDEsNyBAQCBib29sIHRkeF9pbnRlcnJ1cHRfYWxsb3dlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJICogaW50ZXJydXB0IGlzIGFsd2F5cyBhbGxvd2VkIHVubGVzcyBURFggZ3Vlc3QgY2FsbHMgVERWTUNBTEwgd2l0aCBITFQsCiAJICogd2hpY2ggcGFzc2VzIHRoZSBpbnRlcnJ1cHQgYmxvY2tlZCBmbGFnLgogCSAqLwotCXJldHVybiB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljICE9IEVYSVRfUkVBU09OX0hMVCB8fAomIzQzOwlyZXR1cm4gdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljICE9IEVYSVRfUkVBU09OX0hMVCB8fAogCSAgICAgICAhdG9fdGR4KHZjcHUpLSZndDt2cF9lbnRlcl9hcmdzLnIxMjsKIH0KIApAQCAtNzU5LDcgJiM0Mzs3NTksNyBAQCBzdGF0aWMgYm9vbCB0ZHhfcHJvdGVjdGVkX2FwaWNfaGFzX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJICogb3RoZXJ3aXNlIHRoZSBpbnRlcnJ1cHQgd291bGQgaGF2ZSBiZWVuIHNlcnZpY2VkIGF0IHRoZSBpbnN0cnVjdGlvbgogCSAqIGJvdW5kYXJ5LgogCSAqLwotCWlmICh2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljICE9IEVYSVRfUkVBU09OX0hMVCB8fAomIzQzOwlpZiAodnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljICE9IEVYSVRfUkVBU09OX0hMVCB8fAogCSAgICB0b190ZHgodmNwdSktJmd0O3ZwX2VudGVyX2FyZ3MucjEyKQogCQlyZXR1cm4gZmFsc2U7CiAKQEAgLTgyNiw3ICYjNDM7ODI2LDcgQEAgc3RhdGljIHZvaWQgdGR4X3ByZXBhcmVfc3dpdGNoX3RvX2hvc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiB2b2lkIHRkeF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0Jdm14X3ZjcHVfcGlfcHV0KHZjcHUpOwomIzQzOwl2dF92Y3B1X3BpX3B1dCh2Y3B1KTsKIAl0ZHhfcHJlcGFyZV9zd2l0Y2hfdG9faG9zdCh2Y3B1KTsKIH0KIApAQCAtOTc0LDE1ICYjNDM7OTc0LDE1IEBAIHN0YXRpYyBub2luc3RyIHZvaWQgdGR4X3ZjcHVfZW50ZXJfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJdGR4LSZndDtleGl0X2dwYSA9IHRkeC0mZ3Q7dnBfZW50ZXJfYXJncy5yODsKIAl2dC0mZ3Q7ZXhpdF9pbnRyX2luZm8gPSB0ZHgtJmd0O3ZwX2VudGVyX2FyZ3Mucjk7CiAKLQl2bXhfaGFuZGxlX25taSh2Y3B1KTsKJiM0MzsJdnRfaGFuZGxlX25taSh2Y3B1KTsKIAogCWd1ZXN0X3N0YXRlX2V4aXRfaXJxb2ZmKCk7CiB9CiAKIHN0YXRpYyBib29sIHRkeF9mYWlsZWRfdm1lbnRyeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JcmV0dXJuIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkgJmFtcDsmYW1wOwotCSAgICAgICB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZ1bGwgIT0gLTF1OwomIzQzOwlyZXR1cm4gdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5ICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mdWxsICE9IC0xdTsKIH0KIAogc3RhdGljIGZhc3RwYXRoX3QgdGR4X2V4aXRfaGFuZGxlcnNfZmFzdHBhdGgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtMTEzMSw3ICYjNDM7MTEzMSw3IEBAIHZvaWQgdGR4X2luamVjdF9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiBzdGF0aWMgaW50IHRkeF9oYW5kbGVfZXhjZXB0aW9uX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JdTMyIGludHJfaW5mbyA9IHZteF9nZXRfaW50cl9pbmZvKHZjcHUpOwomIzQzOwl1MzIgaW50cl9pbmZvID0gdnRfZ2V0X2ludHJfaW5mbyh2Y3B1KTsKIAogCS8qCiAJICogTWFjaGluZSBjaGVja3MgYXJlIGhhbmRsZWQgYnkgaGFuZGxlX2V4Y2VwdGlvbl9pcnFvZmYoKSwgb3IgYnkKQEAgLTE4OTUsNyAmIzQzOzE4OTUsNyBAQCB2b2lkIHRkeF9kZWxpdmVyX2ludGVycnVwdChzdHJ1Y3Qga3ZtX2xhcGljICphcGljLCBpbnQgZGVsaXZlcnlfbW9kZSwKIAlzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTsKIAogCS8qIFREWCBzdXBwb3J0cyBvbmx5IHBvc3RlZCBpbnRlcnJ1cHQuICBObyBsYXBpYyBlbXVsYXRpb24uICovCi0JX192bXhfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0KHZjcHUsICZhbXA7dGR4LSZndDt2dC5waV9kZXNjLCB2ZWN0b3IpOwomIzQzOwlfX3Z0X2RlbGl2ZXJfcG9zdGVkX2ludGVycnVwdCh2Y3B1LCAmYW1wO3RkeC0mZ3Q7dnQucGlfZGVzYywgdmVjdG9yKTsKIAogCXRyYWNlX2t2bV9hcGljdl9hY2NlcHRfaXJxKHZjcHUtJmd0O3ZjcHVfaWQsIGRlbGl2ZXJ5X21vZGUsIHRyaWdfbW9kZSwgdmVjdG9yKTsKIH0KQEAgLTE5MDMsNyAmIzQzOzE5MDMsNyBAQCB2b2lkIHRkeF9kZWxpdmVyX2ludGVycnVwdChzdHJ1Y3Qga3ZtX2xhcGljICphcGljLCBpbnQgZGVsaXZlcnlfbW9kZSwKIHN0YXRpYyBpbmxpbmUgYm9vbCB0ZHhfaXNfc2VwdF92aW9sYXRpb25fdW5leHBlY3RlZF9wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAl1NjQgZWVxX3R5cGUgPSB0b190ZHgodmNwdSktJmd0O2V4dF9leGl0X3F1YWxpZmljYXRpb24gJmFtcDsgVERYX0VYVF9FWElUX1FVQUxfVFlQRV9NQVNLOwotCXU2NCBlcSA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpOwomIzQzOwl1NjQgZXEgPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpOwogCiAJaWYgKGVlcV90eXBlICE9IFREWF9FWFRfRVhJVF9RVUFMX1RZUEVfUEVORElOR19FUFRfVklPTEFUSU9OKQogCQlyZXR1cm4gZmFsc2U7CkBAIC0xOTM5LDcgJiM0MzsxOTM5LDcgQEAgc3RhdGljIGludCB0ZHhfaGFuZGxlX2VwdF92aW9sYXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCQkvKiBPbmx5IHByaXZhdGUgR1BBIHRyaWdnZXJzIHplcm8tc3RlcCBtaXRpZ2F0aW9uICovCiAJCWxvY2FsX3JldHJ5ID0gdHJ1ZTsKIAl9IGVsc2UgewotCQlleGl0X3F1YWwgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKJiM0MzsJCWV4aXRfcXVhbCA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7CiAJCS8qCiAJCSAqIEVQVCB2aW9sYXRpb24gZHVlIHRvIGluc3RydWN0aW9uIGZldGNoIHNob3VsZCBuZXZlciBiZQogCQkgKiB0cmlnZ2VyZWQgZnJvbSBzaGFyZWQgbWVtb3J5IGluIFREWCBndWVzdC4gIElmIHN1Y2ggRVBUCkBAIC0xOTg3LDcgJiM0MzsxOTg3LDcgQEAgc3RhdGljIGludCB0ZHhfaGFuZGxlX2VwdF92aW9sYXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXdoaWxlICgxKSB7CiAJCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7CiAKLQkJcmV0ID0gX192bXhfaGFuZGxlX2VwdF92aW9sYXRpb24odmNwdSwgZ3BhLCBleGl0X3F1YWwpOwomIzQzOwkJcmV0ID0gX192dF9oYW5kbGVfZXB0X3Zpb2xhdGlvbih2Y3B1LCBncGEsIGV4aXRfcXVhbCk7CiAKIAkJaWYgKHJldCAhPSBSRVRfUEZfUkVUUlkgfHwgIWxvY2FsX3JldHJ5KQogCQkJYnJlYWs7CkBAIC0yMDIxLDcgJiM0MzsyMDIxLDcgQEAgaW50IHRkeF9jb21wbGV0ZV9lbXVsYXRlZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZXJyKQogCQlyZXR1cm4gMTsKIAl9CiAKLQlpZiAodm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYyA9PSBFWElUX1JFQVNPTl9NU1JfUkVBRCkKJiM0MzsJaWYgKHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYyA9PSBFWElUX1JFQVNPTl9NU1JfUkVBRCkKIAkJdGR2bWNhbGxfc2V0X3JldHVybl92YWwodmNwdSwga3ZtX3JlYWRfZWR4X2VheCh2Y3B1KSk7CiAKIAlyZXR1cm4gMTsKQEAgLTIwMzIsNyAmIzQzOzIwMzIsNyBAQCBpbnQgdGR4X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBmYXN0cGF0aCkKIHsKIAlzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTsKIAl1NjQgdnBfZW50ZXJfcmV0ID0gdGR4LSZndDt2cF9lbnRlcl9yZXQ7Ci0JdW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uID0gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KTsKJiM0MzsJdW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uID0gdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpOwogCiAJaWYgKGZhc3RwYXRoICE9IEVYSVRfRkFTVFBBVEhfTk9ORSkKIAkJcmV0dXJuIDE7CkBAIC0yMTQyLDkgJiM0MzsyMTQyLDkgQEAgdm9pZCB0ZHhfZ2V0X2V4aXRfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiAqcmVhc29uLAogCiAJKnJlYXNvbiA9IHRkeC0mZ3Q7dnQuZXhpdF9yZWFzb24uZnVsbDsKIAlpZiAoKnJlYXNvbiAhPSAtMXUpIHsKLQkJKmluZm8xID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7CiYjNDM7CQkqaW5mbzEgPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpOwogCQkqaW5mbzIgPSB0ZHgtJmd0O2V4dF9leGl0X3F1YWxpZmljYXRpb247Ci0JCSppbnRyX2luZm8gPSB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KTsKJiM0MzsJCSppbnRyX2luZm8gPSB2dF9nZXRfaW50cl9pbmZvKHZjcHUpOwogCX0gZWxzZSB7CiAJCSppbmZvMSA9IDA7CiAJCSppbmZvMiA9IDA7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jIGIvYXJjaC94ODYva3ZtL3ZteC92bXguYwppbmRleCA1MDQ2MzBmMGViNDBmLi43ZTM1YzJkMDNjNjllIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmMKQEAgLTE1NzcsMTIgJiM0MzsxNTc3LDEyIEBAIHZvaWQgdm14X3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpCiAKIAl2bXhfdmNwdV9sb2FkX3ZtY3ModmNwdSwgY3B1KTsKIAotCXZteF92Y3B1X3BpX2xvYWQodmNwdSwgY3B1KTsKJiM0MzsJdnRfdmNwdV9waV9sb2FkKHZjcHUsIGNwdSk7CiB9CiAKIHZvaWQgdm14X3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQl2bXhfdmNwdV9waV9wdXQodmNwdSk7CiYjNDM7CXZ0X3ZjcHVfcGlfcHV0KHZjcHUpOwogCiAJdm14X3ByZXBhcmVfc3dpdGNoX3RvX2hvc3QodG9fdm14KHZjcHUpKTsKIH0KQEAgLTE3OTEsNyAmIzQzOzE3OTEsNyBAQCBpbnQgdm14X2NoZWNrX2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZW11bF90eXBlLAogCSAqIHNvIHRoYXQgZ3Vlc3QgdXNlcnNwYWNlIGNhbiYjMzk7dCBEb1MgdGhlIGd1ZXN0IHNpbXBseSBieSB0cmlnZ2VyaW5nCiAJICogZW11bGF0aW9uIChlbmNsYXZlcyBhcmUgQ1BMMyBvbmx5KS4KIAkgKi8KLQlpZiAodm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5lbmNsYXZlX21vZGUpIHsKJiM0MzsJaWYgKHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5lbmNsYXZlX21vZGUpIHsKIAkJa3ZtX3F1ZXVlX2V4Y2VwdGlvbih2Y3B1LCBVRF9WRUNUT1IpOwogCQlyZXR1cm4gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQ7CiAJfQpAQCAtMTgwNiw3ICYjNDM7MTgwNiw3IEBAIGludCB2bXhfY2hlY2tfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlbXVsX3R5cGUsCiAKIHN0YXRpYyBpbnQgc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JdW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uID0gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KTsKJiM0MzsJdW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uID0gdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpOwogCXVuc2lnbmVkIGxvbmcgcmlwLCBvcmlnX3JpcDsKIAl1MzIgaW5zdHJfbGVuOwogCkBAIC00NDI0LDcgJiM0Mzs0NDI0LDcgQEAgc3RhdGljIGludCB2bXhfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHZlY3RvcikKIAlpZiAoIXZjcHUtJmd0O2FyY2guYXBpYy0mZ3Q7YXBpY3ZfYWN0aXZlKQogCQlyZXR1cm4gLTE7CiAKLQlfX3ZteF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHQodmNwdSwgJmFtcDt2dC0mZ3Q7cGlfZGVzYywgdmVjdG9yKTsKJiM0MzsJX192dF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHQodmNwdSwgJmFtcDt2dC0mZ3Q7cGlfZGVzYywgdmVjdG9yKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTM3OSwxNSAmIzQzOzUzNzksOSBAQCBib29sIHZteF9ndWVzdF9pbmplY3RfYWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCSAgICAgICAoa3ZtX2dldF9yZmxhZ3ModmNwdSkgJmFtcDsgWDg2X0VGTEFHU19BQyk7CiB9CiAKLXN0YXRpYyBib29sIGlzX3hmZF9ubV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCi17Ci0JcmV0dXJuIHZjcHUtJmd0O2FyY2guZ3Vlc3RfZnB1LmZwc3RhdGUtJmd0O3hmZCAmYW1wOyZhbXA7Ci0JICAgICAgICFrdm1faXNfY3IwX2JpdF9zZXQodmNwdSwgWDg2X0NSMF9UUyk7Ci19Ci0KIHN0YXRpYyBpbnQgdm14X2hhbmRsZV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGVycm9yX2NvZGUpCiB7Ci0JdW5zaWduZWQgbG9uZyBjcjIgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKJiM0MzsJdW5zaWduZWQgbG9uZyBjcjIgPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpOwogCiAJaWYgKHZjcHUtJmd0O2FyY2guYXBmLmhvc3RfYXBmX2ZsYWdzKQogCQlnb3RvIGhhbmRsZV9wZjsKQEAgLTU0MzUsNyAmIzQzOzU0MjksNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9leGNlcHRpb25fbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAl1MzIgdmVjdF9pbmZvOwogCiAJdmVjdF9pbmZvID0gdm14LSZndDtpZHRfdmVjdG9yaW5nX2luZm87Ci0JaW50cl9pbmZvID0gdm14X2dldF9pbnRyX2luZm8odmNwdSk7CiYjNDM7CWludHJfaW5mbyA9IHZ0X2dldF9pbnRyX2luZm8odmNwdSk7CiAKIAkvKgogCSAqIE1hY2hpbmUgY2hlY2tzIGFyZSBoYW5kbGVkIGJ5IGhhbmRsZV9leGNlcHRpb25faXJxb2ZmKCksIG9yIGJ5CkBAIC01NTE2LDcgJiM0Mzs1NTEwLDcgQEAgc3RhdGljIGludCBoYW5kbGVfZXhjZXB0aW9uX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIAlzd2l0Y2ggKGV4X25vKSB7CiAJY2FzZSBEQl9WRUNUT1I6Ci0JCWRyNiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpOwomIzQzOwkJZHI2ID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKIAkJaWYgKCEodmNwdS0mZ3Q7Z3Vlc3RfZGVidWcgJmFtcDsKIAkJICAgICAgKEtWTV9HVUVTVERCR19TSU5HTEVTVEVQIHwgS1ZNX0dVRVNUREJHX1VTRV9IV19CUCkpKSB7CiAJCQkvKgpAQCAtNTU5Miw3ICYjNDM7NTU4Niw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2lvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpbnQgc2l6ZSwgaW4sIHN0cmluZzsKIAl1bnNpZ25lZCBwb3J0OwogCi0JZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7CiYjNDM7CWV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7CiAJc3RyaW5nID0gKGV4aXRfcXVhbGlmaWNhdGlvbiAmYW1wOyAxNikgIT0gMDsKIAogCSYjNDM7JiM0Mzt2Y3B1LSZndDtzdGF0LmlvX2V4aXRzOwpAQCAtNTY4MSw3ICYjNDM7NTY3NSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpbnQgZXJyOwogCWludCByZXQ7CiAKLQlleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKJiM0MzsJZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKIAljciA9IGV4aXRfcXVhbGlmaWNhdGlvbiAmYW1wOyAxNTsKIAlyZWcgPSAoZXhpdF9xdWFsaWZpY2F0aW9uICZndDsmZ3Q7IDgpICZhbXA7IDE1OwogCXN3aXRjaCAoKGV4aXRfcXVhbGlmaWNhdGlvbiAmZ3Q7Jmd0OyA0KSAmYW1wOyAzKSB7CkBAIC01NzU5LDcgJiM0Mzs1NzUzLDcgQEAgc3RhdGljIGludCBoYW5kbGVfZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCWludCBkciwgZHI3LCByZWc7CiAJaW50IGVyciA9IDE7CiAKLQlleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKJiM0MzsJZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKIAlkciA9IGV4aXRfcXVhbGlmaWNhdGlvbiAmYW1wOyBERUJVR19SRUdfQUNDRVNTX05VTTsKIAogCS8qIEZpcnN0LCBpZiBEUiBkb2VzIG5vdCBleGlzdCwgdHJpZ2dlciBVRCAqLwpAQCAtNTg1NSw3ICYjNDM7NTg0OSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2ludGVycnVwdF93aW5kb3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiBzdGF0aWMgaW50IGhhbmRsZV9pbnZscGcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCXVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKIAogCWt2bV9tbXVfaW52bHBnKHZjcHUsIGV4aXRfcXVhbGlmaWNhdGlvbik7CiAJcmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpOwpAQCAtNTg2NCw3ICYjNDM7NTg1OCw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2ludmxwZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiBzdGF0aWMgaW50IGhhbmRsZV9hcGljX2FjY2VzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJaWYgKGxpa2VseShmYXN0ZW9pKSkgewotCQl1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpOwomIzQzOwkJdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpOwogCQlpbnQgYWNjZXNzX3R5cGUsIG9mZnNldDsKIAogCQlhY2Nlc3NfdHlwZSA9IGV4aXRfcXVhbGlmaWNhdGlvbiAmYW1wOyBBUElDX0FDQ0VTU19UWVBFOwpAQCAtNTg4NSw3ICYjNDM7NTg3OSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2FwaWNfYWNjZXNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogc3RhdGljIGludCBoYW5kbGVfYXBpY19lb2lfaW5kdWNlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKJiM0MzsJdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpOwogCWludCB2ZWN0b3IgPSBleGl0X3F1YWxpZmljYXRpb24gJmFtcDsgMHhmZjsKIAogCS8qIEVPSS1pbmR1Y2VkIFZNIGV4aXQgaXMgdHJhcC1saWtlIGFuZCB0aHVzIG5vIG5lZWQgdG8gYWRqdXN0IElQICovCkBAIC01ODk1LDcgJiM0Mzs1ODg5LDcgQEAgc3RhdGljIGludCBoYW5kbGVfYXBpY19lb2lfaW5kdWNlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIHN0YXRpYyBpbnQgaGFuZGxlX2FwaWNfd3JpdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCXVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKIAogCS8qCiAJICogQVBJQy13cml0ZSBWTS1FeGl0IGlzIHRyYXAtbGlrZSwgS1ZNIGRvZXNuJiMzOTt0IG5lZWQgdG8gYWR2YW5jZSBSSVAgYW5kCkBAIC01OTIzLDcgJiM0Mzs1OTE3LDcgQEAgc3RhdGljIGludCBoYW5kbGVfdGFza19zd2l0Y2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCWlkdF9pbmRleCA9ICh2bXgtJmd0O2lkdF92ZWN0b3JpbmdfaW5mbyAmYW1wOyBWRUNUT1JJTkdfSU5GT19WRUNUT1JfTUFTSyk7CiAJdHlwZSA9ICh2bXgtJmd0O2lkdF92ZWN0b3JpbmdfaW5mbyAmYW1wOyBWRUNUT1JJTkdfSU5GT19UWVBFX01BU0spOwogCi0JZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7CiYjNDM7CWV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7CiAKIAlyZWFzb24gPSAodTMyKWV4aXRfcXVhbGlmaWNhdGlvbiAmZ3Q7Jmd0OyAzMDsKIAlpZiAocmVhc29uID09IFRBU0tfU1dJVENIX0dBVEUgJmFtcDsmYW1wOyBpZHRfdikgewpAQCAtNTk2OSw3ICYjNDM7NTk2Myw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3Rhc2tfc3dpdGNoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogc3RhdGljIGludCBoYW5kbGVfZXB0X3Zpb2xhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKJiM0MzsJdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpOwogCWdwYV90IGdwYTsKIAogCS8qCkBAIC01OTk3LDcgJiM0Mzs1OTkxLDcgQEAgc3RhdGljIGludCBoYW5kbGVfZXB0X3Zpb2xhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJaWYgKHVubGlrZWx5KGFsbG93X3NtYWxsZXJfbWF4cGh5YWRkciAmYW1wOyZhbXA7ICFrdm1fdmNwdV9pc19sZWdhbF9ncGEodmNwdSwgZ3BhKSkpCiAJCXJldHVybiBrdm1fZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCAwKTsKIAotCXJldHVybiBfX3ZteF9oYW5kbGVfZXB0X3Zpb2xhdGlvbih2Y3B1LCBncGEsIGV4aXRfcXVhbGlmaWNhdGlvbik7CiYjNDM7CXJldHVybiBfX3Z0X2hhbmRsZV9lcHRfdmlvbGF0aW9uKHZjcHUsIGdwYSwgZXhpdF9xdWFsaWZpY2F0aW9uKTsKIH0KIAogc3RhdGljIGludCBoYW5kbGVfZXB0X21pc2NvbmZpZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC02MTYwLDcgJiM0Mzs2MTU0LDcgQEAgc3RhdGljIGludCBoYW5kbGVfaW52cGNpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJLyogQWNjb3JkaW5nIHRvIHRoZSBJbnRlbCBpbnN0cnVjdGlvbiByZWZlcmVuY2UsIHRoZSBtZW1vcnkgb3BlcmFuZAogCSAqIGlzIHJlYWQgZXZlbiBpZiBpdCBpc24mIzM5O3QgbmVlZGVkIChlLmcuLCBmb3IgdHlwZT09YWxsKQogCSAqLwotCWlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpLAomIzQzOwlpZiAoZ2V0X3ZteF9tZW1fYWRkcmVzcyh2Y3B1LCB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpLAogCQkJCXZteF9pbnN0cnVjdGlvbl9pbmZvLCBmYWxzZSwKIAkJCQlzaXplb2Yob3BlcmFuZCksICZhbXA7Z3ZhKSkKIAkJcmV0dXJuIDE7CkBAIC02MTc0LDcgJiM0Mzs2MTY4LDcgQEAgc3RhdGljIGludCBoYW5kbGVfcG1sX2Z1bGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiAJdHJhY2Vfa3ZtX3BtbF9mdWxsKHZjcHUtJmd0O3ZjcHVfaWQpOwogCi0JZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7CiYjNDM7CWV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7CiAKIAkvKgogCSAqIFBNTCBidWZmZXIgRlVMTCBoYXBwZW5lZCB3aGlsZSBleGVjdXRpbmcgaXJldCBmcm9tIE5NSSwKQEAgLTYyNzgsNyAmIzQzOzYyNzIsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9idXNfbG9ja192bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiBzdGF0aWMgaW50IGhhbmRsZV9ub3RpZnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCXVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKIAlib29sIGNvbnRleHRfaW52YWxpZCA9IGV4aXRfcXVhbCAmYW1wOyBOT1RJRllfVk1fQ09OVEVYVF9JTlZBTElEOwogCiAJJiM0MzsmIzQzO3ZjcHUtJmd0O3N0YXQubm90aWZ5X3dpbmRvd19leGl0czsKQEAgLTYzMDksMTMgJiM0Mzs2MzAzLDEzIEBAIHN0YXRpYyBpbnQgdm14X2dldF9tc3JfaW1tX3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIHN0YXRpYyBpbnQgaGFuZGxlX3JkbXNyX2ltbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JcmV0dXJuIGt2bV9lbXVsYXRlX3JkbXNyX2ltbSh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSwKJiM0MzsJcmV0dXJuIGt2bV9lbXVsYXRlX3JkbXNyX2ltbSh2Y3B1LCB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpLAogCQkJCSAgICAgdm14X2dldF9tc3JfaW1tX3JlZyh2Y3B1KSk7CiB9CiAKIHN0YXRpYyBpbnQgaGFuZGxlX3dybXNyX2ltbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JcmV0dXJuIGt2bV9lbXVsYXRlX3dybXNyX2ltbSh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSwKJiM0MzsJcmV0dXJuIGt2bV9lbXVsYXRlX3dybXNyX2ltbSh2Y3B1LCB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpLAogCQkJCSAgICAgdm14X2dldF9tc3JfaW1tX3JlZyh2Y3B1KSk7CiB9CiAKQEAgLTYzOTIsMTAgJiM0Mzs2Mzg2LDEwIEBAIHZvaWQgdm14X2dldF9leGl0X2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgKnJlYXNvbiwKIAlzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTsKIAogCSpyZWFzb24gPSB2bXgtJmd0O3Z0LmV4aXRfcmVhc29uLmZ1bGw7Ci0JKmluZm8xID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7CiYjNDM7CSppbmZvMSA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7CiAJaWYgKCEodm14LSZndDt2dC5leGl0X3JlYXNvbi5mYWlsZWRfdm1lbnRyeSkpIHsKIAkJKmluZm8yID0gdm14LSZndDtpZHRfdmVjdG9yaW5nX2luZm87Ci0JCSppbnRyX2luZm8gPSB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KTsKJiM0MzsJCSppbnRyX2luZm8gPSB2dF9nZXRfaW50cl9pbmZvKHZjcHUpOwogCQlpZiAoaXNfZXhjZXB0aW9uX3dpdGhfZXJyb3JfY29kZSgqaW50cl9pbmZvKSkKIAkJCSplcnJvcl9jb2RlID0gdm1jc19yZWFkMzIoVk1fRVhJVF9JTlRSX0VSUk9SX0NPREUpOwogCQllbHNlCkBAIC02NzA2LDcgJiM0Mzs2NzAwLDcgQEAgdm9pZCBkdW1wX3ZtY3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogc3RhdGljIGludCBfX3ZteF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aCkKIHsKIAlzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTsKLQl1bmlvbiB2bXhfZXhpdF9yZWFzb24gZXhpdF9yZWFzb24gPSB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpOwomIzQzOwl1bmlvbiB2bXhfZXhpdF9yZWFzb24gZXhpdF9yZWFzb24gPSB2dF9nZXRfZXhpdF9yZWFzb24odmNwdSk7CiAJdTMyIHZlY3RvcmluZ19pbmZvID0gdm14LSZndDtpZHRfdmVjdG9yaW5nX2luZm87CiAJdTE2IGV4aXRfaGFuZGxlcl9pbmRleDsKIApAQCAtNjg3MCw3ICYjNDM7Njg2NCw3IEBAIGludCB2bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpCiAJICogRXhpdCB0byB1c2VyIHNwYWNlIHdoZW4gYnVzIGxvY2sgZGV0ZWN0ZWQgdG8gaW5mb3JtIHRoYXQgdGhlcmUgaXMKIAkgKiBhIGJ1cyBsb2NrIGluIGd1ZXN0LgogCSAqLwotCWlmICh2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJ1c19sb2NrX2RldGVjdGVkKSB7CiYjNDM7CWlmICh2dF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYnVzX2xvY2tfZGV0ZWN0ZWQpIHsKIAkJaWYgKHJldCAmZ3Q7IDApCiAJCQl2Y3B1LSZndDtydW4tJmd0O2V4aXRfcmVhc29uID0gS1ZNX0VYSVRfWDg2X0JVU19MT0NLOwogCkBAIC03MTQzLDc0ICYjNDM7NzEzNyw2IEBAIHZvaWQgdm14X2xvYWRfZW9pX2V4aXRtYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKmVvaV9leGl0X2JpdG1hcCkKIAl2bWNzX3dyaXRlNjQoRU9JX0VYSVRfQklUTUFQMywgZW9pX2V4aXRfYml0bWFwWzNdKTsKIH0KIAotc3RhdGljIHZvaWQgaGFuZGxlX25tX2ZhdWx0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCi17Ci0JLyoKLQkgKiBTYXZlIHhmZF9lcnIgdG8gZ3Vlc3RfZnB1IGJlZm9yZSBpbnRlcnJ1cHQgaXMgZW5hYmxlZCwgc28gdGhlCi0JICogTVNSIHZhbHVlIGlzIG5vdCBjbG9iYmVyZWQgYnkgdGhlIGhvc3QgYWN0aXZpdHkgYmVmb3JlIHRoZSBndWVzdAotCSAqIGhhcyBjaGFuY2UgdG8gY29uc3VtZSBpdC4KLQkgKgotCSAqIFVwZGF0ZSB0aGUgZ3Vlc3QmIzM5O3MgWEZEX0VSUiBpZiBhbmQgb25seSBpZiBYRkQgaXMgZW5hYmxlZCwgYXMgdGhlICNOTQotCSAqIGludGVyY2VwdGlvbiBtYXkgaGF2ZSBiZWVuIGNhdXNlZCBieSBMMSBpbnRlcmNlcHRpb24uICBQZXIgdGhlIFNETSwKLQkgKiBYRkRfRVJSIGlzIG5vdCBtb2RpZmllZCBmb3Igbm9uLVhGRCAjTk0sIGkuZS4gaWYgQ1IwLlRTPTEuCi0JICoKLQkgKiBOb3RlLCBYRkRfRVJSIGlzIHVwZGF0ZWQgX2JlZm9yZV8gdGhlICNOTSBpbnRlcmNlcHRpb24gY2hlY2ssIGkuZS4KLQkgKiB1bmxpa2UgQ1IyIGFuZCBEUjYsIHRoZSB2YWx1ZSBpcyBub3QgYSBwYXlsb2FkIHRoYXQgaXMgYXR0YWNoZWQgdG8KLQkgKiB0aGUgI05NIGV4Y2VwdGlvbi4KLQkgKi8KLQlpZiAoaXNfeGZkX25tX2ZhdWx0KHZjcHUpKQotCQlyZG1zcnEoTVNSX0lBMzJfWEZEX0VSUiwgdmNwdS0mZ3Q7YXJjaC5ndWVzdF9mcHUueGZkX2Vycik7Ci19Ci0KLXN0YXRpYyB2b2lkIGhhbmRsZV9leGNlcHRpb25faXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGludHJfaW5mbykKLXsKLQkvKiBpZiBleGl0IGR1ZSB0byBQRiBjaGVjayBmb3IgYXN5bmMgUEYgKi8KLQlpZiAoaXNfcGFnZV9mYXVsdChpbnRyX2luZm8pKQotCQl2Y3B1LSZndDthcmNoLmFwZi5ob3N0X2FwZl9mbGFncyA9IGt2bV9yZWFkX2FuZF9yZXNldF9hcGZfZmxhZ3MoKTsKLQkvKiBpZiBleGl0IGR1ZSB0byBOTSwgaGFuZGxlIGJlZm9yZSBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkICovCi0JZWxzZSBpZiAoaXNfbm1fZmF1bHQoaW50cl9pbmZvKSkKLQkJaGFuZGxlX25tX2ZhdWx0X2lycW9mZih2Y3B1KTsKLQkvKiBIYW5kbGUgbWFjaGluZSBjaGVja3MgYmVmb3JlIGludGVycnVwdHMgYXJlIGVuYWJsZWQgKi8KLQllbHNlIGlmIChpc19tYWNoaW5lX2NoZWNrKGludHJfaW5mbykpCi0JCWt2bV9tYWNoaW5lX2NoZWNrKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGhhbmRsZV9leHRlcm5hbF9pbnRlcnJ1cHRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLQkJCQkJICAgICB1MzIgaW50cl9pbmZvKQotewotCXVuc2lnbmVkIGludCB2ZWN0b3IgPSBpbnRyX2luZm8gJmFtcDsgSU5UUl9JTkZPX1ZFQ1RPUl9NQVNLOwotCi0JaWYgKEtWTV9CVUcoIWlzX2V4dGVybmFsX2ludHIoaW50cl9pbmZvKSwgdmNwdS0mZ3Q7a3ZtLAotCSAgICAmIzM0O3VuZXhwZWN0ZWQgVk0tRXhpdCBpbnRlcnJ1cHQgaW5mbzogMHgleCYjMzQ7LCBpbnRyX2luZm8pKQotCQlyZXR1cm47Ci0KLQlrdm1fYmVmb3JlX2ludGVycnVwdCh2Y3B1LCBLVk1fSEFORExJTkdfSVJRKTsKLQl4ODZfZW50cnlfZnJvbV9rdm0oRVZFTlRfVFlQRV9FWFRJTlQsIHZlY3Rvcik7Ci0Ja3ZtX2FmdGVyX2ludGVycnVwdCh2Y3B1KTsKLQotCXZjcHUtJmd0O2FyY2guYXRfaW5zdHJ1Y3Rpb25fYm91bmRhcnkgPSB0cnVlOwotfQotCi12b2lkIHZteF9oYW5kbGVfZXhpdF9pcnFvZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQotewotCWlmICh0b192dCh2Y3B1KS0mZ3Q7ZW11bGF0aW9uX3JlcXVpcmVkKQotCQlyZXR1cm47Ci0KLQlzd2l0Y2ggKHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMpIHsKLQljYXNlIEVYSVRfUkVBU09OX0VYVEVSTkFMX0lOVEVSUlVQVDoKLQkJaGFuZGxlX2V4dGVybmFsX2ludGVycnVwdF9pcnFvZmYodmNwdSwgdm14X2dldF9pbnRyX2luZm8odmNwdSkpOwotCQlicmVhazsKLQljYXNlIEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUk6Ci0JCWhhbmRsZV9leGNlcHRpb25faXJxb2ZmKHZjcHUsIHZteF9nZXRfaW50cl9pbmZvKHZjcHUpKTsKLQkJYnJlYWs7Ci0JY2FzZSBFWElUX1JFQVNPTl9NQ0VfRFVSSU5HX1ZNRU5UUlk6Ci0JCWt2bV9tYWNoaW5lX2NoZWNrKCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLX0KLQogLyoKICAqIFRoZSBrdm0gcGFyYW1ldGVyIGNhbiBiZSBOVUxMIChtb2R1bGUgaW5pdGlhbGl6YXRpb24sIG9yIGludm9jYXRpb24gYmVmb3JlCiAgKiBWTSBjcmVhdGlvbikuIEJlIHN1cmUgdG8gY2hlY2sgdGhlIGt2bSBwYXJhbWV0ZXIgYmVmb3JlIHVzaW5nIGl0LgpAQCAtNzI1MCw3ICYjNDM7NzE3Niw3IEBAIHN0YXRpYyB2b2lkIHZteF9yZWNvdmVyX25taV9ibG9ja2luZyhzdHJ1Y3QgdmNwdV92bXggKnZteCkKIAkJaWYgKHZteC0mZ3Q7bG9hZGVkX3ZtY3MtJmd0O25taV9rbm93bl91bm1hc2tlZCkKIAkJCXJldHVybjsKIAotCQlleGl0X2ludHJfaW5mbyA9IHZteF9nZXRfaW50cl9pbmZvKCZhbXA7dm14LSZndDt2Y3B1KTsKJiM0MzsJCWV4aXRfaW50cl9pbmZvID0gdnRfZ2V0X2ludHJfaW5mbygmYW1wO3ZteC0mZ3Q7dmNwdSk7CiAJCXVuYmxvY2tfbm1pID0gKGV4aXRfaW50cl9pbmZvICZhbXA7IElOVFJfSU5GT19VTkJMT0NLX05NSSkgIT0gMDsKIAkJdmVjdG9yID0gZXhpdF9pbnRyX2luZm8gJmFtcDsgSU5UUl9JTkZPX1ZFQ1RPUl9NQVNLOwogCQkvKgpAQCAtNzQxNywxNCAmIzQzOzczNDMsMTQgQEAgc3RhdGljIGZhc3RwYXRoX3Qgdm14X2V4aXRfaGFuZGxlcnNfZmFzdHBhdGgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCSAqIHRoZSBmYXN0cGF0aCBldmVuLCBhbGwgb3RoZXIgZXhpdHMgbXVzdCB1c2UgdGhlIHNsb3cgcGF0aC4KIAkgKi8KIAlpZiAoaXNfZ3Vlc3RfbW9kZSh2Y3B1KSAmYW1wOyZhbXA7Ci0JICAgIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMgIT0gRVhJVF9SRUFTT05fUFJFRU1QVElPTl9USU1FUikKJiM0MzsJICAgIHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYyAhPSBFWElUX1JFQVNPTl9QUkVFTVBUSU9OX1RJTUVSKQogCQlyZXR1cm4gRVhJVF9GQVNUUEFUSF9OT05FOwogCi0Jc3dpdGNoICh2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljKSB7CiYjNDM7CXN3aXRjaCAodnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljKSB7CiAJY2FzZSBFWElUX1JFQVNPTl9NU1JfV1JJVEU6CiAJCXJldHVybiBoYW5kbGVfZmFzdHBhdGhfd3Jtc3IodmNwdSk7CiAJY2FzZSBFWElUX1JFQVNPTl9NU1JfV1JJVEVfSU1NOgotCQlyZXR1cm4gaGFuZGxlX2Zhc3RwYXRoX3dybXNyX2ltbSh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSwKJiM0MzsJCXJldHVybiBoYW5kbGVfZmFzdHBhdGhfd3Jtc3JfaW1tKHZjcHUsIHZ0X2dldF9leGl0X3F1YWwodmNwdSksCiAJCQkJCQkgdm14X2dldF9tc3JfaW1tX3JlZyh2Y3B1KSk7CiAJY2FzZSBFWElUX1JFQVNPTl9QUkVFTVBUSU9OX1RJTUVSOgogCQlyZXR1cm4gaGFuZGxlX2Zhc3RwYXRoX3ByZWVtcHRpb25fdGltZXIodmNwdSwgZm9yY2VfaW1tZWRpYXRlX2V4aXQpOwpAQCAtNzQzNywxNyAmIzQzOzczNjMsNiBAQCBzdGF0aWMgZmFzdHBhdGhfdCB2bXhfZXhpdF9oYW5kbGVyc19mYXN0cGF0aChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJfQogfQogCi1ub2luc3RyIHZvaWQgdm14X2hhbmRsZV9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQotewotCWlmICgodTE2KXZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMgIT0gRVhJVF9SRUFTT05fRVhDRVBUSU9OX05NSSB8fAotCSAgICAhaXNfbm1pKHZteF9nZXRfaW50cl9pbmZvKHZjcHUpKSkKLQkJcmV0dXJuOwotCi0Ja3ZtX2JlZm9yZV9pbnRlcnJ1cHQodmNwdSwgS1ZNX0hBTkRMSU5HX05NSSk7Ci0JeDg2X2VudHJ5X2Zyb21fa3ZtKEVWRU5UX1RZUEVfTk1JLCBOTUlfVkVDVE9SKTsKLQlrdm1fYWZ0ZXJfaW50ZXJydXB0KHZjcHUpOwotfQotCiBzdGF0aWMgbm9pbnN0ciB2b2lkIHZteF92Y3B1X2VudGVyX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJCQl1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CkBAIC03NDc3LDEwICYjNDM7NzM5MiwxMCBAQCBzdGF0aWMgbm9pbnN0ciB2b2lkIHZteF92Y3B1X2VudGVyX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCX0KIAogCXZteC0mZ3Q7dnQuZXhpdF9yZWFzb24uZnVsbCA9IHZtY3NfcmVhZDMyKFZNX0VYSVRfUkVBU09OKTsKLQlpZiAobGlrZWx5KCF2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5KSkKJiM0MzsJaWYgKGxpa2VseSghdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5KSkKIAkJdm14LSZndDtpZHRfdmVjdG9yaW5nX2luZm8gPSB2bWNzX3JlYWQzMihJRFRfVkVDVE9SSU5HX0lORk9fRklFTEQpOwogCi0Jdm14X2hhbmRsZV9ubWkodmNwdSk7CiYjNDM7CXZ0X2hhbmRsZV9ubWkodmNwdSk7CiAKIG91dDoKIAlndWVzdF9zdGF0ZV9leGl0X2lycW9mZigpOwpAQCAtNzYxNyw3ICYjNDM7NzUzMiw3IEBAIGZhc3RwYXRoX3Qgdm14X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncykKIAkJICogY2hlY2tpbmcuCiAJCSAqLwogCQlpZiAodmNwdS0mZ3Q7YXJjaC5uZXN0ZWRfcnVuX3BlbmRpbmcgJmFtcDsmYW1wOwotCQkgICAgIXZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkpCiYjNDM7CQkgICAgIXZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mYWlsZWRfdm1lbnRyeSkKIAkJCSYjNDM7JiM0Mzt2Y3B1LSZndDtzdGF0Lm5lc3RlZF9ydW47CiAKIAkJdmNwdS0mZ3Q7YXJjaC5uZXN0ZWRfcnVuX3BlbmRpbmcgPSAwOwpAQCAtNzYyOCw3ICYjNDM7NzU0Myw3IEBAIGZhc3RwYXRoX3Qgdm14X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncykKIAogCXRyYWNlX2t2bV9leGl0KHZjcHUsIEtWTV9JU0FfVk1YKTsKIAotCWlmICh1bmxpa2VseSh2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5KSkKJiM0MzsJaWYgKHVubGlrZWx5KHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mYWlsZWRfdm1lbnRyeSkpCiAJCXJldHVybiBFWElUX0ZBU1RQQVRIX05PTkU7CiAKIAl2bXgtJmd0O2xvYWRlZF92bWNzLSZndDtsYXVuY2hlZCA9IDE7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oIGIvYXJjaC94ODYva3ZtL3ZteC92bXguaAppbmRleCBkYzg1MTdmMTViYzQ2Li4zMjQ3YjU1YjM0ODQzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmgKQEAgLTMwNCw0MyAmIzQzOzMwNCw2IEBAIHN0cnVjdCBrdm1fdm14IHsKIAl1NjQgKnBpZF90YWJsZTsKIH07CiAKLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IHZjcHVfdnQgKnRvX3Z0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKLXsKLQlyZXR1cm4gJmFtcDsoY29udGFpbmVyX29mKHZjcHUsIHN0cnVjdCB2Y3B1X3ZteCwgdmNwdSktJmd0O3Z0KTsKLX0KLQotc3RhdGljIF9fYWx3YXlzX2lubGluZSBzdHJ1Y3Qga3ZtX3ZjcHUgKnZ0X3RvX3ZjcHUoc3RydWN0IHZjcHVfdnQgKnZ0KQotewotCXJldHVybiAmYW1wOyhjb250YWluZXJfb2YodnQsIHN0cnVjdCB2Y3B1X3ZteCwgdnQpLSZndDt2Y3B1KTsKLX0KLQotc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bmlvbiB2bXhfZXhpdF9yZWFzb24gdm14X2dldF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCi17Ci0JcmV0dXJuIHRvX3Z0KHZjcHUpLSZndDtleGl0X3JlYXNvbjsKLX0KLQotc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBsb25nIHZteF9nZXRfZXhpdF9xdWFsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKLXsKLQlzdHJ1Y3QgdmNwdV92dCAqdnQgPSB0b192dCh2Y3B1KTsKLQotCWlmICgha3ZtX3JlZ2lzdGVyX3Rlc3RfYW5kX21hcmtfYXZhaWxhYmxlKHZjcHUsIFZDUFVfUkVHX0VYSVRfSU5GT18xKSAmYW1wOyZhbXA7Ci0JICAgICFXQVJOX09OX09OQ0UoaXNfdGRfdmNwdSh2Y3B1KSkpCi0JCXZ0LSZndDtleGl0X3F1YWxpZmljYXRpb24gPSB2bWNzX3JlYWRsKEVYSVRfUVVBTElGSUNBVElPTik7Ci0KLQlyZXR1cm4gdnQtJmd0O2V4aXRfcXVhbGlmaWNhdGlvbjsKLX0KLQotc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdm14X2dldF9pbnRyX2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQotewotCXN0cnVjdCB2Y3B1X3Z0ICp2dCA9IHRvX3Z0KHZjcHUpOwotCi0JaWYgKCFrdm1fcmVnaXN0ZXJfdGVzdF9hbmRfbWFya19hdmFpbGFibGUodmNwdSwgVkNQVV9SRUdfRVhJVF9JTkZPXzIpICZhbXA7JmFtcDsKLQkgICAgIVdBUk5fT05fT05DRShpc190ZF92Y3B1KHZjcHUpKSkKLQkJdnQtJmd0O2V4aXRfaW50cl9pbmZvID0gdm1jc19yZWFkMzIoVk1fRVhJVF9JTlRSX0lORk8pOwotCi0JcmV0dXJuIHZ0LSZndDtleGl0X2ludHJfaW5mbzsKLX0KLQogdm9pZCB2bXhfdmNwdV9sb2FkX3ZtY3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTsKIGludCBhbGxvY2F0ZV92cGlkKHZvaWQpOwogdm9pZCBmcmVlX3ZwaWQoaW50IHZwaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmggYi9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaAppbmRleCAwNTRmZDE0YmIyZTE2Li43YWMwMmM2ODQ1N2YxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaApAQCAtMjcsNyAmIzQzOzI3LDYgQEAgdm9pZCB2bXhfdmNwdV9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaW5pdF9ldmVudCk7CiB2b2lkIHZteF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTsKIHZvaWQgdm14X3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBpbnQgdm14X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKTsKLXZvaWQgdm14X2hhbmRsZV9leGl0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogaW50IHZteF9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiB2b2lkIHZteF91cGRhdGVfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIGJvb2wgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk3OTUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA4ODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoaXMgS1ZNIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gVGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgYW1kNjQsIHdoaWNoIGlzIGV4cGVjdGVkLiBUaGUgZm9jdXMgaXMgY2xlYXJseSBvbiB0aGUgS1ZNIEludGVsL1ZNWCBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIFREWCAoVHJ1c3RlZCBEb21haW4gRXh0ZW5zaW9ucykgaW50ZWdyYXRpb24sIGdpdmVuIHRoZSBmaWxlcyBiZWluZyB0b3VjaGVkOiBgY29tbW9uLmhgLCBgbWFpbi5jYCwgYG5lc3RlZC5jYCwgYHBvc3RlZF9pbnRyLmNgLCBgcG9zdGVkX2ludHIuaGAsIGB0ZHguY2AsIGB2bXguY2AsIGB2bXguaGAsIGFuZCBgeDg2X29wcy5oYC4KCkZpcnN0IGdsYW5jZSwgaXQgbG9va3MgbGlrZSBhIHJlZmFjdG9yaW5nIGFuZCBURFggaW50ZWdyYXRpb24gZWZmb3J0LiBMZXQgbWUgYnJlYWsgZG93biB3aGF0IHRoZSBwYXRjaCBpcyBkb2luZzoKCjEuICBBIG5ldyBgc3RydWN0IHZjcHVfdm14X3RkeGAgaXMgaW50cm9kdWNlZCBpbiBgY29tbW9uLmhgLCBhbmQgdGhlIGB0b192dGAgYW5kIGB2dF90b192Y3B1YCBtYWNyb3MgYXJlIGRlZmluZWQgdXNpbmcgaXQuIFRoaXMgbGlrZWx5IHRpZXMgVERYLXNwZWNpZmljIGRhdGEgb3IgZnVuY3Rpb25zIHRvIHRoZSBleGlzdGluZyBLVk0gVk1YIHN0cnVjdHVyZS4gU2VlbXMgbGlrZSBhIGNvbW1vbiBwYXR0ZXJuIGZvciBhZGRpbmcgYSBsYXllci4KMi4gIEtleSBmdW5jdGlvbnMsIGB2bXhfZ2V0X2V4aXRfcmVhc29uYCwgYHZteF9nZXRfZXhpdF9xdWFsYCwgYW5kIGB2bXhfZ2V0X2ludHJfaW5mb2AgYXJlIHJlbmFtZWQgdG8gYHZ0X2AgcHJlZml4ZWQgdmVyc2lvbnMgYW5kIG1vdmVkIHRvIGBjb21tb24uaGAuIFRoaXMgaXMgbGlrZWx5IHRvIGVzdGFibGlzaCBhIGNvbW1vbiBBUEksIHBvc3NpYmx5IHRvIGJlIHVzZWQgYmV0d2VlbiBWTVggYW5kIFREWCBjb2RlIHBhdGhzLgozLiAgU2ltaWxhciByZW5hbWluZyBhbmQsIHBvdGVudGlhbGx5LCByZW9yZ2FuaXphdGlvbiBvZiBzZXZlcmFsIGhhbmRsZXIgZnVuY3Rpb25zIChgX192bXhfaGFuZGxlX2VwdF92aW9sYXRpb25gLCBldGMuKSBhbHNvIGhhcHBlbnMuIFRoZSBgdm14X2AgcHJlZml4IGlzIGNvbnNpc3RlbnRseSBjaGFuZ2VkIHRvIGB2dF9gLCBzdWdnZXN0aW5nIGEgY2xlYXIgdHJhbnNpdGlvbiB0byBhIG1vcmUgZ2VuZXJpYyBvciBURFgtc3BlY2lmaWMgaW50ZXJmYWNlLgo0LiAgTW9yZSBmdW5jdGlvbiBtb3ZlcyEgVGhlIGhhbmRsZXIgZnVuY3Rpb25zIGBoYW5kbGVfbm1fZmF1bHRfaXJxb2ZmYCwgYGhhbmRsZV9leGNlcHRpb25faXJxb2ZmYCwgYGhhbmRsZV9leHRlcm5hbF9pbnRlcnJ1cHRfaXJxb2ZmYCwgYHZ0X2hhbmRsZV9leGl0X2lycW9mZmAsIGFuZCBgdnRfaGFuZGxlX25taWAgYXJlIG1vdmVkIGZyb20gYHZteC5jYCB0byBgbWFpbi5jYCwgYW5kIGhvb2sgdGhlICBgdnRfaGFuZGxlX2V4aXRfaXJxb2ZmYCBpbnRvIGB2dF94ODZfb3BzLmhhbmRsZV9leGl0X2lycW9mZmAuIFRoaXMgaXMgYSBjbGFzc2ljIHJlZmFjdG9yaW5nIHBhdHRlcm4gYW5kIHBvdGVudGlhbGx5IGlzb2xhdGVzIHRoZSBURFgtc3BlY2lmaWMgaGFuZGxlciYjMzk7cyBpbXBsZW1lbnRhdGlvbi4KNS4gIEZ1bmN0aW9ucyBpbiBgcG9zdGVkX2ludHIuY2AgYXJlIGFsc28gZ2V0dGluZyB0aGUgYHZ0X2AgdHJlYXRtZW50LiBUaGlzIHN1Z2dlc3RzIG1vZGlmaWNhdGlvbnMgdG8gdGhlIHBvc3RlZCBpbnRlcnJ1cHQgaGFuZGxpbmcsIHBvc3NpYmx5IHRvIGJldHRlciBzdXBwb3J0IFREWCYjMzk7cyBpbnRlcnJ1cHQgZGVsaXZlcnkgbWVjaGFuaXNtcywgaWYgVERYIGV2ZW4gaGFzIHBvc3RlZCBpbnRlcnJ1cHRzLgo2LiAgVGhlIGNydWNpYWwgc3RlcDogYWxsIGNhbGxlcnMgd2l0aGluIGB2bXguY2AsIGB0ZHguY2AsIGFuZCBgbmVzdGVkLmNgIGFyZSB1cGRhdGVkIHRvIHVzZSB0aGUgbmV3IGB2dF8qYCBmdW5jdGlvbnMuIFRoaXMgaXMgaW1wb3J0YW50IHRvIHZlcmlmeSB0aGUgY2hhbmdlcyBkb24mIzM5O3QgYnJlYWsgZnVuY3Rpb25hbGl0eS4KNy4gIFByYWdtYSBHQ0MgcG9pc29uIGlzIGJlaW5nIHVzZWQgdG8gZW5mb3JjZSBhbiBhYnN0cmFjdGlvbiBib3VuZGFyeS4gTmljZSEgVGhpcyBtYWtlcyB0aGUgcmVmYWN0b3JpbmcgbW9yZSByb2J1c3QgYW5kIGNsZWFyLgo4LiAgVGhlIHN0YXRpYyBhc3NlcnRpb24gYG9mZnNldG9mKHN0cnVjdCB2Y3B1X3ZteF90ZHgsIHZ0KSA9PSBvZmZzZXRvZihzdHJ1Y3QgdmNwdV92bXgsIHZ0KWAgaXMgaW50ZXJlc3RpbmcuIFRoaXMgaXMgYSBiaXQgb2YgYSBzYW5pdHkgY2hlY2s7IGl0IHNlZW1zIHRoZSBgdnRgIG1lbWJlciBvZiB0aGUgYHZjcHVfdm14X3RkeGAgc3RydWN0IG5lZWRzIHRvIGJlIGF0IHRoZSBzYW1lIG9mZnNldCBhcyBpbiB0aGUgZXhpc3RpbmcgYHZjcHVfdm14YCBzdHJ1Y3QsIGxpa2VseSByZWxhdGVkIHRvIGhvdyB0aGUgY29kZSBhY2Nlc3NlcyBhbmQgdXNlcyB0aGUgZmllbGRzLgoKKipSZWFjaGFiaWxpdHkgYW5kIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIGlzIHRoaXMgY29kZSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcgb24gYW1kNjQ/IEFic29sdXRlbHkuIEtWTSBpcyBhICpjcml0aWNhbCogcGllY2Ugb2YgdGhlIHZpcnR1YWxpemF0aW9uIGluZnJhc3RydWN0dXJlIG9uIHg4Ni9hbWQ2NCBMaW51eCBhbmQgaXMgaGVhdmlseSBmdXp6ZWQgYnkgdG9vbHMgbGlrZSBzeXprYWxsZXIgdmlhIGAvZGV2L2t2bWAuIFRoaXMgaW5jbHVkZXMgdGhlIGlvY3RsIGNhbGxzIGxpa2UgYEtWTV9SVU5gLCBgS1ZNX0NSRUFURV9WTWAsIGFuZCBgS1ZNX0NSRUFURV9WQ1BVYCwgd2hpY2ggaXMgbmVzdGVkIHZpcnR1YWxpemF0aW9uLiBJbnRlbCBWTVggaXMgYWxzbyByZWxldmFudC4gR2l2ZW4gdGhlIGZvY3VzIG9uIFREWCwgdGhpcyBpcyBwcm9iYWJseSB3b3J0aCBhIGZ1enppbmcgY2FtcGFpZ24gdG8gY292ZXIgbmV3IGNvZGUgcGF0aHMuIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIGZvciBLVk0gYW5kIEtWTV9JTlRFTC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwOToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0lOVEVMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTgzPWNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA5OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxODc5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIEtWTV9JTlRFTCBEZXBlbmRlbmNpZXMgaW4gS2NvbmZpZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgYGFyY2gveDg2L2t2bS9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgS1ZNX0lOVEVMYCBvcHRpb24uIEkgd2FudCB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVudGFsIG1hcCBvZiBob3cgdGhpcyBpcyBhbGwgd2lyZWQgdG9nZXRoZXIuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIHVzdWFsIHN1c3BlY3RzOiBhbnkgZGlyZWN0IGRlcGVuZGVuY2llcywgb2YgY291cnNlLiBCdXQgSSYjMzk7bSBhbHNvIGludGVyZXN0ZWQgaW4gaW5kaXJlY3QgZGVwZW5kZW5jaWVzIOKAkyB0aGluZ3MgdGhhdCBtaWdodCBiZSBlbmFibGVkIG9yIGRpc2FibGVkICpiZWNhdXNlKiBgS1ZNX0lOVEVMYCBpcyBzZWxlY3RlZC4gV2hhdCBvdGhlciBmZWF0dXJlcyBvciBkcml2ZXJzIGFyZSBjb250aW5nZW50IG9uIEludGVsIHZpcnR1YWxpemF0aW9uIHN1cHBvcnQ/IFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgY29uZmlndXJhdGlvbiBpbXBhY3QsIHBhcnRpY3VsYXJseSB3aXRoIGFsbCB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiBhbnkgcmVsYXRlZCBjaGFuZ2VzLiBCYXNpY2FsbHksIEkgYW0gdGhpbmtpbmcgdGhyb3VnaCB0aGUgS2NvbmZpZyBhbmQgaXRzIGNvbm5lY3Rpb25zIHRvIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSwgcmVhZHkgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGFueSBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgOTA6XHRcdCAgcHJvdGVjdGVkIFZNcyBhcmUgcHVyZWx5IGEgZGV2ZWxvcG1lbnQgYW5kIHRlc3RpbmcgdmVoaWNsZSBmb3JcbiAgOTE6XHRcdCAgS1ZNX0NSRUFURV9HVUVTVF9NRU1GRC4gIEF0dGVtcHRpbmcgdG8gcnVuIGEgXCYjMzQ7cmVhbFwmIzM0OyBWTSB3b3JrbG9hZCBhcyBhXG4gIDkyOlx0XHQgIHNvZnR3YXJlLXByb3RlY3RlZCBWTSB3aWxsIGZhaWwgbWlzZXJhYmx5LlxuICA5MzpcdFxuICA5NDpcdFx0ICBJZiB1bnN1cmUsIHNheSBcJiMzNDtOXCYjMzQ7LlxuICA5NTpcdFxuICA5NjpcdGNvbmZpZyBLVk1fSU5URUxcbiAgOTc6XHRcdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbiAgOTg6XHRcdGRlcGVuZHMgb24gS1ZNIFx1MDAyNlx1MDAyNiBJQTMyX0ZFQVRfQ1RMXG4gIDk5Olx0XHRzZWxlY3QgWDg2X0ZSRUQgaWYgWDg2XzY0XG4gMTAwOlx0XHRoZWxwXG4gMTAxOlx0XHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIEtWTSBvbiBwcm9jZXNzb3JzIGVxdWlwcGVkIHdpdGggSW50ZWwmIzM5O3MgVlRcbiAxMDI6XHRcdCAgZXh0ZW5zaW9ucywgYS5rLmEuIFZpcnR1YWwgTWFjaGluZSBFeHRlbnNpb25zIChWTVgpLlxuIDEwMzpcdFxuIDEwNDpcdFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAxMDU6XHRcdCAgd2lsbCBiZSBjYWxsZWQga3ZtLWludGVsLlxuIDEwNjpcdFxuIDEwNzpcdGNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbiAxMDg6XHQgICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbiAxMDk6XHQgICAgICAgIGRlcGVuZHMgb24gS1ZNX0lOVEVMIFx1MDAyNlx1MDAyNiBFWFBFUlRcbiAxMTA6XHQgICAgICAgIGhlbHBcbiAxMTE6XHQgICAgICAgICAgQ2hlY2tzIHRoYXQgS1ZNJiMzOTtzIHBhZ2UgdGFibGUgbWFuYWdlbWVudCBjb2RlIHdpbGwgbm90IGluY29ycmVjdGx5XG4gMTEyOlx0ICAgICAgICAgIGxldCBndWVzdHMgcmVjZWl2ZSBhIHZpcnR1YWxpemF0aW9uIGV4Y2VwdGlvbi4gIFZpcnR1YWxpemF0aW9uXG4gMTEzOlx0ICAgICAgICAgIGV4Y2VwdGlvbnMgd2lsbCBiZSB0cmFwcGVkIGJ5IHRoZSBoeXBlcnZpc29yIHJhdGhlciB0aGFuIGluamVjdGVkXG4gMTE0Olx0ICAgICAgICAgIGluIHRoZSBndWVzdC5cbiAxMTU6XHRcbiAxMTY6XHQgICAgICAgICAgTm90ZTogc29tZSBDUFVzIGFwcGVhciB0byBnZW5lcmF0ZSBzcHVyaW91cyBFUFQgVmlvbGF0aW9ucyAjVkVzXG4gMTE3Olx0ICAgICAgICAgIHRoYXQgdHJpZ2dlciBLVk0mIzM5O3MgV0FSTiwgaW4gcGFydGljdWxhciB3aXRoIGVwdGFkPTAgYW5kL29yIG5lc3RlZFxuIDExODpcdCAgICAgICAgICB2aXJ0dWFsaXphdGlvbi5cbiAxMTk6XHRcbiAxMjA6XHQgICAgICAgICAgSWYgdW5zdXJlLCBzYXkgTi5cbiAxMjE6XHRcbiAxMjI6XHRjb25maWcgWDg2X1NHWF9LVk1cbiAxMjM6XHRcdGJvb2wgXCYjMzQ7U29mdHdhcmUgR3VhcmQgZVh0ZW5zaW9ucyAoU0dYKSBWaXJ0dWFsaXphdGlvblwmIzM0O1xuIDEyNDpcdFx0ZGVwZW5kcyBvbiBYODZfU0dYIFx1MDAyNlx1MDAyNiBLVk1fSU5URUxcbiAxMjU6XHRcdGhlbHBcbiAxMjY6XHRcbiAxMjc6XHRcdCAgRW5hYmxlcyBLVk0gZ3Vlc3RzIHRvIGNyZWF0ZSBTR1ggZW5jbGF2ZXMuXG4gMTI4Olx0XG4gMTI5Olx0XHQgIFRoaXMgaW5jbHVkZXMgc3VwcG9ydCB0byBleHBvc2UgXCYjMzQ7cmF3XCYjMzQ7IHVucmVjbGFpbWFibGUgZW5jbGF2ZSBtZW1vcnkgdG9cbiAxMzA6XHRcdCAgZ3Vlc3RzIHZpYSBhIGRldmljZSBub2RlLCBlLmcuIC9kZXYvc2d4X3ZlcGMuXG4gMTMxOlx0XG4gMTMyOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMTMzOlx0XG4gMTM0Olx0Y29uZmlnIEtWTV9JTlRFTF9URFhcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwOToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjg0OAoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDEzMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IEtWTSBJbnRlbCBWaXJ0dWFsaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlIHRhcmdldCBpcyByZWFjaGFibGUuIEkgc2VlIHdlJiMzOTtyZSBsb29raW5nIGF0IGBDT05GSUdfS1ZNYCBhbmQgYENPTkZJR19LVk1fSU5URUxgLiBHb29kLCBgS1ZNX0lOVEVMYCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZTsgSSBrbm93IGZyb20gZXhwZXJpZW5jZSwgc3BlY2lmaWNhbGx5IHN5emthbGxlciBmdXp6aW5nIGVudmlyb25tZW50cyBvbiB4ODZfNjQsIHRoYXQgaXQmIzM5O3MgYWNjZXNzaWJsZS4gU28gdGhhdCYjMzk7cyBhIHBvc2l0aXZlIHN0YXJ0aW5nIHBvaW50LgoKTm93LCB0aW1lIGZvciB0aGUgY29yZSBxdWVzdGlvbjogKmlzIHRoaXMgd29ydGggZnV6emluZz8qIEkmIzM5O2xsIGFwcGx5IHRoZSBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgY3JpdGVyaWEuIFRoZSBwb3NpdGl2ZSBzaWRlIGlzIHdoYXQgSSBhbSByZWFsbHkgaW50ZXJlc3RlZCBpbi4gVGhpcyBwYXRjaCB0b3VjaGVzIHRoZSBjb3JlIHN1YnN5c3RlbXMgKGh5cGVydmlzb3IgLyBLVk0pLCBhbmQgd2hhdCYjMzk7cyBtb3JlLCBpdOKAmXMgYSBjb2RlIHJlZmFjdG9yaW5nLiBUaGlzIGFsb25lIHJhaXNlcyBhIGZsYWcuIFdlJiMzOTtyZSBub3QganVzdCBsb29raW5nIGF0IGEgc2ltcGxlIGZ1bmN0aW9uYWwgY2hhbmdlIG9yIGNsZWFudXAuIFRoZSBhdXRob3LigJlzIGludGVudGlvbnMgYXJlIHNlY29uZGFyeTsgSSBhbHdheXMgZnV6eiAqcmVmYWN0b3JlZCogY29kZSwgcmVnYXJkbGVzcyBvZiB0aGVpciBjbGFpbXMuIENoYW5nZXMgaW4gbG9naWMsIGhlbHBlciBmdW5jdGlvbiBpbnRyb2R1Y3Rpb25zLCBvciBzdGF0ZSBtYW5hZ2VtZW50LCAqZXNwZWNpYWxseSogaW4gY29yZSBhcmVhcywgYXJlIHByaW1lIGJ1Zy1odW50aW5nIGdyb3VuZHMuIEFuZCwgb2YgY291cnNlLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBpbiBgYXJjaC94ODYva3ZtL3ZteC9gLCB3aGljaCBpcyBkaXJlY3RseSByZWxhdGVkIHRvIEtWTSBJbnRlbCB2aXJ0dWFsaXphdGlvbiBzdXBwb3J0LgoKVGhlcmVmb3JlLCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyAqeWVzKiwgYFdvcnRoRnV6emluZyA9IHRydWVgLgoKQWxyaWdodCwgd2l0aCB0aGF0IGVzdGFibGlzaGVkLCBsZXQmIzM5O3MgZGVmaW5lIG91ciBmb2N1cy4gSXQmIzM5O3MgdGltZSB0byBpZGVudGlmeSB0aGUgYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYC4gSSYjMzk7bGwgYW5hbHl6ZSB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFuZCBlbnRyeSBwb2ludHMuIEkgaGF2ZSBhIGxpc3Qgb2YgdGhvc2UgZnJvbSB0aGUgdmFyaW91cyBmaWxlcy4KCkluIGBhcmNoL3g4Ni9rdm0vdm14L21haW4uY2A6IEkgc2VlIGB2dF9oYW5kbGVfZXhpdF9pcnFvZmZgLCBgdnRfaGFuZGxlX25taWAsIGBoYW5kbGVfbm1fZmF1bHRfaXJxb2ZmYCwgYGhhbmRsZV9leGNlcHRpb25faXJxb2ZmYCwgYW5kIGBoYW5kbGVfZXh0ZXJuYWxfaW50ZXJydXB0X2lycW9mZmAuCgpJbiBgYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5jYDogSSYjMzk7bGwgbG9vayBhdCBgdnRfdmNwdV9waV9sb2FkYCwgYHZ0X3ZjcHVfcGlfcHV0YCwgYHZ0X3BpX3N0YXJ0X2J5cGFzc2AsIGFuZCBgdnRfcGlfdXBkYXRlX2lydGVgLgoKYGFyY2gveDg2L2t2bS92bXgvY29tbW9uLmhgIGlzIG5leHQ6IEhlcmUsIGB2dF9nZXRfZXhpdF9yZWFzb25gLCBgdnRfZ2V0X2V4aXRfcXVhbGAsIGB2dF9nZXRfaW50cl9pbmZvYCwgYF9fdnRfaGFuZGxlX2VwdF92aW9sYXRpb25gLCBhbmQgYF9fdnRfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0YCBhcmUgcG90ZW50aWFsIGFyZWFzIG9mIGludGVyZXN0LgoKYGFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNgIGlzIGV4dGVuc2l2ZTogSSYjMzk7bGwgaW5jbHVkZSBgbmVzdGVkX2VwdF9pbmplY3RfcGFnZV9mYXVsdGAsIGBwcmVwYXJlX3ZtY3MxMmAsIGBuZXN0ZWRfdm14X2dldF92bXB0cmAsIGBoYW5kbGVfdm1yZWFkYCwgYGhhbmRsZV92bXdyaXRlYCwgYGhhbmRsZV92bXB0cmxkYCwgYGhhbmRsZV92bXB0cnN0YCwgYGhhbmRsZV9pbnZlcHRgLCBgaGFuZGxlX2ludnZwaWRgLCBgaGFuZGxlX3ZtZnVuY2AsIGBuZXN0ZWRfdm14X2V4aXRfaGFuZGxlZF9pb2AsIGBuZXN0ZWRfdm14X2V4aXRfaGFuZGxlZF9tc3JgLCBgbmVzdGVkX3ZteF9leGl0X2hhbmRsZWRfY3JgLCBgbmVzdGVkX3ZteF9sMF93YW50c19leGl0YCwgYG5lc3RlZF92bXhfbDFfd2FudHNfZXhpdGAsIGFuZCBgbmVzdGVkX3ZteF9yZWZsZWN0X3ZtZXhpdGAuCgpMYXN0bHksIGluIGBhcmNoL3g4Ni9rdm0vdm14L3ZteC5jYDogSSYjMzk7bGwgaGF2ZSB0byBjb25zaWRlciBgdm14X2hhbmRsZV9leGl0YCwgYF9fdm14X2hhbmRsZV9leGl0YCwgYHZteF92Y3B1X3J1bmAsIGB2bXhfdmNwdV9sb2FkYCwgYHZteF92Y3B1X3B1dGAsIGBoYW5kbGVfZXhjZXB0aW9uX25taWAsIGBoYW5kbGVfZXB0X3Zpb2xhdGlvbmAsIGBoYW5kbGVfaW9gLCBgaGFuZGxlX2NyYCwgYGhhbmRsZV9kcmAsIGBoYW5kbGVfaW52bHBnYCwgYGhhbmRsZV9hcGljX2FjY2Vzc2AsIGBoYW5kbGVfYXBpY19lb2lfaW5kdWNlZGAsIGBoYW5kbGVfYXBpY193cml0ZWAsIGBoYW5kbGVfdGFza19zd2l0Y2hgLCBgaGFuZGxlX2ludnBjaWRgLCBgaGFuZGxlX3BtbF9mdWxsYCwgYGhhbmRsZV9ub3RpZnlgLCBgaGFuZGxlX3JkbXNyX2ltbWAsIGBoYW5kbGVfd3Jtc3JfaW1tYCwgYHZteF9nZXRfZXhpdF9pbmZvYCwgYHZteF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHRgLCBhbmQgYHNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb25gLgoKTm93LCBJJiMzOTtsbCBuZWVkIHRvIG5hcnJvdyB0aGVzZSBkb3duIHRvIHRoZSBub24tc3RhdGljIHN5bWJvbHMgb3IsIHRob3NlIGFjY2Vzc2libGUgb3V0c2lkZSB0aGVpciBkZWZpbmVkIGZpbGVzLCB0aGF0IGFyZSBpbiB2bWxpbnV4L2t2bS1pbnRlbC5rby4gQWZ0ZXIgY2hlY2tpbmcgYGFyY2gveDg2L2t2bS92bXgvbWFpbi5jYCBhbmQgYGFyY2gveDg2L2t2bS92bXgvcG9zdGVkXwoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7KHZ0X3ZjcHVfcGlffHZ0X2hhbmRsZV9ubWl8dnRfcGlfKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9jb21tb24uaD0yMTc9c3RhdGljIGlubGluZSB2b2lkIF9fdnRfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTIzNS1cbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmg6MjM2Om5vaW5zdHIgdm9pZCB2dF9oYW5kbGVfbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTIzNy1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz05MzI9c3RhdGljIHZvaWQgdnRfaGFuZGxlX2V4aXRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy05NTEtXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo5NTI6bm9pbnN0ciB2b2lkIHZ0X2hhbmRsZV9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtOTUzLXtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz05NzI9c3RydWN0IGt2bV94ODZfb3BzIHZ0X3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMDkwLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTA5MTpcdC5waV91cGRhdGVfaXJ0ZSA9IHZ0X3BpX3VwZGF0ZV9pcnRlLFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTA5MjpcdC5waV9zdGFydF9ieXBhc3MgPSB2dF9waV9zdGFydF9ieXBhc3MsXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMDkzLVxuLS1cbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYz00NT1zdGF0aWMgaW50IHBpX3RyeV9zZXRfY29udHJvbChzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYywgdTY0ICpwb2xkLCB1NjQgbmV3KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYy01OC1cbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYzo1OTp2b2lkIHZ0X3ZjcHVfcGlfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmMtNjAte1xuLS1cbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYz0xNDk9c3RhdGljIGJvb2wgdnRfY2FuX3VzZV92dGRfcGkoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYy0xNTItXHQgKiBOb3RlLCByZWFkaW5nIHRoZSBudW1iZXIgb2YgcG9zc2libGUgYnlwYXNzIElSUXMgY2FuIHJhY2Ugd2l0aCBhXG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmM6MTUzOlx0ICogYnlwYXNzIElSUSBiZWluZyBhdHRhY2hlZCB0byB0aGUgVk0uICB2dF9waV9zdGFydF9ieXBhc3MoKSBlbnN1cmVzXG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmMtMTU0LVx0ICogYmxvY2tuZyB2Q1BVcyB3aWxsIHNlZSBhbiBlbGV2YXRlZCBjb3VudCBvciBnZXQgS1ZNX1JFUV9VTkJMT0NLLlxuLS1cbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYz0yMTE9c3RhdGljIGJvb2wgdnRfbmVlZHNfcGlfd2FrZXVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmMtMjI0LVxuYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5jOjIyNTp2b2lkIHZ0X3ZjcHVfcGlfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYy0yMjYte1xuLS1cbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYz0yODU9Ym9vbCBwaV9oYXNfcGVuZGluZ19pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYy0yOTYtICogYmxvY2tpbmcgdkNQVXMgbWF5IHNjaGVkdWxlZCBvdXQgd2l0aG91dCByZWNvbmZpZ3VyaW5nIFBJRC5OViB0byB0aGUgd2FrZXVwXG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmM6Mjk3OiAqIHZlY3RvciwgaS5lLiBpZiB0aGUgYnlwYXNzIElSUSBjYW1lIGFsb25nIGFmdGVyIHZ0X3ZjcHVfcGlfcHV0KCkuXG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmMtMjk4LSAqL1xuYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5jOjI5OTp2b2lkIHZ0X3BpX3N0YXJ0X2J5cGFzcyhzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmMtMzAwLXtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmMtMzA2LVxuYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5jOjMwNzppbnQgdnRfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmMtMzA4LVx0XHQgICAgICAgdW5zaWduZWQgaW50IGhvc3RfaXJxLCB1aW50MzJfdCBndWVzdF9pcnEsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5oLTEwLVxuYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5oOjExOnZvaWQgdnRfdmNwdV9waV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmg6MTI6dm9pZCB2dF92Y3B1X3BpX3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5oLTEzLXZvaWQgcGlfd2FrZXVwX2hhbmRsZXIodm9pZCk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5oPTE2PWJvb2wgcGlfaGFzX3BlbmRpbmdfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmg6MTc6aW50IHZ0X3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5oLTE4LVx0XHQgICAgICAgdW5zaWduZWQgaW50IGhvc3RfaXJxLCB1aW50MzJfdCBndWVzdF9pcnEsXG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmgtMTktXHRcdCAgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2ZWN0b3IpO1xuYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5oOjIwOnZvaWQgdnRfcGlfc3RhcnRfYnlwYXNzKHN0cnVjdCBrdm0gKmt2bSk7XG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmgtMjEtXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz03MTU9dm9pZCB0ZHhfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTcxOC1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6NzE5Olx0dnRfdmNwdV9waV9sb2FkKHZjcHUsIGNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTcyMC1cdGlmICh2Y3B1LVx1MDAzZWNwdSA9PSBjcHUgfHwgIWlzX2hraWRfYXNzaWduZWQodG9fa3ZtX3RkeCh2Y3B1LVx1MDAzZWt2bSkpKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9ODI3PXZvaWQgdGR4X3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtODI4LXtcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6ODI5Olx0dnRfdmNwdV9waV9wdXQodmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTgzMC1cdHRkeF9wcmVwYXJlX3N3aXRjaF90b19ob3N0KHZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9OTYxPXN0YXRpYyBub2luc3RyIHZvaWQgdGR4X3ZjcHVfZW50ZXJfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy05NzYtXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjk3NzpcdHZ0X2hhbmRsZV9ubWkodmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTk3OC1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTE1NzM9dm9pZCB2bXhfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTE1NzktXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjE1ODA6XHR2dF92Y3B1X3BpX2xvYWQodmNwdSwgY3B1KTtcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtMTU4MS19XG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYz0xNTgzPXZvaWQgdm14X3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtMTU4NC17XG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjE1ODU6XHR2dF92Y3B1X3BpX3B1dCh2Y3B1KTtcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtMTU4Ni1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTczNjY9c3RhdGljIG5vaW5zdHIgdm9pZCB2bXhfdmNwdV9lbnRlcl9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTczOTctXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjczOTg6XHR2dF9oYW5kbGVfbm1pKHZjcHUpO1xuYXJjaC94ODYva3ZtL3ZteC92bXguYy03Mzk5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA5OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NjUxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEtWTSBDb25maWd1cmF0aW9uIGZvciBGb2N1cyBTeW1ib2xzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaGVyZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBLVk0gY29uZmlndXJhdGlvbiByZWxldmFudCB0byBhIHNwZWNpZmljIHNldCBvZiBmdW5jdGlvbnMsIHdoaWNoIEkmIzM5O2xsIGNhbGwgdGhlIGBGb2N1c1N5bWJvbHNgLiBGaXJzdCwgSSYjMzk7bGwgZGVmaW5lIHRob3NlIHN5bWJvbHM6IGB2dF9oYW5kbGVfZXhpdF9pcnFvZmZgLCBgdnRfaGFuZGxlX25taWAsIGB2dF92Y3B1X3BpX2xvYWRgLCBgdnRfdmNwdV9waV9wdXRgLCBgdnRfcGlfc3RhcnRfYnlwYXNzYCwgYHZ0X3BpX3VwZGF0ZV9pcnRlYCwgYHZteF9oYW5kbGVfZXhpdGAsIGB2bXhfdmNwdV9ydW5gLCBhbmQgYG5lc3RlZF92bXhfcmVmbGVjdF92bWV4aXRgLiBOb3csIEkgbmVlZCB0byByZWxhdGUgdGhlc2Ugc3ltYm9scyB0byByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLgoKTmV4dCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBgRW5hYmxlQ29uZmlnc2AuIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIGZvciB0aGUgcHJlc2VuY2Ugb2YgYEtWTWAgYW5kIGBLVk1fSU5URUxgLiBTaW5jZSB0aGlzIGVudmlyb25tZW50ICptaWdodCogaW5jbHVkZSBJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucywgb3IgVERYLCBJIGFsc28gbmVlZCB0byB2ZXJpZnkgYEtWTV9JTlRFTF9URFhgLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gcmVjb2duaXplIHRoYXQgYEtWTV9JTlRFTGAgaXMgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiwgYW5kIGBLVk1fSU5URUxfVERYYCBpcyBjb250aW5nZW50IG9uIGl0LCBpZiBpdCBpcyBlbmFibGVkLiBTbywgSSB3aWxsIGNoZWNrIGZvciB0aGVzZSBvcHRpb25zIGluIHRoZSBkZWZpbmVkIG9yZGVyLgoKTm93LCBJIG5lZWQgdG8gZXhwbGljaXRseSB2ZXJpZnkgdGhlIGRlcGVuZGVuY3kgb2YgYEtWTV9JTlRFTF9URFhgIG9uIGBLVk1fSU5URUxgLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgS1ZNX0lOVEVMX1REWGAgYWN0dWFsbHkgKnJlcXVpcmVzKiBgS1ZNX0lOVEVMYCB0byBiZSBlbmFibGVkLiBJJiMzOTtsbCBuZWVkIHRvIGxvY2F0ZSB0aGlzIGRlcGVuZGVuY3kgd2l0aGluIHRoZSBLY29uZmlnIGZpbGUsIHNwZWNpZmljYWxseSBgYXJjaC94ODYva3ZtL0tjb25maWdgLiBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyBsaW5lIDEzNCBpbiB0aGUgS2NvbmZpZyBmaWxlIHRvIHNlZSB0aGUgZGV0YWlscyBvZiB0aGUgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwOToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzM6XHRcbiAxMzQ6XHRjb25maWcgS1ZNX0lOVEVMX1REWFxuIDEzNTpcdFx0Ym9vbCBcJiMzNDtJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XCYjMzQ7XG4gMTM2Olx0XHRkZWZhdWx0IHlcbiAxMzc6XHRcdGRlcGVuZHMgb24gSU5URUxfVERYX0hPU1RcbiAxMzg6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuIDEzOTpcdFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxuIDE0MDpcdFx0aGVscFxuIDE0MTpcdFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBsYXVuY2hpbmcgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWClcbiAxNDI6XHRcdCAgY29uZmlkZW50aWFsIFZNcyBvbiBJbnRlbCBwcm9jZXNzb3JzLlxuIDE0MzpcdFxuIDE0NDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDE0NTpcdFxuIDE0NjpcdGNvbmZpZyBLVk1fQU1EXG4gMTQ3Olx0XHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbiAxNDg6XHRcdGRlcGVuZHMgb24gS1ZNIFx1MDAyNlx1MDAyNiAoQ1BVX1NVUF9BTUQgfHwgQ1BVX1NVUF9IWUdPTilcbiAxNDk6XHRcdGhlbHBcbiAxNTA6XHRcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgS1ZNIG9uIEFNRCBwcm9jZXNzb3JzIGVxdWlwcGVkIHdpdGggdGhlIEFNRC1WXG4gMTUxOlx0XHQgIChTVk0pIGV4dGVuc2lvbnMuXG4gMTUyOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA5OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NjQ4CgkJCQkJCQlvdXRwdXQ6IDE5OQoJCQkJCQkJdGhvdWdodHM6IDIzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBLVk0vVERYIENvbmZpZ3VyYXRpb24gQ2hlY2sqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBjb3JlIEtWTSBJbnRlbCBkcml2ZXIgY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5IGBLVk1fSU5URUxgLCB3aGljaCwgb2YgY291cnNlLCByZWxpZXMgb24gdGhlIGJyb2FkZXIgYEtWTWAgc3Vic3lzdGVtLiBBbmQsIEkgc2VlIHRoYXQgd2UgYXJlIGRlYWxpbmcgd2l0aCBgSU5URUxfVERYX0hPU1RgIGFuZCBgS1ZNX0lOVEVMX1REWGAsIHNvIHRoaXMgaXMgZGVmaW5pdGVseSByZWxhdGVkIHRvIFREWC4KCkxldCYjMzk7cyBxdWlja2x5IHJ1biBhIGNoZWNrIHRvIGVuc3VyZSBldmVyeXRoaW5nIGlzIGFzIGV4cGVjdGVkLiBJIHNlZSBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gdHJ1ZSwgZ29vZCEgQW5kIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBpcyBleGFjdGx5IHdoYXQgSSBhbnRpY2lwYXRlOiBgJiMzNDtLVk0mIzM0O2AgYW5kIGAmIzM0O0tWTV9JTlRFTCYjMzQ7YC4gUGVyZmVjdC4KCk5vdywgbGV0JiMzOTtzIGV4YW1pbmUgdGhlIGBGb2N1c1N5bWJvbHNgLiBUaGVzZSBzZWVtIHNwb3Qtb24uIEkmIzM5O20gc2VlaW5nIGZ1bmN0aW9ucyByZWxhdGVkIHRvIGhhbmRsaW5nIHZpcnR1YWwgdGVybWluYWwgZXhpdHMgaW4gYSBmZXcgZGlmZmVyZW50IHN0YXRlczogYHZ0X2hhbmRsZV9leGl0X2lycW9mZmAsIGB2dF9oYW5kbGVfbm1pYCwgcG9zdGVkIGludGVycnVwdCBmdW5jdGlvbnMgKGB2dF92Y3B1X3BpX2xvYWRgLCBgdnRfdmNwdV9waV9wdXRgLCBgdnRfcGlfc3RhcnRfYnlwYXNzYCwgYHZ0X3BpX3VwZGF0ZV9pcnRlYCksIGFuZCBhIGdvb2QgbG9vayBhdCBgdm14X2hhbmRsZV9leGl0YCBhbmQgYHZteF92Y3B1X3J1bmAgYXMgd2VsbCBhcyBgbmVzdGVkX3ZteF9yZWZsZWN0X3ZtZXhpdGAuIFllcCwgdGhpcyBhbGwgbGluZXMgdXAgd2l0aCB3aGF0IEkmIzM5O2QgZXhwZWN0IGdpdmVuIHRoZSBjb250ZXh0IOKAkyB3ZSYjMzk7cmUgbG9va2luZyBhdCBwb3RlbnRpYWxseSByZWZhY3RvcmluZyBjb21tb24gVk1YIGFuZCBURFggdmlydHVhbCB0ZXJtaW5hbCBoYW5kbGluZywgZXhpdCBoYW5kbGluZyB3aXRoIGlycW9mZiwgcG9zdGVkIGludGVycnVwdCBmdW5jdGlvbnMsIGFuZCBleGl0IHJlYXNvbi9xdWFsaWZpY2F0aW9uIGFjY2Vzc29ycyBpbiBLVk0gSW50ZWwuCgpMb29rcyBsaWtlIGV2ZXJ5dGhpbmcgaXMgZXhhY3RseSB3aGVyZSBpdCBuZWVkcyB0byBiZSwgc28gbGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4gRG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2dF9oYW5kbGVfZXhpdF9pcnFvZmYmIzM0OywKICAgICYjMzQ7dnRfaGFuZGxlX25taSYjMzQ7LAogICAgJiMzNDt2dF92Y3B1X3BpX2xvYWQmIzM0OywKICAgICYjMzQ7dnRfdmNwdV9waV9wdXQmIzM0OywKICAgICYjMzQ7dnRfcGlfc3RhcnRfYnlwYXNzJiMzNDssCiAgICAmIzM0O3Z0X3BpX3VwZGF0ZV9pcnRlJiMzNDssCiAgICAmIzM0O3ZteF9oYW5kbGVfZXhpdCYjMzQ7LAogICAgJiMzNDt2bXhfdmNwdV9ydW4mIzM0OywKICAgICYjMzQ7bmVzdGVkX3ZteF9yZWZsZWN0X3ZtZXhpdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgS1ZNIEludGVsIChWTVgvVERYKSB2aXJ0dWFsaXphdGlvbiBsb2dpYyBieSBjb25zb2xpZGF0aW5nIGV4aXQgc3RhdHVzIGhhbmRsaW5nLCBleGl0IElSUS1vZmYgcHJvY2Vzc2luZywgcG9zdGVkIGludGVycnVwdCBoZWxwZXJzLCBhbmQgVk1DUyBleGl0IHF1YWxpZmljYXRpb24gYWNjZXNzb3JzIHVuZGVyIGNvbW1vbiB2dF8qIGFic3RyYWN0aW9ucy4gVGhpcyBhZmZlY3RzIGNvcmUgS1ZNIFZNIGV4aXQgaGFuZGxpbmcgYW5kIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiByZWFjaGFibGUgb24gYW1kNjQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2dF9oYW5kbGVfZXhpdF9pcnFvZmYmIzM0OywKICAgICYjMzQ7dnRfaGFuZGxlX25taSYjMzQ7LAogICAgJiMzNDt2dF92Y3B1X3BpX2xvYWQmIzM0OywKICAgICYjMzQ7dnRfdmNwdV9waV9wdXQmIzM0OywKICAgICYjMzQ7dnRfcGlfc3RhcnRfYnlwYXNzJiMzNDssCiAgICAmIzM0O3Z0X3BpX3VwZGF0ZV9pcnRlJiMzNDssCiAgICAmIzM0O3ZteF9oYW5kbGVfZXhpdCYjMzQ7LAogICAgJiMzNDt2bXhfdmNwdV9ydW4mIzM0OywKICAgICYjMzQ7bmVzdGVkX3ZteF9yZWZsZWN0X3ZtZXhpdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgS1ZNIEludGVsIChWTVgvVERYKSB2aXJ0dWFsaXphdGlvbiBsb2dpYyBieSBjb25zb2xpZGF0aW5nIGV4aXQgc3RhdHVzIGhhbmRsaW5nLCBleGl0IElSUS1vZmYgcHJvY2Vzc2luZywgcG9zdGVkIGludGVycnVwdCBoZWxwZXJzLCBhbmQgVk1DUyBleGl0IHF1YWxpZmljYXRpb24gYWNjZXNzb3JzIHVuZGVyIGNvbW1vbiB2dF8qIGFic3RyYWN0aW9ucy4gVGhpcyBhZmZlY3RzIGNvcmUgS1ZNIFZNIGV4aXQgaGFuZGxpbmcgYW5kIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiByZWFjaGFibGUgb24gYW1kNjQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA5OjI0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MjQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpcyBhIHJlZmFjdG9yaW5nIG9mIEtWTSBJbnRlbCBWTVggYW5kIFREWCBjb2RlIHRvIGNvbnNvbGlkYXRlIGNvbW1vbiB2aXJ0dWFsaXphdGlvbiBpbmZyYXN0cnVjdHVyZSAoVlQpIGJldHdlZW4gc3RhbmRhcmQgVk1YIGFuZCBURFggdkNQVXM6XG4xLiBJdCBkZWZpbmVzIGEgY29tbW9uIHdyYXBwZXIgbGF5b3V0IGBzdHJ1Y3QgdmNwdV92bXhfdGR4YCB3aXRoIGNvbXBpbGUtdGltZSBhc3NlcnRpb25zIChgc3RhdGljX2Fzc2VydGApIGVuc3VyaW5nIG9mZnNldCBtYXRjaGluZyBvZiBgc3RydWN0IHZjcHVfdnRgIGFjcm9zcyBgdmNwdV92bXhgIGFuZCBgdmNwdV90ZHhgLlxuMi4gSXQgbW92ZXMgYW5kIHJlbmFtZXMgaGVscGVyIGZ1bmN0aW9ucyAoYHRvX3Z0YCwgYHZ0X2dldF9leGl0X3JlYXNvbmAsIGB2dF9nZXRfZXhpdF9xdWFsYCwgYHZ0X2dldF9pbnRyX2luZm9gLCBldGMuKSBmcm9tIGB2bXguaGAvYHZteC5jYCB0byBgY29tbW9uLmhgL2BtYWluLmNgLlxuMy4gSXQgbW92ZXMgY29tbW9uIGV4aXQgYW5kIGludGVycnVwdCBoYW5kbGluZyBmdW5jdGlvbnMgKGB2dF9oYW5kbGVfZXhpdF9pcnFvZmZgLCBgdnRfaGFuZGxlX25taWAsIGBoYW5kbGVfZXh0ZXJuYWxfaW50ZXJydXB0X2lycW9mZmAsIGV0Yy4pIHRvIGBtYWluLmNgLlxuNC4gSXQgcmVuYW1lcyBwb3N0ZWQgaW50ZXJydXB0IHJvdXRpbmVzIHRvIHVzZSB0aGUgYHZ0X2AgcHJlZml4IGFjcm9zcyB0aGUgY29kZWJhc2UuXG5cbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmcgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgYnVmZmVyIGJvdW5kcy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBzdHJ1Y3QgbGF5b3V0IG9yIG9mZnNldHMgYXJlIGd1YXJkZWQgYXQgY29tcGlsZSB0aW1lIGJ5IGBzdGF0aWNfYXNzZXJ0YCBvciB3b3VsZCBtYW5pZmVzdCBhcyBtZW1vcnkgY29ycnVwdGlvbi9PT0IgYWNjZXNzIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgYnVpbGRzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDlkMjVmMDZhOTNhYWJlNjRmYmFkMGRlZDc0ZjczMDAwZjRhNDdjYzMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDA5OjI0OjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaCBiL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmgKaW5kZXggMDgwMDU2NzY3MDJjMi4uM2U2OGZhMTJhY2E2NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oCkBAIC0yLDEwICYjNDM7MiwxMiBAQAogI2lmbmRlZiBfX0tWTV9YODZfVk1YX0NPTU1PTl9ICiAjZGVmaW5lIF9fS1ZNX1g4Nl9WTVhfQ09NTU9OX0gKIAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jb250YWluZXJfb2YuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rdm1faG9zdC5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9wb3N0ZWRfaW50ci5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O21tdS5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3ZteF9vcHMuaCYjMzQ7CiAKIHVuaW9uIHZteF9leGl0X3JlYXNvbiB7CiAJc3RydWN0IHsKQEAgLTc0LDE0ICYjNDM7NzYsNjIgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3RkX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7IHJldHVybiBmYWxzZTsgfQogCiAjZW5kaWYKIAomIzQzO3N0cnVjdCB2Y3B1X3ZteF90ZHggewomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgdmNwdTsKJiM0MzsJc3RydWN0IHZjcHVfdnQgdnQ7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHN0cnVjdCB2Y3B1X3Z0ICp0b192dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlyZXR1cm4gJmFtcDsoY29udGFpbmVyX29mKHZjcHUsIHN0cnVjdCB2Y3B1X3ZteF90ZHgsIHZjcHUpLSZndDt2dCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IGt2bV92Y3B1ICp2dF90b192Y3B1KHN0cnVjdCB2Y3B1X3Z0ICp2dCkKJiM0Mzt7CiYjNDM7CXJldHVybiAmYW1wOyhjb250YWluZXJfb2YodnQsIHN0cnVjdCB2Y3B1X3ZteF90ZHgsIHZ0KS0mZ3Q7dmNwdSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5pb24gdm14X2V4aXRfcmVhc29uIHZ0X2dldF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlyZXR1cm4gdG9fdnQodmNwdSktJmd0O2V4aXRfcmVhc29uOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcgdnRfZ2V0X2V4aXRfcXVhbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdmNwdV92dCAqdnQgPSB0b192dCh2Y3B1KTsKJiM0MzsKJiM0MzsJaWYgKCFrdm1fcmVnaXN0ZXJfdGVzdF9hbmRfbWFya19hdmFpbGFibGUodmNwdSwgVkNQVV9SRUdfRVhJVF9JTkZPXzEpICZhbXA7JmFtcDsKJiM0MzsJICAgICFXQVJOX09OX09OQ0UoaXNfdGRfdmNwdSh2Y3B1KSkpCiYjNDM7CQl2dC0mZ3Q7ZXhpdF9xdWFsaWZpY2F0aW9uID0gdm1jc19yZWFkbChFWElUX1FVQUxJRklDQVRJT04pOwomIzQzOwomIzQzOwlyZXR1cm4gdnQtJmd0O2V4aXRfcXVhbGlmaWNhdGlvbjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdnRfZ2V0X2ludHJfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdmNwdV92dCAqdnQgPSB0b192dCh2Y3B1KTsKJiM0MzsKJiM0MzsJaWYgKCFrdm1fcmVnaXN0ZXJfdGVzdF9hbmRfbWFya19hdmFpbGFibGUodmNwdSwgVkNQVV9SRUdfRVhJVF9JTkZPXzIpICZhbXA7JmFtcDsKJiM0MzsJICAgICFXQVJOX09OX09OQ0UoaXNfdGRfdmNwdSh2Y3B1KSkpCiYjNDM7CQl2dC0mZ3Q7ZXhpdF9pbnRyX2luZm8gPSB2bWNzX3JlYWQzMihWTV9FWElUX0lOVFJfSU5GTyk7CiYjNDM7CiYjNDM7CXJldHVybiB2dC0mZ3Q7ZXhpdF9pbnRyX2luZm87CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBpc194ZmRfbm1fZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJcmV0dXJuIHZjcHUtJmd0O2FyY2guZ3Vlc3RfZnB1LmZwc3RhdGUtJmd0O3hmZCAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICAha3ZtX2lzX2NyMF9iaXRfc2V0KHZjcHUsIFg4Nl9DUjBfVFMpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgYm9vbCB2dF9pc190ZHhfcHJpdmF0ZV9ncGEoc3RydWN0IGt2bSAqa3ZtLCBncGFfdCBncGEpCiB7CiAJLyogRm9yIFREWCB0aGUgZGlyZWN0IG1hc2sgaXMgdGhlIHNoYXJlZCBtYXNrLiAqLwogCXJldHVybiAha3ZtX2lzX2FkZHJfZGlyZWN0KGt2bSwgZ3BhKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgX192bXhfaGFuZGxlX2VwdF92aW9sYXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsCi0JCQkJCSAgICAgdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24pCiYjNDM7c3RhdGljIGlubGluZSBpbnQgX192dF9oYW5kbGVfZXB0X3Zpb2xhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwKJiM0MzsJCQkJCSAgICB1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbikKIHsKIAl1NjQgZXJyb3JfY29kZTsKIApAQCAtMTY0LDggJiM0MzsyMTQsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3ZjcHVfdHJpZ2dlcl9wb3N0ZWRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKICAqIFBvc3QgYW4gaW50ZXJydXB0IHRvIGEgdkNQVSYjMzk7cyBQSVIgYW5kIHRyaWdnZXIgdGhlIHZDUFUgdG8gcHJvY2VzcyB0aGUKICAqIGludGVycnVwdCBpZiBuZWNlc3NhcnkuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3ZteF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJCQkJICBzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYywgaW50IHZlY3RvcikKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgX192dF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAomIzQzOwkJCQkJCSBzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYywgaW50IHZlY3RvcikKIHsKIAlpZiAocGlfdGVzdF9hbmRfc2V0X3Bpcih2ZWN0b3IsIHBpX2Rlc2MpKQogCQlyZXR1cm47CkBAIC0xODMsNiAmIzQzOzIzMyw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3ZteF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCWt2bV92Y3B1X3RyaWdnZXJfcG9zdGVkX2ludGVycnVwdCh2Y3B1LCBQT1NURURfSU5UUl9WRUNUT1IpOwogfQogCi1ub2luc3RyIHZvaWQgdm14X2hhbmRsZV9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKJiM0Mztub2luc3RyIHZvaWQgdnRfaGFuZGxlX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiAjZW5kaWYgLyogX19LVk1fWDg2X1ZNWF9DT01NT05fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9tYWluLmMgYi9hcmNoL3g4Ni9rdm0vdm14L21haW4uYwppbmRleCA0YzUyYWI4ZDA3ODY5Li42ZTBiMzk1OWQ3M2FiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L21haW4uYwpAQCAtMSw0ICYjNDM7MSw1IEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9lbnRyeS1jb21tb24uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGVwYXJhbS5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O3g4Nl9vcHMuaCYjMzQ7CkBAIC0xMCw4ICYjNDM7MTEsMTIgQEAKICNpbmNsdWRlICYjMzQ7dGR4LmgmIzM0OwogI2luY2x1ZGUgJiMzNDt0ZHhfYXJjaC5oJiMzNDsKIAomIzQzOyNwcmFnbWEgR0NDIHBvaXNvbiB0b192bXgKJiM0MzsKJiM0MztzdGF0aWNfYXNzZXJ0KG9mZnNldG9mKHN0cnVjdCB2Y3B1X3ZteF90ZHgsIHZ0KSA9PSBvZmZzZXRvZihzdHJ1Y3QgdmNwdV92bXgsIHZ0KSk7CiYjNDM7CiAjaWZkZWYgQ09ORklHX0tWTV9JTlRFTF9URFgKLXN0YXRpY19hc3NlcnQob2Zmc2V0b2Yoc3RydWN0IHZjcHVfdm14LCB2dCkgPT0gb2Zmc2V0b2Yoc3RydWN0IHZjcHVfdGR4LCB2dCkpOwomIzQzO3N0YXRpY19hc3NlcnQob2Zmc2V0b2Yoc3RydWN0IHZjcHVfdm14X3RkeCwgdnQpID09IG9mZnNldG9mKHN0cnVjdCB2Y3B1X3RkeCwgdnQpKTsKIAogc3RhdGljIHZvaWQgdnRfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUodm9pZCkKIHsKQEAgLTg3Niw2ICYjNDM7ODgxLDg1IEBAIHN0YXRpYyBpbnQgdnRfZ21lbV9tYXhfbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sCiAjZGVmaW5lIHZ0X29wX3RkeF9vbmx5KG5hbWUpIE5VTEwKICNlbmRpZiAvKiBDT05GSUdfS1ZNX0lOVEVMX1REWCAqLwogCiYjNDM7c3RhdGljIHZvaWQgaGFuZGxlX25tX2ZhdWx0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBTYXZlIHhmZF9lcnIgdG8gZ3Vlc3RfZnB1IGJlZm9yZSBpbnRlcnJ1cHQgaXMgZW5hYmxlZCwgc28gdGhlCiYjNDM7CSAqIE1TUiB2YWx1ZSBpcyBub3QgY2xvYmJlcmVkIGJ5IHRoZSBob3N0IGFjdGl2aXR5IGJlZm9yZSB0aGUgZ3Vlc3QKJiM0MzsJICogaGFzIGNoYW5jZSB0byBjb25zdW1lIGl0LgomIzQzOwkgKgomIzQzOwkgKiBVcGRhdGUgdGhlIGd1ZXN0JiMzOTtzIFhGRF9FUlIgaWYgYW5kIG9ubHkgaWYgWEZEIGlzIGVuYWJsZWQsIGFzIHRoZSAjTk0KJiM0MzsJICogaW50ZXJjZXB0aW9uIG1heSBoYXZlIGJlZW4gY2F1c2VkIGJ5IEwxIGludGVyY2VwdGlvbi4gIFBlciB0aGUgU0RNLAomIzQzOwkgKiBYRkRfRVJSIGlzIG5vdCBtb2RpZmllZCBmb3Igbm9uLVhGRCAjTk0sIGkuZS4gaWYgQ1IwLlRTPTEuCiYjNDM7CSAqCiYjNDM7CSAqIE5vdGUsIFhGRF9FUlIgaXMgdXBkYXRlZCBfYmVmb3JlXyB0aGUgI05NIGludGVyY2VwdGlvbiBjaGVjaywgaS5lLgomIzQzOwkgKiB1bmxpa2UgQ1IyIGFuZCBEUjYsIHRoZSB2YWx1ZSBpcyBub3QgYSBwYXlsb2FkIHRoYXQgaXMgYXR0YWNoZWQgdG8KJiM0MzsJICogdGhlICNOTSBleGNlcHRpb24uCiYjNDM7CSAqLwomIzQzOwlpZiAoaXNfeGZkX25tX2ZhdWx0KHZjcHUpKQomIzQzOwkJcmRtc3JxKE1TUl9JQTMyX1hGRF9FUlIsIHZjcHUtJmd0O2FyY2guZ3Vlc3RfZnB1LnhmZF9lcnIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBoYW5kbGVfZXhjZXB0aW9uX2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBpbnRyX2luZm8pCiYjNDM7ewomIzQzOwkvKiBpZiBleGl0IGR1ZSB0byBQRiBjaGVjayBmb3IgYXN5bmMgUEYgKi8KJiM0MzsJaWYgKGlzX3BhZ2VfZmF1bHQoaW50cl9pbmZvKSkKJiM0MzsJCXZjcHUtJmd0O2FyY2guYXBmLmhvc3RfYXBmX2ZsYWdzID0ga3ZtX3JlYWRfYW5kX3Jlc2V0X2FwZl9mbGFncygpOwomIzQzOwkvKiBpZiBleGl0IGR1ZSB0byBOTSwgaGFuZGxlIGJlZm9yZSBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkICovCiYjNDM7CWVsc2UgaWYgKGlzX25tX2ZhdWx0KGludHJfaW5mbykpCiYjNDM7CQloYW5kbGVfbm1fZmF1bHRfaXJxb2ZmKHZjcHUpOwomIzQzOwkvKiBIYW5kbGUgbWFjaGluZSBjaGVja3MgYmVmb3JlIGludGVycnVwdHMgYXJlIGVuYWJsZWQgKi8KJiM0MzsJZWxzZSBpZiAoaXNfbWFjaGluZV9jaGVjayhpbnRyX2luZm8pKQomIzQzOwkJa3ZtX21hY2hpbmVfY2hlY2soKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaGFuZGxlX2V4dGVybmFsX2ludGVycnVwdF9pcnFvZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAomIzQzOwkJCQkJICAgICB1MzIgaW50cl9pbmZvKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IHZlY3RvciA9IGludHJfaW5mbyAmYW1wOyBJTlRSX0lORk9fVkVDVE9SX01BU0s7CiYjNDM7CiYjNDM7CWlmIChLVk1fQlVHKCFpc19leHRlcm5hbF9pbnRyKGludHJfaW5mbyksIHZjcHUtJmd0O2t2bSwKJiM0MzsJICAgICYjMzQ7dW5leHBlY3RlZCBWTS1FeGl0IGludGVycnVwdCBpbmZvOiAweCV4JiMzNDssIGludHJfaW5mbykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWt2bV9iZWZvcmVfaW50ZXJydXB0KHZjcHUsIEtWTV9IQU5ETElOR19JUlEpOwomIzQzOwl4ODZfZW50cnlfZnJvbV9rdm0oRVZFTlRfVFlQRV9FWFRJTlQsIHZlY3Rvcik7CiYjNDM7CWt2bV9hZnRlcl9pbnRlcnJ1cHQodmNwdSk7CiYjNDM7CiYjNDM7CXZjcHUtJmd0O2FyY2guYXRfaW5zdHJ1Y3Rpb25fYm91bmRhcnkgPSB0cnVlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB2dF9oYW5kbGVfZXhpdF9pcnFvZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJaWYgKHRvX3Z0KHZjcHUpLSZndDtlbXVsYXRpb25fcmVxdWlyZWQpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXN3aXRjaCAodnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljKSB7CiYjNDM7CWNhc2UgRVhJVF9SRUFTT05fRVhURVJOQUxfSU5URVJSVVBUOgomIzQzOwkJaGFuZGxlX2V4dGVybmFsX2ludGVycnVwdF9pcnFvZmYodmNwdSwgdnRfZ2V0X2ludHJfaW5mbyh2Y3B1KSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBFWElUX1JFQVNPTl9FWENFUFRJT05fTk1JOgomIzQzOwkJaGFuZGxlX2V4Y2VwdGlvbl9pcnFvZmYodmNwdSwgdnRfZ2V0X2ludHJfaW5mbyh2Y3B1KSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBFWElUX1JFQVNPTl9NQ0VfRFVSSU5HX1ZNRU5UUlk6CiYjNDM7CQlrdm1fbWFjaGluZV9jaGVjaygpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0Mztub2luc3RyIHZvaWQgdnRfaGFuZGxlX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlpZiAoKHUxNil2dF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMgIT0gRVhJVF9SRUFTT05fRVhDRVBUSU9OX05NSSB8fAomIzQzOwkgICAgIWlzX25taSh2dF9nZXRfaW50cl9pbmZvKHZjcHUpKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJa3ZtX2JlZm9yZV9pbnRlcnJ1cHQodmNwdSwgS1ZNX0hBTkRMSU5HX05NSSk7CiYjNDM7CXg4Nl9lbnRyeV9mcm9tX2t2bShFVkVOVF9UWVBFX05NSSwgTk1JX1ZFQ1RPUik7CiYjNDM7CWt2bV9hZnRlcl9pbnRlcnJ1cHQodmNwdSk7CiYjNDM7fQomIzQzOwogI2RlZmluZSBWTVhfUkVRVUlSRURfQVBJQ1ZfSU5ISUJJVFMJCQkJXAogCShCSVQoQVBJQ1ZfSU5ISUJJVF9SRUFTT05fRElTQUJMRUQpIHwJCQlcCiAJIEJJVChBUElDVl9JTkhJQklUX1JFQVNPTl9BQlNFTlQpIHwJCQlcCkBAIC0xMDAwLDEyICYjNDM7MTA4NCwxMiBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgdnRfeDg2X29wcyBfX2luaXRkYXRhID0gewogCS5sb2FkX21tdV9wZ2QgPSB2dF9vcChsb2FkX21tdV9wZ2QpLAogCiAJLmNoZWNrX2ludGVyY2VwdCA9IHZteF9jaGVja19pbnRlcmNlcHQsCi0JLmhhbmRsZV9leGl0X2lycW9mZiA9IHZteF9oYW5kbGVfZXhpdF9pcnFvZmYsCiYjNDM7CS5oYW5kbGVfZXhpdF9pcnFvZmYgPSB2dF9oYW5kbGVfZXhpdF9pcnFvZmYsCiAKIAkudXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nID0gdnRfb3AodXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKSwKIAotCS5waV91cGRhdGVfaXJ0ZSA9IHZteF9waV91cGRhdGVfaXJ0ZSwKLQkucGlfc3RhcnRfYnlwYXNzID0gdm14X3BpX3N0YXJ0X2J5cGFzcywKJiM0MzsJLnBpX3VwZGF0ZV9pcnRlID0gdnRfcGlfdXBkYXRlX2lydGUsCiYjNDM7CS5waV9zdGFydF9ieXBhc3MgPSB2dF9waV9zdGFydF9ieXBhc3MsCiAKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAJLnNldF9odl90aW1lciA9IHZ0X29wKHNldF9odl90aW1lciksCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYwppbmRleCAxNTE4NzM0MDdhYmQzLi40NzU5OWU3MzEyY2ZkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMKQEAgLTQ0Niw3ICYjNDM7NDQ2LDcgQEAgc3RhdGljIHZvaWQgbmVzdGVkX2VwdF9pbmplY3RfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCSAqICYjMzQ7Tk1JIHVuYmxvY2tpbmcgZHVlIHRvIElSRVQmIzM0OywgaS5lLiB0aGUgYml0IGNhbiBiZSBwcm9wYWdhdGVkCiAJCSAqIGFzLWlzIGZyb20gdGhlIG9yaWdpbmFsIEVYSVRfUVVBTElGSUNBVElPTi4KIAkJICovCi0JCWV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpICZhbXA7IElOVFJfSU5GT19VTkJMT0NLX05NSTsKJiM0MzsJCWV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSkgJmFtcDsgSU5UUl9JTkZPX1VOQkxPQ0tfTk1JOwogCX0gZWxzZSB7CiAJCWlmIChmYXVsdC0mZ3Q7ZXJyb3JfY29kZSAmYW1wOyBQRkVSUl9SU1ZEX01BU0spIHsKIAkJCXZtX2V4aXRfcmVhc29uID0gRVhJVF9SRUFTT05fRVBUX01JU0NPTkZJRzsKQEAgLTQ3Miw3ICYjNDM7NDcyLDcgQEAgc3RhdGljIHZvaWQgbmVzdGVkX2VwdF9pbmplY3RfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkgKiBhbmQgd2Fsa3MgdGhlIGZhdWx0aW5nIEdQQS4KIAkJCSAqLwogCQkJaWYgKGZyb21faGFyZHdhcmUpCi0JCQkJZXhpdF9xdWFsaWZpY2F0aW9uIHw9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpICZhbXA7IG1hc2s7CiYjNDM7CQkJCWV4aXRfcXVhbGlmaWNhdGlvbiB8PSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpICZhbXA7IG1hc2s7CiAJCQllbHNlCiAJCQkJZXhpdF9xdWFsaWZpY2F0aW9uIHw9IGZhdWx0LSZndDtleGl0X3F1YWxpZmljYXRpb24gJmFtcDsgbWFzazsKIApAQCAtNDc0Nyw3ICYjNDM7NDc0Nyw3IEBAIHN0YXRpYyB2b2lkIHByZXBhcmVfdm1jczEyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZtY3MxMiAqdm1jczEyLAogewogCS8qIHVwZGF0ZSBleGl0IGluZm9ybWF0aW9uIGZpZWxkczogKi8KIAl2bWNzMTItJmd0O3ZtX2V4aXRfcmVhc29uID0gdm1fZXhpdF9yZWFzb247Ci0JaWYgKHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZW5jbGF2ZV9tb2RlKQomIzQzOwlpZiAodnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmVuY2xhdmVfbW9kZSkKIAkJdm1jczEyLSZndDt2bV9leGl0X3JlYXNvbiB8PSBWTVhfRVhJVF9SRUFTT05TX1NHWF9FTkNMQVZFX01PREU7CiAJdm1jczEyLSZndDtleGl0X3F1YWxpZmljYXRpb24gPSBleGl0X3F1YWxpZmljYXRpb247CiAKQEAgLTUzNzMsNyAmIzQzOzUzNzMsNyBAQCBzdGF0aWMgaW50IG5lc3RlZF92bXhfZ2V0X3ZtcHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgKnZtcG9pbnRlciwKIAlzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBlOwogCWludCByOwogCi0JaWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgdm14X2dldF9leGl0X3F1YWwodmNwdSksCiYjNDM7CWlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZ0X2dldF9leGl0X3F1YWwodmNwdSksCiAJCQkJdm1jc19yZWFkMzIoVk1YX0lOU1RSVUNUSU9OX0lORk8pLCBmYWxzZSwKIAkJCQlzaXplb2YoKnZtcG9pbnRlciksICZhbXA7Z3ZhKSkgewogCQkqcmV0ID0gMTsKQEAgLTU2NjUsNyAmIzQzOzU2NjUsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXJlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXN0cnVjdCB2bWNzMTIgKnZtY3MxMiA9IGlzX2d1ZXN0X21vZGUodmNwdSkgPyBnZXRfc2hhZG93X3ZtY3MxMih2Y3B1KQogCQkJCQkJICAgIDogZ2V0X3ZtY3MxMih2Y3B1KTsKLQl1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpOwomIzQzOwl1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7CiAJdTMyIGluc3RyX2luZm8gPSB2bWNzX3JlYWQzMihWTVhfSU5TVFJVQ1RJT05fSU5GTyk7CiAJc3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7CiAJc3RydWN0IHg4Nl9leGNlcHRpb24gZTsKQEAgLTU3NzEsNyAmIzQzOzU3NzEsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXdyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3Qgdm1jczEyICp2bWNzMTIgPSBpc19ndWVzdF9tb2RlKHZjcHUpID8gZ2V0X3NoYWRvd192bWNzMTIodmNwdSkKIAkJCQkJCSAgICA6IGdldF92bWNzMTIodmNwdSk7Ci0JdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKJiM0MzsJdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpOwogCXUzMiBpbnN0cl9pbmZvID0gdm1jc19yZWFkMzIoVk1YX0lOU1RSVUNUSU9OX0lORk8pOwogCXN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpOwogCXN0cnVjdCB4ODZfZXhjZXB0aW9uIGU7CkBAIC01OTYwLDcgJiM0Mzs1OTYwLDcgQEAgc3RhdGljIGludCBoYW5kbGVfdm1wdHJsZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAvKiBFbXVsYXRlIHRoZSBWTVBUUlNUIGluc3RydWN0aW9uICovCiBzdGF0aWMgaW50IGhhbmRsZV92bXB0cnN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQl1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpOwomIzQzOwl1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7CiAJdTMyIGluc3RyX2luZm8gPSB2bWNzX3JlYWQzMihWTVhfSU5TVFJVQ1RJT05fSU5GTyk7CiAJZ3BhX3QgY3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS0mZ3Q7bmVzdGVkLmN1cnJlbnRfdm1wdHI7CiAJc3RydWN0IHg4Nl9leGNlcHRpb24gZTsKQEAgLTYwMjEsNyAmIzQzOzYwMjEsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9pbnZlcHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCS8qIEFjY29yZGluZyB0byB0aGUgSW50ZWwgVk1YIGluc3RydWN0aW9uIHJlZmVyZW5jZSwgdGhlIG1lbW9yeQogCSAqIG9wZXJhbmQgaXMgcmVhZCBldmVuIGlmIGl0IGlzbiYjMzk7dCBuZWVkZWQgKGUuZy4sIGZvciB0eXBlPT1nbG9iYWwpCiAJICovCi0JaWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgdm14X2dldF9leGl0X3F1YWwodmNwdSksCiYjNDM7CWlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZ0X2dldF9leGl0X3F1YWwodmNwdSksCiAJCQl2bXhfaW5zdHJ1Y3Rpb25faW5mbywgZmFsc2UsIHNpemVvZihvcGVyYW5kKSwgJmFtcDtndmEpKQogCQlyZXR1cm4gMTsKIAlyID0ga3ZtX3JlYWRfZ3Vlc3RfdmlydCh2Y3B1LCBndmEsICZhbXA7b3BlcmFuZCwgc2l6ZW9mKG9wZXJhbmQpLCAmYW1wO2UpOwpAQCAtNjEwNCw3ICYjNDM7NjEwNCw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2ludnZwaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCS8qIGFjY29yZGluZyB0byB0aGUgaW50ZWwgdm14IGluc3RydWN0aW9uIHJlZmVyZW5jZSwgdGhlIG1lbW9yeQogCSAqIG9wZXJhbmQgaXMgcmVhZCBldmVuIGlmIGl0IGlzbiYjMzk7dCBuZWVkZWQgKGUuZy4sIGZvciB0eXBlPT1nbG9iYWwpCiAJICovCi0JaWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgdm14X2dldF9leGl0X3F1YWwodmNwdSksCiYjNDM7CWlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZ0X2dldF9leGl0X3F1YWwodmNwdSksCiAJCQl2bXhfaW5zdHJ1Y3Rpb25faW5mbywgZmFsc2UsIHNpemVvZihvcGVyYW5kKSwgJmFtcDtndmEpKQogCQlyZXR1cm4gMTsKIAlyID0ga3ZtX3JlYWRfZ3Vlc3RfdmlydCh2Y3B1LCBndmEsICZhbXA7b3BlcmFuZCwgc2l6ZW9mKG9wZXJhbmQpLCAmYW1wO2UpOwpAQCAtNjIzNiw4ICYjNDM7NjIzNiw4IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3ZtZnVuYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJICogRVhJVF9SRUFTT05fVk1GVU5DIGFzIHRoZSBleGl0IHJlYXNvbi4KIAkgKi8KIAluZXN0ZWRfdm14X3ZtZXhpdCh2Y3B1LCB2bXgtJmd0O3Z0LmV4aXRfcmVhc29uLmZ1bGwsCi0JCQkgIHZteF9nZXRfaW50cl9pbmZvKHZjcHUpLAotCQkJICB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSk7CiYjNDM7CQkJICB2dF9nZXRfaW50cl9pbmZvKHZjcHUpLAomIzQzOwkJCSAgdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KSk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTYyODgsNyAmIzQzOzYyODgsNyBAQCBzdGF0aWMgYm9vbCBuZXN0ZWRfdm14X2V4aXRfaGFuZGxlZF9pbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJaWYgKCFuZXN0ZWRfY3B1X2hhcyh2bWNzMTIsIENQVV9CQVNFRF9VU0VfSU9fQklUTUFQUykpCiAJCXJldHVybiBuZXN0ZWRfY3B1X2hhcyh2bWNzMTIsIENQVV9CQVNFRF9VTkNPTkRfSU9fRVhJVElORyk7CiAKLQlleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKJiM0MzsJZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKIAogCXBvcnQgPSBleGl0X3F1YWxpZmljYXRpb24gJmd0OyZndDsgMTY7CiAJc2l6ZSA9IChleGl0X3F1YWxpZmljYXRpb24gJmFtcDsgNykgJiM0MzsgMTsKQEAgLTYzMTQsNyAmIzQzOzYzMTQsNyBAQCBzdGF0aWMgYm9vbCBuZXN0ZWRfdm14X2V4aXRfaGFuZGxlZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCiAJaWYgKGV4aXRfcmVhc29uLmJhc2ljID09IEVYSVRfUkVBU09OX01TUl9SRUFEX0lNTSB8fAogCSAgICBleGl0X3JlYXNvbi5iYXNpYyA9PSBFWElUX1JFQVNPTl9NU1JfV1JJVEVfSU1NKQotCQltc3JfaW5kZXggPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKJiM0MzsJCW1zcl9pbmRleCA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7CiAJZWxzZQogCQltc3JfaW5kZXggPSBrdm1fZWN4X3JlYWQodmNwdSk7CiAKQEAgLTYzNTAsNyAmIzQzOzYzNTAsNyBAQCBzdGF0aWMgYm9vbCBuZXN0ZWRfdm14X2V4aXRfaGFuZGxlZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogc3RhdGljIGJvb2wgbmVzdGVkX3ZteF9leGl0X2hhbmRsZWRfY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCXN0cnVjdCB2bWNzMTIgKnZtY3MxMikKIHsKLQl1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpOwomIzQzOwl1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7CiAJaW50IGNyID0gZXhpdF9xdWFsaWZpY2F0aW9uICZhbXA7IDE1OwogCWludCByZWc7CiAJdW5zaWduZWQgbG9uZyB2YWw7CkBAIC02NDg0LDcgJiM0Mzs2NDg0LDcgQEAgc3RhdGljIGJvb2wgbmVzdGVkX3ZteF9sMF93YW50c19leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAogCXN3aXRjaCAoKHUxNilleGl0X3JlYXNvbi5iYXNpYykgewogCWNhc2UgRVhJVF9SRUFTT05fRVhDRVBUSU9OX05NSToKLQkJaW50cl9pbmZvID0gdm14X2dldF9pbnRyX2luZm8odmNwdSk7CiYjNDM7CQlpbnRyX2luZm8gPSB2dF9nZXRfaW50cl9pbmZvKHZjcHUpOwogCQlpZiAoaXNfbm1pKGludHJfaW5mbykpCiAJCQlyZXR1cm4gdHJ1ZTsKIAkJZWxzZSBpZiAoaXNfcGFnZV9mYXVsdChpbnRyX2luZm8pKQpAQCAtNjU2Nyw3ICYjNDM7NjU2Nyw3IEBAIHN0YXRpYyBib29sIG5lc3RlZF92bXhfbDFfd2FudHNfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAKIAlzd2l0Y2ggKCh1MTYpZXhpdF9yZWFzb24uYmFzaWMpIHsKIAljYXNlIEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUk6Ci0JCWludHJfaW5mbyA9IHZteF9nZXRfaW50cl9pbmZvKHZjcHUpOwomIzQzOwkJaW50cl9pbmZvID0gdnRfZ2V0X2ludHJfaW5mbyh2Y3B1KTsKIAkJaWYgKGlzX25taShpbnRyX2luZm8pKQogCQkJcmV0dXJuIHRydWU7CiAJCWVsc2UgaWYgKGlzX3BhZ2VfZmF1bHQoaW50cl9pbmZvKSkKQEAgLTY3MzcsMTQgJiM0Mzs2NzM3LDE0IEBAIGJvb2wgbmVzdGVkX3ZteF9yZWZsZWN0X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJICogbmVlZCB0byBiZSBzeW50aGVzaXplZCBieSBxdWVyeWluZyB0aGUgaW4ta2VybmVsIExBUElDLCBidXQgZXh0ZXJuYWwKIAkgKiBpbnRlcnJ1cHRzIGFyZSBuZXZlciByZWZsZWN0ZWQgdG8gTDEgc28gaXQmIzM5O3MgYSBub24taXNzdWUuCiAJICovCi0JZXhpdF9pbnRyX2luZm8gPSB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KTsKJiM0MzsJZXhpdF9pbnRyX2luZm8gPSB2dF9nZXRfaW50cl9pbmZvKHZjcHUpOwogCWlmIChpc19leGNlcHRpb25fd2l0aF9lcnJvcl9jb2RlKGV4aXRfaW50cl9pbmZvKSkgewogCQlzdHJ1Y3Qgdm1jczEyICp2bWNzMTIgPSBnZXRfdm1jczEyKHZjcHUpOwogCiAJCXZtY3MxMi0mZ3Q7dm1fZXhpdF9pbnRyX2Vycm9yX2NvZGUgPQogCQkJdm1jc19yZWFkMzIoVk1fRVhJVF9JTlRSX0VSUk9SX0NPREUpOwogCX0KLQlleGl0X3F1YWwgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKJiM0MzsJZXhpdF9xdWFsID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKIAogcmVmbGVjdF92bWV4aXQ6CiAJbmVzdGVkX3ZteF92bWV4aXQodmNwdSwgZXhpdF9yZWFzb24uZnVsbCwgZXhpdF9pbnRyX2luZm8sIGV4aXRfcXVhbCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmMgYi9hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmMKaW5kZXggNGE2ZDlhMTdkYTIzOC4uMjY0NGFkZDU0Yjc2YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYwpAQCAtMTQsNiAmIzQzOzE0LDggQEAKICNpbmNsdWRlICYjMzQ7dm14LmgmIzM0OwogI2luY2x1ZGUgJiMzNDt0ZHguaCYjMzQ7CiAKJiM0MzsjcHJhZ21hIEdDQyBwb2lzb24gdG9fdm14CiYjNDM7CiAvKgogICogTWFpbnRhaW4gYSBwZXItQ1BVIGxpc3Qgb2YgdkNQVXMgdGhhdCBuZWVkIHRvIGJlIGF3YWtlbmVkIGJ5IHdha2V1cF9oYW5kbGVyKCkKICAqIHdoZW4gYSBXQUtFVVBfVkVDVE9SIGludGVycnVwdGVkIGlzIHBvc3RlZC4gIHZDUFVzIGFyZSBhZGRlZCB0byB0aGUgbGlzdCB3aGVuCkBAIC01NCw3ICYjNDM7NTYsNyBAQCBzdGF0aWMgaW50IHBpX3RyeV9zZXRfY29udHJvbChzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYywgdTY0ICpwb2xkLCB1NjQgbmV3KQogCXJldHVybiAwOwogfQogCi12b2lkIHZteF92Y3B1X3BpX2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KQomIzQzO3ZvaWQgdnRfdmNwdV9waV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSkKIHsKIAlzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYyA9IHZjcHVfdG9fcGlfZGVzYyh2Y3B1KTsKIAlzdHJ1Y3QgdmNwdV92dCAqdnQgPSB0b192dCh2Y3B1KTsKQEAgLTE0NCwxMSAmIzQzOzE0NiwxMSBAQCB2b2lkIHZteF92Y3B1X3BpX2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KQogCQlwaV9zZXRfb24ocGlfZGVzYyk7CiB9CiAKLXN0YXRpYyBib29sIHZteF9jYW5fdXNlX3Z0ZF9waShzdHJ1Y3Qga3ZtICprdm0pCiYjNDM7c3RhdGljIGJvb2wgdnRfY2FuX3VzZV92dGRfcGkoc3RydWN0IGt2bSAqa3ZtKQogewogCS8qCiAJICogTm90ZSwgcmVhZGluZyB0aGUgbnVtYmVyIG9mIHBvc3NpYmxlIGJ5cGFzcyBJUlFzIGNhbiByYWNlIHdpdGggYQotCSAqIGJ5cGFzcyBJUlEgYmVpbmcgYXR0YWNoZWQgdG8gdGhlIFZNLiAgdm14X3BpX3N0YXJ0X2J5cGFzcygpIGVuc3VyZXMKJiM0MzsJICogYnlwYXNzIElSUSBiZWluZyBhdHRhY2hlZCB0byB0aGUgVk0uICB2dF9waV9zdGFydF9ieXBhc3MoKSBlbnN1cmVzCiAJICogYmxvY2tuZyB2Q1BVcyB3aWxsIHNlZSBhbiBlbGV2YXRlZCBjb3VudCBvciBnZXQgS1ZNX1JFUV9VTkJMT0NLLgogCSAqLwogCXJldHVybiBpcnFjaGlwX2luX2tlcm5lbChrdm0pICZhbXA7JmFtcDsga3ZtX2FyY2hfaGFzX2lycV9ieXBhc3MoKSAmYW1wOyZhbXA7CkBAIC0yMDYsNyAmIzQzOzIwOCw3IEBAIHN0YXRpYyB2b2lkIHBpX2VuYWJsZV93YWtldXBfaGFuZGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJCV9fYXBpY19zZW5kX0lQSV9zZWxmKFBPU1RFRF9JTlRSX1dBS0VVUF9WRUNUT1IpOwogfQogCi1zdGF0aWMgYm9vbCB2bXhfbmVlZHNfcGlfd2FrZXVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0MztzdGF0aWMgYm9vbCB2dF9uZWVkc19waV93YWtldXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCS8qCiAJICogVGhlIGRlZmF1bHQgcG9zdGVkIGludGVycnVwdCB2ZWN0b3IgZG9lcyBub3RoaW5nIHdoZW4KQEAgLTIxNywxNCAmIzQzOzIxOSwxNCBAQCBzdGF0aWMgYm9vbCB2bXhfbmVlZHNfcGlfd2FrZXVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkgKiBiYWNrIHRvIHRoZSBwaV93YWtldXBfaGFuZGxlcigpIGZ1bmN0aW9uLgogCSAqLwogCXJldHVybiAodm14X2Nhbl91c2VfaXBpdih2Y3B1KSAmYW1wOyZhbXA7ICFpc190ZF92Y3B1KHZjcHUpKSB8fAotCQl2bXhfY2FuX3VzZV92dGRfcGkodmNwdS0mZ3Q7a3ZtKTsKJiM0MzsJCXZ0X2Nhbl91c2VfdnRkX3BpKHZjcHUtJmd0O2t2bSk7CiB9CiAKLXZvaWQgdm14X3ZjcHVfcGlfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mzt2b2lkIHZ0X3ZjcHVfcGlfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYyA9IHZjcHVfdG9fcGlfZGVzYyh2Y3B1KTsKIAotCWlmICghdm14X25lZWRzX3BpX3dha2V1cCh2Y3B1KSkKJiM0MzsJaWYgKCF2dF9uZWVkc19waV93YWtldXAodmNwdSkpCiAJCXJldHVybjsKIAogCS8qCkBAIC0yOTIsMTcgJiM0MzsyOTQsMTcgQEAgYm9vbCBwaV9oYXNfcGVuZGluZ19pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogLyoKICAqIEtpY2sgYWxsIHZDUFVzIHdoZW4gdGhlIGZpcnN0IHBvc3NpYmxlIGJ5cGFzcyBJUlEgaXMgYXR0YWNoZWQgdG8gYSBWTSwgYXMKICAqIGJsb2NraW5nIHZDUFVzIG1heSBzY2hlZHVsZWQgb3V0IHdpdGhvdXQgcmVjb25maWd1cmluZyBQSUQuTlYgdG8gdGhlIHdha2V1cAotICogdmVjdG9yLCBpLmUuIGlmIHRoZSBieXBhc3MgSVJRIGNhbWUgYWxvbmcgYWZ0ZXIgdm14X3ZjcHVfcGlfcHV0KCkuCiYjNDM7ICogdmVjdG9yLCBpLmUuIGlmIHRoZSBieXBhc3MgSVJRIGNhbWUgYWxvbmcgYWZ0ZXIgdnRfdmNwdV9waV9wdXQoKS4KICAqLwotdm9pZCB2bXhfcGlfc3RhcnRfYnlwYXNzKHN0cnVjdCBrdm0gKmt2bSkKJiM0Mzt2b2lkIHZ0X3BpX3N0YXJ0X2J5cGFzcyhzdHJ1Y3Qga3ZtICprdm0pCiB7Ci0JaWYgKFdBUk5fT05fT05DRSghdm14X2Nhbl91c2VfdnRkX3BpKGt2bSkpKQomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCF2dF9jYW5fdXNlX3Z0ZF9waShrdm0pKSkKIAkJcmV0dXJuOwogCiAJa3ZtX21ha2VfYWxsX2NwdXNfcmVxdWVzdChrdm0sIEtWTV9SRVFfVU5CTE9DSyk7CiB9CiAKLWludCB2bXhfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sCiYjNDM7aW50IHZ0X3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLAogCQkgICAgICAgdW5zaWduZWQgaW50IGhvc3RfaXJxLCB1aW50MzJfdCBndWVzdF9pcnEsCiAJCSAgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2ZWN0b3IpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmggYi9hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmgKaW5kZXggYTRhZjM5OTQ4Y2YwNC4uYzU4NjBlYTgyOGFlOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuaApAQCAtOCwxNiAmIzQzOzgsMTYgQEAKIAogI2luY2x1ZGUgJmx0O2FzbS9wb3N0ZWRfaW50ci5oJmd0OwogCi12b2lkIHZteF92Y3B1X3BpX2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTsKLXZvaWQgdm14X3ZjcHVfcGlfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiYjNDM7dm9pZCB2dF92Y3B1X3BpX2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTsKJiM0Mzt2b2lkIHZ0X3ZjcHVfcGlfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiB2b2lkIHBpX3dha2V1cF9oYW5kbGVyKHZvaWQpOwogdm9pZCBfX2luaXQgcGlfaW5pdF9jcHUoaW50IGNwdSk7CiB2b2lkIHBpX2FwaWN2X3ByZV9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBib29sIHBpX2hhc19wZW5kaW5nX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwotaW50IHZteF9waV91cGRhdGVfaXJ0ZShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQsIHN0cnVjdCBrdm0gKmt2bSwKJiM0MztpbnQgdnRfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sCiAJCSAgICAgICB1bnNpZ25lZCBpbnQgaG9zdF9pcnEsIHVpbnQzMl90IGd1ZXN0X2lycSwKIAkJICAgICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZlY3Rvcik7Ci12b2lkIHZteF9waV9zdGFydF9ieXBhc3Moc3RydWN0IGt2bSAqa3ZtKTsKJiM0Mzt2b2lkIHZ0X3BpX3N0YXJ0X2J5cGFzcyhzdHJ1Y3Qga3ZtICprdm0pOwogCiBzdGF0aWMgaW5saW5lIGludCBwaV9maW5kX2hpZ2hlc3RfdmVjdG9yKHN0cnVjdCBwaV9kZXNjICpwaV9kZXNjKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmMKaW5kZXggYjI3MmMyMDU4NmE3NC4uZWZiYjFhYzZmNTFlYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jCkBAIC03MTYsNyAmIzQzOzcxNiw3IEBAIHZvaWQgdGR4X3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpCiB7CiAJc3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7CiAKLQl2bXhfdmNwdV9waV9sb2FkKHZjcHUsIGNwdSk7CiYjNDM7CXZ0X3ZjcHVfcGlfbG9hZCh2Y3B1LCBjcHUpOwogCWlmICh2Y3B1LSZndDtjcHUgPT0gY3B1IHx8ICFpc19oa2lkX2Fzc2lnbmVkKHRvX2t2bV90ZHgodmNwdS0mZ3Q7a3ZtKSkpCiAJCXJldHVybjsKIApAQCAtNzQxLDcgJiM0Mzs3NDEsNyBAQCBib29sIHRkeF9pbnRlcnJ1cHRfYWxsb3dlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJICogaW50ZXJydXB0IGlzIGFsd2F5cyBhbGxvd2VkIHVubGVzcyBURFggZ3Vlc3QgY2FsbHMgVERWTUNBTEwgd2l0aCBITFQsCiAJICogd2hpY2ggcGFzc2VzIHRoZSBpbnRlcnJ1cHQgYmxvY2tlZCBmbGFnLgogCSAqLwotCXJldHVybiB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljICE9IEVYSVRfUkVBU09OX0hMVCB8fAomIzQzOwlyZXR1cm4gdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljICE9IEVYSVRfUkVBU09OX0hMVCB8fAogCSAgICAgICAhdG9fdGR4KHZjcHUpLSZndDt2cF9lbnRlcl9hcmdzLnIxMjsKIH0KIApAQCAtNzU5LDcgJiM0Mzs3NTksNyBAQCBzdGF0aWMgYm9vbCB0ZHhfcHJvdGVjdGVkX2FwaWNfaGFzX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJICogb3RoZXJ3aXNlIHRoZSBpbnRlcnJ1cHQgd291bGQgaGF2ZSBiZWVuIHNlcnZpY2VkIGF0IHRoZSBpbnN0cnVjdGlvbgogCSAqIGJvdW5kYXJ5LgogCSAqLwotCWlmICh2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljICE9IEVYSVRfUkVBU09OX0hMVCB8fAomIzQzOwlpZiAodnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljICE9IEVYSVRfUkVBU09OX0hMVCB8fAogCSAgICB0b190ZHgodmNwdSktJmd0O3ZwX2VudGVyX2FyZ3MucjEyKQogCQlyZXR1cm4gZmFsc2U7CiAKQEAgLTgyNiw3ICYjNDM7ODI2LDcgQEAgc3RhdGljIHZvaWQgdGR4X3ByZXBhcmVfc3dpdGNoX3RvX2hvc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiB2b2lkIHRkeF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0Jdm14X3ZjcHVfcGlfcHV0KHZjcHUpOwomIzQzOwl2dF92Y3B1X3BpX3B1dCh2Y3B1KTsKIAl0ZHhfcHJlcGFyZV9zd2l0Y2hfdG9faG9zdCh2Y3B1KTsKIH0KIApAQCAtOTc0LDE1ICYjNDM7OTc0LDE1IEBAIHN0YXRpYyBub2luc3RyIHZvaWQgdGR4X3ZjcHVfZW50ZXJfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJdGR4LSZndDtleGl0X2dwYSA9IHRkeC0mZ3Q7dnBfZW50ZXJfYXJncy5yODsKIAl2dC0mZ3Q7ZXhpdF9pbnRyX2luZm8gPSB0ZHgtJmd0O3ZwX2VudGVyX2FyZ3Mucjk7CiAKLQl2bXhfaGFuZGxlX25taSh2Y3B1KTsKJiM0MzsJdnRfaGFuZGxlX25taSh2Y3B1KTsKIAogCWd1ZXN0X3N0YXRlX2V4aXRfaXJxb2ZmKCk7CiB9CiAKIHN0YXRpYyBib29sIHRkeF9mYWlsZWRfdm1lbnRyeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JcmV0dXJuIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkgJmFtcDsmYW1wOwotCSAgICAgICB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZ1bGwgIT0gLTF1OwomIzQzOwlyZXR1cm4gdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5ICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mdWxsICE9IC0xdTsKIH0KIAogc3RhdGljIGZhc3RwYXRoX3QgdGR4X2V4aXRfaGFuZGxlcnNfZmFzdHBhdGgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtMTEzMSw3ICYjNDM7MTEzMSw3IEBAIHZvaWQgdGR4X2luamVjdF9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiBzdGF0aWMgaW50IHRkeF9oYW5kbGVfZXhjZXB0aW9uX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JdTMyIGludHJfaW5mbyA9IHZteF9nZXRfaW50cl9pbmZvKHZjcHUpOwomIzQzOwl1MzIgaW50cl9pbmZvID0gdnRfZ2V0X2ludHJfaW5mbyh2Y3B1KTsKIAogCS8qCiAJICogTWFjaGluZSBjaGVja3MgYXJlIGhhbmRsZWQgYnkgaGFuZGxlX2V4Y2VwdGlvbl9pcnFvZmYoKSwgb3IgYnkKQEAgLTE4OTUsNyAmIzQzOzE4OTUsNyBAQCB2b2lkIHRkeF9kZWxpdmVyX2ludGVycnVwdChzdHJ1Y3Qga3ZtX2xhcGljICphcGljLCBpbnQgZGVsaXZlcnlfbW9kZSwKIAlzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTsKIAogCS8qIFREWCBzdXBwb3J0cyBvbmx5IHBvc3RlZCBpbnRlcnJ1cHQuICBObyBsYXBpYyBlbXVsYXRpb24uICovCi0JX192bXhfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0KHZjcHUsICZhbXA7dGR4LSZndDt2dC5waV9kZXNjLCB2ZWN0b3IpOwomIzQzOwlfX3Z0X2RlbGl2ZXJfcG9zdGVkX2ludGVycnVwdCh2Y3B1LCAmYW1wO3RkeC0mZ3Q7dnQucGlfZGVzYywgdmVjdG9yKTsKIAogCXRyYWNlX2t2bV9hcGljdl9hY2NlcHRfaXJxKHZjcHUtJmd0O3ZjcHVfaWQsIGRlbGl2ZXJ5X21vZGUsIHRyaWdfbW9kZSwgdmVjdG9yKTsKIH0KQEAgLTE5MDMsNyAmIzQzOzE5MDMsNyBAQCB2b2lkIHRkeF9kZWxpdmVyX2ludGVycnVwdChzdHJ1Y3Qga3ZtX2xhcGljICphcGljLCBpbnQgZGVsaXZlcnlfbW9kZSwKIHN0YXRpYyBpbmxpbmUgYm9vbCB0ZHhfaXNfc2VwdF92aW9sYXRpb25fdW5leHBlY3RlZF9wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAl1NjQgZWVxX3R5cGUgPSB0b190ZHgodmNwdSktJmd0O2V4dF9leGl0X3F1YWxpZmljYXRpb24gJmFtcDsgVERYX0VYVF9FWElUX1FVQUxfVFlQRV9NQVNLOwotCXU2NCBlcSA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpOwomIzQzOwl1NjQgZXEgPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpOwogCiAJaWYgKGVlcV90eXBlICE9IFREWF9FWFRfRVhJVF9RVUFMX1RZUEVfUEVORElOR19FUFRfVklPTEFUSU9OKQogCQlyZXR1cm4gZmFsc2U7CkBAIC0xOTM5LDcgJiM0MzsxOTM5LDcgQEAgc3RhdGljIGludCB0ZHhfaGFuZGxlX2VwdF92aW9sYXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCQkvKiBPbmx5IHByaXZhdGUgR1BBIHRyaWdnZXJzIHplcm8tc3RlcCBtaXRpZ2F0aW9uICovCiAJCWxvY2FsX3JldHJ5ID0gdHJ1ZTsKIAl9IGVsc2UgewotCQlleGl0X3F1YWwgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKJiM0MzsJCWV4aXRfcXVhbCA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7CiAJCS8qCiAJCSAqIEVQVCB2aW9sYXRpb24gZHVlIHRvIGluc3RydWN0aW9uIGZldGNoIHNob3VsZCBuZXZlciBiZQogCQkgKiB0cmlnZ2VyZWQgZnJvbSBzaGFyZWQgbWVtb3J5IGluIFREWCBndWVzdC4gIElmIHN1Y2ggRVBUCkBAIC0xOTg3LDcgJiM0MzsxOTg3LDcgQEAgc3RhdGljIGludCB0ZHhfaGFuZGxlX2VwdF92aW9sYXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXdoaWxlICgxKSB7CiAJCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7CiAKLQkJcmV0ID0gX192bXhfaGFuZGxlX2VwdF92aW9sYXRpb24odmNwdSwgZ3BhLCBleGl0X3F1YWwpOwomIzQzOwkJcmV0ID0gX192dF9oYW5kbGVfZXB0X3Zpb2xhdGlvbih2Y3B1LCBncGEsIGV4aXRfcXVhbCk7CiAKIAkJaWYgKHJldCAhPSBSRVRfUEZfUkVUUlkgfHwgIWxvY2FsX3JldHJ5KQogCQkJYnJlYWs7CkBAIC0yMDIxLDcgJiM0MzsyMDIxLDcgQEAgaW50IHRkeF9jb21wbGV0ZV9lbXVsYXRlZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZXJyKQogCQlyZXR1cm4gMTsKIAl9CiAKLQlpZiAodm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYyA9PSBFWElUX1JFQVNPTl9NU1JfUkVBRCkKJiM0MzsJaWYgKHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYyA9PSBFWElUX1JFQVNPTl9NU1JfUkVBRCkKIAkJdGR2bWNhbGxfc2V0X3JldHVybl92YWwodmNwdSwga3ZtX3JlYWRfZWR4X2VheCh2Y3B1KSk7CiAKIAlyZXR1cm4gMTsKQEAgLTIwMzIsNyAmIzQzOzIwMzIsNyBAQCBpbnQgdGR4X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBmYXN0cGF0aCkKIHsKIAlzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTsKIAl1NjQgdnBfZW50ZXJfcmV0ID0gdGR4LSZndDt2cF9lbnRlcl9yZXQ7Ci0JdW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uID0gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KTsKJiM0MzsJdW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uID0gdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpOwogCiAJaWYgKGZhc3RwYXRoICE9IEVYSVRfRkFTVFBBVEhfTk9ORSkKIAkJcmV0dXJuIDE7CkBAIC0yMTQyLDkgJiM0MzsyMTQyLDkgQEAgdm9pZCB0ZHhfZ2V0X2V4aXRfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiAqcmVhc29uLAogCiAJKnJlYXNvbiA9IHRkeC0mZ3Q7dnQuZXhpdF9yZWFzb24uZnVsbDsKIAlpZiAoKnJlYXNvbiAhPSAtMXUpIHsKLQkJKmluZm8xID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7CiYjNDM7CQkqaW5mbzEgPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpOwogCQkqaW5mbzIgPSB0ZHgtJmd0O2V4dF9leGl0X3F1YWxpZmljYXRpb247Ci0JCSppbnRyX2luZm8gPSB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KTsKJiM0MzsJCSppbnRyX2luZm8gPSB2dF9nZXRfaW50cl9pbmZvKHZjcHUpOwogCX0gZWxzZSB7CiAJCSppbmZvMSA9IDA7CiAJCSppbmZvMiA9IDA7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jIGIvYXJjaC94ODYva3ZtL3ZteC92bXguYwppbmRleCA1MDQ2MzBmMGViNDBmLi43ZTM1YzJkMDNjNjllIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmMKQEAgLTE1NzcsMTIgJiM0MzsxNTc3LDEyIEBAIHZvaWQgdm14X3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpCiAKIAl2bXhfdmNwdV9sb2FkX3ZtY3ModmNwdSwgY3B1KTsKIAotCXZteF92Y3B1X3BpX2xvYWQodmNwdSwgY3B1KTsKJiM0MzsJdnRfdmNwdV9waV9sb2FkKHZjcHUsIGNwdSk7CiB9CiAKIHZvaWQgdm14X3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQl2bXhfdmNwdV9waV9wdXQodmNwdSk7CiYjNDM7CXZ0X3ZjcHVfcGlfcHV0KHZjcHUpOwogCiAJdm14X3ByZXBhcmVfc3dpdGNoX3RvX2hvc3QodG9fdm14KHZjcHUpKTsKIH0KQEAgLTE3OTEsNyAmIzQzOzE3OTEsNyBAQCBpbnQgdm14X2NoZWNrX2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZW11bF90eXBlLAogCSAqIHNvIHRoYXQgZ3Vlc3QgdXNlcnNwYWNlIGNhbiYjMzk7dCBEb1MgdGhlIGd1ZXN0IHNpbXBseSBieSB0cmlnZ2VyaW5nCiAJICogZW11bGF0aW9uIChlbmNsYXZlcyBhcmUgQ1BMMyBvbmx5KS4KIAkgKi8KLQlpZiAodm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5lbmNsYXZlX21vZGUpIHsKJiM0MzsJaWYgKHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5lbmNsYXZlX21vZGUpIHsKIAkJa3ZtX3F1ZXVlX2V4Y2VwdGlvbih2Y3B1LCBVRF9WRUNUT1IpOwogCQlyZXR1cm4gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQ7CiAJfQpAQCAtMTgwNiw3ICYjNDM7MTgwNiw3IEBAIGludCB2bXhfY2hlY2tfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlbXVsX3R5cGUsCiAKIHN0YXRpYyBpbnQgc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JdW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uID0gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KTsKJiM0MzsJdW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uID0gdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpOwogCXVuc2lnbmVkIGxvbmcgcmlwLCBvcmlnX3JpcDsKIAl1MzIgaW5zdHJfbGVuOwogCkBAIC00NDI0LDcgJiM0Mzs0NDI0LDcgQEAgc3RhdGljIGludCB2bXhfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHZlY3RvcikKIAlpZiAoIXZjcHUtJmd0O2FyY2guYXBpYy0mZ3Q7YXBpY3ZfYWN0aXZlKQogCQlyZXR1cm4gLTE7CiAKLQlfX3ZteF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHQodmNwdSwgJmFtcDt2dC0mZ3Q7cGlfZGVzYywgdmVjdG9yKTsKJiM0MzsJX192dF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHQodmNwdSwgJmFtcDt2dC0mZ3Q7cGlfZGVzYywgdmVjdG9yKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTM3OSwxNSAmIzQzOzUzNzksOSBAQCBib29sIHZteF9ndWVzdF9pbmplY3RfYWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCSAgICAgICAoa3ZtX2dldF9yZmxhZ3ModmNwdSkgJmFtcDsgWDg2X0VGTEFHU19BQyk7CiB9CiAKLXN0YXRpYyBib29sIGlzX3hmZF9ubV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCi17Ci0JcmV0dXJuIHZjcHUtJmd0O2FyY2guZ3Vlc3RfZnB1LmZwc3RhdGUtJmd0O3hmZCAmYW1wOyZhbXA7Ci0JICAgICAgICFrdm1faXNfY3IwX2JpdF9zZXQodmNwdSwgWDg2X0NSMF9UUyk7Ci19Ci0KIHN0YXRpYyBpbnQgdm14X2hhbmRsZV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGVycm9yX2NvZGUpCiB7Ci0JdW5zaWduZWQgbG9uZyBjcjIgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKJiM0MzsJdW5zaWduZWQgbG9uZyBjcjIgPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpOwogCiAJaWYgKHZjcHUtJmd0O2FyY2guYXBmLmhvc3RfYXBmX2ZsYWdzKQogCQlnb3RvIGhhbmRsZV9wZjsKQEAgLTU0MzUsNyAmIzQzOzU0MjksNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9leGNlcHRpb25fbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAl1MzIgdmVjdF9pbmZvOwogCiAJdmVjdF9pbmZvID0gdm14LSZndDtpZHRfdmVjdG9yaW5nX2luZm87Ci0JaW50cl9pbmZvID0gdm14X2dldF9pbnRyX2luZm8odmNwdSk7CiYjNDM7CWludHJfaW5mbyA9IHZ0X2dldF9pbnRyX2luZm8odmNwdSk7CiAKIAkvKgogCSAqIE1hY2hpbmUgY2hlY2tzIGFyZSBoYW5kbGVkIGJ5IGhhbmRsZV9leGNlcHRpb25faXJxb2ZmKCksIG9yIGJ5CkBAIC01NTE2LDcgJiM0Mzs1NTEwLDcgQEAgc3RhdGljIGludCBoYW5kbGVfZXhjZXB0aW9uX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIAlzd2l0Y2ggKGV4X25vKSB7CiAJY2FzZSBEQl9WRUNUT1I6Ci0JCWRyNiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpOwomIzQzOwkJZHI2ID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKIAkJaWYgKCEodmNwdS0mZ3Q7Z3Vlc3RfZGVidWcgJmFtcDsKIAkJICAgICAgKEtWTV9HVUVTVERCR19TSU5HTEVTVEVQIHwgS1ZNX0dVRVNUREJHX1VTRV9IV19CUCkpKSB7CiAJCQkvKgpAQCAtNTU5Miw3ICYjNDM7NTU4Niw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2lvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpbnQgc2l6ZSwgaW4sIHN0cmluZzsKIAl1bnNpZ25lZCBwb3J0OwogCi0JZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7CiYjNDM7CWV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7CiAJc3RyaW5nID0gKGV4aXRfcXVhbGlmaWNhdGlvbiAmYW1wOyAxNikgIT0gMDsKIAogCSYjNDM7JiM0Mzt2Y3B1LSZndDtzdGF0LmlvX2V4aXRzOwpAQCAtNTY4MSw3ICYjNDM7NTY3NSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpbnQgZXJyOwogCWludCByZXQ7CiAKLQlleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKJiM0MzsJZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKIAljciA9IGV4aXRfcXVhbGlmaWNhdGlvbiAmYW1wOyAxNTsKIAlyZWcgPSAoZXhpdF9xdWFsaWZpY2F0aW9uICZndDsmZ3Q7IDgpICZhbXA7IDE1OwogCXN3aXRjaCAoKGV4aXRfcXVhbGlmaWNhdGlvbiAmZ3Q7Jmd0OyA0KSAmYW1wOyAzKSB7CkBAIC01NzU5LDcgJiM0Mzs1NzUzLDcgQEAgc3RhdGljIGludCBoYW5kbGVfZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCWludCBkciwgZHI3LCByZWc7CiAJaW50IGVyciA9IDE7CiAKLQlleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKJiM0MzsJZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKIAlkciA9IGV4aXRfcXVhbGlmaWNhdGlvbiAmYW1wOyBERUJVR19SRUdfQUNDRVNTX05VTTsKIAogCS8qIEZpcnN0LCBpZiBEUiBkb2VzIG5vdCBleGlzdCwgdHJpZ2dlciBVRCAqLwpAQCAtNTg1NSw3ICYjNDM7NTg0OSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2ludGVycnVwdF93aW5kb3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiBzdGF0aWMgaW50IGhhbmRsZV9pbnZscGcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCXVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKIAogCWt2bV9tbXVfaW52bHBnKHZjcHUsIGV4aXRfcXVhbGlmaWNhdGlvbik7CiAJcmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpOwpAQCAtNTg2NCw3ICYjNDM7NTg1OCw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2ludmxwZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiBzdGF0aWMgaW50IGhhbmRsZV9hcGljX2FjY2VzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJaWYgKGxpa2VseShmYXN0ZW9pKSkgewotCQl1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpOwomIzQzOwkJdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpOwogCQlpbnQgYWNjZXNzX3R5cGUsIG9mZnNldDsKIAogCQlhY2Nlc3NfdHlwZSA9IGV4aXRfcXVhbGlmaWNhdGlvbiAmYW1wOyBBUElDX0FDQ0VTU19UWVBFOwpAQCAtNTg4NSw3ICYjNDM7NTg3OSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2FwaWNfYWNjZXNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogc3RhdGljIGludCBoYW5kbGVfYXBpY19lb2lfaW5kdWNlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKJiM0MzsJdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpOwogCWludCB2ZWN0b3IgPSBleGl0X3F1YWxpZmljYXRpb24gJmFtcDsgMHhmZjsKIAogCS8qIEVPSS1pbmR1Y2VkIFZNIGV4aXQgaXMgdHJhcC1saWtlIGFuZCB0aHVzIG5vIG5lZWQgdG8gYWRqdXN0IElQICovCkBAIC01ODk1LDcgJiM0Mzs1ODg5LDcgQEAgc3RhdGljIGludCBoYW5kbGVfYXBpY19lb2lfaW5kdWNlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIHN0YXRpYyBpbnQgaGFuZGxlX2FwaWNfd3JpdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCXVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKIAogCS8qCiAJICogQVBJQy13cml0ZSBWTS1FeGl0IGlzIHRyYXAtbGlrZSwgS1ZNIGRvZXNuJiMzOTt0IG5lZWQgdG8gYWR2YW5jZSBSSVAgYW5kCkBAIC01OTIzLDcgJiM0Mzs1OTE3LDcgQEAgc3RhdGljIGludCBoYW5kbGVfdGFza19zd2l0Y2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCWlkdF9pbmRleCA9ICh2bXgtJmd0O2lkdF92ZWN0b3JpbmdfaW5mbyAmYW1wOyBWRUNUT1JJTkdfSU5GT19WRUNUT1JfTUFTSyk7CiAJdHlwZSA9ICh2bXgtJmd0O2lkdF92ZWN0b3JpbmdfaW5mbyAmYW1wOyBWRUNUT1JJTkdfSU5GT19UWVBFX01BU0spOwogCi0JZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7CiYjNDM7CWV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7CiAKIAlyZWFzb24gPSAodTMyKWV4aXRfcXVhbGlmaWNhdGlvbiAmZ3Q7Jmd0OyAzMDsKIAlpZiAocmVhc29uID09IFRBU0tfU1dJVENIX0dBVEUgJmFtcDsmYW1wOyBpZHRfdikgewpAQCAtNTk2OSw3ICYjNDM7NTk2Myw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3Rhc2tfc3dpdGNoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogc3RhdGljIGludCBoYW5kbGVfZXB0X3Zpb2xhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKJiM0MzsJdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpOwogCWdwYV90IGdwYTsKIAogCS8qCkBAIC01OTk3LDcgJiM0Mzs1OTkxLDcgQEAgc3RhdGljIGludCBoYW5kbGVfZXB0X3Zpb2xhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJaWYgKHVubGlrZWx5KGFsbG93X3NtYWxsZXJfbWF4cGh5YWRkciAmYW1wOyZhbXA7ICFrdm1fdmNwdV9pc19sZWdhbF9ncGEodmNwdSwgZ3BhKSkpCiAJCXJldHVybiBrdm1fZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCAwKTsKIAotCXJldHVybiBfX3ZteF9oYW5kbGVfZXB0X3Zpb2xhdGlvbih2Y3B1LCBncGEsIGV4aXRfcXVhbGlmaWNhdGlvbik7CiYjNDM7CXJldHVybiBfX3Z0X2hhbmRsZV9lcHRfdmlvbGF0aW9uKHZjcHUsIGdwYSwgZXhpdF9xdWFsaWZpY2F0aW9uKTsKIH0KIAogc3RhdGljIGludCBoYW5kbGVfZXB0X21pc2NvbmZpZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC02MTYwLDcgJiM0Mzs2MTU0LDcgQEAgc3RhdGljIGludCBoYW5kbGVfaW52cGNpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJLyogQWNjb3JkaW5nIHRvIHRoZSBJbnRlbCBpbnN0cnVjdGlvbiByZWZlcmVuY2UsIHRoZSBtZW1vcnkgb3BlcmFuZAogCSAqIGlzIHJlYWQgZXZlbiBpZiBpdCBpc24mIzM5O3QgbmVlZGVkIChlLmcuLCBmb3IgdHlwZT09YWxsKQogCSAqLwotCWlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpLAomIzQzOwlpZiAoZ2V0X3ZteF9tZW1fYWRkcmVzcyh2Y3B1LCB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpLAogCQkJCXZteF9pbnN0cnVjdGlvbl9pbmZvLCBmYWxzZSwKIAkJCQlzaXplb2Yob3BlcmFuZCksICZhbXA7Z3ZhKSkKIAkJcmV0dXJuIDE7CkBAIC02MTc0LDcgJiM0Mzs2MTY4LDcgQEAgc3RhdGljIGludCBoYW5kbGVfcG1sX2Z1bGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiAJdHJhY2Vfa3ZtX3BtbF9mdWxsKHZjcHUtJmd0O3ZjcHVfaWQpOwogCi0JZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7CiYjNDM7CWV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7CiAKIAkvKgogCSAqIFBNTCBidWZmZXIgRlVMTCBoYXBwZW5lZCB3aGlsZSBleGVjdXRpbmcgaXJldCBmcm9tIE5NSSwKQEAgLTYyNzgsNyAmIzQzOzYyNzIsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9idXNfbG9ja192bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiBzdGF0aWMgaW50IGhhbmRsZV9ub3RpZnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCXVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKIAlib29sIGNvbnRleHRfaW52YWxpZCA9IGV4aXRfcXVhbCAmYW1wOyBOT1RJRllfVk1fQ09OVEVYVF9JTlZBTElEOwogCiAJJiM0MzsmIzQzO3ZjcHUtJmd0O3N0YXQubm90aWZ5X3dpbmRvd19leGl0czsKQEAgLTYzMDksMTMgJiM0Mzs2MzAzLDEzIEBAIHN0YXRpYyBpbnQgdm14X2dldF9tc3JfaW1tX3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIHN0YXRpYyBpbnQgaGFuZGxlX3JkbXNyX2ltbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JcmV0dXJuIGt2bV9lbXVsYXRlX3JkbXNyX2ltbSh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSwKJiM0MzsJcmV0dXJuIGt2bV9lbXVsYXRlX3JkbXNyX2ltbSh2Y3B1LCB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpLAogCQkJCSAgICAgdm14X2dldF9tc3JfaW1tX3JlZyh2Y3B1KSk7CiB9CiAKIHN0YXRpYyBpbnQgaGFuZGxlX3dybXNyX2ltbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JcmV0dXJuIGt2bV9lbXVsYXRlX3dybXNyX2ltbSh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSwKJiM0MzsJcmV0dXJuIGt2bV9lbXVsYXRlX3dybXNyX2ltbSh2Y3B1LCB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpLAogCQkJCSAgICAgdm14X2dldF9tc3JfaW1tX3JlZyh2Y3B1KSk7CiB9CiAKQEAgLTYzOTIsMTAgJiM0Mzs2Mzg2LDEwIEBAIHZvaWQgdm14X2dldF9leGl0X2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgKnJlYXNvbiwKIAlzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTsKIAogCSpyZWFzb24gPSB2bXgtJmd0O3Z0LmV4aXRfcmVhc29uLmZ1bGw7Ci0JKmluZm8xID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7CiYjNDM7CSppbmZvMSA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7CiAJaWYgKCEodm14LSZndDt2dC5leGl0X3JlYXNvbi5mYWlsZWRfdm1lbnRyeSkpIHsKIAkJKmluZm8yID0gdm14LSZndDtpZHRfdmVjdG9yaW5nX2luZm87Ci0JCSppbnRyX2luZm8gPSB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KTsKJiM0MzsJCSppbnRyX2luZm8gPSB2dF9nZXRfaW50cl9pbmZvKHZjcHUpOwogCQlpZiAoaXNfZXhjZXB0aW9uX3dpdGhfZXJyb3JfY29kZSgqaW50cl9pbmZvKSkKIAkJCSplcnJvcl9jb2RlID0gdm1jc19yZWFkMzIoVk1fRVhJVF9JTlRSX0VSUk9SX0NPREUpOwogCQllbHNlCkBAIC02NzA2LDcgJiM0Mzs2NzAwLDcgQEAgdm9pZCBkdW1wX3ZtY3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogc3RhdGljIGludCBfX3ZteF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aCkKIHsKIAlzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTsKLQl1bmlvbiB2bXhfZXhpdF9yZWFzb24gZXhpdF9yZWFzb24gPSB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpOwomIzQzOwl1bmlvbiB2bXhfZXhpdF9yZWFzb24gZXhpdF9yZWFzb24gPSB2dF9nZXRfZXhpdF9yZWFzb24odmNwdSk7CiAJdTMyIHZlY3RvcmluZ19pbmZvID0gdm14LSZndDtpZHRfdmVjdG9yaW5nX2luZm87CiAJdTE2IGV4aXRfaGFuZGxlcl9pbmRleDsKIApAQCAtNjg3MCw3ICYjNDM7Njg2NCw3IEBAIGludCB2bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpCiAJICogRXhpdCB0byB1c2VyIHNwYWNlIHdoZW4gYnVzIGxvY2sgZGV0ZWN0ZWQgdG8gaW5mb3JtIHRoYXQgdGhlcmUgaXMKIAkgKiBhIGJ1cyBsb2NrIGluIGd1ZXN0LgogCSAqLwotCWlmICh2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJ1c19sb2NrX2RldGVjdGVkKSB7CiYjNDM7CWlmICh2dF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYnVzX2xvY2tfZGV0ZWN0ZWQpIHsKIAkJaWYgKHJldCAmZ3Q7IDApCiAJCQl2Y3B1LSZndDtydW4tJmd0O2V4aXRfcmVhc29uID0gS1ZNX0VYSVRfWDg2X0JVU19MT0NLOwogCkBAIC03MTQzLDc0ICYjNDM7NzEzNyw2IEBAIHZvaWQgdm14X2xvYWRfZW9pX2V4aXRtYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKmVvaV9leGl0X2JpdG1hcCkKIAl2bWNzX3dyaXRlNjQoRU9JX0VYSVRfQklUTUFQMywgZW9pX2V4aXRfYml0bWFwWzNdKTsKIH0KIAotc3RhdGljIHZvaWQgaGFuZGxlX25tX2ZhdWx0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCi17Ci0JLyoKLQkgKiBTYXZlIHhmZF9lcnIgdG8gZ3Vlc3RfZnB1IGJlZm9yZSBpbnRlcnJ1cHQgaXMgZW5hYmxlZCwgc28gdGhlCi0JICogTVNSIHZhbHVlIGlzIG5vdCBjbG9iYmVyZWQgYnkgdGhlIGhvc3QgYWN0aXZpdHkgYmVmb3JlIHRoZSBndWVzdAotCSAqIGhhcyBjaGFuY2UgdG8gY29uc3VtZSBpdC4KLQkgKgotCSAqIFVwZGF0ZSB0aGUgZ3Vlc3QmIzM5O3MgWEZEX0VSUiBpZiBhbmQgb25seSBpZiBYRkQgaXMgZW5hYmxlZCwgYXMgdGhlICNOTQotCSAqIGludGVyY2VwdGlvbiBtYXkgaGF2ZSBiZWVuIGNhdXNlZCBieSBMMSBpbnRlcmNlcHRpb24uICBQZXIgdGhlIFNETSwKLQkgKiBYRkRfRVJSIGlzIG5vdCBtb2RpZmllZCBmb3Igbm9uLVhGRCAjTk0sIGkuZS4gaWYgQ1IwLlRTPTEuCi0JICoKLQkgKiBOb3RlLCBYRkRfRVJSIGlzIHVwZGF0ZWQgX2JlZm9yZV8gdGhlICNOTSBpbnRlcmNlcHRpb24gY2hlY2ssIGkuZS4KLQkgKiB1bmxpa2UgQ1IyIGFuZCBEUjYsIHRoZSB2YWx1ZSBpcyBub3QgYSBwYXlsb2FkIHRoYXQgaXMgYXR0YWNoZWQgdG8KLQkgKiB0aGUgI05NIGV4Y2VwdGlvbi4KLQkgKi8KLQlpZiAoaXNfeGZkX25tX2ZhdWx0KHZjcHUpKQotCQlyZG1zcnEoTVNSX0lBMzJfWEZEX0VSUiwgdmNwdS0mZ3Q7YXJjaC5ndWVzdF9mcHUueGZkX2Vycik7Ci19Ci0KLXN0YXRpYyB2b2lkIGhhbmRsZV9leGNlcHRpb25faXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGludHJfaW5mbykKLXsKLQkvKiBpZiBleGl0IGR1ZSB0byBQRiBjaGVjayBmb3IgYXN5bmMgUEYgKi8KLQlpZiAoaXNfcGFnZV9mYXVsdChpbnRyX2luZm8pKQotCQl2Y3B1LSZndDthcmNoLmFwZi5ob3N0X2FwZl9mbGFncyA9IGt2bV9yZWFkX2FuZF9yZXNldF9hcGZfZmxhZ3MoKTsKLQkvKiBpZiBleGl0IGR1ZSB0byBOTSwgaGFuZGxlIGJlZm9yZSBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkICovCi0JZWxzZSBpZiAoaXNfbm1fZmF1bHQoaW50cl9pbmZvKSkKLQkJaGFuZGxlX25tX2ZhdWx0X2lycW9mZih2Y3B1KTsKLQkvKiBIYW5kbGUgbWFjaGluZSBjaGVja3MgYmVmb3JlIGludGVycnVwdHMgYXJlIGVuYWJsZWQgKi8KLQllbHNlIGlmIChpc19tYWNoaW5lX2NoZWNrKGludHJfaW5mbykpCi0JCWt2bV9tYWNoaW5lX2NoZWNrKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGhhbmRsZV9leHRlcm5hbF9pbnRlcnJ1cHRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLQkJCQkJICAgICB1MzIgaW50cl9pbmZvKQotewotCXVuc2lnbmVkIGludCB2ZWN0b3IgPSBpbnRyX2luZm8gJmFtcDsgSU5UUl9JTkZPX1ZFQ1RPUl9NQVNLOwotCi0JaWYgKEtWTV9CVUcoIWlzX2V4dGVybmFsX2ludHIoaW50cl9pbmZvKSwgdmNwdS0mZ3Q7a3ZtLAotCSAgICAmIzM0O3VuZXhwZWN0ZWQgVk0tRXhpdCBpbnRlcnJ1cHQgaW5mbzogMHgleCYjMzQ7LCBpbnRyX2luZm8pKQotCQlyZXR1cm47Ci0KLQlrdm1fYmVmb3JlX2ludGVycnVwdCh2Y3B1LCBLVk1fSEFORExJTkdfSVJRKTsKLQl4ODZfZW50cnlfZnJvbV9rdm0oRVZFTlRfVFlQRV9FWFRJTlQsIHZlY3Rvcik7Ci0Ja3ZtX2FmdGVyX2ludGVycnVwdCh2Y3B1KTsKLQotCXZjcHUtJmd0O2FyY2guYXRfaW5zdHJ1Y3Rpb25fYm91bmRhcnkgPSB0cnVlOwotfQotCi12b2lkIHZteF9oYW5kbGVfZXhpdF9pcnFvZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQotewotCWlmICh0b192dCh2Y3B1KS0mZ3Q7ZW11bGF0aW9uX3JlcXVpcmVkKQotCQlyZXR1cm47Ci0KLQlzd2l0Y2ggKHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMpIHsKLQljYXNlIEVYSVRfUkVBU09OX0VYVEVSTkFMX0lOVEVSUlVQVDoKLQkJaGFuZGxlX2V4dGVybmFsX2ludGVycnVwdF9pcnFvZmYodmNwdSwgdm14X2dldF9pbnRyX2luZm8odmNwdSkpOwotCQlicmVhazsKLQljYXNlIEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUk6Ci0JCWhhbmRsZV9leGNlcHRpb25faXJxb2ZmKHZjcHUsIHZteF9nZXRfaW50cl9pbmZvKHZjcHUpKTsKLQkJYnJlYWs7Ci0JY2FzZSBFWElUX1JFQVNPTl9NQ0VfRFVSSU5HX1ZNRU5UUlk6Ci0JCWt2bV9tYWNoaW5lX2NoZWNrKCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLX0KLQogLyoKICAqIFRoZSBrdm0gcGFyYW1ldGVyIGNhbiBiZSBOVUxMIChtb2R1bGUgaW5pdGlhbGl6YXRpb24sIG9yIGludm9jYXRpb24gYmVmb3JlCiAgKiBWTSBjcmVhdGlvbikuIEJlIHN1cmUgdG8gY2hlY2sgdGhlIGt2bSBwYXJhbWV0ZXIgYmVmb3JlIHVzaW5nIGl0LgpAQCAtNzI1MCw3ICYjNDM7NzE3Niw3IEBAIHN0YXRpYyB2b2lkIHZteF9yZWNvdmVyX25taV9ibG9ja2luZyhzdHJ1Y3QgdmNwdV92bXggKnZteCkKIAkJaWYgKHZteC0mZ3Q7bG9hZGVkX3ZtY3MtJmd0O25taV9rbm93bl91bm1hc2tlZCkKIAkJCXJldHVybjsKIAotCQlleGl0X2ludHJfaW5mbyA9IHZteF9nZXRfaW50cl9pbmZvKCZhbXA7dm14LSZndDt2Y3B1KTsKJiM0MzsJCWV4aXRfaW50cl9pbmZvID0gdnRfZ2V0X2ludHJfaW5mbygmYW1wO3ZteC0mZ3Q7dmNwdSk7CiAJCXVuYmxvY2tfbm1pID0gKGV4aXRfaW50cl9pbmZvICZhbXA7IElOVFJfSU5GT19VTkJMT0NLX05NSSkgIT0gMDsKIAkJdmVjdG9yID0gZXhpdF9pbnRyX2luZm8gJmFtcDsgSU5UUl9JTkZPX1ZFQ1RPUl9NQVNLOwogCQkvKgpAQCAtNzQxNywxNCAmIzQzOzczNDMsMTQgQEAgc3RhdGljIGZhc3RwYXRoX3Qgdm14X2V4aXRfaGFuZGxlcnNfZmFzdHBhdGgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCSAqIHRoZSBmYXN0cGF0aCBldmVuLCBhbGwgb3RoZXIgZXhpdHMgbXVzdCB1c2UgdGhlIHNsb3cgcGF0aC4KIAkgKi8KIAlpZiAoaXNfZ3Vlc3RfbW9kZSh2Y3B1KSAmYW1wOyZhbXA7Ci0JICAgIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMgIT0gRVhJVF9SRUFTT05fUFJFRU1QVElPTl9USU1FUikKJiM0MzsJICAgIHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYyAhPSBFWElUX1JFQVNPTl9QUkVFTVBUSU9OX1RJTUVSKQogCQlyZXR1cm4gRVhJVF9GQVNUUEFUSF9OT05FOwogCi0Jc3dpdGNoICh2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljKSB7CiYjNDM7CXN3aXRjaCAodnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljKSB7CiAJY2FzZSBFWElUX1JFQVNPTl9NU1JfV1JJVEU6CiAJCXJldHVybiBoYW5kbGVfZmFzdHBhdGhfd3Jtc3IodmNwdSk7CiAJY2FzZSBFWElUX1JFQVNPTl9NU1JfV1JJVEVfSU1NOgotCQlyZXR1cm4gaGFuZGxlX2Zhc3RwYXRoX3dybXNyX2ltbSh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSwKJiM0MzsJCXJldHVybiBoYW5kbGVfZmFzdHBhdGhfd3Jtc3JfaW1tKHZjcHUsIHZ0X2dldF9leGl0X3F1YWwodmNwdSksCiAJCQkJCQkgdm14X2dldF9tc3JfaW1tX3JlZyh2Y3B1KSk7CiAJY2FzZSBFWElUX1JFQVNPTl9QUkVFTVBUSU9OX1RJTUVSOgogCQlyZXR1cm4gaGFuZGxlX2Zhc3RwYXRoX3ByZWVtcHRpb25fdGltZXIodmNwdSwgZm9yY2VfaW1tZWRpYXRlX2V4aXQpOwpAQCAtNzQzNywxNyAmIzQzOzczNjMsNiBAQCBzdGF0aWMgZmFzdHBhdGhfdCB2bXhfZXhpdF9oYW5kbGVyc19mYXN0cGF0aChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJfQogfQogCi1ub2luc3RyIHZvaWQgdm14X2hhbmRsZV9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQotewotCWlmICgodTE2KXZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMgIT0gRVhJVF9SRUFTT05fRVhDRVBUSU9OX05NSSB8fAotCSAgICAhaXNfbm1pKHZteF9nZXRfaW50cl9pbmZvKHZjcHUpKSkKLQkJcmV0dXJuOwotCi0Ja3ZtX2JlZm9yZV9pbnRlcnJ1cHQodmNwdSwgS1ZNX0hBTkRMSU5HX05NSSk7Ci0JeDg2X2VudHJ5X2Zyb21fa3ZtKEVWRU5UX1RZUEVfTk1JLCBOTUlfVkVDVE9SKTsKLQlrdm1fYWZ0ZXJfaW50ZXJydXB0KHZjcHUpOwotfQotCiBzdGF0aWMgbm9pbnN0ciB2b2lkIHZteF92Y3B1X2VudGVyX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJCQl1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CkBAIC03NDc3LDEwICYjNDM7NzM5MiwxMCBAQCBzdGF0aWMgbm9pbnN0ciB2b2lkIHZteF92Y3B1X2VudGVyX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCX0KIAogCXZteC0mZ3Q7dnQuZXhpdF9yZWFzb24uZnVsbCA9IHZtY3NfcmVhZDMyKFZNX0VYSVRfUkVBU09OKTsKLQlpZiAobGlrZWx5KCF2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5KSkKJiM0MzsJaWYgKGxpa2VseSghdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5KSkKIAkJdm14LSZndDtpZHRfdmVjdG9yaW5nX2luZm8gPSB2bWNzX3JlYWQzMihJRFRfVkVDVE9SSU5HX0lORk9fRklFTEQpOwogCi0Jdm14X2hhbmRsZV9ubWkodmNwdSk7CiYjNDM7CXZ0X2hhbmRsZV9ubWkodmNwdSk7CiAKIG91dDoKIAlndWVzdF9zdGF0ZV9leGl0X2lycW9mZigpOwpAQCAtNzYxNyw3ICYjNDM7NzUzMiw3IEBAIGZhc3RwYXRoX3Qgdm14X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncykKIAkJICogY2hlY2tpbmcuCiAJCSAqLwogCQlpZiAodmNwdS0mZ3Q7YXJjaC5uZXN0ZWRfcnVuX3BlbmRpbmcgJmFtcDsmYW1wOwotCQkgICAgIXZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkpCiYjNDM7CQkgICAgIXZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mYWlsZWRfdm1lbnRyeSkKIAkJCSYjNDM7JiM0Mzt2Y3B1LSZndDtzdGF0Lm5lc3RlZF9ydW47CiAKIAkJdmNwdS0mZ3Q7YXJjaC5uZXN0ZWRfcnVuX3BlbmRpbmcgPSAwOwpAQCAtNzYyOCw3ICYjNDM7NzU0Myw3IEBAIGZhc3RwYXRoX3Qgdm14X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncykKIAogCXRyYWNlX2t2bV9leGl0KHZjcHUsIEtWTV9JU0FfVk1YKTsKIAotCWlmICh1bmxpa2VseSh2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5KSkKJiM0MzsJaWYgKHVubGlrZWx5KHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mYWlsZWRfdm1lbnRyeSkpCiAJCXJldHVybiBFWElUX0ZBU1RQQVRIX05PTkU7CiAKIAl2bXgtJmd0O2xvYWRlZF92bWNzLSZndDtsYXVuY2hlZCA9IDE7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oIGIvYXJjaC94ODYva3ZtL3ZteC92bXguaAppbmRleCBkYzg1MTdmMTViYzQ2Li4zMjQ3YjU1YjM0ODQzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmgKQEAgLTMwNCw0MyAmIzQzOzMwNCw2IEBAIHN0cnVjdCBrdm1fdm14IHsKIAl1NjQgKnBpZF90YWJsZTsKIH07CiAKLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IHZjcHVfdnQgKnRvX3Z0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKLXsKLQlyZXR1cm4gJmFtcDsoY29udGFpbmVyX29mKHZjcHUsIHN0cnVjdCB2Y3B1X3ZteCwgdmNwdSktJmd0O3Z0KTsKLX0KLQotc3RhdGljIF9fYWx3YXlzX2lubGluZSBzdHJ1Y3Qga3ZtX3ZjcHUgKnZ0X3RvX3ZjcHUoc3RydWN0IHZjcHVfdnQgKnZ0KQotewotCXJldHVybiAmYW1wOyhjb250YWluZXJfb2YodnQsIHN0cnVjdCB2Y3B1X3ZteCwgdnQpLSZndDt2Y3B1KTsKLX0KLQotc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bmlvbiB2bXhfZXhpdF9yZWFzb24gdm14X2dldF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCi17Ci0JcmV0dXJuIHRvX3Z0KHZjcHUpLSZndDtleGl0X3JlYXNvbjsKLX0KLQotc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBsb25nIHZteF9nZXRfZXhpdF9xdWFsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKLXsKLQlzdHJ1Y3QgdmNwdV92dCAqdnQgPSB0b192dCh2Y3B1KTsKLQotCWlmICgha3ZtX3JlZ2lzdGVyX3Rlc3RfYW5kX21hcmtfYXZhaWxhYmxlKHZjcHUsIFZDUFVfUkVHX0VYSVRfSU5GT18xKSAmYW1wOyZhbXA7Ci0JICAgICFXQVJOX09OX09OQ0UoaXNfdGRfdmNwdSh2Y3B1KSkpCi0JCXZ0LSZndDtleGl0X3F1YWxpZmljYXRpb24gPSB2bWNzX3JlYWRsKEVYSVRfUVVBTElGSUNBVElPTik7Ci0KLQlyZXR1cm4gdnQtJmd0O2V4aXRfcXVhbGlmaWNhdGlvbjsKLX0KLQotc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdm14X2dldF9pbnRyX2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQotewotCXN0cnVjdCB2Y3B1X3Z0ICp2dCA9IHRvX3Z0KHZjcHUpOwotCi0JaWYgKCFrdm1fcmVnaXN0ZXJfdGVzdF9hbmRfbWFya19hdmFpbGFibGUodmNwdSwgVkNQVV9SRUdfRVhJVF9JTkZPXzIpICZhbXA7JmFtcDsKLQkgICAgIVdBUk5fT05fT05DRShpc190ZF92Y3B1KHZjcHUpKSkKLQkJdnQtJmd0O2V4aXRfaW50cl9pbmZvID0gdm1jc19yZWFkMzIoVk1fRVhJVF9JTlRSX0lORk8pOwotCi0JcmV0dXJuIHZ0LSZndDtleGl0X2ludHJfaW5mbzsKLX0KLQogdm9pZCB2bXhfdmNwdV9sb2FkX3ZtY3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTsKIGludCBhbGxvY2F0ZV92cGlkKHZvaWQpOwogdm9pZCBmcmVlX3ZwaWQoaW50IHZwaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmggYi9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaAppbmRleCAwNTRmZDE0YmIyZTE2Li43YWMwMmM2ODQ1N2YxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaApAQCAtMjcsNyAmIzQzOzI3LDYgQEAgdm9pZCB2bXhfdmNwdV9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaW5pdF9ldmVudCk7CiB2b2lkIHZteF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTsKIHZvaWQgdm14X3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBpbnQgdm14X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKTsKLXZvaWQgdm14X2hhbmRsZV9leGl0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogaW50IHZteF9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiB2b2lkIHZteF91cGRhdGVfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIGJvb2wgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA5OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDA3CgkJCQkJCQlvdXRwdXQ6IDMzMgoJCQkJCQkJdGhvdWdodHM6IDIzNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBTZXNzaW9uIEFzc2Vzc21lbnQ6IFJlZmFjdG9yZWQgVk1YL1REWCBDb2RlKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIGRldGVybWluZSBpZiB3ZSBuZWVkIHRvIGZpcmUgdXAgYSBLTVNBTiBzZXNzaW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIHByaW1hcmlseSBhIHJlZmFjdG9yaW5nIGV4ZXJjaXNlLCBidXQgd2UgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uCgpGaXJzdCwgSSBzZWUgdGhlIGNvcmUgb2YgdGhlIHBhdGNoIGludm9sdmVzIHJlb3JnYW5pemluZyBhbmQgcmVuYW1pbmcgY29kZSByZWxhdGVkIHRvIEtWTSBJbnRlbCYjMzk7cyBWTVggYW5kIFREWCBpbXBsZW1lbnRhdGlvbnMuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYHN0cnVjdCB2Y3B1X3ZteF90ZHhgIGlzIHRoZSBrZXkg4oCTIGl0JiMzOTtzIGEgdW5pZmllZCBzdHJ1Y3R1cmUgdGhhdCBhbGxvd3MgdXMgdG8gdHJlYXQgYm90aCBWTVggYW5kIFREWCB2Q1BVcyBzaW1pbGFybHksIHNwZWNpZmljYWxseSBmb3IgYWNjZXNzaW5nIHRoZSBgdnRgIG1lbWJlciB0aHJvdWdoIHRoZSBgdG9fdnQoKWAgaGVscGVyLiBUaGUgdXNlIG9mIGBjb250YWluZXJfb2ZgIGlzIGZ1bmRhbWVudGFsIHRvIEtWTSYjMzk7cyBhcmNoaXRlY3R1cmUgYW5kIHRoZSBwdXJwb3NlIG9mIHRoaXMgcmVmYWN0b3IgaXMgdG8gYWJzdHJhY3QgaXQgdW5kZXIgYSBjb21tb24gbmFtZS4gVGhlIHBhdGNoIG1vdmVzIGFuZCByZW5hbWVzIGEgc2VyaWVzIG9mIGhlbHBlciBmdW5jdGlvbnMgKGUuZy4sIGB2bXhfZ2V0X2V4aXRfcmVhc29uYCB0byBgdnRfZ2V0X2V4aXRfcmVhc29uYCkgYW5kIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSBpbnRlcnJ1cHRzIGFuZCBleGNlcHRpb25zLgoKTXkgZmlyc3QgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZXJlIGFyZSBubyBtYWpvciBmdW5jdGlvbmFsIGNoYW5nZXMsIHRoZSBtYWluIGdvYWxzIGlzIHRvIHNpbXBsaWZ5IGFuZCB1bmlmeSBjb21tb24gVk1YL1REWCBjb2RlIGZvciBpbXByb3ZlZCBtYWludGFpbmFiaWxpdHkuCgpJJiMzOTt2ZSBjYXJlZnVsbHkgZXhhbWluZWQgdGhlIGB0b192dGAgZnVuY3Rpb24gbm93IGJlaW5nIHBsYWNlZCBpbiBjb21tb24uaCBhbG9uZyB3aXRoIHRoZSBtb3ZlZCBleGl0IGFuZCBpbnRlcnJ1cHQgaGFuZGxlcnMuIFRoZXNlIGFyZSBhbG1vc3QgaWRlbnRpY2FsIHRvIHRoZWlyIG9yaWdpbmFsIGltcGxlbWVudGF0aW9ucywgYW5kIG9ubHkgdGhlIG5hbWluZyBoYXMgYmVlbiBhZGp1c3RlZCB0byB1c2UgdGhlIHVuaWZpZWQgJiMzNDt2dCYjMzQ7IHByZWZpeC4gSW1wb3J0YW50bHksIHRoZSBgc3RhdGljX2Fzc2VydGAgc3RhdGVtZW50cyBjb25maXJtaW5nIHRoZSBvZmZzZXRzIG9mIHRoZSBgdnRgIG1lbWJlciB3aXRoaW4gYHZjcHVfdm14X3RkeGAsIGB2Y3B1X3ZteGAsIGFuZCBgdmNwdV90ZHhgIHN0cnVjdHVyZXMgYXJlIGNydWNpYWwuIFRoaXMgZ3VhcmFudGVlcyB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlIGBjb250YWluZXJfb2ZgIG1hY3JvIGFuZCBlbnN1cmVzIG5vIG1lbW9yeSBjb3JydXB0aW9uIGNhbiBvY2N1ciBkdWUgdG8gc3RydWN0IG1lbWJlciBhY2Nlc3MgdGhyb3VnaCBgdG9fdnRgIGFuZCBgdnRfdG9fdmNwdWAuIEl0IGVsaW1pbmF0ZXMgdGhlIHBvc3NpYmlsaXR5IG9mIG9mZnNldCBtaXNtYXRjaCBidWdzLgoKTm93LCBsZXQmIzM5O3MgcHV0IG9uIHRoZSBLTVNBTiBoYXQuIFdlIG5lZWQgdG8gbWV0aG9kaWNhbGx5IGNoZWNrIGZvciBhbnkgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4KCjEuICAqKktlcm5lbC1Vc2VyIEludGVyZmFjZToqKiBEb2VzIHRoaXMgcGF0Y2ggYWRkLCByZW1vdmUgb3IgY2hhbmdlIGFueSBrZXJuZWwgc3RydWN0dXJlcyB0aGF0IGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZT8gTm8sIHRoaXMgaXMgcHVyZWx5IGludGVybmFsIHJlZmFjdG9yaW5nLgoyLiAgKipDb25kaXRpb25hbCBMb2dpYy9CcmFuY2hpbmc6KiogRG9lcyB0aGUgcGF0Y2ggaW50cm9kdWNlIGFueSBuZXcgY29uZGl0aW9uYWwgbG9naWMgd2hlcmUgdGhlIG91dGNvbWUgbWlnaHQgZGVwZW5kIG9uIGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGU/IE5vdCB0aGF0IEkgY2FuIHNlZS4gVGhlIGNvZGUgaXMgY2FyZWZ1bGx5IHN0cnVjdHVyZWQgdG8gYXZvaWQgc3VjaCBzY2VuYXJpb3MuCjMuICAqKkRhdGEgU3RydWN0dXJlIEluaXRpYWxpemF0aW9uOioqIElzIHRoZXJlIGFueSBpbnRyb2R1Y3Rpb24sIG9yIGNoYW5nZSB0byBjb21wbGV4IGRhdGEgc3RydWN0dXJlcywgYW5kIGlmIHNvLCBob3cgYXJlIHRoZXkgaW5pdGlhbGl6ZWQ/IEFyZSBhbnkgZmllbGRzIGxlZnQgdW5pbml0aWFsaXplZCB0aGF0IGNvdWxkIGxhdGVyIGJlIHJlYWQ/IE5vLiBUaGUgcmVmYWN0b3JpbmcgaXRzZWxmIGRvZXNuJiMzOTt0IGFsdGVyIGRhdGEgc3RydWN0dXJlcyBpbiBhIHdheSB0aGF0IGludHJvZHVjZXMgdGhpcyByaXNrLgo0LiAgKipCb3VuZHMvTGVuZ3RoIENoZWNrczoqKiBEb2VzIGl0IGltcGFjdCBhbnkgZXhpc3RpbmcgY2hlY2tzIGluIGEgd2F5IHRoYXQgYWxsb3dzIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGRhdGE/IE5vLgoKQWZ0ZXIgdGhpcyBjYXJlZnVsIGluc3BlY3Rpb24sIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIFRoZXNlIGtpbmRzIG9mIGJ1Z3MsIHdpdGggcG90ZW50aWFsIHN0cnVjdCBtZW1iZXIgb2Zmc2V0cyBtaXNtYXRjaGVzLCB3b3VsZCBiZSBjYXVnaHQgd2l0aCBzdGFuZGFyZCBtZW1vcnkgY2hlY2tlcnMgbGlrZSBLQVNBTiBkdXJpbmcgcm91dGluZSB0ZXN0aW5nLiBUaGUga2V5IGlzIGluIHRoZSBzdGF0aWMgYXNzZXJ0cyBhbmQgdGhlIHJpZ29yb3VzIGNvZGUgcmV2aWV3IGJ5IHRoZSBjb21tdW5pdHkuIEl0JiMzOTtzIGVzc2VudGlhbGx5IHN0cnVjdHVyYWwgcmVmYWN0b3JpbmcgdGhhdCBtb3ZlcyBjb2RlIGFyb3VuZCB3aGlsZSByZXRhaW5pbmcgdGhlIHNhbWUgZnVuY3Rpb25hbGl0eS4KCk15IGNvbmNsdXNpb24gaXMgdGhhdCB0aGlzIHBhdGNoICpkb2VzIG5vdCogcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSByaXNrcyBhc3NvY2lhdGVkIHdpdGggdGhpcyByZWZhY3RvcmluZyBhcmUgbWluaW1hbCwgcHJpbWFyaWx5IGxpbWl0ZWQgdG8gdGhlIGNvcnJlY3RuZXNzIG9mIHBvaW50ZXIgYXJpdGhtZXRpYyB3aXRoIG9mZnNldHMuIFRoZXNlIGFyZSB0aGluZ3MgdGhhdCB3b3VsZCBiZSByZWFkaWx5IHBpY2tlZCB1cCBieSBleGlzdGluZyBLVk0gdGVzdCBpbmZyYXN0cnVjdHVyZSBhbmQgbWVtb3J5IHNhbml0aXplcnMsIHNvIGBOZWVkc0tNU0FOYCA9IGBmYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA5OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcmVmYWN0b3Jpbmcgb2YgS1ZNIEludGVsIFZNWCBhbmQgVERYIGNvZGUgdG8gY29uc29saWRhdGUgY29tbW9uIHZpcnR1YWxpemF0aW9uIGluZnJhc3RydWN0dXJlIChWVCkgYmV0d2VlbiBzdGFuZGFyZCBWTVggYW5kIFREWCB2Q1BVczpcbjEuIEl0IGRlZmluZXMgYSBjb21tb24gd3JhcHBlciBsYXlvdXQgYHN0cnVjdCB2Y3B1X3ZteF90ZHhgIHdpdGggY29tcGlsZS10aW1lIGFzc2VydGlvbnMgKGBzdGF0aWNfYXNzZXJ0YCkgZW5zdXJpbmcgb2Zmc2V0IG1hdGNoaW5nIG9mIGBzdHJ1Y3QgdmNwdV92dGAgYWNyb3NzIGB2Y3B1X3ZteGAgYW5kIGB2Y3B1X3RkeGAuXG4yLiBJdCBtb3ZlcyBhbmQgcmVuYW1lcyBoZWxwZXIgZnVuY3Rpb25zIChgdG9fdnRgLCBgdnRfZ2V0X2V4aXRfcmVhc29uYCwgYHZ0X2dldF9leGl0X3F1YWxgLCBgdnRfZ2V0X2ludHJfaW5mb2AsIGV0Yy4pIGZyb20gYHZteC5oYC9gdm14LmNgIHRvIGBjb21tb24uaGAvYG1haW4uY2AuXG4zLiBJdCBtb3ZlcyBjb21tb24gZXhpdCBhbmQgaW50ZXJydXB0IGhhbmRsaW5nIGZ1bmN0aW9ucyAoYHZ0X2hhbmRsZV9leGl0X2lycW9mZmAsIGB2dF9oYW5kbGVfbm1pYCwgYGhhbmRsZV9leHRlcm5hbF9pbnRlcnJ1cHRfaXJxb2ZmYCwgZXRjLikgdG8gYG1haW4uY2AuXG40LiBJdCByZW5hbWVzIHBvc3RlZCBpbnRlcnJ1cHQgcm91dGluZXMgdG8gdXNlIHRoZSBgdnRfYCBwcmVmaXggYWNyb3NzIHRoZSBjb2RlYmFzZS5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBleHBvc2UgdW5pbml0aWFsaXplZCBmaWVsZHMgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlLCBvciBhbHRlciBidWZmZXIgYm91bmRzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHN0cnVjdCBsYXlvdXQgb3Igb2Zmc2V0cyBhcmUgZ3VhcmRlZCBhdCBjb21waWxlIHRpbWUgYnkgYHN0YXRpY19hc3NlcnRgIG9yIHdvdWxkIG1hbmlmZXN0IGFzIG1lbW9yeSBjb3JydXB0aW9uL09PQiBhY2Nlc3MgZGV0ZWN0YWJsZSBieSBzdGFuZGFyZCBidWlsZHMgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaXMgYSByZWZhY3RvcmluZyBvZiBLVk0gSW50ZWwgVk1YIGFuZCBURFggY29kZSB0byBjb25zb2xpZGF0ZSBjb21tb24gdmlydHVhbGl6YXRpb24gaW5mcmFzdHJ1Y3R1cmUgKFZUKSBiZXR3ZWVuIHN0YW5kYXJkIFZNWCBhbmQgVERYIHZDUFVzOlxuMS4gSXQgZGVmaW5lcyBhIGNvbW1vbiB3cmFwcGVyIGxheW91dCBgc3RydWN0IHZjcHVfdm14X3RkeGAgd2l0aCBjb21waWxlLXRpbWUgYXNzZXJ0aW9ucyAoYHN0YXRpY19hc3NlcnRgKSBlbnN1cmluZyBvZmZzZXQgbWF0Y2hpbmcgb2YgYHN0cnVjdCB2Y3B1X3Z0YCBhY3Jvc3MgYHZjcHVfdm14YCBhbmQgYHZjcHVfdGR4YC5cbjIuIEl0IG1vdmVzIGFuZCByZW5hbWVzIGhlbHBlciBmdW5jdGlvbnMgKGB0b192dGAsIGB2dF9nZXRfZXhpdF9yZWFzb25gLCBgdnRfZ2V0X2V4aXRfcXVhbGAsIGB2dF9nZXRfaW50cl9pbmZvYCwgZXRjLikgZnJvbSBgdm14LmhgL2B2bXguY2AgdG8gYGNvbW1vbi5oYC9gbWFpbi5jYC5cbjMuIEl0IG1vdmVzIGNvbW1vbiBleGl0IGFuZCBpbnRlcnJ1cHQgaGFuZGxpbmcgZnVuY3Rpb25zIChgdnRfaGFuZGxlX2V4aXRfaXJxb2ZmYCwgYHZ0X2hhbmRsZV9ubWlgLCBgaGFuZGxlX2V4dGVybmFsX2ludGVycnVwdF9pcnFvZmZgLCBldGMuKSB0byBgbWFpbi5jYC5cbjQuIEl0IHJlbmFtZXMgcG9zdGVkIGludGVycnVwdCByb3V0aW5lcyB0byB1c2UgdGhlIGB2dF9gIHByZWZpeCBhY3Jvc3MgdGhlIGNvZGViYXNlLlxuXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGV4cG9zZSB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nIHRvIHVzZXIgc3BhY2UsIG9yIGFsdGVyIGJ1ZmZlciBib3VuZHMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggc3RydWN0IGxheW91dCBvciBvZmZzZXRzIGFyZSBndWFyZGVkIGF0IGNvbXBpbGUgdGltZSBieSBgc3RhdGljX2Fzc2VydGAgb3Igd291bGQgbWFuaWZlc3QgYXMgbWVtb3J5IGNvcnJ1cHRpb24vT09CIGFjY2VzcyBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIGJ1aWxkcyBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjI0OjIzLjgxNzM5NDM1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYzMDU1NzkwNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2dF9oYW5kbGVfZXhpdF9pcnFvZmZcIixcbiAgICBcInZ0X2hhbmRsZV9ubWlcIixcbiAgICBcInZ0X3ZjcHVfcGlfbG9hZFwiLFxuICAgIFwidnRfdmNwdV9waV9wdXRcIixcbiAgICBcInZ0X3BpX3N0YXJ0X2J5cGFzc1wiLFxuICAgIFwidnRfcGlfdXBkYXRlX2lydGVcIixcbiAgICBcInZteF9oYW5kbGVfZXhpdFwiLFxuICAgIFwidm14X3ZjcHVfcnVuXCIsXG4gICAgXCJuZXN0ZWRfdm14X3JlZmxlY3Rfdm1leGl0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHJlZmFjdG9yaW5nIG9mIEtWTSBJbnRlbCBWTVggYW5kIFREWCBjb2RlIHRvIGNvbnNvbGlkYXRlIGNvbW1vbiB2aXJ0dWFsaXphdGlvbiBpbmZyYXN0cnVjdHVyZSAoVlQpIGJldHdlZW4gc3RhbmRhcmQgVk1YIGFuZCBURFggdkNQVXM6XFxuMS4gSXQgZGVmaW5lcyBhIGNvbW1vbiB3cmFwcGVyIGxheW91dCBgc3RydWN0IHZjcHVfdm14X3RkeGAgd2l0aCBjb21waWxlLXRpbWUgYXNzZXJ0aW9ucyAoYHN0YXRpY19hc3NlcnRgKSBlbnN1cmluZyBvZmZzZXQgbWF0Y2hpbmcgb2YgYHN0cnVjdCB2Y3B1X3Z0YCBhY3Jvc3MgYHZjcHVfdm14YCBhbmQgYHZjcHVfdGR4YC5cXG4yLiBJdCBtb3ZlcyBhbmQgcmVuYW1lcyBoZWxwZXIgZnVuY3Rpb25zIChgdG9fdnRgLCBgdnRfZ2V0X2V4aXRfcmVhc29uYCwgYHZ0X2dldF9leGl0X3F1YWxgLCBgdnRfZ2V0X2ludHJfaW5mb2AsIGV0Yy4pIGZyb20gYHZteC5oYC9gdm14LmNgIHRvIGBjb21tb24uaGAvYG1haW4uY2AuXFxuMy4gSXQgbW92ZXMgY29tbW9uIGV4aXQgYW5kIGludGVycnVwdCBoYW5kbGluZyBmdW5jdGlvbnMgKGB2dF9oYW5kbGVfZXhpdF9pcnFvZmZgLCBgdnRfaGFuZGxlX25taWAsIGBoYW5kbGVfZXh0ZXJuYWxfaW50ZXJydXB0X2lycW9mZmAsIGV0Yy4pIHRvIGBtYWluLmNgLlxcbjQuIEl0IHJlbmFtZXMgcG9zdGVkIGludGVycnVwdCByb3V0aW5lcyB0byB1c2UgdGhlIGB2dF9gIHByZWZpeCBhY3Jvc3MgdGhlIGNvZGViYXNlLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmcgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgYnVmZmVyIGJvdW5kcy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBzdHJ1Y3QgbGF5b3V0IG9yIG9mZnNldHMgYXJlIGd1YXJkZWQgYXQgY29tcGlsZSB0aW1lIGJ5IGBzdGF0aWNfYXNzZXJ0YCBvciB3b3VsZCBtYW5pZmVzdCBhcyBtZW1vcnkgY29ycnVwdGlvbi9PT0IgYWNjZXNzIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgYnVpbGRzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgS1ZNIEludGVsIChWTVgvVERYKSB2aXJ0dWFsaXphdGlvbiBsb2dpYyBieSBjb25zb2xpZGF0aW5nIGV4aXQgc3RhdHVzIGhhbmRsaW5nLCBleGl0IElSUS1vZmYgcHJvY2Vzc2luZywgcG9zdGVkIGludGVycnVwdCBoZWxwZXJzLCBhbmQgVk1DUyBleGl0IHF1YWxpZmljYXRpb24gYWNjZXNzb3JzIHVuZGVyIGNvbW1vbiB2dF8qIGFic3RyYWN0aW9ucy4gVGhpcyBhZmZlY3RzIGNvcmUgS1ZNIFZNIGV4aXQgaGFuZGxpbmcgYW5kIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiByZWFjaGFibGUgb24gYW1kNjQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjI0OjIzLjgxNzM5OTgzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjY5OTQ0OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5ZDI1ZjA2YTkzYWFiZTY0ZmJhZDBkZWQ3NGY3MzAwMGY0YTQ3Y2MzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgU2VwIDUgMDk6MjQ6MjIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaCBiL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmhcXG5pbmRleCAwODAwNTY3NjcwMmMyLi4zZTY4ZmExMmFjYTY1IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oXFxuQEAgLTIsMTAgKzIsMTIgQEBcXG4gI2lmbmRlZiBfX0tWTV9YODZfVk1YX0NPTU1PTl9IXFxuICNkZWZpbmUgX19LVk1fWDg2X1ZNWF9DT01NT05fSFxcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbnRhaW5lcl9vZi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva3ZtX2hvc3QuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9wb3N0ZWRfaW50ci5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcIm1tdS5oXFxcIlxcbisjaW5jbHVkZSBcXFwidm14X29wcy5oXFxcIlxcbiBcXG4gdW5pb24gdm14X2V4aXRfcmVhc29uIHtcXG4gXFx0c3RydWN0IHtcXG5AQCAtNzQsMTQgKzc2LDYyIEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc190ZF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkgeyByZXR1cm4gZmFsc2U7IH1cXG4gXFxuICNlbmRpZlxcbiBcXG4rc3RydWN0IHZjcHVfdm14X3RkeCB7XFxuK1xcdHN0cnVjdCBrdm1fdmNwdSB2Y3B1O1xcbitcXHRzdHJ1Y3QgdmNwdV92dCB2dDtcXG4rfTtcXG4rXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IHZjcHVfdnQgKnRvX3Z0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4re1xcbitcXHRyZXR1cm4gXFx1MDAyNihjb250YWluZXJfb2YodmNwdSwgc3RydWN0IHZjcHVfdm14X3RkeCwgdmNwdSktXFx1MDAzZXZ0KTtcXG4rfVxcbitcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBzdHJ1Y3Qga3ZtX3ZjcHUgKnZ0X3RvX3ZjcHUoc3RydWN0IHZjcHVfdnQgKnZ0KVxcbit7XFxuK1xcdHJldHVybiBcXHUwMDI2KGNvbnRhaW5lcl9vZih2dCwgc3RydWN0IHZjcHVfdm14X3RkeCwgdnQpLVxcdTAwM2V2Y3B1KTtcXG4rfVxcbitcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bmlvbiB2bXhfZXhpdF9yZWFzb24gdnRfZ2V0X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4re1xcbitcXHRyZXR1cm4gdG9fdnQodmNwdSktXFx1MDAzZWV4aXRfcmVhc29uO1xcbit9XFxuK1xcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcgdnRfZ2V0X2V4aXRfcXVhbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuK3tcXG4rXFx0c3RydWN0IHZjcHVfdnQgKnZ0ID0gdG9fdnQodmNwdSk7XFxuK1xcbitcXHRpZiAoIWt2bV9yZWdpc3Rlcl90ZXN0X2FuZF9tYXJrX2F2YWlsYWJsZSh2Y3B1LCBWQ1BVX1JFR19FWElUX0lORk9fMSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFXQVJOX09OX09OQ0UoaXNfdGRfdmNwdSh2Y3B1KSkpXFxuK1xcdFxcdHZ0LVxcdTAwM2VleGl0X3F1YWxpZmljYXRpb24gPSB2bWNzX3JlYWRsKEVYSVRfUVVBTElGSUNBVElPTik7XFxuK1xcbitcXHRyZXR1cm4gdnQtXFx1MDAzZWV4aXRfcXVhbGlmaWNhdGlvbjtcXG4rfVxcbitcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdnRfZ2V0X2ludHJfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuK3tcXG4rXFx0c3RydWN0IHZjcHVfdnQgKnZ0ID0gdG9fdnQodmNwdSk7XFxuK1xcbitcXHRpZiAoIWt2bV9yZWdpc3Rlcl90ZXN0X2FuZF9tYXJrX2F2YWlsYWJsZSh2Y3B1LCBWQ1BVX1JFR19FWElUX0lORk9fMikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFXQVJOX09OX09OQ0UoaXNfdGRfdmNwdSh2Y3B1KSkpXFxuK1xcdFxcdHZ0LVxcdTAwM2VleGl0X2ludHJfaW5mbyA9IHZtY3NfcmVhZDMyKFZNX0VYSVRfSU5UUl9JTkZPKTtcXG4rXFxuK1xcdHJldHVybiB2dC1cXHUwMDNlZXhpdF9pbnRyX2luZm87XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBpc194ZmRfbm1fZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbit7XFxuK1xcdHJldHVybiB2Y3B1LVxcdTAwM2VhcmNoLmd1ZXN0X2ZwdS5mcHN0YXRlLVxcdTAwM2V4ZmQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgICFrdm1faXNfY3IwX2JpdF9zZXQodmNwdSwgWDg2X0NSMF9UUyk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB2dF9pc190ZHhfcHJpdmF0ZV9ncGEoc3RydWN0IGt2bSAqa3ZtLCBncGFfdCBncGEpXFxuIHtcXG4gXFx0LyogRm9yIFREWCB0aGUgZGlyZWN0IG1hc2sgaXMgdGhlIHNoYXJlZCBtYXNrLiAqL1xcbiBcXHRyZXR1cm4gIWt2bV9pc19hZGRyX2RpcmVjdChrdm0sIGdwYSk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgaW50IF9fdm14X2hhbmRsZV9lcHRfdmlvbGF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uKVxcbitzdGF0aWMgaW5saW5lIGludCBfX3Z0X2hhbmRsZV9lcHRfdmlvbGF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24pXFxuIHtcXG4gXFx0dTY0IGVycm9yX2NvZGU7XFxuIFxcbkBAIC0xNjQsOCArMjE0LDggQEAgc3RhdGljIGlubGluZSB2b2lkIGt2bV92Y3B1X3RyaWdnZXJfcG9zdGVkX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuICAqIFBvc3QgYW4gaW50ZXJydXB0IHRvIGEgdkNQVSdzIFBJUiBhbmQgdHJpZ2dlciB0aGUgdkNQVSB0byBwcm9jZXNzIHRoZVxcbiAgKiBpbnRlcnJ1cHQgaWYgbmVjZXNzYXJ5LlxcbiAgKi9cXG4tc3RhdGljIGlubGluZSB2b2lkIF9fdm14X2RlbGl2ZXJfcG9zdGVkX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHBpX2Rlc2MgKnBpX2Rlc2MsIGludCB2ZWN0b3IpXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3Z0X2RlbGl2ZXJfcG9zdGVkX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYywgaW50IHZlY3RvcilcXG4ge1xcbiBcXHRpZiAocGlfdGVzdF9hbmRfc2V0X3Bpcih2ZWN0b3IsIHBpX2Rlc2MpKVxcbiBcXHRcXHRyZXR1cm47XFxuQEAgLTE4Myw2ICsyMzMsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX192bXhfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFx0a3ZtX3ZjcHVfdHJpZ2dlcl9wb3N0ZWRfaW50ZXJydXB0KHZjcHUsIFBPU1RFRF9JTlRSX1ZFQ1RPUik7XFxuIH1cXG4gXFxuLW5vaW5zdHIgdm9pZCB2bXhfaGFuZGxlX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbitub2luc3RyIHZvaWQgdnRfaGFuZGxlX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiBcXG4gI2VuZGlmIC8qIF9fS1ZNX1g4Nl9WTVhfQ09NTU9OX0ggKi9cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9tYWluLmMgYi9hcmNoL3g4Ni9rdm0vdm14L21haW4uY1xcbmluZGV4IDRjNTJhYjhkMDc4NjkuLjZlMGIzOTU5ZDczYWIgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L21haW4uY1xcbkBAIC0xLDQgKzEsNSBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZW50cnktY29tbW9uLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGVwYXJhbS5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcIng4Nl9vcHMuaFxcXCJcXG5AQCAtMTAsOCArMTEsMTIgQEBcXG4gI2luY2x1ZGUgXFxcInRkeC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidGR4X2FyY2guaFxcXCJcXG4gXFxuKyNwcmFnbWEgR0NDIHBvaXNvbiB0b192bXhcXG4rXFxuK3N0YXRpY19hc3NlcnQob2Zmc2V0b2Yoc3RydWN0IHZjcHVfdm14X3RkeCwgdnQpID09IG9mZnNldG9mKHN0cnVjdCB2Y3B1X3ZteCwgdnQpKTtcXG4rXFxuICNpZmRlZiBDT05GSUdfS1ZNX0lOVEVMX1REWFxcbi1zdGF0aWNfYXNzZXJ0KG9mZnNldG9mKHN0cnVjdCB2Y3B1X3ZteCwgdnQpID09IG9mZnNldG9mKHN0cnVjdCB2Y3B1X3RkeCwgdnQpKTtcXG4rc3RhdGljX2Fzc2VydChvZmZzZXRvZihzdHJ1Y3QgdmNwdV92bXhfdGR4LCB2dCkgPT0gb2Zmc2V0b2Yoc3RydWN0IHZjcHVfdGR4LCB2dCkpO1xcbiBcXG4gc3RhdGljIHZvaWQgdnRfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUodm9pZClcXG4ge1xcbkBAIC04NzYsNiArODgxLDg1IEBAIHN0YXRpYyBpbnQgdnRfZ21lbV9tYXhfbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sXFxuICNkZWZpbmUgdnRfb3BfdGR4X29ubHkobmFtZSkgTlVMTFxcbiAjZW5kaWYgLyogQ09ORklHX0tWTV9JTlRFTF9URFggKi9cXG4gXFxuK3N0YXRpYyB2b2lkIGhhbmRsZV9ubV9mYXVsdF9pcnFvZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIFNhdmUgeGZkX2VyciB0byBndWVzdF9mcHUgYmVmb3JlIGludGVycnVwdCBpcyBlbmFibGVkLCBzbyB0aGVcXG4rXFx0ICogTVNSIHZhbHVlIGlzIG5vdCBjbG9iYmVyZWQgYnkgdGhlIGhvc3QgYWN0aXZpdHkgYmVmb3JlIHRoZSBndWVzdFxcbitcXHQgKiBoYXMgY2hhbmNlIHRvIGNvbnN1bWUgaXQuXFxuK1xcdCAqXFxuK1xcdCAqIFVwZGF0ZSB0aGUgZ3Vlc3QncyBYRkRfRVJSIGlmIGFuZCBvbmx5IGlmIFhGRCBpcyBlbmFibGVkLCBhcyB0aGUgI05NXFxuK1xcdCAqIGludGVyY2VwdGlvbiBtYXkgaGF2ZSBiZWVuIGNhdXNlZCBieSBMMSBpbnRlcmNlcHRpb24uICBQZXIgdGhlIFNETSxcXG4rXFx0ICogWEZEX0VSUiBpcyBub3QgbW9kaWZpZWQgZm9yIG5vbi1YRkQgI05NLCBpLmUuIGlmIENSMC5UUz0xLlxcbitcXHQgKlxcbitcXHQgKiBOb3RlLCBYRkRfRVJSIGlzIHVwZGF0ZWQgX2JlZm9yZV8gdGhlICNOTSBpbnRlcmNlcHRpb24gY2hlY2ssIGkuZS5cXG4rXFx0ICogdW5saWtlIENSMiBhbmQgRFI2LCB0aGUgdmFsdWUgaXMgbm90IGEgcGF5bG9hZCB0aGF0IGlzIGF0dGFjaGVkIHRvXFxuK1xcdCAqIHRoZSAjTk0gZXhjZXB0aW9uLlxcbitcXHQgKi9cXG4rXFx0aWYgKGlzX3hmZF9ubV9mYXVsdCh2Y3B1KSlcXG4rXFx0XFx0cmRtc3JxKE1TUl9JQTMyX1hGRF9FUlIsIHZjcHUtXFx1MDAzZWFyY2guZ3Vlc3RfZnB1LnhmZF9lcnIpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBoYW5kbGVfZXhjZXB0aW9uX2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBpbnRyX2luZm8pXFxuK3tcXG4rXFx0LyogaWYgZXhpdCBkdWUgdG8gUEYgY2hlY2sgZm9yIGFzeW5jIFBGICovXFxuK1xcdGlmIChpc19wYWdlX2ZhdWx0KGludHJfaW5mbykpXFxuK1xcdFxcdHZjcHUtXFx1MDAzZWFyY2guYXBmLmhvc3RfYXBmX2ZsYWdzID0ga3ZtX3JlYWRfYW5kX3Jlc2V0X2FwZl9mbGFncygpO1xcbitcXHQvKiBpZiBleGl0IGR1ZSB0byBOTSwgaGFuZGxlIGJlZm9yZSBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkICovXFxuK1xcdGVsc2UgaWYgKGlzX25tX2ZhdWx0KGludHJfaW5mbykpXFxuK1xcdFxcdGhhbmRsZV9ubV9mYXVsdF9pcnFvZmYodmNwdSk7XFxuK1xcdC8qIEhhbmRsZSBtYWNoaW5lIGNoZWNrcyBiZWZvcmUgaW50ZXJydXB0cyBhcmUgZW5hYmxlZCAqL1xcbitcXHRlbHNlIGlmIChpc19tYWNoaW5lX2NoZWNrKGludHJfaW5mbykpXFxuK1xcdFxcdGt2bV9tYWNoaW5lX2NoZWNrKCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGhhbmRsZV9leHRlcm5hbF9pbnRlcnJ1cHRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICB1MzIgaW50cl9pbmZvKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCB2ZWN0b3IgPSBpbnRyX2luZm8gXFx1MDAyNiBJTlRSX0lORk9fVkVDVE9SX01BU0s7XFxuK1xcbitcXHRpZiAoS1ZNX0JVRyghaXNfZXh0ZXJuYWxfaW50cihpbnRyX2luZm8pLCB2Y3B1LVxcdTAwM2Vrdm0sXFxuK1xcdCAgICBcXFwidW5leHBlY3RlZCBWTS1FeGl0IGludGVycnVwdCBpbmZvOiAweCV4XFxcIiwgaW50cl9pbmZvKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0a3ZtX2JlZm9yZV9pbnRlcnJ1cHQodmNwdSwgS1ZNX0hBTkRMSU5HX0lSUSk7XFxuK1xcdHg4Nl9lbnRyeV9mcm9tX2t2bShFVkVOVF9UWVBFX0VYVElOVCwgdmVjdG9yKTtcXG4rXFx0a3ZtX2FmdGVyX2ludGVycnVwdCh2Y3B1KTtcXG4rXFxuK1xcdHZjcHUtXFx1MDAzZWFyY2guYXRfaW5zdHJ1Y3Rpb25fYm91bmRhcnkgPSB0cnVlO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB2dF9oYW5kbGVfZXhpdF9pcnFvZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbit7XFxuK1xcdGlmICh0b192dCh2Y3B1KS1cXHUwMDNlZW11bGF0aW9uX3JlcXVpcmVkKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzd2l0Y2ggKHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYykge1xcbitcXHRjYXNlIEVYSVRfUkVBU09OX0VYVEVSTkFMX0lOVEVSUlVQVDpcXG4rXFx0XFx0aGFuZGxlX2V4dGVybmFsX2ludGVycnVwdF9pcnFvZmYodmNwdSwgdnRfZ2V0X2ludHJfaW5mbyh2Y3B1KSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUk6XFxuK1xcdFxcdGhhbmRsZV9leGNlcHRpb25faXJxb2ZmKHZjcHUsIHZ0X2dldF9pbnRyX2luZm8odmNwdSkpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBFWElUX1JFQVNPTl9NQ0VfRFVSSU5HX1ZNRU5UUlk6XFxuK1xcdFxcdGt2bV9tYWNoaW5lX2NoZWNrKCk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbit9XFxuK1xcbitub2luc3RyIHZvaWQgdnRfaGFuZGxlX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuK3tcXG4rXFx0aWYgKCh1MTYpdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljICE9IEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUkgfHxcXG4rXFx0ICAgICFpc19ubWkodnRfZ2V0X2ludHJfaW5mbyh2Y3B1KSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGt2bV9iZWZvcmVfaW50ZXJydXB0KHZjcHUsIEtWTV9IQU5ETElOR19OTUkpO1xcbitcXHR4ODZfZW50cnlfZnJvbV9rdm0oRVZFTlRfVFlQRV9OTUksIE5NSV9WRUNUT1IpO1xcbitcXHRrdm1fYWZ0ZXJfaW50ZXJydXB0KHZjcHUpO1xcbit9XFxuK1xcbiAjZGVmaW5lIFZNWF9SRVFVSVJFRF9BUElDVl9JTkhJQklUU1xcdFxcdFxcdFxcdFxcXFxcXG4gXFx0KEJJVChBUElDVl9JTkhJQklUX1JFQVNPTl9ESVNBQkxFRCkgfFxcdFxcdFxcdFxcXFxcXG4gXFx0IEJJVChBUElDVl9JTkhJQklUX1JFQVNPTl9BQlNFTlQpIHxcXHRcXHRcXHRcXFxcXFxuQEAgLTEwMDAsMTIgKzEwODQsMTIgQEAgc3RydWN0IGt2bV94ODZfb3BzIHZ0X3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcXG4gXFx0LmxvYWRfbW11X3BnZCA9IHZ0X29wKGxvYWRfbW11X3BnZCksXFxuIFxcbiBcXHQuY2hlY2tfaW50ZXJjZXB0ID0gdm14X2NoZWNrX2ludGVyY2VwdCxcXG4tXFx0LmhhbmRsZV9leGl0X2lycW9mZiA9IHZteF9oYW5kbGVfZXhpdF9pcnFvZmYsXFxuK1xcdC5oYW5kbGVfZXhpdF9pcnFvZmYgPSB2dF9oYW5kbGVfZXhpdF9pcnFvZmYsXFxuIFxcbiBcXHQudXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nID0gdnRfb3AodXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKSxcXG4gXFxuLVxcdC5waV91cGRhdGVfaXJ0ZSA9IHZteF9waV91cGRhdGVfaXJ0ZSxcXG4tXFx0LnBpX3N0YXJ0X2J5cGFzcyA9IHZteF9waV9zdGFydF9ieXBhc3MsXFxuK1xcdC5waV91cGRhdGVfaXJ0ZSA9IHZ0X3BpX3VwZGF0ZV9pcnRlLFxcbitcXHQucGlfc3RhcnRfYnlwYXNzID0gdnRfcGlfc3RhcnRfYnlwYXNzLFxcbiBcXG4gI2lmZGVmIENPTkZJR19YODZfNjRcXG4gXFx0LnNldF9odl90aW1lciA9IHZ0X29wKHNldF9odl90aW1lciksXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXFxuaW5kZXggMTUxODczNDA3YWJkMy4uNDc1OTllNzMxMmNmZCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xcbkBAIC00NDYsNyArNDQ2LDcgQEAgc3RhdGljIHZvaWQgbmVzdGVkX2VwdF9pbmplY3RfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIFxcdFxcdCAqIFxcXCJOTUkgdW5ibG9ja2luZyBkdWUgdG8gSVJFVFxcXCIsIGkuZS4gdGhlIGJpdCBjYW4gYmUgcHJvcGFnYXRlZFxcbiBcXHRcXHQgKiBhcy1pcyBmcm9tIHRoZSBvcmlnaW5hbCBFWElUX1FVQUxJRklDQVRJT04uXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSBcXHUwMDI2IElOVFJfSU5GT19VTkJMT0NLX05NSTtcXG4rXFx0XFx0ZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KSBcXHUwMDI2IElOVFJfSU5GT19VTkJMT0NLX05NSTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0aWYgKGZhdWx0LVxcdTAwM2VlcnJvcl9jb2RlIFxcdTAwMjYgUEZFUlJfUlNWRF9NQVNLKSB7XFxuIFxcdFxcdFxcdHZtX2V4aXRfcmVhc29uID0gRVhJVF9SRUFTT05fRVBUX01JU0NPTkZJRztcXG5AQCAtNDcyLDcgKzQ3Miw3IEBAIHN0YXRpYyB2b2lkIG5lc3RlZF9lcHRfaW5qZWN0X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRcXHRcXHQgKiBhbmQgd2Fsa3MgdGhlIGZhdWx0aW5nIEdQQS5cXG4gXFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdGlmIChmcm9tX2hhcmR3YXJlKVxcbi1cXHRcXHRcXHRcXHRleGl0X3F1YWxpZmljYXRpb24gfD0gdm14X2dldF9leGl0X3F1YWwodmNwdSkgXFx1MDAyNiBtYXNrO1xcbitcXHRcXHRcXHRcXHRleGl0X3F1YWxpZmljYXRpb24gfD0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KSBcXHUwMDI2IG1hc2s7XFxuIFxcdFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0XFx0ZXhpdF9xdWFsaWZpY2F0aW9uIHw9IGZhdWx0LVxcdTAwM2VleGl0X3F1YWxpZmljYXRpb24gXFx1MDAyNiBtYXNrO1xcbiBcXG5AQCAtNDc0Nyw3ICs0NzQ3LDcgQEAgc3RhdGljIHZvaWQgcHJlcGFyZV92bWNzMTIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgdm1jczEyICp2bWNzMTIsXFxuIHtcXG4gXFx0LyogdXBkYXRlIGV4aXQgaW5mb3JtYXRpb24gZmllbGRzOiAqL1xcbiBcXHR2bWNzMTItXFx1MDAzZXZtX2V4aXRfcmVhc29uID0gdm1fZXhpdF9yZWFzb247XFxuLVxcdGlmICh2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmVuY2xhdmVfbW9kZSlcXG4rXFx0aWYgKHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5lbmNsYXZlX21vZGUpXFxuIFxcdFxcdHZtY3MxMi1cXHUwMDNldm1fZXhpdF9yZWFzb24gfD0gVk1YX0VYSVRfUkVBU09OU19TR1hfRU5DTEFWRV9NT0RFO1xcbiBcXHR2bWNzMTItXFx1MDAzZWV4aXRfcXVhbGlmaWNhdGlvbiA9IGV4aXRfcXVhbGlmaWNhdGlvbjtcXG4gXFxuQEAgLTUzNzMsNyArNTM3Myw3IEBAIHN0YXRpYyBpbnQgbmVzdGVkX3ZteF9nZXRfdm1wdHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCAqdm1wb2ludGVyLFxcbiBcXHRzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBlO1xcbiBcXHRpbnQgcjtcXG4gXFxuLVxcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxcbitcXHRpZiAoZ2V0X3ZteF9tZW1fYWRkcmVzcyh2Y3B1LCB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxcbiBcXHRcXHRcXHRcXHR2bWNzX3JlYWQzMihWTVhfSU5TVFJVQ1RJT05fSU5GTyksIGZhbHNlLFxcbiBcXHRcXHRcXHRcXHRzaXplb2YoKnZtcG9pbnRlciksIFxcdTAwMjZndmEpKSB7XFxuIFxcdFxcdCpyZXQgPSAxO1xcbkBAIC01NjY1LDcgKzU2NjUsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXJlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdHN0cnVjdCB2bWNzMTIgKnZtY3MxMiA9IGlzX2d1ZXN0X21vZGUodmNwdSkgPyBnZXRfc2hhZG93X3ZtY3MxMih2Y3B1KVxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgOiBnZXRfdm1jczEyKHZjcHUpO1xcbi1cXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xcbitcXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XFxuIFxcdHUzMiBpbnN0cl9pbmZvID0gdm1jc19yZWFkMzIoVk1YX0lOU1RSVUNUSU9OX0lORk8pO1xcbiBcXHRzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTtcXG4gXFx0c3RydWN0IHg4Nl9leGNlcHRpb24gZTtcXG5AQCAtNTc3MSw3ICs1NzcxLDcgQEAgc3RhdGljIGludCBoYW5kbGVfdm13cml0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0c3RydWN0IHZtY3MxMiAqdm1jczEyID0gaXNfZ3Vlc3RfbW9kZSh2Y3B1KSA/IGdldF9zaGFkb3dfdm1jczEyKHZjcHUpXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICA6IGdldF92bWNzMTIodmNwdSk7XFxuLVxcdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcXG4gXFx0dTMyIGluc3RyX2luZm8gPSB2bWNzX3JlYWQzMihWTVhfSU5TVFJVQ1RJT05fSU5GTyk7XFxuIFxcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xcbiBcXHRzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBlO1xcbkBAIC01OTYwLDcgKzU5NjAsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXB0cmxkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gLyogRW11bGF0ZSB0aGUgVk1QVFJTVCBpbnN0cnVjdGlvbiAqL1xcbiBzdGF0aWMgaW50IGhhbmRsZV92bXB0cnN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xcbitcXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XFxuIFxcdHUzMiBpbnN0cl9pbmZvID0gdm1jc19yZWFkMzIoVk1YX0lOU1RSVUNUSU9OX0lORk8pO1xcbiBcXHRncGFfdCBjdXJyZW50X3ZtcHRyID0gdG9fdm14KHZjcHUpLVxcdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0cjtcXG4gXFx0c3RydWN0IHg4Nl9leGNlcHRpb24gZTtcXG5AQCAtNjAyMSw3ICs2MDIxLDcgQEAgc3RhdGljIGludCBoYW5kbGVfaW52ZXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0LyogQWNjb3JkaW5nIHRvIHRoZSBJbnRlbCBWTVggaW5zdHJ1Y3Rpb24gcmVmZXJlbmNlLCB0aGUgbWVtb3J5XFxuIFxcdCAqIG9wZXJhbmQgaXMgcmVhZCBldmVuIGlmIGl0IGlzbid0IG5lZWRlZCAoZS5nLiwgZm9yIHR5cGU9PWdsb2JhbClcXG4gXFx0ICovXFxuLVxcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxcbitcXHRpZiAoZ2V0X3ZteF9tZW1fYWRkcmVzcyh2Y3B1LCB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxcbiBcXHRcXHRcXHR2bXhfaW5zdHJ1Y3Rpb25faW5mbywgZmFsc2UsIHNpemVvZihvcGVyYW5kKSwgXFx1MDAyNmd2YSkpXFxuIFxcdFxcdHJldHVybiAxO1xcbiBcXHRyID0ga3ZtX3JlYWRfZ3Vlc3RfdmlydCh2Y3B1LCBndmEsIFxcdTAwMjZvcGVyYW5kLCBzaXplb2Yob3BlcmFuZCksIFxcdTAwMjZlKTtcXG5AQCAtNjEwNCw3ICs2MTA0LDcgQEAgc3RhdGljIGludCBoYW5kbGVfaW52dnBpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdC8qIGFjY29yZGluZyB0byB0aGUgaW50ZWwgdm14IGluc3RydWN0aW9uIHJlZmVyZW5jZSwgdGhlIG1lbW9yeVxcbiBcXHQgKiBvcGVyYW5kIGlzIHJlYWQgZXZlbiBpZiBpdCBpc24ndCBuZWVkZWQgKGUuZy4sIGZvciB0eXBlPT1nbG9iYWwpXFxuIFxcdCAqL1xcbi1cXHRpZiAoZ2V0X3ZteF9tZW1fYWRkcmVzcyh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSxcXG4rXFx0aWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KSxcXG4gXFx0XFx0XFx0dm14X2luc3RydWN0aW9uX2luZm8sIGZhbHNlLCBzaXplb2Yob3BlcmFuZCksIFxcdTAwMjZndmEpKVxcbiBcXHRcXHRyZXR1cm4gMTtcXG4gXFx0ciA9IGt2bV9yZWFkX2d1ZXN0X3ZpcnQodmNwdSwgZ3ZhLCBcXHUwMDI2b3BlcmFuZCwgc2l6ZW9mKG9wZXJhbmQpLCBcXHUwMDI2ZSk7XFxuQEAgLTYyMzYsOCArNjIzNiw4IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3ZtZnVuYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdCAqIEVYSVRfUkVBU09OX1ZNRlVOQyBhcyB0aGUgZXhpdCByZWFzb24uXFxuIFxcdCAqL1xcbiBcXHRuZXN0ZWRfdm14X3ZtZXhpdCh2Y3B1LCB2bXgtXFx1MDAzZXZ0LmV4aXRfcmVhc29uLmZ1bGwsXFxuLVxcdFxcdFxcdCAgdm14X2dldF9pbnRyX2luZm8odmNwdSksXFxuLVxcdFxcdFxcdCAgdm14X2dldF9leGl0X3F1YWwodmNwdSkpO1xcbitcXHRcXHRcXHQgIHZ0X2dldF9pbnRyX2luZm8odmNwdSksXFxuK1xcdFxcdFxcdCAgdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KSk7XFxuIFxcdHJldHVybiAxO1xcbiB9XFxuIFxcbkBAIC02Mjg4LDcgKzYyODgsNyBAQCBzdGF0aWMgYm9vbCBuZXN0ZWRfdm14X2V4aXRfaGFuZGxlZF9pbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIFxcdGlmICghbmVzdGVkX2NwdV9oYXModm1jczEyLCBDUFVfQkFTRURfVVNFX0lPX0JJVE1BUFMpKVxcbiBcXHRcXHRyZXR1cm4gbmVzdGVkX2NwdV9oYXModm1jczEyLCBDUFVfQkFTRURfVU5DT05EX0lPX0VYSVRJTkcpO1xcbiBcXG4tXFx0ZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XFxuK1xcdGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XFxuIFxcbiBcXHRwb3J0ID0gZXhpdF9xdWFsaWZpY2F0aW9uIFxcdTAwM2VcXHUwMDNlIDE2O1xcbiBcXHRzaXplID0gKGV4aXRfcXVhbGlmaWNhdGlvbiBcXHUwMDI2IDcpICsgMTtcXG5AQCAtNjMxNCw3ICs2MzE0LDcgQEAgc3RhdGljIGJvb2wgbmVzdGVkX3ZteF9leGl0X2hhbmRsZWRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFxuIFxcdGlmIChleGl0X3JlYXNvbi5iYXNpYyA9PSBFWElUX1JFQVNPTl9NU1JfUkVBRF9JTU0gfHxcXG4gXFx0ICAgIGV4aXRfcmVhc29uLmJhc2ljID09IEVYSVRfUkVBU09OX01TUl9XUklURV9JTU0pXFxuLVxcdFxcdG1zcl9pbmRleCA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xcbitcXHRcXHRtc3JfaW5kZXggPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xcbiBcXHRlbHNlXFxuIFxcdFxcdG1zcl9pbmRleCA9IGt2bV9lY3hfcmVhZCh2Y3B1KTtcXG4gXFxuQEAgLTYzNTAsNyArNjM1MCw3IEBAIHN0YXRpYyBib29sIG5lc3RlZF92bXhfZXhpdF9oYW5kbGVkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIHN0YXRpYyBib29sIG5lc3RlZF92bXhfZXhpdF9oYW5kbGVkX2NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFx0c3RydWN0IHZtY3MxMiAqdm1jczEyKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcXG4gXFx0aW50IGNyID0gZXhpdF9xdWFsaWZpY2F0aW9uIFxcdTAwMjYgMTU7XFxuIFxcdGludCByZWc7XFxuIFxcdHVuc2lnbmVkIGxvbmcgdmFsO1xcbkBAIC02NDg0LDcgKzY0ODQsNyBAQCBzdGF0aWMgYm9vbCBuZXN0ZWRfdm14X2wwX3dhbnRzX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXG4gXFx0c3dpdGNoICgodTE2KWV4aXRfcmVhc29uLmJhc2ljKSB7XFxuIFxcdGNhc2UgRVhJVF9SRUFTT05fRVhDRVBUSU9OX05NSTpcXG4tXFx0XFx0aW50cl9pbmZvID0gdm14X2dldF9pbnRyX2luZm8odmNwdSk7XFxuK1xcdFxcdGludHJfaW5mbyA9IHZ0X2dldF9pbnRyX2luZm8odmNwdSk7XFxuIFxcdFxcdGlmIChpc19ubWkoaW50cl9pbmZvKSlcXG4gXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdFxcdGVsc2UgaWYgKGlzX3BhZ2VfZmF1bHQoaW50cl9pbmZvKSlcXG5AQCAtNjU2Nyw3ICs2NTY3LDcgQEAgc3RhdGljIGJvb2wgbmVzdGVkX3ZteF9sMV93YW50c19leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFxuIFxcdHN3aXRjaCAoKHUxNilleGl0X3JlYXNvbi5iYXNpYykge1xcbiBcXHRjYXNlIEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUk6XFxuLVxcdFxcdGludHJfaW5mbyA9IHZteF9nZXRfaW50cl9pbmZvKHZjcHUpO1xcbitcXHRcXHRpbnRyX2luZm8gPSB2dF9nZXRfaW50cl9pbmZvKHZjcHUpO1xcbiBcXHRcXHRpZiAoaXNfbm1pKGludHJfaW5mbykpXFxuIFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHRcXHRlbHNlIGlmIChpc19wYWdlX2ZhdWx0KGludHJfaW5mbykpXFxuQEAgLTY3MzcsMTQgKzY3MzcsMTQgQEAgYm9vbCBuZXN0ZWRfdm14X3JlZmxlY3Rfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0ICogbmVlZCB0byBiZSBzeW50aGVzaXplZCBieSBxdWVyeWluZyB0aGUgaW4ta2VybmVsIExBUElDLCBidXQgZXh0ZXJuYWxcXG4gXFx0ICogaW50ZXJydXB0cyBhcmUgbmV2ZXIgcmVmbGVjdGVkIHRvIEwxIHNvIGl0J3MgYSBub24taXNzdWUuXFxuIFxcdCAqL1xcbi1cXHRleGl0X2ludHJfaW5mbyA9IHZteF9nZXRfaW50cl9pbmZvKHZjcHUpO1xcbitcXHRleGl0X2ludHJfaW5mbyA9IHZ0X2dldF9pbnRyX2luZm8odmNwdSk7XFxuIFxcdGlmIChpc19leGNlcHRpb25fd2l0aF9lcnJvcl9jb2RlKGV4aXRfaW50cl9pbmZvKSkge1xcbiBcXHRcXHRzdHJ1Y3Qgdm1jczEyICp2bWNzMTIgPSBnZXRfdm1jczEyKHZjcHUpO1xcbiBcXG4gXFx0XFx0dm1jczEyLVxcdTAwM2V2bV9leGl0X2ludHJfZXJyb3JfY29kZSA9XFxuIFxcdFxcdFxcdHZtY3NfcmVhZDMyKFZNX0VYSVRfSU5UUl9FUlJPUl9DT0RFKTtcXG4gXFx0fVxcbi1cXHRleGl0X3F1YWwgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcXG4rXFx0ZXhpdF9xdWFsID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcXG4gXFxuIHJlZmxlY3Rfdm1leGl0OlxcbiBcXHRuZXN0ZWRfdm14X3ZtZXhpdCh2Y3B1LCBleGl0X3JlYXNvbi5mdWxsLCBleGl0X2ludHJfaW5mbywgZXhpdF9xdWFsKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5jIGIvYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5jXFxuaW5kZXggNGE2ZDlhMTdkYTIzOC4uMjY0NGFkZDU0Yjc2YiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmNcXG5AQCAtMTQsNiArMTQsOCBAQFxcbiAjaW5jbHVkZSBcXFwidm14LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ0ZHguaFxcXCJcXG4gXFxuKyNwcmFnbWEgR0NDIHBvaXNvbiB0b192bXhcXG4rXFxuIC8qXFxuICAqIE1haW50YWluIGEgcGVyLUNQVSBsaXN0IG9mIHZDUFVzIHRoYXQgbmVlZCB0byBiZSBhd2FrZW5lZCBieSB3YWtldXBfaGFuZGxlcigpXFxuICAqIHdoZW4gYSBXQUtFVVBfVkVDVE9SIGludGVycnVwdGVkIGlzIHBvc3RlZC4gIHZDUFVzIGFyZSBhZGRlZCB0byB0aGUgbGlzdCB3aGVuXFxuQEAgLTU0LDcgKzU2LDcgQEAgc3RhdGljIGludCBwaV90cnlfc2V0X2NvbnRyb2woc3RydWN0IHBpX2Rlc2MgKnBpX2Rlc2MsIHU2NCAqcG9sZCwgdTY0IG5ldylcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXZvaWQgdm14X3ZjcHVfcGlfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXFxuK3ZvaWQgdnRfdmNwdV9waV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcXG4ge1xcbiBcXHRzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYyA9IHZjcHVfdG9fcGlfZGVzYyh2Y3B1KTtcXG4gXFx0c3RydWN0IHZjcHVfdnQgKnZ0ID0gdG9fdnQodmNwdSk7XFxuQEAgLTE0NCwxMSArMTQ2LDExIEBAIHZvaWQgdm14X3ZjcHVfcGlfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXFxuIFxcdFxcdHBpX3NldF9vbihwaV9kZXNjKTtcXG4gfVxcbiBcXG4tc3RhdGljIGJvb2wgdm14X2Nhbl91c2VfdnRkX3BpKHN0cnVjdCBrdm0gKmt2bSlcXG4rc3RhdGljIGJvb2wgdnRfY2FuX3VzZV92dGRfcGkoc3RydWN0IGt2bSAqa3ZtKVxcbiB7XFxuIFxcdC8qXFxuIFxcdCAqIE5vdGUsIHJlYWRpbmcgdGhlIG51bWJlciBvZiBwb3NzaWJsZSBieXBhc3MgSVJRcyBjYW4gcmFjZSB3aXRoIGFcXG4tXFx0ICogYnlwYXNzIElSUSBiZWluZyBhdHRhY2hlZCB0byB0aGUgVk0uICB2bXhfcGlfc3RhcnRfYnlwYXNzKCkgZW5zdXJlc1xcbitcXHQgKiBieXBhc3MgSVJRIGJlaW5nIGF0dGFjaGVkIHRvIHRoZSBWTS4gIHZ0X3BpX3N0YXJ0X2J5cGFzcygpIGVuc3VyZXNcXG4gXFx0ICogYmxvY2tuZyB2Q1BVcyB3aWxsIHNlZSBhbiBlbGV2YXRlZCBjb3VudCBvciBnZXQgS1ZNX1JFUV9VTkJMT0NLLlxcbiBcXHQgKi9cXG4gXFx0cmV0dXJuIGlycWNoaXBfaW5fa2VybmVsKGt2bSkgXFx1MDAyNlxcdTAwMjYga3ZtX2FyY2hfaGFzX2lycV9ieXBhc3MoKSBcXHUwMDI2XFx1MDAyNlxcbkBAIC0yMDYsNyArMjA4LDcgQEAgc3RhdGljIHZvaWQgcGlfZW5hYmxlX3dha2V1cF9oYW5kbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0X19hcGljX3NlbmRfSVBJX3NlbGYoUE9TVEVEX0lOVFJfV0FLRVVQX1ZFQ1RPUik7XFxuIH1cXG4gXFxuLXN0YXRpYyBib29sIHZteF9uZWVkc19waV93YWtldXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbitzdGF0aWMgYm9vbCB2dF9uZWVkc19waV93YWtldXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdC8qXFxuIFxcdCAqIFRoZSBkZWZhdWx0IHBvc3RlZCBpbnRlcnJ1cHQgdmVjdG9yIGRvZXMgbm90aGluZyB3aGVuXFxuQEAgLTIxNywxNCArMjE5LDE0IEBAIHN0YXRpYyBib29sIHZteF9uZWVkc19waV93YWtldXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHQgKiBiYWNrIHRvIHRoZSBwaV93YWtldXBfaGFuZGxlcigpIGZ1bmN0aW9uLlxcbiBcXHQgKi9cXG4gXFx0cmV0dXJuICh2bXhfY2FuX3VzZV9pcGl2KHZjcHUpIFxcdTAwMjZcXHUwMDI2ICFpc190ZF92Y3B1KHZjcHUpKSB8fFxcbi1cXHRcXHR2bXhfY2FuX3VzZV92dGRfcGkodmNwdS1cXHUwMDNla3ZtKTtcXG4rXFx0XFx0dnRfY2FuX3VzZV92dGRfcGkodmNwdS1cXHUwMDNla3ZtKTtcXG4gfVxcbiBcXG4tdm9pZCB2bXhfdmNwdV9waV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbit2b2lkIHZ0X3ZjcHVfcGlfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbiBcXHRzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYyA9IHZjcHVfdG9fcGlfZGVzYyh2Y3B1KTtcXG4gXFxuLVxcdGlmICghdm14X25lZWRzX3BpX3dha2V1cCh2Y3B1KSlcXG4rXFx0aWYgKCF2dF9uZWVkc19waV93YWtldXAodmNwdSkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdC8qXFxuQEAgLTI5MiwxNyArMjk0LDE3IEBAIGJvb2wgcGlfaGFzX3BlbmRpbmdfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gLypcXG4gICogS2ljayBhbGwgdkNQVXMgd2hlbiB0aGUgZmlyc3QgcG9zc2libGUgYnlwYXNzIElSUSBpcyBhdHRhY2hlZCB0byBhIFZNLCBhc1xcbiAgKiBibG9ja2luZyB2Q1BVcyBtYXkgc2NoZWR1bGVkIG91dCB3aXRob3V0IHJlY29uZmlndXJpbmcgUElELk5WIHRvIHRoZSB3YWtldXBcXG4tICogdmVjdG9yLCBpLmUuIGlmIHRoZSBieXBhc3MgSVJRIGNhbWUgYWxvbmcgYWZ0ZXIgdm14X3ZjcHVfcGlfcHV0KCkuXFxuKyAqIHZlY3RvciwgaS5lLiBpZiB0aGUgYnlwYXNzIElSUSBjYW1lIGFsb25nIGFmdGVyIHZ0X3ZjcHVfcGlfcHV0KCkuXFxuICAqL1xcbi12b2lkIHZteF9waV9zdGFydF9ieXBhc3Moc3RydWN0IGt2bSAqa3ZtKVxcbit2b2lkIHZ0X3BpX3N0YXJ0X2J5cGFzcyhzdHJ1Y3Qga3ZtICprdm0pXFxuIHtcXG4tXFx0aWYgKFdBUk5fT05fT05DRSghdm14X2Nhbl91c2VfdnRkX3BpKGt2bSkpKVxcbitcXHRpZiAoV0FSTl9PTl9PTkNFKCF2dF9jYW5fdXNlX3Z0ZF9waShrdm0pKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0a3ZtX21ha2VfYWxsX2NwdXNfcmVxdWVzdChrdm0sIEtWTV9SRVFfVU5CTE9DSyk7XFxuIH1cXG4gXFxuLWludCB2bXhfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sXFxuK2ludCB2dF9waV91cGRhdGVfaXJ0ZShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQsIHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBob3N0X2lycSwgdWludDMyX3QgZ3Vlc3RfaXJxLFxcbiBcXHRcXHQgICAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdmVjdG9yKVxcbiB7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuaCBiL2FyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuaFxcbmluZGV4IGE0YWYzOTk0OGNmMDQuLmM1ODYwZWE4MjhhZTkgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5oXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5oXFxuQEAgLTgsMTYgKzgsMTYgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vcG9zdGVkX2ludHIuaFxcdTAwM2VcXG4gXFxuLXZvaWQgdm14X3ZjcHVfcGlfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpO1xcbi12b2lkIHZteF92Y3B1X3BpX3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbit2b2lkIHZ0X3ZjcHVfcGlfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpO1xcbit2b2lkIHZ0X3ZjcHVfcGlfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIHZvaWQgcGlfd2FrZXVwX2hhbmRsZXIodm9pZCk7XFxuIHZvaWQgX19pbml0IHBpX2luaXRfY3B1KGludCBjcHUpO1xcbiB2b2lkIHBpX2FwaWN2X3ByZV9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIGJvb2wgcGlfaGFzX3BlbmRpbmdfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuLWludCB2bXhfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sXFxuK2ludCB2dF9waV91cGRhdGVfaXJ0ZShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQsIHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBob3N0X2lycSwgdWludDMyX3QgZ3Vlc3RfaXJxLFxcbiBcXHRcXHQgICAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdmVjdG9yKTtcXG4tdm9pZCB2bXhfcGlfc3RhcnRfYnlwYXNzKHN0cnVjdCBrdm0gKmt2bSk7XFxuK3ZvaWQgdnRfcGlfc3RhcnRfYnlwYXNzKHN0cnVjdCBrdm0gKmt2bSk7XFxuIFxcbiBzdGF0aWMgaW5saW5lIGludCBwaV9maW5kX2hpZ2hlc3RfdmVjdG9yKHN0cnVjdCBwaV9kZXNjICpwaV9kZXNjKVxcbiB7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXFxuaW5kZXggYjI3MmMyMDU4NmE3NC4uZWZiYjFhYzZmNTFlYSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xcbkBAIC03MTYsNyArNzE2LDcgQEAgdm9pZCB0ZHhfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcXG4ge1xcbiBcXHRzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTtcXG4gXFxuLVxcdHZteF92Y3B1X3BpX2xvYWQodmNwdSwgY3B1KTtcXG4rXFx0dnRfdmNwdV9waV9sb2FkKHZjcHUsIGNwdSk7XFxuIFxcdGlmICh2Y3B1LVxcdTAwM2VjcHUgPT0gY3B1IHx8ICFpc19oa2lkX2Fzc2lnbmVkKHRvX2t2bV90ZHgodmNwdS1cXHUwMDNla3ZtKSkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuQEAgLTc0MSw3ICs3NDEsNyBAQCBib29sIHRkeF9pbnRlcnJ1cHRfYWxsb3dlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdCAqIGludGVycnVwdCBpcyBhbHdheXMgYWxsb3dlZCB1bmxlc3MgVERYIGd1ZXN0IGNhbGxzIFREVk1DQUxMIHdpdGggSExULFxcbiBcXHQgKiB3aGljaCBwYXNzZXMgdGhlIGludGVycnVwdCBibG9ja2VkIGZsYWcuXFxuIFxcdCAqL1xcbi1cXHRyZXR1cm4gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYyAhPSBFWElUX1JFQVNPTl9ITFQgfHxcXG4rXFx0cmV0dXJuIHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYyAhPSBFWElUX1JFQVNPTl9ITFQgfHxcXG4gXFx0ICAgICAgICF0b190ZHgodmNwdSktXFx1MDAzZXZwX2VudGVyX2FyZ3MucjEyO1xcbiB9XFxuIFxcbkBAIC03NTksNyArNzU5LDcgQEAgc3RhdGljIGJvb2wgdGR4X3Byb3RlY3RlZF9hcGljX2hhc19pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHQgKiBvdGhlcndpc2UgdGhlIGludGVycnVwdCB3b3VsZCBoYXZlIGJlZW4gc2VydmljZWQgYXQgdGhlIGluc3RydWN0aW9uXFxuIFxcdCAqIGJvdW5kYXJ5LlxcbiBcXHQgKi9cXG4tXFx0aWYgKHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMgIT0gRVhJVF9SRUFTT05fSExUIHx8XFxuK1xcdGlmICh2dF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMgIT0gRVhJVF9SRUFTT05fSExUIHx8XFxuIFxcdCAgICB0b190ZHgodmNwdSktXFx1MDAzZXZwX2VudGVyX2FyZ3MucjEyKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbkBAIC04MjYsNyArODI2LDcgQEAgc3RhdGljIHZvaWQgdGR4X3ByZXBhcmVfc3dpdGNoX3RvX2hvc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXG4gdm9pZCB0ZHhfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuLVxcdHZteF92Y3B1X3BpX3B1dCh2Y3B1KTtcXG4rXFx0dnRfdmNwdV9waV9wdXQodmNwdSk7XFxuIFxcdHRkeF9wcmVwYXJlX3N3aXRjaF90b19ob3N0KHZjcHUpO1xcbiB9XFxuIFxcbkBAIC05NzQsMTUgKzk3NCwxNSBAQCBzdGF0aWMgbm9pbnN0ciB2b2lkIHRkeF92Y3B1X2VudGVyX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHR0ZHgtXFx1MDAzZWV4aXRfZ3BhID0gdGR4LVxcdTAwM2V2cF9lbnRlcl9hcmdzLnI4O1xcbiBcXHR2dC1cXHUwMDNlZXhpdF9pbnRyX2luZm8gPSB0ZHgtXFx1MDAzZXZwX2VudGVyX2FyZ3Mucjk7XFxuIFxcbi1cXHR2bXhfaGFuZGxlX25taSh2Y3B1KTtcXG4rXFx0dnRfaGFuZGxlX25taSh2Y3B1KTtcXG4gXFxuIFxcdGd1ZXN0X3N0YXRlX2V4aXRfaXJxb2ZmKCk7XFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIHRkeF9mYWlsZWRfdm1lbnRyeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4tXFx0cmV0dXJuIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgICAgIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZnVsbCAhPSAtMXU7XFxuK1xcdHJldHVybiB2dF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mdWxsICE9IC0xdTtcXG4gfVxcbiBcXG4gc3RhdGljIGZhc3RwYXRoX3QgdGR4X2V4aXRfaGFuZGxlcnNfZmFzdHBhdGgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbkBAIC0xMTMxLDcgKzExMzEsNyBAQCB2b2lkIHRkeF9pbmplY3Rfbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFxuIHN0YXRpYyBpbnQgdGR4X2hhbmRsZV9leGNlcHRpb25fbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbi1cXHR1MzIgaW50cl9pbmZvID0gdm14X2dldF9pbnRyX2luZm8odmNwdSk7XFxuK1xcdHUzMiBpbnRyX2luZm8gPSB2dF9nZXRfaW50cl9pbmZvKHZjcHUpO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogTWFjaGluZSBjaGVja3MgYXJlIGhhbmRsZWQgYnkgaGFuZGxlX2V4Y2VwdGlvbl9pcnFvZmYoKSwgb3IgYnlcXG5AQCAtMTg5NSw3ICsxODk1LDcgQEAgdm9pZCB0ZHhfZGVsaXZlcl9pbnRlcnJ1cHQoc3RydWN0IGt2bV9sYXBpYyAqYXBpYywgaW50IGRlbGl2ZXJ5X21vZGUsXFxuIFxcdHN0cnVjdCB2Y3B1X3RkeCAqdGR4ID0gdG9fdGR4KHZjcHUpO1xcbiBcXG4gXFx0LyogVERYIHN1cHBvcnRzIG9ubHkgcG9zdGVkIGludGVycnVwdC4gIE5vIGxhcGljIGVtdWxhdGlvbi4gKi9cXG4tXFx0X192bXhfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0KHZjcHUsIFxcdTAwMjZ0ZHgtXFx1MDAzZXZ0LnBpX2Rlc2MsIHZlY3Rvcik7XFxuK1xcdF9fdnRfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0KHZjcHUsIFxcdTAwMjZ0ZHgtXFx1MDAzZXZ0LnBpX2Rlc2MsIHZlY3Rvcik7XFxuIFxcbiBcXHR0cmFjZV9rdm1fYXBpY3ZfYWNjZXB0X2lycSh2Y3B1LVxcdTAwM2V2Y3B1X2lkLCBkZWxpdmVyeV9tb2RlLCB0cmlnX21vZGUsIHZlY3Rvcik7XFxuIH1cXG5AQCAtMTkwMyw3ICsxOTAzLDcgQEAgdm9pZCB0ZHhfZGVsaXZlcl9pbnRlcnJ1cHQoc3RydWN0IGt2bV9sYXBpYyAqYXBpYywgaW50IGRlbGl2ZXJ5X21vZGUsXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB0ZHhfaXNfc2VwdF92aW9sYXRpb25fdW5leHBlY3RlZF9wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbiBcXHR1NjQgZWVxX3R5cGUgPSB0b190ZHgodmNwdSktXFx1MDAzZWV4dF9leGl0X3F1YWxpZmljYXRpb24gXFx1MDAyNiBURFhfRVhUX0VYSVRfUVVBTF9UWVBFX01BU0s7XFxuLVxcdHU2NCBlcSA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xcbitcXHR1NjQgZXEgPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xcbiBcXG4gXFx0aWYgKGVlcV90eXBlICE9IFREWF9FWFRfRVhJVF9RVUFMX1RZUEVfUEVORElOR19FUFRfVklPTEFUSU9OKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuQEAgLTE5MzksNyArMTkzOSw3IEBAIHN0YXRpYyBpbnQgdGR4X2hhbmRsZV9lcHRfdmlvbGF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0LyogT25seSBwcml2YXRlIEdQQSB0cmlnZ2VycyB6ZXJvLXN0ZXAgbWl0aWdhdGlvbiAqL1xcbiBcXHRcXHRsb2NhbF9yZXRyeSA9IHRydWU7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdGV4aXRfcXVhbCA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xcbitcXHRcXHRleGl0X3F1YWwgPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBFUFQgdmlvbGF0aW9uIGR1ZSB0byBpbnN0cnVjdGlvbiBmZXRjaCBzaG91bGQgbmV2ZXIgYmVcXG4gXFx0XFx0ICogdHJpZ2dlcmVkIGZyb20gc2hhcmVkIG1lbW9yeSBpbiBURFggZ3Vlc3QuICBJZiBzdWNoIEVQVFxcbkBAIC0xOTg3LDcgKzE5ODcsNyBAQCBzdGF0aWMgaW50IHRkeF9oYW5kbGVfZXB0X3Zpb2xhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdHdoaWxlICgxKSB7XFxuIFxcdFxcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7XFxuIFxcbi1cXHRcXHRyZXQgPSBfX3ZteF9oYW5kbGVfZXB0X3Zpb2xhdGlvbih2Y3B1LCBncGEsIGV4aXRfcXVhbCk7XFxuK1xcdFxcdHJldCA9IF9fdnRfaGFuZGxlX2VwdF92aW9sYXRpb24odmNwdSwgZ3BhLCBleGl0X3F1YWwpO1xcbiBcXG4gXFx0XFx0aWYgKHJldCAhPSBSRVRfUEZfUkVUUlkgfHwgIWxvY2FsX3JldHJ5KVxcbiBcXHRcXHRcXHRicmVhaztcXG5AQCAtMjAyMSw3ICsyMDIxLDcgQEAgaW50IHRkeF9jb21wbGV0ZV9lbXVsYXRlZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZXJyKVxcbiBcXHRcXHRyZXR1cm4gMTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMgPT0gRVhJVF9SRUFTT05fTVNSX1JFQUQpXFxuK1xcdGlmICh2dF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMgPT0gRVhJVF9SRUFTT05fTVNSX1JFQUQpXFxuIFxcdFxcdHRkdm1jYWxsX3NldF9yZXR1cm5fdmFsKHZjcHUsIGt2bV9yZWFkX2VkeF9lYXgodmNwdSkpO1xcbiBcXG4gXFx0cmV0dXJuIDE7XFxuQEAgLTIwMzIsNyArMjAzMiw3IEBAIGludCB0ZHhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGZhc3RwYXRoKVxcbiB7XFxuIFxcdHN0cnVjdCB2Y3B1X3RkeCAqdGR4ID0gdG9fdGR4KHZjcHUpO1xcbiBcXHR1NjQgdnBfZW50ZXJfcmV0ID0gdGR4LVxcdTAwM2V2cF9lbnRlcl9yZXQ7XFxuLVxcdHVuaW9uIHZteF9leGl0X3JlYXNvbiBleGl0X3JlYXNvbiA9IHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSk7XFxuK1xcdHVuaW9uIHZteF9leGl0X3JlYXNvbiBleGl0X3JlYXNvbiA9IHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KTtcXG4gXFxuIFxcdGlmIChmYXN0cGF0aCAhPSBFWElUX0ZBU1RQQVRIX05PTkUpXFxuIFxcdFxcdHJldHVybiAxO1xcbkBAIC0yMTQyLDkgKzIxNDIsOSBAQCB2b2lkIHRkeF9nZXRfZXhpdF9pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyICpyZWFzb24sXFxuIFxcbiBcXHQqcmVhc29uID0gdGR4LVxcdTAwM2V2dC5leGl0X3JlYXNvbi5mdWxsO1xcbiBcXHRpZiAoKnJlYXNvbiAhPSAtMXUpIHtcXG4tXFx0XFx0KmluZm8xID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XFxuK1xcdFxcdCppbmZvMSA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XFxuIFxcdFxcdCppbmZvMiA9IHRkeC1cXHUwMDNlZXh0X2V4aXRfcXVhbGlmaWNhdGlvbjtcXG4tXFx0XFx0KmludHJfaW5mbyA9IHZteF9nZXRfaW50cl9pbmZvKHZjcHUpO1xcbitcXHRcXHQqaW50cl9pbmZvID0gdnRfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0KmluZm8xID0gMDtcXG4gXFx0XFx0KmluZm8yID0gMDtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguYyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcXG5pbmRleCA1MDQ2MzBmMGViNDBmLi43ZTM1YzJkMDNjNjllIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXFxuQEAgLTE1NzcsMTIgKzE1NzcsMTIgQEAgdm9pZCB2bXhfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcXG4gXFxuIFxcdHZteF92Y3B1X2xvYWRfdm1jcyh2Y3B1LCBjcHUpO1xcbiBcXG4tXFx0dm14X3ZjcHVfcGlfbG9hZCh2Y3B1LCBjcHUpO1xcbitcXHR2dF92Y3B1X3BpX2xvYWQodmNwdSwgY3B1KTtcXG4gfVxcbiBcXG4gdm9pZCB2bXhfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuLVxcdHZteF92Y3B1X3BpX3B1dCh2Y3B1KTtcXG4rXFx0dnRfdmNwdV9waV9wdXQodmNwdSk7XFxuIFxcbiBcXHR2bXhfcHJlcGFyZV9zd2l0Y2hfdG9faG9zdCh0b192bXgodmNwdSkpO1xcbiB9XFxuQEAgLTE3OTEsNyArMTc5MSw3IEBAIGludCB2bXhfY2hlY2tfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlbXVsX3R5cGUsXFxuIFxcdCAqIHNvIHRoYXQgZ3Vlc3QgdXNlcnNwYWNlIGNhbid0IERvUyB0aGUgZ3Vlc3Qgc2ltcGx5IGJ5IHRyaWdnZXJpbmdcXG4gXFx0ICogZW11bGF0aW9uIChlbmNsYXZlcyBhcmUgQ1BMMyBvbmx5KS5cXG4gXFx0ICovXFxuLVxcdGlmICh2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmVuY2xhdmVfbW9kZSkge1xcbitcXHRpZiAodnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmVuY2xhdmVfbW9kZSkge1xcbiBcXHRcXHRrdm1fcXVldWVfZXhjZXB0aW9uKHZjcHUsIFVEX1ZFQ1RPUik7XFxuIFxcdFxcdHJldHVybiBYODZFTVVMX1BST1BBR0FURV9GQVVMVDtcXG4gXFx0fVxcbkBAIC0xODA2LDcgKzE4MDYsNyBAQCBpbnQgdm14X2NoZWNrX2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZW11bF90eXBlLFxcbiBcXG4gc3RhdGljIGludCBza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbi1cXHR1bmlvbiB2bXhfZXhpdF9yZWFzb24gZXhpdF9yZWFzb24gPSB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpO1xcbitcXHR1bmlvbiB2bXhfZXhpdF9yZWFzb24gZXhpdF9yZWFzb24gPSB2dF9nZXRfZXhpdF9yZWFzb24odmNwdSk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgcmlwLCBvcmlnX3JpcDtcXG4gXFx0dTMyIGluc3RyX2xlbjtcXG4gXFxuQEAgLTQ0MjQsNyArNDQyNCw3IEBAIHN0YXRpYyBpbnQgdm14X2RlbGl2ZXJfcG9zdGVkX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCB2ZWN0b3IpXFxuIFxcdGlmICghdmNwdS1cXHUwMDNlYXJjaC5hcGljLVxcdTAwM2VhcGljdl9hY3RpdmUpXFxuIFxcdFxcdHJldHVybiAtMTtcXG4gXFxuLVxcdF9fdm14X2RlbGl2ZXJfcG9zdGVkX2ludGVycnVwdCh2Y3B1LCBcXHUwMDI2dnQtXFx1MDAzZXBpX2Rlc2MsIHZlY3Rvcik7XFxuK1xcdF9fdnRfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0KHZjcHUsIFxcdTAwMjZ2dC1cXHUwMDNlcGlfZGVzYywgdmVjdG9yKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTUzNzksMTUgKzUzNzksOSBAQCBib29sIHZteF9ndWVzdF9pbmplY3RfYWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHQgICAgICAgKGt2bV9nZXRfcmZsYWdzKHZjcHUpIFxcdTAwMjYgWDg2X0VGTEFHU19BQyk7XFxuIH1cXG4gXFxuLXN0YXRpYyBib29sIGlzX3hmZF9ubV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLXtcXG4tXFx0cmV0dXJuIHZjcHUtXFx1MDAzZWFyY2guZ3Vlc3RfZnB1LmZwc3RhdGUtXFx1MDAzZXhmZCBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgICAgIWt2bV9pc19jcjBfYml0X3NldCh2Y3B1LCBYODZfQ1IwX1RTKTtcXG4tfVxcbi1cXG4gc3RhdGljIGludCB2bXhfaGFuZGxlX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgZXJyb3JfY29kZSlcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIGNyMiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xcbitcXHR1bnNpZ25lZCBsb25nIGNyMiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XFxuIFxcbiBcXHRpZiAodmNwdS1cXHUwMDNlYXJjaC5hcGYuaG9zdF9hcGZfZmxhZ3MpXFxuIFxcdFxcdGdvdG8gaGFuZGxlX3BmO1xcbkBAIC01NDM1LDcgKzU0MjksNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9leGNlcHRpb25fbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0dTMyIHZlY3RfaW5mbztcXG4gXFxuIFxcdHZlY3RfaW5mbyA9IHZteC1cXHUwMDNlaWR0X3ZlY3RvcmluZ19pbmZvO1xcbi1cXHRpbnRyX2luZm8gPSB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcXG4rXFx0aW50cl9pbmZvID0gdnRfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIE1hY2hpbmUgY2hlY2tzIGFyZSBoYW5kbGVkIGJ5IGhhbmRsZV9leGNlcHRpb25faXJxb2ZmKCksIG9yIGJ5XFxuQEAgLTU1MTYsNyArNTUxMCw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2V4Y2VwdGlvbl9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXG4gXFx0c3dpdGNoIChleF9ubykge1xcbiBcXHRjYXNlIERCX1ZFQ1RPUjpcXG4tXFx0XFx0ZHI2ID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XFxuK1xcdFxcdGRyNiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XFxuIFxcdFxcdGlmICghKHZjcHUtXFx1MDAzZWd1ZXN0X2RlYnVnIFxcdTAwMjZcXG4gXFx0XFx0ICAgICAgKEtWTV9HVUVTVERCR19TSU5HTEVTVEVQIHwgS1ZNX0dVRVNUREJHX1VTRV9IV19CUCkpKSB7XFxuIFxcdFxcdFxcdC8qXFxuQEAgLTU1OTIsNyArNTU4Niw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2lvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0aW50IHNpemUsIGluLCBzdHJpbmc7XFxuIFxcdHVuc2lnbmVkIHBvcnQ7XFxuIFxcbi1cXHRleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcXG4rXFx0ZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcXG4gXFx0c3RyaW5nID0gKGV4aXRfcXVhbGlmaWNhdGlvbiBcXHUwMDI2IDE2KSAhPSAwO1xcbiBcXG4gXFx0Kyt2Y3B1LVxcdTAwM2VzdGF0LmlvX2V4aXRzO1xcbkBAIC01NjgxLDcgKzU2NzUsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdGludCBlcnI7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcXG4rXFx0ZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcXG4gXFx0Y3IgPSBleGl0X3F1YWxpZmljYXRpb24gXFx1MDAyNiAxNTtcXG4gXFx0cmVnID0gKGV4aXRfcXVhbGlmaWNhdGlvbiBcXHUwMDNlXFx1MDAzZSA4KSBcXHUwMDI2IDE1O1xcbiBcXHRzd2l0Y2ggKChleGl0X3F1YWxpZmljYXRpb24gXFx1MDAzZVxcdTAwM2UgNCkgXFx1MDAyNiAzKSB7XFxuQEAgLTU3NTksNyArNTc1Myw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2RyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0aW50IGRyLCBkcjcsIHJlZztcXG4gXFx0aW50IGVyciA9IDE7XFxuIFxcbi1cXHRleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcXG4rXFx0ZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcXG4gXFx0ZHIgPSBleGl0X3F1YWxpZmljYXRpb24gXFx1MDAyNiBERUJVR19SRUdfQUNDRVNTX05VTTtcXG4gXFxuIFxcdC8qIEZpcnN0LCBpZiBEUiBkb2VzIG5vdCBleGlzdCwgdHJpZ2dlciBVRCAqL1xcbkBAIC01ODU1LDcgKzU4NDksNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9pbnRlcnJ1cHRfd2luZG93KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFxuIHN0YXRpYyBpbnQgaGFuZGxlX2ludmxwZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcXG4rXFx0dW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xcbiBcXG4gXFx0a3ZtX21tdV9pbnZscGcodmNwdSwgZXhpdF9xdWFsaWZpY2F0aW9uKTtcXG4gXFx0cmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xcbkBAIC01ODY0LDcgKzU4NTgsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9pbnZscGcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBzdGF0aWMgaW50IGhhbmRsZV9hcGljX2FjY2VzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0aWYgKGxpa2VseShmYXN0ZW9pKSkge1xcbi1cXHRcXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XFxuIFxcdFxcdGludCBhY2Nlc3NfdHlwZSwgb2Zmc2V0O1xcbiBcXG4gXFx0XFx0YWNjZXNzX3R5cGUgPSBleGl0X3F1YWxpZmljYXRpb24gXFx1MDAyNiBBUElDX0FDQ0VTU19UWVBFO1xcbkBAIC01ODg1LDcgKzU4NzksNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9hcGljX2FjY2VzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcbiBzdGF0aWMgaW50IGhhbmRsZV9hcGljX2VvaV9pbmR1Y2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xcbitcXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XFxuIFxcdGludCB2ZWN0b3IgPSBleGl0X3F1YWxpZmljYXRpb24gXFx1MDAyNiAweGZmO1xcbiBcXG4gXFx0LyogRU9JLWluZHVjZWQgVk0gZXhpdCBpcyB0cmFwLWxpa2UgYW5kIHRodXMgbm8gbmVlZCB0byBhZGp1c3QgSVAgKi9cXG5AQCAtNTg5NSw3ICs1ODg5LDcgQEAgc3RhdGljIGludCBoYW5kbGVfYXBpY19lb2lfaW5kdWNlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcbiBzdGF0aWMgaW50IGhhbmRsZV9hcGljX3dyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xcbitcXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBBUElDLXdyaXRlIFZNLUV4aXQgaXMgdHJhcC1saWtlLCBLVk0gZG9lc24ndCBuZWVkIHRvIGFkdmFuY2UgUklQIGFuZFxcbkBAIC01OTIzLDcgKzU5MTcsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV90YXNrX3N3aXRjaChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdGlkdF9pbmRleCA9ICh2bXgtXFx1MDAzZWlkdF92ZWN0b3JpbmdfaW5mbyBcXHUwMDI2IFZFQ1RPUklOR19JTkZPX1ZFQ1RPUl9NQVNLKTtcXG4gXFx0dHlwZSA9ICh2bXgtXFx1MDAzZWlkdF92ZWN0b3JpbmdfaW5mbyBcXHUwMDI2IFZFQ1RPUklOR19JTkZPX1RZUEVfTUFTSyk7XFxuIFxcbi1cXHRleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcXG4rXFx0ZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcXG4gXFxuIFxcdHJlYXNvbiA9ICh1MzIpZXhpdF9xdWFsaWZpY2F0aW9uIFxcdTAwM2VcXHUwMDNlIDMwO1xcbiBcXHRpZiAocmVhc29uID09IFRBU0tfU1dJVENIX0dBVEUgXFx1MDAyNlxcdTAwMjYgaWR0X3YpIHtcXG5AQCAtNTk2OSw3ICs1OTYzLDcgQEAgc3RhdGljIGludCBoYW5kbGVfdGFza19zd2l0Y2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXG4gc3RhdGljIGludCBoYW5kbGVfZXB0X3Zpb2xhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcXG4rXFx0dW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xcbiBcXHRncGFfdCBncGE7XFxuIFxcbiBcXHQvKlxcbkBAIC01OTk3LDcgKzU5OTEsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9lcHRfdmlvbGF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0aWYgKHVubGlrZWx5KGFsbG93X3NtYWxsZXJfbWF4cGh5YWRkciBcXHUwMDI2XFx1MDAyNiAha3ZtX3ZjcHVfaXNfbGVnYWxfZ3BhKHZjcHUsIGdwYSkpKVxcbiBcXHRcXHRyZXR1cm4ga3ZtX2VtdWxhdGVfaW5zdHJ1Y3Rpb24odmNwdSwgMCk7XFxuIFxcbi1cXHRyZXR1cm4gX192bXhfaGFuZGxlX2VwdF92aW9sYXRpb24odmNwdSwgZ3BhLCBleGl0X3F1YWxpZmljYXRpb24pO1xcbitcXHRyZXR1cm4gX192dF9oYW5kbGVfZXB0X3Zpb2xhdGlvbih2Y3B1LCBncGEsIGV4aXRfcXVhbGlmaWNhdGlvbik7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgaGFuZGxlX2VwdF9taXNjb25maWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbkBAIC02MTYwLDcgKzYxNTQsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9pbnZwY2lkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0LyogQWNjb3JkaW5nIHRvIHRoZSBJbnRlbCBpbnN0cnVjdGlvbiByZWZlcmVuY2UsIHRoZSBtZW1vcnkgb3BlcmFuZFxcbiBcXHQgKiBpcyByZWFkIGV2ZW4gaWYgaXQgaXNuJ3QgbmVlZGVkIChlLmcuLCBmb3IgdHlwZT09YWxsKVxcbiBcXHQgKi9cXG4tXFx0aWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgdm14X2dldF9leGl0X3F1YWwodmNwdSksXFxuK1xcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZ0X2dldF9leGl0X3F1YWwodmNwdSksXFxuIFxcdFxcdFxcdFxcdHZteF9pbnN0cnVjdGlvbl9pbmZvLCBmYWxzZSxcXG4gXFx0XFx0XFx0XFx0c2l6ZW9mKG9wZXJhbmQpLCBcXHUwMDI2Z3ZhKSlcXG4gXFx0XFx0cmV0dXJuIDE7XFxuQEAgLTYxNzQsNyArNjE2OCw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3BtbF9mdWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFxuIFxcdHRyYWNlX2t2bV9wbWxfZnVsbCh2Y3B1LVxcdTAwM2V2Y3B1X2lkKTtcXG4gXFxuLVxcdGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xcbitcXHRleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogUE1MIGJ1ZmZlciBGVUxMIGhhcHBlbmVkIHdoaWxlIGV4ZWN1dGluZyBpcmV0IGZyb20gTk1JLFxcbkBAIC02Mjc4LDcgKzYyNzIsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9idXNfbG9ja192bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXG4gc3RhdGljIGludCBoYW5kbGVfbm90aWZ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xcbitcXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XFxuIFxcdGJvb2wgY29udGV4dF9pbnZhbGlkID0gZXhpdF9xdWFsIFxcdTAwMjYgTk9USUZZX1ZNX0NPTlRFWFRfSU5WQUxJRDtcXG4gXFxuIFxcdCsrdmNwdS1cXHUwMDNlc3RhdC5ub3RpZnlfd2luZG93X2V4aXRzO1xcbkBAIC02MzA5LDEzICs2MzAzLDEzIEBAIHN0YXRpYyBpbnQgdm14X2dldF9tc3JfaW1tX3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcbiBzdGF0aWMgaW50IGhhbmRsZV9yZG1zcl9pbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuLVxcdHJldHVybiBrdm1fZW11bGF0ZV9yZG1zcl9pbW0odmNwdSwgdm14X2dldF9leGl0X3F1YWwodmNwdSksXFxuK1xcdHJldHVybiBrdm1fZW11bGF0ZV9yZG1zcl9pbW0odmNwdSwgdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KSxcXG4gXFx0XFx0XFx0XFx0ICAgICB2bXhfZ2V0X21zcl9pbW1fcmVnKHZjcHUpKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBoYW5kbGVfd3Jtc3JfaW1tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbi1cXHRyZXR1cm4ga3ZtX2VtdWxhdGVfd3Jtc3JfaW1tKHZjcHUsIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxcbitcXHRyZXR1cm4ga3ZtX2VtdWxhdGVfd3Jtc3JfaW1tKHZjcHUsIHZ0X2dldF9leGl0X3F1YWwodmNwdSksXFxuIFxcdFxcdFxcdFxcdCAgICAgdm14X2dldF9tc3JfaW1tX3JlZyh2Y3B1KSk7XFxuIH1cXG4gXFxuQEAgLTYzOTIsMTAgKzYzODYsMTAgQEAgdm9pZCB2bXhfZ2V0X2V4aXRfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiAqcmVhc29uLFxcbiBcXHRzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTtcXG4gXFxuIFxcdCpyZWFzb24gPSB2bXgtXFx1MDAzZXZ0LmV4aXRfcmVhc29uLmZ1bGw7XFxuLVxcdCppbmZvMSA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xcbitcXHQqaW5mbzEgPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xcbiBcXHRpZiAoISh2bXgtXFx1MDAzZXZ0LmV4aXRfcmVhc29uLmZhaWxlZF92bWVudHJ5KSkge1xcbiBcXHRcXHQqaW5mbzIgPSB2bXgtXFx1MDAzZWlkdF92ZWN0b3JpbmdfaW5mbztcXG4tXFx0XFx0KmludHJfaW5mbyA9IHZteF9nZXRfaW50cl9pbmZvKHZjcHUpO1xcbitcXHRcXHQqaW50cl9pbmZvID0gdnRfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcXG4gXFx0XFx0aWYgKGlzX2V4Y2VwdGlvbl93aXRoX2Vycm9yX2NvZGUoKmludHJfaW5mbykpXFxuIFxcdFxcdFxcdCplcnJvcl9jb2RlID0gdm1jc19yZWFkMzIoVk1fRVhJVF9JTlRSX0VSUk9SX0NPREUpO1xcbiBcXHRcXHRlbHNlXFxuQEAgLTY3MDYsNyArNjcwMCw3IEBAIHZvaWQgZHVtcF92bWNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gc3RhdGljIGludCBfX3ZteF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aClcXG4ge1xcbiBcXHRzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTtcXG4tXFx0dW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uID0gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KTtcXG4rXFx0dW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uID0gdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpO1xcbiBcXHR1MzIgdmVjdG9yaW5nX2luZm8gPSB2bXgtXFx1MDAzZWlkdF92ZWN0b3JpbmdfaW5mbztcXG4gXFx0dTE2IGV4aXRfaGFuZGxlcl9pbmRleDtcXG4gXFxuQEAgLTY4NzAsNyArNjg2NCw3IEBAIGludCB2bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpXFxuIFxcdCAqIEV4aXQgdG8gdXNlciBzcGFjZSB3aGVuIGJ1cyBsb2NrIGRldGVjdGVkIHRvIGluZm9ybSB0aGF0IHRoZXJlIGlzXFxuIFxcdCAqIGEgYnVzIGxvY2sgaW4gZ3Vlc3QuXFxuIFxcdCAqL1xcbi1cXHRpZiAodm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5idXNfbG9ja19kZXRlY3RlZCkge1xcbitcXHRpZiAodnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJ1c19sb2NrX2RldGVjdGVkKSB7XFxuIFxcdFxcdGlmIChyZXQgXFx1MDAzZSAwKVxcbiBcXHRcXHRcXHR2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZWV4aXRfcmVhc29uID0gS1ZNX0VYSVRfWDg2X0JVU19MT0NLO1xcbiBcXG5AQCAtNzE0Myw3NCArNzEzNyw2IEBAIHZvaWQgdm14X2xvYWRfZW9pX2V4aXRtYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKmVvaV9leGl0X2JpdG1hcClcXG4gXFx0dm1jc193cml0ZTY0KEVPSV9FWElUX0JJVE1BUDMsIGVvaV9leGl0X2JpdG1hcFszXSk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGhhbmRsZV9ubV9mYXVsdF9pcnFvZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi17XFxuLVxcdC8qXFxuLVxcdCAqIFNhdmUgeGZkX2VyciB0byBndWVzdF9mcHUgYmVmb3JlIGludGVycnVwdCBpcyBlbmFibGVkLCBzbyB0aGVcXG4tXFx0ICogTVNSIHZhbHVlIGlzIG5vdCBjbG9iYmVyZWQgYnkgdGhlIGhvc3QgYWN0aXZpdHkgYmVmb3JlIHRoZSBndWVzdFxcbi1cXHQgKiBoYXMgY2hhbmNlIHRvIGNvbnN1bWUgaXQuXFxuLVxcdCAqXFxuLVxcdCAqIFVwZGF0ZSB0aGUgZ3Vlc3QncyBYRkRfRVJSIGlmIGFuZCBvbmx5IGlmIFhGRCBpcyBlbmFibGVkLCBhcyB0aGUgI05NXFxuLVxcdCAqIGludGVyY2VwdGlvbiBtYXkgaGF2ZSBiZWVuIGNhdXNlZCBieSBMMSBpbnRlcmNlcHRpb24uICBQZXIgdGhlIFNETSxcXG4tXFx0ICogWEZEX0VSUiBpcyBub3QgbW9kaWZpZWQgZm9yIG5vbi1YRkQgI05NLCBpLmUuIGlmIENSMC5UUz0xLlxcbi1cXHQgKlxcbi1cXHQgKiBOb3RlLCBYRkRfRVJSIGlzIHVwZGF0ZWQgX2JlZm9yZV8gdGhlICNOTSBpbnRlcmNlcHRpb24gY2hlY2ssIGkuZS5cXG4tXFx0ICogdW5saWtlIENSMiBhbmQgRFI2LCB0aGUgdmFsdWUgaXMgbm90IGEgcGF5bG9hZCB0aGF0IGlzIGF0dGFjaGVkIHRvXFxuLVxcdCAqIHRoZSAjTk0gZXhjZXB0aW9uLlxcbi1cXHQgKi9cXG4tXFx0aWYgKGlzX3hmZF9ubV9mYXVsdCh2Y3B1KSlcXG4tXFx0XFx0cmRtc3JxKE1TUl9JQTMyX1hGRF9FUlIsIHZjcHUtXFx1MDAzZWFyY2guZ3Vlc3RfZnB1LnhmZF9lcnIpO1xcbi19XFxuLVxcbi1zdGF0aWMgdm9pZCBoYW5kbGVfZXhjZXB0aW9uX2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBpbnRyX2luZm8pXFxuLXtcXG4tXFx0LyogaWYgZXhpdCBkdWUgdG8gUEYgY2hlY2sgZm9yIGFzeW5jIFBGICovXFxuLVxcdGlmIChpc19wYWdlX2ZhdWx0KGludHJfaW5mbykpXFxuLVxcdFxcdHZjcHUtXFx1MDAzZWFyY2guYXBmLmhvc3RfYXBmX2ZsYWdzID0ga3ZtX3JlYWRfYW5kX3Jlc2V0X2FwZl9mbGFncygpO1xcbi1cXHQvKiBpZiBleGl0IGR1ZSB0byBOTSwgaGFuZGxlIGJlZm9yZSBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkICovXFxuLVxcdGVsc2UgaWYgKGlzX25tX2ZhdWx0KGludHJfaW5mbykpXFxuLVxcdFxcdGhhbmRsZV9ubV9mYXVsdF9pcnFvZmYodmNwdSk7XFxuLVxcdC8qIEhhbmRsZSBtYWNoaW5lIGNoZWNrcyBiZWZvcmUgaW50ZXJydXB0cyBhcmUgZW5hYmxlZCAqL1xcbi1cXHRlbHNlIGlmIChpc19tYWNoaW5lX2NoZWNrKGludHJfaW5mbykpXFxuLVxcdFxcdGt2bV9tYWNoaW5lX2NoZWNrKCk7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIGhhbmRsZV9leHRlcm5hbF9pbnRlcnJ1cHRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICB1MzIgaW50cl9pbmZvKVxcbi17XFxuLVxcdHVuc2lnbmVkIGludCB2ZWN0b3IgPSBpbnRyX2luZm8gXFx1MDAyNiBJTlRSX0lORk9fVkVDVE9SX01BU0s7XFxuLVxcbi1cXHRpZiAoS1ZNX0JVRyghaXNfZXh0ZXJuYWxfaW50cihpbnRyX2luZm8pLCB2Y3B1LVxcdTAwM2Vrdm0sXFxuLVxcdCAgICBcXFwidW5leHBlY3RlZCBWTS1FeGl0IGludGVycnVwdCBpbmZvOiAweCV4XFxcIiwgaW50cl9pbmZvKSlcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4tXFx0a3ZtX2JlZm9yZV9pbnRlcnJ1cHQodmNwdSwgS1ZNX0hBTkRMSU5HX0lSUSk7XFxuLVxcdHg4Nl9lbnRyeV9mcm9tX2t2bShFVkVOVF9UWVBFX0VYVElOVCwgdmVjdG9yKTtcXG4tXFx0a3ZtX2FmdGVyX2ludGVycnVwdCh2Y3B1KTtcXG4tXFxuLVxcdHZjcHUtXFx1MDAzZWFyY2guYXRfaW5zdHJ1Y3Rpb25fYm91bmRhcnkgPSB0cnVlO1xcbi19XFxuLVxcbi12b2lkIHZteF9oYW5kbGVfZXhpdF9pcnFvZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi17XFxuLVxcdGlmICh0b192dCh2Y3B1KS1cXHUwMDNlZW11bGF0aW9uX3JlcXVpcmVkKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbi1cXHRzd2l0Y2ggKHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMpIHtcXG4tXFx0Y2FzZSBFWElUX1JFQVNPTl9FWFRFUk5BTF9JTlRFUlJVUFQ6XFxuLVxcdFxcdGhhbmRsZV9leHRlcm5hbF9pbnRlcnJ1cHRfaXJxb2ZmKHZjcHUsIHZteF9nZXRfaW50cl9pbmZvKHZjcHUpKTtcXG4tXFx0XFx0YnJlYWs7XFxuLVxcdGNhc2UgRVhJVF9SRUFTT05fRVhDRVBUSU9OX05NSTpcXG4tXFx0XFx0aGFuZGxlX2V4Y2VwdGlvbl9pcnFvZmYodmNwdSwgdm14X2dldF9pbnRyX2luZm8odmNwdSkpO1xcbi1cXHRcXHRicmVhaztcXG4tXFx0Y2FzZSBFWElUX1JFQVNPTl9NQ0VfRFVSSU5HX1ZNRU5UUlk6XFxuLVxcdFxcdGt2bV9tYWNoaW5lX2NoZWNrKCk7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHRicmVhaztcXG4tXFx0fVxcbi19XFxuLVxcbiAvKlxcbiAgKiBUaGUga3ZtIHBhcmFtZXRlciBjYW4gYmUgTlVMTCAobW9kdWxlIGluaXRpYWxpemF0aW9uLCBvciBpbnZvY2F0aW9uIGJlZm9yZVxcbiAgKiBWTSBjcmVhdGlvbikuIEJlIHN1cmUgdG8gY2hlY2sgdGhlIGt2bSBwYXJhbWV0ZXIgYmVmb3JlIHVzaW5nIGl0LlxcbkBAIC03MjUwLDcgKzcxNzYsNyBAQCBzdGF0aWMgdm9pZCB2bXhfcmVjb3Zlcl9ubWlfYmxvY2tpbmcoc3RydWN0IHZjcHVfdm14ICp2bXgpXFxuIFxcdFxcdGlmICh2bXgtXFx1MDAzZWxvYWRlZF92bWNzLVxcdTAwM2VubWlfa25vd25fdW5tYXNrZWQpXFxuIFxcdFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdFxcdGV4aXRfaW50cl9pbmZvID0gdm14X2dldF9pbnRyX2luZm8oXFx1MDAyNnZteC1cXHUwMDNldmNwdSk7XFxuK1xcdFxcdGV4aXRfaW50cl9pbmZvID0gdnRfZ2V0X2ludHJfaW5mbyhcXHUwMDI2dm14LVxcdTAwM2V2Y3B1KTtcXG4gXFx0XFx0dW5ibG9ja19ubWkgPSAoZXhpdF9pbnRyX2luZm8gXFx1MDAyNiBJTlRSX0lORk9fVU5CTE9DS19OTUkpICE9IDA7XFxuIFxcdFxcdHZlY3RvciA9IGV4aXRfaW50cl9pbmZvIFxcdTAwMjYgSU5UUl9JTkZPX1ZFQ1RPUl9NQVNLO1xcbiBcXHRcXHQvKlxcbkBAIC03NDE3LDE0ICs3MzQzLDE0IEBAIHN0YXRpYyBmYXN0cGF0aF90IHZteF9leGl0X2hhbmRsZXJzX2Zhc3RwYXRoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFx0ICogdGhlIGZhc3RwYXRoIGV2ZW4sIGFsbCBvdGhlciBleGl0cyBtdXN0IHVzZSB0aGUgc2xvdyBwYXRoLlxcbiBcXHQgKi9cXG4gXFx0aWYgKGlzX2d1ZXN0X21vZGUodmNwdSkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMgIT0gRVhJVF9SRUFTT05fUFJFRU1QVElPTl9USU1FUilcXG4rXFx0ICAgIHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYyAhPSBFWElUX1JFQVNPTl9QUkVFTVBUSU9OX1RJTUVSKVxcbiBcXHRcXHRyZXR1cm4gRVhJVF9GQVNUUEFUSF9OT05FO1xcbiBcXG4tXFx0c3dpdGNoICh2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljKSB7XFxuK1xcdHN3aXRjaCAodnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljKSB7XFxuIFxcdGNhc2UgRVhJVF9SRUFTT05fTVNSX1dSSVRFOlxcbiBcXHRcXHRyZXR1cm4gaGFuZGxlX2Zhc3RwYXRoX3dybXNyKHZjcHUpO1xcbiBcXHRjYXNlIEVYSVRfUkVBU09OX01TUl9XUklURV9JTU06XFxuLVxcdFxcdHJldHVybiBoYW5kbGVfZmFzdHBhdGhfd3Jtc3JfaW1tKHZjcHUsIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxcbitcXHRcXHRyZXR1cm4gaGFuZGxlX2Zhc3RwYXRoX3dybXNyX2ltbSh2Y3B1LCB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgdm14X2dldF9tc3JfaW1tX3JlZyh2Y3B1KSk7XFxuIFxcdGNhc2UgRVhJVF9SRUFTT05fUFJFRU1QVElPTl9USU1FUjpcXG4gXFx0XFx0cmV0dXJuIGhhbmRsZV9mYXN0cGF0aF9wcmVlbXB0aW9uX3RpbWVyKHZjcHUsIGZvcmNlX2ltbWVkaWF0ZV9leGl0KTtcXG5AQCAtNzQzNywxNyArNzM2Myw2IEBAIHN0YXRpYyBmYXN0cGF0aF90IHZteF9leGl0X2hhbmRsZXJzX2Zhc3RwYXRoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFx0fVxcbiB9XFxuIFxcbi1ub2luc3RyIHZvaWQgdm14X2hhbmRsZV9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi17XFxuLVxcdGlmICgodTE2KXZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMgIT0gRVhJVF9SRUFTT05fRVhDRVBUSU9OX05NSSB8fFxcbi1cXHQgICAgIWlzX25taSh2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KSkpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuLVxcdGt2bV9iZWZvcmVfaW50ZXJydXB0KHZjcHUsIEtWTV9IQU5ETElOR19OTUkpO1xcbi1cXHR4ODZfZW50cnlfZnJvbV9rdm0oRVZFTlRfVFlQRV9OTUksIE5NSV9WRUNUT1IpO1xcbi1cXHRrdm1fYWZ0ZXJfaW50ZXJydXB0KHZjcHUpO1xcbi19XFxuLVxcbiBzdGF0aWMgbm9pbnN0ciB2b2lkIHZteF92Y3B1X2VudGVyX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuIHtcXG5AQCAtNzQ3NywxMCArNzM5MiwxMCBAQCBzdGF0aWMgbm9pbnN0ciB2b2lkIHZteF92Y3B1X2VudGVyX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHR9XFxuIFxcbiBcXHR2bXgtXFx1MDAzZXZ0LmV4aXRfcmVhc29uLmZ1bGwgPSB2bWNzX3JlYWQzMihWTV9FWElUX1JFQVNPTik7XFxuLVxcdGlmIChsaWtlbHkoIXZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkpKVxcbitcXHRpZiAobGlrZWx5KCF2dF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkpKVxcbiBcXHRcXHR2bXgtXFx1MDAzZWlkdF92ZWN0b3JpbmdfaW5mbyA9IHZtY3NfcmVhZDMyKElEVF9WRUNUT1JJTkdfSU5GT19GSUVMRCk7XFxuIFxcbi1cXHR2bXhfaGFuZGxlX25taSh2Y3B1KTtcXG4rXFx0dnRfaGFuZGxlX25taSh2Y3B1KTtcXG4gXFxuIG91dDpcXG4gXFx0Z3Vlc3Rfc3RhdGVfZXhpdF9pcnFvZmYoKTtcXG5AQCAtNzYxNyw3ICs3NTMyLDcgQEAgZmFzdHBhdGhfdCB2bXhfdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcnVuX2ZsYWdzKVxcbiBcXHRcXHQgKiBjaGVja2luZy5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmICh2Y3B1LVxcdTAwM2VhcmNoLm5lc3RlZF9ydW5fcGVuZGluZyBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgIXZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkpXFxuK1xcdFxcdCAgICAhdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5KVxcbiBcXHRcXHRcXHQrK3ZjcHUtXFx1MDAzZXN0YXQubmVzdGVkX3J1bjtcXG4gXFxuIFxcdFxcdHZjcHUtXFx1MDAzZWFyY2gubmVzdGVkX3J1bl9wZW5kaW5nID0gMDtcXG5AQCAtNzYyOCw3ICs3NTQzLDcgQEAgZmFzdHBhdGhfdCB2bXhfdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcnVuX2ZsYWdzKVxcbiBcXG4gXFx0dHJhY2Vfa3ZtX2V4aXQodmNwdSwgS1ZNX0lTQV9WTVgpO1xcbiBcXG4tXFx0aWYgKHVubGlrZWx5KHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkpKVxcbitcXHRpZiAodW5saWtlbHkodnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5KSlcXG4gXFx0XFx0cmV0dXJuIEVYSVRfRkFTVFBBVEhfTk9ORTtcXG4gXFxuIFxcdHZteC1cXHUwMDNlbG9hZGVkX3ZtY3MtXFx1MDAzZWxhdW5jaGVkID0gMTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguaCBiL2FyY2gveDg2L2t2bS92bXgvdm14LmhcXG5pbmRleCBkYzg1MTdmMTViYzQ2Li4zMjQ3YjU1YjM0ODQzIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oXFxuQEAgLTMwNCw0MyArMzA0LDYgQEAgc3RydWN0IGt2bV92bXgge1xcbiBcXHR1NjQgKnBpZF90YWJsZTtcXG4gfTtcXG4gXFxuLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IHZjcHVfdnQgKnRvX3Z0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4te1xcbi1cXHRyZXR1cm4gXFx1MDAyNihjb250YWluZXJfb2YodmNwdSwgc3RydWN0IHZjcHVfdm14LCB2Y3B1KS1cXHUwMDNldnQpO1xcbi19XFxuLVxcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHN0cnVjdCBrdm1fdmNwdSAqdnRfdG9fdmNwdShzdHJ1Y3QgdmNwdV92dCAqdnQpXFxuLXtcXG4tXFx0cmV0dXJuIFxcdTAwMjYoY29udGFpbmVyX29mKHZ0LCBzdHJ1Y3QgdmNwdV92bXgsIHZ0KS1cXHUwMDNldmNwdSk7XFxuLX1cXG4tXFxuLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5pb24gdm14X2V4aXRfcmVhc29uIHZteF9nZXRfZXhpdF9yZWFzb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi17XFxuLVxcdHJldHVybiB0b192dCh2Y3B1KS1cXHUwMDNlZXhpdF9yZWFzb247XFxuLX1cXG4tXFxuLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgbG9uZyB2bXhfZ2V0X2V4aXRfcXVhbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLXtcXG4tXFx0c3RydWN0IHZjcHVfdnQgKnZ0ID0gdG9fdnQodmNwdSk7XFxuLVxcbi1cXHRpZiAoIWt2bV9yZWdpc3Rlcl90ZXN0X2FuZF9tYXJrX2F2YWlsYWJsZSh2Y3B1LCBWQ1BVX1JFR19FWElUX0lORk9fMSkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgICFXQVJOX09OX09OQ0UoaXNfdGRfdmNwdSh2Y3B1KSkpXFxuLVxcdFxcdHZ0LVxcdTAwM2VleGl0X3F1YWxpZmljYXRpb24gPSB2bWNzX3JlYWRsKEVYSVRfUVVBTElGSUNBVElPTik7XFxuLVxcbi1cXHRyZXR1cm4gdnQtXFx1MDAzZWV4aXRfcXVhbGlmaWNhdGlvbjtcXG4tfVxcbi1cXG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdm14X2dldF9pbnRyX2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi17XFxuLVxcdHN0cnVjdCB2Y3B1X3Z0ICp2dCA9IHRvX3Z0KHZjcHUpO1xcbi1cXG4tXFx0aWYgKCFrdm1fcmVnaXN0ZXJfdGVzdF9hbmRfbWFya19hdmFpbGFibGUodmNwdSwgVkNQVV9SRUdfRVhJVF9JTkZPXzIpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAhV0FSTl9PTl9PTkNFKGlzX3RkX3ZjcHUodmNwdSkpKVxcbi1cXHRcXHR2dC1cXHUwMDNlZXhpdF9pbnRyX2luZm8gPSB2bWNzX3JlYWQzMihWTV9FWElUX0lOVFJfSU5GTyk7XFxuLVxcbi1cXHRyZXR1cm4gdnQtXFx1MDAzZWV4aXRfaW50cl9pbmZvO1xcbi19XFxuLVxcbiB2b2lkIHZteF92Y3B1X2xvYWRfdm1jcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpO1xcbiBpbnQgYWxsb2NhdGVfdnBpZCh2b2lkKTtcXG4gdm9pZCBmcmVlX3ZwaWQoaW50IHZwaWQpO1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaCBiL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oXFxuaW5kZXggMDU0ZmQxNGJiMmUxNi4uN2FjMDJjNjg0NTdmMSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaFxcbisrKyBiL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oXFxuQEAgLTI3LDcgKzI3LDYgQEAgdm9pZCB2bXhfdmNwdV9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaW5pdF9ldmVudCk7XFxuIHZvaWQgdm14X3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpO1xcbiB2b2lkIHZteF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiBpbnQgdm14X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKTtcXG4tdm9pZCB2bXhfaGFuZGxlX2V4aXRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIGludCB2bXhfc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiB2b2lkIHZteF91cGRhdGVfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gYm9vbCB2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOToyNDoyNC4zODQ5Nzc4ODZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM0OTg5MDUzNjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidnRfaGFuZGxlX2V4aXRfaXJxb2ZmXCIsXG4gICAgXCJ2dF9oYW5kbGVfbm1pXCIsXG4gICAgXCJ2dF92Y3B1X3BpX2xvYWRcIixcbiAgICBcInZ0X3ZjcHVfcGlfcHV0XCIsXG4gICAgXCJ2dF9waV9zdGFydF9ieXBhc3NcIixcbiAgICBcInZ0X3BpX3VwZGF0ZV9pcnRlXCIsXG4gICAgXCJ2bXhfaGFuZGxlX2V4aXRcIixcbiAgICBcInZteF92Y3B1X3J1blwiLFxuICAgIFwibmVzdGVkX3ZteF9yZWZsZWN0X3ZtZXhpdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBLVk0gSW50ZWwgKFZNWC9URFgpIHZpcnR1YWxpemF0aW9uIGxvZ2ljIGJ5IGNvbnNvbGlkYXRpbmcgZXhpdCBzdGF0dXMgaGFuZGxpbmcsIGV4aXQgSVJRLW9mZiBwcm9jZXNzaW5nLCBwb3N0ZWQgaW50ZXJydXB0IGhlbHBlcnMsIGFuZCBWTUNTIGV4aXQgcXVhbGlmaWNhdGlvbiBhY2Nlc3NvcnMgdW5kZXIgY29tbW9uIHZ0XyogYWJzdHJhY3Rpb25zLiBUaGlzIGFmZmVjdHMgY29yZSBLVk0gVk0gZXhpdCBoYW5kbGluZyBhbmQgbmVzdGVkIHZpcnR1YWxpemF0aW9uIHJlYWNoYWJsZSBvbiBhbWQ2NC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5ZDI1ZjA2YTkzYWFiZTY0ZmJhZDBkZWQ3NGY3MzAwMGY0YTQ3Y2MzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAwOToyNDoyMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmggYi9hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oXG5pbmRleCAwODAwNTY3NjcwMmMyLi4zZTY4ZmExMmFjYTY1IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaFxuQEAgLTIsMTAgKzIsMTIgQEBcbiAjaWZuZGVmIF9fS1ZNX1g4Nl9WTVhfQ09NTU9OX0hcbiAjZGVmaW5lIF9fS1ZNX1g4Nl9WTVhfQ09NTU9OX0hcbiBcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jb250YWluZXJfb2YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bV9ob3N0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcG9zdGVkX2ludHIuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwibW11LmhcIlxuKyNpbmNsdWRlIFwidm14X29wcy5oXCJcbiBcbiB1bmlvbiB2bXhfZXhpdF9yZWFzb24ge1xuIFx0c3RydWN0IHtcbkBAIC03NCwxNCArNzYsNjIgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3RkX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7IHJldHVybiBmYWxzZTsgfVxuIFxuICNlbmRpZlxuIFxuK3N0cnVjdCB2Y3B1X3ZteF90ZHgge1xuK1x0c3RydWN0IGt2bV92Y3B1IHZjcHU7XG4rXHRzdHJ1Y3QgdmNwdV92dCB2dDtcbit9O1xuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IHZjcHVfdnQgKnRvX3Z0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHRyZXR1cm4gXHUwMDI2KGNvbnRhaW5lcl9vZih2Y3B1LCBzdHJ1Y3QgdmNwdV92bXhfdGR4LCB2Y3B1KS1cdTAwM2V2dCk7XG4rfVxuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IGt2bV92Y3B1ICp2dF90b192Y3B1KHN0cnVjdCB2Y3B1X3Z0ICp2dClcbit7XG4rXHRyZXR1cm4gXHUwMDI2KGNvbnRhaW5lcl9vZih2dCwgc3RydWN0IHZjcHVfdm14X3RkeCwgdnQpLVx1MDAzZXZjcHUpO1xuK31cbitcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuaW9uIHZteF9leGl0X3JlYXNvbiB2dF9nZXRfZXhpdF9yZWFzb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdHJldHVybiB0b192dCh2Y3B1KS1cdTAwM2VleGl0X3JlYXNvbjtcbit9XG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBsb25nIHZ0X2dldF9leGl0X3F1YWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdHN0cnVjdCB2Y3B1X3Z0ICp2dCA9IHRvX3Z0KHZjcHUpO1xuK1xuK1x0aWYgKCFrdm1fcmVnaXN0ZXJfdGVzdF9hbmRfbWFya19hdmFpbGFibGUodmNwdSwgVkNQVV9SRUdfRVhJVF9JTkZPXzEpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFXQVJOX09OX09OQ0UoaXNfdGRfdmNwdSh2Y3B1KSkpXG4rXHRcdHZ0LVx1MDAzZWV4aXRfcXVhbGlmaWNhdGlvbiA9IHZtY3NfcmVhZGwoRVhJVF9RVUFMSUZJQ0FUSU9OKTtcbitcbitcdHJldHVybiB2dC1cdTAwM2VleGl0X3F1YWxpZmljYXRpb247XG4rfVxuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTMyIHZ0X2dldF9pbnRyX2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdHN0cnVjdCB2Y3B1X3Z0ICp2dCA9IHRvX3Z0KHZjcHUpO1xuK1xuK1x0aWYgKCFrdm1fcmVnaXN0ZXJfdGVzdF9hbmRfbWFya19hdmFpbGFibGUodmNwdSwgVkNQVV9SRUdfRVhJVF9JTkZPXzIpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFXQVJOX09OX09OQ0UoaXNfdGRfdmNwdSh2Y3B1KSkpXG4rXHRcdHZ0LVx1MDAzZWV4aXRfaW50cl9pbmZvID0gdm1jc19yZWFkMzIoVk1fRVhJVF9JTlRSX0lORk8pO1xuK1xuK1x0cmV0dXJuIHZ0LVx1MDAzZWV4aXRfaW50cl9pbmZvO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgaXNfeGZkX25tX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHRyZXR1cm4gdmNwdS1cdTAwM2VhcmNoLmd1ZXN0X2ZwdS5mcHN0YXRlLVx1MDAzZXhmZCBcdTAwMjZcdTAwMjZcbitcdCAgICAgICAha3ZtX2lzX2NyMF9iaXRfc2V0KHZjcHUsIFg4Nl9DUjBfVFMpO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIGJvb2wgdnRfaXNfdGR4X3ByaXZhdGVfZ3BhKHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3QgZ3BhKVxuIHtcbiBcdC8qIEZvciBURFggdGhlIGRpcmVjdCBtYXNrIGlzIHRoZSBzaGFyZWQgbWFzay4gKi9cbiBcdHJldHVybiAha3ZtX2lzX2FkZHJfZGlyZWN0KGt2bSwgZ3BhKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgX192bXhfaGFuZGxlX2VwdF92aW9sYXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsXG4tXHRcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24pXG4rc3RhdGljIGlubGluZSBpbnQgX192dF9oYW5kbGVfZXB0X3Zpb2xhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSxcbitcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uKVxuIHtcbiBcdHU2NCBlcnJvcl9jb2RlO1xuIFxuQEAgLTE2NCw4ICsyMTQsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3ZjcHVfdHJpZ2dlcl9wb3N0ZWRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiAgKiBQb3N0IGFuIGludGVycnVwdCB0byBhIHZDUFUncyBQSVIgYW5kIHRyaWdnZXIgdGhlIHZDUFUgdG8gcHJvY2VzcyB0aGVcbiAgKiBpbnRlcnJ1cHQgaWYgbmVjZXNzYXJ5LlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3ZteF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLVx0XHRcdFx0XHRcdCAgc3RydWN0IHBpX2Rlc2MgKnBpX2Rlc2MsIGludCB2ZWN0b3IpXG4rc3RhdGljIGlubGluZSB2b2lkIF9fdnRfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbitcdFx0XHRcdFx0XHQgc3RydWN0IHBpX2Rlc2MgKnBpX2Rlc2MsIGludCB2ZWN0b3IpXG4ge1xuIFx0aWYgKHBpX3Rlc3RfYW5kX3NldF9waXIodmVjdG9yLCBwaV9kZXNjKSlcbiBcdFx0cmV0dXJuO1xuQEAgLTE4Myw2ICsyMzMsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX192bXhfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdGt2bV92Y3B1X3RyaWdnZXJfcG9zdGVkX2ludGVycnVwdCh2Y3B1LCBQT1NURURfSU5UUl9WRUNUT1IpO1xuIH1cbiBcbi1ub2luc3RyIHZvaWQgdm14X2hhbmRsZV9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbitub2luc3RyIHZvaWQgdnRfaGFuZGxlX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIFxuICNlbmRpZiAvKiBfX0tWTV9YODZfVk1YX0NPTU1PTl9IICovXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9tYWluLmMgYi9hcmNoL3g4Ni9rdm0vdm14L21haW4uY1xuaW5kZXggNGM1MmFiOGQwNzg2OS4uNmUwYjM5NTlkNzNhYiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L21haW4uY1xuQEAgLTEsNCArMSw1IEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9lbnRyeS1jb21tb24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZXBhcmFtLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcIng4Nl9vcHMuaFwiXG5AQCAtMTAsOCArMTEsMTIgQEBcbiAjaW5jbHVkZSBcInRkeC5oXCJcbiAjaW5jbHVkZSBcInRkeF9hcmNoLmhcIlxuIFxuKyNwcmFnbWEgR0NDIHBvaXNvbiB0b192bXhcbitcbitzdGF0aWNfYXNzZXJ0KG9mZnNldG9mKHN0cnVjdCB2Y3B1X3ZteF90ZHgsIHZ0KSA9PSBvZmZzZXRvZihzdHJ1Y3QgdmNwdV92bXgsIHZ0KSk7XG4rXG4gI2lmZGVmIENPTkZJR19LVk1fSU5URUxfVERYXG4tc3RhdGljX2Fzc2VydChvZmZzZXRvZihzdHJ1Y3QgdmNwdV92bXgsIHZ0KSA9PSBvZmZzZXRvZihzdHJ1Y3QgdmNwdV90ZHgsIHZ0KSk7XG4rc3RhdGljX2Fzc2VydChvZmZzZXRvZihzdHJ1Y3QgdmNwdV92bXhfdGR4LCB2dCkgPT0gb2Zmc2V0b2Yoc3RydWN0IHZjcHVfdGR4LCB2dCkpO1xuIFxuIHN0YXRpYyB2b2lkIHZ0X2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXG4ge1xuQEAgLTg3Niw2ICs4ODEsODUgQEAgc3RhdGljIGludCB2dF9nbWVtX21heF9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbixcbiAjZGVmaW5lIHZ0X29wX3RkeF9vbmx5KG5hbWUpIE5VTExcbiAjZW5kaWYgLyogQ09ORklHX0tWTV9JTlRFTF9URFggKi9cbiBcbitzdGF0aWMgdm9pZCBoYW5kbGVfbm1fZmF1bHRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHQvKlxuK1x0ICogU2F2ZSB4ZmRfZXJyIHRvIGd1ZXN0X2ZwdSBiZWZvcmUgaW50ZXJydXB0IGlzIGVuYWJsZWQsIHNvIHRoZVxuK1x0ICogTVNSIHZhbHVlIGlzIG5vdCBjbG9iYmVyZWQgYnkgdGhlIGhvc3QgYWN0aXZpdHkgYmVmb3JlIHRoZSBndWVzdFxuK1x0ICogaGFzIGNoYW5jZSB0byBjb25zdW1lIGl0LlxuK1x0ICpcbitcdCAqIFVwZGF0ZSB0aGUgZ3Vlc3QncyBYRkRfRVJSIGlmIGFuZCBvbmx5IGlmIFhGRCBpcyBlbmFibGVkLCBhcyB0aGUgI05NXG4rXHQgKiBpbnRlcmNlcHRpb24gbWF5IGhhdmUgYmVlbiBjYXVzZWQgYnkgTDEgaW50ZXJjZXB0aW9uLiAgUGVyIHRoZSBTRE0sXG4rXHQgKiBYRkRfRVJSIGlzIG5vdCBtb2RpZmllZCBmb3Igbm9uLVhGRCAjTk0sIGkuZS4gaWYgQ1IwLlRTPTEuXG4rXHQgKlxuK1x0ICogTm90ZSwgWEZEX0VSUiBpcyB1cGRhdGVkIF9iZWZvcmVfIHRoZSAjTk0gaW50ZXJjZXB0aW9uIGNoZWNrLCBpLmUuXG4rXHQgKiB1bmxpa2UgQ1IyIGFuZCBEUjYsIHRoZSB2YWx1ZSBpcyBub3QgYSBwYXlsb2FkIHRoYXQgaXMgYXR0YWNoZWQgdG9cbitcdCAqIHRoZSAjTk0gZXhjZXB0aW9uLlxuK1x0ICovXG4rXHRpZiAoaXNfeGZkX25tX2ZhdWx0KHZjcHUpKVxuK1x0XHRyZG1zcnEoTVNSX0lBMzJfWEZEX0VSUiwgdmNwdS1cdTAwM2VhcmNoLmd1ZXN0X2ZwdS54ZmRfZXJyKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgaGFuZGxlX2V4Y2VwdGlvbl9pcnFvZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgaW50cl9pbmZvKVxuK3tcbitcdC8qIGlmIGV4aXQgZHVlIHRvIFBGIGNoZWNrIGZvciBhc3luYyBQRiAqL1xuK1x0aWYgKGlzX3BhZ2VfZmF1bHQoaW50cl9pbmZvKSlcbitcdFx0dmNwdS1cdTAwM2VhcmNoLmFwZi5ob3N0X2FwZl9mbGFncyA9IGt2bV9yZWFkX2FuZF9yZXNldF9hcGZfZmxhZ3MoKTtcbitcdC8qIGlmIGV4aXQgZHVlIHRvIE5NLCBoYW5kbGUgYmVmb3JlIGludGVycnVwdHMgYXJlIGVuYWJsZWQgKi9cbitcdGVsc2UgaWYgKGlzX25tX2ZhdWx0KGludHJfaW5mbykpXG4rXHRcdGhhbmRsZV9ubV9mYXVsdF9pcnFvZmYodmNwdSk7XG4rXHQvKiBIYW5kbGUgbWFjaGluZSBjaGVja3MgYmVmb3JlIGludGVycnVwdHMgYXJlIGVuYWJsZWQgKi9cbitcdGVsc2UgaWYgKGlzX21hY2hpbmVfY2hlY2soaW50cl9pbmZvKSlcbitcdFx0a3ZtX21hY2hpbmVfY2hlY2soKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgaGFuZGxlX2V4dGVybmFsX2ludGVycnVwdF9pcnFvZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuK1x0XHRcdFx0XHQgICAgIHUzMiBpbnRyX2luZm8pXG4re1xuK1x0dW5zaWduZWQgaW50IHZlY3RvciA9IGludHJfaW5mbyBcdTAwMjYgSU5UUl9JTkZPX1ZFQ1RPUl9NQVNLO1xuK1xuK1x0aWYgKEtWTV9CVUcoIWlzX2V4dGVybmFsX2ludHIoaW50cl9pbmZvKSwgdmNwdS1cdTAwM2Vrdm0sXG4rXHQgICAgXCJ1bmV4cGVjdGVkIFZNLUV4aXQgaW50ZXJydXB0IGluZm86IDB4JXhcIiwgaW50cl9pbmZvKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0a3ZtX2JlZm9yZV9pbnRlcnJ1cHQodmNwdSwgS1ZNX0hBTkRMSU5HX0lSUSk7XG4rXHR4ODZfZW50cnlfZnJvbV9rdm0oRVZFTlRfVFlQRV9FWFRJTlQsIHZlY3Rvcik7XG4rXHRrdm1fYWZ0ZXJfaW50ZXJydXB0KHZjcHUpO1xuK1xuK1x0dmNwdS1cdTAwM2VhcmNoLmF0X2luc3RydWN0aW9uX2JvdW5kYXJ5ID0gdHJ1ZTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdnRfaGFuZGxlX2V4aXRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHRpZiAodG9fdnQodmNwdSktXHUwMDNlZW11bGF0aW9uX3JlcXVpcmVkKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRzd2l0Y2ggKHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYykge1xuK1x0Y2FzZSBFWElUX1JFQVNPTl9FWFRFUk5BTF9JTlRFUlJVUFQ6XG4rXHRcdGhhbmRsZV9leHRlcm5hbF9pbnRlcnJ1cHRfaXJxb2ZmKHZjcHUsIHZ0X2dldF9pbnRyX2luZm8odmNwdSkpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgRVhJVF9SRUFTT05fRVhDRVBUSU9OX05NSTpcbitcdFx0aGFuZGxlX2V4Y2VwdGlvbl9pcnFvZmYodmNwdSwgdnRfZ2V0X2ludHJfaW5mbyh2Y3B1KSk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBFWElUX1JFQVNPTl9NQ0VfRFVSSU5HX1ZNRU5UUlk6XG4rXHRcdGt2bV9tYWNoaW5lX2NoZWNrKCk7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0YnJlYWs7XG4rXHR9XG4rfVxuK1xuK25vaW5zdHIgdm9pZCB2dF9oYW5kbGVfbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHRpZiAoKHUxNil2dF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMgIT0gRVhJVF9SRUFTT05fRVhDRVBUSU9OX05NSSB8fFxuK1x0ICAgICFpc19ubWkodnRfZ2V0X2ludHJfaW5mbyh2Y3B1KSkpXG4rXHRcdHJldHVybjtcbitcbitcdGt2bV9iZWZvcmVfaW50ZXJydXB0KHZjcHUsIEtWTV9IQU5ETElOR19OTUkpO1xuK1x0eDg2X2VudHJ5X2Zyb21fa3ZtKEVWRU5UX1RZUEVfTk1JLCBOTUlfVkVDVE9SKTtcbitcdGt2bV9hZnRlcl9pbnRlcnJ1cHQodmNwdSk7XG4rfVxuK1xuICNkZWZpbmUgVk1YX1JFUVVJUkVEX0FQSUNWX0lOSElCSVRTXHRcdFx0XHRcXFxuIFx0KEJJVChBUElDVl9JTkhJQklUX1JFQVNPTl9ESVNBQkxFRCkgfFx0XHRcdFxcXG4gXHQgQklUKEFQSUNWX0lOSElCSVRfUkVBU09OX0FCU0VOVCkgfFx0XHRcdFxcXG5AQCAtMTAwMCwxMiArMTA4NCwxMiBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgdnRfeDg2X29wcyBfX2luaXRkYXRhID0ge1xuIFx0LmxvYWRfbW11X3BnZCA9IHZ0X29wKGxvYWRfbW11X3BnZCksXG4gXG4gXHQuY2hlY2tfaW50ZXJjZXB0ID0gdm14X2NoZWNrX2ludGVyY2VwdCxcbi1cdC5oYW5kbGVfZXhpdF9pcnFvZmYgPSB2bXhfaGFuZGxlX2V4aXRfaXJxb2ZmLFxuK1x0LmhhbmRsZV9leGl0X2lycW9mZiA9IHZ0X2hhbmRsZV9leGl0X2lycW9mZixcbiBcbiBcdC51cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcgPSB2dF9vcCh1cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcpLFxuIFxuLVx0LnBpX3VwZGF0ZV9pcnRlID0gdm14X3BpX3VwZGF0ZV9pcnRlLFxuLVx0LnBpX3N0YXJ0X2J5cGFzcyA9IHZteF9waV9zdGFydF9ieXBhc3MsXG4rXHQucGlfdXBkYXRlX2lydGUgPSB2dF9waV91cGRhdGVfaXJ0ZSxcbitcdC5waV9zdGFydF9ieXBhc3MgPSB2dF9waV9zdGFydF9ieXBhc3MsXG4gXG4gI2lmZGVmIENPTkZJR19YODZfNjRcbiBcdC5zZXRfaHZfdGltZXIgPSB2dF9vcChzZXRfaHZfdGltZXIpLFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXG5pbmRleCAxNTE4NzM0MDdhYmQzLi40NzU5OWU3MzEyY2ZkIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xuQEAgLTQ0Niw3ICs0NDYsNyBAQCBzdGF0aWMgdm9pZCBuZXN0ZWRfZXB0X2luamVjdF9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0ICogXCJOTUkgdW5ibG9ja2luZyBkdWUgdG8gSVJFVFwiLCBpLmUuIHRoZSBiaXQgY2FuIGJlIHByb3BhZ2F0ZWRcbiBcdFx0ICogYXMtaXMgZnJvbSB0aGUgb3JpZ2luYWwgRVhJVF9RVUFMSUZJQ0FUSU9OLlxuIFx0XHQgKi9cbi1cdFx0ZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSkgXHUwMDI2IElOVFJfSU5GT19VTkJMT0NLX05NSTtcbitcdFx0ZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KSBcdTAwMjYgSU5UUl9JTkZPX1VOQkxPQ0tfTk1JO1xuIFx0fSBlbHNlIHtcbiBcdFx0aWYgKGZhdWx0LVx1MDAzZWVycm9yX2NvZGUgXHUwMDI2IFBGRVJSX1JTVkRfTUFTSykge1xuIFx0XHRcdHZtX2V4aXRfcmVhc29uID0gRVhJVF9SRUFTT05fRVBUX01JU0NPTkZJRztcbkBAIC00NzIsNyArNDcyLDcgQEAgc3RhdGljIHZvaWQgbmVzdGVkX2VwdF9pbmplY3RfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRcdFx0ICogYW5kIHdhbGtzIHRoZSBmYXVsdGluZyBHUEEuXG4gXHRcdFx0ICovXG4gXHRcdFx0aWYgKGZyb21faGFyZHdhcmUpXG4tXHRcdFx0XHRleGl0X3F1YWxpZmljYXRpb24gfD0gdm14X2dldF9leGl0X3F1YWwodmNwdSkgXHUwMDI2IG1hc2s7XG4rXHRcdFx0XHRleGl0X3F1YWxpZmljYXRpb24gfD0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KSBcdTAwMjYgbWFzaztcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRleGl0X3F1YWxpZmljYXRpb24gfD0gZmF1bHQtXHUwMDNlZXhpdF9xdWFsaWZpY2F0aW9uIFx1MDAyNiBtYXNrO1xuIFxuQEAgLTQ3NDcsNyArNDc0Nyw3IEBAIHN0YXRpYyB2b2lkIHByZXBhcmVfdm1jczEyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZtY3MxMiAqdm1jczEyLFxuIHtcbiBcdC8qIHVwZGF0ZSBleGl0IGluZm9ybWF0aW9uIGZpZWxkczogKi9cbiBcdHZtY3MxMi1cdTAwM2V2bV9leGl0X3JlYXNvbiA9IHZtX2V4aXRfcmVhc29uO1xuLVx0aWYgKHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZW5jbGF2ZV9tb2RlKVxuK1x0aWYgKHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5lbmNsYXZlX21vZGUpXG4gXHRcdHZtY3MxMi1cdTAwM2V2bV9leGl0X3JlYXNvbiB8PSBWTVhfRVhJVF9SRUFTT05TX1NHWF9FTkNMQVZFX01PREU7XG4gXHR2bWNzMTItXHUwMDNlZXhpdF9xdWFsaWZpY2F0aW9uID0gZXhpdF9xdWFsaWZpY2F0aW9uO1xuIFxuQEAgLTUzNzMsNyArNTM3Myw3IEBAIHN0YXRpYyBpbnQgbmVzdGVkX3ZteF9nZXRfdm1wdHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCAqdm1wb2ludGVyLFxuIFx0c3RydWN0IHg4Nl9leGNlcHRpb24gZTtcbiBcdGludCByO1xuIFxuLVx0aWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgdm14X2dldF9leGl0X3F1YWwodmNwdSksXG4rXHRpZiAoZ2V0X3ZteF9tZW1fYWRkcmVzcyh2Y3B1LCB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxuIFx0XHRcdFx0dm1jc19yZWFkMzIoVk1YX0lOU1RSVUNUSU9OX0lORk8pLCBmYWxzZSxcbiBcdFx0XHRcdHNpemVvZigqdm1wb2ludGVyKSwgXHUwMDI2Z3ZhKSkge1xuIFx0XHQqcmV0ID0gMTtcbkBAIC01NjY1LDcgKzU2NjUsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXJlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCB2bWNzMTIgKnZtY3MxMiA9IGlzX2d1ZXN0X21vZGUodmNwdSkgPyBnZXRfc2hhZG93X3ZtY3MxMih2Y3B1KVxuIFx0XHRcdFx0XHRcdCAgICA6IGdldF92bWNzMTIodmNwdSk7XG4tXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuK1x0dW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFx0dTMyIGluc3RyX2luZm8gPSB2bWNzX3JlYWQzMihWTVhfSU5TVFJVQ1RJT05fSU5GTyk7XG4gXHRzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTtcbiBcdHN0cnVjdCB4ODZfZXhjZXB0aW9uIGU7XG5AQCAtNTc3MSw3ICs1NzcxLDcgQEAgc3RhdGljIGludCBoYW5kbGVfdm13cml0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IHZtY3MxMiAqdm1jczEyID0gaXNfZ3Vlc3RfbW9kZSh2Y3B1KSA/IGdldF9zaGFkb3dfdm1jczEyKHZjcHUpXG4gXHRcdFx0XHRcdFx0ICAgIDogZ2V0X3ZtY3MxMih2Y3B1KTtcbi1cdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4rXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXHR1MzIgaW5zdHJfaW5mbyA9IHZtY3NfcmVhZDMyKFZNWF9JTlNUUlVDVElPTl9JTkZPKTtcbiBcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xuIFx0c3RydWN0IHg4Nl9leGNlcHRpb24gZTtcbkBAIC01OTYwLDcgKzU5NjAsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXB0cmxkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiAvKiBFbXVsYXRlIHRoZSBWTVBUUlNUIGluc3RydWN0aW9uICovXG4gc3RhdGljIGludCBoYW5kbGVfdm1wdHJzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBleGl0X3F1YWwgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbitcdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdHUzMiBpbnN0cl9pbmZvID0gdm1jc19yZWFkMzIoVk1YX0lOU1RSVUNUSU9OX0lORk8pO1xuIFx0Z3BhX3QgY3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS1cdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0cjtcbiBcdHN0cnVjdCB4ODZfZXhjZXB0aW9uIGU7XG5AQCAtNjAyMSw3ICs2MDIxLDcgQEAgc3RhdGljIGludCBoYW5kbGVfaW52ZXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdC8qIEFjY29yZGluZyB0byB0aGUgSW50ZWwgVk1YIGluc3RydWN0aW9uIHJlZmVyZW5jZSwgdGhlIG1lbW9yeVxuIFx0ICogb3BlcmFuZCBpcyByZWFkIGV2ZW4gaWYgaXQgaXNuJ3QgbmVlZGVkIChlLmcuLCBmb3IgdHlwZT09Z2xvYmFsKVxuIFx0ICovXG4tXHRpZiAoZ2V0X3ZteF9tZW1fYWRkcmVzcyh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSxcbitcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZ0X2dldF9leGl0X3F1YWwodmNwdSksXG4gXHRcdFx0dm14X2luc3RydWN0aW9uX2luZm8sIGZhbHNlLCBzaXplb2Yob3BlcmFuZCksIFx1MDAyNmd2YSkpXG4gXHRcdHJldHVybiAxO1xuIFx0ciA9IGt2bV9yZWFkX2d1ZXN0X3ZpcnQodmNwdSwgZ3ZhLCBcdTAwMjZvcGVyYW5kLCBzaXplb2Yob3BlcmFuZCksIFx1MDAyNmUpO1xuQEAgLTYxMDQsNyArNjEwNCw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2ludnZwaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0LyogYWNjb3JkaW5nIHRvIHRoZSBpbnRlbCB2bXggaW5zdHJ1Y3Rpb24gcmVmZXJlbmNlLCB0aGUgbWVtb3J5XG4gXHQgKiBvcGVyYW5kIGlzIHJlYWQgZXZlbiBpZiBpdCBpc24ndCBuZWVkZWQgKGUuZy4sIGZvciB0eXBlPT1nbG9iYWwpXG4gXHQgKi9cbi1cdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxuK1x0aWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KSxcbiBcdFx0XHR2bXhfaW5zdHJ1Y3Rpb25faW5mbywgZmFsc2UsIHNpemVvZihvcGVyYW5kKSwgXHUwMDI2Z3ZhKSlcbiBcdFx0cmV0dXJuIDE7XG4gXHRyID0ga3ZtX3JlYWRfZ3Vlc3RfdmlydCh2Y3B1LCBndmEsIFx1MDAyNm9wZXJhbmQsIHNpemVvZihvcGVyYW5kKSwgXHUwMDI2ZSk7XG5AQCAtNjIzNiw4ICs2MjM2LDggQEAgc3RhdGljIGludCBoYW5kbGVfdm1mdW5jKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdCAqIEVYSVRfUkVBU09OX1ZNRlVOQyBhcyB0aGUgZXhpdCByZWFzb24uXG4gXHQgKi9cbiBcdG5lc3RlZF92bXhfdm1leGl0KHZjcHUsIHZteC1cdTAwM2V2dC5leGl0X3JlYXNvbi5mdWxsLFxuLVx0XHRcdCAgdm14X2dldF9pbnRyX2luZm8odmNwdSksXG4tXHRcdFx0ICB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSk7XG4rXHRcdFx0ICB2dF9nZXRfaW50cl9pbmZvKHZjcHUpLFxuK1x0XHRcdCAgdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KSk7XG4gXHRyZXR1cm4gMTtcbiB9XG4gXG5AQCAtNjI4OCw3ICs2Mjg4LDcgQEAgc3RhdGljIGJvb2wgbmVzdGVkX3ZteF9leGl0X2hhbmRsZWRfaW8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0aWYgKCFuZXN0ZWRfY3B1X2hhcyh2bWNzMTIsIENQVV9CQVNFRF9VU0VfSU9fQklUTUFQUykpXG4gXHRcdHJldHVybiBuZXN0ZWRfY3B1X2hhcyh2bWNzMTIsIENQVV9CQVNFRF9VTkNPTkRfSU9fRVhJVElORyk7XG4gXG4tXHRleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbitcdGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXG4gXHRwb3J0ID0gZXhpdF9xdWFsaWZpY2F0aW9uIFx1MDAzZVx1MDAzZSAxNjtcbiBcdHNpemUgPSAoZXhpdF9xdWFsaWZpY2F0aW9uIFx1MDAyNiA3KSArIDE7XG5AQCAtNjMxNCw3ICs2MzE0LDcgQEAgc3RhdGljIGJvb2wgbmVzdGVkX3ZteF9leGl0X2hhbmRsZWRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcbiBcdGlmIChleGl0X3JlYXNvbi5iYXNpYyA9PSBFWElUX1JFQVNPTl9NU1JfUkVBRF9JTU0gfHxcbiBcdCAgICBleGl0X3JlYXNvbi5iYXNpYyA9PSBFWElUX1JFQVNPTl9NU1JfV1JJVEVfSU1NKVxuLVx0XHRtc3JfaW5kZXggPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbitcdFx0bXNyX2luZGV4ID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdGVsc2VcbiBcdFx0bXNyX2luZGV4ID0ga3ZtX2VjeF9yZWFkKHZjcHUpO1xuIFxuQEAgLTYzNTAsNyArNjM1MCw3IEBAIHN0YXRpYyBib29sIG5lc3RlZF92bXhfZXhpdF9oYW5kbGVkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gc3RhdGljIGJvb2wgbmVzdGVkX3ZteF9leGl0X2hhbmRsZWRfY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0c3RydWN0IHZtY3MxMiAqdm1jczEyKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4rXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXHRpbnQgY3IgPSBleGl0X3F1YWxpZmljYXRpb24gXHUwMDI2IDE1O1xuIFx0aW50IHJlZztcbiBcdHVuc2lnbmVkIGxvbmcgdmFsO1xuQEAgLTY0ODQsNyArNjQ4NCw3IEBAIHN0YXRpYyBib29sIG5lc3RlZF92bXhfbDBfd2FudHNfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXG4gXHRzd2l0Y2ggKCh1MTYpZXhpdF9yZWFzb24uYmFzaWMpIHtcbiBcdGNhc2UgRVhJVF9SRUFTT05fRVhDRVBUSU9OX05NSTpcbi1cdFx0aW50cl9pbmZvID0gdm14X2dldF9pbnRyX2luZm8odmNwdSk7XG4rXHRcdGludHJfaW5mbyA9IHZ0X2dldF9pbnRyX2luZm8odmNwdSk7XG4gXHRcdGlmIChpc19ubWkoaW50cl9pbmZvKSlcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdFx0ZWxzZSBpZiAoaXNfcGFnZV9mYXVsdChpbnRyX2luZm8pKVxuQEAgLTY1NjcsNyArNjU2Nyw3IEBAIHN0YXRpYyBib29sIG5lc3RlZF92bXhfbDFfd2FudHNfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXG4gXHRzd2l0Y2ggKCh1MTYpZXhpdF9yZWFzb24uYmFzaWMpIHtcbiBcdGNhc2UgRVhJVF9SRUFTT05fRVhDRVBUSU9OX05NSTpcbi1cdFx0aW50cl9pbmZvID0gdm14X2dldF9pbnRyX2luZm8odmNwdSk7XG4rXHRcdGludHJfaW5mbyA9IHZ0X2dldF9pbnRyX2luZm8odmNwdSk7XG4gXHRcdGlmIChpc19ubWkoaW50cl9pbmZvKSlcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdFx0ZWxzZSBpZiAoaXNfcGFnZV9mYXVsdChpbnRyX2luZm8pKVxuQEAgLTY3MzcsMTQgKzY3MzcsMTQgQEAgYm9vbCBuZXN0ZWRfdm14X3JlZmxlY3Rfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdCAqIG5lZWQgdG8gYmUgc3ludGhlc2l6ZWQgYnkgcXVlcnlpbmcgdGhlIGluLWtlcm5lbCBMQVBJQywgYnV0IGV4dGVybmFsXG4gXHQgKiBpbnRlcnJ1cHRzIGFyZSBuZXZlciByZWZsZWN0ZWQgdG8gTDEgc28gaXQncyBhIG5vbi1pc3N1ZS5cbiBcdCAqL1xuLVx0ZXhpdF9pbnRyX2luZm8gPSB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcbitcdGV4aXRfaW50cl9pbmZvID0gdnRfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcbiBcdGlmIChpc19leGNlcHRpb25fd2l0aF9lcnJvcl9jb2RlKGV4aXRfaW50cl9pbmZvKSkge1xuIFx0XHRzdHJ1Y3Qgdm1jczEyICp2bWNzMTIgPSBnZXRfdm1jczEyKHZjcHUpO1xuIFxuIFx0XHR2bWNzMTItXHUwMDNldm1fZXhpdF9pbnRyX2Vycm9yX2NvZGUgPVxuIFx0XHRcdHZtY3NfcmVhZDMyKFZNX0VYSVRfSU5UUl9FUlJPUl9DT0RFKTtcbiBcdH1cbi1cdGV4aXRfcXVhbCA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuK1x0ZXhpdF9xdWFsID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcbiByZWZsZWN0X3ZtZXhpdDpcbiBcdG5lc3RlZF92bXhfdm1leGl0KHZjcHUsIGV4aXRfcmVhc29uLmZ1bGwsIGV4aXRfaW50cl9pbmZvLCBleGl0X3F1YWwpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYyBiL2FyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuY1xuaW5kZXggNGE2ZDlhMTdkYTIzOC4uMjY0NGFkZDU0Yjc2YiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuY1xuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5jXG5AQCAtMTQsNiArMTQsOCBAQFxuICNpbmNsdWRlIFwidm14LmhcIlxuICNpbmNsdWRlIFwidGR4LmhcIlxuIFxuKyNwcmFnbWEgR0NDIHBvaXNvbiB0b192bXhcbitcbiAvKlxuICAqIE1haW50YWluIGEgcGVyLUNQVSBsaXN0IG9mIHZDUFVzIHRoYXQgbmVlZCB0byBiZSBhd2FrZW5lZCBieSB3YWtldXBfaGFuZGxlcigpXG4gICogd2hlbiBhIFdBS0VVUF9WRUNUT1IgaW50ZXJydXB0ZWQgaXMgcG9zdGVkLiAgdkNQVXMgYXJlIGFkZGVkIHRvIHRoZSBsaXN0IHdoZW5cbkBAIC01NCw3ICs1Niw3IEBAIHN0YXRpYyBpbnQgcGlfdHJ5X3NldF9jb250cm9sKHN0cnVjdCBwaV9kZXNjICpwaV9kZXNjLCB1NjQgKnBvbGQsIHU2NCBuZXcpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tdm9pZCB2bXhfdmNwdV9waV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcbit2b2lkIHZ0X3ZjcHVfcGlfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4ge1xuIFx0c3RydWN0IHBpX2Rlc2MgKnBpX2Rlc2MgPSB2Y3B1X3RvX3BpX2Rlc2ModmNwdSk7XG4gXHRzdHJ1Y3QgdmNwdV92dCAqdnQgPSB0b192dCh2Y3B1KTtcbkBAIC0xNDQsMTEgKzE0NiwxMSBAQCB2b2lkIHZteF92Y3B1X3BpX2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KVxuIFx0XHRwaV9zZXRfb24ocGlfZGVzYyk7XG4gfVxuIFxuLXN0YXRpYyBib29sIHZteF9jYW5fdXNlX3Z0ZF9waShzdHJ1Y3Qga3ZtICprdm0pXG4rc3RhdGljIGJvb2wgdnRfY2FuX3VzZV92dGRfcGkoc3RydWN0IGt2bSAqa3ZtKVxuIHtcbiBcdC8qXG4gXHQgKiBOb3RlLCByZWFkaW5nIHRoZSBudW1iZXIgb2YgcG9zc2libGUgYnlwYXNzIElSUXMgY2FuIHJhY2Ugd2l0aCBhXG4tXHQgKiBieXBhc3MgSVJRIGJlaW5nIGF0dGFjaGVkIHRvIHRoZSBWTS4gIHZteF9waV9zdGFydF9ieXBhc3MoKSBlbnN1cmVzXG4rXHQgKiBieXBhc3MgSVJRIGJlaW5nIGF0dGFjaGVkIHRvIHRoZSBWTS4gIHZ0X3BpX3N0YXJ0X2J5cGFzcygpIGVuc3VyZXNcbiBcdCAqIGJsb2NrbmcgdkNQVXMgd2lsbCBzZWUgYW4gZWxldmF0ZWQgY291bnQgb3IgZ2V0IEtWTV9SRVFfVU5CTE9DSy5cbiBcdCAqL1xuIFx0cmV0dXJuIGlycWNoaXBfaW5fa2VybmVsKGt2bSkgXHUwMDI2XHUwMDI2IGt2bV9hcmNoX2hhc19pcnFfYnlwYXNzKCkgXHUwMDI2XHUwMDI2XG5AQCAtMjA2LDcgKzIwOCw3IEBAIHN0YXRpYyB2b2lkIHBpX2VuYWJsZV93YWtldXBfaGFuZGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdF9fYXBpY19zZW5kX0lQSV9zZWxmKFBPU1RFRF9JTlRSX1dBS0VVUF9WRUNUT1IpO1xuIH1cbiBcbi1zdGF0aWMgYm9vbCB2bXhfbmVlZHNfcGlfd2FrZXVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbitzdGF0aWMgYm9vbCB2dF9uZWVkc19waV93YWtldXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdC8qXG4gXHQgKiBUaGUgZGVmYXVsdCBwb3N0ZWQgaW50ZXJydXB0IHZlY3RvciBkb2VzIG5vdGhpbmcgd2hlblxuQEAgLTIxNywxNCArMjE5LDE0IEBAIHN0YXRpYyBib29sIHZteF9uZWVkc19waV93YWtldXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICogYmFjayB0byB0aGUgcGlfd2FrZXVwX2hhbmRsZXIoKSBmdW5jdGlvbi5cbiBcdCAqL1xuIFx0cmV0dXJuICh2bXhfY2FuX3VzZV9pcGl2KHZjcHUpIFx1MDAyNlx1MDAyNiAhaXNfdGRfdmNwdSh2Y3B1KSkgfHxcbi1cdFx0dm14X2Nhbl91c2VfdnRkX3BpKHZjcHUtXHUwMDNla3ZtKTtcbitcdFx0dnRfY2FuX3VzZV92dGRfcGkodmNwdS1cdTAwM2Vrdm0pO1xuIH1cbiBcbi12b2lkIHZteF92Y3B1X3BpX3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4rdm9pZCB2dF92Y3B1X3BpX3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IHBpX2Rlc2MgKnBpX2Rlc2MgPSB2Y3B1X3RvX3BpX2Rlc2ModmNwdSk7XG4gXG4tXHRpZiAoIXZteF9uZWVkc19waV93YWtldXAodmNwdSkpXG4rXHRpZiAoIXZ0X25lZWRzX3BpX3dha2V1cCh2Y3B1KSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0LypcbkBAIC0yOTIsMTcgKzI5NCwxNyBAQCBib29sIHBpX2hhc19wZW5kaW5nX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gLypcbiAgKiBLaWNrIGFsbCB2Q1BVcyB3aGVuIHRoZSBmaXJzdCBwb3NzaWJsZSBieXBhc3MgSVJRIGlzIGF0dGFjaGVkIHRvIGEgVk0sIGFzXG4gICogYmxvY2tpbmcgdkNQVXMgbWF5IHNjaGVkdWxlZCBvdXQgd2l0aG91dCByZWNvbmZpZ3VyaW5nIFBJRC5OViB0byB0aGUgd2FrZXVwXG4tICogdmVjdG9yLCBpLmUuIGlmIHRoZSBieXBhc3MgSVJRIGNhbWUgYWxvbmcgYWZ0ZXIgdm14X3ZjcHVfcGlfcHV0KCkuXG4rICogdmVjdG9yLCBpLmUuIGlmIHRoZSBieXBhc3MgSVJRIGNhbWUgYWxvbmcgYWZ0ZXIgdnRfdmNwdV9waV9wdXQoKS5cbiAgKi9cbi12b2lkIHZteF9waV9zdGFydF9ieXBhc3Moc3RydWN0IGt2bSAqa3ZtKVxuK3ZvaWQgdnRfcGlfc3RhcnRfYnlwYXNzKHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4tXHRpZiAoV0FSTl9PTl9PTkNFKCF2bXhfY2FuX3VzZV92dGRfcGkoa3ZtKSkpXG4rXHRpZiAoV0FSTl9PTl9PTkNFKCF2dF9jYW5fdXNlX3Z0ZF9waShrdm0pKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0a3ZtX21ha2VfYWxsX2NwdXNfcmVxdWVzdChrdm0sIEtWTV9SRVFfVU5CTE9DSyk7XG4gfVxuIFxuLWludCB2bXhfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sXG4raW50IHZ0X3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHQgICAgICAgdW5zaWduZWQgaW50IGhvc3RfaXJxLCB1aW50MzJfdCBndWVzdF9pcnEsXG4gXHRcdCAgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2ZWN0b3IpXG4ge1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuaCBiL2FyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuaFxuaW5kZXggYTRhZjM5OTQ4Y2YwNC4uYzU4NjBlYTgyOGFlOSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuaFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5oXG5AQCAtOCwxNiArOCwxNiBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS9wb3N0ZWRfaW50ci5oXHUwMDNlXG4gXG4tdm9pZCB2bXhfdmNwdV9waV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSk7XG4tdm9pZCB2bXhfdmNwdV9waV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbit2b2lkIHZ0X3ZjcHVfcGlfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpO1xuK3ZvaWQgdnRfdmNwdV9waV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIHBpX3dha2V1cF9oYW5kbGVyKHZvaWQpO1xuIHZvaWQgX19pbml0IHBpX2luaXRfY3B1KGludCBjcHUpO1xuIHZvaWQgcGlfYXBpY3ZfcHJlX3N0YXRlX3Jlc3RvcmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBib29sIHBpX2hhc19wZW5kaW5nX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuLWludCB2bXhfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sXG4raW50IHZ0X3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHQgICAgICAgdW5zaWduZWQgaW50IGhvc3RfaXJxLCB1aW50MzJfdCBndWVzdF9pcnEsXG4gXHRcdCAgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2ZWN0b3IpO1xuLXZvaWQgdm14X3BpX3N0YXJ0X2J5cGFzcyhzdHJ1Y3Qga3ZtICprdm0pO1xuK3ZvaWQgdnRfcGlfc3RhcnRfYnlwYXNzKHN0cnVjdCBrdm0gKmt2bSk7XG4gXG4gc3RhdGljIGlubGluZSBpbnQgcGlfZmluZF9oaWdoZXN0X3ZlY3RvcihzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYylcbiB7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbmluZGV4IGIyNzJjMjA1ODZhNzQuLmVmYmIxYWM2ZjUxZWEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG5AQCAtNzE2LDcgKzcxNiw3IEBAIHZvaWQgdGR4X3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4ge1xuIFx0c3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7XG4gXG4tXHR2bXhfdmNwdV9waV9sb2FkKHZjcHUsIGNwdSk7XG4rXHR2dF92Y3B1X3BpX2xvYWQodmNwdSwgY3B1KTtcbiBcdGlmICh2Y3B1LVx1MDAzZWNwdSA9PSBjcHUgfHwgIWlzX2hraWRfYXNzaWduZWQodG9fa3ZtX3RkeCh2Y3B1LVx1MDAzZWt2bSkpKVxuIFx0XHRyZXR1cm47XG4gXG5AQCAtNzQxLDcgKzc0MSw3IEBAIGJvb2wgdGR4X2ludGVycnVwdF9hbGxvd2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdCAqIGludGVycnVwdCBpcyBhbHdheXMgYWxsb3dlZCB1bmxlc3MgVERYIGd1ZXN0IGNhbGxzIFREVk1DQUxMIHdpdGggSExULFxuIFx0ICogd2hpY2ggcGFzc2VzIHRoZSBpbnRlcnJ1cHQgYmxvY2tlZCBmbGFnLlxuIFx0ICovXG4tXHRyZXR1cm4gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYyAhPSBFWElUX1JFQVNPTl9ITFQgfHxcbitcdHJldHVybiB2dF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMgIT0gRVhJVF9SRUFTT05fSExUIHx8XG4gXHQgICAgICAgIXRvX3RkeCh2Y3B1KS1cdTAwM2V2cF9lbnRlcl9hcmdzLnIxMjtcbiB9XG4gXG5AQCAtNzU5LDcgKzc1OSw3IEBAIHN0YXRpYyBib29sIHRkeF9wcm90ZWN0ZWRfYXBpY19oYXNfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdCAqIG90aGVyd2lzZSB0aGUgaW50ZXJydXB0IHdvdWxkIGhhdmUgYmVlbiBzZXJ2aWNlZCBhdCB0aGUgaW5zdHJ1Y3Rpb25cbiBcdCAqIGJvdW5kYXJ5LlxuIFx0ICovXG4tXHRpZiAodm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYyAhPSBFWElUX1JFQVNPTl9ITFQgfHxcbitcdGlmICh2dF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMgIT0gRVhJVF9SRUFTT05fSExUIHx8XG4gXHQgICAgdG9fdGR4KHZjcHUpLVx1MDAzZXZwX2VudGVyX2FyZ3MucjEyKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG5AQCAtODI2LDcgKzgyNiw3IEBAIHN0YXRpYyB2b2lkIHRkeF9wcmVwYXJlX3N3aXRjaF90b19ob3N0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiB2b2lkIHRkeF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0dm14X3ZjcHVfcGlfcHV0KHZjcHUpO1xuK1x0dnRfdmNwdV9waV9wdXQodmNwdSk7XG4gXHR0ZHhfcHJlcGFyZV9zd2l0Y2hfdG9faG9zdCh2Y3B1KTtcbiB9XG4gXG5AQCAtOTc0LDE1ICs5NzQsMTUgQEAgc3RhdGljIG5vaW5zdHIgdm9pZCB0ZHhfdmNwdV9lbnRlcl9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHRkeC1cdTAwM2VleGl0X2dwYSA9IHRkeC1cdTAwM2V2cF9lbnRlcl9hcmdzLnI4O1xuIFx0dnQtXHUwMDNlZXhpdF9pbnRyX2luZm8gPSB0ZHgtXHUwMDNldnBfZW50ZXJfYXJncy5yOTtcbiBcbi1cdHZteF9oYW5kbGVfbm1pKHZjcHUpO1xuK1x0dnRfaGFuZGxlX25taSh2Y3B1KTtcbiBcbiBcdGd1ZXN0X3N0YXRlX2V4aXRfaXJxb2ZmKCk7XG4gfVxuIFxuIHN0YXRpYyBib29sIHRkeF9mYWlsZWRfdm1lbnRyeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0cmV0dXJuIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkgXHUwMDI2XHUwMDI2XG4tXHQgICAgICAgdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mdWxsICE9IC0xdTtcbitcdHJldHVybiB2dF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZ1bGwgIT0gLTF1O1xuIH1cbiBcbiBzdGF0aWMgZmFzdHBhdGhfdCB0ZHhfZXhpdF9oYW5kbGVyc19mYXN0cGF0aChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5AQCAtMTEzMSw3ICsxMTMxLDcgQEAgdm9pZCB0ZHhfaW5qZWN0X25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gc3RhdGljIGludCB0ZHhfaGFuZGxlX2V4Y2VwdGlvbl9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHUzMiBpbnRyX2luZm8gPSB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcbitcdHUzMiBpbnRyX2luZm8gPSB2dF9nZXRfaW50cl9pbmZvKHZjcHUpO1xuIFxuIFx0LypcbiBcdCAqIE1hY2hpbmUgY2hlY2tzIGFyZSBoYW5kbGVkIGJ5IGhhbmRsZV9leGNlcHRpb25faXJxb2ZmKCksIG9yIGJ5XG5AQCAtMTg5NSw3ICsxODk1LDcgQEAgdm9pZCB0ZHhfZGVsaXZlcl9pbnRlcnJ1cHQoc3RydWN0IGt2bV9sYXBpYyAqYXBpYywgaW50IGRlbGl2ZXJ5X21vZGUsXG4gXHRzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTtcbiBcbiBcdC8qIFREWCBzdXBwb3J0cyBvbmx5IHBvc3RlZCBpbnRlcnJ1cHQuICBObyBsYXBpYyBlbXVsYXRpb24uICovXG4tXHRfX3ZteF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHQodmNwdSwgXHUwMDI2dGR4LVx1MDAzZXZ0LnBpX2Rlc2MsIHZlY3Rvcik7XG4rXHRfX3Z0X2RlbGl2ZXJfcG9zdGVkX2ludGVycnVwdCh2Y3B1LCBcdTAwMjZ0ZHgtXHUwMDNldnQucGlfZGVzYywgdmVjdG9yKTtcbiBcbiBcdHRyYWNlX2t2bV9hcGljdl9hY2NlcHRfaXJxKHZjcHUtXHUwMDNldmNwdV9pZCwgZGVsaXZlcnlfbW9kZSwgdHJpZ19tb2RlLCB2ZWN0b3IpO1xuIH1cbkBAIC0xOTAzLDcgKzE5MDMsNyBAQCB2b2lkIHRkeF9kZWxpdmVyX2ludGVycnVwdChzdHJ1Y3Qga3ZtX2xhcGljICphcGljLCBpbnQgZGVsaXZlcnlfbW9kZSxcbiBzdGF0aWMgaW5saW5lIGJvb2wgdGR4X2lzX3NlcHRfdmlvbGF0aW9uX3VuZXhwZWN0ZWRfcGVuZGluZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0dTY0IGVlcV90eXBlID0gdG9fdGR4KHZjcHUpLVx1MDAzZWV4dF9leGl0X3F1YWxpZmljYXRpb24gXHUwMDI2IFREWF9FWFRfRVhJVF9RVUFMX1RZUEVfTUFTSztcbi1cdHU2NCBlcSA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuK1x0dTY0IGVxID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcbiBcdGlmIChlZXFfdHlwZSAhPSBURFhfRVhUX0VYSVRfUVVBTF9UWVBFX1BFTkRJTkdfRVBUX1ZJT0xBVElPTilcbiBcdFx0cmV0dXJuIGZhbHNlO1xuQEAgLTE5MzksNyArMTkzOSw3IEBAIHN0YXRpYyBpbnQgdGR4X2hhbmRsZV9lcHRfdmlvbGF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0LyogT25seSBwcml2YXRlIEdQQSB0cmlnZ2VycyB6ZXJvLXN0ZXAgbWl0aWdhdGlvbiAqL1xuIFx0XHRsb2NhbF9yZXRyeSA9IHRydWU7XG4gXHR9IGVsc2Uge1xuLVx0XHRleGl0X3F1YWwgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbitcdFx0ZXhpdF9xdWFsID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdFx0LypcbiBcdFx0ICogRVBUIHZpb2xhdGlvbiBkdWUgdG8gaW5zdHJ1Y3Rpb24gZmV0Y2ggc2hvdWxkIG5ldmVyIGJlXG4gXHRcdCAqIHRyaWdnZXJlZCBmcm9tIHNoYXJlZCBtZW1vcnkgaW4gVERYIGd1ZXN0LiAgSWYgc3VjaCBFUFRcbkBAIC0xOTg3LDcgKzE5ODcsNyBAQCBzdGF0aWMgaW50IHRkeF9oYW5kbGVfZXB0X3Zpb2xhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHR3aGlsZSAoMSkge1xuIFx0XHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90O1xuIFxuLVx0XHRyZXQgPSBfX3ZteF9oYW5kbGVfZXB0X3Zpb2xhdGlvbih2Y3B1LCBncGEsIGV4aXRfcXVhbCk7XG4rXHRcdHJldCA9IF9fdnRfaGFuZGxlX2VwdF92aW9sYXRpb24odmNwdSwgZ3BhLCBleGl0X3F1YWwpO1xuIFxuIFx0XHRpZiAocmV0ICE9IFJFVF9QRl9SRVRSWSB8fCAhbG9jYWxfcmV0cnkpXG4gXHRcdFx0YnJlYWs7XG5AQCAtMjAyMSw3ICsyMDIxLDcgQEAgaW50IHRkeF9jb21wbGV0ZV9lbXVsYXRlZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZXJyKVxuIFx0XHRyZXR1cm4gMTtcbiBcdH1cbiBcbi1cdGlmICh2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljID09IEVYSVRfUkVBU09OX01TUl9SRUFEKVxuK1x0aWYgKHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYyA9PSBFWElUX1JFQVNPTl9NU1JfUkVBRClcbiBcdFx0dGR2bWNhbGxfc2V0X3JldHVybl92YWwodmNwdSwga3ZtX3JlYWRfZWR4X2VheCh2Y3B1KSk7XG4gXG4gXHRyZXR1cm4gMTtcbkBAIC0yMDMyLDcgKzIwMzIsNyBAQCBpbnQgdGR4X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBmYXN0cGF0aClcbiB7XG4gXHRzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTtcbiBcdHU2NCB2cF9lbnRlcl9yZXQgPSB0ZHgtXHUwMDNldnBfZW50ZXJfcmV0O1xuLVx0dW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uID0gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KTtcbitcdHVuaW9uIHZteF9leGl0X3JlYXNvbiBleGl0X3JlYXNvbiA9IHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KTtcbiBcbiBcdGlmIChmYXN0cGF0aCAhPSBFWElUX0ZBU1RQQVRIX05PTkUpXG4gXHRcdHJldHVybiAxO1xuQEAgLTIxNDIsOSArMjE0Miw5IEBAIHZvaWQgdGR4X2dldF9leGl0X2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgKnJlYXNvbixcbiBcbiBcdCpyZWFzb24gPSB0ZHgtXHUwMDNldnQuZXhpdF9yZWFzb24uZnVsbDtcbiBcdGlmICgqcmVhc29uICE9IC0xdSkge1xuLVx0XHQqaW5mbzEgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbitcdFx0KmluZm8xID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdFx0KmluZm8yID0gdGR4LVx1MDAzZWV4dF9leGl0X3F1YWxpZmljYXRpb247XG4tXHRcdCppbnRyX2luZm8gPSB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcbitcdFx0KmludHJfaW5mbyA9IHZ0X2dldF9pbnRyX2luZm8odmNwdSk7XG4gXHR9IGVsc2Uge1xuIFx0XHQqaW5mbzEgPSAwO1xuIFx0XHQqaW5mbzIgPSAwO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG5pbmRleCA1MDQ2MzBmMGViNDBmLi43ZTM1YzJkMDNjNjllIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC92bXguY1xuKysrIGIvYXJjaC94ODYva3ZtL3ZteC92bXguY1xuQEAgLTE1NzcsMTIgKzE1NzcsMTIgQEAgdm9pZCB2bXhfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcbiBcbiBcdHZteF92Y3B1X2xvYWRfdm1jcyh2Y3B1LCBjcHUpO1xuIFxuLVx0dm14X3ZjcHVfcGlfbG9hZCh2Y3B1LCBjcHUpO1xuK1x0dnRfdmNwdV9waV9sb2FkKHZjcHUsIGNwdSk7XG4gfVxuIFxuIHZvaWQgdm14X3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHR2bXhfdmNwdV9waV9wdXQodmNwdSk7XG4rXHR2dF92Y3B1X3BpX3B1dCh2Y3B1KTtcbiBcbiBcdHZteF9wcmVwYXJlX3N3aXRjaF90b19ob3N0KHRvX3ZteCh2Y3B1KSk7XG4gfVxuQEAgLTE3OTEsNyArMTc5MSw3IEBAIGludCB2bXhfY2hlY2tfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlbXVsX3R5cGUsXG4gXHQgKiBzbyB0aGF0IGd1ZXN0IHVzZXJzcGFjZSBjYW4ndCBEb1MgdGhlIGd1ZXN0IHNpbXBseSBieSB0cmlnZ2VyaW5nXG4gXHQgKiBlbXVsYXRpb24gKGVuY2xhdmVzIGFyZSBDUEwzIG9ubHkpLlxuIFx0ICovXG4tXHRpZiAodm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5lbmNsYXZlX21vZGUpIHtcbitcdGlmICh2dF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZW5jbGF2ZV9tb2RlKSB7XG4gXHRcdGt2bV9xdWV1ZV9leGNlcHRpb24odmNwdSwgVURfVkVDVE9SKTtcbiBcdFx0cmV0dXJuIFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUO1xuIFx0fVxuQEAgLTE4MDYsNyArMTgwNiw3IEBAIGludCB2bXhfY2hlY2tfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlbXVsX3R5cGUsXG4gXG4gc3RhdGljIGludCBza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHR1bmlvbiB2bXhfZXhpdF9yZWFzb24gZXhpdF9yZWFzb24gPSB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpO1xuK1x0dW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uID0gdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpO1xuIFx0dW5zaWduZWQgbG9uZyByaXAsIG9yaWdfcmlwO1xuIFx0dTMyIGluc3RyX2xlbjtcbiBcbkBAIC00NDI0LDcgKzQ0MjQsNyBAQCBzdGF0aWMgaW50IHZteF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgdmVjdG9yKVxuIFx0aWYgKCF2Y3B1LVx1MDAzZWFyY2guYXBpYy1cdTAwM2VhcGljdl9hY3RpdmUpXG4gXHRcdHJldHVybiAtMTtcbiBcbi1cdF9fdm14X2RlbGl2ZXJfcG9zdGVkX2ludGVycnVwdCh2Y3B1LCBcdTAwMjZ2dC1cdTAwM2VwaV9kZXNjLCB2ZWN0b3IpO1xuK1x0X192dF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHQodmNwdSwgXHUwMDI2dnQtXHUwMDNlcGlfZGVzYywgdmVjdG9yKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC01Mzc5LDE1ICs1Mzc5LDkgQEAgYm9vbCB2bXhfZ3Vlc3RfaW5qZWN0X2FjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdCAgICAgICAoa3ZtX2dldF9yZmxhZ3ModmNwdSkgXHUwMDI2IFg4Nl9FRkxBR1NfQUMpO1xuIH1cbiBcbi1zdGF0aWMgYm9vbCBpc194ZmRfbm1fZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLXtcbi1cdHJldHVybiB2Y3B1LVx1MDAzZWFyY2guZ3Vlc3RfZnB1LmZwc3RhdGUtXHUwMDNleGZkIFx1MDAyNlx1MDAyNlxuLVx0ICAgICAgICFrdm1faXNfY3IwX2JpdF9zZXQodmNwdSwgWDg2X0NSMF9UUyk7XG4tfVxuLVxuIHN0YXRpYyBpbnQgdm14X2hhbmRsZV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGVycm9yX2NvZGUpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBjcjIgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbitcdHVuc2lnbmVkIGxvbmcgY3IyID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcbiBcdGlmICh2Y3B1LVx1MDAzZWFyY2guYXBmLmhvc3RfYXBmX2ZsYWdzKVxuIFx0XHRnb3RvIGhhbmRsZV9wZjtcbkBAIC01NDM1LDcgKzU0MjksNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9leGNlcHRpb25fbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHUzMiB2ZWN0X2luZm87XG4gXG4gXHR2ZWN0X2luZm8gPSB2bXgtXHUwMDNlaWR0X3ZlY3RvcmluZ19pbmZvO1xuLVx0aW50cl9pbmZvID0gdm14X2dldF9pbnRyX2luZm8odmNwdSk7XG4rXHRpbnRyX2luZm8gPSB2dF9nZXRfaW50cl9pbmZvKHZjcHUpO1xuIFxuIFx0LypcbiBcdCAqIE1hY2hpbmUgY2hlY2tzIGFyZSBoYW5kbGVkIGJ5IGhhbmRsZV9leGNlcHRpb25faXJxb2ZmKCksIG9yIGJ5XG5AQCAtNTUxNiw3ICs1NTEwLDcgQEAgc3RhdGljIGludCBoYW5kbGVfZXhjZXB0aW9uX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHRzd2l0Y2ggKGV4X25vKSB7XG4gXHRjYXNlIERCX1ZFQ1RPUjpcbi1cdFx0ZHI2ID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4rXHRcdGRyNiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXHRcdGlmICghKHZjcHUtXHUwMDNlZ3Vlc3RfZGVidWcgXHUwMDI2XG4gXHRcdCAgICAgIChLVk1fR1VFU1REQkdfU0lOR0xFU1RFUCB8IEtWTV9HVUVTVERCR19VU0VfSFdfQlApKSkge1xuIFx0XHRcdC8qXG5AQCAtNTU5Miw3ICs1NTg2LDcgQEAgc3RhdGljIGludCBoYW5kbGVfaW8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aW50IHNpemUsIGluLCBzdHJpbmc7XG4gXHR1bnNpZ25lZCBwb3J0O1xuIFxuLVx0ZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4rXHRleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFx0c3RyaW5nID0gKGV4aXRfcXVhbGlmaWNhdGlvbiBcdTAwMjYgMTYpICE9IDA7XG4gXG4gXHQrK3ZjcHUtXHUwMDNlc3RhdC5pb19leGl0cztcbkBAIC01NjgxLDcgKzU2NzUsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpbnQgZXJyO1xuIFx0aW50IHJldDtcbiBcbi1cdGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuK1x0ZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdGNyID0gZXhpdF9xdWFsaWZpY2F0aW9uIFx1MDAyNiAxNTtcbiBcdHJlZyA9IChleGl0X3F1YWxpZmljYXRpb24gXHUwMDNlXHUwMDNlIDgpIFx1MDAyNiAxNTtcbiBcdHN3aXRjaCAoKGV4aXRfcXVhbGlmaWNhdGlvbiBcdTAwM2VcdTAwM2UgNCkgXHUwMDI2IDMpIHtcbkBAIC01NzU5LDcgKzU3NTMsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9kcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpbnQgZHIsIGRyNywgcmVnO1xuIFx0aW50IGVyciA9IDE7XG4gXG4tXHRleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbitcdGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXHRkciA9IGV4aXRfcXVhbGlmaWNhdGlvbiBcdTAwMjYgREVCVUdfUkVHX0FDQ0VTU19OVU07XG4gXG4gXHQvKiBGaXJzdCwgaWYgRFIgZG9lcyBub3QgZXhpc3QsIHRyaWdnZXIgVUQgKi9cbkBAIC01ODU1LDcgKzU4NDksNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9pbnRlcnJ1cHRfd2luZG93KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBzdGF0aWMgaW50IGhhbmRsZV9pbnZscGcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4rXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXG4gXHRrdm1fbW11X2ludmxwZyh2Y3B1LCBleGl0X3F1YWxpZmljYXRpb24pO1xuIFx0cmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xuQEAgLTU4NjQsNyArNTg1OCw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2ludmxwZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gc3RhdGljIGludCBoYW5kbGVfYXBpY19hY2Nlc3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdGlmIChsaWtlbHkoZmFzdGVvaSkpIHtcbi1cdFx0dW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbitcdFx0dW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFx0XHRpbnQgYWNjZXNzX3R5cGUsIG9mZnNldDtcbiBcbiBcdFx0YWNjZXNzX3R5cGUgPSBleGl0X3F1YWxpZmljYXRpb24gXHUwMDI2IEFQSUNfQUNDRVNTX1RZUEU7XG5AQCAtNTg4NSw3ICs1ODc5LDcgQEAgc3RhdGljIGludCBoYW5kbGVfYXBpY19hY2Nlc3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIHN0YXRpYyBpbnQgaGFuZGxlX2FwaWNfZW9pX2luZHVjZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4rXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXHRpbnQgdmVjdG9yID0gZXhpdF9xdWFsaWZpY2F0aW9uIFx1MDAyNiAweGZmO1xuIFxuIFx0LyogRU9JLWluZHVjZWQgVk0gZXhpdCBpcyB0cmFwLWxpa2UgYW5kIHRodXMgbm8gbmVlZCB0byBhZGp1c3QgSVAgKi9cbkBAIC01ODk1LDcgKzU4ODksNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9hcGljX2VvaV9pbmR1Y2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBzdGF0aWMgaW50IGhhbmRsZV9hcGljX3dyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuK1x0dW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFxuIFx0LypcbiBcdCAqIEFQSUMtd3JpdGUgVk0tRXhpdCBpcyB0cmFwLWxpa2UsIEtWTSBkb2Vzbid0IG5lZWQgdG8gYWR2YW5jZSBSSVAgYW5kXG5AQCAtNTkyMyw3ICs1OTE3LDcgQEAgc3RhdGljIGludCBoYW5kbGVfdGFza19zd2l0Y2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWR0X2luZGV4ID0gKHZteC1cdTAwM2VpZHRfdmVjdG9yaW5nX2luZm8gXHUwMDI2IFZFQ1RPUklOR19JTkZPX1ZFQ1RPUl9NQVNLKTtcbiBcdHR5cGUgPSAodm14LVx1MDAzZWlkdF92ZWN0b3JpbmdfaW5mbyBcdTAwMjYgVkVDVE9SSU5HX0lORk9fVFlQRV9NQVNLKTtcbiBcbi1cdGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuK1x0ZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcbiBcdHJlYXNvbiA9ICh1MzIpZXhpdF9xdWFsaWZpY2F0aW9uIFx1MDAzZVx1MDAzZSAzMDtcbiBcdGlmIChyZWFzb24gPT0gVEFTS19TV0lUQ0hfR0FURSBcdTAwMjZcdTAwMjYgaWR0X3YpIHtcbkBAIC01OTY5LDcgKzU5NjMsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV90YXNrX3N3aXRjaChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gc3RhdGljIGludCBoYW5kbGVfZXB0X3Zpb2xhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbitcdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdGdwYV90IGdwYTtcbiBcbiBcdC8qXG5AQCAtNTk5Nyw3ICs1OTkxLDcgQEAgc3RhdGljIGludCBoYW5kbGVfZXB0X3Zpb2xhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAodW5saWtlbHkoYWxsb3dfc21hbGxlcl9tYXhwaHlhZGRyIFx1MDAyNlx1MDAyNiAha3ZtX3ZjcHVfaXNfbGVnYWxfZ3BhKHZjcHUsIGdwYSkpKVxuIFx0XHRyZXR1cm4ga3ZtX2VtdWxhdGVfaW5zdHJ1Y3Rpb24odmNwdSwgMCk7XG4gXG4tXHRyZXR1cm4gX192bXhfaGFuZGxlX2VwdF92aW9sYXRpb24odmNwdSwgZ3BhLCBleGl0X3F1YWxpZmljYXRpb24pO1xuK1x0cmV0dXJuIF9fdnRfaGFuZGxlX2VwdF92aW9sYXRpb24odmNwdSwgZ3BhLCBleGl0X3F1YWxpZmljYXRpb24pO1xuIH1cbiBcbiBzdGF0aWMgaW50IGhhbmRsZV9lcHRfbWlzY29uZmlnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbkBAIC02MTYwLDcgKzYxNTQsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9pbnZwY2lkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdC8qIEFjY29yZGluZyB0byB0aGUgSW50ZWwgaW5zdHJ1Y3Rpb24gcmVmZXJlbmNlLCB0aGUgbWVtb3J5IG9wZXJhbmRcbiBcdCAqIGlzIHJlYWQgZXZlbiBpZiBpdCBpc24ndCBuZWVkZWQgKGUuZy4sIGZvciB0eXBlPT1hbGwpXG4gXHQgKi9cbi1cdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxuK1x0aWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KSxcbiBcdFx0XHRcdHZteF9pbnN0cnVjdGlvbl9pbmZvLCBmYWxzZSxcbiBcdFx0XHRcdHNpemVvZihvcGVyYW5kKSwgXHUwMDI2Z3ZhKSlcbiBcdFx0cmV0dXJuIDE7XG5AQCAtNjE3NCw3ICs2MTY4LDcgQEAgc3RhdGljIGludCBoYW5kbGVfcG1sX2Z1bGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIFx0dHJhY2Vfa3ZtX3BtbF9mdWxsKHZjcHUtXHUwMDNldmNwdV9pZCk7XG4gXG4tXHRleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbitcdGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXG4gXHQvKlxuIFx0ICogUE1MIGJ1ZmZlciBGVUxMIGhhcHBlbmVkIHdoaWxlIGV4ZWN1dGluZyBpcmV0IGZyb20gTk1JLFxuQEAgLTYyNzgsNyArNjI3Miw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gc3RhdGljIGludCBoYW5kbGVfbm90aWZ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuK1x0dW5zaWduZWQgbG9uZyBleGl0X3F1YWwgPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFx0Ym9vbCBjb250ZXh0X2ludmFsaWQgPSBleGl0X3F1YWwgXHUwMDI2IE5PVElGWV9WTV9DT05URVhUX0lOVkFMSUQ7XG4gXG4gXHQrK3ZjcHUtXHUwMDNlc3RhdC5ub3RpZnlfd2luZG93X2V4aXRzO1xuQEAgLTYzMDksMTMgKzYzMDMsMTMgQEAgc3RhdGljIGludCB2bXhfZ2V0X21zcl9pbW1fcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBzdGF0aWMgaW50IGhhbmRsZV9yZG1zcl9pbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHJldHVybiBrdm1fZW11bGF0ZV9yZG1zcl9pbW0odmNwdSwgdm14X2dldF9leGl0X3F1YWwodmNwdSksXG4rXHRyZXR1cm4ga3ZtX2VtdWxhdGVfcmRtc3JfaW1tKHZjcHUsIHZ0X2dldF9leGl0X3F1YWwodmNwdSksXG4gXHRcdFx0XHQgICAgIHZteF9nZXRfbXNyX2ltbV9yZWcodmNwdSkpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGhhbmRsZV93cm1zcl9pbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHJldHVybiBrdm1fZW11bGF0ZV93cm1zcl9pbW0odmNwdSwgdm14X2dldF9leGl0X3F1YWwodmNwdSksXG4rXHRyZXR1cm4ga3ZtX2VtdWxhdGVfd3Jtc3JfaW1tKHZjcHUsIHZ0X2dldF9leGl0X3F1YWwodmNwdSksXG4gXHRcdFx0XHQgICAgIHZteF9nZXRfbXNyX2ltbV9yZWcodmNwdSkpO1xuIH1cbiBcbkBAIC02MzkyLDEwICs2Mzg2LDEwIEBAIHZvaWQgdm14X2dldF9leGl0X2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgKnJlYXNvbixcbiBcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xuIFxuIFx0KnJlYXNvbiA9IHZteC1cdTAwM2V2dC5leGl0X3JlYXNvbi5mdWxsO1xuLVx0KmluZm8xID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4rXHQqaW5mbzEgPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFx0aWYgKCEodm14LVx1MDAzZXZ0LmV4aXRfcmVhc29uLmZhaWxlZF92bWVudHJ5KSkge1xuIFx0XHQqaW5mbzIgPSB2bXgtXHUwMDNlaWR0X3ZlY3RvcmluZ19pbmZvO1xuLVx0XHQqaW50cl9pbmZvID0gdm14X2dldF9pbnRyX2luZm8odmNwdSk7XG4rXHRcdCppbnRyX2luZm8gPSB2dF9nZXRfaW50cl9pbmZvKHZjcHUpO1xuIFx0XHRpZiAoaXNfZXhjZXB0aW9uX3dpdGhfZXJyb3JfY29kZSgqaW50cl9pbmZvKSlcbiBcdFx0XHQqZXJyb3JfY29kZSA9IHZtY3NfcmVhZDMyKFZNX0VYSVRfSU5UUl9FUlJPUl9DT0RFKTtcbiBcdFx0ZWxzZVxuQEAgLTY3MDYsNyArNjcwMCw3IEBAIHZvaWQgZHVtcF92bWNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBzdGF0aWMgaW50IF9fdm14X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xuLVx0dW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uID0gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KTtcbitcdHVuaW9uIHZteF9leGl0X3JlYXNvbiBleGl0X3JlYXNvbiA9IHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KTtcbiBcdHUzMiB2ZWN0b3JpbmdfaW5mbyA9IHZteC1cdTAwM2VpZHRfdmVjdG9yaW5nX2luZm87XG4gXHR1MTYgZXhpdF9oYW5kbGVyX2luZGV4O1xuIFxuQEAgLTY4NzAsNyArNjg2NCw3IEBAIGludCB2bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpXG4gXHQgKiBFeGl0IHRvIHVzZXIgc3BhY2Ugd2hlbiBidXMgbG9jayBkZXRlY3RlZCB0byBpbmZvcm0gdGhhdCB0aGVyZSBpc1xuIFx0ICogYSBidXMgbG9jayBpbiBndWVzdC5cbiBcdCAqL1xuLVx0aWYgKHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYnVzX2xvY2tfZGV0ZWN0ZWQpIHtcbitcdGlmICh2dF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYnVzX2xvY2tfZGV0ZWN0ZWQpIHtcbiBcdFx0aWYgKHJldCBcdTAwM2UgMClcbiBcdFx0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX1g4Nl9CVVNfTE9DSztcbiBcbkBAIC03MTQzLDc0ICs3MTM3LDYgQEAgdm9pZCB2bXhfbG9hZF9lb2lfZXhpdG1hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqZW9pX2V4aXRfYml0bWFwKVxuIFx0dm1jc193cml0ZTY0KEVPSV9FWElUX0JJVE1BUDMsIGVvaV9leGl0X2JpdG1hcFszXSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGhhbmRsZV9ubV9mYXVsdF9pcnFvZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLXtcbi1cdC8qXG4tXHQgKiBTYXZlIHhmZF9lcnIgdG8gZ3Vlc3RfZnB1IGJlZm9yZSBpbnRlcnJ1cHQgaXMgZW5hYmxlZCwgc28gdGhlXG4tXHQgKiBNU1IgdmFsdWUgaXMgbm90IGNsb2JiZXJlZCBieSB0aGUgaG9zdCBhY3Rpdml0eSBiZWZvcmUgdGhlIGd1ZXN0XG4tXHQgKiBoYXMgY2hhbmNlIHRvIGNvbnN1bWUgaXQuXG4tXHQgKlxuLVx0ICogVXBkYXRlIHRoZSBndWVzdCdzIFhGRF9FUlIgaWYgYW5kIG9ubHkgaWYgWEZEIGlzIGVuYWJsZWQsIGFzIHRoZSAjTk1cbi1cdCAqIGludGVyY2VwdGlvbiBtYXkgaGF2ZSBiZWVuIGNhdXNlZCBieSBMMSBpbnRlcmNlcHRpb24uICBQZXIgdGhlIFNETSxcbi1cdCAqIFhGRF9FUlIgaXMgbm90IG1vZGlmaWVkIGZvciBub24tWEZEICNOTSwgaS5lLiBpZiBDUjAuVFM9MS5cbi1cdCAqXG4tXHQgKiBOb3RlLCBYRkRfRVJSIGlzIHVwZGF0ZWQgX2JlZm9yZV8gdGhlICNOTSBpbnRlcmNlcHRpb24gY2hlY2ssIGkuZS5cbi1cdCAqIHVubGlrZSBDUjIgYW5kIERSNiwgdGhlIHZhbHVlIGlzIG5vdCBhIHBheWxvYWQgdGhhdCBpcyBhdHRhY2hlZCB0b1xuLVx0ICogdGhlICNOTSBleGNlcHRpb24uXG4tXHQgKi9cbi1cdGlmIChpc194ZmRfbm1fZmF1bHQodmNwdSkpXG4tXHRcdHJkbXNycShNU1JfSUEzMl9YRkRfRVJSLCB2Y3B1LVx1MDAzZWFyY2guZ3Vlc3RfZnB1LnhmZF9lcnIpO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBoYW5kbGVfZXhjZXB0aW9uX2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBpbnRyX2luZm8pXG4te1xuLVx0LyogaWYgZXhpdCBkdWUgdG8gUEYgY2hlY2sgZm9yIGFzeW5jIFBGICovXG4tXHRpZiAoaXNfcGFnZV9mYXVsdChpbnRyX2luZm8pKVxuLVx0XHR2Y3B1LVx1MDAzZWFyY2guYXBmLmhvc3RfYXBmX2ZsYWdzID0ga3ZtX3JlYWRfYW5kX3Jlc2V0X2FwZl9mbGFncygpO1xuLVx0LyogaWYgZXhpdCBkdWUgdG8gTk0sIGhhbmRsZSBiZWZvcmUgaW50ZXJydXB0cyBhcmUgZW5hYmxlZCAqL1xuLVx0ZWxzZSBpZiAoaXNfbm1fZmF1bHQoaW50cl9pbmZvKSlcbi1cdFx0aGFuZGxlX25tX2ZhdWx0X2lycW9mZih2Y3B1KTtcbi1cdC8qIEhhbmRsZSBtYWNoaW5lIGNoZWNrcyBiZWZvcmUgaW50ZXJydXB0cyBhcmUgZW5hYmxlZCAqL1xuLVx0ZWxzZSBpZiAoaXNfbWFjaGluZV9jaGVjayhpbnRyX2luZm8pKVxuLVx0XHRrdm1fbWFjaGluZV9jaGVjaygpO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBoYW5kbGVfZXh0ZXJuYWxfaW50ZXJydXB0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tXHRcdFx0XHRcdCAgICAgdTMyIGludHJfaW5mbylcbi17XG4tXHR1bnNpZ25lZCBpbnQgdmVjdG9yID0gaW50cl9pbmZvIFx1MDAyNiBJTlRSX0lORk9fVkVDVE9SX01BU0s7XG4tXG4tXHRpZiAoS1ZNX0JVRyghaXNfZXh0ZXJuYWxfaW50cihpbnRyX2luZm8pLCB2Y3B1LVx1MDAzZWt2bSxcbi1cdCAgICBcInVuZXhwZWN0ZWQgVk0tRXhpdCBpbnRlcnJ1cHQgaW5mbzogMHgleFwiLCBpbnRyX2luZm8pKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRrdm1fYmVmb3JlX2ludGVycnVwdCh2Y3B1LCBLVk1fSEFORExJTkdfSVJRKTtcbi1cdHg4Nl9lbnRyeV9mcm9tX2t2bShFVkVOVF9UWVBFX0VYVElOVCwgdmVjdG9yKTtcbi1cdGt2bV9hZnRlcl9pbnRlcnJ1cHQodmNwdSk7XG4tXG4tXHR2Y3B1LVx1MDAzZWFyY2guYXRfaW5zdHJ1Y3Rpb25fYm91bmRhcnkgPSB0cnVlO1xuLX1cbi1cbi12b2lkIHZteF9oYW5kbGVfZXhpdF9pcnFvZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLXtcbi1cdGlmICh0b192dCh2Y3B1KS1cdTAwM2VlbXVsYXRpb25fcmVxdWlyZWQpXG4tXHRcdHJldHVybjtcbi1cbi1cdHN3aXRjaCAodm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYykge1xuLVx0Y2FzZSBFWElUX1JFQVNPTl9FWFRFUk5BTF9JTlRFUlJVUFQ6XG4tXHRcdGhhbmRsZV9leHRlcm5hbF9pbnRlcnJ1cHRfaXJxb2ZmKHZjcHUsIHZteF9nZXRfaW50cl9pbmZvKHZjcHUpKTtcbi1cdFx0YnJlYWs7XG4tXHRjYXNlIEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUk6XG4tXHRcdGhhbmRsZV9leGNlcHRpb25faXJxb2ZmKHZjcHUsIHZteF9nZXRfaW50cl9pbmZvKHZjcHUpKTtcbi1cdFx0YnJlYWs7XG4tXHRjYXNlIEVYSVRfUkVBU09OX01DRV9EVVJJTkdfVk1FTlRSWTpcbi1cdFx0a3ZtX21hY2hpbmVfY2hlY2soKTtcbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHRicmVhaztcbi1cdH1cbi19XG4tXG4gLypcbiAgKiBUaGUga3ZtIHBhcmFtZXRlciBjYW4gYmUgTlVMTCAobW9kdWxlIGluaXRpYWxpemF0aW9uLCBvciBpbnZvY2F0aW9uIGJlZm9yZVxuICAqIFZNIGNyZWF0aW9uKS4gQmUgc3VyZSB0byBjaGVjayB0aGUga3ZtIHBhcmFtZXRlciBiZWZvcmUgdXNpbmcgaXQuXG5AQCAtNzI1MCw3ICs3MTc2LDcgQEAgc3RhdGljIHZvaWQgdm14X3JlY292ZXJfbm1pX2Jsb2NraW5nKHN0cnVjdCB2Y3B1X3ZteCAqdm14KVxuIFx0XHRpZiAodm14LVx1MDAzZWxvYWRlZF92bWNzLVx1MDAzZW5taV9rbm93bl91bm1hc2tlZClcbiBcdFx0XHRyZXR1cm47XG4gXG4tXHRcdGV4aXRfaW50cl9pbmZvID0gdm14X2dldF9pbnRyX2luZm8oXHUwMDI2dm14LVx1MDAzZXZjcHUpO1xuK1x0XHRleGl0X2ludHJfaW5mbyA9IHZ0X2dldF9pbnRyX2luZm8oXHUwMDI2dm14LVx1MDAzZXZjcHUpO1xuIFx0XHR1bmJsb2NrX25taSA9IChleGl0X2ludHJfaW5mbyBcdTAwMjYgSU5UUl9JTkZPX1VOQkxPQ0tfTk1JKSAhPSAwO1xuIFx0XHR2ZWN0b3IgPSBleGl0X2ludHJfaW5mbyBcdTAwMjYgSU5UUl9JTkZPX1ZFQ1RPUl9NQVNLO1xuIFx0XHQvKlxuQEAgLTc0MTcsMTQgKzczNDMsMTQgQEAgc3RhdGljIGZhc3RwYXRoX3Qgdm14X2V4aXRfaGFuZGxlcnNfZmFzdHBhdGgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0ICogdGhlIGZhc3RwYXRoIGV2ZW4sIGFsbCBvdGhlciBleGl0cyBtdXN0IHVzZSB0aGUgc2xvdyBwYXRoLlxuIFx0ICovXG4gXHRpZiAoaXNfZ3Vlc3RfbW9kZSh2Y3B1KSBcdTAwMjZcdTAwMjZcbi1cdCAgICB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljICE9IEVYSVRfUkVBU09OX1BSRUVNUFRJT05fVElNRVIpXG4rXHQgICAgdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljICE9IEVYSVRfUkVBU09OX1BSRUVNUFRJT05fVElNRVIpXG4gXHRcdHJldHVybiBFWElUX0ZBU1RQQVRIX05PTkU7XG4gXG4tXHRzd2l0Y2ggKHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMpIHtcbitcdHN3aXRjaCAodnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljKSB7XG4gXHRjYXNlIEVYSVRfUkVBU09OX01TUl9XUklURTpcbiBcdFx0cmV0dXJuIGhhbmRsZV9mYXN0cGF0aF93cm1zcih2Y3B1KTtcbiBcdGNhc2UgRVhJVF9SRUFTT05fTVNSX1dSSVRFX0lNTTpcbi1cdFx0cmV0dXJuIGhhbmRsZV9mYXN0cGF0aF93cm1zcl9pbW0odmNwdSwgdm14X2dldF9leGl0X3F1YWwodmNwdSksXG4rXHRcdHJldHVybiBoYW5kbGVfZmFzdHBhdGhfd3Jtc3JfaW1tKHZjcHUsIHZ0X2dldF9leGl0X3F1YWwodmNwdSksXG4gXHRcdFx0XHRcdFx0IHZteF9nZXRfbXNyX2ltbV9yZWcodmNwdSkpO1xuIFx0Y2FzZSBFWElUX1JFQVNPTl9QUkVFTVBUSU9OX1RJTUVSOlxuIFx0XHRyZXR1cm4gaGFuZGxlX2Zhc3RwYXRoX3ByZWVtcHRpb25fdGltZXIodmNwdSwgZm9yY2VfaW1tZWRpYXRlX2V4aXQpO1xuQEAgLTc0MzcsMTcgKzczNjMsNiBAQCBzdGF0aWMgZmFzdHBhdGhfdCB2bXhfZXhpdF9oYW5kbGVyc19mYXN0cGF0aChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHR9XG4gfVxuIFxuLW5vaW5zdHIgdm9pZCB2bXhfaGFuZGxlX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4te1xuLVx0aWYgKCh1MTYpdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYyAhPSBFWElUX1JFQVNPTl9FWENFUFRJT05fTk1JIHx8XG4tXHQgICAgIWlzX25taSh2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KSkpXG4tXHRcdHJldHVybjtcbi1cbi1cdGt2bV9iZWZvcmVfaW50ZXJydXB0KHZjcHUsIEtWTV9IQU5ETElOR19OTUkpO1xuLVx0eDg2X2VudHJ5X2Zyb21fa3ZtKEVWRU5UX1RZUEVfTk1JLCBOTUlfVkVDVE9SKTtcbi1cdGt2bV9hZnRlcl9pbnRlcnJ1cHQodmNwdSk7XG4tfVxuLVxuIHN0YXRpYyBub2luc3RyIHZvaWQgdm14X3ZjcHVfZW50ZXJfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRcdFx0XHRcdHVuc2lnbmVkIGludCBmbGFncylcbiB7XG5AQCAtNzQ3NywxMCArNzM5MiwxMCBAQCBzdGF0aWMgbm9pbnN0ciB2b2lkIHZteF92Y3B1X2VudGVyX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0fVxuIFxuIFx0dm14LVx1MDAzZXZ0LmV4aXRfcmVhc29uLmZ1bGwgPSB2bWNzX3JlYWQzMihWTV9FWElUX1JFQVNPTik7XG4tXHRpZiAobGlrZWx5KCF2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5KSlcbitcdGlmIChsaWtlbHkoIXZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mYWlsZWRfdm1lbnRyeSkpXG4gXHRcdHZteC1cdTAwM2VpZHRfdmVjdG9yaW5nX2luZm8gPSB2bWNzX3JlYWQzMihJRFRfVkVDVE9SSU5HX0lORk9fRklFTEQpO1xuIFxuLVx0dm14X2hhbmRsZV9ubWkodmNwdSk7XG4rXHR2dF9oYW5kbGVfbm1pKHZjcHUpO1xuIFxuIG91dDpcbiBcdGd1ZXN0X3N0YXRlX2V4aXRfaXJxb2ZmKCk7XG5AQCAtNzYxNyw3ICs3NTMyLDcgQEAgZmFzdHBhdGhfdCB2bXhfdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcnVuX2ZsYWdzKVxuIFx0XHQgKiBjaGVja2luZy5cbiBcdFx0ICovXG4gXHRcdGlmICh2Y3B1LVx1MDAzZWFyY2gubmVzdGVkX3J1bl9wZW5kaW5nIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIXZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkpXG4rXHRcdCAgICAhdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5KVxuIFx0XHRcdCsrdmNwdS1cdTAwM2VzdGF0Lm5lc3RlZF9ydW47XG4gXG4gXHRcdHZjcHUtXHUwMDNlYXJjaC5uZXN0ZWRfcnVuX3BlbmRpbmcgPSAwO1xuQEAgLTc2MjgsNyArNzU0Myw3IEBAIGZhc3RwYXRoX3Qgdm14X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncylcbiBcbiBcdHRyYWNlX2t2bV9leGl0KHZjcHUsIEtWTV9JU0FfVk1YKTtcbiBcbi1cdGlmICh1bmxpa2VseSh2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5KSlcbitcdGlmICh1bmxpa2VseSh2dF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkpKVxuIFx0XHRyZXR1cm4gRVhJVF9GQVNUUEFUSF9OT05FO1xuIFxuIFx0dm14LVx1MDAzZWxvYWRlZF92bWNzLVx1MDAzZWxhdW5jaGVkID0gMTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oIGIvYXJjaC94ODYva3ZtL3ZteC92bXguaFxuaW5kZXggZGM4NTE3ZjE1YmM0Ni4uMzI0N2I1NWIzNDg0MyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmhcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmhcbkBAIC0zMDQsNDMgKzMwNCw2IEBAIHN0cnVjdCBrdm1fdm14IHtcbiBcdHU2NCAqcGlkX3RhYmxlO1xuIH07XG4gXG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSBzdHJ1Y3QgdmNwdV92dCAqdG9fdnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLXtcbi1cdHJldHVybiBcdTAwMjYoY29udGFpbmVyX29mKHZjcHUsIHN0cnVjdCB2Y3B1X3ZteCwgdmNwdSktXHUwMDNldnQpO1xuLX1cbi1cbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHN0cnVjdCBrdm1fdmNwdSAqdnRfdG9fdmNwdShzdHJ1Y3QgdmNwdV92dCAqdnQpXG4te1xuLVx0cmV0dXJuIFx1MDAyNihjb250YWluZXJfb2YodnQsIHN0cnVjdCB2Y3B1X3ZteCwgdnQpLVx1MDAzZXZjcHUpO1xuLX1cbi1cbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHVuaW9uIHZteF9leGl0X3JlYXNvbiB2bXhfZ2V0X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi17XG4tXHRyZXR1cm4gdG9fdnQodmNwdSktXHUwMDNlZXhpdF9yZWFzb247XG4tfVxuLVxuLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgbG9uZyB2bXhfZ2V0X2V4aXRfcXVhbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4te1xuLVx0c3RydWN0IHZjcHVfdnQgKnZ0ID0gdG9fdnQodmNwdSk7XG4tXG4tXHRpZiAoIWt2bV9yZWdpc3Rlcl90ZXN0X2FuZF9tYXJrX2F2YWlsYWJsZSh2Y3B1LCBWQ1BVX1JFR19FWElUX0lORk9fMSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgIVdBUk5fT05fT05DRShpc190ZF92Y3B1KHZjcHUpKSlcbi1cdFx0dnQtXHUwMDNlZXhpdF9xdWFsaWZpY2F0aW9uID0gdm1jc19yZWFkbChFWElUX1FVQUxJRklDQVRJT04pO1xuLVxuLVx0cmV0dXJuIHZ0LVx1MDAzZWV4aXRfcXVhbGlmaWNhdGlvbjtcbi19XG4tXG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdm14X2dldF9pbnRyX2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLXtcbi1cdHN0cnVjdCB2Y3B1X3Z0ICp2dCA9IHRvX3Z0KHZjcHUpO1xuLVxuLVx0aWYgKCFrdm1fcmVnaXN0ZXJfdGVzdF9hbmRfbWFya19hdmFpbGFibGUodmNwdSwgVkNQVV9SRUdfRVhJVF9JTkZPXzIpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICFXQVJOX09OX09OQ0UoaXNfdGRfdmNwdSh2Y3B1KSkpXG4tXHRcdHZ0LVx1MDAzZWV4aXRfaW50cl9pbmZvID0gdm1jc19yZWFkMzIoVk1fRVhJVF9JTlRSX0lORk8pO1xuLVxuLVx0cmV0dXJuIHZ0LVx1MDAzZWV4aXRfaW50cl9pbmZvO1xuLX1cbi1cbiB2b2lkIHZteF92Y3B1X2xvYWRfdm1jcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpO1xuIGludCBhbGxvY2F0ZV92cGlkKHZvaWQpO1xuIHZvaWQgZnJlZV92cGlkKGludCB2cGlkKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaCBiL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oXG5pbmRleCAwNTRmZDE0YmIyZTE2Li43YWMwMmM2ODQ1N2YxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmhcbisrKyBiL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oXG5AQCAtMjcsNyArMjcsNiBAQCB2b2lkIHZteF92Y3B1X3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBpbml0X2V2ZW50KTtcbiB2b2lkIHZteF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTtcbiB2b2lkIHZteF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGludCB2bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpO1xuLXZvaWQgdm14X2hhbmRsZV9leGl0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGludCB2bXhfc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQgdm14X3VwZGF0ZV9lbXVsYXRlZF9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGJvb2wgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjI0OjI0LjM4NDk3OTMzNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY3MTMxNTI1ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoaXMgS1ZNIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIFRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LCB3aGljaCBpcyBleHBlY3RlZC4gVGhlIGZvY3VzIGlzIGNsZWFybHkgb24gdGhlIEtWTSBJbnRlbC9WTVggY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBURFggKFRydXN0ZWQgRG9tYWluIEV4dGVuc2lvbnMpIGludGVncmF0aW9uLCBnaXZlbiB0aGUgZmlsZXMgYmVpbmcgdG91Y2hlZDogYGNvbW1vbi5oYCwgYG1haW4uY2AsIGBuZXN0ZWQuY2AsIGBwb3N0ZWRfaW50ci5jYCwgYHBvc3RlZF9pbnRyLmhgLCBgdGR4LmNgLCBgdm14LmNgLCBgdm14LmhgLCBhbmQgYHg4Nl9vcHMuaGAuXG5cbkZpcnN0IGdsYW5jZSwgaXQgbG9va3MgbGlrZSBhIHJlZmFjdG9yaW5nIGFuZCBURFggaW50ZWdyYXRpb24gZWZmb3J0LiBMZXQgbWUgYnJlYWsgZG93biB3aGF0IHRoZSBwYXRjaCBpcyBkb2luZzpcblxuMS4gIEEgbmV3IGBzdHJ1Y3QgdmNwdV92bXhfdGR4YCBpcyBpbnRyb2R1Y2VkIGluIGBjb21tb24uaGAsIGFuZCB0aGUgYHRvX3Z0YCBhbmQgYHZ0X3RvX3ZjcHVgIG1hY3JvcyBhcmUgZGVmaW5lZCB1c2luZyBpdC4gVGhpcyBsaWtlbHkgdGllcyBURFgtc3BlY2lmaWMgZGF0YSBvciBmdW5jdGlvbnMgdG8gdGhlIGV4aXN0aW5nIEtWTSBWTVggc3RydWN0dXJlLiBTZWVtcyBsaWtlIGEgY29tbW9uIHBhdHRlcm4gZm9yIGFkZGluZyBhIGxheWVyLlxuMi4gIEtleSBmdW5jdGlvbnMsIGB2bXhfZ2V0X2V4aXRfcmVhc29uYCwgYHZteF9nZXRfZXhpdF9xdWFsYCwgYW5kIGB2bXhfZ2V0X2ludHJfaW5mb2AgYXJlIHJlbmFtZWQgdG8gYHZ0X2AgcHJlZml4ZWQgdmVyc2lvbnMgYW5kIG1vdmVkIHRvIGBjb21tb24uaGAuIFRoaXMgaXMgbGlrZWx5IHRvIGVzdGFibGlzaCBhIGNvbW1vbiBBUEksIHBvc3NpYmx5IHRvIGJlIHVzZWQgYmV0d2VlbiBWTVggYW5kIFREWCBjb2RlIHBhdGhzLlxuMy4gIFNpbWlsYXIgcmVuYW1pbmcgYW5kLCBwb3RlbnRpYWxseSwgcmVvcmdhbml6YXRpb24gb2Ygc2V2ZXJhbCBoYW5kbGVyIGZ1bmN0aW9ucyAoYF9fdm14X2hhbmRsZV9lcHRfdmlvbGF0aW9uYCwgZXRjLikgYWxzbyBoYXBwZW5zLiBUaGUgYHZteF9gIHByZWZpeCBpcyBjb25zaXN0ZW50bHkgY2hhbmdlZCB0byBgdnRfYCwgc3VnZ2VzdGluZyBhIGNsZWFyIHRyYW5zaXRpb24gdG8gYSBtb3JlIGdlbmVyaWMgb3IgVERYLXNwZWNpZmljIGludGVyZmFjZS5cbjQuICBNb3JlIGZ1bmN0aW9uIG1vdmVzISBUaGUgaGFuZGxlciBmdW5jdGlvbnMgYGhhbmRsZV9ubV9mYXVsdF9pcnFvZmZgLCBgaGFuZGxlX2V4Y2VwdGlvbl9pcnFvZmZgLCBgaGFuZGxlX2V4dGVybmFsX2ludGVycnVwdF9pcnFvZmZgLCBgdnRfaGFuZGxlX2V4aXRfaXJxb2ZmYCwgYW5kIGB2dF9oYW5kbGVfbm1pYCBhcmUgbW92ZWQgZnJvbSBgdm14LmNgIHRvIGBtYWluLmNgLCBhbmQgaG9vayB0aGUgIGB2dF9oYW5kbGVfZXhpdF9pcnFvZmZgIGludG8gYHZ0X3g4Nl9vcHMuaGFuZGxlX2V4aXRfaXJxb2ZmYC4gVGhpcyBpcyBhIGNsYXNzaWMgcmVmYWN0b3JpbmcgcGF0dGVybiBhbmQgcG90ZW50aWFsbHkgaXNvbGF0ZXMgdGhlIFREWC1zcGVjaWZpYyBoYW5kbGVyJ3MgaW1wbGVtZW50YXRpb24uXG41LiAgRnVuY3Rpb25zIGluIGBwb3N0ZWRfaW50ci5jYCBhcmUgYWxzbyBnZXR0aW5nIHRoZSBgdnRfYCB0cmVhdG1lbnQuIFRoaXMgc3VnZ2VzdHMgbW9kaWZpY2F0aW9ucyB0byB0aGUgcG9zdGVkIGludGVycnVwdCBoYW5kbGluZywgcG9zc2libHkgdG8gYmV0dGVyIHN1cHBvcnQgVERYJ3MgaW50ZXJydXB0IGRlbGl2ZXJ5IG1lY2hhbmlzbXMsIGlmIFREWCBldmVuIGhhcyBwb3N0ZWQgaW50ZXJydXB0cy5cbjYuICBUaGUgY3J1Y2lhbCBzdGVwOiBhbGwgY2FsbGVycyB3aXRoaW4gYHZteC5jYCwgYHRkeC5jYCwgYW5kIGBuZXN0ZWQuY2AgYXJlIHVwZGF0ZWQgdG8gdXNlIHRoZSBuZXcgYHZ0XypgIGZ1bmN0aW9ucy4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gdmVyaWZ5IHRoZSBjaGFuZ2VzIGRvbid0IGJyZWFrIGZ1bmN0aW9uYWxpdHkuXG43LiAgUHJhZ21hIEdDQyBwb2lzb24gaXMgYmVpbmcgdXNlZCB0byBlbmZvcmNlIGFuIGFic3RyYWN0aW9uIGJvdW5kYXJ5LiBOaWNlISBUaGlzIG1ha2VzIHRoZSByZWZhY3RvcmluZyBtb3JlIHJvYnVzdCBhbmQgY2xlYXIuXG44LiAgVGhlIHN0YXRpYyBhc3NlcnRpb24gYG9mZnNldG9mKHN0cnVjdCB2Y3B1X3ZteF90ZHgsIHZ0KSA9PSBvZmZzZXRvZihzdHJ1Y3QgdmNwdV92bXgsIHZ0KWAgaXMgaW50ZXJlc3RpbmcuIFRoaXMgaXMgYSBiaXQgb2YgYSBzYW5pdHkgY2hlY2s7IGl0IHNlZW1zIHRoZSBgdnRgIG1lbWJlciBvZiB0aGUgYHZjcHVfdm14X3RkeGAgc3RydWN0IG5lZWRzIHRvIGJlIGF0IHRoZSBzYW1lIG9mZnNldCBhcyBpbiB0aGUgZXhpc3RpbmcgYHZjcHVfdm14YCBzdHJ1Y3QsIGxpa2VseSByZWxhdGVkIHRvIGhvdyB0aGUgY29kZSBhY2Nlc3NlcyBhbmQgdXNlcyB0aGUgZmllbGRzLlxuXG4qKlJlYWNoYWJpbGl0eSBhbmQgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBpcyB0aGlzIGNvZGUgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nIG9uIGFtZDY0PyBBYnNvbHV0ZWx5LiBLVk0gaXMgYSAqY3JpdGljYWwqIHBpZWNlIG9mIHRoZSB2aXJ0dWFsaXphdGlvbiBpbmZyYXN0cnVjdHVyZSBvbiB4ODYvYW1kNjQgTGludXggYW5kIGlzIGhlYXZpbHkgZnV6emVkIGJ5IHRvb2xzIGxpa2Ugc3l6a2FsbGVyIHZpYSBgL2Rldi9rdm1gLiBUaGlzIGluY2x1ZGVzIHRoZSBpb2N0bCBjYWxscyBsaWtlIGBLVk1fUlVOYCwgYEtWTV9DUkVBVEVfVk1gLCBhbmQgYEtWTV9DUkVBVEVfVkNQVWAsIHdoaWNoIGlzIG5lc3RlZCB2aXJ0dWFsaXphdGlvbi4gSW50ZWwgVk1YIGlzIGFsc28gcmVsZXZhbnQuIEdpdmVuIHRoZSBmb2N1cyBvbiBURFgsIHRoaXMgaXMgcHJvYmFibHkgd29ydGggYSBmdXp6aW5nIGNhbXBhaWduIHRvIGNvdmVyIG5ldyBjb2RlIHBhdGhzLiBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyBmb3IgS1ZNIGFuZCBLVk1fSU5URUwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5Nzk1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODg0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDk6MjQ6MzEuMDk4MTM2MjFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE3NTk5NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9JTlRFTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9ODM9Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOToyNDozMS4xNzk5MDE4NDZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTYwMzQ3MDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgS1ZNX0lOVEVMIERlcGVuZGVuY2llcyBpbiBLY29uZmlnKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgYGFyY2gveDg2L2t2bS9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgS1ZNX0lOVEVMYCBvcHRpb24uIEkgd2FudCB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVudGFsIG1hcCBvZiBob3cgdGhpcyBpcyBhbGwgd2lyZWQgdG9nZXRoZXIuIEknbSBsb29raW5nIGZvciB0aGUgdXN1YWwgc3VzcGVjdHM6IGFueSBkaXJlY3QgZGVwZW5kZW5jaWVzLCBvZiBjb3Vyc2UuIEJ1dCBJJ20gYWxzbyBpbnRlcmVzdGVkIGluIGluZGlyZWN0IGRlcGVuZGVuY2llcyDigJMgdGhpbmdzIHRoYXQgbWlnaHQgYmUgZW5hYmxlZCBvciBkaXNhYmxlZCAqYmVjYXVzZSogYEtWTV9JTlRFTGAgaXMgc2VsZWN0ZWQuIFdoYXQgb3RoZXIgZmVhdHVyZXMgb3IgZHJpdmVycyBhcmUgY29udGluZ2VudCBvbiBJbnRlbCB2aXJ0dWFsaXphdGlvbiBzdXBwb3J0PyBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIGNvbmZpZ3VyYXRpb24gaW1wYWN0LCBwYXJ0aWN1bGFybHkgd2l0aCBhbGwgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgYW55IHJlbGF0ZWQgY2hhbmdlcy4gQmFzaWNhbGx5LCBJIGFtIHRoaW5raW5nIHRocm91Z2ggdGhlIEtjb25maWcgYW5kIGl0cyBjb25uZWN0aW9ucyB0byB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUsIHJlYWR5IHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTg3OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjI0OjMzLjE0MDI1Mjg4M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjAxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA5MDpcXHRcXHQgIHByb3RlY3RlZCBWTXMgYXJlIHB1cmVseSBhIGRldmVsb3BtZW50IGFuZCB0ZXN0aW5nIHZlaGljbGUgZm9yXFxuICA5MTpcXHRcXHQgIEtWTV9DUkVBVEVfR1VFU1RfTUVNRkQuICBBdHRlbXB0aW5nIHRvIHJ1biBhIFxcXCJyZWFsXFxcIiBWTSB3b3JrbG9hZCBhcyBhXFxuICA5MjpcXHRcXHQgIHNvZnR3YXJlLXByb3RlY3RlZCBWTSB3aWxsIGZhaWwgbWlzZXJhYmx5LlxcbiAgOTM6XFx0XFxuICA5NDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFxcXCJOXFxcIi5cXG4gIDk1OlxcdFxcbiAgOTY6XFx0Y29uZmlnIEtWTV9JTlRFTFxcbiAgOTc6XFx0XFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuICA5ODpcXHRcXHRkZXBlbmRzIG9uIEtWTSBcXHUwMDI2XFx1MDAyNiBJQTMyX0ZFQVRfQ1RMXFxuICA5OTpcXHRcXHRzZWxlY3QgWDg2X0ZSRUQgaWYgWDg2XzY0XFxuIDEwMDpcXHRcXHRoZWxwXFxuIDEwMTpcXHRcXHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIEtWTSBvbiBwcm9jZXNzb3JzIGVxdWlwcGVkIHdpdGggSW50ZWwncyBWVFxcbiAxMDI6XFx0XFx0ICBleHRlbnNpb25zLCBhLmsuYS4gVmlydHVhbCBNYWNoaW5lIEV4dGVuc2lvbnMgKFZNWCkuXFxuIDEwMzpcXHRcXG4gMTA0OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuIDEwNTpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIGt2bS1pbnRlbC5cXG4gMTA2OlxcdFxcbiAxMDc6XFx0Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbiAxMDg6XFx0ICAgICAgICBib29sIFxcXCJDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1xcXCJcXG4gMTA5OlxcdCAgICAgICAgZGVwZW5kcyBvbiBLVk1fSU5URUwgXFx1MDAyNlxcdTAwMjYgRVhQRVJUXFxuIDExMDpcXHQgICAgICAgIGhlbHBcXG4gMTExOlxcdCAgICAgICAgICBDaGVja3MgdGhhdCBLVk0ncyBwYWdlIHRhYmxlIG1hbmFnZW1lbnQgY29kZSB3aWxsIG5vdCBpbmNvcnJlY3RseVxcbiAxMTI6XFx0ICAgICAgICAgIGxldCBndWVzdHMgcmVjZWl2ZSBhIHZpcnR1YWxpemF0aW9uIGV4Y2VwdGlvbi4gIFZpcnR1YWxpemF0aW9uXFxuIDExMzpcXHQgICAgICAgICAgZXhjZXB0aW9ucyB3aWxsIGJlIHRyYXBwZWQgYnkgdGhlIGh5cGVydmlzb3IgcmF0aGVyIHRoYW4gaW5qZWN0ZWRcXG4gMTE0OlxcdCAgICAgICAgICBpbiB0aGUgZ3Vlc3QuXFxuIDExNTpcXHRcXG4gMTE2OlxcdCAgICAgICAgICBOb3RlOiBzb21lIENQVXMgYXBwZWFyIHRvIGdlbmVyYXRlIHNwdXJpb3VzIEVQVCBWaW9sYXRpb25zICNWRXNcXG4gMTE3OlxcdCAgICAgICAgICB0aGF0IHRyaWdnZXIgS1ZNJ3MgV0FSTiwgaW4gcGFydGljdWxhciB3aXRoIGVwdGFkPTAgYW5kL29yIG5lc3RlZFxcbiAxMTg6XFx0ICAgICAgICAgIHZpcnR1YWxpemF0aW9uLlxcbiAxMTk6XFx0XFxuIDEyMDpcXHQgICAgICAgICAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMTIxOlxcdFxcbiAxMjI6XFx0Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuIDEyMzpcXHRcXHRib29sIFxcXCJTb2Z0d2FyZSBHdWFyZCBlWHRlbnNpb25zIChTR1gpIFZpcnR1YWxpemF0aW9uXFxcIlxcbiAxMjQ6XFx0XFx0ZGVwZW5kcyBvbiBYODZfU0dYIFxcdTAwMjZcXHUwMDI2IEtWTV9JTlRFTFxcbiAxMjU6XFx0XFx0aGVscFxcbiAxMjY6XFx0XFxuIDEyNzpcXHRcXHQgIEVuYWJsZXMgS1ZNIGd1ZXN0cyB0byBjcmVhdGUgU0dYIGVuY2xhdmVzLlxcbiAxMjg6XFx0XFxuIDEyOTpcXHRcXHQgIFRoaXMgaW5jbHVkZXMgc3VwcG9ydCB0byBleHBvc2UgXFxcInJhd1xcXCIgdW5yZWNsYWltYWJsZSBlbmNsYXZlIG1lbW9yeSB0b1xcbiAxMzA6XFx0XFx0ICBndWVzdHMgdmlhIGEgZGV2aWNlIG5vZGUsIGUuZy4gL2Rldi9zZ3hfdmVwYy5cXG4gMTMxOlxcdFxcbiAxMzI6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAxMzM6XFx0XFxuIDEzNDpcXHRjb25maWcgS1ZNX0lOVEVMX1REWFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOToyNDozMy4xNDAzNjczODNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTA1NDIyNTkzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogS1ZNIEludGVsIFZpcnR1YWxpemF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlIHRhcmdldCBpcyByZWFjaGFibGUuIEkgc2VlIHdlJ3JlIGxvb2tpbmcgYXQgYENPTkZJR19LVk1gIGFuZCBgQ09ORklHX0tWTV9JTlRFTGAuIEdvb2QsIGBLVk1fSU5URUxgIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlOyBJIGtub3cgZnJvbSBleHBlcmllbmNlLCBzcGVjaWZpY2FsbHkgc3l6a2FsbGVyIGZ1enppbmcgZW52aXJvbm1lbnRzIG9uIHg4Nl82NCwgdGhhdCBpdCdzIGFjY2Vzc2libGUuIFNvIHRoYXQncyBhIHBvc2l0aXZlIHN0YXJ0aW5nIHBvaW50LlxuXG5Ob3csIHRpbWUgZm9yIHRoZSBjb3JlIHF1ZXN0aW9uOiAqaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyogSSdsbCBhcHBseSB0aGUgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIGNyaXRlcmlhLiBUaGUgcG9zaXRpdmUgc2lkZSBpcyB3aGF0IEkgYW0gcmVhbGx5IGludGVyZXN0ZWQgaW4uIFRoaXMgcGF0Y2ggdG91Y2hlcyB0aGUgY29yZSBzdWJzeXN0ZW1zIChoeXBlcnZpc29yIC8gS1ZNKSwgYW5kIHdoYXQncyBtb3JlLCBpdOKAmXMgYSBjb2RlIHJlZmFjdG9yaW5nLiBUaGlzIGFsb25lIHJhaXNlcyBhIGZsYWcuIFdlJ3JlIG5vdCBqdXN0IGxvb2tpbmcgYXQgYSBzaW1wbGUgZnVuY3Rpb25hbCBjaGFuZ2Ugb3IgY2xlYW51cC4gVGhlIGF1dGhvcuKAmXMgaW50ZW50aW9ucyBhcmUgc2Vjb25kYXJ5OyBJIGFsd2F5cyBmdXp6ICpyZWZhY3RvcmVkKiBjb2RlLCByZWdhcmRsZXNzIG9mIHRoZWlyIGNsYWltcy4gQ2hhbmdlcyBpbiBsb2dpYywgaGVscGVyIGZ1bmN0aW9uIGludHJvZHVjdGlvbnMsIG9yIHN0YXRlIG1hbmFnZW1lbnQsICplc3BlY2lhbGx5KiBpbiBjb3JlIGFyZWFzLCBhcmUgcHJpbWUgYnVnLWh1bnRpbmcgZ3JvdW5kcy4gQW5kLCBvZiBjb3Vyc2UsIHRoZSBtb2RpZmllZCBjb2RlIGlzIGluIGBhcmNoL3g4Ni9rdm0vdm14L2AsIHdoaWNoIGlzIGRpcmVjdGx5IHJlbGF0ZWQgdG8gS1ZNIEludGVsIHZpcnR1YWxpemF0aW9uIHN1cHBvcnQuXG5cblRoZXJlZm9yZSwgdGhlIGFuc3dlciBpcyBhIHJlc291bmRpbmcgKnllcyosIGBXb3J0aEZ1enppbmcgPSB0cnVlYC5cblxuQWxyaWdodCwgd2l0aCB0aGF0IGVzdGFibGlzaGVkLCBsZXQncyBkZWZpbmUgb3VyIGZvY3VzLiBJdCdzIHRpbWUgdG8gaWRlbnRpZnkgdGhlIGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AuIEknbGwgYW5hbHl6ZSB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFuZCBlbnRyeSBwb2ludHMuIEkgaGF2ZSBhIGxpc3Qgb2YgdGhvc2UgZnJvbSB0aGUgdmFyaW91cyBmaWxlcy5cblxuSW4gYGFyY2gveDg2L2t2bS92bXgvbWFpbi5jYDogSSBzZWUgYHZ0X2hhbmRsZV9leGl0X2lycW9mZmAsIGB2dF9oYW5kbGVfbm1pYCwgYGhhbmRsZV9ubV9mYXVsdF9pcnFvZmZgLCBgaGFuZGxlX2V4Y2VwdGlvbl9pcnFvZmZgLCBhbmQgYGhhbmRsZV9leHRlcm5hbF9pbnRlcnJ1cHRfaXJxb2ZmYC5cblxuSW4gYGFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuY2A6IEknbGwgbG9vayBhdCBgdnRfdmNwdV9waV9sb2FkYCwgYHZ0X3ZjcHVfcGlfcHV0YCwgYHZ0X3BpX3N0YXJ0X2J5cGFzc2AsIGFuZCBgdnRfcGlfdXBkYXRlX2lydGVgLlxuXG5gYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaGAgaXMgbmV4dDogSGVyZSwgYHZ0X2dldF9leGl0X3JlYXNvbmAsIGB2dF9nZXRfZXhpdF9xdWFsYCwgYHZ0X2dldF9pbnRyX2luZm9gLCBgX192dF9oYW5kbGVfZXB0X3Zpb2xhdGlvbmAsIGFuZCBgX192dF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHRgIGFyZSBwb3RlbnRpYWwgYXJlYXMgb2YgaW50ZXJlc3QuXG5cbmBhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jYCBpcyBleHRlbnNpdmU6IEknbGwgaW5jbHVkZSBgbmVzdGVkX2VwdF9pbmplY3RfcGFnZV9mYXVsdGAsIGBwcmVwYXJlX3ZtY3MxMmAsIGBuZXN0ZWRfdm14X2dldF92bXB0cmAsIGBoYW5kbGVfdm1yZWFkYCwgYGhhbmRsZV92bXdyaXRlYCwgYGhhbmRsZV92bXB0cmxkYCwgYGhhbmRsZV92bXB0cnN0YCwgYGhhbmRsZV9pbnZlcHRgLCBgaGFuZGxlX2ludnZwaWRgLCBgaGFuZGxlX3ZtZnVuY2AsIGBuZXN0ZWRfdm14X2V4aXRfaGFuZGxlZF9pb2AsIGBuZXN0ZWRfdm14X2V4aXRfaGFuZGxlZF9tc3JgLCBgbmVzdGVkX3ZteF9leGl0X2hhbmRsZWRfY3JgLCBgbmVzdGVkX3ZteF9sMF93YW50c19leGl0YCwgYG5lc3RlZF92bXhfbDFfd2FudHNfZXhpdGAsIGFuZCBgbmVzdGVkX3ZteF9yZWZsZWN0X3ZtZXhpdGAuXG5cbkxhc3RseSwgaW4gYGFyY2gveDg2L2t2bS92bXgvdm14LmNgOiBJJ2xsIGhhdmUgdG8gY29uc2lkZXIgYHZteF9oYW5kbGVfZXhpdGAsIGBfX3ZteF9oYW5kbGVfZXhpdGAsIGB2bXhfdmNwdV9ydW5gLCBgdm14X3ZjcHVfbG9hZGAsIGB2bXhfdmNwdV9wdXRgLCBgaGFuZGxlX2V4Y2VwdGlvbl9ubWlgLCBgaGFuZGxlX2VwdF92aW9sYXRpb25gLCBgaGFuZGxlX2lvYCwgYGhhbmRsZV9jcmAsIGBoYW5kbGVfZHJgLCBgaGFuZGxlX2ludmxwZ2AsIGBoYW5kbGVfYXBpY19hY2Nlc3NgLCBgaGFuZGxlX2FwaWNfZW9pX2luZHVjZWRgLCBgaGFuZGxlX2FwaWNfd3JpdGVgLCBgaGFuZGxlX3Rhc2tfc3dpdGNoYCwgYGhhbmRsZV9pbnZwY2lkYCwgYGhhbmRsZV9wbWxfZnVsbGAsIGBoYW5kbGVfbm90aWZ5YCwgYGhhbmRsZV9yZG1zcl9pbW1gLCBgaGFuZGxlX3dybXNyX2ltbWAsIGB2bXhfZ2V0X2V4aXRfaW5mb2AsIGB2bXhfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0YCwgYW5kIGBza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uYC5cblxuTm93LCBJJ2xsIG5lZWQgdG8gbmFycm93IHRoZXNlIGRvd24gdG8gdGhlIG5vbi1zdGF0aWMgc3ltYm9scyBvciwgdGhvc2UgYWNjZXNzaWJsZSBvdXRzaWRlIHRoZWlyIGRlZmluZWQgZmlsZXMsIHRoYXQgYXJlIGluIHZtbGludXgva3ZtLWludGVsLmtvLiBBZnRlciBjaGVja2luZyBgYXJjaC94ODYva3ZtL3ZteC9tYWluLmNgIGFuZCBgYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfXG5cbiIsIklucHV0VG9rZW5zIjoyMjg0OCwiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOToyNDo1Mi4xOTQ1OTU2NzFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg5MzYyNzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiKHZ0X3ZjcHVfcGlffHZ0X2hhbmRsZV9ubWl8dnRfcGlfKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vdm14XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvY29tbW9uLmg9MjE3PXN0YXRpYyBpbmxpbmUgdm9pZCBfX3Z0X2RlbGl2ZXJfcG9zdGVkX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTIzNS1cXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oOjIzNjpub2luc3RyIHZvaWQgdnRfaGFuZGxlX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmgtMjM3LVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9OTMyPXN0YXRpYyB2b2lkIHZ0X2hhbmRsZV9leGl0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy05NTEtXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6OTUyOm5vaW5zdHIgdm9pZCB2dF9oYW5kbGVfbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy05NTMte1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9OTcyPXN0cnVjdCBrdm1feDg2X29wcyB2dF94ODZfb3BzIF9faW5pdGRhdGEgPSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMDkwLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjEwOTE6XFx0LnBpX3VwZGF0ZV9pcnRlID0gdnRfcGlfdXBkYXRlX2lydGUsXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTA5MjpcXHQucGlfc3RhcnRfYnlwYXNzID0gdnRfcGlfc3RhcnRfYnlwYXNzLFxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwOTMtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmM9NDU9c3RhdGljIGludCBwaV90cnlfc2V0X2NvbnRyb2woc3RydWN0IHBpX2Rlc2MgKnBpX2Rlc2MsIHU2NCAqcG9sZCwgdTY0IG5ldylcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYy01OC1cXG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmM6NTk6dm9pZCB2dF92Y3B1X3BpX2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KVxcbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYy02MC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmM9MTQ5PXN0YXRpYyBib29sIHZ0X2Nhbl91c2VfdnRkX3BpKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYy0xNTItXFx0ICogTm90ZSwgcmVhZGluZyB0aGUgbnVtYmVyIG9mIHBvc3NpYmxlIGJ5cGFzcyBJUlFzIGNhbiByYWNlIHdpdGggYVxcbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYzoxNTM6XFx0ICogYnlwYXNzIElSUSBiZWluZyBhdHRhY2hlZCB0byB0aGUgVk0uICB2dF9waV9zdGFydF9ieXBhc3MoKSBlbnN1cmVzXFxuYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5jLTE1NC1cXHQgKiBibG9ja25nIHZDUFVzIHdpbGwgc2VlIGFuIGVsZXZhdGVkIGNvdW50IG9yIGdldCBLVk1fUkVRX1VOQkxPQ0suXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmM9MjExPXN0YXRpYyBib29sIHZ0X25lZWRzX3BpX3dha2V1cChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmMtMjI0LVxcbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYzoyMjU6dm9pZCB2dF92Y3B1X3BpX3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5jLTIyNi17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmM9Mjg1PWJvb2wgcGlfaGFzX3BlbmRpbmdfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYy0yOTYtICogYmxvY2tpbmcgdkNQVXMgbWF5IHNjaGVkdWxlZCBvdXQgd2l0aG91dCByZWNvbmZpZ3VyaW5nIFBJRC5OViB0byB0aGUgd2FrZXVwXFxuYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5jOjI5NzogKiB2ZWN0b3IsIGkuZS4gaWYgdGhlIGJ5cGFzcyBJUlEgY2FtZSBhbG9uZyBhZnRlciB2dF92Y3B1X3BpX3B1dCgpLlxcbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYy0yOTgtICovXFxuYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5jOjI5OTp2b2lkIHZ0X3BpX3N0YXJ0X2J5cGFzcyhzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5jLTMwMC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmMtMzA2LVxcbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYzozMDc6aW50IHZ0X3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYy0zMDgtXFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBob3N0X2lycSwgdWludDMyX3QgZ3Vlc3RfaXJxLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5oLTEwLVxcbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuaDoxMTp2b2lkIHZ0X3ZjcHVfcGlfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpO1xcbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuaDoxMjp2b2lkIHZ0X3ZjcHVfcGlfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5oLTEzLXZvaWQgcGlfd2FrZXVwX2hhbmRsZXIodm9pZCk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmg9MTY9Ym9vbCBwaV9oYXNfcGVuZGluZ19pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmg6MTc6aW50IHZ0X3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuaC0xOC1cXHRcXHQgICAgICAgdW5zaWduZWQgaW50IGhvc3RfaXJxLCB1aW50MzJfdCBndWVzdF9pcnEsXFxuYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5oLTE5LVxcdFxcdCAgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2ZWN0b3IpO1xcbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuaDoyMDp2b2lkIHZ0X3BpX3N0YXJ0X2J5cGFzcyhzdHJ1Y3Qga3ZtICprdm0pO1xcbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuaC0yMS1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9NzE1PXZvaWQgdGR4X3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTcxOC1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjcxOTpcXHR2dF92Y3B1X3BpX2xvYWQodmNwdSwgY3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTcyMC1cXHRpZiAodmNwdS1cXHUwMDNlY3B1ID09IGNwdSB8fCAhaXNfaGtpZF9hc3NpZ25lZCh0b19rdm1fdGR4KHZjcHUtXFx1MDAzZWt2bSkpKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz04Mjc9dm9pZCB0ZHhfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtODI4LXtcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjgyOTpcXHR2dF92Y3B1X3BpX3B1dCh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTgzMC1cXHR0ZHhfcHJlcGFyZV9zd2l0Y2hfdG9faG9zdCh2Y3B1KTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9OTYxPXN0YXRpYyBub2luc3RyIHZvaWQgdGR4X3ZjcHVfZW50ZXJfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTk3Ni1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjk3NzpcXHR2dF9oYW5kbGVfbm1pKHZjcHUpO1xcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtOTc4LVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYz0xNTczPXZvaWQgdm14X3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTE1NzktXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzoxNTgwOlxcdHZ0X3ZjcHVfcGlfbG9hZCh2Y3B1LCBjcHUpO1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtMTU4MS19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTE1ODM9dm9pZCB2bXhfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtMTU4NC17XFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzoxNTg1OlxcdHZ0X3ZjcHVfcGlfcHV0KHZjcHUpO1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtMTU4Ni1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NzM2Nj1zdGF0aWMgbm9pbnN0ciB2b2lkIHZteF92Y3B1X2VudGVyX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy03Mzk3LVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NzM5ODpcXHR2dF9oYW5kbGVfbm1pKHZjcHUpO1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNzM5OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDk6MjQ6NTIuMjczNTM1Njk3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzMyOTcyNjY2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBLVk0gQ29uZmlndXJhdGlvbiBmb3IgRm9jdXMgU3ltYm9scyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIEtWTSBjb25maWd1cmF0aW9uIHJlbGV2YW50IHRvIGEgc3BlY2lmaWMgc2V0IG9mIGZ1bmN0aW9ucywgd2hpY2ggSSdsbCBjYWxsIHRoZSBgRm9jdXNTeW1ib2xzYC4gRmlyc3QsIEknbGwgZGVmaW5lIHRob3NlIHN5bWJvbHM6IGB2dF9oYW5kbGVfZXhpdF9pcnFvZmZgLCBgdnRfaGFuZGxlX25taWAsIGB2dF92Y3B1X3BpX2xvYWRgLCBgdnRfdmNwdV9waV9wdXRgLCBgdnRfcGlfc3RhcnRfYnlwYXNzYCwgYHZ0X3BpX3VwZGF0ZV9pcnRlYCwgYHZteF9oYW5kbGVfZXhpdGAsIGB2bXhfdmNwdV9ydW5gLCBhbmQgYG5lc3RlZF92bXhfcmVmbGVjdF92bWV4aXRgLiBOb3csIEkgbmVlZCB0byByZWxhdGUgdGhlc2Ugc3ltYm9scyB0byByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuXG5OZXh0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGBFbmFibGVDb25maWdzYC4gSSdsbCBzdGFydCBieSBjaGVja2luZyBmb3IgdGhlIHByZXNlbmNlIG9mIGBLVk1gIGFuZCBgS1ZNX0lOVEVMYC4gU2luY2UgdGhpcyBlbnZpcm9ubWVudCAqbWlnaHQqIGluY2x1ZGUgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMsIG9yIFREWCwgSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IGBLVk1fSU5URUxfVERYYC4gSXQncyBpbXBvcnRhbnQgdG8gcmVjb2duaXplIHRoYXQgYEtWTV9JTlRFTGAgaXMgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiwgYW5kIGBLVk1fSU5URUxfVERYYCBpcyBjb250aW5nZW50IG9uIGl0LCBpZiBpdCBpcyBlbmFibGVkLiBTbywgSSB3aWxsIGNoZWNrIGZvciB0aGVzZSBvcHRpb25zIGluIHRoZSBkZWZpbmVkIG9yZGVyLlxuXG5Ob3csIEkgbmVlZCB0byBleHBsaWNpdGx5IHZlcmlmeSB0aGUgZGVwZW5kZW5jeSBvZiBgS1ZNX0lOVEVMX1REWGAgb24gYEtWTV9JTlRFTGAuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgYEtWTV9JTlRFTF9URFhgIGFjdHVhbGx5ICpyZXF1aXJlcyogYEtWTV9JTlRFTGAgdG8gYmUgZW5hYmxlZC4gSSdsbCBuZWVkIHRvIGxvY2F0ZSB0aGlzIGRlcGVuZGVuY3kgd2l0aGluIHRoZSBLY29uZmlnIGZpbGUsIHNwZWNpZmljYWxseSBgYXJjaC94ODYva3ZtL0tjb25maWdgLiBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIGxpbmUgMTM0IGluIHRoZSBLY29uZmlnIGZpbGUgdG8gc2VlIHRoZSBkZXRhaWxzIG9mIHRoZSBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NjUxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjI0OjU1LjYwMzI2NTg2NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjE1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTMzLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTMzOlxcdFxcbiAxMzQ6XFx0Y29uZmlnIEtWTV9JTlRFTF9URFhcXG4gMTM1OlxcdFxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuIDEzNjpcXHRcXHRkZWZhdWx0IHlcXG4gMTM3OlxcdFxcdGRlcGVuZHMgb24gSU5URUxfVERYX0hPU1RcXG4gMTM4OlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbiAxMzk6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxcbiAxNDA6XFx0XFx0aGVscFxcbiAxNDE6XFx0XFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBsYXVuY2hpbmcgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWClcXG4gMTQyOlxcdFxcdCAgY29uZmlkZW50aWFsIFZNcyBvbiBJbnRlbCBwcm9jZXNzb3JzLlxcbiAxNDM6XFx0XFxuIDE0NDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDE0NTpcXHRcXG4gMTQ2OlxcdGNvbmZpZyBLVk1fQU1EXFxuIDE0NzpcXHRcXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbiAxNDg6XFx0XFx0ZGVwZW5kcyBvbiBLVk0gXFx1MDAyNlxcdTAwMjYgKENQVV9TVVBfQU1EIHx8IENQVV9TVVBfSFlHT04pXFxuIDE0OTpcXHRcXHRoZWxwXFxuIDE1MDpcXHRcXHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIEtWTSBvbiBBTUQgcHJvY2Vzc29ycyBlcXVpcHBlZCB3aXRoIHRoZSBBTUQtVlxcbiAxNTE6XFx0XFx0ICAoU1ZNKSBleHRlbnNpb25zLlxcbiAxNTI6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjI0OjU1LjYwMzM5MDA1NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjM1MzEyNTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEtWTS9URFggQ29uZmlndXJhdGlvbiBDaGVjayoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBjb3JlIEtWTSBJbnRlbCBkcml2ZXIgY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5IGBLVk1fSU5URUxgLCB3aGljaCwgb2YgY291cnNlLCByZWxpZXMgb24gdGhlIGJyb2FkZXIgYEtWTWAgc3Vic3lzdGVtLiBBbmQsIEkgc2VlIHRoYXQgd2UgYXJlIGRlYWxpbmcgd2l0aCBgSU5URUxfVERYX0hPU1RgIGFuZCBgS1ZNX0lOVEVMX1REWGAsIHNvIHRoaXMgaXMgZGVmaW5pdGVseSByZWxhdGVkIHRvIFREWC5cblxuTGV0J3MgcXVpY2tseSBydW4gYSBjaGVjayB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBhcyBleHBlY3RlZC4gSSBzZWUgYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIHRydWUsIGdvb2QhIEFuZCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgaXMgZXhhY3RseSB3aGF0IEkgYW50aWNpcGF0ZTogYFwiS1ZNXCJgIGFuZCBgXCJLVk1fSU5URUxcImAuIFBlcmZlY3QuXG5cbk5vdywgbGV0J3MgZXhhbWluZSB0aGUgYEZvY3VzU3ltYm9sc2AuIFRoZXNlIHNlZW0gc3BvdC1vbi4gSSdtIHNlZWluZyBmdW5jdGlvbnMgcmVsYXRlZCB0byBoYW5kbGluZyB2aXJ0dWFsIHRlcm1pbmFsIGV4aXRzIGluIGEgZmV3IGRpZmZlcmVudCBzdGF0ZXM6IGB2dF9oYW5kbGVfZXhpdF9pcnFvZmZgLCBgdnRfaGFuZGxlX25taWAsIHBvc3RlZCBpbnRlcnJ1cHQgZnVuY3Rpb25zIChgdnRfdmNwdV9waV9sb2FkYCwgYHZ0X3ZjcHVfcGlfcHV0YCwgYHZ0X3BpX3N0YXJ0X2J5cGFzc2AsIGB2dF9waV91cGRhdGVfaXJ0ZWApLCBhbmQgYSBnb29kIGxvb2sgYXQgYHZteF9oYW5kbGVfZXhpdGAgYW5kIGB2bXhfdmNwdV9ydW5gIGFzIHdlbGwgYXMgYG5lc3RlZF92bXhfcmVmbGVjdF92bWV4aXRgLiBZZXAsIHRoaXMgYWxsIGxpbmVzIHVwIHdpdGggd2hhdCBJJ2QgZXhwZWN0IGdpdmVuIHRoZSBjb250ZXh0IOKAkyB3ZSdyZSBsb29raW5nIGF0IHBvdGVudGlhbGx5IHJlZmFjdG9yaW5nIGNvbW1vbiBWTVggYW5kIFREWCB2aXJ0dWFsIHRlcm1pbmFsIGhhbmRsaW5nLCBleGl0IGhhbmRsaW5nIHdpdGggaXJxb2ZmLCBwb3N0ZWQgaW50ZXJydXB0IGZ1bmN0aW9ucywgYW5kIGV4aXQgcmVhc29uL3F1YWxpZmljYXRpb24gYWNjZXNzb3JzIGluIEtWTSBJbnRlbC5cblxuTG9va3MgbGlrZSBldmVyeXRoaW5nIGlzIGV4YWN0bHkgd2hlcmUgaXQgbmVlZHMgdG8gYmUsIHNvIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC4gRG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg2NDgsIk91dHB1dFRva2VucyI6MTk5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDk6MjQ6NTkuMjM4NzA2MTUxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1MzIyNDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZ0X2hhbmRsZV9leGl0X2lycW9mZlwiLFxuICAgIFwidnRfaGFuZGxlX25taVwiLFxuICAgIFwidnRfdmNwdV9waV9sb2FkXCIsXG4gICAgXCJ2dF92Y3B1X3BpX3B1dFwiLFxuICAgIFwidnRfcGlfc3RhcnRfYnlwYXNzXCIsXG4gICAgXCJ2dF9waV91cGRhdGVfaXJ0ZVwiLFxuICAgIFwidm14X2hhbmRsZV9leGl0XCIsXG4gICAgXCJ2bXhfdmNwdV9ydW5cIixcbiAgICBcIm5lc3RlZF92bXhfcmVmbGVjdF92bWV4aXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgS1ZNIEludGVsIChWTVgvVERYKSB2aXJ0dWFsaXphdGlvbiBsb2dpYyBieSBjb25zb2xpZGF0aW5nIGV4aXQgc3RhdHVzIGhhbmRsaW5nLCBleGl0IElSUS1vZmYgcHJvY2Vzc2luZywgcG9zdGVkIGludGVycnVwdCBoZWxwZXJzLCBhbmQgVk1DUyBleGl0IHF1YWxpZmljYXRpb24gYWNjZXNzb3JzIHVuZGVyIGNvbW1vbiB2dF8qIGFic3RyYWN0aW9ucy4gVGhpcyBhZmZlY3RzIGNvcmUgS1ZNIFZNIGV4aXQgaGFuZGxpbmcgYW5kIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiByZWFjaGFibGUgb24gYW1kNjQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2dF9oYW5kbGVfZXhpdF9pcnFvZmZcIixcbiAgICBcInZ0X2hhbmRsZV9ubWlcIixcbiAgICBcInZ0X3ZjcHVfcGlfbG9hZFwiLFxuICAgIFwidnRfdmNwdV9waV9wdXRcIixcbiAgICBcInZ0X3BpX3N0YXJ0X2J5cGFzc1wiLFxuICAgIFwidnRfcGlfdXBkYXRlX2lydGVcIixcbiAgICBcInZteF9oYW5kbGVfZXhpdFwiLFxuICAgIFwidm14X3ZjcHVfcnVuXCIsXG4gICAgXCJuZXN0ZWRfdm14X3JlZmxlY3Rfdm1leGl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIEtWTSBJbnRlbCAoVk1YL1REWCkgdmlydHVhbGl6YXRpb24gbG9naWMgYnkgY29uc29saWRhdGluZyBleGl0IHN0YXR1cyBoYW5kbGluZywgZXhpdCBJUlEtb2ZmIHByb2Nlc3NpbmcsIHBvc3RlZCBpbnRlcnJ1cHQgaGVscGVycywgYW5kIFZNQ1MgZXhpdCBxdWFsaWZpY2F0aW9uIGFjY2Vzc29ycyB1bmRlciBjb21tb24gdnRfKiBhYnN0cmFjdGlvbnMuIFRoaXMgYWZmZWN0cyBjb3JlIEtWTSBWTSBleGl0IGhhbmRsaW5nIGFuZCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gcmVhY2hhYmxlIG9uIGFtZDY0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOToyNDo1OS4zNzQwMzU2MDVaIiwiU2VxIjoxMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzQ4OTI0MjUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDk6MjQ6NTkuMzc0NTAyNjQ1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTA3NDg0NTE3MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIGEgcmVmYWN0b3Jpbmcgb2YgS1ZNIEludGVsIFZNWCBhbmQgVERYIGNvZGUgdG8gY29uc29saWRhdGUgY29tbW9uIHZpcnR1YWxpemF0aW9uIGluZnJhc3RydWN0dXJlIChWVCkgYmV0d2VlbiBzdGFuZGFyZCBWTVggYW5kIFREWCB2Q1BVczpcXG4xLiBJdCBkZWZpbmVzIGEgY29tbW9uIHdyYXBwZXIgbGF5b3V0IGBzdHJ1Y3QgdmNwdV92bXhfdGR4YCB3aXRoIGNvbXBpbGUtdGltZSBhc3NlcnRpb25zIChgc3RhdGljX2Fzc2VydGApIGVuc3VyaW5nIG9mZnNldCBtYXRjaGluZyBvZiBgc3RydWN0IHZjcHVfdnRgIGFjcm9zcyBgdmNwdV92bXhgIGFuZCBgdmNwdV90ZHhgLlxcbjIuIEl0IG1vdmVzIGFuZCByZW5hbWVzIGhlbHBlciBmdW5jdGlvbnMgKGB0b192dGAsIGB2dF9nZXRfZXhpdF9yZWFzb25gLCBgdnRfZ2V0X2V4aXRfcXVhbGAsIGB2dF9nZXRfaW50cl9pbmZvYCwgZXRjLikgZnJvbSBgdm14LmhgL2B2bXguY2AgdG8gYGNvbW1vbi5oYC9gbWFpbi5jYC5cXG4zLiBJdCBtb3ZlcyBjb21tb24gZXhpdCBhbmQgaW50ZXJydXB0IGhhbmRsaW5nIGZ1bmN0aW9ucyAoYHZ0X2hhbmRsZV9leGl0X2lycW9mZmAsIGB2dF9oYW5kbGVfbm1pYCwgYGhhbmRsZV9leHRlcm5hbF9pbnRlcnJ1cHRfaXJxb2ZmYCwgZXRjLikgdG8gYG1haW4uY2AuXFxuNC4gSXQgcmVuYW1lcyBwb3N0ZWQgaW50ZXJydXB0IHJvdXRpbmVzIHRvIHVzZSB0aGUgYHZ0X2AgcHJlZml4IGFjcm9zcyB0aGUgY29kZWJhc2UuXFxuXFxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBleHBvc2UgdW5pbml0aWFsaXplZCBmaWVsZHMgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlLCBvciBhbHRlciBidWZmZXIgYm91bmRzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHN0cnVjdCBsYXlvdXQgb3Igb2Zmc2V0cyBhcmUgZ3VhcmRlZCBhdCBjb21waWxlIHRpbWUgYnkgYHN0YXRpY19hc3NlcnRgIG9yIHdvdWxkIG1hbmlmZXN0IGFzIG1lbW9yeSBjb3JydXB0aW9uL09PQiBhY2Nlc3MgZGV0ZWN0YWJsZSBieSBzdGFuZGFyZCBidWlsZHMgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDlkMjVmMDZhOTNhYWJlNjRmYmFkMGRlZDc0ZjczMDAwZjRhNDdjYzNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDA5OjI0OjIyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaCBiL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmhcbmluZGV4IDA4MDA1Njc2NzAyYzIuLjNlNjhmYTEyYWNhNjUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oXG5AQCAtMiwxMCArMiwxMiBAQFxuICNpZm5kZWYgX19LVk1fWDg2X1ZNWF9DT01NT05fSFxuICNkZWZpbmUgX19LVk1fWDg2X1ZNWF9DT01NT05fSFxuIFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbnRhaW5lcl9vZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtX2hvc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9wb3N0ZWRfaW50ci5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJtbXUuaFwiXG4rI2luY2x1ZGUgXCJ2bXhfb3BzLmhcIlxuIFxuIHVuaW9uIHZteF9leGl0X3JlYXNvbiB7XG4gXHRzdHJ1Y3Qge1xuQEAgLTc0LDE0ICs3Niw2MiBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfdGRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHsgcmV0dXJuIGZhbHNlOyB9XG4gXG4gI2VuZGlmXG4gXG4rc3RydWN0IHZjcHVfdm14X3RkeCB7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgdmNwdTtcbitcdHN0cnVjdCB2Y3B1X3Z0IHZ0O1xuK307XG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBzdHJ1Y3QgdmNwdV92dCAqdG9fdnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdHJldHVybiBcdTAwMjYoY29udGFpbmVyX29mKHZjcHUsIHN0cnVjdCB2Y3B1X3ZteF90ZHgsIHZjcHUpLVx1MDAzZXZ0KTtcbit9XG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBzdHJ1Y3Qga3ZtX3ZjcHUgKnZ0X3RvX3ZjcHUoc3RydWN0IHZjcHVfdnQgKnZ0KVxuK3tcbitcdHJldHVybiBcdTAwMjYoY29udGFpbmVyX29mKHZ0LCBzdHJ1Y3QgdmNwdV92bXhfdGR4LCB2dCktXHUwMDNldmNwdSk7XG4rfVxuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5pb24gdm14X2V4aXRfcmVhc29uIHZ0X2dldF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0cmV0dXJuIHRvX3Z0KHZjcHUpLVx1MDAzZWV4aXRfcmVhc29uO1xuK31cbitcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcgdnRfZ2V0X2V4aXRfcXVhbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0c3RydWN0IHZjcHVfdnQgKnZ0ID0gdG9fdnQodmNwdSk7XG4rXG4rXHRpZiAoIWt2bV9yZWdpc3Rlcl90ZXN0X2FuZF9tYXJrX2F2YWlsYWJsZSh2Y3B1LCBWQ1BVX1JFR19FWElUX0lORk9fMSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIVdBUk5fT05fT05DRShpc190ZF92Y3B1KHZjcHUpKSlcbitcdFx0dnQtXHUwMDNlZXhpdF9xdWFsaWZpY2F0aW9uID0gdm1jc19yZWFkbChFWElUX1FVQUxJRklDQVRJT04pO1xuK1xuK1x0cmV0dXJuIHZ0LVx1MDAzZWV4aXRfcXVhbGlmaWNhdGlvbjtcbit9XG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdnRfZ2V0X2ludHJfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0c3RydWN0IHZjcHVfdnQgKnZ0ID0gdG9fdnQodmNwdSk7XG4rXG4rXHRpZiAoIWt2bV9yZWdpc3Rlcl90ZXN0X2FuZF9tYXJrX2F2YWlsYWJsZSh2Y3B1LCBWQ1BVX1JFR19FWElUX0lORk9fMikgXHUwMDI2XHUwMDI2XG4rXHQgICAgIVdBUk5fT05fT05DRShpc190ZF92Y3B1KHZjcHUpKSlcbitcdFx0dnQtXHUwMDNlZXhpdF9pbnRyX2luZm8gPSB2bWNzX3JlYWQzMihWTV9FWElUX0lOVFJfSU5GTyk7XG4rXG4rXHRyZXR1cm4gdnQtXHUwMDNlZXhpdF9pbnRyX2luZm87XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBpc194ZmRfbm1fZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdHJldHVybiB2Y3B1LVx1MDAzZWFyY2guZ3Vlc3RfZnB1LmZwc3RhdGUtXHUwMDNleGZkIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgICFrdm1faXNfY3IwX2JpdF9zZXQodmNwdSwgWDg2X0NSMF9UUyk7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgYm9vbCB2dF9pc190ZHhfcHJpdmF0ZV9ncGEoc3RydWN0IGt2bSAqa3ZtLCBncGFfdCBncGEpXG4ge1xuIFx0LyogRm9yIFREWCB0aGUgZGlyZWN0IG1hc2sgaXMgdGhlIHNoYXJlZCBtYXNrLiAqL1xuIFx0cmV0dXJuICFrdm1faXNfYWRkcl9kaXJlY3Qoa3ZtLCBncGEpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBfX3ZteF9oYW5kbGVfZXB0X3Zpb2xhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSxcbi1cdFx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbilcbitzdGF0aWMgaW5saW5lIGludCBfX3Z0X2hhbmRsZV9lcHRfdmlvbGF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLFxuK1x0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24pXG4ge1xuIFx0dTY0IGVycm9yX2NvZGU7XG4gXG5AQCAtMTY0LDggKzIxNCw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fdmNwdV90cmlnZ2VyX3Bvc3RlZF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuICAqIFBvc3QgYW4gaW50ZXJydXB0IHRvIGEgdkNQVSdzIFBJUiBhbmQgdHJpZ2dlciB0aGUgdkNQVSB0byBwcm9jZXNzIHRoZVxuICAqIGludGVycnVwdCBpZiBuZWNlc3NhcnkuXG4gICovXG4tc3RhdGljIGlubGluZSB2b2lkIF9fdm14X2RlbGl2ZXJfcG9zdGVkX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tXHRcdFx0XHRcdFx0ICBzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYywgaW50IHZlY3RvcilcbitzdGF0aWMgaW5saW5lIHZvaWQgX192dF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuK1x0XHRcdFx0XHRcdCBzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYywgaW50IHZlY3RvcilcbiB7XG4gXHRpZiAocGlfdGVzdF9hbmRfc2V0X3Bpcih2ZWN0b3IsIHBpX2Rlc2MpKVxuIFx0XHRyZXR1cm47XG5AQCAtMTgzLDYgKzIzMyw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3ZteF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0a3ZtX3ZjcHVfdHJpZ2dlcl9wb3N0ZWRfaW50ZXJydXB0KHZjcHUsIFBPU1RFRF9JTlRSX1ZFQ1RPUik7XG4gfVxuIFxuLW5vaW5zdHIgdm9pZCB2bXhfaGFuZGxlX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuK25vaW5zdHIgdm9pZCB2dF9oYW5kbGVfbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG4gI2VuZGlmIC8qIF9fS1ZNX1g4Nl9WTVhfQ09NTU9OX0ggKi9cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uYyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXG5pbmRleCA0YzUyYWI4ZDA3ODY5Li42ZTBiMzk1OWQ3M2FiIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXG5AQCAtMSw0ICsxLDUgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2VudHJ5LWNvbW1vbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlcGFyYW0uaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwieDg2X29wcy5oXCJcbkBAIC0xMCw4ICsxMSwxMiBAQFxuICNpbmNsdWRlIFwidGR4LmhcIlxuICNpbmNsdWRlIFwidGR4X2FyY2guaFwiXG4gXG4rI3ByYWdtYSBHQ0MgcG9pc29uIHRvX3ZteFxuK1xuK3N0YXRpY19hc3NlcnQob2Zmc2V0b2Yoc3RydWN0IHZjcHVfdm14X3RkeCwgdnQpID09IG9mZnNldG9mKHN0cnVjdCB2Y3B1X3ZteCwgdnQpKTtcbitcbiAjaWZkZWYgQ09ORklHX0tWTV9JTlRFTF9URFhcbi1zdGF0aWNfYXNzZXJ0KG9mZnNldG9mKHN0cnVjdCB2Y3B1X3ZteCwgdnQpID09IG9mZnNldG9mKHN0cnVjdCB2Y3B1X3RkeCwgdnQpKTtcbitzdGF0aWNfYXNzZXJ0KG9mZnNldG9mKHN0cnVjdCB2Y3B1X3ZteF90ZHgsIHZ0KSA9PSBvZmZzZXRvZihzdHJ1Y3QgdmNwdV90ZHgsIHZ0KSk7XG4gXG4gc3RhdGljIHZvaWQgdnRfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUodm9pZClcbiB7XG5AQCAtODc2LDYgKzg4MSw4NSBAQCBzdGF0aWMgaW50IHZ0X2dtZW1fbWF4X21hcHBpbmdfbGV2ZWwoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLFxuICNkZWZpbmUgdnRfb3BfdGR4X29ubHkobmFtZSkgTlVMTFxuICNlbmRpZiAvKiBDT05GSUdfS1ZNX0lOVEVMX1REWCAqL1xuIFxuK3N0YXRpYyB2b2lkIGhhbmRsZV9ubV9mYXVsdF9pcnFvZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdC8qXG4rXHQgKiBTYXZlIHhmZF9lcnIgdG8gZ3Vlc3RfZnB1IGJlZm9yZSBpbnRlcnJ1cHQgaXMgZW5hYmxlZCwgc28gdGhlXG4rXHQgKiBNU1IgdmFsdWUgaXMgbm90IGNsb2JiZXJlZCBieSB0aGUgaG9zdCBhY3Rpdml0eSBiZWZvcmUgdGhlIGd1ZXN0XG4rXHQgKiBoYXMgY2hhbmNlIHRvIGNvbnN1bWUgaXQuXG4rXHQgKlxuK1x0ICogVXBkYXRlIHRoZSBndWVzdCdzIFhGRF9FUlIgaWYgYW5kIG9ubHkgaWYgWEZEIGlzIGVuYWJsZWQsIGFzIHRoZSAjTk1cbitcdCAqIGludGVyY2VwdGlvbiBtYXkgaGF2ZSBiZWVuIGNhdXNlZCBieSBMMSBpbnRlcmNlcHRpb24uICBQZXIgdGhlIFNETSxcbitcdCAqIFhGRF9FUlIgaXMgbm90IG1vZGlmaWVkIGZvciBub24tWEZEICNOTSwgaS5lLiBpZiBDUjAuVFM9MS5cbitcdCAqXG4rXHQgKiBOb3RlLCBYRkRfRVJSIGlzIHVwZGF0ZWQgX2JlZm9yZV8gdGhlICNOTSBpbnRlcmNlcHRpb24gY2hlY2ssIGkuZS5cbitcdCAqIHVubGlrZSBDUjIgYW5kIERSNiwgdGhlIHZhbHVlIGlzIG5vdCBhIHBheWxvYWQgdGhhdCBpcyBhdHRhY2hlZCB0b1xuK1x0ICogdGhlICNOTSBleGNlcHRpb24uXG4rXHQgKi9cbitcdGlmIChpc194ZmRfbm1fZmF1bHQodmNwdSkpXG4rXHRcdHJkbXNycShNU1JfSUEzMl9YRkRfRVJSLCB2Y3B1LVx1MDAzZWFyY2guZ3Vlc3RfZnB1LnhmZF9lcnIpO1xuK31cbitcbitzdGF0aWMgdm9pZCBoYW5kbGVfZXhjZXB0aW9uX2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBpbnRyX2luZm8pXG4re1xuK1x0LyogaWYgZXhpdCBkdWUgdG8gUEYgY2hlY2sgZm9yIGFzeW5jIFBGICovXG4rXHRpZiAoaXNfcGFnZV9mYXVsdChpbnRyX2luZm8pKVxuK1x0XHR2Y3B1LVx1MDAzZWFyY2guYXBmLmhvc3RfYXBmX2ZsYWdzID0ga3ZtX3JlYWRfYW5kX3Jlc2V0X2FwZl9mbGFncygpO1xuK1x0LyogaWYgZXhpdCBkdWUgdG8gTk0sIGhhbmRsZSBiZWZvcmUgaW50ZXJydXB0cyBhcmUgZW5hYmxlZCAqL1xuK1x0ZWxzZSBpZiAoaXNfbm1fZmF1bHQoaW50cl9pbmZvKSlcbitcdFx0aGFuZGxlX25tX2ZhdWx0X2lycW9mZih2Y3B1KTtcbitcdC8qIEhhbmRsZSBtYWNoaW5lIGNoZWNrcyBiZWZvcmUgaW50ZXJydXB0cyBhcmUgZW5hYmxlZCAqL1xuK1x0ZWxzZSBpZiAoaXNfbWFjaGluZV9jaGVjayhpbnRyX2luZm8pKVxuK1x0XHRrdm1fbWFjaGluZV9jaGVjaygpO1xuK31cbitcbitzdGF0aWMgdm9pZCBoYW5kbGVfZXh0ZXJuYWxfaW50ZXJydXB0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4rXHRcdFx0XHRcdCAgICAgdTMyIGludHJfaW5mbylcbit7XG4rXHR1bnNpZ25lZCBpbnQgdmVjdG9yID0gaW50cl9pbmZvIFx1MDAyNiBJTlRSX0lORk9fVkVDVE9SX01BU0s7XG4rXG4rXHRpZiAoS1ZNX0JVRyghaXNfZXh0ZXJuYWxfaW50cihpbnRyX2luZm8pLCB2Y3B1LVx1MDAzZWt2bSxcbitcdCAgICBcInVuZXhwZWN0ZWQgVk0tRXhpdCBpbnRlcnJ1cHQgaW5mbzogMHgleFwiLCBpbnRyX2luZm8pKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRrdm1fYmVmb3JlX2ludGVycnVwdCh2Y3B1LCBLVk1fSEFORExJTkdfSVJRKTtcbitcdHg4Nl9lbnRyeV9mcm9tX2t2bShFVkVOVF9UWVBFX0VYVElOVCwgdmVjdG9yKTtcbitcdGt2bV9hZnRlcl9pbnRlcnJ1cHQodmNwdSk7XG4rXG4rXHR2Y3B1LVx1MDAzZWFyY2guYXRfaW5zdHJ1Y3Rpb25fYm91bmRhcnkgPSB0cnVlO1xuK31cbitcbitzdGF0aWMgdm9pZCB2dF9oYW5kbGVfZXhpdF9pcnFvZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdGlmICh0b192dCh2Y3B1KS1cdTAwM2VlbXVsYXRpb25fcmVxdWlyZWQpXG4rXHRcdHJldHVybjtcbitcbitcdHN3aXRjaCAodnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljKSB7XG4rXHRjYXNlIEVYSVRfUkVBU09OX0VYVEVSTkFMX0lOVEVSUlVQVDpcbitcdFx0aGFuZGxlX2V4dGVybmFsX2ludGVycnVwdF9pcnFvZmYodmNwdSwgdnRfZ2V0X2ludHJfaW5mbyh2Y3B1KSk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBFWElUX1JFQVNPTl9FWENFUFRJT05fTk1JOlxuK1x0XHRoYW5kbGVfZXhjZXB0aW9uX2lycW9mZih2Y3B1LCB2dF9nZXRfaW50cl9pbmZvKHZjcHUpKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEVYSVRfUkVBU09OX01DRV9EVVJJTkdfVk1FTlRSWTpcbitcdFx0a3ZtX21hY2hpbmVfY2hlY2soKTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRicmVhaztcbitcdH1cbit9XG4rXG4rbm9pbnN0ciB2b2lkIHZ0X2hhbmRsZV9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdGlmICgodTE2KXZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYyAhPSBFWElUX1JFQVNPTl9FWENFUFRJT05fTk1JIHx8XG4rXHQgICAgIWlzX25taSh2dF9nZXRfaW50cl9pbmZvKHZjcHUpKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0a3ZtX2JlZm9yZV9pbnRlcnJ1cHQodmNwdSwgS1ZNX0hBTkRMSU5HX05NSSk7XG4rXHR4ODZfZW50cnlfZnJvbV9rdm0oRVZFTlRfVFlQRV9OTUksIE5NSV9WRUNUT1IpO1xuK1x0a3ZtX2FmdGVyX2ludGVycnVwdCh2Y3B1KTtcbit9XG4rXG4gI2RlZmluZSBWTVhfUkVRVUlSRURfQVBJQ1ZfSU5ISUJJVFNcdFx0XHRcdFxcXG4gXHQoQklUKEFQSUNWX0lOSElCSVRfUkVBU09OX0RJU0FCTEVEKSB8XHRcdFx0XFxcbiBcdCBCSVQoQVBJQ1ZfSU5ISUJJVF9SRUFTT05fQUJTRU5UKSB8XHRcdFx0XFxcbkBAIC0xMDAwLDEyICsxMDg0LDEyIEBAIHN0cnVjdCBrdm1feDg2X29wcyB2dF94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4gXHQubG9hZF9tbXVfcGdkID0gdnRfb3AobG9hZF9tbXVfcGdkKSxcbiBcbiBcdC5jaGVja19pbnRlcmNlcHQgPSB2bXhfY2hlY2tfaW50ZXJjZXB0LFxuLVx0LmhhbmRsZV9leGl0X2lycW9mZiA9IHZteF9oYW5kbGVfZXhpdF9pcnFvZmYsXG4rXHQuaGFuZGxlX2V4aXRfaXJxb2ZmID0gdnRfaGFuZGxlX2V4aXRfaXJxb2ZmLFxuIFxuIFx0LnVwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyA9IHZ0X29wKHVwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyksXG4gXG4tXHQucGlfdXBkYXRlX2lydGUgPSB2bXhfcGlfdXBkYXRlX2lydGUsXG4tXHQucGlfc3RhcnRfYnlwYXNzID0gdm14X3BpX3N0YXJ0X2J5cGFzcyxcbitcdC5waV91cGRhdGVfaXJ0ZSA9IHZ0X3BpX3VwZGF0ZV9pcnRlLFxuK1x0LnBpX3N0YXJ0X2J5cGFzcyA9IHZ0X3BpX3N0YXJ0X2J5cGFzcyxcbiBcbiAjaWZkZWYgQ09ORklHX1g4Nl82NFxuIFx0LnNldF9odl90aW1lciA9IHZ0X29wKHNldF9odl90aW1lciksXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbmluZGV4IDE1MTg3MzQwN2FiZDMuLjQ3NTk5ZTczMTJjZmQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXG5AQCAtNDQ2LDcgKzQ0Niw3IEBAIHN0YXRpYyB2b2lkIG5lc3RlZF9lcHRfaW5qZWN0X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHQgKiBcIk5NSSB1bmJsb2NraW5nIGR1ZSB0byBJUkVUXCIsIGkuZS4gdGhlIGJpdCBjYW4gYmUgcHJvcGFnYXRlZFxuIFx0XHQgKiBhcy1pcyBmcm9tIHRoZSBvcmlnaW5hbCBFWElUX1FVQUxJRklDQVRJT04uXG4gXHRcdCAqL1xuLVx0XHRleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSBcdTAwMjYgSU5UUl9JTkZPX1VOQkxPQ0tfTk1JO1xuK1x0XHRleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpIFx1MDAyNiBJTlRSX0lORk9fVU5CTE9DS19OTUk7XG4gXHR9IGVsc2Uge1xuIFx0XHRpZiAoZmF1bHQtXHUwMDNlZXJyb3JfY29kZSBcdTAwMjYgUEZFUlJfUlNWRF9NQVNLKSB7XG4gXHRcdFx0dm1fZXhpdF9yZWFzb24gPSBFWElUX1JFQVNPTl9FUFRfTUlTQ09ORklHO1xuQEAgLTQ3Miw3ICs0NzIsNyBAQCBzdGF0aWMgdm9pZCBuZXN0ZWRfZXB0X2luamVjdF9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0XHQgKiBhbmQgd2Fsa3MgdGhlIGZhdWx0aW5nIEdQQS5cbiBcdFx0XHQgKi9cbiBcdFx0XHRpZiAoZnJvbV9oYXJkd2FyZSlcbi1cdFx0XHRcdGV4aXRfcXVhbGlmaWNhdGlvbiB8PSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSBcdTAwMjYgbWFzaztcbitcdFx0XHRcdGV4aXRfcXVhbGlmaWNhdGlvbiB8PSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpIFx1MDAyNiBtYXNrO1xuIFx0XHRcdGVsc2VcbiBcdFx0XHRcdGV4aXRfcXVhbGlmaWNhdGlvbiB8PSBmYXVsdC1cdTAwM2VleGl0X3F1YWxpZmljYXRpb24gXHUwMDI2IG1hc2s7XG4gXG5AQCAtNDc0Nyw3ICs0NzQ3LDcgQEAgc3RhdGljIHZvaWQgcHJlcGFyZV92bWNzMTIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgdm1jczEyICp2bWNzMTIsXG4ge1xuIFx0LyogdXBkYXRlIGV4aXQgaW5mb3JtYXRpb24gZmllbGRzOiAqL1xuIFx0dm1jczEyLVx1MDAzZXZtX2V4aXRfcmVhc29uID0gdm1fZXhpdF9yZWFzb247XG4tXHRpZiAodm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5lbmNsYXZlX21vZGUpXG4rXHRpZiAodnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmVuY2xhdmVfbW9kZSlcbiBcdFx0dm1jczEyLVx1MDAzZXZtX2V4aXRfcmVhc29uIHw9IFZNWF9FWElUX1JFQVNPTlNfU0dYX0VOQ0xBVkVfTU9ERTtcbiBcdHZtY3MxMi1cdTAwM2VleGl0X3F1YWxpZmljYXRpb24gPSBleGl0X3F1YWxpZmljYXRpb247XG4gXG5AQCAtNTM3Myw3ICs1MzczLDcgQEAgc3RhdGljIGludCBuZXN0ZWRfdm14X2dldF92bXB0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90ICp2bXBvaW50ZXIsXG4gXHRzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBlO1xuIFx0aW50IHI7XG4gXG4tXHRpZiAoZ2V0X3ZteF9tZW1fYWRkcmVzcyh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSxcbitcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZ0X2dldF9leGl0X3F1YWwodmNwdSksXG4gXHRcdFx0XHR2bWNzX3JlYWQzMihWTVhfSU5TVFJVQ1RJT05fSU5GTyksIGZhbHNlLFxuIFx0XHRcdFx0c2l6ZW9mKCp2bXBvaW50ZXIpLCBcdTAwMjZndmEpKSB7XG4gXHRcdCpyZXQgPSAxO1xuQEAgLTU2NjUsNyArNTY2NSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3ZtcmVhZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IHZtY3MxMiAqdm1jczEyID0gaXNfZ3Vlc3RfbW9kZSh2Y3B1KSA/IGdldF9zaGFkb3dfdm1jczEyKHZjcHUpXG4gXHRcdFx0XHRcdFx0ICAgIDogZ2V0X3ZtY3MxMih2Y3B1KTtcbi1cdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4rXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXHR1MzIgaW5zdHJfaW5mbyA9IHZtY3NfcmVhZDMyKFZNWF9JTlNUUlVDVElPTl9JTkZPKTtcbiBcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xuIFx0c3RydWN0IHg4Nl9leGNlcHRpb24gZTtcbkBAIC01NzcxLDcgKzU3NzEsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXdyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRzdHJ1Y3Qgdm1jczEyICp2bWNzMTIgPSBpc19ndWVzdF9tb2RlKHZjcHUpID8gZ2V0X3NoYWRvd192bWNzMTIodmNwdSlcbiBcdFx0XHRcdFx0XHQgICAgOiBnZXRfdm1jczEyKHZjcHUpO1xuLVx0dW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbitcdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdHUzMiBpbnN0cl9pbmZvID0gdm1jc19yZWFkMzIoVk1YX0lOU1RSVUNUSU9OX0lORk8pO1xuIFx0c3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7XG4gXHRzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBlO1xuQEAgLTU5NjAsNyArNTk2MCw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRybGQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIC8qIEVtdWxhdGUgdGhlIFZNUFRSU1QgaW5zdHJ1Y3Rpb24gKi9cbiBzdGF0aWMgaW50IGhhbmRsZV92bXB0cnN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuK1x0dW5zaWduZWQgbG9uZyBleGl0X3F1YWwgPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFx0dTMyIGluc3RyX2luZm8gPSB2bWNzX3JlYWQzMihWTVhfSU5TVFJVQ1RJT05fSU5GTyk7XG4gXHRncGFfdCBjdXJyZW50X3ZtcHRyID0gdG9fdm14KHZjcHUpLVx1MDAzZW5lc3RlZC5jdXJyZW50X3ZtcHRyO1xuIFx0c3RydWN0IHg4Nl9leGNlcHRpb24gZTtcbkBAIC02MDIxLDcgKzYwMjEsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9pbnZlcHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0LyogQWNjb3JkaW5nIHRvIHRoZSBJbnRlbCBWTVggaW5zdHJ1Y3Rpb24gcmVmZXJlbmNlLCB0aGUgbWVtb3J5XG4gXHQgKiBvcGVyYW5kIGlzIHJlYWQgZXZlbiBpZiBpdCBpc24ndCBuZWVkZWQgKGUuZy4sIGZvciB0eXBlPT1nbG9iYWwpXG4gXHQgKi9cbi1cdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxuK1x0aWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KSxcbiBcdFx0XHR2bXhfaW5zdHJ1Y3Rpb25faW5mbywgZmFsc2UsIHNpemVvZihvcGVyYW5kKSwgXHUwMDI2Z3ZhKSlcbiBcdFx0cmV0dXJuIDE7XG4gXHRyID0ga3ZtX3JlYWRfZ3Vlc3RfdmlydCh2Y3B1LCBndmEsIFx1MDAyNm9wZXJhbmQsIHNpemVvZihvcGVyYW5kKSwgXHUwMDI2ZSk7XG5AQCAtNjEwNCw3ICs2MTA0LDcgQEAgc3RhdGljIGludCBoYW5kbGVfaW52dnBpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHQvKiBhY2NvcmRpbmcgdG8gdGhlIGludGVsIHZteCBpbnN0cnVjdGlvbiByZWZlcmVuY2UsIHRoZSBtZW1vcnlcbiBcdCAqIG9wZXJhbmQgaXMgcmVhZCBldmVuIGlmIGl0IGlzbid0IG5lZWRlZCAoZS5nLiwgZm9yIHR5cGU9PWdsb2JhbClcbiBcdCAqL1xuLVx0aWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgdm14X2dldF9leGl0X3F1YWwodmNwdSksXG4rXHRpZiAoZ2V0X3ZteF9tZW1fYWRkcmVzcyh2Y3B1LCB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxuIFx0XHRcdHZteF9pbnN0cnVjdGlvbl9pbmZvLCBmYWxzZSwgc2l6ZW9mKG9wZXJhbmQpLCBcdTAwMjZndmEpKVxuIFx0XHRyZXR1cm4gMTtcbiBcdHIgPSBrdm1fcmVhZF9ndWVzdF92aXJ0KHZjcHUsIGd2YSwgXHUwMDI2b3BlcmFuZCwgc2l6ZW9mKG9wZXJhbmQpLCBcdTAwMjZlKTtcbkBAIC02MjM2LDggKzYyMzYsOCBAQCBzdGF0aWMgaW50IGhhbmRsZV92bWZ1bmMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICogRVhJVF9SRUFTT05fVk1GVU5DIGFzIHRoZSBleGl0IHJlYXNvbi5cbiBcdCAqL1xuIFx0bmVzdGVkX3ZteF92bWV4aXQodmNwdSwgdm14LVx1MDAzZXZ0LmV4aXRfcmVhc29uLmZ1bGwsXG4tXHRcdFx0ICB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KSxcbi1cdFx0XHQgIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpKTtcbitcdFx0XHQgIHZ0X2dldF9pbnRyX2luZm8odmNwdSksXG4rXHRcdFx0ICB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpKTtcbiBcdHJldHVybiAxO1xuIH1cbiBcbkBAIC02Mjg4LDcgKzYyODgsNyBAQCBzdGF0aWMgYm9vbCBuZXN0ZWRfdm14X2V4aXRfaGFuZGxlZF9pbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRpZiAoIW5lc3RlZF9jcHVfaGFzKHZtY3MxMiwgQ1BVX0JBU0VEX1VTRV9JT19CSVRNQVBTKSlcbiBcdFx0cmV0dXJuIG5lc3RlZF9jcHVfaGFzKHZtY3MxMiwgQ1BVX0JBU0VEX1VOQ09ORF9JT19FWElUSU5HKTtcbiBcbi1cdGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuK1x0ZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcbiBcdHBvcnQgPSBleGl0X3F1YWxpZmljYXRpb24gXHUwMDNlXHUwMDNlIDE2O1xuIFx0c2l6ZSA9IChleGl0X3F1YWxpZmljYXRpb24gXHUwMDI2IDcpICsgMTtcbkBAIC02MzE0LDcgKzYzMTQsNyBAQCBzdGF0aWMgYm9vbCBuZXN0ZWRfdm14X2V4aXRfaGFuZGxlZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFxuIFx0aWYgKGV4aXRfcmVhc29uLmJhc2ljID09IEVYSVRfUkVBU09OX01TUl9SRUFEX0lNTSB8fFxuIFx0ICAgIGV4aXRfcmVhc29uLmJhc2ljID09IEVYSVRfUkVBU09OX01TUl9XUklURV9JTU0pXG4tXHRcdG1zcl9pbmRleCA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuK1x0XHRtc3JfaW5kZXggPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFx0ZWxzZVxuIFx0XHRtc3JfaW5kZXggPSBrdm1fZWN4X3JlYWQodmNwdSk7XG4gXG5AQCAtNjM1MCw3ICs2MzUwLDcgQEAgc3RhdGljIGJvb2wgbmVzdGVkX3ZteF9leGl0X2hhbmRsZWRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBzdGF0aWMgYm9vbCBuZXN0ZWRfdm14X2V4aXRfaGFuZGxlZF9jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRzdHJ1Y3Qgdm1jczEyICp2bWNzMTIpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbitcdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdGludCBjciA9IGV4aXRfcXVhbGlmaWNhdGlvbiBcdTAwMjYgMTU7XG4gXHRpbnQgcmVnO1xuIFx0dW5zaWduZWQgbG9uZyB2YWw7XG5AQCAtNjQ4NCw3ICs2NDg0LDcgQEAgc3RhdGljIGJvb2wgbmVzdGVkX3ZteF9sMF93YW50c19leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcbiBcdHN3aXRjaCAoKHUxNilleGl0X3JlYXNvbi5iYXNpYykge1xuIFx0Y2FzZSBFWElUX1JFQVNPTl9FWENFUFRJT05fTk1JOlxuLVx0XHRpbnRyX2luZm8gPSB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcbitcdFx0aW50cl9pbmZvID0gdnRfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcbiBcdFx0aWYgKGlzX25taShpbnRyX2luZm8pKVxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0XHRlbHNlIGlmIChpc19wYWdlX2ZhdWx0KGludHJfaW5mbykpXG5AQCAtNjU2Nyw3ICs2NTY3LDcgQEAgc3RhdGljIGJvb2wgbmVzdGVkX3ZteF9sMV93YW50c19leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcbiBcdHN3aXRjaCAoKHUxNilleGl0X3JlYXNvbi5iYXNpYykge1xuIFx0Y2FzZSBFWElUX1JFQVNPTl9FWENFUFRJT05fTk1JOlxuLVx0XHRpbnRyX2luZm8gPSB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcbitcdFx0aW50cl9pbmZvID0gdnRfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcbiBcdFx0aWYgKGlzX25taShpbnRyX2luZm8pKVxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0XHRlbHNlIGlmIChpc19wYWdlX2ZhdWx0KGludHJfaW5mbykpXG5AQCAtNjczNywxNCArNjczNywxNCBAQCBib29sIG5lc3RlZF92bXhfcmVmbGVjdF92bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICogbmVlZCB0byBiZSBzeW50aGVzaXplZCBieSBxdWVyeWluZyB0aGUgaW4ta2VybmVsIExBUElDLCBidXQgZXh0ZXJuYWxcbiBcdCAqIGludGVycnVwdHMgYXJlIG5ldmVyIHJlZmxlY3RlZCB0byBMMSBzbyBpdCdzIGEgbm9uLWlzc3VlLlxuIFx0ICovXG4tXHRleGl0X2ludHJfaW5mbyA9IHZteF9nZXRfaW50cl9pbmZvKHZjcHUpO1xuK1x0ZXhpdF9pbnRyX2luZm8gPSB2dF9nZXRfaW50cl9pbmZvKHZjcHUpO1xuIFx0aWYgKGlzX2V4Y2VwdGlvbl93aXRoX2Vycm9yX2NvZGUoZXhpdF9pbnRyX2luZm8pKSB7XG4gXHRcdHN0cnVjdCB2bWNzMTIgKnZtY3MxMiA9IGdldF92bWNzMTIodmNwdSk7XG4gXG4gXHRcdHZtY3MxMi1cdTAwM2V2bV9leGl0X2ludHJfZXJyb3JfY29kZSA9XG4gXHRcdFx0dm1jc19yZWFkMzIoVk1fRVhJVF9JTlRSX0VSUk9SX0NPREUpO1xuIFx0fVxuLVx0ZXhpdF9xdWFsID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4rXHRleGl0X3F1YWwgPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFxuIHJlZmxlY3Rfdm1leGl0OlxuIFx0bmVzdGVkX3ZteF92bWV4aXQodmNwdSwgZXhpdF9yZWFzb24uZnVsbCwgZXhpdF9pbnRyX2luZm8sIGV4aXRfcXVhbCk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5jIGIvYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5jXG5pbmRleCA0YTZkOWExN2RhMjM4Li4yNjQ0YWRkNTRiNzZiIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmNcbkBAIC0xNCw2ICsxNCw4IEBAXG4gI2luY2x1ZGUgXCJ2bXguaFwiXG4gI2luY2x1ZGUgXCJ0ZHguaFwiXG4gXG4rI3ByYWdtYSBHQ0MgcG9pc29uIHRvX3ZteFxuK1xuIC8qXG4gICogTWFpbnRhaW4gYSBwZXItQ1BVIGxpc3Qgb2YgdkNQVXMgdGhhdCBuZWVkIHRvIGJlIGF3YWtlbmVkIGJ5IHdha2V1cF9oYW5kbGVyKClcbiAgKiB3aGVuIGEgV0FLRVVQX1ZFQ1RPUiBpbnRlcnJ1cHRlZCBpcyBwb3N0ZWQuICB2Q1BVcyBhcmUgYWRkZWQgdG8gdGhlIGxpc3Qgd2hlblxuQEAgLTU0LDcgKzU2LDcgQEAgc3RhdGljIGludCBwaV90cnlfc2V0X2NvbnRyb2woc3RydWN0IHBpX2Rlc2MgKnBpX2Rlc2MsIHU2NCAqcG9sZCwgdTY0IG5ldylcbiBcdHJldHVybiAwO1xuIH1cbiBcbi12b2lkIHZteF92Y3B1X3BpX2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KVxuK3ZvaWQgdnRfdmNwdV9waV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcbiB7XG4gXHRzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYyA9IHZjcHVfdG9fcGlfZGVzYyh2Y3B1KTtcbiBcdHN0cnVjdCB2Y3B1X3Z0ICp2dCA9IHRvX3Z0KHZjcHUpO1xuQEAgLTE0NCwxMSArMTQ2LDExIEBAIHZvaWQgdm14X3ZjcHVfcGlfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4gXHRcdHBpX3NldF9vbihwaV9kZXNjKTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgdm14X2Nhbl91c2VfdnRkX3BpKHN0cnVjdCBrdm0gKmt2bSlcbitzdGF0aWMgYm9vbCB2dF9jYW5fdXNlX3Z0ZF9waShzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0LypcbiBcdCAqIE5vdGUsIHJlYWRpbmcgdGhlIG51bWJlciBvZiBwb3NzaWJsZSBieXBhc3MgSVJRcyBjYW4gcmFjZSB3aXRoIGFcbi1cdCAqIGJ5cGFzcyBJUlEgYmVpbmcgYXR0YWNoZWQgdG8gdGhlIFZNLiAgdm14X3BpX3N0YXJ0X2J5cGFzcygpIGVuc3VyZXNcbitcdCAqIGJ5cGFzcyBJUlEgYmVpbmcgYXR0YWNoZWQgdG8gdGhlIFZNLiAgdnRfcGlfc3RhcnRfYnlwYXNzKCkgZW5zdXJlc1xuIFx0ICogYmxvY2tuZyB2Q1BVcyB3aWxsIHNlZSBhbiBlbGV2YXRlZCBjb3VudCBvciBnZXQgS1ZNX1JFUV9VTkJMT0NLLlxuIFx0ICovXG4gXHRyZXR1cm4gaXJxY2hpcF9pbl9rZXJuZWwoa3ZtKSBcdTAwMjZcdTAwMjYga3ZtX2FyY2hfaGFzX2lycV9ieXBhc3MoKSBcdTAwMjZcdTAwMjZcbkBAIC0yMDYsNyArMjA4LDcgQEAgc3RhdGljIHZvaWQgcGlfZW5hYmxlX3dha2V1cF9oYW5kbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0X19hcGljX3NlbmRfSVBJX3NlbGYoUE9TVEVEX0lOVFJfV0FLRVVQX1ZFQ1RPUik7XG4gfVxuIFxuLXN0YXRpYyBib29sIHZteF9uZWVkc19waV93YWtldXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3N0YXRpYyBib29sIHZ0X25lZWRzX3BpX3dha2V1cChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0LypcbiBcdCAqIFRoZSBkZWZhdWx0IHBvc3RlZCBpbnRlcnJ1cHQgdmVjdG9yIGRvZXMgbm90aGluZyB3aGVuXG5AQCAtMjE3LDE0ICsyMTksMTQgQEAgc3RhdGljIGJvb2wgdm14X25lZWRzX3BpX3dha2V1cChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHQgKiBiYWNrIHRvIHRoZSBwaV93YWtldXBfaGFuZGxlcigpIGZ1bmN0aW9uLlxuIFx0ICovXG4gXHRyZXR1cm4gKHZteF9jYW5fdXNlX2lwaXYodmNwdSkgXHUwMDI2XHUwMDI2ICFpc190ZF92Y3B1KHZjcHUpKSB8fFxuLVx0XHR2bXhfY2FuX3VzZV92dGRfcGkodmNwdS1cdTAwM2Vrdm0pO1xuK1x0XHR2dF9jYW5fdXNlX3Z0ZF9waSh2Y3B1LVx1MDAzZWt2bSk7XG4gfVxuIFxuLXZvaWQgdm14X3ZjcHVfcGlfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit2b2lkIHZ0X3ZjcHVfcGlfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYyA9IHZjcHVfdG9fcGlfZGVzYyh2Y3B1KTtcbiBcbi1cdGlmICghdm14X25lZWRzX3BpX3dha2V1cCh2Y3B1KSlcbitcdGlmICghdnRfbmVlZHNfcGlfd2FrZXVwKHZjcHUpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHQvKlxuQEAgLTI5MiwxNyArMjk0LDE3IEBAIGJvb2wgcGlfaGFzX3BlbmRpbmdfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiAvKlxuICAqIEtpY2sgYWxsIHZDUFVzIHdoZW4gdGhlIGZpcnN0IHBvc3NpYmxlIGJ5cGFzcyBJUlEgaXMgYXR0YWNoZWQgdG8gYSBWTSwgYXNcbiAgKiBibG9ja2luZyB2Q1BVcyBtYXkgc2NoZWR1bGVkIG91dCB3aXRob3V0IHJlY29uZmlndXJpbmcgUElELk5WIHRvIHRoZSB3YWtldXBcbi0gKiB2ZWN0b3IsIGkuZS4gaWYgdGhlIGJ5cGFzcyBJUlEgY2FtZSBhbG9uZyBhZnRlciB2bXhfdmNwdV9waV9wdXQoKS5cbisgKiB2ZWN0b3IsIGkuZS4gaWYgdGhlIGJ5cGFzcyBJUlEgY2FtZSBhbG9uZyBhZnRlciB2dF92Y3B1X3BpX3B1dCgpLlxuICAqL1xuLXZvaWQgdm14X3BpX3N0YXJ0X2J5cGFzcyhzdHJ1Y3Qga3ZtICprdm0pXG4rdm9pZCB2dF9waV9zdGFydF9ieXBhc3Moc3RydWN0IGt2bSAqa3ZtKVxuIHtcbi1cdGlmIChXQVJOX09OX09OQ0UoIXZteF9jYW5fdXNlX3Z0ZF9waShrdm0pKSlcbitcdGlmIChXQVJOX09OX09OQ0UoIXZ0X2Nhbl91c2VfdnRkX3BpKGt2bSkpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRrdm1fbWFrZV9hbGxfY3B1c19yZXF1ZXN0KGt2bSwgS1ZNX1JFUV9VTkJMT0NLKTtcbiB9XG4gXG4taW50IHZteF9waV91cGRhdGVfaXJ0ZShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQsIHN0cnVjdCBrdm0gKmt2bSxcbitpbnQgdnRfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdCAgICAgICB1bnNpZ25lZCBpbnQgaG9zdF9pcnEsIHVpbnQzMl90IGd1ZXN0X2lycSxcbiBcdFx0ICAgICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZlY3RvcilcbiB7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5oIGIvYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5oXG5pbmRleCBhNGFmMzk5NDhjZjA0Li5jNTg2MGVhODI4YWU5IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5oXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmhcbkBAIC04LDE2ICs4LDE2IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3Bvc3RlZF9pbnRyLmhcdTAwM2VcbiBcbi12b2lkIHZteF92Y3B1X3BpX2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTtcbi12b2lkIHZteF92Y3B1X3BpX3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuK3ZvaWQgdnRfdmNwdV9waV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSk7XG4rdm9pZCB2dF92Y3B1X3BpX3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQgcGlfd2FrZXVwX2hhbmRsZXIodm9pZCk7XG4gdm9pZCBfX2luaXQgcGlfaW5pdF9jcHUoaW50IGNwdSk7XG4gdm9pZCBwaV9hcGljdl9wcmVfc3RhdGVfcmVzdG9yZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGJvb2wgcGlfaGFzX3BlbmRpbmdfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4taW50IHZteF9waV91cGRhdGVfaXJ0ZShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQsIHN0cnVjdCBrdm0gKmt2bSxcbitpbnQgdnRfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdCAgICAgICB1bnNpZ25lZCBpbnQgaG9zdF9pcnEsIHVpbnQzMl90IGd1ZXN0X2lycSxcbiBcdFx0ICAgICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZlY3Rvcik7XG4tdm9pZCB2bXhfcGlfc3RhcnRfYnlwYXNzKHN0cnVjdCBrdm0gKmt2bSk7XG4rdm9pZCB2dF9waV9zdGFydF9ieXBhc3Moc3RydWN0IGt2bSAqa3ZtKTtcbiBcbiBzdGF0aWMgaW5saW5lIGludCBwaV9maW5kX2hpZ2hlc3RfdmVjdG9yKHN0cnVjdCBwaV9kZXNjICpwaV9kZXNjKVxuIHtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xuaW5kZXggYjI3MmMyMDU4NmE3NC4uZWZiYjFhYzZmNTFlYSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbkBAIC03MTYsNyArNzE2LDcgQEAgdm9pZCB0ZHhfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcbiB7XG4gXHRzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTtcbiBcbi1cdHZteF92Y3B1X3BpX2xvYWQodmNwdSwgY3B1KTtcbitcdHZ0X3ZjcHVfcGlfbG9hZCh2Y3B1LCBjcHUpO1xuIFx0aWYgKHZjcHUtXHUwMDNlY3B1ID09IGNwdSB8fCAhaXNfaGtpZF9hc3NpZ25lZCh0b19rdm1fdGR4KHZjcHUtXHUwMDNla3ZtKSkpXG4gXHRcdHJldHVybjtcbiBcbkBAIC03NDEsNyArNzQxLDcgQEAgYm9vbCB0ZHhfaW50ZXJydXB0X2FsbG93ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICogaW50ZXJydXB0IGlzIGFsd2F5cyBhbGxvd2VkIHVubGVzcyBURFggZ3Vlc3QgY2FsbHMgVERWTUNBTEwgd2l0aCBITFQsXG4gXHQgKiB3aGljaCBwYXNzZXMgdGhlIGludGVycnVwdCBibG9ja2VkIGZsYWcuXG4gXHQgKi9cbi1cdHJldHVybiB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljICE9IEVYSVRfUkVBU09OX0hMVCB8fFxuK1x0cmV0dXJuIHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYyAhPSBFWElUX1JFQVNPTl9ITFQgfHxcbiBcdCAgICAgICAhdG9fdGR4KHZjcHUpLVx1MDAzZXZwX2VudGVyX2FyZ3MucjEyO1xuIH1cbiBcbkBAIC03NTksNyArNzU5LDcgQEAgc3RhdGljIGJvb2wgdGR4X3Byb3RlY3RlZF9hcGljX2hhc19pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICogb3RoZXJ3aXNlIHRoZSBpbnRlcnJ1cHQgd291bGQgaGF2ZSBiZWVuIHNlcnZpY2VkIGF0IHRoZSBpbnN0cnVjdGlvblxuIFx0ICogYm91bmRhcnkuXG4gXHQgKi9cbi1cdGlmICh2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljICE9IEVYSVRfUkVBU09OX0hMVCB8fFxuK1x0aWYgKHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYyAhPSBFWElUX1JFQVNPTl9ITFQgfHxcbiBcdCAgICB0b190ZHgodmNwdSktXHUwMDNldnBfZW50ZXJfYXJncy5yMTIpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbkBAIC04MjYsNyArODI2LDcgQEAgc3RhdGljIHZvaWQgdGR4X3ByZXBhcmVfc3dpdGNoX3RvX2hvc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIHZvaWQgdGR4X3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHR2bXhfdmNwdV9waV9wdXQodmNwdSk7XG4rXHR2dF92Y3B1X3BpX3B1dCh2Y3B1KTtcbiBcdHRkeF9wcmVwYXJlX3N3aXRjaF90b19ob3N0KHZjcHUpO1xuIH1cbiBcbkBAIC05NzQsMTUgKzk3NCwxNSBAQCBzdGF0aWMgbm9pbnN0ciB2b2lkIHRkeF92Y3B1X2VudGVyX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0dGR4LVx1MDAzZWV4aXRfZ3BhID0gdGR4LVx1MDAzZXZwX2VudGVyX2FyZ3Mucjg7XG4gXHR2dC1cdTAwM2VleGl0X2ludHJfaW5mbyA9IHRkeC1cdTAwM2V2cF9lbnRlcl9hcmdzLnI5O1xuIFxuLVx0dm14X2hhbmRsZV9ubWkodmNwdSk7XG4rXHR2dF9oYW5kbGVfbm1pKHZjcHUpO1xuIFxuIFx0Z3Vlc3Rfc3RhdGVfZXhpdF9pcnFvZmYoKTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgdGR4X2ZhaWxlZF92bWVudHJ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRyZXR1cm4gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mYWlsZWRfdm1lbnRyeSBcdTAwMjZcdTAwMjZcbi1cdCAgICAgICB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZ1bGwgIT0gLTF1O1xuK1x0cmV0dXJuIHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mYWlsZWRfdm1lbnRyeSBcdTAwMjZcdTAwMjZcbitcdCAgICAgICB2dF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZnVsbCAhPSAtMXU7XG4gfVxuIFxuIHN0YXRpYyBmYXN0cGF0aF90IHRkeF9leGl0X2hhbmRsZXJzX2Zhc3RwYXRoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbkBAIC0xMTMxLDcgKzExMzEsNyBAQCB2b2lkIHRkeF9pbmplY3Rfbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBzdGF0aWMgaW50IHRkeF9oYW5kbGVfZXhjZXB0aW9uX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0dTMyIGludHJfaW5mbyA9IHZteF9nZXRfaW50cl9pbmZvKHZjcHUpO1xuK1x0dTMyIGludHJfaW5mbyA9IHZ0X2dldF9pbnRyX2luZm8odmNwdSk7XG4gXG4gXHQvKlxuIFx0ICogTWFjaGluZSBjaGVja3MgYXJlIGhhbmRsZWQgYnkgaGFuZGxlX2V4Y2VwdGlvbl9pcnFvZmYoKSwgb3IgYnlcbkBAIC0xODk1LDcgKzE4OTUsNyBAQCB2b2lkIHRkeF9kZWxpdmVyX2ludGVycnVwdChzdHJ1Y3Qga3ZtX2xhcGljICphcGljLCBpbnQgZGVsaXZlcnlfbW9kZSxcbiBcdHN0cnVjdCB2Y3B1X3RkeCAqdGR4ID0gdG9fdGR4KHZjcHUpO1xuIFxuIFx0LyogVERYIHN1cHBvcnRzIG9ubHkgcG9zdGVkIGludGVycnVwdC4gIE5vIGxhcGljIGVtdWxhdGlvbi4gKi9cbi1cdF9fdm14X2RlbGl2ZXJfcG9zdGVkX2ludGVycnVwdCh2Y3B1LCBcdTAwMjZ0ZHgtXHUwMDNldnQucGlfZGVzYywgdmVjdG9yKTtcbitcdF9fdnRfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0KHZjcHUsIFx1MDAyNnRkeC1cdTAwM2V2dC5waV9kZXNjLCB2ZWN0b3IpO1xuIFxuIFx0dHJhY2Vfa3ZtX2FwaWN2X2FjY2VwdF9pcnEodmNwdS1cdTAwM2V2Y3B1X2lkLCBkZWxpdmVyeV9tb2RlLCB0cmlnX21vZGUsIHZlY3Rvcik7XG4gfVxuQEAgLTE5MDMsNyArMTkwMyw3IEBAIHZvaWQgdGR4X2RlbGl2ZXJfaW50ZXJydXB0KHN0cnVjdCBrdm1fbGFwaWMgKmFwaWMsIGludCBkZWxpdmVyeV9tb2RlLFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB0ZHhfaXNfc2VwdF92aW9sYXRpb25fdW5leHBlY3RlZF9wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHR1NjQgZWVxX3R5cGUgPSB0b190ZHgodmNwdSktXHUwMDNlZXh0X2V4aXRfcXVhbGlmaWNhdGlvbiBcdTAwMjYgVERYX0VYVF9FWElUX1FVQUxfVFlQRV9NQVNLO1xuLVx0dTY0IGVxID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4rXHR1NjQgZXEgPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFxuIFx0aWYgKGVlcV90eXBlICE9IFREWF9FWFRfRVhJVF9RVUFMX1RZUEVfUEVORElOR19FUFRfVklPTEFUSU9OKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG5AQCAtMTkzOSw3ICsxOTM5LDcgQEAgc3RhdGljIGludCB0ZHhfaGFuZGxlX2VwdF92aW9sYXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHQvKiBPbmx5IHByaXZhdGUgR1BBIHRyaWdnZXJzIHplcm8tc3RlcCBtaXRpZ2F0aW9uICovXG4gXHRcdGxvY2FsX3JldHJ5ID0gdHJ1ZTtcbiBcdH0gZWxzZSB7XG4tXHRcdGV4aXRfcXVhbCA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuK1x0XHRleGl0X3F1YWwgPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFx0XHQvKlxuIFx0XHQgKiBFUFQgdmlvbGF0aW9uIGR1ZSB0byBpbnN0cnVjdGlvbiBmZXRjaCBzaG91bGQgbmV2ZXIgYmVcbiBcdFx0ICogdHJpZ2dlcmVkIGZyb20gc2hhcmVkIG1lbW9yeSBpbiBURFggZ3Vlc3QuICBJZiBzdWNoIEVQVFxuQEAgLTE5ODcsNyArMTk4Nyw3IEBAIHN0YXRpYyBpbnQgdGR4X2hhbmRsZV9lcHRfdmlvbGF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHdoaWxlICgxKSB7XG4gXHRcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7XG4gXG4tXHRcdHJldCA9IF9fdm14X2hhbmRsZV9lcHRfdmlvbGF0aW9uKHZjcHUsIGdwYSwgZXhpdF9xdWFsKTtcbitcdFx0cmV0ID0gX192dF9oYW5kbGVfZXB0X3Zpb2xhdGlvbih2Y3B1LCBncGEsIGV4aXRfcXVhbCk7XG4gXG4gXHRcdGlmIChyZXQgIT0gUkVUX1BGX1JFVFJZIHx8ICFsb2NhbF9yZXRyeSlcbiBcdFx0XHRicmVhaztcbkBAIC0yMDIxLDcgKzIwMjEsNyBAQCBpbnQgdGR4X2NvbXBsZXRlX2VtdWxhdGVkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlcnIpXG4gXHRcdHJldHVybiAxO1xuIFx0fVxuIFxuLVx0aWYgKHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMgPT0gRVhJVF9SRUFTT05fTVNSX1JFQUQpXG4rXHRpZiAodnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljID09IEVYSVRfUkVBU09OX01TUl9SRUFEKVxuIFx0XHR0ZHZtY2FsbF9zZXRfcmV0dXJuX3ZhbCh2Y3B1LCBrdm1fcmVhZF9lZHhfZWF4KHZjcHUpKTtcbiBcbiBcdHJldHVybiAxO1xuQEAgLTIwMzIsNyArMjAzMiw3IEBAIGludCB0ZHhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGZhc3RwYXRoKVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3RkeCAqdGR4ID0gdG9fdGR4KHZjcHUpO1xuIFx0dTY0IHZwX2VudGVyX3JldCA9IHRkeC1cdTAwM2V2cF9lbnRlcl9yZXQ7XG4tXHR1bmlvbiB2bXhfZXhpdF9yZWFzb24gZXhpdF9yZWFzb24gPSB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpO1xuK1x0dW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uID0gdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpO1xuIFxuIFx0aWYgKGZhc3RwYXRoICE9IEVYSVRfRkFTVFBBVEhfTk9ORSlcbiBcdFx0cmV0dXJuIDE7XG5AQCAtMjE0Miw5ICsyMTQyLDkgQEAgdm9pZCB0ZHhfZ2V0X2V4aXRfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiAqcmVhc29uLFxuIFxuIFx0KnJlYXNvbiA9IHRkeC1cdTAwM2V2dC5leGl0X3JlYXNvbi5mdWxsO1xuIFx0aWYgKCpyZWFzb24gIT0gLTF1KSB7XG4tXHRcdCppbmZvMSA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuK1x0XHQqaW5mbzEgPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFx0XHQqaW5mbzIgPSB0ZHgtXHUwMDNlZXh0X2V4aXRfcXVhbGlmaWNhdGlvbjtcbi1cdFx0KmludHJfaW5mbyA9IHZteF9nZXRfaW50cl9pbmZvKHZjcHUpO1xuK1x0XHQqaW50cl9pbmZvID0gdnRfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcbiBcdH0gZWxzZSB7XG4gXHRcdCppbmZvMSA9IDA7XG4gXHRcdCppbmZvMiA9IDA7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguYyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbmluZGV4IDUwNDYzMGYwZWI0MGYuLjdlMzVjMmQwM2M2OWUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG5AQCAtMTU3NywxMiArMTU3NywxMiBAQCB2b2lkIHZteF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KVxuIFxuIFx0dm14X3ZjcHVfbG9hZF92bWNzKHZjcHUsIGNwdSk7XG4gXG4tXHR2bXhfdmNwdV9waV9sb2FkKHZjcHUsIGNwdSk7XG4rXHR2dF92Y3B1X3BpX2xvYWQodmNwdSwgY3B1KTtcbiB9XG4gXG4gdm9pZCB2bXhfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHZteF92Y3B1X3BpX3B1dCh2Y3B1KTtcbitcdHZ0X3ZjcHVfcGlfcHV0KHZjcHUpO1xuIFxuIFx0dm14X3ByZXBhcmVfc3dpdGNoX3RvX2hvc3QodG9fdm14KHZjcHUpKTtcbiB9XG5AQCAtMTc5MSw3ICsxNzkxLDcgQEAgaW50IHZteF9jaGVja19lbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGVtdWxfdHlwZSxcbiBcdCAqIHNvIHRoYXQgZ3Vlc3QgdXNlcnNwYWNlIGNhbid0IERvUyB0aGUgZ3Vlc3Qgc2ltcGx5IGJ5IHRyaWdnZXJpbmdcbiBcdCAqIGVtdWxhdGlvbiAoZW5jbGF2ZXMgYXJlIENQTDMgb25seSkuXG4gXHQgKi9cbi1cdGlmICh2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmVuY2xhdmVfbW9kZSkge1xuK1x0aWYgKHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5lbmNsYXZlX21vZGUpIHtcbiBcdFx0a3ZtX3F1ZXVlX2V4Y2VwdGlvbih2Y3B1LCBVRF9WRUNUT1IpO1xuIFx0XHRyZXR1cm4gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQ7XG4gXHR9XG5AQCAtMTgwNiw3ICsxODA2LDcgQEAgaW50IHZteF9jaGVja19lbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGVtdWxfdHlwZSxcbiBcbiBzdGF0aWMgaW50IHNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHVuaW9uIHZteF9leGl0X3JlYXNvbiBleGl0X3JlYXNvbiA9IHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSk7XG4rXHR1bmlvbiB2bXhfZXhpdF9yZWFzb24gZXhpdF9yZWFzb24gPSB2dF9nZXRfZXhpdF9yZWFzb24odmNwdSk7XG4gXHR1bnNpZ25lZCBsb25nIHJpcCwgb3JpZ19yaXA7XG4gXHR1MzIgaW5zdHJfbGVuO1xuIFxuQEAgLTQ0MjQsNyArNDQyNCw3IEBAIHN0YXRpYyBpbnQgdm14X2RlbGl2ZXJfcG9zdGVkX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCB2ZWN0b3IpXG4gXHRpZiAoIXZjcHUtXHUwMDNlYXJjaC5hcGljLVx1MDAzZWFwaWN2X2FjdGl2ZSlcbiBcdFx0cmV0dXJuIC0xO1xuIFxuLVx0X192bXhfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0KHZjcHUsIFx1MDAyNnZ0LVx1MDAzZXBpX2Rlc2MsIHZlY3Rvcik7XG4rXHRfX3Z0X2RlbGl2ZXJfcG9zdGVkX2ludGVycnVwdCh2Y3B1LCBcdTAwMjZ2dC1cdTAwM2VwaV9kZXNjLCB2ZWN0b3IpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTUzNzksMTUgKzUzNzksOSBAQCBib29sIHZteF9ndWVzdF9pbmplY3RfYWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICAgICAgIChrdm1fZ2V0X3JmbGFncyh2Y3B1KSBcdTAwMjYgWDg2X0VGTEFHU19BQyk7XG4gfVxuIFxuLXN0YXRpYyBib29sIGlzX3hmZF9ubV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4te1xuLVx0cmV0dXJuIHZjcHUtXHUwMDNlYXJjaC5ndWVzdF9mcHUuZnBzdGF0ZS1cdTAwM2V4ZmQgXHUwMDI2XHUwMDI2XG4tXHQgICAgICAgIWt2bV9pc19jcjBfYml0X3NldCh2Y3B1LCBYODZfQ1IwX1RTKTtcbi19XG4tXG4gc3RhdGljIGludCB2bXhfaGFuZGxlX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgZXJyb3JfY29kZSlcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGNyMiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuK1x0dW5zaWduZWQgbG9uZyBjcjIgPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFxuIFx0aWYgKHZjcHUtXHUwMDNlYXJjaC5hcGYuaG9zdF9hcGZfZmxhZ3MpXG4gXHRcdGdvdG8gaGFuZGxlX3BmO1xuQEAgLTU0MzUsNyArNTQyOSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2V4Y2VwdGlvbl9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0dTMyIHZlY3RfaW5mbztcbiBcbiBcdHZlY3RfaW5mbyA9IHZteC1cdTAwM2VpZHRfdmVjdG9yaW5nX2luZm87XG4tXHRpbnRyX2luZm8gPSB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcbitcdGludHJfaW5mbyA9IHZ0X2dldF9pbnRyX2luZm8odmNwdSk7XG4gXG4gXHQvKlxuIFx0ICogTWFjaGluZSBjaGVja3MgYXJlIGhhbmRsZWQgYnkgaGFuZGxlX2V4Y2VwdGlvbl9pcnFvZmYoKSwgb3IgYnlcbkBAIC01NTE2LDcgKzU1MTAsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9leGNlcHRpb25fbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBcdHN3aXRjaCAoZXhfbm8pIHtcbiBcdGNhc2UgREJfVkVDVE9SOlxuLVx0XHRkcjYgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbitcdFx0ZHI2ID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdFx0aWYgKCEodmNwdS1cdTAwM2VndWVzdF9kZWJ1ZyBcdTAwMjZcbiBcdFx0ICAgICAgKEtWTV9HVUVTVERCR19TSU5HTEVTVEVQIHwgS1ZNX0dVRVNUREJHX1VTRV9IV19CUCkpKSB7XG4gXHRcdFx0LypcbkBAIC01NTkyLDcgKzU1ODYsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9pbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpbnQgc2l6ZSwgaW4sIHN0cmluZztcbiBcdHVuc2lnbmVkIHBvcnQ7XG4gXG4tXHRleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbitcdGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXHRzdHJpbmcgPSAoZXhpdF9xdWFsaWZpY2F0aW9uIFx1MDAyNiAxNikgIT0gMDtcbiBcbiBcdCsrdmNwdS1cdTAwM2VzdGF0LmlvX2V4aXRzO1xuQEAgLTU2ODEsNyArNTY3NSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGludCBlcnI7XG4gXHRpbnQgcmV0O1xuIFxuLVx0ZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4rXHRleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFx0Y3IgPSBleGl0X3F1YWxpZmljYXRpb24gXHUwMDI2IDE1O1xuIFx0cmVnID0gKGV4aXRfcXVhbGlmaWNhdGlvbiBcdTAwM2VcdTAwM2UgOCkgXHUwMDI2IDE1O1xuIFx0c3dpdGNoICgoZXhpdF9xdWFsaWZpY2F0aW9uIFx1MDAzZVx1MDAzZSA0KSBcdTAwMjYgMykge1xuQEAgLTU3NTksNyArNTc1Myw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2RyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGludCBkciwgZHI3LCByZWc7XG4gXHRpbnQgZXJyID0gMTtcbiBcbi1cdGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuK1x0ZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdGRyID0gZXhpdF9xdWFsaWZpY2F0aW9uIFx1MDAyNiBERUJVR19SRUdfQUNDRVNTX05VTTtcbiBcbiBcdC8qIEZpcnN0LCBpZiBEUiBkb2VzIG5vdCBleGlzdCwgdHJpZ2dlciBVRCAqL1xuQEAgLTU4NTUsNyArNTg0OSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2ludGVycnVwdF93aW5kb3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIHN0YXRpYyBpbnQgaGFuZGxlX2ludmxwZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbitcdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcbiBcdGt2bV9tbXVfaW52bHBnKHZjcHUsIGV4aXRfcXVhbGlmaWNhdGlvbik7XG4gXHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XG5AQCAtNTg2NCw3ICs1ODU4LDcgQEAgc3RhdGljIGludCBoYW5kbGVfaW52bHBnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBzdGF0aWMgaW50IGhhbmRsZV9hcGljX2FjY2VzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0aWYgKGxpa2VseShmYXN0ZW9pKSkge1xuLVx0XHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuK1x0XHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXHRcdGludCBhY2Nlc3NfdHlwZSwgb2Zmc2V0O1xuIFxuIFx0XHRhY2Nlc3NfdHlwZSA9IGV4aXRfcXVhbGlmaWNhdGlvbiBcdTAwMjYgQVBJQ19BQ0NFU1NfVFlQRTtcbkBAIC01ODg1LDcgKzU4NzksNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9hcGljX2FjY2VzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gc3RhdGljIGludCBoYW5kbGVfYXBpY19lb2lfaW5kdWNlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbitcdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdGludCB2ZWN0b3IgPSBleGl0X3F1YWxpZmljYXRpb24gXHUwMDI2IDB4ZmY7XG4gXG4gXHQvKiBFT0ktaW5kdWNlZCBWTSBleGl0IGlzIHRyYXAtbGlrZSBhbmQgdGh1cyBubyBuZWVkIHRvIGFkanVzdCBJUCAqL1xuQEAgLTU4OTUsNyArNTg4OSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2FwaWNfZW9pX2luZHVjZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIHN0YXRpYyBpbnQgaGFuZGxlX2FwaWNfd3JpdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4rXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXG4gXHQvKlxuIFx0ICogQVBJQy13cml0ZSBWTS1FeGl0IGlzIHRyYXAtbGlrZSwgS1ZNIGRvZXNuJ3QgbmVlZCB0byBhZHZhbmNlIFJJUCBhbmRcbkBAIC01OTIzLDcgKzU5MTcsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV90YXNrX3N3aXRjaChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZHRfaW5kZXggPSAodm14LVx1MDAzZWlkdF92ZWN0b3JpbmdfaW5mbyBcdTAwMjYgVkVDVE9SSU5HX0lORk9fVkVDVE9SX01BU0spO1xuIFx0dHlwZSA9ICh2bXgtXHUwMDNlaWR0X3ZlY3RvcmluZ19pbmZvIFx1MDAyNiBWRUNUT1JJTkdfSU5GT19UWVBFX01BU0spO1xuIFxuLVx0ZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4rXHRleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFxuIFx0cmVhc29uID0gKHUzMilleGl0X3F1YWxpZmljYXRpb24gXHUwMDNlXHUwMDNlIDMwO1xuIFx0aWYgKHJlYXNvbiA9PSBUQVNLX1NXSVRDSF9HQVRFIFx1MDAyNlx1MDAyNiBpZHRfdikge1xuQEAgLTU5NjksNyArNTk2Myw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3Rhc2tfc3dpdGNoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBzdGF0aWMgaW50IGhhbmRsZV9lcHRfdmlvbGF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuK1x0dW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFx0Z3BhX3QgZ3BhO1xuIFxuIFx0LypcbkBAIC01OTk3LDcgKzU5OTEsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9lcHRfdmlvbGF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGlmICh1bmxpa2VseShhbGxvd19zbWFsbGVyX21heHBoeWFkZHIgXHUwMDI2XHUwMDI2ICFrdm1fdmNwdV9pc19sZWdhbF9ncGEodmNwdSwgZ3BhKSkpXG4gXHRcdHJldHVybiBrdm1fZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCAwKTtcbiBcbi1cdHJldHVybiBfX3ZteF9oYW5kbGVfZXB0X3Zpb2xhdGlvbih2Y3B1LCBncGEsIGV4aXRfcXVhbGlmaWNhdGlvbik7XG4rXHRyZXR1cm4gX192dF9oYW5kbGVfZXB0X3Zpb2xhdGlvbih2Y3B1LCBncGEsIGV4aXRfcXVhbGlmaWNhdGlvbik7XG4gfVxuIFxuIHN0YXRpYyBpbnQgaGFuZGxlX2VwdF9taXNjb25maWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuQEAgLTYxNjAsNyArNjE1NCw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2ludnBjaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0LyogQWNjb3JkaW5nIHRvIHRoZSBJbnRlbCBpbnN0cnVjdGlvbiByZWZlcmVuY2UsIHRoZSBtZW1vcnkgb3BlcmFuZFxuIFx0ICogaXMgcmVhZCBldmVuIGlmIGl0IGlzbid0IG5lZWRlZCAoZS5nLiwgZm9yIHR5cGU9PWFsbClcbiBcdCAqL1xuLVx0aWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgdm14X2dldF9leGl0X3F1YWwodmNwdSksXG4rXHRpZiAoZ2V0X3ZteF9tZW1fYWRkcmVzcyh2Y3B1LCB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxuIFx0XHRcdFx0dm14X2luc3RydWN0aW9uX2luZm8sIGZhbHNlLFxuIFx0XHRcdFx0c2l6ZW9mKG9wZXJhbmQpLCBcdTAwMjZndmEpKVxuIFx0XHRyZXR1cm4gMTtcbkBAIC02MTc0LDcgKzYxNjgsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9wbWxfZnVsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHR0cmFjZV9rdm1fcG1sX2Z1bGwodmNwdS1cdTAwM2V2Y3B1X2lkKTtcbiBcbi1cdGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuK1x0ZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcbiBcdC8qXG4gXHQgKiBQTUwgYnVmZmVyIEZVTEwgaGFwcGVuZWQgd2hpbGUgZXhlY3V0aW5nIGlyZXQgZnJvbSBOTUksXG5AQCAtNjI3OCw3ICs2MjcyLDcgQEAgc3RhdGljIGludCBoYW5kbGVfYnVzX2xvY2tfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBzdGF0aWMgaW50IGhhbmRsZV9ub3RpZnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4rXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXHRib29sIGNvbnRleHRfaW52YWxpZCA9IGV4aXRfcXVhbCBcdTAwMjYgTk9USUZZX1ZNX0NPTlRFWFRfSU5WQUxJRDtcbiBcbiBcdCsrdmNwdS1cdTAwM2VzdGF0Lm5vdGlmeV93aW5kb3dfZXhpdHM7XG5AQCAtNjMwOSwxMyArNjMwMywxMyBAQCBzdGF0aWMgaW50IHZteF9nZXRfbXNyX2ltbV9yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIHN0YXRpYyBpbnQgaGFuZGxlX3JkbXNyX2ltbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0cmV0dXJuIGt2bV9lbXVsYXRlX3JkbXNyX2ltbSh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSxcbitcdHJldHVybiBrdm1fZW11bGF0ZV9yZG1zcl9pbW0odmNwdSwgdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KSxcbiBcdFx0XHRcdCAgICAgdm14X2dldF9tc3JfaW1tX3JlZyh2Y3B1KSk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgaGFuZGxlX3dybXNyX2ltbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0cmV0dXJuIGt2bV9lbXVsYXRlX3dybXNyX2ltbSh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSxcbitcdHJldHVybiBrdm1fZW11bGF0ZV93cm1zcl9pbW0odmNwdSwgdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KSxcbiBcdFx0XHRcdCAgICAgdm14X2dldF9tc3JfaW1tX3JlZyh2Y3B1KSk7XG4gfVxuIFxuQEAgLTYzOTIsMTAgKzYzODYsMTAgQEAgdm9pZCB2bXhfZ2V0X2V4aXRfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiAqcmVhc29uLFxuIFx0c3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7XG4gXG4gXHQqcmVhc29uID0gdm14LVx1MDAzZXZ0LmV4aXRfcmVhc29uLmZ1bGw7XG4tXHQqaW5mbzEgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbitcdCppbmZvMSA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXHRpZiAoISh2bXgtXHUwMDNldnQuZXhpdF9yZWFzb24uZmFpbGVkX3ZtZW50cnkpKSB7XG4gXHRcdCppbmZvMiA9IHZteC1cdTAwM2VpZHRfdmVjdG9yaW5nX2luZm87XG4tXHRcdCppbnRyX2luZm8gPSB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcbitcdFx0KmludHJfaW5mbyA9IHZ0X2dldF9pbnRyX2luZm8odmNwdSk7XG4gXHRcdGlmIChpc19leGNlcHRpb25fd2l0aF9lcnJvcl9jb2RlKCppbnRyX2luZm8pKVxuIFx0XHRcdCplcnJvcl9jb2RlID0gdm1jc19yZWFkMzIoVk1fRVhJVF9JTlRSX0VSUk9SX0NPREUpO1xuIFx0XHRlbHNlXG5AQCAtNjcwNiw3ICs2NzAwLDcgQEAgdm9pZCBkdW1wX3ZtY3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHN0YXRpYyBpbnQgX192bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpXG4ge1xuIFx0c3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7XG4tXHR1bmlvbiB2bXhfZXhpdF9yZWFzb24gZXhpdF9yZWFzb24gPSB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpO1xuK1x0dW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uID0gdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpO1xuIFx0dTMyIHZlY3RvcmluZ19pbmZvID0gdm14LVx1MDAzZWlkdF92ZWN0b3JpbmdfaW5mbztcbiBcdHUxNiBleGl0X2hhbmRsZXJfaW5kZXg7XG4gXG5AQCAtNjg3MCw3ICs2ODY0LDcgQEAgaW50IHZteF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aClcbiBcdCAqIEV4aXQgdG8gdXNlciBzcGFjZSB3aGVuIGJ1cyBsb2NrIGRldGVjdGVkIHRvIGluZm9ybSB0aGF0IHRoZXJlIGlzXG4gXHQgKiBhIGJ1cyBsb2NrIGluIGd1ZXN0LlxuIFx0ICovXG4tXHRpZiAodm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5idXNfbG9ja19kZXRlY3RlZCkge1xuK1x0aWYgKHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5idXNfbG9ja19kZXRlY3RlZCkge1xuIFx0XHRpZiAocmV0IFx1MDAzZSAwKVxuIFx0XHRcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZWV4aXRfcmVhc29uID0gS1ZNX0VYSVRfWDg2X0JVU19MT0NLO1xuIFxuQEAgLTcxNDMsNzQgKzcxMzcsNiBAQCB2b2lkIHZteF9sb2FkX2VvaV9leGl0bWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0ICplb2lfZXhpdF9iaXRtYXApXG4gXHR2bWNzX3dyaXRlNjQoRU9JX0VYSVRfQklUTUFQMywgZW9pX2V4aXRfYml0bWFwWzNdKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgaGFuZGxlX25tX2ZhdWx0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4te1xuLVx0Lypcbi1cdCAqIFNhdmUgeGZkX2VyciB0byBndWVzdF9mcHUgYmVmb3JlIGludGVycnVwdCBpcyBlbmFibGVkLCBzbyB0aGVcbi1cdCAqIE1TUiB2YWx1ZSBpcyBub3QgY2xvYmJlcmVkIGJ5IHRoZSBob3N0IGFjdGl2aXR5IGJlZm9yZSB0aGUgZ3Vlc3Rcbi1cdCAqIGhhcyBjaGFuY2UgdG8gY29uc3VtZSBpdC5cbi1cdCAqXG4tXHQgKiBVcGRhdGUgdGhlIGd1ZXN0J3MgWEZEX0VSUiBpZiBhbmQgb25seSBpZiBYRkQgaXMgZW5hYmxlZCwgYXMgdGhlICNOTVxuLVx0ICogaW50ZXJjZXB0aW9uIG1heSBoYXZlIGJlZW4gY2F1c2VkIGJ5IEwxIGludGVyY2VwdGlvbi4gIFBlciB0aGUgU0RNLFxuLVx0ICogWEZEX0VSUiBpcyBub3QgbW9kaWZpZWQgZm9yIG5vbi1YRkQgI05NLCBpLmUuIGlmIENSMC5UUz0xLlxuLVx0ICpcbi1cdCAqIE5vdGUsIFhGRF9FUlIgaXMgdXBkYXRlZCBfYmVmb3JlXyB0aGUgI05NIGludGVyY2VwdGlvbiBjaGVjaywgaS5lLlxuLVx0ICogdW5saWtlIENSMiBhbmQgRFI2LCB0aGUgdmFsdWUgaXMgbm90IGEgcGF5bG9hZCB0aGF0IGlzIGF0dGFjaGVkIHRvXG4tXHQgKiB0aGUgI05NIGV4Y2VwdGlvbi5cbi1cdCAqL1xuLVx0aWYgKGlzX3hmZF9ubV9mYXVsdCh2Y3B1KSlcbi1cdFx0cmRtc3JxKE1TUl9JQTMyX1hGRF9FUlIsIHZjcHUtXHUwMDNlYXJjaC5ndWVzdF9mcHUueGZkX2Vycik7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIGhhbmRsZV9leGNlcHRpb25faXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGludHJfaW5mbylcbi17XG4tXHQvKiBpZiBleGl0IGR1ZSB0byBQRiBjaGVjayBmb3IgYXN5bmMgUEYgKi9cbi1cdGlmIChpc19wYWdlX2ZhdWx0KGludHJfaW5mbykpXG4tXHRcdHZjcHUtXHUwMDNlYXJjaC5hcGYuaG9zdF9hcGZfZmxhZ3MgPSBrdm1fcmVhZF9hbmRfcmVzZXRfYXBmX2ZsYWdzKCk7XG4tXHQvKiBpZiBleGl0IGR1ZSB0byBOTSwgaGFuZGxlIGJlZm9yZSBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkICovXG4tXHRlbHNlIGlmIChpc19ubV9mYXVsdChpbnRyX2luZm8pKVxuLVx0XHRoYW5kbGVfbm1fZmF1bHRfaXJxb2ZmKHZjcHUpO1xuLVx0LyogSGFuZGxlIG1hY2hpbmUgY2hlY2tzIGJlZm9yZSBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkICovXG4tXHRlbHNlIGlmIChpc19tYWNoaW5lX2NoZWNrKGludHJfaW5mbykpXG4tXHRcdGt2bV9tYWNoaW5lX2NoZWNrKCk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIGhhbmRsZV9leHRlcm5hbF9pbnRlcnJ1cHRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi1cdFx0XHRcdFx0ICAgICB1MzIgaW50cl9pbmZvKVxuLXtcbi1cdHVuc2lnbmVkIGludCB2ZWN0b3IgPSBpbnRyX2luZm8gXHUwMDI2IElOVFJfSU5GT19WRUNUT1JfTUFTSztcbi1cbi1cdGlmIChLVk1fQlVHKCFpc19leHRlcm5hbF9pbnRyKGludHJfaW5mbyksIHZjcHUtXHUwMDNla3ZtLFxuLVx0ICAgIFwidW5leHBlY3RlZCBWTS1FeGl0IGludGVycnVwdCBpbmZvOiAweCV4XCIsIGludHJfaW5mbykpXG4tXHRcdHJldHVybjtcbi1cbi1cdGt2bV9iZWZvcmVfaW50ZXJydXB0KHZjcHUsIEtWTV9IQU5ETElOR19JUlEpO1xuLVx0eDg2X2VudHJ5X2Zyb21fa3ZtKEVWRU5UX1RZUEVfRVhUSU5ULCB2ZWN0b3IpO1xuLVx0a3ZtX2FmdGVyX2ludGVycnVwdCh2Y3B1KTtcbi1cbi1cdHZjcHUtXHUwMDNlYXJjaC5hdF9pbnN0cnVjdGlvbl9ib3VuZGFyeSA9IHRydWU7XG4tfVxuLVxuLXZvaWQgdm14X2hhbmRsZV9leGl0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4te1xuLVx0aWYgKHRvX3Z0KHZjcHUpLVx1MDAzZWVtdWxhdGlvbl9yZXF1aXJlZClcbi1cdFx0cmV0dXJuO1xuLVxuLVx0c3dpdGNoICh2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljKSB7XG4tXHRjYXNlIEVYSVRfUkVBU09OX0VYVEVSTkFMX0lOVEVSUlVQVDpcbi1cdFx0aGFuZGxlX2V4dGVybmFsX2ludGVycnVwdF9pcnFvZmYodmNwdSwgdm14X2dldF9pbnRyX2luZm8odmNwdSkpO1xuLVx0XHRicmVhaztcbi1cdGNhc2UgRVhJVF9SRUFTT05fRVhDRVBUSU9OX05NSTpcbi1cdFx0aGFuZGxlX2V4Y2VwdGlvbl9pcnFvZmYodmNwdSwgdm14X2dldF9pbnRyX2luZm8odmNwdSkpO1xuLVx0XHRicmVhaztcbi1cdGNhc2UgRVhJVF9SRUFTT05fTUNFX0RVUklOR19WTUVOVFJZOlxuLVx0XHRrdm1fbWFjaGluZV9jaGVjaygpO1xuLVx0XHRicmVhaztcbi1cdGRlZmF1bHQ6XG4tXHRcdGJyZWFrO1xuLVx0fVxuLX1cbi1cbiAvKlxuICAqIFRoZSBrdm0gcGFyYW1ldGVyIGNhbiBiZSBOVUxMIChtb2R1bGUgaW5pdGlhbGl6YXRpb24sIG9yIGludm9jYXRpb24gYmVmb3JlXG4gICogVk0gY3JlYXRpb24pLiBCZSBzdXJlIHRvIGNoZWNrIHRoZSBrdm0gcGFyYW1ldGVyIGJlZm9yZSB1c2luZyBpdC5cbkBAIC03MjUwLDcgKzcxNzYsNyBAQCBzdGF0aWMgdm9pZCB2bXhfcmVjb3Zlcl9ubWlfYmxvY2tpbmcoc3RydWN0IHZjcHVfdm14ICp2bXgpXG4gXHRcdGlmICh2bXgtXHUwMDNlbG9hZGVkX3ZtY3MtXHUwMDNlbm1pX2tub3duX3VubWFza2VkKVxuIFx0XHRcdHJldHVybjtcbiBcbi1cdFx0ZXhpdF9pbnRyX2luZm8gPSB2bXhfZ2V0X2ludHJfaW5mbyhcdTAwMjZ2bXgtXHUwMDNldmNwdSk7XG4rXHRcdGV4aXRfaW50cl9pbmZvID0gdnRfZ2V0X2ludHJfaW5mbyhcdTAwMjZ2bXgtXHUwMDNldmNwdSk7XG4gXHRcdHVuYmxvY2tfbm1pID0gKGV4aXRfaW50cl9pbmZvIFx1MDAyNiBJTlRSX0lORk9fVU5CTE9DS19OTUkpICE9IDA7XG4gXHRcdHZlY3RvciA9IGV4aXRfaW50cl9pbmZvIFx1MDAyNiBJTlRSX0lORk9fVkVDVE9SX01BU0s7XG4gXHRcdC8qXG5AQCAtNzQxNywxNCArNzM0MywxNCBAQCBzdGF0aWMgZmFzdHBhdGhfdCB2bXhfZXhpdF9oYW5kbGVyc19mYXN0cGF0aChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHQgKiB0aGUgZmFzdHBhdGggZXZlbiwgYWxsIG90aGVyIGV4aXRzIG11c3QgdXNlIHRoZSBzbG93IHBhdGguXG4gXHQgKi9cbiBcdGlmIChpc19ndWVzdF9tb2RlKHZjcHUpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMgIT0gRVhJVF9SRUFTT05fUFJFRU1QVElPTl9USU1FUilcbitcdCAgICB2dF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMgIT0gRVhJVF9SRUFTT05fUFJFRU1QVElPTl9USU1FUilcbiBcdFx0cmV0dXJuIEVYSVRfRkFTVFBBVEhfTk9ORTtcbiBcbi1cdHN3aXRjaCAodm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYykge1xuK1x0c3dpdGNoICh2dF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMpIHtcbiBcdGNhc2UgRVhJVF9SRUFTT05fTVNSX1dSSVRFOlxuIFx0XHRyZXR1cm4gaGFuZGxlX2Zhc3RwYXRoX3dybXNyKHZjcHUpO1xuIFx0Y2FzZSBFWElUX1JFQVNPTl9NU1JfV1JJVEVfSU1NOlxuLVx0XHRyZXR1cm4gaGFuZGxlX2Zhc3RwYXRoX3dybXNyX2ltbSh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSxcbitcdFx0cmV0dXJuIGhhbmRsZV9mYXN0cGF0aF93cm1zcl9pbW0odmNwdSwgdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KSxcbiBcdFx0XHRcdFx0XHQgdm14X2dldF9tc3JfaW1tX3JlZyh2Y3B1KSk7XG4gXHRjYXNlIEVYSVRfUkVBU09OX1BSRUVNUFRJT05fVElNRVI6XG4gXHRcdHJldHVybiBoYW5kbGVfZmFzdHBhdGhfcHJlZW1wdGlvbl90aW1lcih2Y3B1LCBmb3JjZV9pbW1lZGlhdGVfZXhpdCk7XG5AQCAtNzQzNywxNyArNzM2Myw2IEBAIHN0YXRpYyBmYXN0cGF0aF90IHZteF9leGl0X2hhbmRsZXJzX2Zhc3RwYXRoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdH1cbiB9XG4gXG4tbm9pbnN0ciB2b2lkIHZteF9oYW5kbGVfbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi17XG4tXHRpZiAoKHUxNil2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljICE9IEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUkgfHxcbi1cdCAgICAhaXNfbm1pKHZteF9nZXRfaW50cl9pbmZvKHZjcHUpKSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0a3ZtX2JlZm9yZV9pbnRlcnJ1cHQodmNwdSwgS1ZNX0hBTkRMSU5HX05NSSk7XG4tXHR4ODZfZW50cnlfZnJvbV9rdm0oRVZFTlRfVFlQRV9OTUksIE5NSV9WRUNUT1IpO1xuLVx0a3ZtX2FmdGVyX2ludGVycnVwdCh2Y3B1KTtcbi19XG4tXG4gc3RhdGljIG5vaW5zdHIgdm9pZCB2bXhfdmNwdV9lbnRlcl9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0XHRcdFx0dW5zaWduZWQgaW50IGZsYWdzKVxuIHtcbkBAIC03NDc3LDEwICs3MzkyLDEwIEBAIHN0YXRpYyBub2luc3RyIHZvaWQgdm14X3ZjcHVfZW50ZXJfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHR9XG4gXG4gXHR2bXgtXHUwMDNldnQuZXhpdF9yZWFzb24uZnVsbCA9IHZtY3NfcmVhZDMyKFZNX0VYSVRfUkVBU09OKTtcbi1cdGlmIChsaWtlbHkoIXZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkpKVxuK1x0aWYgKGxpa2VseSghdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5KSlcbiBcdFx0dm14LVx1MDAzZWlkdF92ZWN0b3JpbmdfaW5mbyA9IHZtY3NfcmVhZDMyKElEVF9WRUNUT1JJTkdfSU5GT19GSUVMRCk7XG4gXG4tXHR2bXhfaGFuZGxlX25taSh2Y3B1KTtcbitcdHZ0X2hhbmRsZV9ubWkodmNwdSk7XG4gXG4gb3V0OlxuIFx0Z3Vlc3Rfc3RhdGVfZXhpdF9pcnFvZmYoKTtcbkBAIC03NjE3LDcgKzc1MzIsNyBAQCBmYXN0cGF0aF90IHZteF92Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBydW5fZmxhZ3MpXG4gXHRcdCAqIGNoZWNraW5nLlxuIFx0XHQgKi9cbiBcdFx0aWYgKHZjcHUtXHUwMDNlYXJjaC5uZXN0ZWRfcnVuX3BlbmRpbmcgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAhdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mYWlsZWRfdm1lbnRyeSlcbitcdFx0ICAgICF2dF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkpXG4gXHRcdFx0Kyt2Y3B1LVx1MDAzZXN0YXQubmVzdGVkX3J1bjtcbiBcbiBcdFx0dmNwdS1cdTAwM2VhcmNoLm5lc3RlZF9ydW5fcGVuZGluZyA9IDA7XG5AQCAtNzYyOCw3ICs3NTQzLDcgQEAgZmFzdHBhdGhfdCB2bXhfdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcnVuX2ZsYWdzKVxuIFxuIFx0dHJhY2Vfa3ZtX2V4aXQodmNwdSwgS1ZNX0lTQV9WTVgpO1xuIFxuLVx0aWYgKHVubGlrZWx5KHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkpKVxuK1x0aWYgKHVubGlrZWx5KHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mYWlsZWRfdm1lbnRyeSkpXG4gXHRcdHJldHVybiBFWElUX0ZBU1RQQVRIX05PTkU7XG4gXG4gXHR2bXgtXHUwMDNlbG9hZGVkX3ZtY3MtXHUwMDNlbGF1bmNoZWQgPSAxO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmggYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oXG5pbmRleCBkYzg1MTdmMTViYzQ2Li4zMjQ3YjU1YjM0ODQzIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC92bXguaFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC92bXguaFxuQEAgLTMwNCw0MyArMzA0LDYgQEAgc3RydWN0IGt2bV92bXgge1xuIFx0dTY0ICpwaWRfdGFibGU7XG4gfTtcbiBcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHN0cnVjdCB2Y3B1X3Z0ICp0b192dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4te1xuLVx0cmV0dXJuIFx1MDAyNihjb250YWluZXJfb2YodmNwdSwgc3RydWN0IHZjcHVfdm14LCB2Y3B1KS1cdTAwM2V2dCk7XG4tfVxuLVxuLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IGt2bV92Y3B1ICp2dF90b192Y3B1KHN0cnVjdCB2Y3B1X3Z0ICp2dClcbi17XG4tXHRyZXR1cm4gXHUwMDI2KGNvbnRhaW5lcl9vZih2dCwgc3RydWN0IHZjcHVfdm14LCB2dCktXHUwMDNldmNwdSk7XG4tfVxuLVxuLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5pb24gdm14X2V4aXRfcmVhc29uIHZteF9nZXRfZXhpdF9yZWFzb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLXtcbi1cdHJldHVybiB0b192dCh2Y3B1KS1cdTAwM2VleGl0X3JlYXNvbjtcbi19XG4tXG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBsb25nIHZteF9nZXRfZXhpdF9xdWFsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi17XG4tXHRzdHJ1Y3QgdmNwdV92dCAqdnQgPSB0b192dCh2Y3B1KTtcbi1cbi1cdGlmICgha3ZtX3JlZ2lzdGVyX3Rlc3RfYW5kX21hcmtfYXZhaWxhYmxlKHZjcHUsIFZDUFVfUkVHX0VYSVRfSU5GT18xKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAhV0FSTl9PTl9PTkNFKGlzX3RkX3ZjcHUodmNwdSkpKVxuLVx0XHR2dC1cdTAwM2VleGl0X3F1YWxpZmljYXRpb24gPSB2bWNzX3JlYWRsKEVYSVRfUVVBTElGSUNBVElPTik7XG4tXG4tXHRyZXR1cm4gdnQtXHUwMDNlZXhpdF9xdWFsaWZpY2F0aW9uO1xuLX1cbi1cbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiB2bXhfZ2V0X2ludHJfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4te1xuLVx0c3RydWN0IHZjcHVfdnQgKnZ0ID0gdG9fdnQodmNwdSk7XG4tXG4tXHRpZiAoIWt2bV9yZWdpc3Rlcl90ZXN0X2FuZF9tYXJrX2F2YWlsYWJsZSh2Y3B1LCBWQ1BVX1JFR19FWElUX0lORk9fMikgXHUwMDI2XHUwMDI2XG4tXHQgICAgIVdBUk5fT05fT05DRShpc190ZF92Y3B1KHZjcHUpKSlcbi1cdFx0dnQtXHUwMDNlZXhpdF9pbnRyX2luZm8gPSB2bWNzX3JlYWQzMihWTV9FWElUX0lOVFJfSU5GTyk7XG4tXG4tXHRyZXR1cm4gdnQtXHUwMDNlZXhpdF9pbnRyX2luZm87XG4tfVxuLVxuIHZvaWQgdm14X3ZjcHVfbG9hZF92bWNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSk7XG4gaW50IGFsbG9jYXRlX3ZwaWQodm9pZCk7XG4gdm9pZCBmcmVlX3ZwaWQoaW50IHZwaWQpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oIGIvYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmhcbmluZGV4IDA1NGZkMTRiYjJlMTYuLjdhYzAyYzY4NDU3ZjEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmhcbkBAIC0yNyw3ICsyNyw2IEBAIHZvaWQgdm14X3ZjcHVfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGluaXRfZXZlbnQpO1xuIHZvaWQgdm14X3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpO1xuIHZvaWQgdm14X3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gaW50IHZteF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aCk7XG4tdm9pZCB2bXhfaGFuZGxlX2V4aXRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gaW50IHZteF9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCB2bXhfdXBkYXRlX2VtdWxhdGVkX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gYm9vbCB2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDk6MjQ6NTkuMzc0NTA1MDE1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNzQ4NDE3NjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBBc3Nlc3NtZW50OiBSZWZhY3RvcmVkIFZNWC9URFggQ29kZSoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZGV0ZXJtaW5lIGlmIHdlIG5lZWQgdG8gZmlyZSB1cCBhIEtNU0FOIHNlc3Npb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgcHJpbWFyaWx5IGEgcmVmYWN0b3JpbmcgZXhlcmNpc2UsIGJ1dCB3ZSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi5cblxuRmlyc3QsIEkgc2VlIHRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyByZW9yZ2FuaXppbmcgYW5kIHJlbmFtaW5nIGNvZGUgcmVsYXRlZCB0byBLVk0gSW50ZWwncyBWTVggYW5kIFREWCBpbXBsZW1lbnRhdGlvbnMuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYHN0cnVjdCB2Y3B1X3ZteF90ZHhgIGlzIHRoZSBrZXkg4oCTIGl0J3MgYSB1bmlmaWVkIHN0cnVjdHVyZSB0aGF0IGFsbG93cyB1cyB0byB0cmVhdCBib3RoIFZNWCBhbmQgVERYIHZDUFVzIHNpbWlsYXJseSwgc3BlY2lmaWNhbGx5IGZvciBhY2Nlc3NpbmcgdGhlIGB2dGAgbWVtYmVyIHRocm91Z2ggdGhlIGB0b192dCgpYCBoZWxwZXIuIFRoZSB1c2Ugb2YgYGNvbnRhaW5lcl9vZmAgaXMgZnVuZGFtZW50YWwgdG8gS1ZNJ3MgYXJjaGl0ZWN0dXJlIGFuZCB0aGUgcHVycG9zZSBvZiB0aGlzIHJlZmFjdG9yIGlzIHRvIGFic3RyYWN0IGl0IHVuZGVyIGEgY29tbW9uIG5hbWUuIFRoZSBwYXRjaCBtb3ZlcyBhbmQgcmVuYW1lcyBhIHNlcmllcyBvZiBoZWxwZXIgZnVuY3Rpb25zIChlLmcuLCBgdm14X2dldF9leGl0X3JlYXNvbmAgdG8gYHZ0X2dldF9leGl0X3JlYXNvbmApIGFuZCBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgaW50ZXJydXB0cyBhbmQgZXhjZXB0aW9ucy5cblxuTXkgZmlyc3QgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZXJlIGFyZSBubyBtYWpvciBmdW5jdGlvbmFsIGNoYW5nZXMsIHRoZSBtYWluIGdvYWxzIGlzIHRvIHNpbXBsaWZ5IGFuZCB1bmlmeSBjb21tb24gVk1YL1REWCBjb2RlIGZvciBpbXByb3ZlZCBtYWludGFpbmFiaWxpdHkuXG5cbkkndmUgY2FyZWZ1bGx5IGV4YW1pbmVkIHRoZSBgdG9fdnRgIGZ1bmN0aW9uIG5vdyBiZWluZyBwbGFjZWQgaW4gY29tbW9uLmggYWxvbmcgd2l0aCB0aGUgbW92ZWQgZXhpdCBhbmQgaW50ZXJydXB0IGhhbmRsZXJzLiBUaGVzZSBhcmUgYWxtb3N0IGlkZW50aWNhbCB0byB0aGVpciBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbnMsIGFuZCBvbmx5IHRoZSBuYW1pbmcgaGFzIGJlZW4gYWRqdXN0ZWQgdG8gdXNlIHRoZSB1bmlmaWVkIFwidnRcIiBwcmVmaXguIEltcG9ydGFudGx5LCB0aGUgYHN0YXRpY19hc3NlcnRgIHN0YXRlbWVudHMgY29uZmlybWluZyB0aGUgb2Zmc2V0cyBvZiB0aGUgYHZ0YCBtZW1iZXIgd2l0aGluIGB2Y3B1X3ZteF90ZHhgLCBgdmNwdV92bXhgLCBhbmQgYHZjcHVfdGR4YCBzdHJ1Y3R1cmVzIGFyZSBjcnVjaWFsLiBUaGlzIGd1YXJhbnRlZXMgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBgY29udGFpbmVyX29mYCBtYWNybyBhbmQgZW5zdXJlcyBubyBtZW1vcnkgY29ycnVwdGlvbiBjYW4gb2NjdXIgZHVlIHRvIHN0cnVjdCBtZW1iZXIgYWNjZXNzIHRocm91Z2ggYHRvX3Z0YCBhbmQgYHZ0X3RvX3ZjcHVgLiBJdCBlbGltaW5hdGVzIHRoZSBwb3NzaWJpbGl0eSBvZiBvZmZzZXQgbWlzbWF0Y2ggYnVncy5cblxuTm93LCBsZXQncyBwdXQgb24gdGhlIEtNU0FOIGhhdC4gV2UgbmVlZCB0byBtZXRob2RpY2FsbHkgY2hlY2sgZm9yIGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLlxuXG4xLiAgKipLZXJuZWwtVXNlciBJbnRlcmZhY2U6KiogRG9lcyB0aGlzIHBhdGNoIGFkZCwgcmVtb3ZlIG9yIGNoYW5nZSBhbnkga2VybmVsIHN0cnVjdHVyZXMgdGhhdCBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2U/IE5vLCB0aGlzIGlzIHB1cmVseSBpbnRlcm5hbCByZWZhY3RvcmluZy5cbjIuICAqKkNvbmRpdGlvbmFsIExvZ2ljL0JyYW5jaGluZzoqKiBEb2VzIHRoZSBwYXRjaCBpbnRyb2R1Y2UgYW55IG5ldyBjb25kaXRpb25hbCBsb2dpYyB3aGVyZSB0aGUgb3V0Y29tZSBtaWdodCBkZXBlbmQgb24gYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZT8gTm90IHRoYXQgSSBjYW4gc2VlLiBUaGUgY29kZSBpcyBjYXJlZnVsbHkgc3RydWN0dXJlZCB0byBhdm9pZCBzdWNoIHNjZW5hcmlvcy5cbjMuICAqKkRhdGEgU3RydWN0dXJlIEluaXRpYWxpemF0aW9uOioqIElzIHRoZXJlIGFueSBpbnRyb2R1Y3Rpb24sIG9yIGNoYW5nZSB0byBjb21wbGV4IGRhdGEgc3RydWN0dXJlcywgYW5kIGlmIHNvLCBob3cgYXJlIHRoZXkgaW5pdGlhbGl6ZWQ/IEFyZSBhbnkgZmllbGRzIGxlZnQgdW5pbml0aWFsaXplZCB0aGF0IGNvdWxkIGxhdGVyIGJlIHJlYWQ/IE5vLiBUaGUgcmVmYWN0b3JpbmcgaXRzZWxmIGRvZXNuJ3QgYWx0ZXIgZGF0YSBzdHJ1Y3R1cmVzIGluIGEgd2F5IHRoYXQgaW50cm9kdWNlcyB0aGlzIHJpc2suXG40LiAgKipCb3VuZHMvTGVuZ3RoIENoZWNrczoqKiBEb2VzIGl0IGltcGFjdCBhbnkgZXhpc3RpbmcgY2hlY2tzIGluIGEgd2F5IHRoYXQgYWxsb3dzIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGRhdGE/IE5vLlxuXG5BZnRlciB0aGlzIGNhcmVmdWwgaW5zcGVjdGlvbiwgSSdtIGNvbmZpZGVudCB0aGF0IHRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIFRoZXNlIGtpbmRzIG9mIGJ1Z3MsIHdpdGggcG90ZW50aWFsIHN0cnVjdCBtZW1iZXIgb2Zmc2V0cyBtaXNtYXRjaGVzLCB3b3VsZCBiZSBjYXVnaHQgd2l0aCBzdGFuZGFyZCBtZW1vcnkgY2hlY2tlcnMgbGlrZSBLQVNBTiBkdXJpbmcgcm91dGluZSB0ZXN0aW5nLiBUaGUga2V5IGlzIGluIHRoZSBzdGF0aWMgYXNzZXJ0cyBhbmQgdGhlIHJpZ29yb3VzIGNvZGUgcmV2aWV3IGJ5IHRoZSBjb21tdW5pdHkuIEl0J3MgZXNzZW50aWFsbHkgc3RydWN0dXJhbCByZWZhY3RvcmluZyB0aGF0IG1vdmVzIGNvZGUgYXJvdW5kIHdoaWxlIHJldGFpbmluZyB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5LlxuXG5NeSBjb25jbHVzaW9uIGlzIHRoYXQgdGhpcyBwYXRjaCAqZG9lcyBub3QqIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGUgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcmVmYWN0b3JpbmcgYXJlIG1pbmltYWwsIHByaW1hcmlseSBsaW1pdGVkIHRvIHRoZSBjb3JyZWN0bmVzcyBvZiBwb2ludGVyIGFyaXRobWV0aWMgd2l0aCBvZmZzZXRzLiBUaGVzZSBhcmUgdGhpbmdzIHRoYXQgd291bGQgYmUgcmVhZGlseSBwaWNrZWQgdXAgYnkgZXhpc3RpbmcgS1ZNIHRlc3QgaW5mcmFzdHJ1Y3R1cmUgYW5kIG1lbW9yeSBzYW5pdGl6ZXJzLCBzbyBgTmVlZHNLTVNBTmAgPSBgZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTAwNywiT3V0cHV0VG9rZW5zIjozMzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzQ1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDk6MjU6MTAuMTIyOTI3Mjc3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHJlZmFjdG9yaW5nIG9mIEtWTSBJbnRlbCBWTVggYW5kIFREWCBjb2RlIHRvIGNvbnNvbGlkYXRlIGNvbW1vbiB2aXJ0dWFsaXphdGlvbiBpbmZyYXN0cnVjdHVyZSAoVlQpIGJldHdlZW4gc3RhbmRhcmQgVk1YIGFuZCBURFggdkNQVXM6XFxuMS4gSXQgZGVmaW5lcyBhIGNvbW1vbiB3cmFwcGVyIGxheW91dCBgc3RydWN0IHZjcHVfdm14X3RkeGAgd2l0aCBjb21waWxlLXRpbWUgYXNzZXJ0aW9ucyAoYHN0YXRpY19hc3NlcnRgKSBlbnN1cmluZyBvZmZzZXQgbWF0Y2hpbmcgb2YgYHN0cnVjdCB2Y3B1X3Z0YCBhY3Jvc3MgYHZjcHVfdm14YCBhbmQgYHZjcHVfdGR4YC5cXG4yLiBJdCBtb3ZlcyBhbmQgcmVuYW1lcyBoZWxwZXIgZnVuY3Rpb25zIChgdG9fdnRgLCBgdnRfZ2V0X2V4aXRfcmVhc29uYCwgYHZ0X2dldF9leGl0X3F1YWxgLCBgdnRfZ2V0X2ludHJfaW5mb2AsIGV0Yy4pIGZyb20gYHZteC5oYC9gdm14LmNgIHRvIGBjb21tb24uaGAvYG1haW4uY2AuXFxuMy4gSXQgbW92ZXMgY29tbW9uIGV4aXQgYW5kIGludGVycnVwdCBoYW5kbGluZyBmdW5jdGlvbnMgKGB2dF9oYW5kbGVfZXhpdF9pcnFvZmZgLCBgdnRfaGFuZGxlX25taWAsIGBoYW5kbGVfZXh0ZXJuYWxfaW50ZXJydXB0X2lycW9mZmAsIGV0Yy4pIHRvIGBtYWluLmNgLlxcbjQuIEl0IHJlbmFtZXMgcG9zdGVkIGludGVycnVwdCByb3V0aW5lcyB0byB1c2UgdGhlIGB2dF9gIHByZWZpeCBhY3Jvc3MgdGhlIGNvZGViYXNlLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmcgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgYnVmZmVyIGJvdW5kcy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBzdHJ1Y3QgbGF5b3V0IG9yIG9mZnNldHMgYXJlIGd1YXJkZWQgYXQgY29tcGlsZSB0aW1lIGJ5IGBzdGF0aWNfYXNzZXJ0YCBvciB3b3VsZCBtYW5pZmVzdCBhcyBtZW1vcnkgY29ycnVwdGlvbi9PT0IgYWNjZXNzIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgYnVpbGRzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHJlZmFjdG9yaW5nIG9mIEtWTSBJbnRlbCBWTVggYW5kIFREWCBjb2RlIHRvIGNvbnNvbGlkYXRlIGNvbW1vbiB2aXJ0dWFsaXphdGlvbiBpbmZyYXN0cnVjdHVyZSAoVlQpIGJldHdlZW4gc3RhbmRhcmQgVk1YIGFuZCBURFggdkNQVXM6XFxuMS4gSXQgZGVmaW5lcyBhIGNvbW1vbiB3cmFwcGVyIGxheW91dCBgc3RydWN0IHZjcHVfdm14X3RkeGAgd2l0aCBjb21waWxlLXRpbWUgYXNzZXJ0aW9ucyAoYHN0YXRpY19hc3NlcnRgKSBlbnN1cmluZyBvZmZzZXQgbWF0Y2hpbmcgb2YgYHN0cnVjdCB2Y3B1X3Z0YCBhY3Jvc3MgYHZjcHVfdm14YCBhbmQgYHZjcHVfdGR4YC5cXG4yLiBJdCBtb3ZlcyBhbmQgcmVuYW1lcyBoZWxwZXIgZnVuY3Rpb25zIChgdG9fdnRgLCBgdnRfZ2V0X2V4aXRfcmVhc29uYCwgYHZ0X2dldF9leGl0X3F1YWxgLCBgdnRfZ2V0X2ludHJfaW5mb2AsIGV0Yy4pIGZyb20gYHZteC5oYC9gdm14LmNgIHRvIGBjb21tb24uaGAvYG1haW4uY2AuXFxuMy4gSXQgbW92ZXMgY29tbW9uIGV4aXQgYW5kIGludGVycnVwdCBoYW5kbGluZyBmdW5jdGlvbnMgKGB2dF9oYW5kbGVfZXhpdF9pcnFvZmZgLCBgdnRfaGFuZGxlX25taWAsIGBoYW5kbGVfZXh0ZXJuYWxfaW50ZXJydXB0X2lycW9mZmAsIGV0Yy4pIHRvIGBtYWluLmNgLlxcbjQuIEl0IHJlbmFtZXMgcG9zdGVkIGludGVycnVwdCByb3V0aW5lcyB0byB1c2UgdGhlIGB2dF9gIHByZWZpeCBhY3Jvc3MgdGhlIGNvZGViYXNlLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmcgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgYnVmZmVyIGJvdW5kcy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBzdHJ1Y3QgbGF5b3V0IG9yIG9mZnNldHMgYXJlIGd1YXJkZWQgYXQgY29tcGlsZSB0aW1lIGJ5IGBzdGF0aWNfYXNzZXJ0YCBvciB3b3VsZCBtYW5pZmVzdCBhcyBtZW1vcnkgY29ycnVwdGlvbi9PT0IgYWNjZXNzIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgYnVpbGRzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow52b6l[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-05 09:22:47 +0000 UTC FinishedAt: 2026-09-05 09:25:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL" ], "series_id": "5641ba85-6f23-473f-8bc1-e77ee42483b1" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "vt_handle_exit_irqoff", "vt_handle_nmi", "vt_vcpu_pi_load", "vt_vcpu_pi_put", "vt_pi_start_bypass", "vt_pi_update_irte", "vmx_handle_exit", "vmx_vcpu_run", "nested_vmx_reflect_vmexit" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA5OjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2dF9oYW5kbGVfZXhpdF9pcnFvZmYmIzM0OywKICAgICYjMzQ7dnRfaGFuZGxlX25taSYjMzQ7LAogICAgJiMzNDt2dF92Y3B1X3BpX2xvYWQmIzM0OywKICAgICYjMzQ7dnRfdmNwdV9waV9wdXQmIzM0OywKICAgICYjMzQ7dnRfcGlfc3RhcnRfYnlwYXNzJiMzNDssCiAgICAmIzM0O3Z0X3BpX3VwZGF0ZV9pcnRlJiMzNDssCiAgICAmIzM0O3ZteF9oYW5kbGVfZXhpdCYjMzQ7LAogICAgJiMzNDt2bXhfdmNwdV9ydW4mIzM0OywKICAgICYjMzQ7bmVzdGVkX3ZteF9yZWZsZWN0X3ZtZXhpdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcmVmYWN0b3Jpbmcgb2YgS1ZNIEludGVsIFZNWCBhbmQgVERYIGNvZGUgdG8gY29uc29saWRhdGUgY29tbW9uIHZpcnR1YWxpemF0aW9uIGluZnJhc3RydWN0dXJlIChWVCkgYmV0d2VlbiBzdGFuZGFyZCBWTVggYW5kIFREWCB2Q1BVczpcbjEuIEl0IGRlZmluZXMgYSBjb21tb24gd3JhcHBlciBsYXlvdXQgYHN0cnVjdCB2Y3B1X3ZteF90ZHhgIHdpdGggY29tcGlsZS10aW1lIGFzc2VydGlvbnMgKGBzdGF0aWNfYXNzZXJ0YCkgZW5zdXJpbmcgb2Zmc2V0IG1hdGNoaW5nIG9mIGBzdHJ1Y3QgdmNwdV92dGAgYWNyb3NzIGB2Y3B1X3ZteGAgYW5kIGB2Y3B1X3RkeGAuXG4yLiBJdCBtb3ZlcyBhbmQgcmVuYW1lcyBoZWxwZXIgZnVuY3Rpb25zIChgdG9fdnRgLCBgdnRfZ2V0X2V4aXRfcmVhc29uYCwgYHZ0X2dldF9leGl0X3F1YWxgLCBgdnRfZ2V0X2ludHJfaW5mb2AsIGV0Yy4pIGZyb20gYHZteC5oYC9gdm14LmNgIHRvIGBjb21tb24uaGAvYG1haW4uY2AuXG4zLiBJdCBtb3ZlcyBjb21tb24gZXhpdCBhbmQgaW50ZXJydXB0IGhhbmRsaW5nIGZ1bmN0aW9ucyAoYHZ0X2hhbmRsZV9leGl0X2lycW9mZmAsIGB2dF9oYW5kbGVfbm1pYCwgYGhhbmRsZV9leHRlcm5hbF9pbnRlcnJ1cHRfaXJxb2ZmYCwgZXRjLikgdG8gYG1haW4uY2AuXG40LiBJdCByZW5hbWVzIHBvc3RlZCBpbnRlcnJ1cHQgcm91dGluZXMgdG8gdXNlIHRoZSBgdnRfYCBwcmVmaXggYWNyb3NzIHRoZSBjb2RlYmFzZS5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBleHBvc2UgdW5pbml0aWFsaXplZCBmaWVsZHMgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlLCBvciBhbHRlciBidWZmZXIgYm91bmRzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHN0cnVjdCBsYXlvdXQgb3Igb2Zmc2V0cyBhcmUgZ3VhcmRlZCBhdCBjb21waWxlIHRpbWUgYnkgYHN0YXRpY19hc3NlcnRgIG9yIHdvdWxkIG1hbmlmZXN0IGFzIG1lbW9yeSBjb3JydXB0aW9uL09PQiBhY2Nlc3MgZGV0ZWN0YWJsZSBieSBzdGFuZGFyZCBidWlsZHMgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgS1ZNIEludGVsIChWTVgvVERYKSB2aXJ0dWFsaXphdGlvbiBsb2dpYyBieSBjb25zb2xpZGF0aW5nIGV4aXQgc3RhdHVzIGhhbmRsaW5nLCBleGl0IElSUS1vZmYgcHJvY2Vzc2luZywgcG9zdGVkIGludGVycnVwdCBoZWxwZXJzLCBhbmQgVk1DUyBleGl0IHF1YWxpZmljYXRpb24gYWNjZXNzb3JzIHVuZGVyIGNvbW1vbiB2dF8qIGFic3RyYWN0aW9ucy4gVGhpcyBhZmZlY3RzIGNvcmUgS1ZNIFZNIGV4aXQgaGFuZGxpbmcgYW5kIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiByZWFjaGFibGUgb24gYW1kNjQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MjQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5ZDI1ZjA2YTkzYWFiZTY0ZmJhZDBkZWQ3NGY3MzAwMGY0YTQ3Y2MzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAwOToyNDoyMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oIGIvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaFxuaW5kZXggMDgwMDU2NzY3MDJjMi4uM2U2OGZhMTJhY2E2NSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmhcbkBAIC0yLDEwICYjNDM7MiwxMiBAQFxuICNpZm5kZWYgX19LVk1fWDg2X1ZNWF9DT01NT05fSFxuICNkZWZpbmUgX19LVk1fWDg2X1ZNWF9DT01NT05fSFxuIFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jb250YWluZXJfb2YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bV9ob3N0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcG9zdGVkX2ludHIuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O21tdS5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3ZteF9vcHMuaFwmIzM0O1xuIFxuIHVuaW9uIHZteF9leGl0X3JlYXNvbiB7XG4gXHRzdHJ1Y3Qge1xuQEAgLTc0LDE0ICYjNDM7NzYsNjIgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3RkX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7IHJldHVybiBmYWxzZTsgfVxuIFxuICNlbmRpZlxuIFxuJiM0MztzdHJ1Y3QgdmNwdV92bXhfdGR4IHtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHUgdmNwdTtcbiYjNDM7XHRzdHJ1Y3QgdmNwdV92dCB2dDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IHZjcHVfdnQgKnRvX3Z0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBcdTAwMjYoY29udGFpbmVyX29mKHZjcHUsIHN0cnVjdCB2Y3B1X3ZteF90ZHgsIHZjcHUpLVx1MDAzZXZ0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSBzdHJ1Y3Qga3ZtX3ZjcHUgKnZ0X3RvX3ZjcHUoc3RydWN0IHZjcHVfdnQgKnZ0KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIFx1MDAyNihjb250YWluZXJfb2YodnQsIHN0cnVjdCB2Y3B1X3ZteF90ZHgsIHZ0KS1cdTAwM2V2Y3B1KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB1bmlvbiB2bXhfZXhpdF9yZWFzb24gdnRfZ2V0X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiB0b192dCh2Y3B1KS1cdTAwM2VleGl0X3JlYXNvbjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBsb25nIHZ0X2dldF9leGl0X3F1YWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHZjcHVfdnQgKnZ0ID0gdG9fdnQodmNwdSk7XG4mIzQzO1xuJiM0MztcdGlmICgha3ZtX3JlZ2lzdGVyX3Rlc3RfYW5kX21hcmtfYXZhaWxhYmxlKHZjcHUsIFZDUFVfUkVHX0VYSVRfSU5GT18xKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIVdBUk5fT05fT05DRShpc190ZF92Y3B1KHZjcHUpKSlcbiYjNDM7XHRcdHZ0LVx1MDAzZWV4aXRfcXVhbGlmaWNhdGlvbiA9IHZtY3NfcmVhZGwoRVhJVF9RVUFMSUZJQ0FUSU9OKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHZ0LVx1MDAzZWV4aXRfcXVhbGlmaWNhdGlvbjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdnRfZ2V0X2ludHJfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdmNwdV92dCAqdnQgPSB0b192dCh2Y3B1KTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFrdm1fcmVnaXN0ZXJfdGVzdF9hbmRfbWFya19hdmFpbGFibGUodmNwdSwgVkNQVV9SRUdfRVhJVF9JTkZPXzIpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhV0FSTl9PTl9PTkNFKGlzX3RkX3ZjcHUodmNwdSkpKVxuJiM0MztcdFx0dnQtXHUwMDNlZXhpdF9pbnRyX2luZm8gPSB2bWNzX3JlYWQzMihWTV9FWElUX0lOVFJfSU5GTyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiB2dC1cdTAwM2VleGl0X2ludHJfaW5mbztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGlzX3hmZF9ubV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gdmNwdS1cdTAwM2VhcmNoLmd1ZXN0X2ZwdS5mcHN0YXRlLVx1MDAzZXhmZCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICAgIWt2bV9pc19jcjBfYml0X3NldCh2Y3B1LCBYODZfQ1IwX1RTKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIGJvb2wgdnRfaXNfdGR4X3ByaXZhdGVfZ3BhKHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3QgZ3BhKVxuIHtcbiBcdC8qIEZvciBURFggdGhlIGRpcmVjdCBtYXNrIGlzIHRoZSBzaGFyZWQgbWFzay4gKi9cbiBcdHJldHVybiAha3ZtX2lzX2FkZHJfZGlyZWN0KGt2bSwgZ3BhKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgX192bXhfaGFuZGxlX2VwdF92aW9sYXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsXG4tXHRcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24pXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IF9fdnRfaGFuZGxlX2VwdF92aW9sYXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsXG4mIzQzO1x0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24pXG4ge1xuIFx0dTY0IGVycm9yX2NvZGU7XG4gXG5AQCAtMTY0LDggJiM0MzsyMTQsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3ZjcHVfdHJpZ2dlcl9wb3N0ZWRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiAgKiBQb3N0IGFuIGludGVycnVwdCB0byBhIHZDUFUmIzM5O3MgUElSIGFuZCB0cmlnZ2VyIHRoZSB2Q1BVIHRvIHByb2Nlc3MgdGhlXG4gICogaW50ZXJydXB0IGlmIG5lY2Vzc2FyeS5cbiAgKi9cbi1zdGF0aWMgaW5saW5lIHZvaWQgX192bXhfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi1cdFx0XHRcdFx0XHQgIHN0cnVjdCBwaV9kZXNjICpwaV9kZXNjLCBpbnQgdmVjdG9yKVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgX192dF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuJiM0MztcdFx0XHRcdFx0XHQgc3RydWN0IHBpX2Rlc2MgKnBpX2Rlc2MsIGludCB2ZWN0b3IpXG4ge1xuIFx0aWYgKHBpX3Rlc3RfYW5kX3NldF9waXIodmVjdG9yLCBwaV9kZXNjKSlcbiBcdFx0cmV0dXJuO1xuQEAgLTE4Myw2ICYjNDM7MjMzLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdm14X2RlbGl2ZXJfcG9zdGVkX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRrdm1fdmNwdV90cmlnZ2VyX3Bvc3RlZF9pbnRlcnJ1cHQodmNwdSwgUE9TVEVEX0lOVFJfVkVDVE9SKTtcbiB9XG4gXG4tbm9pbnN0ciB2b2lkIHZteF9oYW5kbGVfbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4mIzQzO25vaW5zdHIgdm9pZCB2dF9oYW5kbGVfbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG4gI2VuZGlmIC8qIF9fS1ZNX1g4Nl9WTVhfQ09NTU9OX0ggKi9cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uYyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXG5pbmRleCA0YzUyYWI4ZDA3ODY5Li42ZTBiMzk1OWQ3M2FiIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXG5AQCAtMSw0ICYjNDM7MSw1IEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZW50cnktY29tbW9uLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGVwYXJhbS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7eDg2X29wcy5oXCYjMzQ7XG5AQCAtMTAsOCAmIzQzOzExLDEyIEBAXG4gI2luY2x1ZGUgXCYjMzQ7dGR4LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt0ZHhfYXJjaC5oXCYjMzQ7XG4gXG4mIzQzOyNwcmFnbWEgR0NDIHBvaXNvbiB0b192bXhcbiYjNDM7XG4mIzQzO3N0YXRpY19hc3NlcnQob2Zmc2V0b2Yoc3RydWN0IHZjcHVfdm14X3RkeCwgdnQpID09IG9mZnNldG9mKHN0cnVjdCB2Y3B1X3ZteCwgdnQpKTtcbiYjNDM7XG4gI2lmZGVmIENPTkZJR19LVk1fSU5URUxfVERYXG4tc3RhdGljX2Fzc2VydChvZmZzZXRvZihzdHJ1Y3QgdmNwdV92bXgsIHZ0KSA9PSBvZmZzZXRvZihzdHJ1Y3QgdmNwdV90ZHgsIHZ0KSk7XG4mIzQzO3N0YXRpY19hc3NlcnQob2Zmc2V0b2Yoc3RydWN0IHZjcHVfdm14X3RkeCwgdnQpID09IG9mZnNldG9mKHN0cnVjdCB2Y3B1X3RkeCwgdnQpKTtcbiBcbiBzdGF0aWMgdm9pZCB2dF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKVxuIHtcbkBAIC04NzYsNiAmIzQzOzg4MSw4NSBAQCBzdGF0aWMgaW50IHZ0X2dtZW1fbWF4X21hcHBpbmdfbGV2ZWwoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLFxuICNkZWZpbmUgdnRfb3BfdGR4X29ubHkobmFtZSkgTlVMTFxuICNlbmRpZiAvKiBDT05GSUdfS1ZNX0lOVEVMX1REWCAqL1xuIFxuJiM0MztzdGF0aWMgdm9pZCBoYW5kbGVfbm1fZmF1bHRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogU2F2ZSB4ZmRfZXJyIHRvIGd1ZXN0X2ZwdSBiZWZvcmUgaW50ZXJydXB0IGlzIGVuYWJsZWQsIHNvIHRoZVxuJiM0MztcdCAqIE1TUiB2YWx1ZSBpcyBub3QgY2xvYmJlcmVkIGJ5IHRoZSBob3N0IGFjdGl2aXR5IGJlZm9yZSB0aGUgZ3Vlc3RcbiYjNDM7XHQgKiBoYXMgY2hhbmNlIHRvIGNvbnN1bWUgaXQuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBVcGRhdGUgdGhlIGd1ZXN0JiMzOTtzIFhGRF9FUlIgaWYgYW5kIG9ubHkgaWYgWEZEIGlzIGVuYWJsZWQsIGFzIHRoZSAjTk1cbiYjNDM7XHQgKiBpbnRlcmNlcHRpb24gbWF5IGhhdmUgYmVlbiBjYXVzZWQgYnkgTDEgaW50ZXJjZXB0aW9uLiAgUGVyIHRoZSBTRE0sXG4mIzQzO1x0ICogWEZEX0VSUiBpcyBub3QgbW9kaWZpZWQgZm9yIG5vbi1YRkQgI05NLCBpLmUuIGlmIENSMC5UUz0xLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogTm90ZSwgWEZEX0VSUiBpcyB1cGRhdGVkIF9iZWZvcmVfIHRoZSAjTk0gaW50ZXJjZXB0aW9uIGNoZWNrLCBpLmUuXG4mIzQzO1x0ICogdW5saWtlIENSMiBhbmQgRFI2LCB0aGUgdmFsdWUgaXMgbm90IGEgcGF5bG9hZCB0aGF0IGlzIGF0dGFjaGVkIHRvXG4mIzQzO1x0ICogdGhlICNOTSBleGNlcHRpb24uXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGlzX3hmZF9ubV9mYXVsdCh2Y3B1KSlcbiYjNDM7XHRcdHJkbXNycShNU1JfSUEzMl9YRkRfRVJSLCB2Y3B1LVx1MDAzZWFyY2guZ3Vlc3RfZnB1LnhmZF9lcnIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBoYW5kbGVfZXhjZXB0aW9uX2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBpbnRyX2luZm8pXG4mIzQzO3tcbiYjNDM7XHQvKiBpZiBleGl0IGR1ZSB0byBQRiBjaGVjayBmb3IgYXN5bmMgUEYgKi9cbiYjNDM7XHRpZiAoaXNfcGFnZV9mYXVsdChpbnRyX2luZm8pKVxuJiM0MztcdFx0dmNwdS1cdTAwM2VhcmNoLmFwZi5ob3N0X2FwZl9mbGFncyA9IGt2bV9yZWFkX2FuZF9yZXNldF9hcGZfZmxhZ3MoKTtcbiYjNDM7XHQvKiBpZiBleGl0IGR1ZSB0byBOTSwgaGFuZGxlIGJlZm9yZSBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkICovXG4mIzQzO1x0ZWxzZSBpZiAoaXNfbm1fZmF1bHQoaW50cl9pbmZvKSlcbiYjNDM7XHRcdGhhbmRsZV9ubV9mYXVsdF9pcnFvZmYodmNwdSk7XG4mIzQzO1x0LyogSGFuZGxlIG1hY2hpbmUgY2hlY2tzIGJlZm9yZSBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkICovXG4mIzQzO1x0ZWxzZSBpZiAoaXNfbWFjaGluZV9jaGVjayhpbnRyX2luZm8pKVxuJiM0MztcdFx0a3ZtX21hY2hpbmVfY2hlY2soKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaGFuZGxlX2V4dGVybmFsX2ludGVycnVwdF9pcnFvZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuJiM0MztcdFx0XHRcdFx0ICAgICB1MzIgaW50cl9pbmZvKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IHZlY3RvciA9IGludHJfaW5mbyBcdTAwMjYgSU5UUl9JTkZPX1ZFQ1RPUl9NQVNLO1xuJiM0MztcbiYjNDM7XHRpZiAoS1ZNX0JVRyghaXNfZXh0ZXJuYWxfaW50cihpbnRyX2luZm8pLCB2Y3B1LVx1MDAzZWt2bSxcbiYjNDM7XHQgICAgXCYjMzQ7dW5leHBlY3RlZCBWTS1FeGl0IGludGVycnVwdCBpbmZvOiAweCV4XCYjMzQ7LCBpbnRyX2luZm8pKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRrdm1fYmVmb3JlX2ludGVycnVwdCh2Y3B1LCBLVk1fSEFORExJTkdfSVJRKTtcbiYjNDM7XHR4ODZfZW50cnlfZnJvbV9rdm0oRVZFTlRfVFlQRV9FWFRJTlQsIHZlY3Rvcik7XG4mIzQzO1x0a3ZtX2FmdGVyX2ludGVycnVwdCh2Y3B1KTtcbiYjNDM7XG4mIzQzO1x0dmNwdS1cdTAwM2VhcmNoLmF0X2luc3RydWN0aW9uX2JvdW5kYXJ5ID0gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdnRfaGFuZGxlX2V4aXRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7e1xuJiM0MztcdGlmICh0b192dCh2Y3B1KS1cdTAwM2VlbXVsYXRpb25fcmVxdWlyZWQpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAodnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljKSB7XG4mIzQzO1x0Y2FzZSBFWElUX1JFQVNPTl9FWFRFUk5BTF9JTlRFUlJVUFQ6XG4mIzQzO1x0XHRoYW5kbGVfZXh0ZXJuYWxfaW50ZXJydXB0X2lycW9mZih2Y3B1LCB2dF9nZXRfaW50cl9pbmZvKHZjcHUpKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgRVhJVF9SRUFTT05fRVhDRVBUSU9OX05NSTpcbiYjNDM7XHRcdGhhbmRsZV9leGNlcHRpb25faXJxb2ZmKHZjcHUsIHZ0X2dldF9pbnRyX2luZm8odmNwdSkpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBFWElUX1JFQVNPTl9NQ0VfRFVSSU5HX1ZNRU5UUlk6XG4mIzQzO1x0XHRrdm1fbWFjaGluZV9jaGVjaygpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7bm9pbnN0ciB2b2lkIHZ0X2hhbmRsZV9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCh1MTYpdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljICE9IEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUkgfHxcbiYjNDM7XHQgICAgIWlzX25taSh2dF9nZXRfaW50cl9pbmZvKHZjcHUpKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0a3ZtX2JlZm9yZV9pbnRlcnJ1cHQodmNwdSwgS1ZNX0hBTkRMSU5HX05NSSk7XG4mIzQzO1x0eDg2X2VudHJ5X2Zyb21fa3ZtKEVWRU5UX1RZUEVfTk1JLCBOTUlfVkVDVE9SKTtcbiYjNDM7XHRrdm1fYWZ0ZXJfaW50ZXJydXB0KHZjcHUpO1xuJiM0Mzt9XG4mIzQzO1xuICNkZWZpbmUgVk1YX1JFUVVJUkVEX0FQSUNWX0lOSElCSVRTXHRcdFx0XHRcXFxuIFx0KEJJVChBUElDVl9JTkhJQklUX1JFQVNPTl9ESVNBQkxFRCkgfFx0XHRcdFxcXG4gXHQgQklUKEFQSUNWX0lOSElCSVRfUkVBU09OX0FCU0VOVCkgfFx0XHRcdFxcXG5AQCAtMTAwMCwxMiAmIzQzOzEwODQsMTIgQEAgc3RydWN0IGt2bV94ODZfb3BzIHZ0X3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcbiBcdC5sb2FkX21tdV9wZ2QgPSB2dF9vcChsb2FkX21tdV9wZ2QpLFxuIFxuIFx0LmNoZWNrX2ludGVyY2VwdCA9IHZteF9jaGVja19pbnRlcmNlcHQsXG4tXHQuaGFuZGxlX2V4aXRfaXJxb2ZmID0gdm14X2hhbmRsZV9leGl0X2lycW9mZixcbiYjNDM7XHQuaGFuZGxlX2V4aXRfaXJxb2ZmID0gdnRfaGFuZGxlX2V4aXRfaXJxb2ZmLFxuIFxuIFx0LnVwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyA9IHZ0X29wKHVwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyksXG4gXG4tXHQucGlfdXBkYXRlX2lydGUgPSB2bXhfcGlfdXBkYXRlX2lydGUsXG4tXHQucGlfc3RhcnRfYnlwYXNzID0gdm14X3BpX3N0YXJ0X2J5cGFzcyxcbiYjNDM7XHQucGlfdXBkYXRlX2lydGUgPSB2dF9waV91cGRhdGVfaXJ0ZSxcbiYjNDM7XHQucGlfc3RhcnRfYnlwYXNzID0gdnRfcGlfc3RhcnRfYnlwYXNzLFxuIFxuICNpZmRlZiBDT05GSUdfWDg2XzY0XG4gXHQuc2V0X2h2X3RpbWVyID0gdnRfb3Aoc2V0X2h2X3RpbWVyKSxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xuaW5kZXggMTUxODczNDA3YWJkMy4uNDc1OTllNzMxMmNmZCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbkBAIC00NDYsNyAmIzQzOzQ0Niw3IEBAIHN0YXRpYyB2b2lkIG5lc3RlZF9lcHRfaW5qZWN0X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHQgKiBcJiMzNDtOTUkgdW5ibG9ja2luZyBkdWUgdG8gSVJFVFwmIzM0OywgaS5lLiB0aGUgYml0IGNhbiBiZSBwcm9wYWdhdGVkXG4gXHRcdCAqIGFzLWlzIGZyb20gdGhlIG9yaWdpbmFsIEVYSVRfUVVBTElGSUNBVElPTi5cbiBcdFx0ICovXG4tXHRcdGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpIFx1MDAyNiBJTlRSX0lORk9fVU5CTE9DS19OTUk7XG4mIzQzO1x0XHRleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpIFx1MDAyNiBJTlRSX0lORk9fVU5CTE9DS19OTUk7XG4gXHR9IGVsc2Uge1xuIFx0XHRpZiAoZmF1bHQtXHUwMDNlZXJyb3JfY29kZSBcdTAwMjYgUEZFUlJfUlNWRF9NQVNLKSB7XG4gXHRcdFx0dm1fZXhpdF9yZWFzb24gPSBFWElUX1JFQVNPTl9FUFRfTUlTQ09ORklHO1xuQEAgLTQ3Miw3ICYjNDM7NDcyLDcgQEAgc3RhdGljIHZvaWQgbmVzdGVkX2VwdF9pbmplY3RfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRcdFx0ICogYW5kIHdhbGtzIHRoZSBmYXVsdGluZyBHUEEuXG4gXHRcdFx0ICovXG4gXHRcdFx0aWYgKGZyb21faGFyZHdhcmUpXG4tXHRcdFx0XHRleGl0X3F1YWxpZmljYXRpb24gfD0gdm14X2dldF9leGl0X3F1YWwodmNwdSkgXHUwMDI2IG1hc2s7XG4mIzQzO1x0XHRcdFx0ZXhpdF9xdWFsaWZpY2F0aW9uIHw9IHZ0X2dldF9leGl0X3F1YWwodmNwdSkgXHUwMDI2IG1hc2s7XG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0ZXhpdF9xdWFsaWZpY2F0aW9uIHw9IGZhdWx0LVx1MDAzZWV4aXRfcXVhbGlmaWNhdGlvbiBcdTAwMjYgbWFzaztcbiBcbkBAIC00NzQ3LDcgJiM0Mzs0NzQ3LDcgQEAgc3RhdGljIHZvaWQgcHJlcGFyZV92bWNzMTIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgdm1jczEyICp2bWNzMTIsXG4ge1xuIFx0LyogdXBkYXRlIGV4aXQgaW5mb3JtYXRpb24gZmllbGRzOiAqL1xuIFx0dm1jczEyLVx1MDAzZXZtX2V4aXRfcmVhc29uID0gdm1fZXhpdF9yZWFzb247XG4tXHRpZiAodm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5lbmNsYXZlX21vZGUpXG4mIzQzO1x0aWYgKHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5lbmNsYXZlX21vZGUpXG4gXHRcdHZtY3MxMi1cdTAwM2V2bV9leGl0X3JlYXNvbiB8PSBWTVhfRVhJVF9SRUFTT05TX1NHWF9FTkNMQVZFX01PREU7XG4gXHR2bWNzMTItXHUwMDNlZXhpdF9xdWFsaWZpY2F0aW9uID0gZXhpdF9xdWFsaWZpY2F0aW9uO1xuIFxuQEAgLTUzNzMsNyAmIzQzOzUzNzMsNyBAQCBzdGF0aWMgaW50IG5lc3RlZF92bXhfZ2V0X3ZtcHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgKnZtcG9pbnRlcixcbiBcdHN0cnVjdCB4ODZfZXhjZXB0aW9uIGU7XG4gXHRpbnQgcjtcbiBcbi1cdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxuJiM0MztcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZ0X2dldF9leGl0X3F1YWwodmNwdSksXG4gXHRcdFx0XHR2bWNzX3JlYWQzMihWTVhfSU5TVFJVQ1RJT05fSU5GTyksIGZhbHNlLFxuIFx0XHRcdFx0c2l6ZW9mKCp2bXBvaW50ZXIpLCBcdTAwMjZndmEpKSB7XG4gXHRcdCpyZXQgPSAxO1xuQEAgLTU2NjUsNyAmIzQzOzU2NjUsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXJlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCB2bWNzMTIgKnZtY3MxMiA9IGlzX2d1ZXN0X21vZGUodmNwdSkgPyBnZXRfc2hhZG93X3ZtY3MxMih2Y3B1KVxuIFx0XHRcdFx0XHRcdCAgICA6IGdldF92bWNzMTIodmNwdSk7XG4tXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdHUzMiBpbnN0cl9pbmZvID0gdm1jc19yZWFkMzIoVk1YX0lOU1RSVUNUSU9OX0lORk8pO1xuIFx0c3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7XG4gXHRzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBlO1xuQEAgLTU3NzEsNyAmIzQzOzU3NzEsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXdyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRzdHJ1Y3Qgdm1jczEyICp2bWNzMTIgPSBpc19ndWVzdF9tb2RlKHZjcHUpID8gZ2V0X3NoYWRvd192bWNzMTIodmNwdSlcbiBcdFx0XHRcdFx0XHQgICAgOiBnZXRfdm1jczEyKHZjcHUpO1xuLVx0dW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXHR1MzIgaW5zdHJfaW5mbyA9IHZtY3NfcmVhZDMyKFZNWF9JTlNUUlVDVElPTl9JTkZPKTtcbiBcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xuIFx0c3RydWN0IHg4Nl9leGNlcHRpb24gZTtcbkBAIC01OTYwLDcgJiM0Mzs1OTYwLDcgQEAgc3RhdGljIGludCBoYW5kbGVfdm1wdHJsZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gLyogRW11bGF0ZSB0aGUgVk1QVFJTVCBpbnN0cnVjdGlvbiAqL1xuIHN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRyc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBleGl0X3F1YWwgPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFx0dTMyIGluc3RyX2luZm8gPSB2bWNzX3JlYWQzMihWTVhfSU5TVFJVQ1RJT05fSU5GTyk7XG4gXHRncGFfdCBjdXJyZW50X3ZtcHRyID0gdG9fdm14KHZjcHUpLVx1MDAzZW5lc3RlZC5jdXJyZW50X3ZtcHRyO1xuIFx0c3RydWN0IHg4Nl9leGNlcHRpb24gZTtcbkBAIC02MDIxLDcgJiM0Mzs2MDIxLDcgQEAgc3RhdGljIGludCBoYW5kbGVfaW52ZXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdC8qIEFjY29yZGluZyB0byB0aGUgSW50ZWwgVk1YIGluc3RydWN0aW9uIHJlZmVyZW5jZSwgdGhlIG1lbW9yeVxuIFx0ICogb3BlcmFuZCBpcyByZWFkIGV2ZW4gaWYgaXQgaXNuJiMzOTt0IG5lZWRlZCAoZS5nLiwgZm9yIHR5cGU9PWdsb2JhbClcbiBcdCAqL1xuLVx0aWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgdm14X2dldF9leGl0X3F1YWwodmNwdSksXG4mIzQzO1x0aWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KSxcbiBcdFx0XHR2bXhfaW5zdHJ1Y3Rpb25faW5mbywgZmFsc2UsIHNpemVvZihvcGVyYW5kKSwgXHUwMDI2Z3ZhKSlcbiBcdFx0cmV0dXJuIDE7XG4gXHRyID0ga3ZtX3JlYWRfZ3Vlc3RfdmlydCh2Y3B1LCBndmEsIFx1MDAyNm9wZXJhbmQsIHNpemVvZihvcGVyYW5kKSwgXHUwMDI2ZSk7XG5AQCAtNjEwNCw3ICYjNDM7NjEwNCw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2ludnZwaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0LyogYWNjb3JkaW5nIHRvIHRoZSBpbnRlbCB2bXggaW5zdHJ1Y3Rpb24gcmVmZXJlbmNlLCB0aGUgbWVtb3J5XG4gXHQgKiBvcGVyYW5kIGlzIHJlYWQgZXZlbiBpZiBpdCBpc24mIzM5O3QgbmVlZGVkIChlLmcuLCBmb3IgdHlwZT09Z2xvYmFsKVxuIFx0ICovXG4tXHRpZiAoZ2V0X3ZteF9tZW1fYWRkcmVzcyh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSxcbiYjNDM7XHRpZiAoZ2V0X3ZteF9tZW1fYWRkcmVzcyh2Y3B1LCB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxuIFx0XHRcdHZteF9pbnN0cnVjdGlvbl9pbmZvLCBmYWxzZSwgc2l6ZW9mKG9wZXJhbmQpLCBcdTAwMjZndmEpKVxuIFx0XHRyZXR1cm4gMTtcbiBcdHIgPSBrdm1fcmVhZF9ndWVzdF92aXJ0KHZjcHUsIGd2YSwgXHUwMDI2b3BlcmFuZCwgc2l6ZW9mKG9wZXJhbmQpLCBcdTAwMjZlKTtcbkBAIC02MjM2LDggJiM0Mzs2MjM2LDggQEAgc3RhdGljIGludCBoYW5kbGVfdm1mdW5jKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdCAqIEVYSVRfUkVBU09OX1ZNRlVOQyBhcyB0aGUgZXhpdCByZWFzb24uXG4gXHQgKi9cbiBcdG5lc3RlZF92bXhfdm1leGl0KHZjcHUsIHZteC1cdTAwM2V2dC5leGl0X3JlYXNvbi5mdWxsLFxuLVx0XHRcdCAgdm14X2dldF9pbnRyX2luZm8odmNwdSksXG4tXHRcdFx0ICB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSk7XG4mIzQzO1x0XHRcdCAgdnRfZ2V0X2ludHJfaW5mbyh2Y3B1KSxcbiYjNDM7XHRcdFx0ICB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpKTtcbiBcdHJldHVybiAxO1xuIH1cbiBcbkBAIC02Mjg4LDcgJiM0Mzs2Mjg4LDcgQEAgc3RhdGljIGJvb2wgbmVzdGVkX3ZteF9leGl0X2hhbmRsZWRfaW8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0aWYgKCFuZXN0ZWRfY3B1X2hhcyh2bWNzMTIsIENQVV9CQVNFRF9VU0VfSU9fQklUTUFQUykpXG4gXHRcdHJldHVybiBuZXN0ZWRfY3B1X2hhcyh2bWNzMTIsIENQVV9CQVNFRF9VTkNPTkRfSU9fRVhJVElORyk7XG4gXG4tXHRleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiYjNDM7XHRleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFxuIFx0cG9ydCA9IGV4aXRfcXVhbGlmaWNhdGlvbiBcdTAwM2VcdTAwM2UgMTY7XG4gXHRzaXplID0gKGV4aXRfcXVhbGlmaWNhdGlvbiBcdTAwMjYgNykgJiM0MzsgMTtcbkBAIC02MzE0LDcgJiM0Mzs2MzE0LDcgQEAgc3RhdGljIGJvb2wgbmVzdGVkX3ZteF9leGl0X2hhbmRsZWRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcbiBcdGlmIChleGl0X3JlYXNvbi5iYXNpYyA9PSBFWElUX1JFQVNPTl9NU1JfUkVBRF9JTU0gfHxcbiBcdCAgICBleGl0X3JlYXNvbi5iYXNpYyA9PSBFWElUX1JFQVNPTl9NU1JfV1JJVEVfSU1NKVxuLVx0XHRtc3JfaW5kZXggPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiYjNDM7XHRcdG1zcl9pbmRleCA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXHRlbHNlXG4gXHRcdG1zcl9pbmRleCA9IGt2bV9lY3hfcmVhZCh2Y3B1KTtcbiBcbkBAIC02MzUwLDcgJiM0Mzs2MzUwLDcgQEAgc3RhdGljIGJvb2wgbmVzdGVkX3ZteF9leGl0X2hhbmRsZWRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBzdGF0aWMgYm9vbCBuZXN0ZWRfdm14X2V4aXRfaGFuZGxlZF9jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRzdHJ1Y3Qgdm1jczEyICp2bWNzMTIpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXHRpbnQgY3IgPSBleGl0X3F1YWxpZmljYXRpb24gXHUwMDI2IDE1O1xuIFx0aW50IHJlZztcbiBcdHVuc2lnbmVkIGxvbmcgdmFsO1xuQEAgLTY0ODQsNyAmIzQzOzY0ODQsNyBAQCBzdGF0aWMgYm9vbCBuZXN0ZWRfdm14X2wwX3dhbnRzX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFxuIFx0c3dpdGNoICgodTE2KWV4aXRfcmVhc29uLmJhc2ljKSB7XG4gXHRjYXNlIEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUk6XG4tXHRcdGludHJfaW5mbyA9IHZteF9nZXRfaW50cl9pbmZvKHZjcHUpO1xuJiM0MztcdFx0aW50cl9pbmZvID0gdnRfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcbiBcdFx0aWYgKGlzX25taShpbnRyX2luZm8pKVxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0XHRlbHNlIGlmIChpc19wYWdlX2ZhdWx0KGludHJfaW5mbykpXG5AQCAtNjU2Nyw3ICYjNDM7NjU2Nyw3IEBAIHN0YXRpYyBib29sIG5lc3RlZF92bXhfbDFfd2FudHNfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXG4gXHRzd2l0Y2ggKCh1MTYpZXhpdF9yZWFzb24uYmFzaWMpIHtcbiBcdGNhc2UgRVhJVF9SRUFTT05fRVhDRVBUSU9OX05NSTpcbi1cdFx0aW50cl9pbmZvID0gdm14X2dldF9pbnRyX2luZm8odmNwdSk7XG4mIzQzO1x0XHRpbnRyX2luZm8gPSB2dF9nZXRfaW50cl9pbmZvKHZjcHUpO1xuIFx0XHRpZiAoaXNfbm1pKGludHJfaW5mbykpXG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHRcdGVsc2UgaWYgKGlzX3BhZ2VfZmF1bHQoaW50cl9pbmZvKSlcbkBAIC02NzM3LDE0ICYjNDM7NjczNywxNCBAQCBib29sIG5lc3RlZF92bXhfcmVmbGVjdF92bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICogbmVlZCB0byBiZSBzeW50aGVzaXplZCBieSBxdWVyeWluZyB0aGUgaW4ta2VybmVsIExBUElDLCBidXQgZXh0ZXJuYWxcbiBcdCAqIGludGVycnVwdHMgYXJlIG5ldmVyIHJlZmxlY3RlZCB0byBMMSBzbyBpdCYjMzk7cyBhIG5vbi1pc3N1ZS5cbiBcdCAqL1xuLVx0ZXhpdF9pbnRyX2luZm8gPSB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcbiYjNDM7XHRleGl0X2ludHJfaW5mbyA9IHZ0X2dldF9pbnRyX2luZm8odmNwdSk7XG4gXHRpZiAoaXNfZXhjZXB0aW9uX3dpdGhfZXJyb3JfY29kZShleGl0X2ludHJfaW5mbykpIHtcbiBcdFx0c3RydWN0IHZtY3MxMiAqdm1jczEyID0gZ2V0X3ZtY3MxMih2Y3B1KTtcbiBcbiBcdFx0dm1jczEyLVx1MDAzZXZtX2V4aXRfaW50cl9lcnJvcl9jb2RlID1cbiBcdFx0XHR2bWNzX3JlYWQzMihWTV9FWElUX0lOVFJfRVJST1JfQ09ERSk7XG4gXHR9XG4tXHRleGl0X3F1YWwgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiYjNDM7XHRleGl0X3F1YWwgPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFxuIHJlZmxlY3Rfdm1leGl0OlxuIFx0bmVzdGVkX3ZteF92bWV4aXQodmNwdSwgZXhpdF9yZWFzb24uZnVsbCwgZXhpdF9pbnRyX2luZm8sIGV4aXRfcXVhbCk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5jIGIvYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5jXG5pbmRleCA0YTZkOWExN2RhMjM4Li4yNjQ0YWRkNTRiNzZiIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmNcbkBAIC0xNCw2ICYjNDM7MTQsOCBAQFxuICNpbmNsdWRlIFwmIzM0O3ZteC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dGR4LmhcJiMzNDtcbiBcbiYjNDM7I3ByYWdtYSBHQ0MgcG9pc29uIHRvX3ZteFxuJiM0MztcbiAvKlxuICAqIE1haW50YWluIGEgcGVyLUNQVSBsaXN0IG9mIHZDUFVzIHRoYXQgbmVlZCB0byBiZSBhd2FrZW5lZCBieSB3YWtldXBfaGFuZGxlcigpXG4gICogd2hlbiBhIFdBS0VVUF9WRUNUT1IgaW50ZXJydXB0ZWQgaXMgcG9zdGVkLiAgdkNQVXMgYXJlIGFkZGVkIHRvIHRoZSBsaXN0IHdoZW5cbkBAIC01NCw3ICYjNDM7NTYsNyBAQCBzdGF0aWMgaW50IHBpX3RyeV9zZXRfY29udHJvbChzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYywgdTY0ICpwb2xkLCB1NjQgbmV3KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXZvaWQgdm14X3ZjcHVfcGlfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4mIzQzO3ZvaWQgdnRfdmNwdV9waV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcbiB7XG4gXHRzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYyA9IHZjcHVfdG9fcGlfZGVzYyh2Y3B1KTtcbiBcdHN0cnVjdCB2Y3B1X3Z0ICp2dCA9IHRvX3Z0KHZjcHUpO1xuQEAgLTE0NCwxMSAmIzQzOzE0NiwxMSBAQCB2b2lkIHZteF92Y3B1X3BpX2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KVxuIFx0XHRwaV9zZXRfb24ocGlfZGVzYyk7XG4gfVxuIFxuLXN0YXRpYyBib29sIHZteF9jYW5fdXNlX3Z0ZF9waShzdHJ1Y3Qga3ZtICprdm0pXG4mIzQzO3N0YXRpYyBib29sIHZ0X2Nhbl91c2VfdnRkX3BpKHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4gXHQvKlxuIFx0ICogTm90ZSwgcmVhZGluZyB0aGUgbnVtYmVyIG9mIHBvc3NpYmxlIGJ5cGFzcyBJUlFzIGNhbiByYWNlIHdpdGggYVxuLVx0ICogYnlwYXNzIElSUSBiZWluZyBhdHRhY2hlZCB0byB0aGUgVk0uICB2bXhfcGlfc3RhcnRfYnlwYXNzKCkgZW5zdXJlc1xuJiM0MztcdCAqIGJ5cGFzcyBJUlEgYmVpbmcgYXR0YWNoZWQgdG8gdGhlIFZNLiAgdnRfcGlfc3RhcnRfYnlwYXNzKCkgZW5zdXJlc1xuIFx0ICogYmxvY2tuZyB2Q1BVcyB3aWxsIHNlZSBhbiBlbGV2YXRlZCBjb3VudCBvciBnZXQgS1ZNX1JFUV9VTkJMT0NLLlxuIFx0ICovXG4gXHRyZXR1cm4gaXJxY2hpcF9pbl9rZXJuZWwoa3ZtKSBcdTAwMjZcdTAwMjYga3ZtX2FyY2hfaGFzX2lycV9ieXBhc3MoKSBcdTAwMjZcdTAwMjZcbkBAIC0yMDYsNyAmIzQzOzIwOCw3IEBAIHN0YXRpYyB2b2lkIHBpX2VuYWJsZV93YWtldXBfaGFuZGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdF9fYXBpY19zZW5kX0lQSV9zZWxmKFBPU1RFRF9JTlRSX1dBS0VVUF9WRUNUT1IpO1xuIH1cbiBcbi1zdGF0aWMgYm9vbCB2bXhfbmVlZHNfcGlfd2FrZXVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7c3RhdGljIGJvb2wgdnRfbmVlZHNfcGlfd2FrZXVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHQvKlxuIFx0ICogVGhlIGRlZmF1bHQgcG9zdGVkIGludGVycnVwdCB2ZWN0b3IgZG9lcyBub3RoaW5nIHdoZW5cbkBAIC0yMTcsMTQgJiM0MzsyMTksMTQgQEAgc3RhdGljIGJvb2wgdm14X25lZWRzX3BpX3dha2V1cChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHQgKiBiYWNrIHRvIHRoZSBwaV93YWtldXBfaGFuZGxlcigpIGZ1bmN0aW9uLlxuIFx0ICovXG4gXHRyZXR1cm4gKHZteF9jYW5fdXNlX2lwaXYodmNwdSkgXHUwMDI2XHUwMDI2ICFpc190ZF92Y3B1KHZjcHUpKSB8fFxuLVx0XHR2bXhfY2FuX3VzZV92dGRfcGkodmNwdS1cdTAwM2Vrdm0pO1xuJiM0MztcdFx0dnRfY2FuX3VzZV92dGRfcGkodmNwdS1cdTAwM2Vrdm0pO1xuIH1cbiBcbi12b2lkIHZteF92Y3B1X3BpX3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3ZvaWQgdnRfdmNwdV9waV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCBwaV9kZXNjICpwaV9kZXNjID0gdmNwdV90b19waV9kZXNjKHZjcHUpO1xuIFxuLVx0aWYgKCF2bXhfbmVlZHNfcGlfd2FrZXVwKHZjcHUpKVxuJiM0MztcdGlmICghdnRfbmVlZHNfcGlfd2FrZXVwKHZjcHUpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHQvKlxuQEAgLTI5MiwxNyAmIzQzOzI5NCwxNyBAQCBib29sIHBpX2hhc19wZW5kaW5nX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gLypcbiAgKiBLaWNrIGFsbCB2Q1BVcyB3aGVuIHRoZSBmaXJzdCBwb3NzaWJsZSBieXBhc3MgSVJRIGlzIGF0dGFjaGVkIHRvIGEgVk0sIGFzXG4gICogYmxvY2tpbmcgdkNQVXMgbWF5IHNjaGVkdWxlZCBvdXQgd2l0aG91dCByZWNvbmZpZ3VyaW5nIFBJRC5OViB0byB0aGUgd2FrZXVwXG4tICogdmVjdG9yLCBpLmUuIGlmIHRoZSBieXBhc3MgSVJRIGNhbWUgYWxvbmcgYWZ0ZXIgdm14X3ZjcHVfcGlfcHV0KCkuXG4mIzQzOyAqIHZlY3RvciwgaS5lLiBpZiB0aGUgYnlwYXNzIElSUSBjYW1lIGFsb25nIGFmdGVyIHZ0X3ZjcHVfcGlfcHV0KCkuXG4gICovXG4tdm9pZCB2bXhfcGlfc3RhcnRfYnlwYXNzKHN0cnVjdCBrdm0gKmt2bSlcbiYjNDM7dm9pZCB2dF9waV9zdGFydF9ieXBhc3Moc3RydWN0IGt2bSAqa3ZtKVxuIHtcbi1cdGlmIChXQVJOX09OX09OQ0UoIXZteF9jYW5fdXNlX3Z0ZF9waShrdm0pKSlcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKCF2dF9jYW5fdXNlX3Z0ZF9waShrdm0pKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0a3ZtX21ha2VfYWxsX2NwdXNfcmVxdWVzdChrdm0sIEtWTV9SRVFfVU5CTE9DSyk7XG4gfVxuIFxuLWludCB2bXhfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sXG4mIzQzO2ludCB2dF9waV91cGRhdGVfaXJ0ZShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQsIHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0ICAgICAgIHVuc2lnbmVkIGludCBob3N0X2lycSwgdWludDMyX3QgZ3Vlc3RfaXJxLFxuIFx0XHQgICAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdmVjdG9yKVxuIHtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmggYi9hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmhcbmluZGV4IGE0YWYzOTk0OGNmMDQuLmM1ODYwZWE4MjhhZTkgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuaFxuQEAgLTgsMTYgJiM0Mzs4LDE2IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3Bvc3RlZF9pbnRyLmhcdTAwM2VcbiBcbi12b2lkIHZteF92Y3B1X3BpX2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTtcbi12b2lkIHZteF92Y3B1X3BpX3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuJiM0Mzt2b2lkIHZ0X3ZjcHVfcGlfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpO1xuJiM0Mzt2b2lkIHZ0X3ZjcHVfcGlfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCBwaV93YWtldXBfaGFuZGxlcih2b2lkKTtcbiB2b2lkIF9faW5pdCBwaV9pbml0X2NwdShpbnQgY3B1KTtcbiB2b2lkIHBpX2FwaWN2X3ByZV9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gYm9vbCBwaV9oYXNfcGVuZGluZ19pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbi1pbnQgdm14X3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLFxuJiM0MztpbnQgdnRfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdCAgICAgICB1bnNpZ25lZCBpbnQgaG9zdF9pcnEsIHVpbnQzMl90IGd1ZXN0X2lycSxcbiBcdFx0ICAgICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZlY3Rvcik7XG4tdm9pZCB2bXhfcGlfc3RhcnRfYnlwYXNzKHN0cnVjdCBrdm0gKmt2bSk7XG4mIzQzO3ZvaWQgdnRfcGlfc3RhcnRfYnlwYXNzKHN0cnVjdCBrdm0gKmt2bSk7XG4gXG4gc3RhdGljIGlubGluZSBpbnQgcGlfZmluZF9oaWdoZXN0X3ZlY3RvcihzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYylcbiB7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbmluZGV4IGIyNzJjMjA1ODZhNzQuLmVmYmIxYWM2ZjUxZWEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG5AQCAtNzE2LDcgJiM0Mzs3MTYsNyBAQCB2b2lkIHRkeF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3RkeCAqdGR4ID0gdG9fdGR4KHZjcHUpO1xuIFxuLVx0dm14X3ZjcHVfcGlfbG9hZCh2Y3B1LCBjcHUpO1xuJiM0MztcdHZ0X3ZjcHVfcGlfbG9hZCh2Y3B1LCBjcHUpO1xuIFx0aWYgKHZjcHUtXHUwMDNlY3B1ID09IGNwdSB8fCAhaXNfaGtpZF9hc3NpZ25lZCh0b19rdm1fdGR4KHZjcHUtXHUwMDNla3ZtKSkpXG4gXHRcdHJldHVybjtcbiBcbkBAIC03NDEsNyAmIzQzOzc0MSw3IEBAIGJvb2wgdGR4X2ludGVycnVwdF9hbGxvd2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdCAqIGludGVycnVwdCBpcyBhbHdheXMgYWxsb3dlZCB1bmxlc3MgVERYIGd1ZXN0IGNhbGxzIFREVk1DQUxMIHdpdGggSExULFxuIFx0ICogd2hpY2ggcGFzc2VzIHRoZSBpbnRlcnJ1cHQgYmxvY2tlZCBmbGFnLlxuIFx0ICovXG4tXHRyZXR1cm4gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYyAhPSBFWElUX1JFQVNPTl9ITFQgfHxcbiYjNDM7XHRyZXR1cm4gdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljICE9IEVYSVRfUkVBU09OX0hMVCB8fFxuIFx0ICAgICAgICF0b190ZHgodmNwdSktXHUwMDNldnBfZW50ZXJfYXJncy5yMTI7XG4gfVxuIFxuQEAgLTc1OSw3ICYjNDM7NzU5LDcgQEAgc3RhdGljIGJvb2wgdGR4X3Byb3RlY3RlZF9hcGljX2hhc19pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICogb3RoZXJ3aXNlIHRoZSBpbnRlcnJ1cHQgd291bGQgaGF2ZSBiZWVuIHNlcnZpY2VkIGF0IHRoZSBpbnN0cnVjdGlvblxuIFx0ICogYm91bmRhcnkuXG4gXHQgKi9cbi1cdGlmICh2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljICE9IEVYSVRfUkVBU09OX0hMVCB8fFxuJiM0MztcdGlmICh2dF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMgIT0gRVhJVF9SRUFTT05fSExUIHx8XG4gXHQgICAgdG9fdGR4KHZjcHUpLVx1MDAzZXZwX2VudGVyX2FyZ3MucjEyKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG5AQCAtODI2LDcgJiM0Mzs4MjYsNyBAQCBzdGF0aWMgdm9pZCB0ZHhfcHJlcGFyZV9zd2l0Y2hfdG9faG9zdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gdm9pZCB0ZHhfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHZteF92Y3B1X3BpX3B1dCh2Y3B1KTtcbiYjNDM7XHR2dF92Y3B1X3BpX3B1dCh2Y3B1KTtcbiBcdHRkeF9wcmVwYXJlX3N3aXRjaF90b19ob3N0KHZjcHUpO1xuIH1cbiBcbkBAIC05NzQsMTUgJiM0Mzs5NzQsMTUgQEAgc3RhdGljIG5vaW5zdHIgdm9pZCB0ZHhfdmNwdV9lbnRlcl9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHRkeC1cdTAwM2VleGl0X2dwYSA9IHRkeC1cdTAwM2V2cF9lbnRlcl9hcmdzLnI4O1xuIFx0dnQtXHUwMDNlZXhpdF9pbnRyX2luZm8gPSB0ZHgtXHUwMDNldnBfZW50ZXJfYXJncy5yOTtcbiBcbi1cdHZteF9oYW5kbGVfbm1pKHZjcHUpO1xuJiM0MztcdHZ0X2hhbmRsZV9ubWkodmNwdSk7XG4gXG4gXHRndWVzdF9zdGF0ZV9leGl0X2lycW9mZigpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCB0ZHhfZmFpbGVkX3ZtZW50cnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHJldHVybiB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5IFx1MDAyNlx1MDAyNlxuLVx0ICAgICAgIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZnVsbCAhPSAtMXU7XG4mIzQzO1x0cmV0dXJuIHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mYWlsZWRfdm1lbnRyeSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICAgdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZ1bGwgIT0gLTF1O1xuIH1cbiBcbiBzdGF0aWMgZmFzdHBhdGhfdCB0ZHhfZXhpdF9oYW5kbGVyc19mYXN0cGF0aChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5AQCAtMTEzMSw3ICYjNDM7MTEzMSw3IEBAIHZvaWQgdGR4X2luamVjdF9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIHN0YXRpYyBpbnQgdGR4X2hhbmRsZV9leGNlcHRpb25fbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHR1MzIgaW50cl9pbmZvID0gdm14X2dldF9pbnRyX2luZm8odmNwdSk7XG4mIzQzO1x0dTMyIGludHJfaW5mbyA9IHZ0X2dldF9pbnRyX2luZm8odmNwdSk7XG4gXG4gXHQvKlxuIFx0ICogTWFjaGluZSBjaGVja3MgYXJlIGhhbmRsZWQgYnkgaGFuZGxlX2V4Y2VwdGlvbl9pcnFvZmYoKSwgb3IgYnlcbkBAIC0xODk1LDcgJiM0MzsxODk1LDcgQEAgdm9pZCB0ZHhfZGVsaXZlcl9pbnRlcnJ1cHQoc3RydWN0IGt2bV9sYXBpYyAqYXBpYywgaW50IGRlbGl2ZXJ5X21vZGUsXG4gXHRzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTtcbiBcbiBcdC8qIFREWCBzdXBwb3J0cyBvbmx5IHBvc3RlZCBpbnRlcnJ1cHQuICBObyBsYXBpYyBlbXVsYXRpb24uICovXG4tXHRfX3ZteF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHQodmNwdSwgXHUwMDI2dGR4LVx1MDAzZXZ0LnBpX2Rlc2MsIHZlY3Rvcik7XG4mIzQzO1x0X192dF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHQodmNwdSwgXHUwMDI2dGR4LVx1MDAzZXZ0LnBpX2Rlc2MsIHZlY3Rvcik7XG4gXG4gXHR0cmFjZV9rdm1fYXBpY3ZfYWNjZXB0X2lycSh2Y3B1LVx1MDAzZXZjcHVfaWQsIGRlbGl2ZXJ5X21vZGUsIHRyaWdfbW9kZSwgdmVjdG9yKTtcbiB9XG5AQCAtMTkwMyw3ICYjNDM7MTkwMyw3IEBAIHZvaWQgdGR4X2RlbGl2ZXJfaW50ZXJydXB0KHN0cnVjdCBrdm1fbGFwaWMgKmFwaWMsIGludCBkZWxpdmVyeV9tb2RlLFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB0ZHhfaXNfc2VwdF92aW9sYXRpb25fdW5leHBlY3RlZF9wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHR1NjQgZWVxX3R5cGUgPSB0b190ZHgodmNwdSktXHUwMDNlZXh0X2V4aXRfcXVhbGlmaWNhdGlvbiBcdTAwMjYgVERYX0VYVF9FWElUX1FVQUxfVFlQRV9NQVNLO1xuLVx0dTY0IGVxID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4mIzQzO1x0dTY0IGVxID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcbiBcdGlmIChlZXFfdHlwZSAhPSBURFhfRVhUX0VYSVRfUVVBTF9UWVBFX1BFTkRJTkdfRVBUX1ZJT0xBVElPTilcbiBcdFx0cmV0dXJuIGZhbHNlO1xuQEAgLTE5MzksNyAmIzQzOzE5MzksNyBAQCBzdGF0aWMgaW50IHRkeF9oYW5kbGVfZXB0X3Zpb2xhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdC8qIE9ubHkgcHJpdmF0ZSBHUEEgdHJpZ2dlcnMgemVyby1zdGVwIG1pdGlnYXRpb24gKi9cbiBcdFx0bG9jYWxfcmV0cnkgPSB0cnVlO1xuIFx0fSBlbHNlIHtcbi1cdFx0ZXhpdF9xdWFsID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4mIzQzO1x0XHRleGl0X3F1YWwgPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFx0XHQvKlxuIFx0XHQgKiBFUFQgdmlvbGF0aW9uIGR1ZSB0byBpbnN0cnVjdGlvbiBmZXRjaCBzaG91bGQgbmV2ZXIgYmVcbiBcdFx0ICogdHJpZ2dlcmVkIGZyb20gc2hhcmVkIG1lbW9yeSBpbiBURFggZ3Vlc3QuICBJZiBzdWNoIEVQVFxuQEAgLTE5ODcsNyAmIzQzOzE5ODcsNyBAQCBzdGF0aWMgaW50IHRkeF9oYW5kbGVfZXB0X3Zpb2xhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHR3aGlsZSAoMSkge1xuIFx0XHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90O1xuIFxuLVx0XHRyZXQgPSBfX3ZteF9oYW5kbGVfZXB0X3Zpb2xhdGlvbih2Y3B1LCBncGEsIGV4aXRfcXVhbCk7XG4mIzQzO1x0XHRyZXQgPSBfX3Z0X2hhbmRsZV9lcHRfdmlvbGF0aW9uKHZjcHUsIGdwYSwgZXhpdF9xdWFsKTtcbiBcbiBcdFx0aWYgKHJldCAhPSBSRVRfUEZfUkVUUlkgfHwgIWxvY2FsX3JldHJ5KVxuIFx0XHRcdGJyZWFrO1xuQEAgLTIwMjEsNyAmIzQzOzIwMjEsNyBAQCBpbnQgdGR4X2NvbXBsZXRlX2VtdWxhdGVkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlcnIpXG4gXHRcdHJldHVybiAxO1xuIFx0fVxuIFxuLVx0aWYgKHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMgPT0gRVhJVF9SRUFTT05fTVNSX1JFQUQpXG4mIzQzO1x0aWYgKHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYyA9PSBFWElUX1JFQVNPTl9NU1JfUkVBRClcbiBcdFx0dGR2bWNhbGxfc2V0X3JldHVybl92YWwodmNwdSwga3ZtX3JlYWRfZWR4X2VheCh2Y3B1KSk7XG4gXG4gXHRyZXR1cm4gMTtcbkBAIC0yMDMyLDcgJiM0MzsyMDMyLDcgQEAgaW50IHRkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZmFzdHBhdGgpXG4ge1xuIFx0c3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7XG4gXHR1NjQgdnBfZW50ZXJfcmV0ID0gdGR4LVx1MDAzZXZwX2VudGVyX3JldDtcbi1cdHVuaW9uIHZteF9leGl0X3JlYXNvbiBleGl0X3JlYXNvbiA9IHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSk7XG4mIzQzO1x0dW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uID0gdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpO1xuIFxuIFx0aWYgKGZhc3RwYXRoICE9IEVYSVRfRkFTVFBBVEhfTk9ORSlcbiBcdFx0cmV0dXJuIDE7XG5AQCAtMjE0Miw5ICYjNDM7MjE0Miw5IEBAIHZvaWQgdGR4X2dldF9leGl0X2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgKnJlYXNvbixcbiBcbiBcdCpyZWFzb24gPSB0ZHgtXHUwMDNldnQuZXhpdF9yZWFzb24uZnVsbDtcbiBcdGlmICgqcmVhc29uICE9IC0xdSkge1xuLVx0XHQqaW5mbzEgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiYjNDM7XHRcdCppbmZvMSA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXHRcdCppbmZvMiA9IHRkeC1cdTAwM2VleHRfZXhpdF9xdWFsaWZpY2F0aW9uO1xuLVx0XHQqaW50cl9pbmZvID0gdm14X2dldF9pbnRyX2luZm8odmNwdSk7XG4mIzQzO1x0XHQqaW50cl9pbmZvID0gdnRfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcbiBcdH0gZWxzZSB7XG4gXHRcdCppbmZvMSA9IDA7XG4gXHRcdCppbmZvMiA9IDA7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguYyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbmluZGV4IDUwNDYzMGYwZWI0MGYuLjdlMzVjMmQwM2M2OWUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG5AQCAtMTU3NywxMiAmIzQzOzE1NzcsMTIgQEAgdm9pZCB2bXhfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcbiBcbiBcdHZteF92Y3B1X2xvYWRfdm1jcyh2Y3B1LCBjcHUpO1xuIFxuLVx0dm14X3ZjcHVfcGlfbG9hZCh2Y3B1LCBjcHUpO1xuJiM0MztcdHZ0X3ZjcHVfcGlfbG9hZCh2Y3B1LCBjcHUpO1xuIH1cbiBcbiB2b2lkIHZteF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0dm14X3ZjcHVfcGlfcHV0KHZjcHUpO1xuJiM0MztcdHZ0X3ZjcHVfcGlfcHV0KHZjcHUpO1xuIFxuIFx0dm14X3ByZXBhcmVfc3dpdGNoX3RvX2hvc3QodG9fdm14KHZjcHUpKTtcbiB9XG5AQCAtMTc5MSw3ICYjNDM7MTc5MSw3IEBAIGludCB2bXhfY2hlY2tfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlbXVsX3R5cGUsXG4gXHQgKiBzbyB0aGF0IGd1ZXN0IHVzZXJzcGFjZSBjYW4mIzM5O3QgRG9TIHRoZSBndWVzdCBzaW1wbHkgYnkgdHJpZ2dlcmluZ1xuIFx0ICogZW11bGF0aW9uIChlbmNsYXZlcyBhcmUgQ1BMMyBvbmx5KS5cbiBcdCAqL1xuLVx0aWYgKHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZW5jbGF2ZV9tb2RlKSB7XG4mIzQzO1x0aWYgKHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5lbmNsYXZlX21vZGUpIHtcbiBcdFx0a3ZtX3F1ZXVlX2V4Y2VwdGlvbih2Y3B1LCBVRF9WRUNUT1IpO1xuIFx0XHRyZXR1cm4gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQ7XG4gXHR9XG5AQCAtMTgwNiw3ICYjNDM7MTgwNiw3IEBAIGludCB2bXhfY2hlY2tfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlbXVsX3R5cGUsXG4gXG4gc3RhdGljIGludCBza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHR1bmlvbiB2bXhfZXhpdF9yZWFzb24gZXhpdF9yZWFzb24gPSB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpO1xuJiM0MztcdHVuaW9uIHZteF9leGl0X3JlYXNvbiBleGl0X3JlYXNvbiA9IHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KTtcbiBcdHVuc2lnbmVkIGxvbmcgcmlwLCBvcmlnX3JpcDtcbiBcdHUzMiBpbnN0cl9sZW47XG4gXG5AQCAtNDQyNCw3ICYjNDM7NDQyNCw3IEBAIHN0YXRpYyBpbnQgdm14X2RlbGl2ZXJfcG9zdGVkX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCB2ZWN0b3IpXG4gXHRpZiAoIXZjcHUtXHUwMDNlYXJjaC5hcGljLVx1MDAzZWFwaWN2X2FjdGl2ZSlcbiBcdFx0cmV0dXJuIC0xO1xuIFxuLVx0X192bXhfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0KHZjcHUsIFx1MDAyNnZ0LVx1MDAzZXBpX2Rlc2MsIHZlY3Rvcik7XG4mIzQzO1x0X192dF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHQodmNwdSwgXHUwMDI2dnQtXHUwMDNlcGlfZGVzYywgdmVjdG9yKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC01Mzc5LDE1ICYjNDM7NTM3OSw5IEBAIGJvb2wgdm14X2d1ZXN0X2luamVjdF9hYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHQgICAgICAgKGt2bV9nZXRfcmZsYWdzKHZjcHUpIFx1MDAyNiBYODZfRUZMQUdTX0FDKTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgaXNfeGZkX25tX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi17XG4tXHRyZXR1cm4gdmNwdS1cdTAwM2VhcmNoLmd1ZXN0X2ZwdS5mcHN0YXRlLVx1MDAzZXhmZCBcdTAwMjZcdTAwMjZcbi1cdCAgICAgICAha3ZtX2lzX2NyMF9iaXRfc2V0KHZjcHUsIFg4Nl9DUjBfVFMpO1xuLX1cbi1cbiBzdGF0aWMgaW50IHZteF9oYW5kbGVfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBlcnJvcl9jb2RlKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgY3IyID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBjcjIgPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFxuIFx0aWYgKHZjcHUtXHUwMDNlYXJjaC5hcGYuaG9zdF9hcGZfZmxhZ3MpXG4gXHRcdGdvdG8gaGFuZGxlX3BmO1xuQEAgLTU0MzUsNyAmIzQzOzU0MjksNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9leGNlcHRpb25fbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHUzMiB2ZWN0X2luZm87XG4gXG4gXHR2ZWN0X2luZm8gPSB2bXgtXHUwMDNlaWR0X3ZlY3RvcmluZ19pbmZvO1xuLVx0aW50cl9pbmZvID0gdm14X2dldF9pbnRyX2luZm8odmNwdSk7XG4mIzQzO1x0aW50cl9pbmZvID0gdnRfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcbiBcbiBcdC8qXG4gXHQgKiBNYWNoaW5lIGNoZWNrcyBhcmUgaGFuZGxlZCBieSBoYW5kbGVfZXhjZXB0aW9uX2lycW9mZigpLCBvciBieVxuQEAgLTU1MTYsNyAmIzQzOzU1MTAsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9leGNlcHRpb25fbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBcdHN3aXRjaCAoZXhfbm8pIHtcbiBcdGNhc2UgREJfVkVDVE9SOlxuLVx0XHRkcjYgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiYjNDM7XHRcdGRyNiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXHRcdGlmICghKHZjcHUtXHUwMDNlZ3Vlc3RfZGVidWcgXHUwMDI2XG4gXHRcdCAgICAgIChLVk1fR1VFU1REQkdfU0lOR0xFU1RFUCB8IEtWTV9HVUVTVERCR19VU0VfSFdfQlApKSkge1xuIFx0XHRcdC8qXG5AQCAtNTU5Miw3ICYjNDM7NTU4Niw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2lvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGludCBzaXplLCBpbiwgc3RyaW5nO1xuIFx0dW5zaWduZWQgcG9ydDtcbiBcbi1cdGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuJiM0MztcdGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXHRzdHJpbmcgPSAoZXhpdF9xdWFsaWZpY2F0aW9uIFx1MDAyNiAxNikgIT0gMDtcbiBcbiBcdCYjNDM7JiM0Mzt2Y3B1LVx1MDAzZXN0YXQuaW9fZXhpdHM7XG5AQCAtNTY4MSw3ICYjNDM7NTY3NSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGludCBlcnI7XG4gXHRpbnQgcmV0O1xuIFxuLVx0ZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4mIzQzO1x0ZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdGNyID0gZXhpdF9xdWFsaWZpY2F0aW9uIFx1MDAyNiAxNTtcbiBcdHJlZyA9IChleGl0X3F1YWxpZmljYXRpb24gXHUwMDNlXHUwMDNlIDgpIFx1MDAyNiAxNTtcbiBcdHN3aXRjaCAoKGV4aXRfcXVhbGlmaWNhdGlvbiBcdTAwM2VcdTAwM2UgNCkgXHUwMDI2IDMpIHtcbkBAIC01NzU5LDcgJiM0Mzs1NzUzLDcgQEAgc3RhdGljIGludCBoYW5kbGVfZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aW50IGRyLCBkcjcsIHJlZztcbiBcdGludCBlcnIgPSAxO1xuIFxuLVx0ZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4mIzQzO1x0ZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdGRyID0gZXhpdF9xdWFsaWZpY2F0aW9uIFx1MDAyNiBERUJVR19SRUdfQUNDRVNTX05VTTtcbiBcbiBcdC8qIEZpcnN0LCBpZiBEUiBkb2VzIG5vdCBleGlzdCwgdHJpZ2dlciBVRCAqL1xuQEAgLTU4NTUsNyAmIzQzOzU4NDksNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9pbnRlcnJ1cHRfd2luZG93KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBzdGF0aWMgaW50IGhhbmRsZV9pbnZscGcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFxuIFx0a3ZtX21tdV9pbnZscGcodmNwdSwgZXhpdF9xdWFsaWZpY2F0aW9uKTtcbiBcdHJldHVybiBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTtcbkBAIC01ODY0LDcgJiM0Mzs1ODU4LDcgQEAgc3RhdGljIGludCBoYW5kbGVfaW52bHBnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBzdGF0aWMgaW50IGhhbmRsZV9hcGljX2FjY2VzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0aWYgKGxpa2VseShmYXN0ZW9pKSkge1xuLVx0XHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFx0XHRpbnQgYWNjZXNzX3R5cGUsIG9mZnNldDtcbiBcbiBcdFx0YWNjZXNzX3R5cGUgPSBleGl0X3F1YWxpZmljYXRpb24gXHUwMDI2IEFQSUNfQUNDRVNTX1RZUEU7XG5AQCAtNTg4NSw3ICYjNDM7NTg3OSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2FwaWNfYWNjZXNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBzdGF0aWMgaW50IGhhbmRsZV9hcGljX2VvaV9pbmR1Y2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdGludCB2ZWN0b3IgPSBleGl0X3F1YWxpZmljYXRpb24gXHUwMDI2IDB4ZmY7XG4gXG4gXHQvKiBFT0ktaW5kdWNlZCBWTSBleGl0IGlzIHRyYXAtbGlrZSBhbmQgdGh1cyBubyBuZWVkIHRvIGFkanVzdCBJUCAqL1xuQEAgLTU4OTUsNyAmIzQzOzU4ODksNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9hcGljX2VvaV9pbmR1Y2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBzdGF0aWMgaW50IGhhbmRsZV9hcGljX3dyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcbiBcdC8qXG4gXHQgKiBBUElDLXdyaXRlIFZNLUV4aXQgaXMgdHJhcC1saWtlLCBLVk0gZG9lc24mIzM5O3QgbmVlZCB0byBhZHZhbmNlIFJJUCBhbmRcbkBAIC01OTIzLDcgJiM0Mzs1OTE3LDcgQEAgc3RhdGljIGludCBoYW5kbGVfdGFza19zd2l0Y2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWR0X2luZGV4ID0gKHZteC1cdTAwM2VpZHRfdmVjdG9yaW5nX2luZm8gXHUwMDI2IFZFQ1RPUklOR19JTkZPX1ZFQ1RPUl9NQVNLKTtcbiBcdHR5cGUgPSAodm14LVx1MDAzZWlkdF92ZWN0b3JpbmdfaW5mbyBcdTAwMjYgVkVDVE9SSU5HX0lORk9fVFlQRV9NQVNLKTtcbiBcbi1cdGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuJiM0MztcdGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXG4gXHRyZWFzb24gPSAodTMyKWV4aXRfcXVhbGlmaWNhdGlvbiBcdTAwM2VcdTAwM2UgMzA7XG4gXHRpZiAocmVhc29uID09IFRBU0tfU1dJVENIX0dBVEUgXHUwMDI2XHUwMDI2IGlkdF92KSB7XG5AQCAtNTk2OSw3ICYjNDM7NTk2Myw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3Rhc2tfc3dpdGNoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBzdGF0aWMgaW50IGhhbmRsZV9lcHRfdmlvbGF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdGdwYV90IGdwYTtcbiBcbiBcdC8qXG5AQCAtNTk5Nyw3ICYjNDM7NTk5MSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2VwdF92aW9sYXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKHVubGlrZWx5KGFsbG93X3NtYWxsZXJfbWF4cGh5YWRkciBcdTAwMjZcdTAwMjYgIWt2bV92Y3B1X2lzX2xlZ2FsX2dwYSh2Y3B1LCBncGEpKSlcbiBcdFx0cmV0dXJuIGt2bV9lbXVsYXRlX2luc3RydWN0aW9uKHZjcHUsIDApO1xuIFxuLVx0cmV0dXJuIF9fdm14X2hhbmRsZV9lcHRfdmlvbGF0aW9uKHZjcHUsIGdwYSwgZXhpdF9xdWFsaWZpY2F0aW9uKTtcbiYjNDM7XHRyZXR1cm4gX192dF9oYW5kbGVfZXB0X3Zpb2xhdGlvbih2Y3B1LCBncGEsIGV4aXRfcXVhbGlmaWNhdGlvbik7XG4gfVxuIFxuIHN0YXRpYyBpbnQgaGFuZGxlX2VwdF9taXNjb25maWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuQEAgLTYxNjAsNyAmIzQzOzYxNTQsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9pbnZwY2lkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdC8qIEFjY29yZGluZyB0byB0aGUgSW50ZWwgaW5zdHJ1Y3Rpb24gcmVmZXJlbmNlLCB0aGUgbWVtb3J5IG9wZXJhbmRcbiBcdCAqIGlzIHJlYWQgZXZlbiBpZiBpdCBpc24mIzM5O3QgbmVlZGVkIChlLmcuLCBmb3IgdHlwZT09YWxsKVxuIFx0ICovXG4tXHRpZiAoZ2V0X3ZteF9tZW1fYWRkcmVzcyh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSxcbiYjNDM7XHRpZiAoZ2V0X3ZteF9tZW1fYWRkcmVzcyh2Y3B1LCB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxuIFx0XHRcdFx0dm14X2luc3RydWN0aW9uX2luZm8sIGZhbHNlLFxuIFx0XHRcdFx0c2l6ZW9mKG9wZXJhbmQpLCBcdTAwMjZndmEpKVxuIFx0XHRyZXR1cm4gMTtcbkBAIC02MTc0LDcgJiM0Mzs2MTY4LDcgQEAgc3RhdGljIGludCBoYW5kbGVfcG1sX2Z1bGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIFx0dHJhY2Vfa3ZtX3BtbF9mdWxsKHZjcHUtXHUwMDNldmNwdV9pZCk7XG4gXG4tXHRleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiYjNDM7XHRleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFxuIFx0LypcbiBcdCAqIFBNTCBidWZmZXIgRlVMTCBoYXBwZW5lZCB3aGlsZSBleGVjdXRpbmcgaXJldCBmcm9tIE5NSSxcbkBAIC02Mjc4LDcgJiM0Mzs2MjcyLDcgQEAgc3RhdGljIGludCBoYW5kbGVfYnVzX2xvY2tfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBzdGF0aWMgaW50IGhhbmRsZV9ub3RpZnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBleGl0X3F1YWwgPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFx0Ym9vbCBjb250ZXh0X2ludmFsaWQgPSBleGl0X3F1YWwgXHUwMDI2IE5PVElGWV9WTV9DT05URVhUX0lOVkFMSUQ7XG4gXG4gXHQmIzQzOyYjNDM7dmNwdS1cdTAwM2VzdGF0Lm5vdGlmeV93aW5kb3dfZXhpdHM7XG5AQCAtNjMwOSwxMyAmIzQzOzYzMDMsMTMgQEAgc3RhdGljIGludCB2bXhfZ2V0X21zcl9pbW1fcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBzdGF0aWMgaW50IGhhbmRsZV9yZG1zcl9pbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHJldHVybiBrdm1fZW11bGF0ZV9yZG1zcl9pbW0odmNwdSwgdm14X2dldF9leGl0X3F1YWwodmNwdSksXG4mIzQzO1x0cmV0dXJuIGt2bV9lbXVsYXRlX3JkbXNyX2ltbSh2Y3B1LCB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxuIFx0XHRcdFx0ICAgICB2bXhfZ2V0X21zcl9pbW1fcmVnKHZjcHUpKTtcbiB9XG4gXG4gc3RhdGljIGludCBoYW5kbGVfd3Jtc3JfaW1tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRyZXR1cm4ga3ZtX2VtdWxhdGVfd3Jtc3JfaW1tKHZjcHUsIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxuJiM0MztcdHJldHVybiBrdm1fZW11bGF0ZV93cm1zcl9pbW0odmNwdSwgdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KSxcbiBcdFx0XHRcdCAgICAgdm14X2dldF9tc3JfaW1tX3JlZyh2Y3B1KSk7XG4gfVxuIFxuQEAgLTYzOTIsMTAgJiM0Mzs2Mzg2LDEwIEBAIHZvaWQgdm14X2dldF9leGl0X2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgKnJlYXNvbixcbiBcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xuIFxuIFx0KnJlYXNvbiA9IHZteC1cdTAwM2V2dC5leGl0X3JlYXNvbi5mdWxsO1xuLVx0KmluZm8xID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4mIzQzO1x0KmluZm8xID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdGlmICghKHZteC1cdTAwM2V2dC5leGl0X3JlYXNvbi5mYWlsZWRfdm1lbnRyeSkpIHtcbiBcdFx0KmluZm8yID0gdm14LVx1MDAzZWlkdF92ZWN0b3JpbmdfaW5mbztcbi1cdFx0KmludHJfaW5mbyA9IHZteF9nZXRfaW50cl9pbmZvKHZjcHUpO1xuJiM0MztcdFx0KmludHJfaW5mbyA9IHZ0X2dldF9pbnRyX2luZm8odmNwdSk7XG4gXHRcdGlmIChpc19leGNlcHRpb25fd2l0aF9lcnJvcl9jb2RlKCppbnRyX2luZm8pKVxuIFx0XHRcdCplcnJvcl9jb2RlID0gdm1jc19yZWFkMzIoVk1fRVhJVF9JTlRSX0VSUk9SX0NPREUpO1xuIFx0XHRlbHNlXG5AQCAtNjcwNiw3ICYjNDM7NjcwMCw3IEBAIHZvaWQgZHVtcF92bWNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBzdGF0aWMgaW50IF9fdm14X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xuLVx0dW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uID0gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KTtcbiYjNDM7XHR1bmlvbiB2bXhfZXhpdF9yZWFzb24gZXhpdF9yZWFzb24gPSB2dF9nZXRfZXhpdF9yZWFzb24odmNwdSk7XG4gXHR1MzIgdmVjdG9yaW5nX2luZm8gPSB2bXgtXHUwMDNlaWR0X3ZlY3RvcmluZ19pbmZvO1xuIFx0dTE2IGV4aXRfaGFuZGxlcl9pbmRleDtcbiBcbkBAIC02ODcwLDcgJiM0Mzs2ODY0LDcgQEAgaW50IHZteF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aClcbiBcdCAqIEV4aXQgdG8gdXNlciBzcGFjZSB3aGVuIGJ1cyBsb2NrIGRldGVjdGVkIHRvIGluZm9ybSB0aGF0IHRoZXJlIGlzXG4gXHQgKiBhIGJ1cyBsb2NrIGluIGd1ZXN0LlxuIFx0ICovXG4tXHRpZiAodm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5idXNfbG9ja19kZXRlY3RlZCkge1xuJiM0MztcdGlmICh2dF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYnVzX2xvY2tfZGV0ZWN0ZWQpIHtcbiBcdFx0aWYgKHJldCBcdTAwM2UgMClcbiBcdFx0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX1g4Nl9CVVNfTE9DSztcbiBcbkBAIC03MTQzLDc0ICYjNDM7NzEzNyw2IEBAIHZvaWQgdm14X2xvYWRfZW9pX2V4aXRtYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKmVvaV9leGl0X2JpdG1hcClcbiBcdHZtY3Nfd3JpdGU2NChFT0lfRVhJVF9CSVRNQVAzLCBlb2lfZXhpdF9iaXRtYXBbM10pO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBoYW5kbGVfbm1fZmF1bHRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi17XG4tXHQvKlxuLVx0ICogU2F2ZSB4ZmRfZXJyIHRvIGd1ZXN0X2ZwdSBiZWZvcmUgaW50ZXJydXB0IGlzIGVuYWJsZWQsIHNvIHRoZVxuLVx0ICogTVNSIHZhbHVlIGlzIG5vdCBjbG9iYmVyZWQgYnkgdGhlIGhvc3QgYWN0aXZpdHkgYmVmb3JlIHRoZSBndWVzdFxuLVx0ICogaGFzIGNoYW5jZSB0byBjb25zdW1lIGl0LlxuLVx0ICpcbi1cdCAqIFVwZGF0ZSB0aGUgZ3Vlc3QmIzM5O3MgWEZEX0VSUiBpZiBhbmQgb25seSBpZiBYRkQgaXMgZW5hYmxlZCwgYXMgdGhlICNOTVxuLVx0ICogaW50ZXJjZXB0aW9uIG1heSBoYXZlIGJlZW4gY2F1c2VkIGJ5IEwxIGludGVyY2VwdGlvbi4gIFBlciB0aGUgU0RNLFxuLVx0ICogWEZEX0VSUiBpcyBub3QgbW9kaWZpZWQgZm9yIG5vbi1YRkQgI05NLCBpLmUuIGlmIENSMC5UUz0xLlxuLVx0ICpcbi1cdCAqIE5vdGUsIFhGRF9FUlIgaXMgdXBkYXRlZCBfYmVmb3JlXyB0aGUgI05NIGludGVyY2VwdGlvbiBjaGVjaywgaS5lLlxuLVx0ICogdW5saWtlIENSMiBhbmQgRFI2LCB0aGUgdmFsdWUgaXMgbm90IGEgcGF5bG9hZCB0aGF0IGlzIGF0dGFjaGVkIHRvXG4tXHQgKiB0aGUgI05NIGV4Y2VwdGlvbi5cbi1cdCAqL1xuLVx0aWYgKGlzX3hmZF9ubV9mYXVsdCh2Y3B1KSlcbi1cdFx0cmRtc3JxKE1TUl9JQTMyX1hGRF9FUlIsIHZjcHUtXHUwMDNlYXJjaC5ndWVzdF9mcHUueGZkX2Vycik7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIGhhbmRsZV9leGNlcHRpb25faXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGludHJfaW5mbylcbi17XG4tXHQvKiBpZiBleGl0IGR1ZSB0byBQRiBjaGVjayBmb3IgYXN5bmMgUEYgKi9cbi1cdGlmIChpc19wYWdlX2ZhdWx0KGludHJfaW5mbykpXG4tXHRcdHZjcHUtXHUwMDNlYXJjaC5hcGYuaG9zdF9hcGZfZmxhZ3MgPSBrdm1fcmVhZF9hbmRfcmVzZXRfYXBmX2ZsYWdzKCk7XG4tXHQvKiBpZiBleGl0IGR1ZSB0byBOTSwgaGFuZGxlIGJlZm9yZSBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkICovXG4tXHRlbHNlIGlmIChpc19ubV9mYXVsdChpbnRyX2luZm8pKVxuLVx0XHRoYW5kbGVfbm1fZmF1bHRfaXJxb2ZmKHZjcHUpO1xuLVx0LyogSGFuZGxlIG1hY2hpbmUgY2hlY2tzIGJlZm9yZSBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkICovXG4tXHRlbHNlIGlmIChpc19tYWNoaW5lX2NoZWNrKGludHJfaW5mbykpXG4tXHRcdGt2bV9tYWNoaW5lX2NoZWNrKCk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIGhhbmRsZV9leHRlcm5hbF9pbnRlcnJ1cHRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi1cdFx0XHRcdFx0ICAgICB1MzIgaW50cl9pbmZvKVxuLXtcbi1cdHVuc2lnbmVkIGludCB2ZWN0b3IgPSBpbnRyX2luZm8gXHUwMDI2IElOVFJfSU5GT19WRUNUT1JfTUFTSztcbi1cbi1cdGlmIChLVk1fQlVHKCFpc19leHRlcm5hbF9pbnRyKGludHJfaW5mbyksIHZjcHUtXHUwMDNla3ZtLFxuLVx0ICAgIFwmIzM0O3VuZXhwZWN0ZWQgVk0tRXhpdCBpbnRlcnJ1cHQgaW5mbzogMHgleFwmIzM0OywgaW50cl9pbmZvKSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0a3ZtX2JlZm9yZV9pbnRlcnJ1cHQodmNwdSwgS1ZNX0hBTkRMSU5HX0lSUSk7XG4tXHR4ODZfZW50cnlfZnJvbV9rdm0oRVZFTlRfVFlQRV9FWFRJTlQsIHZlY3Rvcik7XG4tXHRrdm1fYWZ0ZXJfaW50ZXJydXB0KHZjcHUpO1xuLVxuLVx0dmNwdS1cdTAwM2VhcmNoLmF0X2luc3RydWN0aW9uX2JvdW5kYXJ5ID0gdHJ1ZTtcbi19XG4tXG4tdm9pZCB2bXhfaGFuZGxlX2V4aXRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi17XG4tXHRpZiAodG9fdnQodmNwdSktXHUwMDNlZW11bGF0aW9uX3JlcXVpcmVkKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRzd2l0Y2ggKHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMpIHtcbi1cdGNhc2UgRVhJVF9SRUFTT05fRVhURVJOQUxfSU5URVJSVVBUOlxuLVx0XHRoYW5kbGVfZXh0ZXJuYWxfaW50ZXJydXB0X2lycW9mZih2Y3B1LCB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KSk7XG4tXHRcdGJyZWFrO1xuLVx0Y2FzZSBFWElUX1JFQVNPTl9FWENFUFRJT05fTk1JOlxuLVx0XHRoYW5kbGVfZXhjZXB0aW9uX2lycW9mZih2Y3B1LCB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KSk7XG4tXHRcdGJyZWFrO1xuLVx0Y2FzZSBFWElUX1JFQVNPTl9NQ0VfRFVSSU5HX1ZNRU5UUlk6XG4tXHRcdGt2bV9tYWNoaW5lX2NoZWNrKCk7XG4tXHRcdGJyZWFrO1xuLVx0ZGVmYXVsdDpcbi1cdFx0YnJlYWs7XG4tXHR9XG4tfVxuLVxuIC8qXG4gICogVGhlIGt2bSBwYXJhbWV0ZXIgY2FuIGJlIE5VTEwgKG1vZHVsZSBpbml0aWFsaXphdGlvbiwgb3IgaW52b2NhdGlvbiBiZWZvcmVcbiAgKiBWTSBjcmVhdGlvbikuIEJlIHN1cmUgdG8gY2hlY2sgdGhlIGt2bSBwYXJhbWV0ZXIgYmVmb3JlIHVzaW5nIGl0LlxuQEAgLTcyNTAsNyAmIzQzOzcxNzYsNyBAQCBzdGF0aWMgdm9pZCB2bXhfcmVjb3Zlcl9ubWlfYmxvY2tpbmcoc3RydWN0IHZjcHVfdm14ICp2bXgpXG4gXHRcdGlmICh2bXgtXHUwMDNlbG9hZGVkX3ZtY3MtXHUwMDNlbm1pX2tub3duX3VubWFza2VkKVxuIFx0XHRcdHJldHVybjtcbiBcbi1cdFx0ZXhpdF9pbnRyX2luZm8gPSB2bXhfZ2V0X2ludHJfaW5mbyhcdTAwMjZ2bXgtXHUwMDNldmNwdSk7XG4mIzQzO1x0XHRleGl0X2ludHJfaW5mbyA9IHZ0X2dldF9pbnRyX2luZm8oXHUwMDI2dm14LVx1MDAzZXZjcHUpO1xuIFx0XHR1bmJsb2NrX25taSA9IChleGl0X2ludHJfaW5mbyBcdTAwMjYgSU5UUl9JTkZPX1VOQkxPQ0tfTk1JKSAhPSAwO1xuIFx0XHR2ZWN0b3IgPSBleGl0X2ludHJfaW5mbyBcdTAwMjYgSU5UUl9JTkZPX1ZFQ1RPUl9NQVNLO1xuIFx0XHQvKlxuQEAgLTc0MTcsMTQgJiM0Mzs3MzQzLDE0IEBAIHN0YXRpYyBmYXN0cGF0aF90IHZteF9leGl0X2hhbmRsZXJzX2Zhc3RwYXRoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdCAqIHRoZSBmYXN0cGF0aCBldmVuLCBhbGwgb3RoZXIgZXhpdHMgbXVzdCB1c2UgdGhlIHNsb3cgcGF0aC5cbiBcdCAqL1xuIFx0aWYgKGlzX2d1ZXN0X21vZGUodmNwdSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYyAhPSBFWElUX1JFQVNPTl9QUkVFTVBUSU9OX1RJTUVSKVxuJiM0MztcdCAgICB2dF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMgIT0gRVhJVF9SRUFTT05fUFJFRU1QVElPTl9USU1FUilcbiBcdFx0cmV0dXJuIEVYSVRfRkFTVFBBVEhfTk9ORTtcbiBcbi1cdHN3aXRjaCAodm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYykge1xuJiM0MztcdHN3aXRjaCAodnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljKSB7XG4gXHRjYXNlIEVYSVRfUkVBU09OX01TUl9XUklURTpcbiBcdFx0cmV0dXJuIGhhbmRsZV9mYXN0cGF0aF93cm1zcih2Y3B1KTtcbiBcdGNhc2UgRVhJVF9SRUFTT05fTVNSX1dSSVRFX0lNTTpcbi1cdFx0cmV0dXJuIGhhbmRsZV9mYXN0cGF0aF93cm1zcl9pbW0odmNwdSwgdm14X2dldF9leGl0X3F1YWwodmNwdSksXG4mIzQzO1x0XHRyZXR1cm4gaGFuZGxlX2Zhc3RwYXRoX3dybXNyX2ltbSh2Y3B1LCB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxuIFx0XHRcdFx0XHRcdCB2bXhfZ2V0X21zcl9pbW1fcmVnKHZjcHUpKTtcbiBcdGNhc2UgRVhJVF9SRUFTT05fUFJFRU1QVElPTl9USU1FUjpcbiBcdFx0cmV0dXJuIGhhbmRsZV9mYXN0cGF0aF9wcmVlbXB0aW9uX3RpbWVyKHZjcHUsIGZvcmNlX2ltbWVkaWF0ZV9leGl0KTtcbkBAIC03NDM3LDE3ICYjNDM7NzM2Myw2IEBAIHN0YXRpYyBmYXN0cGF0aF90IHZteF9leGl0X2hhbmRsZXJzX2Zhc3RwYXRoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdH1cbiB9XG4gXG4tbm9pbnN0ciB2b2lkIHZteF9oYW5kbGVfbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi17XG4tXHRpZiAoKHUxNil2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljICE9IEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUkgfHxcbi1cdCAgICAhaXNfbm1pKHZteF9nZXRfaW50cl9pbmZvKHZjcHUpKSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0a3ZtX2JlZm9yZV9pbnRlcnJ1cHQodmNwdSwgS1ZNX0hBTkRMSU5HX05NSSk7XG4tXHR4ODZfZW50cnlfZnJvbV9rdm0oRVZFTlRfVFlQRV9OTUksIE5NSV9WRUNUT1IpO1xuLVx0a3ZtX2FmdGVyX2ludGVycnVwdCh2Y3B1KTtcbi19XG4tXG4gc3RhdGljIG5vaW5zdHIgdm9pZCB2bXhfdmNwdV9lbnRlcl9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0XHRcdFx0dW5zaWduZWQgaW50IGZsYWdzKVxuIHtcbkBAIC03NDc3LDEwICYjNDM7NzM5MiwxMCBAQCBzdGF0aWMgbm9pbnN0ciB2b2lkIHZteF92Y3B1X2VudGVyX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0fVxuIFxuIFx0dm14LVx1MDAzZXZ0LmV4aXRfcmVhc29uLmZ1bGwgPSB2bWNzX3JlYWQzMihWTV9FWElUX1JFQVNPTik7XG4tXHRpZiAobGlrZWx5KCF2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5KSlcbiYjNDM7XHRpZiAobGlrZWx5KCF2dF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkpKVxuIFx0XHR2bXgtXHUwMDNlaWR0X3ZlY3RvcmluZ19pbmZvID0gdm1jc19yZWFkMzIoSURUX1ZFQ1RPUklOR19JTkZPX0ZJRUxEKTtcbiBcbi1cdHZteF9oYW5kbGVfbm1pKHZjcHUpO1xuJiM0MztcdHZ0X2hhbmRsZV9ubWkodmNwdSk7XG4gXG4gb3V0OlxuIFx0Z3Vlc3Rfc3RhdGVfZXhpdF9pcnFvZmYoKTtcbkBAIC03NjE3LDcgJiM0Mzs3NTMyLDcgQEAgZmFzdHBhdGhfdCB2bXhfdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcnVuX2ZsYWdzKVxuIFx0XHQgKiBjaGVja2luZy5cbiBcdFx0ICovXG4gXHRcdGlmICh2Y3B1LVx1MDAzZWFyY2gubmVzdGVkX3J1bl9wZW5kaW5nIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIXZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkpXG4mIzQzO1x0XHQgICAgIXZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mYWlsZWRfdm1lbnRyeSlcbiBcdFx0XHQmIzQzOyYjNDM7dmNwdS1cdTAwM2VzdGF0Lm5lc3RlZF9ydW47XG4gXG4gXHRcdHZjcHUtXHUwMDNlYXJjaC5uZXN0ZWRfcnVuX3BlbmRpbmcgPSAwO1xuQEAgLTc2MjgsNyAmIzQzOzc1NDMsNyBAQCBmYXN0cGF0aF90IHZteF92Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBydW5fZmxhZ3MpXG4gXG4gXHR0cmFjZV9rdm1fZXhpdCh2Y3B1LCBLVk1fSVNBX1ZNWCk7XG4gXG4tXHRpZiAodW5saWtlbHkodm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mYWlsZWRfdm1lbnRyeSkpXG4mIzQzO1x0aWYgKHVubGlrZWx5KHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mYWlsZWRfdm1lbnRyeSkpXG4gXHRcdHJldHVybiBFWElUX0ZBU1RQQVRIX05PTkU7XG4gXG4gXHR2bXgtXHUwMDNlbG9hZGVkX3ZtY3MtXHUwMDNlbGF1bmNoZWQgPSAxO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmggYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oXG5pbmRleCBkYzg1MTdmMTViYzQ2Li4zMjQ3YjU1YjM0ODQzIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC92bXguaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC92bXguaFxuQEAgLTMwNCw0MyAmIzQzOzMwNCw2IEBAIHN0cnVjdCBrdm1fdm14IHtcbiBcdHU2NCAqcGlkX3RhYmxlO1xuIH07XG4gXG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSBzdHJ1Y3QgdmNwdV92dCAqdG9fdnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLXtcbi1cdHJldHVybiBcdTAwMjYoY29udGFpbmVyX29mKHZjcHUsIHN0cnVjdCB2Y3B1X3ZteCwgdmNwdSktXHUwMDNldnQpO1xuLX1cbi1cbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHN0cnVjdCBrdm1fdmNwdSAqdnRfdG9fdmNwdShzdHJ1Y3QgdmNwdV92dCAqdnQpXG4te1xuLVx0cmV0dXJuIFx1MDAyNihjb250YWluZXJfb2YodnQsIHN0cnVjdCB2Y3B1X3ZteCwgdnQpLVx1MDAzZXZjcHUpO1xuLX1cbi1cbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHVuaW9uIHZteF9leGl0X3JlYXNvbiB2bXhfZ2V0X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi17XG4tXHRyZXR1cm4gdG9fdnQodmNwdSktXHUwMDNlZXhpdF9yZWFzb247XG4tfVxuLVxuLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgbG9uZyB2bXhfZ2V0X2V4aXRfcXVhbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4te1xuLVx0c3RydWN0IHZjcHVfdnQgKnZ0ID0gdG9fdnQodmNwdSk7XG4tXG4tXHRpZiAoIWt2bV9yZWdpc3Rlcl90ZXN0X2FuZF9tYXJrX2F2YWlsYWJsZSh2Y3B1LCBWQ1BVX1JFR19FWElUX0lORk9fMSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgIVdBUk5fT05fT05DRShpc190ZF92Y3B1KHZjcHUpKSlcbi1cdFx0dnQtXHUwMDNlZXhpdF9xdWFsaWZpY2F0aW9uID0gdm1jc19yZWFkbChFWElUX1FVQUxJRklDQVRJT04pO1xuLVxuLVx0cmV0dXJuIHZ0LVx1MDAzZWV4aXRfcXVhbGlmaWNhdGlvbjtcbi19XG4tXG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdm14X2dldF9pbnRyX2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLXtcbi1cdHN0cnVjdCB2Y3B1X3Z0ICp2dCA9IHRvX3Z0KHZjcHUpO1xuLVxuLVx0aWYgKCFrdm1fcmVnaXN0ZXJfdGVzdF9hbmRfbWFya19hdmFpbGFibGUodmNwdSwgVkNQVV9SRUdfRVhJVF9JTkZPXzIpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICFXQVJOX09OX09OQ0UoaXNfdGRfdmNwdSh2Y3B1KSkpXG4tXHRcdHZ0LVx1MDAzZWV4aXRfaW50cl9pbmZvID0gdm1jc19yZWFkMzIoVk1fRVhJVF9JTlRSX0lORk8pO1xuLVxuLVx0cmV0dXJuIHZ0LVx1MDAzZWV4aXRfaW50cl9pbmZvO1xuLX1cbi1cbiB2b2lkIHZteF92Y3B1X2xvYWRfdm1jcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpO1xuIGludCBhbGxvY2F0ZV92cGlkKHZvaWQpO1xuIHZvaWQgZnJlZV92cGlkKGludCB2cGlkKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaCBiL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oXG5pbmRleCAwNTRmZDE0YmIyZTE2Li43YWMwMmM2ODQ1N2YxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oXG5AQCAtMjcsNyAmIzQzOzI3LDYgQEAgdm9pZCB2bXhfdmNwdV9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaW5pdF9ldmVudCk7XG4gdm9pZCB2bXhfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSk7XG4gdm9pZCB2bXhfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBpbnQgdm14X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKTtcbi12b2lkIHZteF9oYW5kbGVfZXhpdF9pcnFvZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBpbnQgdm14X3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIHZteF91cGRhdGVfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBib29sIHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MjQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Z0X2hhbmRsZV9leGl0X2lycW9mZiYjMzQ7LAogICAgJiMzNDt2dF9oYW5kbGVfbm1pJiMzNDssCiAgICAmIzM0O3Z0X3ZjcHVfcGlfbG9hZCYjMzQ7LAogICAgJiMzNDt2dF92Y3B1X3BpX3B1dCYjMzQ7LAogICAgJiMzNDt2dF9waV9zdGFydF9ieXBhc3MmIzM0OywKICAgICYjMzQ7dnRfcGlfdXBkYXRlX2lydGUmIzM0OywKICAgICYjMzQ7dm14X2hhbmRsZV9leGl0JiMzNDssCiAgICAmIzM0O3ZteF92Y3B1X3J1biYjMzQ7LAogICAgJiMzNDtuZXN0ZWRfdm14X3JlZmxlY3Rfdm1leGl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBLVk0gSW50ZWwgKFZNWC9URFgpIHZpcnR1YWxpemF0aW9uIGxvZ2ljIGJ5IGNvbnNvbGlkYXRpbmcgZXhpdCBzdGF0dXMgaGFuZGxpbmcsIGV4aXQgSVJRLW9mZiBwcm9jZXNzaW5nLCBwb3N0ZWQgaW50ZXJydXB0IGhlbHBlcnMsIGFuZCBWTUNTIGV4aXQgcXVhbGlmaWNhdGlvbiBhY2Nlc3NvcnMgdW5kZXIgY29tbW9uIHZ0XyogYWJzdHJhY3Rpb25zLiBUaGlzIGFmZmVjdHMgY29yZSBLVk0gVk0gZXhpdCBoYW5kbGluZyBhbmQgbmVzdGVkIHZpcnR1YWxpemF0aW9uIHJlYWNoYWJsZSBvbiBhbWQ2NC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDlkMjVmMDZhOTNhYWJlNjRmYmFkMGRlZDc0ZjczMDAwZjRhNDdjYzMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDA5OjI0OjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaCBiL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmgKaW5kZXggMDgwMDU2NzY3MDJjMi4uM2U2OGZhMTJhY2E2NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oCkBAIC0yLDEwICYjNDM7MiwxMiBAQAogI2lmbmRlZiBfX0tWTV9YODZfVk1YX0NPTU1PTl9ICiAjZGVmaW5lIF9fS1ZNX1g4Nl9WTVhfQ09NTU9OX0gKIAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jb250YWluZXJfb2YuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rdm1faG9zdC5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9wb3N0ZWRfaW50ci5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O21tdS5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3ZteF9vcHMuaCYjMzQ7CiAKIHVuaW9uIHZteF9leGl0X3JlYXNvbiB7CiAJc3RydWN0IHsKQEAgLTc0LDE0ICYjNDM7NzYsNjIgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3RkX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7IHJldHVybiBmYWxzZTsgfQogCiAjZW5kaWYKIAomIzQzO3N0cnVjdCB2Y3B1X3ZteF90ZHggewomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgdmNwdTsKJiM0MzsJc3RydWN0IHZjcHVfdnQgdnQ7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHN0cnVjdCB2Y3B1X3Z0ICp0b192dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlyZXR1cm4gJmFtcDsoY29udGFpbmVyX29mKHZjcHUsIHN0cnVjdCB2Y3B1X3ZteF90ZHgsIHZjcHUpLSZndDt2dCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IGt2bV92Y3B1ICp2dF90b192Y3B1KHN0cnVjdCB2Y3B1X3Z0ICp2dCkKJiM0Mzt7CiYjNDM7CXJldHVybiAmYW1wOyhjb250YWluZXJfb2YodnQsIHN0cnVjdCB2Y3B1X3ZteF90ZHgsIHZ0KS0mZ3Q7dmNwdSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5pb24gdm14X2V4aXRfcmVhc29uIHZ0X2dldF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlyZXR1cm4gdG9fdnQodmNwdSktJmd0O2V4aXRfcmVhc29uOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcgdnRfZ2V0X2V4aXRfcXVhbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdmNwdV92dCAqdnQgPSB0b192dCh2Y3B1KTsKJiM0MzsKJiM0MzsJaWYgKCFrdm1fcmVnaXN0ZXJfdGVzdF9hbmRfbWFya19hdmFpbGFibGUodmNwdSwgVkNQVV9SRUdfRVhJVF9JTkZPXzEpICZhbXA7JmFtcDsKJiM0MzsJICAgICFXQVJOX09OX09OQ0UoaXNfdGRfdmNwdSh2Y3B1KSkpCiYjNDM7CQl2dC0mZ3Q7ZXhpdF9xdWFsaWZpY2F0aW9uID0gdm1jc19yZWFkbChFWElUX1FVQUxJRklDQVRJT04pOwomIzQzOwomIzQzOwlyZXR1cm4gdnQtJmd0O2V4aXRfcXVhbGlmaWNhdGlvbjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdnRfZ2V0X2ludHJfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdmNwdV92dCAqdnQgPSB0b192dCh2Y3B1KTsKJiM0MzsKJiM0MzsJaWYgKCFrdm1fcmVnaXN0ZXJfdGVzdF9hbmRfbWFya19hdmFpbGFibGUodmNwdSwgVkNQVV9SRUdfRVhJVF9JTkZPXzIpICZhbXA7JmFtcDsKJiM0MzsJICAgICFXQVJOX09OX09OQ0UoaXNfdGRfdmNwdSh2Y3B1KSkpCiYjNDM7CQl2dC0mZ3Q7ZXhpdF9pbnRyX2luZm8gPSB2bWNzX3JlYWQzMihWTV9FWElUX0lOVFJfSU5GTyk7CiYjNDM7CiYjNDM7CXJldHVybiB2dC0mZ3Q7ZXhpdF9pbnRyX2luZm87CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBpc194ZmRfbm1fZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJcmV0dXJuIHZjcHUtJmd0O2FyY2guZ3Vlc3RfZnB1LmZwc3RhdGUtJmd0O3hmZCAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICAha3ZtX2lzX2NyMF9iaXRfc2V0KHZjcHUsIFg4Nl9DUjBfVFMpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgYm9vbCB2dF9pc190ZHhfcHJpdmF0ZV9ncGEoc3RydWN0IGt2bSAqa3ZtLCBncGFfdCBncGEpCiB7CiAJLyogRm9yIFREWCB0aGUgZGlyZWN0IG1hc2sgaXMgdGhlIHNoYXJlZCBtYXNrLiAqLwogCXJldHVybiAha3ZtX2lzX2FkZHJfZGlyZWN0KGt2bSwgZ3BhKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgX192bXhfaGFuZGxlX2VwdF92aW9sYXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsCi0JCQkJCSAgICAgdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24pCiYjNDM7c3RhdGljIGlubGluZSBpbnQgX192dF9oYW5kbGVfZXB0X3Zpb2xhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwKJiM0MzsJCQkJCSAgICB1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbikKIHsKIAl1NjQgZXJyb3JfY29kZTsKIApAQCAtMTY0LDggJiM0MzsyMTQsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3ZjcHVfdHJpZ2dlcl9wb3N0ZWRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKICAqIFBvc3QgYW4gaW50ZXJydXB0IHRvIGEgdkNQVSYjMzk7cyBQSVIgYW5kIHRyaWdnZXIgdGhlIHZDUFUgdG8gcHJvY2VzcyB0aGUKICAqIGludGVycnVwdCBpZiBuZWNlc3NhcnkuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3ZteF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJCQkJICBzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYywgaW50IHZlY3RvcikKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgX192dF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAomIzQzOwkJCQkJCSBzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYywgaW50IHZlY3RvcikKIHsKIAlpZiAocGlfdGVzdF9hbmRfc2V0X3Bpcih2ZWN0b3IsIHBpX2Rlc2MpKQogCQlyZXR1cm47CkBAIC0xODMsNiAmIzQzOzIzMyw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3ZteF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCWt2bV92Y3B1X3RyaWdnZXJfcG9zdGVkX2ludGVycnVwdCh2Y3B1LCBQT1NURURfSU5UUl9WRUNUT1IpOwogfQogCi1ub2luc3RyIHZvaWQgdm14X2hhbmRsZV9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKJiM0Mztub2luc3RyIHZvaWQgdnRfaGFuZGxlX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiAjZW5kaWYgLyogX19LVk1fWDg2X1ZNWF9DT01NT05fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9tYWluLmMgYi9hcmNoL3g4Ni9rdm0vdm14L21haW4uYwppbmRleCA0YzUyYWI4ZDA3ODY5Li42ZTBiMzk1OWQ3M2FiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L21haW4uYwpAQCAtMSw0ICYjNDM7MSw1IEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9lbnRyeS1jb21tb24uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGVwYXJhbS5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O3g4Nl9vcHMuaCYjMzQ7CkBAIC0xMCw4ICYjNDM7MTEsMTIgQEAKICNpbmNsdWRlICYjMzQ7dGR4LmgmIzM0OwogI2luY2x1ZGUgJiMzNDt0ZHhfYXJjaC5oJiMzNDsKIAomIzQzOyNwcmFnbWEgR0NDIHBvaXNvbiB0b192bXgKJiM0MzsKJiM0MztzdGF0aWNfYXNzZXJ0KG9mZnNldG9mKHN0cnVjdCB2Y3B1X3ZteF90ZHgsIHZ0KSA9PSBvZmZzZXRvZihzdHJ1Y3QgdmNwdV92bXgsIHZ0KSk7CiYjNDM7CiAjaWZkZWYgQ09ORklHX0tWTV9JTlRFTF9URFgKLXN0YXRpY19hc3NlcnQob2Zmc2V0b2Yoc3RydWN0IHZjcHVfdm14LCB2dCkgPT0gb2Zmc2V0b2Yoc3RydWN0IHZjcHVfdGR4LCB2dCkpOwomIzQzO3N0YXRpY19hc3NlcnQob2Zmc2V0b2Yoc3RydWN0IHZjcHVfdm14X3RkeCwgdnQpID09IG9mZnNldG9mKHN0cnVjdCB2Y3B1X3RkeCwgdnQpKTsKIAogc3RhdGljIHZvaWQgdnRfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUodm9pZCkKIHsKQEAgLTg3Niw2ICYjNDM7ODgxLDg1IEBAIHN0YXRpYyBpbnQgdnRfZ21lbV9tYXhfbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sCiAjZGVmaW5lIHZ0X29wX3RkeF9vbmx5KG5hbWUpIE5VTEwKICNlbmRpZiAvKiBDT05GSUdfS1ZNX0lOVEVMX1REWCAqLwogCiYjNDM7c3RhdGljIHZvaWQgaGFuZGxlX25tX2ZhdWx0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBTYXZlIHhmZF9lcnIgdG8gZ3Vlc3RfZnB1IGJlZm9yZSBpbnRlcnJ1cHQgaXMgZW5hYmxlZCwgc28gdGhlCiYjNDM7CSAqIE1TUiB2YWx1ZSBpcyBub3QgY2xvYmJlcmVkIGJ5IHRoZSBob3N0IGFjdGl2aXR5IGJlZm9yZSB0aGUgZ3Vlc3QKJiM0MzsJICogaGFzIGNoYW5jZSB0byBjb25zdW1lIGl0LgomIzQzOwkgKgomIzQzOwkgKiBVcGRhdGUgdGhlIGd1ZXN0JiMzOTtzIFhGRF9FUlIgaWYgYW5kIG9ubHkgaWYgWEZEIGlzIGVuYWJsZWQsIGFzIHRoZSAjTk0KJiM0MzsJICogaW50ZXJjZXB0aW9uIG1heSBoYXZlIGJlZW4gY2F1c2VkIGJ5IEwxIGludGVyY2VwdGlvbi4gIFBlciB0aGUgU0RNLAomIzQzOwkgKiBYRkRfRVJSIGlzIG5vdCBtb2RpZmllZCBmb3Igbm9uLVhGRCAjTk0sIGkuZS4gaWYgQ1IwLlRTPTEuCiYjNDM7CSAqCiYjNDM7CSAqIE5vdGUsIFhGRF9FUlIgaXMgdXBkYXRlZCBfYmVmb3JlXyB0aGUgI05NIGludGVyY2VwdGlvbiBjaGVjaywgaS5lLgomIzQzOwkgKiB1bmxpa2UgQ1IyIGFuZCBEUjYsIHRoZSB2YWx1ZSBpcyBub3QgYSBwYXlsb2FkIHRoYXQgaXMgYXR0YWNoZWQgdG8KJiM0MzsJICogdGhlICNOTSBleGNlcHRpb24uCiYjNDM7CSAqLwomIzQzOwlpZiAoaXNfeGZkX25tX2ZhdWx0KHZjcHUpKQomIzQzOwkJcmRtc3JxKE1TUl9JQTMyX1hGRF9FUlIsIHZjcHUtJmd0O2FyY2guZ3Vlc3RfZnB1LnhmZF9lcnIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBoYW5kbGVfZXhjZXB0aW9uX2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBpbnRyX2luZm8pCiYjNDM7ewomIzQzOwkvKiBpZiBleGl0IGR1ZSB0byBQRiBjaGVjayBmb3IgYXN5bmMgUEYgKi8KJiM0MzsJaWYgKGlzX3BhZ2VfZmF1bHQoaW50cl9pbmZvKSkKJiM0MzsJCXZjcHUtJmd0O2FyY2guYXBmLmhvc3RfYXBmX2ZsYWdzID0ga3ZtX3JlYWRfYW5kX3Jlc2V0X2FwZl9mbGFncygpOwomIzQzOwkvKiBpZiBleGl0IGR1ZSB0byBOTSwgaGFuZGxlIGJlZm9yZSBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkICovCiYjNDM7CWVsc2UgaWYgKGlzX25tX2ZhdWx0KGludHJfaW5mbykpCiYjNDM7CQloYW5kbGVfbm1fZmF1bHRfaXJxb2ZmKHZjcHUpOwomIzQzOwkvKiBIYW5kbGUgbWFjaGluZSBjaGVja3MgYmVmb3JlIGludGVycnVwdHMgYXJlIGVuYWJsZWQgKi8KJiM0MzsJZWxzZSBpZiAoaXNfbWFjaGluZV9jaGVjayhpbnRyX2luZm8pKQomIzQzOwkJa3ZtX21hY2hpbmVfY2hlY2soKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaGFuZGxlX2V4dGVybmFsX2ludGVycnVwdF9pcnFvZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAomIzQzOwkJCQkJICAgICB1MzIgaW50cl9pbmZvKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IHZlY3RvciA9IGludHJfaW5mbyAmYW1wOyBJTlRSX0lORk9fVkVDVE9SX01BU0s7CiYjNDM7CiYjNDM7CWlmIChLVk1fQlVHKCFpc19leHRlcm5hbF9pbnRyKGludHJfaW5mbyksIHZjcHUtJmd0O2t2bSwKJiM0MzsJICAgICYjMzQ7dW5leHBlY3RlZCBWTS1FeGl0IGludGVycnVwdCBpbmZvOiAweCV4JiMzNDssIGludHJfaW5mbykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWt2bV9iZWZvcmVfaW50ZXJydXB0KHZjcHUsIEtWTV9IQU5ETElOR19JUlEpOwomIzQzOwl4ODZfZW50cnlfZnJvbV9rdm0oRVZFTlRfVFlQRV9FWFRJTlQsIHZlY3Rvcik7CiYjNDM7CWt2bV9hZnRlcl9pbnRlcnJ1cHQodmNwdSk7CiYjNDM7CiYjNDM7CXZjcHUtJmd0O2FyY2guYXRfaW5zdHJ1Y3Rpb25fYm91bmRhcnkgPSB0cnVlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB2dF9oYW5kbGVfZXhpdF9pcnFvZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJaWYgKHRvX3Z0KHZjcHUpLSZndDtlbXVsYXRpb25fcmVxdWlyZWQpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXN3aXRjaCAodnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljKSB7CiYjNDM7CWNhc2UgRVhJVF9SRUFTT05fRVhURVJOQUxfSU5URVJSVVBUOgomIzQzOwkJaGFuZGxlX2V4dGVybmFsX2ludGVycnVwdF9pcnFvZmYodmNwdSwgdnRfZ2V0X2ludHJfaW5mbyh2Y3B1KSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBFWElUX1JFQVNPTl9FWENFUFRJT05fTk1JOgomIzQzOwkJaGFuZGxlX2V4Y2VwdGlvbl9pcnFvZmYodmNwdSwgdnRfZ2V0X2ludHJfaW5mbyh2Y3B1KSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBFWElUX1JFQVNPTl9NQ0VfRFVSSU5HX1ZNRU5UUlk6CiYjNDM7CQlrdm1fbWFjaGluZV9jaGVjaygpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0Mztub2luc3RyIHZvaWQgdnRfaGFuZGxlX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlpZiAoKHUxNil2dF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMgIT0gRVhJVF9SRUFTT05fRVhDRVBUSU9OX05NSSB8fAomIzQzOwkgICAgIWlzX25taSh2dF9nZXRfaW50cl9pbmZvKHZjcHUpKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJa3ZtX2JlZm9yZV9pbnRlcnJ1cHQodmNwdSwgS1ZNX0hBTkRMSU5HX05NSSk7CiYjNDM7CXg4Nl9lbnRyeV9mcm9tX2t2bShFVkVOVF9UWVBFX05NSSwgTk1JX1ZFQ1RPUik7CiYjNDM7CWt2bV9hZnRlcl9pbnRlcnJ1cHQodmNwdSk7CiYjNDM7fQomIzQzOwogI2RlZmluZSBWTVhfUkVRVUlSRURfQVBJQ1ZfSU5ISUJJVFMJCQkJXAogCShCSVQoQVBJQ1ZfSU5ISUJJVF9SRUFTT05fRElTQUJMRUQpIHwJCQlcCiAJIEJJVChBUElDVl9JTkhJQklUX1JFQVNPTl9BQlNFTlQpIHwJCQlcCkBAIC0xMDAwLDEyICYjNDM7MTA4NCwxMiBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgdnRfeDg2X29wcyBfX2luaXRkYXRhID0gewogCS5sb2FkX21tdV9wZ2QgPSB2dF9vcChsb2FkX21tdV9wZ2QpLAogCiAJLmNoZWNrX2ludGVyY2VwdCA9IHZteF9jaGVja19pbnRlcmNlcHQsCi0JLmhhbmRsZV9leGl0X2lycW9mZiA9IHZteF9oYW5kbGVfZXhpdF9pcnFvZmYsCiYjNDM7CS5oYW5kbGVfZXhpdF9pcnFvZmYgPSB2dF9oYW5kbGVfZXhpdF9pcnFvZmYsCiAKIAkudXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nID0gdnRfb3AodXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKSwKIAotCS5waV91cGRhdGVfaXJ0ZSA9IHZteF9waV91cGRhdGVfaXJ0ZSwKLQkucGlfc3RhcnRfYnlwYXNzID0gdm14X3BpX3N0YXJ0X2J5cGFzcywKJiM0MzsJLnBpX3VwZGF0ZV9pcnRlID0gdnRfcGlfdXBkYXRlX2lydGUsCiYjNDM7CS5waV9zdGFydF9ieXBhc3MgPSB2dF9waV9zdGFydF9ieXBhc3MsCiAKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAJLnNldF9odl90aW1lciA9IHZ0X29wKHNldF9odl90aW1lciksCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYwppbmRleCAxNTE4NzM0MDdhYmQzLi40NzU5OWU3MzEyY2ZkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMKQEAgLTQ0Niw3ICYjNDM7NDQ2LDcgQEAgc3RhdGljIHZvaWQgbmVzdGVkX2VwdF9pbmplY3RfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCSAqICYjMzQ7Tk1JIHVuYmxvY2tpbmcgZHVlIHRvIElSRVQmIzM0OywgaS5lLiB0aGUgYml0IGNhbiBiZSBwcm9wYWdhdGVkCiAJCSAqIGFzLWlzIGZyb20gdGhlIG9yaWdpbmFsIEVYSVRfUVVBTElGSUNBVElPTi4KIAkJICovCi0JCWV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpICZhbXA7IElOVFJfSU5GT19VTkJMT0NLX05NSTsKJiM0MzsJCWV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSkgJmFtcDsgSU5UUl9JTkZPX1VOQkxPQ0tfTk1JOwogCX0gZWxzZSB7CiAJCWlmIChmYXVsdC0mZ3Q7ZXJyb3JfY29kZSAmYW1wOyBQRkVSUl9SU1ZEX01BU0spIHsKIAkJCXZtX2V4aXRfcmVhc29uID0gRVhJVF9SRUFTT05fRVBUX01JU0NPTkZJRzsKQEAgLTQ3Miw3ICYjNDM7NDcyLDcgQEAgc3RhdGljIHZvaWQgbmVzdGVkX2VwdF9pbmplY3RfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkgKiBhbmQgd2Fsa3MgdGhlIGZhdWx0aW5nIEdQQS4KIAkJCSAqLwogCQkJaWYgKGZyb21faGFyZHdhcmUpCi0JCQkJZXhpdF9xdWFsaWZpY2F0aW9uIHw9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpICZhbXA7IG1hc2s7CiYjNDM7CQkJCWV4aXRfcXVhbGlmaWNhdGlvbiB8PSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpICZhbXA7IG1hc2s7CiAJCQllbHNlCiAJCQkJZXhpdF9xdWFsaWZpY2F0aW9uIHw9IGZhdWx0LSZndDtleGl0X3F1YWxpZmljYXRpb24gJmFtcDsgbWFzazsKIApAQCAtNDc0Nyw3ICYjNDM7NDc0Nyw3IEBAIHN0YXRpYyB2b2lkIHByZXBhcmVfdm1jczEyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZtY3MxMiAqdm1jczEyLAogewogCS8qIHVwZGF0ZSBleGl0IGluZm9ybWF0aW9uIGZpZWxkczogKi8KIAl2bWNzMTItJmd0O3ZtX2V4aXRfcmVhc29uID0gdm1fZXhpdF9yZWFzb247Ci0JaWYgKHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZW5jbGF2ZV9tb2RlKQomIzQzOwlpZiAodnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmVuY2xhdmVfbW9kZSkKIAkJdm1jczEyLSZndDt2bV9leGl0X3JlYXNvbiB8PSBWTVhfRVhJVF9SRUFTT05TX1NHWF9FTkNMQVZFX01PREU7CiAJdm1jczEyLSZndDtleGl0X3F1YWxpZmljYXRpb24gPSBleGl0X3F1YWxpZmljYXRpb247CiAKQEAgLTUzNzMsNyAmIzQzOzUzNzMsNyBAQCBzdGF0aWMgaW50IG5lc3RlZF92bXhfZ2V0X3ZtcHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgKnZtcG9pbnRlciwKIAlzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBlOwogCWludCByOwogCi0JaWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgdm14X2dldF9leGl0X3F1YWwodmNwdSksCiYjNDM7CWlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZ0X2dldF9leGl0X3F1YWwodmNwdSksCiAJCQkJdm1jc19yZWFkMzIoVk1YX0lOU1RSVUNUSU9OX0lORk8pLCBmYWxzZSwKIAkJCQlzaXplb2YoKnZtcG9pbnRlciksICZhbXA7Z3ZhKSkgewogCQkqcmV0ID0gMTsKQEAgLTU2NjUsNyAmIzQzOzU2NjUsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXJlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXN0cnVjdCB2bWNzMTIgKnZtY3MxMiA9IGlzX2d1ZXN0X21vZGUodmNwdSkgPyBnZXRfc2hhZG93X3ZtY3MxMih2Y3B1KQogCQkJCQkJICAgIDogZ2V0X3ZtY3MxMih2Y3B1KTsKLQl1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpOwomIzQzOwl1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7CiAJdTMyIGluc3RyX2luZm8gPSB2bWNzX3JlYWQzMihWTVhfSU5TVFJVQ1RJT05fSU5GTyk7CiAJc3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7CiAJc3RydWN0IHg4Nl9leGNlcHRpb24gZTsKQEAgLTU3NzEsNyAmIzQzOzU3NzEsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXdyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3Qgdm1jczEyICp2bWNzMTIgPSBpc19ndWVzdF9tb2RlKHZjcHUpID8gZ2V0X3NoYWRvd192bWNzMTIodmNwdSkKIAkJCQkJCSAgICA6IGdldF92bWNzMTIodmNwdSk7Ci0JdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKJiM0MzsJdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpOwogCXUzMiBpbnN0cl9pbmZvID0gdm1jc19yZWFkMzIoVk1YX0lOU1RSVUNUSU9OX0lORk8pOwogCXN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpOwogCXN0cnVjdCB4ODZfZXhjZXB0aW9uIGU7CkBAIC01OTYwLDcgJiM0Mzs1OTYwLDcgQEAgc3RhdGljIGludCBoYW5kbGVfdm1wdHJsZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAvKiBFbXVsYXRlIHRoZSBWTVBUUlNUIGluc3RydWN0aW9uICovCiBzdGF0aWMgaW50IGhhbmRsZV92bXB0cnN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQl1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpOwomIzQzOwl1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7CiAJdTMyIGluc3RyX2luZm8gPSB2bWNzX3JlYWQzMihWTVhfSU5TVFJVQ1RJT05fSU5GTyk7CiAJZ3BhX3QgY3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS0mZ3Q7bmVzdGVkLmN1cnJlbnRfdm1wdHI7CiAJc3RydWN0IHg4Nl9leGNlcHRpb24gZTsKQEAgLTYwMjEsNyAmIzQzOzYwMjEsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9pbnZlcHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCS8qIEFjY29yZGluZyB0byB0aGUgSW50ZWwgVk1YIGluc3RydWN0aW9uIHJlZmVyZW5jZSwgdGhlIG1lbW9yeQogCSAqIG9wZXJhbmQgaXMgcmVhZCBldmVuIGlmIGl0IGlzbiYjMzk7dCBuZWVkZWQgKGUuZy4sIGZvciB0eXBlPT1nbG9iYWwpCiAJICovCi0JaWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgdm14X2dldF9leGl0X3F1YWwodmNwdSksCiYjNDM7CWlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZ0X2dldF9leGl0X3F1YWwodmNwdSksCiAJCQl2bXhfaW5zdHJ1Y3Rpb25faW5mbywgZmFsc2UsIHNpemVvZihvcGVyYW5kKSwgJmFtcDtndmEpKQogCQlyZXR1cm4gMTsKIAlyID0ga3ZtX3JlYWRfZ3Vlc3RfdmlydCh2Y3B1LCBndmEsICZhbXA7b3BlcmFuZCwgc2l6ZW9mKG9wZXJhbmQpLCAmYW1wO2UpOwpAQCAtNjEwNCw3ICYjNDM7NjEwNCw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2ludnZwaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCS8qIGFjY29yZGluZyB0byB0aGUgaW50ZWwgdm14IGluc3RydWN0aW9uIHJlZmVyZW5jZSwgdGhlIG1lbW9yeQogCSAqIG9wZXJhbmQgaXMgcmVhZCBldmVuIGlmIGl0IGlzbiYjMzk7dCBuZWVkZWQgKGUuZy4sIGZvciB0eXBlPT1nbG9iYWwpCiAJICovCi0JaWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgdm14X2dldF9leGl0X3F1YWwodmNwdSksCiYjNDM7CWlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZ0X2dldF9leGl0X3F1YWwodmNwdSksCiAJCQl2bXhfaW5zdHJ1Y3Rpb25faW5mbywgZmFsc2UsIHNpemVvZihvcGVyYW5kKSwgJmFtcDtndmEpKQogCQlyZXR1cm4gMTsKIAlyID0ga3ZtX3JlYWRfZ3Vlc3RfdmlydCh2Y3B1LCBndmEsICZhbXA7b3BlcmFuZCwgc2l6ZW9mKG9wZXJhbmQpLCAmYW1wO2UpOwpAQCAtNjIzNiw4ICYjNDM7NjIzNiw4IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3ZtZnVuYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJICogRVhJVF9SRUFTT05fVk1GVU5DIGFzIHRoZSBleGl0IHJlYXNvbi4KIAkgKi8KIAluZXN0ZWRfdm14X3ZtZXhpdCh2Y3B1LCB2bXgtJmd0O3Z0LmV4aXRfcmVhc29uLmZ1bGwsCi0JCQkgIHZteF9nZXRfaW50cl9pbmZvKHZjcHUpLAotCQkJICB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSk7CiYjNDM7CQkJICB2dF9nZXRfaW50cl9pbmZvKHZjcHUpLAomIzQzOwkJCSAgdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KSk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTYyODgsNyAmIzQzOzYyODgsNyBAQCBzdGF0aWMgYm9vbCBuZXN0ZWRfdm14X2V4aXRfaGFuZGxlZF9pbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJaWYgKCFuZXN0ZWRfY3B1X2hhcyh2bWNzMTIsIENQVV9CQVNFRF9VU0VfSU9fQklUTUFQUykpCiAJCXJldHVybiBuZXN0ZWRfY3B1X2hhcyh2bWNzMTIsIENQVV9CQVNFRF9VTkNPTkRfSU9fRVhJVElORyk7CiAKLQlleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKJiM0MzsJZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKIAogCXBvcnQgPSBleGl0X3F1YWxpZmljYXRpb24gJmd0OyZndDsgMTY7CiAJc2l6ZSA9IChleGl0X3F1YWxpZmljYXRpb24gJmFtcDsgNykgJiM0MzsgMTsKQEAgLTYzMTQsNyAmIzQzOzYzMTQsNyBAQCBzdGF0aWMgYm9vbCBuZXN0ZWRfdm14X2V4aXRfaGFuZGxlZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCiAJaWYgKGV4aXRfcmVhc29uLmJhc2ljID09IEVYSVRfUkVBU09OX01TUl9SRUFEX0lNTSB8fAogCSAgICBleGl0X3JlYXNvbi5iYXNpYyA9PSBFWElUX1JFQVNPTl9NU1JfV1JJVEVfSU1NKQotCQltc3JfaW5kZXggPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKJiM0MzsJCW1zcl9pbmRleCA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7CiAJZWxzZQogCQltc3JfaW5kZXggPSBrdm1fZWN4X3JlYWQodmNwdSk7CiAKQEAgLTYzNTAsNyAmIzQzOzYzNTAsNyBAQCBzdGF0aWMgYm9vbCBuZXN0ZWRfdm14X2V4aXRfaGFuZGxlZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogc3RhdGljIGJvb2wgbmVzdGVkX3ZteF9leGl0X2hhbmRsZWRfY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCXN0cnVjdCB2bWNzMTIgKnZtY3MxMikKIHsKLQl1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpOwomIzQzOwl1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7CiAJaW50IGNyID0gZXhpdF9xdWFsaWZpY2F0aW9uICZhbXA7IDE1OwogCWludCByZWc7CiAJdW5zaWduZWQgbG9uZyB2YWw7CkBAIC02NDg0LDcgJiM0Mzs2NDg0LDcgQEAgc3RhdGljIGJvb2wgbmVzdGVkX3ZteF9sMF93YW50c19leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAogCXN3aXRjaCAoKHUxNilleGl0X3JlYXNvbi5iYXNpYykgewogCWNhc2UgRVhJVF9SRUFTT05fRVhDRVBUSU9OX05NSToKLQkJaW50cl9pbmZvID0gdm14X2dldF9pbnRyX2luZm8odmNwdSk7CiYjNDM7CQlpbnRyX2luZm8gPSB2dF9nZXRfaW50cl9pbmZvKHZjcHUpOwogCQlpZiAoaXNfbm1pKGludHJfaW5mbykpCiAJCQlyZXR1cm4gdHJ1ZTsKIAkJZWxzZSBpZiAoaXNfcGFnZV9mYXVsdChpbnRyX2luZm8pKQpAQCAtNjU2Nyw3ICYjNDM7NjU2Nyw3IEBAIHN0YXRpYyBib29sIG5lc3RlZF92bXhfbDFfd2FudHNfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAKIAlzd2l0Y2ggKCh1MTYpZXhpdF9yZWFzb24uYmFzaWMpIHsKIAljYXNlIEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUk6Ci0JCWludHJfaW5mbyA9IHZteF9nZXRfaW50cl9pbmZvKHZjcHUpOwomIzQzOwkJaW50cl9pbmZvID0gdnRfZ2V0X2ludHJfaW5mbyh2Y3B1KTsKIAkJaWYgKGlzX25taShpbnRyX2luZm8pKQogCQkJcmV0dXJuIHRydWU7CiAJCWVsc2UgaWYgKGlzX3BhZ2VfZmF1bHQoaW50cl9pbmZvKSkKQEAgLTY3MzcsMTQgJiM0Mzs2NzM3LDE0IEBAIGJvb2wgbmVzdGVkX3ZteF9yZWZsZWN0X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJICogbmVlZCB0byBiZSBzeW50aGVzaXplZCBieSBxdWVyeWluZyB0aGUgaW4ta2VybmVsIExBUElDLCBidXQgZXh0ZXJuYWwKIAkgKiBpbnRlcnJ1cHRzIGFyZSBuZXZlciByZWZsZWN0ZWQgdG8gTDEgc28gaXQmIzM5O3MgYSBub24taXNzdWUuCiAJICovCi0JZXhpdF9pbnRyX2luZm8gPSB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KTsKJiM0MzsJZXhpdF9pbnRyX2luZm8gPSB2dF9nZXRfaW50cl9pbmZvKHZjcHUpOwogCWlmIChpc19leGNlcHRpb25fd2l0aF9lcnJvcl9jb2RlKGV4aXRfaW50cl9pbmZvKSkgewogCQlzdHJ1Y3Qgdm1jczEyICp2bWNzMTIgPSBnZXRfdm1jczEyKHZjcHUpOwogCiAJCXZtY3MxMi0mZ3Q7dm1fZXhpdF9pbnRyX2Vycm9yX2NvZGUgPQogCQkJdm1jc19yZWFkMzIoVk1fRVhJVF9JTlRSX0VSUk9SX0NPREUpOwogCX0KLQlleGl0X3F1YWwgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKJiM0MzsJZXhpdF9xdWFsID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKIAogcmVmbGVjdF92bWV4aXQ6CiAJbmVzdGVkX3ZteF92bWV4aXQodmNwdSwgZXhpdF9yZWFzb24uZnVsbCwgZXhpdF9pbnRyX2luZm8sIGV4aXRfcXVhbCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmMgYi9hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmMKaW5kZXggNGE2ZDlhMTdkYTIzOC4uMjY0NGFkZDU0Yjc2YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYwpAQCAtMTQsNiAmIzQzOzE0LDggQEAKICNpbmNsdWRlICYjMzQ7dm14LmgmIzM0OwogI2luY2x1ZGUgJiMzNDt0ZHguaCYjMzQ7CiAKJiM0MzsjcHJhZ21hIEdDQyBwb2lzb24gdG9fdm14CiYjNDM7CiAvKgogICogTWFpbnRhaW4gYSBwZXItQ1BVIGxpc3Qgb2YgdkNQVXMgdGhhdCBuZWVkIHRvIGJlIGF3YWtlbmVkIGJ5IHdha2V1cF9oYW5kbGVyKCkKICAqIHdoZW4gYSBXQUtFVVBfVkVDVE9SIGludGVycnVwdGVkIGlzIHBvc3RlZC4gIHZDUFVzIGFyZSBhZGRlZCB0byB0aGUgbGlzdCB3aGVuCkBAIC01NCw3ICYjNDM7NTYsNyBAQCBzdGF0aWMgaW50IHBpX3RyeV9zZXRfY29udHJvbChzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYywgdTY0ICpwb2xkLCB1NjQgbmV3KQogCXJldHVybiAwOwogfQogCi12b2lkIHZteF92Y3B1X3BpX2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KQomIzQzO3ZvaWQgdnRfdmNwdV9waV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSkKIHsKIAlzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYyA9IHZjcHVfdG9fcGlfZGVzYyh2Y3B1KTsKIAlzdHJ1Y3QgdmNwdV92dCAqdnQgPSB0b192dCh2Y3B1KTsKQEAgLTE0NCwxMSAmIzQzOzE0NiwxMSBAQCB2b2lkIHZteF92Y3B1X3BpX2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KQogCQlwaV9zZXRfb24ocGlfZGVzYyk7CiB9CiAKLXN0YXRpYyBib29sIHZteF9jYW5fdXNlX3Z0ZF9waShzdHJ1Y3Qga3ZtICprdm0pCiYjNDM7c3RhdGljIGJvb2wgdnRfY2FuX3VzZV92dGRfcGkoc3RydWN0IGt2bSAqa3ZtKQogewogCS8qCiAJICogTm90ZSwgcmVhZGluZyB0aGUgbnVtYmVyIG9mIHBvc3NpYmxlIGJ5cGFzcyBJUlFzIGNhbiByYWNlIHdpdGggYQotCSAqIGJ5cGFzcyBJUlEgYmVpbmcgYXR0YWNoZWQgdG8gdGhlIFZNLiAgdm14X3BpX3N0YXJ0X2J5cGFzcygpIGVuc3VyZXMKJiM0MzsJICogYnlwYXNzIElSUSBiZWluZyBhdHRhY2hlZCB0byB0aGUgVk0uICB2dF9waV9zdGFydF9ieXBhc3MoKSBlbnN1cmVzCiAJICogYmxvY2tuZyB2Q1BVcyB3aWxsIHNlZSBhbiBlbGV2YXRlZCBjb3VudCBvciBnZXQgS1ZNX1JFUV9VTkJMT0NLLgogCSAqLwogCXJldHVybiBpcnFjaGlwX2luX2tlcm5lbChrdm0pICZhbXA7JmFtcDsga3ZtX2FyY2hfaGFzX2lycV9ieXBhc3MoKSAmYW1wOyZhbXA7CkBAIC0yMDYsNyAmIzQzOzIwOCw3IEBAIHN0YXRpYyB2b2lkIHBpX2VuYWJsZV93YWtldXBfaGFuZGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJCV9fYXBpY19zZW5kX0lQSV9zZWxmKFBPU1RFRF9JTlRSX1dBS0VVUF9WRUNUT1IpOwogfQogCi1zdGF0aWMgYm9vbCB2bXhfbmVlZHNfcGlfd2FrZXVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0MztzdGF0aWMgYm9vbCB2dF9uZWVkc19waV93YWtldXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCS8qCiAJICogVGhlIGRlZmF1bHQgcG9zdGVkIGludGVycnVwdCB2ZWN0b3IgZG9lcyBub3RoaW5nIHdoZW4KQEAgLTIxNywxNCAmIzQzOzIxOSwxNCBAQCBzdGF0aWMgYm9vbCB2bXhfbmVlZHNfcGlfd2FrZXVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkgKiBiYWNrIHRvIHRoZSBwaV93YWtldXBfaGFuZGxlcigpIGZ1bmN0aW9uLgogCSAqLwogCXJldHVybiAodm14X2Nhbl91c2VfaXBpdih2Y3B1KSAmYW1wOyZhbXA7ICFpc190ZF92Y3B1KHZjcHUpKSB8fAotCQl2bXhfY2FuX3VzZV92dGRfcGkodmNwdS0mZ3Q7a3ZtKTsKJiM0MzsJCXZ0X2Nhbl91c2VfdnRkX3BpKHZjcHUtJmd0O2t2bSk7CiB9CiAKLXZvaWQgdm14X3ZjcHVfcGlfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mzt2b2lkIHZ0X3ZjcHVfcGlfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYyA9IHZjcHVfdG9fcGlfZGVzYyh2Y3B1KTsKIAotCWlmICghdm14X25lZWRzX3BpX3dha2V1cCh2Y3B1KSkKJiM0MzsJaWYgKCF2dF9uZWVkc19waV93YWtldXAodmNwdSkpCiAJCXJldHVybjsKIAogCS8qCkBAIC0yOTIsMTcgJiM0MzsyOTQsMTcgQEAgYm9vbCBwaV9oYXNfcGVuZGluZ19pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogLyoKICAqIEtpY2sgYWxsIHZDUFVzIHdoZW4gdGhlIGZpcnN0IHBvc3NpYmxlIGJ5cGFzcyBJUlEgaXMgYXR0YWNoZWQgdG8gYSBWTSwgYXMKICAqIGJsb2NraW5nIHZDUFVzIG1heSBzY2hlZHVsZWQgb3V0IHdpdGhvdXQgcmVjb25maWd1cmluZyBQSUQuTlYgdG8gdGhlIHdha2V1cAotICogdmVjdG9yLCBpLmUuIGlmIHRoZSBieXBhc3MgSVJRIGNhbWUgYWxvbmcgYWZ0ZXIgdm14X3ZjcHVfcGlfcHV0KCkuCiYjNDM7ICogdmVjdG9yLCBpLmUuIGlmIHRoZSBieXBhc3MgSVJRIGNhbWUgYWxvbmcgYWZ0ZXIgdnRfdmNwdV9waV9wdXQoKS4KICAqLwotdm9pZCB2bXhfcGlfc3RhcnRfYnlwYXNzKHN0cnVjdCBrdm0gKmt2bSkKJiM0Mzt2b2lkIHZ0X3BpX3N0YXJ0X2J5cGFzcyhzdHJ1Y3Qga3ZtICprdm0pCiB7Ci0JaWYgKFdBUk5fT05fT05DRSghdm14X2Nhbl91c2VfdnRkX3BpKGt2bSkpKQomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCF2dF9jYW5fdXNlX3Z0ZF9waShrdm0pKSkKIAkJcmV0dXJuOwogCiAJa3ZtX21ha2VfYWxsX2NwdXNfcmVxdWVzdChrdm0sIEtWTV9SRVFfVU5CTE9DSyk7CiB9CiAKLWludCB2bXhfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sCiYjNDM7aW50IHZ0X3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLAogCQkgICAgICAgdW5zaWduZWQgaW50IGhvc3RfaXJxLCB1aW50MzJfdCBndWVzdF9pcnEsCiAJCSAgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2ZWN0b3IpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmggYi9hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmgKaW5kZXggYTRhZjM5OTQ4Y2YwNC4uYzU4NjBlYTgyOGFlOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuaApAQCAtOCwxNiAmIzQzOzgsMTYgQEAKIAogI2luY2x1ZGUgJmx0O2FzbS9wb3N0ZWRfaW50ci5oJmd0OwogCi12b2lkIHZteF92Y3B1X3BpX2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTsKLXZvaWQgdm14X3ZjcHVfcGlfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiYjNDM7dm9pZCB2dF92Y3B1X3BpX2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTsKJiM0Mzt2b2lkIHZ0X3ZjcHVfcGlfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiB2b2lkIHBpX3dha2V1cF9oYW5kbGVyKHZvaWQpOwogdm9pZCBfX2luaXQgcGlfaW5pdF9jcHUoaW50IGNwdSk7CiB2b2lkIHBpX2FwaWN2X3ByZV9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBib29sIHBpX2hhc19wZW5kaW5nX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwotaW50IHZteF9waV91cGRhdGVfaXJ0ZShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQsIHN0cnVjdCBrdm0gKmt2bSwKJiM0MztpbnQgdnRfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sCiAJCSAgICAgICB1bnNpZ25lZCBpbnQgaG9zdF9pcnEsIHVpbnQzMl90IGd1ZXN0X2lycSwKIAkJICAgICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZlY3Rvcik7Ci12b2lkIHZteF9waV9zdGFydF9ieXBhc3Moc3RydWN0IGt2bSAqa3ZtKTsKJiM0Mzt2b2lkIHZ0X3BpX3N0YXJ0X2J5cGFzcyhzdHJ1Y3Qga3ZtICprdm0pOwogCiBzdGF0aWMgaW5saW5lIGludCBwaV9maW5kX2hpZ2hlc3RfdmVjdG9yKHN0cnVjdCBwaV9kZXNjICpwaV9kZXNjKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmMKaW5kZXggYjI3MmMyMDU4NmE3NC4uZWZiYjFhYzZmNTFlYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jCkBAIC03MTYsNyAmIzQzOzcxNiw3IEBAIHZvaWQgdGR4X3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpCiB7CiAJc3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7CiAKLQl2bXhfdmNwdV9waV9sb2FkKHZjcHUsIGNwdSk7CiYjNDM7CXZ0X3ZjcHVfcGlfbG9hZCh2Y3B1LCBjcHUpOwogCWlmICh2Y3B1LSZndDtjcHUgPT0gY3B1IHx8ICFpc19oa2lkX2Fzc2lnbmVkKHRvX2t2bV90ZHgodmNwdS0mZ3Q7a3ZtKSkpCiAJCXJldHVybjsKIApAQCAtNzQxLDcgJiM0Mzs3NDEsNyBAQCBib29sIHRkeF9pbnRlcnJ1cHRfYWxsb3dlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJICogaW50ZXJydXB0IGlzIGFsd2F5cyBhbGxvd2VkIHVubGVzcyBURFggZ3Vlc3QgY2FsbHMgVERWTUNBTEwgd2l0aCBITFQsCiAJICogd2hpY2ggcGFzc2VzIHRoZSBpbnRlcnJ1cHQgYmxvY2tlZCBmbGFnLgogCSAqLwotCXJldHVybiB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljICE9IEVYSVRfUkVBU09OX0hMVCB8fAomIzQzOwlyZXR1cm4gdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljICE9IEVYSVRfUkVBU09OX0hMVCB8fAogCSAgICAgICAhdG9fdGR4KHZjcHUpLSZndDt2cF9lbnRlcl9hcmdzLnIxMjsKIH0KIApAQCAtNzU5LDcgJiM0Mzs3NTksNyBAQCBzdGF0aWMgYm9vbCB0ZHhfcHJvdGVjdGVkX2FwaWNfaGFzX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJICogb3RoZXJ3aXNlIHRoZSBpbnRlcnJ1cHQgd291bGQgaGF2ZSBiZWVuIHNlcnZpY2VkIGF0IHRoZSBpbnN0cnVjdGlvbgogCSAqIGJvdW5kYXJ5LgogCSAqLwotCWlmICh2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljICE9IEVYSVRfUkVBU09OX0hMVCB8fAomIzQzOwlpZiAodnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljICE9IEVYSVRfUkVBU09OX0hMVCB8fAogCSAgICB0b190ZHgodmNwdSktJmd0O3ZwX2VudGVyX2FyZ3MucjEyKQogCQlyZXR1cm4gZmFsc2U7CiAKQEAgLTgyNiw3ICYjNDM7ODI2LDcgQEAgc3RhdGljIHZvaWQgdGR4X3ByZXBhcmVfc3dpdGNoX3RvX2hvc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiB2b2lkIHRkeF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0Jdm14X3ZjcHVfcGlfcHV0KHZjcHUpOwomIzQzOwl2dF92Y3B1X3BpX3B1dCh2Y3B1KTsKIAl0ZHhfcHJlcGFyZV9zd2l0Y2hfdG9faG9zdCh2Y3B1KTsKIH0KIApAQCAtOTc0LDE1ICYjNDM7OTc0LDE1IEBAIHN0YXRpYyBub2luc3RyIHZvaWQgdGR4X3ZjcHVfZW50ZXJfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJdGR4LSZndDtleGl0X2dwYSA9IHRkeC0mZ3Q7dnBfZW50ZXJfYXJncy5yODsKIAl2dC0mZ3Q7ZXhpdF9pbnRyX2luZm8gPSB0ZHgtJmd0O3ZwX2VudGVyX2FyZ3Mucjk7CiAKLQl2bXhfaGFuZGxlX25taSh2Y3B1KTsKJiM0MzsJdnRfaGFuZGxlX25taSh2Y3B1KTsKIAogCWd1ZXN0X3N0YXRlX2V4aXRfaXJxb2ZmKCk7CiB9CiAKIHN0YXRpYyBib29sIHRkeF9mYWlsZWRfdm1lbnRyeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JcmV0dXJuIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkgJmFtcDsmYW1wOwotCSAgICAgICB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZ1bGwgIT0gLTF1OwomIzQzOwlyZXR1cm4gdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5ICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mdWxsICE9IC0xdTsKIH0KIAogc3RhdGljIGZhc3RwYXRoX3QgdGR4X2V4aXRfaGFuZGxlcnNfZmFzdHBhdGgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtMTEzMSw3ICYjNDM7MTEzMSw3IEBAIHZvaWQgdGR4X2luamVjdF9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiBzdGF0aWMgaW50IHRkeF9oYW5kbGVfZXhjZXB0aW9uX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JdTMyIGludHJfaW5mbyA9IHZteF9nZXRfaW50cl9pbmZvKHZjcHUpOwomIzQzOwl1MzIgaW50cl9pbmZvID0gdnRfZ2V0X2ludHJfaW5mbyh2Y3B1KTsKIAogCS8qCiAJICogTWFjaGluZSBjaGVja3MgYXJlIGhhbmRsZWQgYnkgaGFuZGxlX2V4Y2VwdGlvbl9pcnFvZmYoKSwgb3IgYnkKQEAgLTE4OTUsNyAmIzQzOzE4OTUsNyBAQCB2b2lkIHRkeF9kZWxpdmVyX2ludGVycnVwdChzdHJ1Y3Qga3ZtX2xhcGljICphcGljLCBpbnQgZGVsaXZlcnlfbW9kZSwKIAlzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTsKIAogCS8qIFREWCBzdXBwb3J0cyBvbmx5IHBvc3RlZCBpbnRlcnJ1cHQuICBObyBsYXBpYyBlbXVsYXRpb24uICovCi0JX192bXhfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0KHZjcHUsICZhbXA7dGR4LSZndDt2dC5waV9kZXNjLCB2ZWN0b3IpOwomIzQzOwlfX3Z0X2RlbGl2ZXJfcG9zdGVkX2ludGVycnVwdCh2Y3B1LCAmYW1wO3RkeC0mZ3Q7dnQucGlfZGVzYywgdmVjdG9yKTsKIAogCXRyYWNlX2t2bV9hcGljdl9hY2NlcHRfaXJxKHZjcHUtJmd0O3ZjcHVfaWQsIGRlbGl2ZXJ5X21vZGUsIHRyaWdfbW9kZSwgdmVjdG9yKTsKIH0KQEAgLTE5MDMsNyAmIzQzOzE5MDMsNyBAQCB2b2lkIHRkeF9kZWxpdmVyX2ludGVycnVwdChzdHJ1Y3Qga3ZtX2xhcGljICphcGljLCBpbnQgZGVsaXZlcnlfbW9kZSwKIHN0YXRpYyBpbmxpbmUgYm9vbCB0ZHhfaXNfc2VwdF92aW9sYXRpb25fdW5leHBlY3RlZF9wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAl1NjQgZWVxX3R5cGUgPSB0b190ZHgodmNwdSktJmd0O2V4dF9leGl0X3F1YWxpZmljYXRpb24gJmFtcDsgVERYX0VYVF9FWElUX1FVQUxfVFlQRV9NQVNLOwotCXU2NCBlcSA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpOwomIzQzOwl1NjQgZXEgPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpOwogCiAJaWYgKGVlcV90eXBlICE9IFREWF9FWFRfRVhJVF9RVUFMX1RZUEVfUEVORElOR19FUFRfVklPTEFUSU9OKQogCQlyZXR1cm4gZmFsc2U7CkBAIC0xOTM5LDcgJiM0MzsxOTM5LDcgQEAgc3RhdGljIGludCB0ZHhfaGFuZGxlX2VwdF92aW9sYXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCQkvKiBPbmx5IHByaXZhdGUgR1BBIHRyaWdnZXJzIHplcm8tc3RlcCBtaXRpZ2F0aW9uICovCiAJCWxvY2FsX3JldHJ5ID0gdHJ1ZTsKIAl9IGVsc2UgewotCQlleGl0X3F1YWwgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKJiM0MzsJCWV4aXRfcXVhbCA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7CiAJCS8qCiAJCSAqIEVQVCB2aW9sYXRpb24gZHVlIHRvIGluc3RydWN0aW9uIGZldGNoIHNob3VsZCBuZXZlciBiZQogCQkgKiB0cmlnZ2VyZWQgZnJvbSBzaGFyZWQgbWVtb3J5IGluIFREWCBndWVzdC4gIElmIHN1Y2ggRVBUCkBAIC0xOTg3LDcgJiM0MzsxOTg3LDcgQEAgc3RhdGljIGludCB0ZHhfaGFuZGxlX2VwdF92aW9sYXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXdoaWxlICgxKSB7CiAJCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7CiAKLQkJcmV0ID0gX192bXhfaGFuZGxlX2VwdF92aW9sYXRpb24odmNwdSwgZ3BhLCBleGl0X3F1YWwpOwomIzQzOwkJcmV0ID0gX192dF9oYW5kbGVfZXB0X3Zpb2xhdGlvbih2Y3B1LCBncGEsIGV4aXRfcXVhbCk7CiAKIAkJaWYgKHJldCAhPSBSRVRfUEZfUkVUUlkgfHwgIWxvY2FsX3JldHJ5KQogCQkJYnJlYWs7CkBAIC0yMDIxLDcgJiM0MzsyMDIxLDcgQEAgaW50IHRkeF9jb21wbGV0ZV9lbXVsYXRlZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZXJyKQogCQlyZXR1cm4gMTsKIAl9CiAKLQlpZiAodm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYyA9PSBFWElUX1JFQVNPTl9NU1JfUkVBRCkKJiM0MzsJaWYgKHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYyA9PSBFWElUX1JFQVNPTl9NU1JfUkVBRCkKIAkJdGR2bWNhbGxfc2V0X3JldHVybl92YWwodmNwdSwga3ZtX3JlYWRfZWR4X2VheCh2Y3B1KSk7CiAKIAlyZXR1cm4gMTsKQEAgLTIwMzIsNyAmIzQzOzIwMzIsNyBAQCBpbnQgdGR4X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBmYXN0cGF0aCkKIHsKIAlzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTsKIAl1NjQgdnBfZW50ZXJfcmV0ID0gdGR4LSZndDt2cF9lbnRlcl9yZXQ7Ci0JdW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uID0gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KTsKJiM0MzsJdW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uID0gdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpOwogCiAJaWYgKGZhc3RwYXRoICE9IEVYSVRfRkFTVFBBVEhfTk9ORSkKIAkJcmV0dXJuIDE7CkBAIC0yMTQyLDkgJiM0MzsyMTQyLDkgQEAgdm9pZCB0ZHhfZ2V0X2V4aXRfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiAqcmVhc29uLAogCiAJKnJlYXNvbiA9IHRkeC0mZ3Q7dnQuZXhpdF9yZWFzb24uZnVsbDsKIAlpZiAoKnJlYXNvbiAhPSAtMXUpIHsKLQkJKmluZm8xID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7CiYjNDM7CQkqaW5mbzEgPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpOwogCQkqaW5mbzIgPSB0ZHgtJmd0O2V4dF9leGl0X3F1YWxpZmljYXRpb247Ci0JCSppbnRyX2luZm8gPSB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KTsKJiM0MzsJCSppbnRyX2luZm8gPSB2dF9nZXRfaW50cl9pbmZvKHZjcHUpOwogCX0gZWxzZSB7CiAJCSppbmZvMSA9IDA7CiAJCSppbmZvMiA9IDA7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jIGIvYXJjaC94ODYva3ZtL3ZteC92bXguYwppbmRleCA1MDQ2MzBmMGViNDBmLi43ZTM1YzJkMDNjNjllIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmMKQEAgLTE1NzcsMTIgJiM0MzsxNTc3LDEyIEBAIHZvaWQgdm14X3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpCiAKIAl2bXhfdmNwdV9sb2FkX3ZtY3ModmNwdSwgY3B1KTsKIAotCXZteF92Y3B1X3BpX2xvYWQodmNwdSwgY3B1KTsKJiM0MzsJdnRfdmNwdV9waV9sb2FkKHZjcHUsIGNwdSk7CiB9CiAKIHZvaWQgdm14X3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQl2bXhfdmNwdV9waV9wdXQodmNwdSk7CiYjNDM7CXZ0X3ZjcHVfcGlfcHV0KHZjcHUpOwogCiAJdm14X3ByZXBhcmVfc3dpdGNoX3RvX2hvc3QodG9fdm14KHZjcHUpKTsKIH0KQEAgLTE3OTEsNyAmIzQzOzE3OTEsNyBAQCBpbnQgdm14X2NoZWNrX2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZW11bF90eXBlLAogCSAqIHNvIHRoYXQgZ3Vlc3QgdXNlcnNwYWNlIGNhbiYjMzk7dCBEb1MgdGhlIGd1ZXN0IHNpbXBseSBieSB0cmlnZ2VyaW5nCiAJICogZW11bGF0aW9uIChlbmNsYXZlcyBhcmUgQ1BMMyBvbmx5KS4KIAkgKi8KLQlpZiAodm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5lbmNsYXZlX21vZGUpIHsKJiM0MzsJaWYgKHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5lbmNsYXZlX21vZGUpIHsKIAkJa3ZtX3F1ZXVlX2V4Y2VwdGlvbih2Y3B1LCBVRF9WRUNUT1IpOwogCQlyZXR1cm4gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQ7CiAJfQpAQCAtMTgwNiw3ICYjNDM7MTgwNiw3IEBAIGludCB2bXhfY2hlY2tfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlbXVsX3R5cGUsCiAKIHN0YXRpYyBpbnQgc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JdW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uID0gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KTsKJiM0MzsJdW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uID0gdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpOwogCXVuc2lnbmVkIGxvbmcgcmlwLCBvcmlnX3JpcDsKIAl1MzIgaW5zdHJfbGVuOwogCkBAIC00NDI0LDcgJiM0Mzs0NDI0LDcgQEAgc3RhdGljIGludCB2bXhfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHZlY3RvcikKIAlpZiAoIXZjcHUtJmd0O2FyY2guYXBpYy0mZ3Q7YXBpY3ZfYWN0aXZlKQogCQlyZXR1cm4gLTE7CiAKLQlfX3ZteF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHQodmNwdSwgJmFtcDt2dC0mZ3Q7cGlfZGVzYywgdmVjdG9yKTsKJiM0MzsJX192dF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHQodmNwdSwgJmFtcDt2dC0mZ3Q7cGlfZGVzYywgdmVjdG9yKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTM3OSwxNSAmIzQzOzUzNzksOSBAQCBib29sIHZteF9ndWVzdF9pbmplY3RfYWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCSAgICAgICAoa3ZtX2dldF9yZmxhZ3ModmNwdSkgJmFtcDsgWDg2X0VGTEFHU19BQyk7CiB9CiAKLXN0YXRpYyBib29sIGlzX3hmZF9ubV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCi17Ci0JcmV0dXJuIHZjcHUtJmd0O2FyY2guZ3Vlc3RfZnB1LmZwc3RhdGUtJmd0O3hmZCAmYW1wOyZhbXA7Ci0JICAgICAgICFrdm1faXNfY3IwX2JpdF9zZXQodmNwdSwgWDg2X0NSMF9UUyk7Ci19Ci0KIHN0YXRpYyBpbnQgdm14X2hhbmRsZV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGVycm9yX2NvZGUpCiB7Ci0JdW5zaWduZWQgbG9uZyBjcjIgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKJiM0MzsJdW5zaWduZWQgbG9uZyBjcjIgPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpOwogCiAJaWYgKHZjcHUtJmd0O2FyY2guYXBmLmhvc3RfYXBmX2ZsYWdzKQogCQlnb3RvIGhhbmRsZV9wZjsKQEAgLTU0MzUsNyAmIzQzOzU0MjksNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9leGNlcHRpb25fbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAl1MzIgdmVjdF9pbmZvOwogCiAJdmVjdF9pbmZvID0gdm14LSZndDtpZHRfdmVjdG9yaW5nX2luZm87Ci0JaW50cl9pbmZvID0gdm14X2dldF9pbnRyX2luZm8odmNwdSk7CiYjNDM7CWludHJfaW5mbyA9IHZ0X2dldF9pbnRyX2luZm8odmNwdSk7CiAKIAkvKgogCSAqIE1hY2hpbmUgY2hlY2tzIGFyZSBoYW5kbGVkIGJ5IGhhbmRsZV9leGNlcHRpb25faXJxb2ZmKCksIG9yIGJ5CkBAIC01NTE2LDcgJiM0Mzs1NTEwLDcgQEAgc3RhdGljIGludCBoYW5kbGVfZXhjZXB0aW9uX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIAlzd2l0Y2ggKGV4X25vKSB7CiAJY2FzZSBEQl9WRUNUT1I6Ci0JCWRyNiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpOwomIzQzOwkJZHI2ID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKIAkJaWYgKCEodmNwdS0mZ3Q7Z3Vlc3RfZGVidWcgJmFtcDsKIAkJICAgICAgKEtWTV9HVUVTVERCR19TSU5HTEVTVEVQIHwgS1ZNX0dVRVNUREJHX1VTRV9IV19CUCkpKSB7CiAJCQkvKgpAQCAtNTU5Miw3ICYjNDM7NTU4Niw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2lvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpbnQgc2l6ZSwgaW4sIHN0cmluZzsKIAl1bnNpZ25lZCBwb3J0OwogCi0JZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7CiYjNDM7CWV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7CiAJc3RyaW5nID0gKGV4aXRfcXVhbGlmaWNhdGlvbiAmYW1wOyAxNikgIT0gMDsKIAogCSYjNDM7JiM0Mzt2Y3B1LSZndDtzdGF0LmlvX2V4aXRzOwpAQCAtNTY4MSw3ICYjNDM7NTY3NSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpbnQgZXJyOwogCWludCByZXQ7CiAKLQlleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKJiM0MzsJZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKIAljciA9IGV4aXRfcXVhbGlmaWNhdGlvbiAmYW1wOyAxNTsKIAlyZWcgPSAoZXhpdF9xdWFsaWZpY2F0aW9uICZndDsmZ3Q7IDgpICZhbXA7IDE1OwogCXN3aXRjaCAoKGV4aXRfcXVhbGlmaWNhdGlvbiAmZ3Q7Jmd0OyA0KSAmYW1wOyAzKSB7CkBAIC01NzU5LDcgJiM0Mzs1NzUzLDcgQEAgc3RhdGljIGludCBoYW5kbGVfZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCWludCBkciwgZHI3LCByZWc7CiAJaW50IGVyciA9IDE7CiAKLQlleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKJiM0MzsJZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKIAlkciA9IGV4aXRfcXVhbGlmaWNhdGlvbiAmYW1wOyBERUJVR19SRUdfQUNDRVNTX05VTTsKIAogCS8qIEZpcnN0LCBpZiBEUiBkb2VzIG5vdCBleGlzdCwgdHJpZ2dlciBVRCAqLwpAQCAtNTg1NSw3ICYjNDM7NTg0OSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2ludGVycnVwdF93aW5kb3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiBzdGF0aWMgaW50IGhhbmRsZV9pbnZscGcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCXVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKIAogCWt2bV9tbXVfaW52bHBnKHZjcHUsIGV4aXRfcXVhbGlmaWNhdGlvbik7CiAJcmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpOwpAQCAtNTg2NCw3ICYjNDM7NTg1OCw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2ludmxwZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiBzdGF0aWMgaW50IGhhbmRsZV9hcGljX2FjY2VzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJaWYgKGxpa2VseShmYXN0ZW9pKSkgewotCQl1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpOwomIzQzOwkJdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpOwogCQlpbnQgYWNjZXNzX3R5cGUsIG9mZnNldDsKIAogCQlhY2Nlc3NfdHlwZSA9IGV4aXRfcXVhbGlmaWNhdGlvbiAmYW1wOyBBUElDX0FDQ0VTU19UWVBFOwpAQCAtNTg4NSw3ICYjNDM7NTg3OSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2FwaWNfYWNjZXNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogc3RhdGljIGludCBoYW5kbGVfYXBpY19lb2lfaW5kdWNlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKJiM0MzsJdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpOwogCWludCB2ZWN0b3IgPSBleGl0X3F1YWxpZmljYXRpb24gJmFtcDsgMHhmZjsKIAogCS8qIEVPSS1pbmR1Y2VkIFZNIGV4aXQgaXMgdHJhcC1saWtlIGFuZCB0aHVzIG5vIG5lZWQgdG8gYWRqdXN0IElQICovCkBAIC01ODk1LDcgJiM0Mzs1ODg5LDcgQEAgc3RhdGljIGludCBoYW5kbGVfYXBpY19lb2lfaW5kdWNlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIHN0YXRpYyBpbnQgaGFuZGxlX2FwaWNfd3JpdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCXVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKIAogCS8qCiAJICogQVBJQy13cml0ZSBWTS1FeGl0IGlzIHRyYXAtbGlrZSwgS1ZNIGRvZXNuJiMzOTt0IG5lZWQgdG8gYWR2YW5jZSBSSVAgYW5kCkBAIC01OTIzLDcgJiM0Mzs1OTE3LDcgQEAgc3RhdGljIGludCBoYW5kbGVfdGFza19zd2l0Y2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCWlkdF9pbmRleCA9ICh2bXgtJmd0O2lkdF92ZWN0b3JpbmdfaW5mbyAmYW1wOyBWRUNUT1JJTkdfSU5GT19WRUNUT1JfTUFTSyk7CiAJdHlwZSA9ICh2bXgtJmd0O2lkdF92ZWN0b3JpbmdfaW5mbyAmYW1wOyBWRUNUT1JJTkdfSU5GT19UWVBFX01BU0spOwogCi0JZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7CiYjNDM7CWV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7CiAKIAlyZWFzb24gPSAodTMyKWV4aXRfcXVhbGlmaWNhdGlvbiAmZ3Q7Jmd0OyAzMDsKIAlpZiAocmVhc29uID09IFRBU0tfU1dJVENIX0dBVEUgJmFtcDsmYW1wOyBpZHRfdikgewpAQCAtNTk2OSw3ICYjNDM7NTk2Myw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3Rhc2tfc3dpdGNoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogc3RhdGljIGludCBoYW5kbGVfZXB0X3Zpb2xhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKJiM0MzsJdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpOwogCWdwYV90IGdwYTsKIAogCS8qCkBAIC01OTk3LDcgJiM0Mzs1OTkxLDcgQEAgc3RhdGljIGludCBoYW5kbGVfZXB0X3Zpb2xhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJaWYgKHVubGlrZWx5KGFsbG93X3NtYWxsZXJfbWF4cGh5YWRkciAmYW1wOyZhbXA7ICFrdm1fdmNwdV9pc19sZWdhbF9ncGEodmNwdSwgZ3BhKSkpCiAJCXJldHVybiBrdm1fZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCAwKTsKIAotCXJldHVybiBfX3ZteF9oYW5kbGVfZXB0X3Zpb2xhdGlvbih2Y3B1LCBncGEsIGV4aXRfcXVhbGlmaWNhdGlvbik7CiYjNDM7CXJldHVybiBfX3Z0X2hhbmRsZV9lcHRfdmlvbGF0aW9uKHZjcHUsIGdwYSwgZXhpdF9xdWFsaWZpY2F0aW9uKTsKIH0KIAogc3RhdGljIGludCBoYW5kbGVfZXB0X21pc2NvbmZpZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC02MTYwLDcgJiM0Mzs2MTU0LDcgQEAgc3RhdGljIGludCBoYW5kbGVfaW52cGNpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJLyogQWNjb3JkaW5nIHRvIHRoZSBJbnRlbCBpbnN0cnVjdGlvbiByZWZlcmVuY2UsIHRoZSBtZW1vcnkgb3BlcmFuZAogCSAqIGlzIHJlYWQgZXZlbiBpZiBpdCBpc24mIzM5O3QgbmVlZGVkIChlLmcuLCBmb3IgdHlwZT09YWxsKQogCSAqLwotCWlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpLAomIzQzOwlpZiAoZ2V0X3ZteF9tZW1fYWRkcmVzcyh2Y3B1LCB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpLAogCQkJCXZteF9pbnN0cnVjdGlvbl9pbmZvLCBmYWxzZSwKIAkJCQlzaXplb2Yob3BlcmFuZCksICZhbXA7Z3ZhKSkKIAkJcmV0dXJuIDE7CkBAIC02MTc0LDcgJiM0Mzs2MTY4LDcgQEAgc3RhdGljIGludCBoYW5kbGVfcG1sX2Z1bGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiAJdHJhY2Vfa3ZtX3BtbF9mdWxsKHZjcHUtJmd0O3ZjcHVfaWQpOwogCi0JZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7CiYjNDM7CWV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7CiAKIAkvKgogCSAqIFBNTCBidWZmZXIgRlVMTCBoYXBwZW5lZCB3aGlsZSBleGVjdXRpbmcgaXJldCBmcm9tIE5NSSwKQEAgLTYyNzgsNyAmIzQzOzYyNzIsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9idXNfbG9ja192bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiBzdGF0aWMgaW50IGhhbmRsZV9ub3RpZnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCXVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKIAlib29sIGNvbnRleHRfaW52YWxpZCA9IGV4aXRfcXVhbCAmYW1wOyBOT1RJRllfVk1fQ09OVEVYVF9JTlZBTElEOwogCiAJJiM0MzsmIzQzO3ZjcHUtJmd0O3N0YXQubm90aWZ5X3dpbmRvd19leGl0czsKQEAgLTYzMDksMTMgJiM0Mzs2MzAzLDEzIEBAIHN0YXRpYyBpbnQgdm14X2dldF9tc3JfaW1tX3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIHN0YXRpYyBpbnQgaGFuZGxlX3JkbXNyX2ltbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JcmV0dXJuIGt2bV9lbXVsYXRlX3JkbXNyX2ltbSh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSwKJiM0MzsJcmV0dXJuIGt2bV9lbXVsYXRlX3JkbXNyX2ltbSh2Y3B1LCB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpLAogCQkJCSAgICAgdm14X2dldF9tc3JfaW1tX3JlZyh2Y3B1KSk7CiB9CiAKIHN0YXRpYyBpbnQgaGFuZGxlX3dybXNyX2ltbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JcmV0dXJuIGt2bV9lbXVsYXRlX3dybXNyX2ltbSh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSwKJiM0MzsJcmV0dXJuIGt2bV9lbXVsYXRlX3dybXNyX2ltbSh2Y3B1LCB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpLAogCQkJCSAgICAgdm14X2dldF9tc3JfaW1tX3JlZyh2Y3B1KSk7CiB9CiAKQEAgLTYzOTIsMTAgJiM0Mzs2Mzg2LDEwIEBAIHZvaWQgdm14X2dldF9leGl0X2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgKnJlYXNvbiwKIAlzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTsKIAogCSpyZWFzb24gPSB2bXgtJmd0O3Z0LmV4aXRfcmVhc29uLmZ1bGw7Ci0JKmluZm8xID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7CiYjNDM7CSppbmZvMSA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7CiAJaWYgKCEodm14LSZndDt2dC5leGl0X3JlYXNvbi5mYWlsZWRfdm1lbnRyeSkpIHsKIAkJKmluZm8yID0gdm14LSZndDtpZHRfdmVjdG9yaW5nX2luZm87Ci0JCSppbnRyX2luZm8gPSB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KTsKJiM0MzsJCSppbnRyX2luZm8gPSB2dF9nZXRfaW50cl9pbmZvKHZjcHUpOwogCQlpZiAoaXNfZXhjZXB0aW9uX3dpdGhfZXJyb3JfY29kZSgqaW50cl9pbmZvKSkKIAkJCSplcnJvcl9jb2RlID0gdm1jc19yZWFkMzIoVk1fRVhJVF9JTlRSX0VSUk9SX0NPREUpOwogCQllbHNlCkBAIC02NzA2LDcgJiM0Mzs2NzAwLDcgQEAgdm9pZCBkdW1wX3ZtY3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogc3RhdGljIGludCBfX3ZteF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aCkKIHsKIAlzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTsKLQl1bmlvbiB2bXhfZXhpdF9yZWFzb24gZXhpdF9yZWFzb24gPSB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpOwomIzQzOwl1bmlvbiB2bXhfZXhpdF9yZWFzb24gZXhpdF9yZWFzb24gPSB2dF9nZXRfZXhpdF9yZWFzb24odmNwdSk7CiAJdTMyIHZlY3RvcmluZ19pbmZvID0gdm14LSZndDtpZHRfdmVjdG9yaW5nX2luZm87CiAJdTE2IGV4aXRfaGFuZGxlcl9pbmRleDsKIApAQCAtNjg3MCw3ICYjNDM7Njg2NCw3IEBAIGludCB2bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpCiAJICogRXhpdCB0byB1c2VyIHNwYWNlIHdoZW4gYnVzIGxvY2sgZGV0ZWN0ZWQgdG8gaW5mb3JtIHRoYXQgdGhlcmUgaXMKIAkgKiBhIGJ1cyBsb2NrIGluIGd1ZXN0LgogCSAqLwotCWlmICh2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJ1c19sb2NrX2RldGVjdGVkKSB7CiYjNDM7CWlmICh2dF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYnVzX2xvY2tfZGV0ZWN0ZWQpIHsKIAkJaWYgKHJldCAmZ3Q7IDApCiAJCQl2Y3B1LSZndDtydW4tJmd0O2V4aXRfcmVhc29uID0gS1ZNX0VYSVRfWDg2X0JVU19MT0NLOwogCkBAIC03MTQzLDc0ICYjNDM7NzEzNyw2IEBAIHZvaWQgdm14X2xvYWRfZW9pX2V4aXRtYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKmVvaV9leGl0X2JpdG1hcCkKIAl2bWNzX3dyaXRlNjQoRU9JX0VYSVRfQklUTUFQMywgZW9pX2V4aXRfYml0bWFwWzNdKTsKIH0KIAotc3RhdGljIHZvaWQgaGFuZGxlX25tX2ZhdWx0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCi17Ci0JLyoKLQkgKiBTYXZlIHhmZF9lcnIgdG8gZ3Vlc3RfZnB1IGJlZm9yZSBpbnRlcnJ1cHQgaXMgZW5hYmxlZCwgc28gdGhlCi0JICogTVNSIHZhbHVlIGlzIG5vdCBjbG9iYmVyZWQgYnkgdGhlIGhvc3QgYWN0aXZpdHkgYmVmb3JlIHRoZSBndWVzdAotCSAqIGhhcyBjaGFuY2UgdG8gY29uc3VtZSBpdC4KLQkgKgotCSAqIFVwZGF0ZSB0aGUgZ3Vlc3QmIzM5O3MgWEZEX0VSUiBpZiBhbmQgb25seSBpZiBYRkQgaXMgZW5hYmxlZCwgYXMgdGhlICNOTQotCSAqIGludGVyY2VwdGlvbiBtYXkgaGF2ZSBiZWVuIGNhdXNlZCBieSBMMSBpbnRlcmNlcHRpb24uICBQZXIgdGhlIFNETSwKLQkgKiBYRkRfRVJSIGlzIG5vdCBtb2RpZmllZCBmb3Igbm9uLVhGRCAjTk0sIGkuZS4gaWYgQ1IwLlRTPTEuCi0JICoKLQkgKiBOb3RlLCBYRkRfRVJSIGlzIHVwZGF0ZWQgX2JlZm9yZV8gdGhlICNOTSBpbnRlcmNlcHRpb24gY2hlY2ssIGkuZS4KLQkgKiB1bmxpa2UgQ1IyIGFuZCBEUjYsIHRoZSB2YWx1ZSBpcyBub3QgYSBwYXlsb2FkIHRoYXQgaXMgYXR0YWNoZWQgdG8KLQkgKiB0aGUgI05NIGV4Y2VwdGlvbi4KLQkgKi8KLQlpZiAoaXNfeGZkX25tX2ZhdWx0KHZjcHUpKQotCQlyZG1zcnEoTVNSX0lBMzJfWEZEX0VSUiwgdmNwdS0mZ3Q7YXJjaC5ndWVzdF9mcHUueGZkX2Vycik7Ci19Ci0KLXN0YXRpYyB2b2lkIGhhbmRsZV9leGNlcHRpb25faXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGludHJfaW5mbykKLXsKLQkvKiBpZiBleGl0IGR1ZSB0byBQRiBjaGVjayBmb3IgYXN5bmMgUEYgKi8KLQlpZiAoaXNfcGFnZV9mYXVsdChpbnRyX2luZm8pKQotCQl2Y3B1LSZndDthcmNoLmFwZi5ob3N0X2FwZl9mbGFncyA9IGt2bV9yZWFkX2FuZF9yZXNldF9hcGZfZmxhZ3MoKTsKLQkvKiBpZiBleGl0IGR1ZSB0byBOTSwgaGFuZGxlIGJlZm9yZSBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkICovCi0JZWxzZSBpZiAoaXNfbm1fZmF1bHQoaW50cl9pbmZvKSkKLQkJaGFuZGxlX25tX2ZhdWx0X2lycW9mZih2Y3B1KTsKLQkvKiBIYW5kbGUgbWFjaGluZSBjaGVja3MgYmVmb3JlIGludGVycnVwdHMgYXJlIGVuYWJsZWQgKi8KLQllbHNlIGlmIChpc19tYWNoaW5lX2NoZWNrKGludHJfaW5mbykpCi0JCWt2bV9tYWNoaW5lX2NoZWNrKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGhhbmRsZV9leHRlcm5hbF9pbnRlcnJ1cHRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLQkJCQkJICAgICB1MzIgaW50cl9pbmZvKQotewotCXVuc2lnbmVkIGludCB2ZWN0b3IgPSBpbnRyX2luZm8gJmFtcDsgSU5UUl9JTkZPX1ZFQ1RPUl9NQVNLOwotCi0JaWYgKEtWTV9CVUcoIWlzX2V4dGVybmFsX2ludHIoaW50cl9pbmZvKSwgdmNwdS0mZ3Q7a3ZtLAotCSAgICAmIzM0O3VuZXhwZWN0ZWQgVk0tRXhpdCBpbnRlcnJ1cHQgaW5mbzogMHgleCYjMzQ7LCBpbnRyX2luZm8pKQotCQlyZXR1cm47Ci0KLQlrdm1fYmVmb3JlX2ludGVycnVwdCh2Y3B1LCBLVk1fSEFORExJTkdfSVJRKTsKLQl4ODZfZW50cnlfZnJvbV9rdm0oRVZFTlRfVFlQRV9FWFRJTlQsIHZlY3Rvcik7Ci0Ja3ZtX2FmdGVyX2ludGVycnVwdCh2Y3B1KTsKLQotCXZjcHUtJmd0O2FyY2guYXRfaW5zdHJ1Y3Rpb25fYm91bmRhcnkgPSB0cnVlOwotfQotCi12b2lkIHZteF9oYW5kbGVfZXhpdF9pcnFvZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQotewotCWlmICh0b192dCh2Y3B1KS0mZ3Q7ZW11bGF0aW9uX3JlcXVpcmVkKQotCQlyZXR1cm47Ci0KLQlzd2l0Y2ggKHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMpIHsKLQljYXNlIEVYSVRfUkVBU09OX0VYVEVSTkFMX0lOVEVSUlVQVDoKLQkJaGFuZGxlX2V4dGVybmFsX2ludGVycnVwdF9pcnFvZmYodmNwdSwgdm14X2dldF9pbnRyX2luZm8odmNwdSkpOwotCQlicmVhazsKLQljYXNlIEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUk6Ci0JCWhhbmRsZV9leGNlcHRpb25faXJxb2ZmKHZjcHUsIHZteF9nZXRfaW50cl9pbmZvKHZjcHUpKTsKLQkJYnJlYWs7Ci0JY2FzZSBFWElUX1JFQVNPTl9NQ0VfRFVSSU5HX1ZNRU5UUlk6Ci0JCWt2bV9tYWNoaW5lX2NoZWNrKCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLX0KLQogLyoKICAqIFRoZSBrdm0gcGFyYW1ldGVyIGNhbiBiZSBOVUxMIChtb2R1bGUgaW5pdGlhbGl6YXRpb24sIG9yIGludm9jYXRpb24gYmVmb3JlCiAgKiBWTSBjcmVhdGlvbikuIEJlIHN1cmUgdG8gY2hlY2sgdGhlIGt2bSBwYXJhbWV0ZXIgYmVmb3JlIHVzaW5nIGl0LgpAQCAtNzI1MCw3ICYjNDM7NzE3Niw3IEBAIHN0YXRpYyB2b2lkIHZteF9yZWNvdmVyX25taV9ibG9ja2luZyhzdHJ1Y3QgdmNwdV92bXggKnZteCkKIAkJaWYgKHZteC0mZ3Q7bG9hZGVkX3ZtY3MtJmd0O25taV9rbm93bl91bm1hc2tlZCkKIAkJCXJldHVybjsKIAotCQlleGl0X2ludHJfaW5mbyA9IHZteF9nZXRfaW50cl9pbmZvKCZhbXA7dm14LSZndDt2Y3B1KTsKJiM0MzsJCWV4aXRfaW50cl9pbmZvID0gdnRfZ2V0X2ludHJfaW5mbygmYW1wO3ZteC0mZ3Q7dmNwdSk7CiAJCXVuYmxvY2tfbm1pID0gKGV4aXRfaW50cl9pbmZvICZhbXA7IElOVFJfSU5GT19VTkJMT0NLX05NSSkgIT0gMDsKIAkJdmVjdG9yID0gZXhpdF9pbnRyX2luZm8gJmFtcDsgSU5UUl9JTkZPX1ZFQ1RPUl9NQVNLOwogCQkvKgpAQCAtNzQxNywxNCAmIzQzOzczNDMsMTQgQEAgc3RhdGljIGZhc3RwYXRoX3Qgdm14X2V4aXRfaGFuZGxlcnNfZmFzdHBhdGgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCSAqIHRoZSBmYXN0cGF0aCBldmVuLCBhbGwgb3RoZXIgZXhpdHMgbXVzdCB1c2UgdGhlIHNsb3cgcGF0aC4KIAkgKi8KIAlpZiAoaXNfZ3Vlc3RfbW9kZSh2Y3B1KSAmYW1wOyZhbXA7Ci0JICAgIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMgIT0gRVhJVF9SRUFTT05fUFJFRU1QVElPTl9USU1FUikKJiM0MzsJICAgIHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYyAhPSBFWElUX1JFQVNPTl9QUkVFTVBUSU9OX1RJTUVSKQogCQlyZXR1cm4gRVhJVF9GQVNUUEFUSF9OT05FOwogCi0Jc3dpdGNoICh2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljKSB7CiYjNDM7CXN3aXRjaCAodnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljKSB7CiAJY2FzZSBFWElUX1JFQVNPTl9NU1JfV1JJVEU6CiAJCXJldHVybiBoYW5kbGVfZmFzdHBhdGhfd3Jtc3IodmNwdSk7CiAJY2FzZSBFWElUX1JFQVNPTl9NU1JfV1JJVEVfSU1NOgotCQlyZXR1cm4gaGFuZGxlX2Zhc3RwYXRoX3dybXNyX2ltbSh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSwKJiM0MzsJCXJldHVybiBoYW5kbGVfZmFzdHBhdGhfd3Jtc3JfaW1tKHZjcHUsIHZ0X2dldF9leGl0X3F1YWwodmNwdSksCiAJCQkJCQkgdm14X2dldF9tc3JfaW1tX3JlZyh2Y3B1KSk7CiAJY2FzZSBFWElUX1JFQVNPTl9QUkVFTVBUSU9OX1RJTUVSOgogCQlyZXR1cm4gaGFuZGxlX2Zhc3RwYXRoX3ByZWVtcHRpb25fdGltZXIodmNwdSwgZm9yY2VfaW1tZWRpYXRlX2V4aXQpOwpAQCAtNzQzNywxNyAmIzQzOzczNjMsNiBAQCBzdGF0aWMgZmFzdHBhdGhfdCB2bXhfZXhpdF9oYW5kbGVyc19mYXN0cGF0aChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJfQogfQogCi1ub2luc3RyIHZvaWQgdm14X2hhbmRsZV9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQotewotCWlmICgodTE2KXZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMgIT0gRVhJVF9SRUFTT05fRVhDRVBUSU9OX05NSSB8fAotCSAgICAhaXNfbm1pKHZteF9nZXRfaW50cl9pbmZvKHZjcHUpKSkKLQkJcmV0dXJuOwotCi0Ja3ZtX2JlZm9yZV9pbnRlcnJ1cHQodmNwdSwgS1ZNX0hBTkRMSU5HX05NSSk7Ci0JeDg2X2VudHJ5X2Zyb21fa3ZtKEVWRU5UX1RZUEVfTk1JLCBOTUlfVkVDVE9SKTsKLQlrdm1fYWZ0ZXJfaW50ZXJydXB0KHZjcHUpOwotfQotCiBzdGF0aWMgbm9pbnN0ciB2b2lkIHZteF92Y3B1X2VudGVyX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJCQl1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CkBAIC03NDc3LDEwICYjNDM7NzM5MiwxMCBAQCBzdGF0aWMgbm9pbnN0ciB2b2lkIHZteF92Y3B1X2VudGVyX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCX0KIAogCXZteC0mZ3Q7dnQuZXhpdF9yZWFzb24uZnVsbCA9IHZtY3NfcmVhZDMyKFZNX0VYSVRfUkVBU09OKTsKLQlpZiAobGlrZWx5KCF2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5KSkKJiM0MzsJaWYgKGxpa2VseSghdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5KSkKIAkJdm14LSZndDtpZHRfdmVjdG9yaW5nX2luZm8gPSB2bWNzX3JlYWQzMihJRFRfVkVDVE9SSU5HX0lORk9fRklFTEQpOwogCi0Jdm14X2hhbmRsZV9ubWkodmNwdSk7CiYjNDM7CXZ0X2hhbmRsZV9ubWkodmNwdSk7CiAKIG91dDoKIAlndWVzdF9zdGF0ZV9leGl0X2lycW9mZigpOwpAQCAtNzYxNyw3ICYjNDM7NzUzMiw3IEBAIGZhc3RwYXRoX3Qgdm14X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncykKIAkJICogY2hlY2tpbmcuCiAJCSAqLwogCQlpZiAodmNwdS0mZ3Q7YXJjaC5uZXN0ZWRfcnVuX3BlbmRpbmcgJmFtcDsmYW1wOwotCQkgICAgIXZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkpCiYjNDM7CQkgICAgIXZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mYWlsZWRfdm1lbnRyeSkKIAkJCSYjNDM7JiM0Mzt2Y3B1LSZndDtzdGF0Lm5lc3RlZF9ydW47CiAKIAkJdmNwdS0mZ3Q7YXJjaC5uZXN0ZWRfcnVuX3BlbmRpbmcgPSAwOwpAQCAtNzYyOCw3ICYjNDM7NzU0Myw3IEBAIGZhc3RwYXRoX3Qgdm14X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncykKIAogCXRyYWNlX2t2bV9leGl0KHZjcHUsIEtWTV9JU0FfVk1YKTsKIAotCWlmICh1bmxpa2VseSh2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5KSkKJiM0MzsJaWYgKHVubGlrZWx5KHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mYWlsZWRfdm1lbnRyeSkpCiAJCXJldHVybiBFWElUX0ZBU1RQQVRIX05PTkU7CiAKIAl2bXgtJmd0O2xvYWRlZF92bWNzLSZndDtsYXVuY2hlZCA9IDE7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oIGIvYXJjaC94ODYva3ZtL3ZteC92bXguaAppbmRleCBkYzg1MTdmMTViYzQ2Li4zMjQ3YjU1YjM0ODQzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmgKQEAgLTMwNCw0MyAmIzQzOzMwNCw2IEBAIHN0cnVjdCBrdm1fdm14IHsKIAl1NjQgKnBpZF90YWJsZTsKIH07CiAKLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IHZjcHVfdnQgKnRvX3Z0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKLXsKLQlyZXR1cm4gJmFtcDsoY29udGFpbmVyX29mKHZjcHUsIHN0cnVjdCB2Y3B1X3ZteCwgdmNwdSktJmd0O3Z0KTsKLX0KLQotc3RhdGljIF9fYWx3YXlzX2lubGluZSBzdHJ1Y3Qga3ZtX3ZjcHUgKnZ0X3RvX3ZjcHUoc3RydWN0IHZjcHVfdnQgKnZ0KQotewotCXJldHVybiAmYW1wOyhjb250YWluZXJfb2YodnQsIHN0cnVjdCB2Y3B1X3ZteCwgdnQpLSZndDt2Y3B1KTsKLX0KLQotc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bmlvbiB2bXhfZXhpdF9yZWFzb24gdm14X2dldF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCi17Ci0JcmV0dXJuIHRvX3Z0KHZjcHUpLSZndDtleGl0X3JlYXNvbjsKLX0KLQotc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBsb25nIHZteF9nZXRfZXhpdF9xdWFsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKLXsKLQlzdHJ1Y3QgdmNwdV92dCAqdnQgPSB0b192dCh2Y3B1KTsKLQotCWlmICgha3ZtX3JlZ2lzdGVyX3Rlc3RfYW5kX21hcmtfYXZhaWxhYmxlKHZjcHUsIFZDUFVfUkVHX0VYSVRfSU5GT18xKSAmYW1wOyZhbXA7Ci0JICAgICFXQVJOX09OX09OQ0UoaXNfdGRfdmNwdSh2Y3B1KSkpCi0JCXZ0LSZndDtleGl0X3F1YWxpZmljYXRpb24gPSB2bWNzX3JlYWRsKEVYSVRfUVVBTElGSUNBVElPTik7Ci0KLQlyZXR1cm4gdnQtJmd0O2V4aXRfcXVhbGlmaWNhdGlvbjsKLX0KLQotc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdm14X2dldF9pbnRyX2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQotewotCXN0cnVjdCB2Y3B1X3Z0ICp2dCA9IHRvX3Z0KHZjcHUpOwotCi0JaWYgKCFrdm1fcmVnaXN0ZXJfdGVzdF9hbmRfbWFya19hdmFpbGFibGUodmNwdSwgVkNQVV9SRUdfRVhJVF9JTkZPXzIpICZhbXA7JmFtcDsKLQkgICAgIVdBUk5fT05fT05DRShpc190ZF92Y3B1KHZjcHUpKSkKLQkJdnQtJmd0O2V4aXRfaW50cl9pbmZvID0gdm1jc19yZWFkMzIoVk1fRVhJVF9JTlRSX0lORk8pOwotCi0JcmV0dXJuIHZ0LSZndDtleGl0X2ludHJfaW5mbzsKLX0KLQogdm9pZCB2bXhfdmNwdV9sb2FkX3ZtY3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTsKIGludCBhbGxvY2F0ZV92cGlkKHZvaWQpOwogdm9pZCBmcmVlX3ZwaWQoaW50IHZwaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmggYi9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaAppbmRleCAwNTRmZDE0YmIyZTE2Li43YWMwMmM2ODQ1N2YxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaApAQCAtMjcsNyAmIzQzOzI3LDYgQEAgdm9pZCB2bXhfdmNwdV9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaW5pdF9ldmVudCk7CiB2b2lkIHZteF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTsKIHZvaWQgdm14X3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBpbnQgdm14X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKTsKLXZvaWQgdm14X2hhbmRsZV9leGl0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogaW50IHZteF9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiB2b2lkIHZteF91cGRhdGVfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIGJvb2wgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk3OTUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA4ODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoaXMgS1ZNIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gVGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgYW1kNjQsIHdoaWNoIGlzIGV4cGVjdGVkLiBUaGUgZm9jdXMgaXMgY2xlYXJseSBvbiB0aGUgS1ZNIEludGVsL1ZNWCBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIFREWCAoVHJ1c3RlZCBEb21haW4gRXh0ZW5zaW9ucykgaW50ZWdyYXRpb24sIGdpdmVuIHRoZSBmaWxlcyBiZWluZyB0b3VjaGVkOiBgY29tbW9uLmhgLCBgbWFpbi5jYCwgYG5lc3RlZC5jYCwgYHBvc3RlZF9pbnRyLmNgLCBgcG9zdGVkX2ludHIuaGAsIGB0ZHguY2AsIGB2bXguY2AsIGB2bXguaGAsIGFuZCBgeDg2X29wcy5oYC4KCkZpcnN0IGdsYW5jZSwgaXQgbG9va3MgbGlrZSBhIHJlZmFjdG9yaW5nIGFuZCBURFggaW50ZWdyYXRpb24gZWZmb3J0LiBMZXQgbWUgYnJlYWsgZG93biB3aGF0IHRoZSBwYXRjaCBpcyBkb2luZzoKCjEuICBBIG5ldyBgc3RydWN0IHZjcHVfdm14X3RkeGAgaXMgaW50cm9kdWNlZCBpbiBgY29tbW9uLmhgLCBhbmQgdGhlIGB0b192dGAgYW5kIGB2dF90b192Y3B1YCBtYWNyb3MgYXJlIGRlZmluZWQgdXNpbmcgaXQuIFRoaXMgbGlrZWx5IHRpZXMgVERYLXNwZWNpZmljIGRhdGEgb3IgZnVuY3Rpb25zIHRvIHRoZSBleGlzdGluZyBLVk0gVk1YIHN0cnVjdHVyZS4gU2VlbXMgbGlrZSBhIGNvbW1vbiBwYXR0ZXJuIGZvciBhZGRpbmcgYSBsYXllci4KMi4gIEtleSBmdW5jdGlvbnMsIGB2bXhfZ2V0X2V4aXRfcmVhc29uYCwgYHZteF9nZXRfZXhpdF9xdWFsYCwgYW5kIGB2bXhfZ2V0X2ludHJfaW5mb2AgYXJlIHJlbmFtZWQgdG8gYHZ0X2AgcHJlZml4ZWQgdmVyc2lvbnMgYW5kIG1vdmVkIHRvIGBjb21tb24uaGAuIFRoaXMgaXMgbGlrZWx5IHRvIGVzdGFibGlzaCBhIGNvbW1vbiBBUEksIHBvc3NpYmx5IHRvIGJlIHVzZWQgYmV0d2VlbiBWTVggYW5kIFREWCBjb2RlIHBhdGhzLgozLiAgU2ltaWxhciByZW5hbWluZyBhbmQsIHBvdGVudGlhbGx5LCByZW9yZ2FuaXphdGlvbiBvZiBzZXZlcmFsIGhhbmRsZXIgZnVuY3Rpb25zIChgX192bXhfaGFuZGxlX2VwdF92aW9sYXRpb25gLCBldGMuKSBhbHNvIGhhcHBlbnMuIFRoZSBgdm14X2AgcHJlZml4IGlzIGNvbnNpc3RlbnRseSBjaGFuZ2VkIHRvIGB2dF9gLCBzdWdnZXN0aW5nIGEgY2xlYXIgdHJhbnNpdGlvbiB0byBhIG1vcmUgZ2VuZXJpYyBvciBURFgtc3BlY2lmaWMgaW50ZXJmYWNlLgo0LiAgTW9yZSBmdW5jdGlvbiBtb3ZlcyEgVGhlIGhhbmRsZXIgZnVuY3Rpb25zIGBoYW5kbGVfbm1fZmF1bHRfaXJxb2ZmYCwgYGhhbmRsZV9leGNlcHRpb25faXJxb2ZmYCwgYGhhbmRsZV9leHRlcm5hbF9pbnRlcnJ1cHRfaXJxb2ZmYCwgYHZ0X2hhbmRsZV9leGl0X2lycW9mZmAsIGFuZCBgdnRfaGFuZGxlX25taWAgYXJlIG1vdmVkIGZyb20gYHZteC5jYCB0byBgbWFpbi5jYCwgYW5kIGhvb2sgdGhlICBgdnRfaGFuZGxlX2V4aXRfaXJxb2ZmYCBpbnRvIGB2dF94ODZfb3BzLmhhbmRsZV9leGl0X2lycW9mZmAuIFRoaXMgaXMgYSBjbGFzc2ljIHJlZmFjdG9yaW5nIHBhdHRlcm4gYW5kIHBvdGVudGlhbGx5IGlzb2xhdGVzIHRoZSBURFgtc3BlY2lmaWMgaGFuZGxlciYjMzk7cyBpbXBsZW1lbnRhdGlvbi4KNS4gIEZ1bmN0aW9ucyBpbiBgcG9zdGVkX2ludHIuY2AgYXJlIGFsc28gZ2V0dGluZyB0aGUgYHZ0X2AgdHJlYXRtZW50LiBUaGlzIHN1Z2dlc3RzIG1vZGlmaWNhdGlvbnMgdG8gdGhlIHBvc3RlZCBpbnRlcnJ1cHQgaGFuZGxpbmcsIHBvc3NpYmx5IHRvIGJldHRlciBzdXBwb3J0IFREWCYjMzk7cyBpbnRlcnJ1cHQgZGVsaXZlcnkgbWVjaGFuaXNtcywgaWYgVERYIGV2ZW4gaGFzIHBvc3RlZCBpbnRlcnJ1cHRzLgo2LiAgVGhlIGNydWNpYWwgc3RlcDogYWxsIGNhbGxlcnMgd2l0aGluIGB2bXguY2AsIGB0ZHguY2AsIGFuZCBgbmVzdGVkLmNgIGFyZSB1cGRhdGVkIHRvIHVzZSB0aGUgbmV3IGB2dF8qYCBmdW5jdGlvbnMuIFRoaXMgaXMgaW1wb3J0YW50IHRvIHZlcmlmeSB0aGUgY2hhbmdlcyBkb24mIzM5O3QgYnJlYWsgZnVuY3Rpb25hbGl0eS4KNy4gIFByYWdtYSBHQ0MgcG9pc29uIGlzIGJlaW5nIHVzZWQgdG8gZW5mb3JjZSBhbiBhYnN0cmFjdGlvbiBib3VuZGFyeS4gTmljZSEgVGhpcyBtYWtlcyB0aGUgcmVmYWN0b3JpbmcgbW9yZSByb2J1c3QgYW5kIGNsZWFyLgo4LiAgVGhlIHN0YXRpYyBhc3NlcnRpb24gYG9mZnNldG9mKHN0cnVjdCB2Y3B1X3ZteF90ZHgsIHZ0KSA9PSBvZmZzZXRvZihzdHJ1Y3QgdmNwdV92bXgsIHZ0KWAgaXMgaW50ZXJlc3RpbmcuIFRoaXMgaXMgYSBiaXQgb2YgYSBzYW5pdHkgY2hlY2s7IGl0IHNlZW1zIHRoZSBgdnRgIG1lbWJlciBvZiB0aGUgYHZjcHVfdm14X3RkeGAgc3RydWN0IG5lZWRzIHRvIGJlIGF0IHRoZSBzYW1lIG9mZnNldCBhcyBpbiB0aGUgZXhpc3RpbmcgYHZjcHVfdm14YCBzdHJ1Y3QsIGxpa2VseSByZWxhdGVkIHRvIGhvdyB0aGUgY29kZSBhY2Nlc3NlcyBhbmQgdXNlcyB0aGUgZmllbGRzLgoKKipSZWFjaGFiaWxpdHkgYW5kIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIGlzIHRoaXMgY29kZSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcgb24gYW1kNjQ/IEFic29sdXRlbHkuIEtWTSBpcyBhICpjcml0aWNhbCogcGllY2Ugb2YgdGhlIHZpcnR1YWxpemF0aW9uIGluZnJhc3RydWN0dXJlIG9uIHg4Ni9hbWQ2NCBMaW51eCBhbmQgaXMgaGVhdmlseSBmdXp6ZWQgYnkgdG9vbHMgbGlrZSBzeXprYWxsZXIgdmlhIGAvZGV2L2t2bWAuIFRoaXMgaW5jbHVkZXMgdGhlIGlvY3RsIGNhbGxzIGxpa2UgYEtWTV9SVU5gLCBgS1ZNX0NSRUFURV9WTWAsIGFuZCBgS1ZNX0NSRUFURV9WQ1BVYCwgd2hpY2ggaXMgbmVzdGVkIHZpcnR1YWxpemF0aW9uLiBJbnRlbCBWTVggaXMgYWxzbyByZWxldmFudC4gR2l2ZW4gdGhlIGZvY3VzIG9uIFREWCwgdGhpcyBpcyBwcm9iYWJseSB3b3J0aCBhIGZ1enppbmcgY2FtcGFpZ24gdG8gY292ZXIgbmV3IGNvZGUgcGF0aHMuIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIGZvciBLVk0gYW5kIEtWTV9JTlRFTC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwOToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0lOVEVMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTgzPWNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA5OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxODc5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIEtWTV9JTlRFTCBEZXBlbmRlbmNpZXMgaW4gS2NvbmZpZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgYGFyY2gveDg2L2t2bS9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgS1ZNX0lOVEVMYCBvcHRpb24uIEkgd2FudCB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVudGFsIG1hcCBvZiBob3cgdGhpcyBpcyBhbGwgd2lyZWQgdG9nZXRoZXIuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIHVzdWFsIHN1c3BlY3RzOiBhbnkgZGlyZWN0IGRlcGVuZGVuY2llcywgb2YgY291cnNlLiBCdXQgSSYjMzk7bSBhbHNvIGludGVyZXN0ZWQgaW4gaW5kaXJlY3QgZGVwZW5kZW5jaWVzIOKAkyB0aGluZ3MgdGhhdCBtaWdodCBiZSBlbmFibGVkIG9yIGRpc2FibGVkICpiZWNhdXNlKiBgS1ZNX0lOVEVMYCBpcyBzZWxlY3RlZC4gV2hhdCBvdGhlciBmZWF0dXJlcyBvciBkcml2ZXJzIGFyZSBjb250aW5nZW50IG9uIEludGVsIHZpcnR1YWxpemF0aW9uIHN1cHBvcnQ/IFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgY29uZmlndXJhdGlvbiBpbXBhY3QsIHBhcnRpY3VsYXJseSB3aXRoIGFsbCB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiBhbnkgcmVsYXRlZCBjaGFuZ2VzLiBCYXNpY2FsbHksIEkgYW0gdGhpbmtpbmcgdGhyb3VnaCB0aGUgS2NvbmZpZyBhbmQgaXRzIGNvbm5lY3Rpb25zIHRvIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSwgcmVhZHkgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGFueSBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgOTA6XHRcdCAgcHJvdGVjdGVkIFZNcyBhcmUgcHVyZWx5IGEgZGV2ZWxvcG1lbnQgYW5kIHRlc3RpbmcgdmVoaWNsZSBmb3JcbiAgOTE6XHRcdCAgS1ZNX0NSRUFURV9HVUVTVF9NRU1GRC4gIEF0dGVtcHRpbmcgdG8gcnVuIGEgXCYjMzQ7cmVhbFwmIzM0OyBWTSB3b3JrbG9hZCBhcyBhXG4gIDkyOlx0XHQgIHNvZnR3YXJlLXByb3RlY3RlZCBWTSB3aWxsIGZhaWwgbWlzZXJhYmx5LlxuICA5MzpcdFxuICA5NDpcdFx0ICBJZiB1bnN1cmUsIHNheSBcJiMzNDtOXCYjMzQ7LlxuICA5NTpcdFxuICA5NjpcdGNvbmZpZyBLVk1fSU5URUxcbiAgOTc6XHRcdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbiAgOTg6XHRcdGRlcGVuZHMgb24gS1ZNIFx1MDAyNlx1MDAyNiBJQTMyX0ZFQVRfQ1RMXG4gIDk5Olx0XHRzZWxlY3QgWDg2X0ZSRUQgaWYgWDg2XzY0XG4gMTAwOlx0XHRoZWxwXG4gMTAxOlx0XHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIEtWTSBvbiBwcm9jZXNzb3JzIGVxdWlwcGVkIHdpdGggSW50ZWwmIzM5O3MgVlRcbiAxMDI6XHRcdCAgZXh0ZW5zaW9ucywgYS5rLmEuIFZpcnR1YWwgTWFjaGluZSBFeHRlbnNpb25zIChWTVgpLlxuIDEwMzpcdFxuIDEwNDpcdFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAxMDU6XHRcdCAgd2lsbCBiZSBjYWxsZWQga3ZtLWludGVsLlxuIDEwNjpcdFxuIDEwNzpcdGNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbiAxMDg6XHQgICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbiAxMDk6XHQgICAgICAgIGRlcGVuZHMgb24gS1ZNX0lOVEVMIFx1MDAyNlx1MDAyNiBFWFBFUlRcbiAxMTA6XHQgICAgICAgIGhlbHBcbiAxMTE6XHQgICAgICAgICAgQ2hlY2tzIHRoYXQgS1ZNJiMzOTtzIHBhZ2UgdGFibGUgbWFuYWdlbWVudCBjb2RlIHdpbGwgbm90IGluY29ycmVjdGx5XG4gMTEyOlx0ICAgICAgICAgIGxldCBndWVzdHMgcmVjZWl2ZSBhIHZpcnR1YWxpemF0aW9uIGV4Y2VwdGlvbi4gIFZpcnR1YWxpemF0aW9uXG4gMTEzOlx0ICAgICAgICAgIGV4Y2VwdGlvbnMgd2lsbCBiZSB0cmFwcGVkIGJ5IHRoZSBoeXBlcnZpc29yIHJhdGhlciB0aGFuIGluamVjdGVkXG4gMTE0Olx0ICAgICAgICAgIGluIHRoZSBndWVzdC5cbiAxMTU6XHRcbiAxMTY6XHQgICAgICAgICAgTm90ZTogc29tZSBDUFVzIGFwcGVhciB0byBnZW5lcmF0ZSBzcHVyaW91cyBFUFQgVmlvbGF0aW9ucyAjVkVzXG4gMTE3Olx0ICAgICAgICAgIHRoYXQgdHJpZ2dlciBLVk0mIzM5O3MgV0FSTiwgaW4gcGFydGljdWxhciB3aXRoIGVwdGFkPTAgYW5kL29yIG5lc3RlZFxuIDExODpcdCAgICAgICAgICB2aXJ0dWFsaXphdGlvbi5cbiAxMTk6XHRcbiAxMjA6XHQgICAgICAgICAgSWYgdW5zdXJlLCBzYXkgTi5cbiAxMjE6XHRcbiAxMjI6XHRjb25maWcgWDg2X1NHWF9LVk1cbiAxMjM6XHRcdGJvb2wgXCYjMzQ7U29mdHdhcmUgR3VhcmQgZVh0ZW5zaW9ucyAoU0dYKSBWaXJ0dWFsaXphdGlvblwmIzM0O1xuIDEyNDpcdFx0ZGVwZW5kcyBvbiBYODZfU0dYIFx1MDAyNlx1MDAyNiBLVk1fSU5URUxcbiAxMjU6XHRcdGhlbHBcbiAxMjY6XHRcbiAxMjc6XHRcdCAgRW5hYmxlcyBLVk0gZ3Vlc3RzIHRvIGNyZWF0ZSBTR1ggZW5jbGF2ZXMuXG4gMTI4Olx0XG4gMTI5Olx0XHQgIFRoaXMgaW5jbHVkZXMgc3VwcG9ydCB0byBleHBvc2UgXCYjMzQ7cmF3XCYjMzQ7IHVucmVjbGFpbWFibGUgZW5jbGF2ZSBtZW1vcnkgdG9cbiAxMzA6XHRcdCAgZ3Vlc3RzIHZpYSBhIGRldmljZSBub2RlLCBlLmcuIC9kZXYvc2d4X3ZlcGMuXG4gMTMxOlx0XG4gMTMyOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMTMzOlx0XG4gMTM0Olx0Y29uZmlnIEtWTV9JTlRFTF9URFhcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwOToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjg0OAoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDEzMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IEtWTSBJbnRlbCBWaXJ0dWFsaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlIHRhcmdldCBpcyByZWFjaGFibGUuIEkgc2VlIHdlJiMzOTtyZSBsb29raW5nIGF0IGBDT05GSUdfS1ZNYCBhbmQgYENPTkZJR19LVk1fSU5URUxgLiBHb29kLCBgS1ZNX0lOVEVMYCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZTsgSSBrbm93IGZyb20gZXhwZXJpZW5jZSwgc3BlY2lmaWNhbGx5IHN5emthbGxlciBmdXp6aW5nIGVudmlyb25tZW50cyBvbiB4ODZfNjQsIHRoYXQgaXQmIzM5O3MgYWNjZXNzaWJsZS4gU28gdGhhdCYjMzk7cyBhIHBvc2l0aXZlIHN0YXJ0aW5nIHBvaW50LgoKTm93LCB0aW1lIGZvciB0aGUgY29yZSBxdWVzdGlvbjogKmlzIHRoaXMgd29ydGggZnV6emluZz8qIEkmIzM5O2xsIGFwcGx5IHRoZSBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgY3JpdGVyaWEuIFRoZSBwb3NpdGl2ZSBzaWRlIGlzIHdoYXQgSSBhbSByZWFsbHkgaW50ZXJlc3RlZCBpbi4gVGhpcyBwYXRjaCB0b3VjaGVzIHRoZSBjb3JlIHN1YnN5c3RlbXMgKGh5cGVydmlzb3IgLyBLVk0pLCBhbmQgd2hhdCYjMzk7cyBtb3JlLCBpdOKAmXMgYSBjb2RlIHJlZmFjdG9yaW5nLiBUaGlzIGFsb25lIHJhaXNlcyBhIGZsYWcuIFdlJiMzOTtyZSBub3QganVzdCBsb29raW5nIGF0IGEgc2ltcGxlIGZ1bmN0aW9uYWwgY2hhbmdlIG9yIGNsZWFudXAuIFRoZSBhdXRob3LigJlzIGludGVudGlvbnMgYXJlIHNlY29uZGFyeTsgSSBhbHdheXMgZnV6eiAqcmVmYWN0b3JlZCogY29kZSwgcmVnYXJkbGVzcyBvZiB0aGVpciBjbGFpbXMuIENoYW5nZXMgaW4gbG9naWMsIGhlbHBlciBmdW5jdGlvbiBpbnRyb2R1Y3Rpb25zLCBvciBzdGF0ZSBtYW5hZ2VtZW50LCAqZXNwZWNpYWxseSogaW4gY29yZSBhcmVhcywgYXJlIHByaW1lIGJ1Zy1odW50aW5nIGdyb3VuZHMuIEFuZCwgb2YgY291cnNlLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBpbiBgYXJjaC94ODYva3ZtL3ZteC9gLCB3aGljaCBpcyBkaXJlY3RseSByZWxhdGVkIHRvIEtWTSBJbnRlbCB2aXJ0dWFsaXphdGlvbiBzdXBwb3J0LgoKVGhlcmVmb3JlLCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyAqeWVzKiwgYFdvcnRoRnV6emluZyA9IHRydWVgLgoKQWxyaWdodCwgd2l0aCB0aGF0IGVzdGFibGlzaGVkLCBsZXQmIzM5O3MgZGVmaW5lIG91ciBmb2N1cy4gSXQmIzM5O3MgdGltZSB0byBpZGVudGlmeSB0aGUgYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYC4gSSYjMzk7bGwgYW5hbHl6ZSB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFuZCBlbnRyeSBwb2ludHMuIEkgaGF2ZSBhIGxpc3Qgb2YgdGhvc2UgZnJvbSB0aGUgdmFyaW91cyBmaWxlcy4KCkluIGBhcmNoL3g4Ni9rdm0vdm14L21haW4uY2A6IEkgc2VlIGB2dF9oYW5kbGVfZXhpdF9pcnFvZmZgLCBgdnRfaGFuZGxlX25taWAsIGBoYW5kbGVfbm1fZmF1bHRfaXJxb2ZmYCwgYGhhbmRsZV9leGNlcHRpb25faXJxb2ZmYCwgYW5kIGBoYW5kbGVfZXh0ZXJuYWxfaW50ZXJydXB0X2lycW9mZmAuCgpJbiBgYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5jYDogSSYjMzk7bGwgbG9vayBhdCBgdnRfdmNwdV9waV9sb2FkYCwgYHZ0X3ZjcHVfcGlfcHV0YCwgYHZ0X3BpX3N0YXJ0X2J5cGFzc2AsIGFuZCBgdnRfcGlfdXBkYXRlX2lydGVgLgoKYGFyY2gveDg2L2t2bS92bXgvY29tbW9uLmhgIGlzIG5leHQ6IEhlcmUsIGB2dF9nZXRfZXhpdF9yZWFzb25gLCBgdnRfZ2V0X2V4aXRfcXVhbGAsIGB2dF9nZXRfaW50cl9pbmZvYCwgYF9fdnRfaGFuZGxlX2VwdF92aW9sYXRpb25gLCBhbmQgYF9fdnRfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0YCBhcmUgcG90ZW50aWFsIGFyZWFzIG9mIGludGVyZXN0LgoKYGFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNgIGlzIGV4dGVuc2l2ZTogSSYjMzk7bGwgaW5jbHVkZSBgbmVzdGVkX2VwdF9pbmplY3RfcGFnZV9mYXVsdGAsIGBwcmVwYXJlX3ZtY3MxMmAsIGBuZXN0ZWRfdm14X2dldF92bXB0cmAsIGBoYW5kbGVfdm1yZWFkYCwgYGhhbmRsZV92bXdyaXRlYCwgYGhhbmRsZV92bXB0cmxkYCwgYGhhbmRsZV92bXB0cnN0YCwgYGhhbmRsZV9pbnZlcHRgLCBgaGFuZGxlX2ludnZwaWRgLCBgaGFuZGxlX3ZtZnVuY2AsIGBuZXN0ZWRfdm14X2V4aXRfaGFuZGxlZF9pb2AsIGBuZXN0ZWRfdm14X2V4aXRfaGFuZGxlZF9tc3JgLCBgbmVzdGVkX3ZteF9leGl0X2hhbmRsZWRfY3JgLCBgbmVzdGVkX3ZteF9sMF93YW50c19leGl0YCwgYG5lc3RlZF92bXhfbDFfd2FudHNfZXhpdGAsIGFuZCBgbmVzdGVkX3ZteF9yZWZsZWN0X3ZtZXhpdGAuCgpMYXN0bHksIGluIGBhcmNoL3g4Ni9rdm0vdm14L3ZteC5jYDogSSYjMzk7bGwgaGF2ZSB0byBjb25zaWRlciBgdm14X2hhbmRsZV9leGl0YCwgYF9fdm14X2hhbmRsZV9leGl0YCwgYHZteF92Y3B1X3J1bmAsIGB2bXhfdmNwdV9sb2FkYCwgYHZteF92Y3B1X3B1dGAsIGBoYW5kbGVfZXhjZXB0aW9uX25taWAsIGBoYW5kbGVfZXB0X3Zpb2xhdGlvbmAsIGBoYW5kbGVfaW9gLCBgaGFuZGxlX2NyYCwgYGhhbmRsZV9kcmAsIGBoYW5kbGVfaW52bHBnYCwgYGhhbmRsZV9hcGljX2FjY2Vzc2AsIGBoYW5kbGVfYXBpY19lb2lfaW5kdWNlZGAsIGBoYW5kbGVfYXBpY193cml0ZWAsIGBoYW5kbGVfdGFza19zd2l0Y2hgLCBgaGFuZGxlX2ludnBjaWRgLCBgaGFuZGxlX3BtbF9mdWxsYCwgYGhhbmRsZV9ub3RpZnlgLCBgaGFuZGxlX3JkbXNyX2ltbWAsIGBoYW5kbGVfd3Jtc3JfaW1tYCwgYHZteF9nZXRfZXhpdF9pbmZvYCwgYHZteF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHRgLCBhbmQgYHNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb25gLgoKTm93LCBJJiMzOTtsbCBuZWVkIHRvIG5hcnJvdyB0aGVzZSBkb3duIHRvIHRoZSBub24tc3RhdGljIHN5bWJvbHMgb3IsIHRob3NlIGFjY2Vzc2libGUgb3V0c2lkZSB0aGVpciBkZWZpbmVkIGZpbGVzLCB0aGF0IGFyZSBpbiB2bWxpbnV4L2t2bS1pbnRlbC5rby4gQWZ0ZXIgY2hlY2tpbmcgYGFyY2gveDg2L2t2bS92bXgvbWFpbi5jYCBhbmQgYGFyY2gveDg2L2t2bS92bXgvcG9zdGVkXwoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7KHZ0X3ZjcHVfcGlffHZ0X2hhbmRsZV9ubWl8dnRfcGlfKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9jb21tb24uaD0yMTc9c3RhdGljIGlubGluZSB2b2lkIF9fdnRfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTIzNS1cbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmg6MjM2Om5vaW5zdHIgdm9pZCB2dF9oYW5kbGVfbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTIzNy1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz05MzI9c3RhdGljIHZvaWQgdnRfaGFuZGxlX2V4aXRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy05NTEtXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo5NTI6bm9pbnN0ciB2b2lkIHZ0X2hhbmRsZV9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtOTUzLXtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz05NzI9c3RydWN0IGt2bV94ODZfb3BzIHZ0X3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMDkwLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTA5MTpcdC5waV91cGRhdGVfaXJ0ZSA9IHZ0X3BpX3VwZGF0ZV9pcnRlLFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTA5MjpcdC5waV9zdGFydF9ieXBhc3MgPSB2dF9waV9zdGFydF9ieXBhc3MsXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMDkzLVxuLS1cbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYz00NT1zdGF0aWMgaW50IHBpX3RyeV9zZXRfY29udHJvbChzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYywgdTY0ICpwb2xkLCB1NjQgbmV3KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYy01OC1cbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYzo1OTp2b2lkIHZ0X3ZjcHVfcGlfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmMtNjAte1xuLS1cbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYz0xNDk9c3RhdGljIGJvb2wgdnRfY2FuX3VzZV92dGRfcGkoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYy0xNTItXHQgKiBOb3RlLCByZWFkaW5nIHRoZSBudW1iZXIgb2YgcG9zc2libGUgYnlwYXNzIElSUXMgY2FuIHJhY2Ugd2l0aCBhXG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmM6MTUzOlx0ICogYnlwYXNzIElSUSBiZWluZyBhdHRhY2hlZCB0byB0aGUgVk0uICB2dF9waV9zdGFydF9ieXBhc3MoKSBlbnN1cmVzXG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmMtMTU0LVx0ICogYmxvY2tuZyB2Q1BVcyB3aWxsIHNlZSBhbiBlbGV2YXRlZCBjb3VudCBvciBnZXQgS1ZNX1JFUV9VTkJMT0NLLlxuLS1cbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYz0yMTE9c3RhdGljIGJvb2wgdnRfbmVlZHNfcGlfd2FrZXVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmMtMjI0LVxuYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5jOjIyNTp2b2lkIHZ0X3ZjcHVfcGlfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYy0yMjYte1xuLS1cbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYz0yODU9Ym9vbCBwaV9oYXNfcGVuZGluZ19pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYy0yOTYtICogYmxvY2tpbmcgdkNQVXMgbWF5IHNjaGVkdWxlZCBvdXQgd2l0aG91dCByZWNvbmZpZ3VyaW5nIFBJRC5OViB0byB0aGUgd2FrZXVwXG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmM6Mjk3OiAqIHZlY3RvciwgaS5lLiBpZiB0aGUgYnlwYXNzIElSUSBjYW1lIGFsb25nIGFmdGVyIHZ0X3ZjcHVfcGlfcHV0KCkuXG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmMtMjk4LSAqL1xuYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5jOjI5OTp2b2lkIHZ0X3BpX3N0YXJ0X2J5cGFzcyhzdHJ1Y3Qga3ZtICprdm0pXG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmMtMzAwLXtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmMtMzA2LVxuYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5jOjMwNzppbnQgdnRfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmMtMzA4LVx0XHQgICAgICAgdW5zaWduZWQgaW50IGhvc3RfaXJxLCB1aW50MzJfdCBndWVzdF9pcnEsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5oLTEwLVxuYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5oOjExOnZvaWQgdnRfdmNwdV9waV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmg6MTI6dm9pZCB2dF92Y3B1X3BpX3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5oLTEzLXZvaWQgcGlfd2FrZXVwX2hhbmRsZXIodm9pZCk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5oPTE2PWJvb2wgcGlfaGFzX3BlbmRpbmdfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmg6MTc6aW50IHZ0X3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5oLTE4LVx0XHQgICAgICAgdW5zaWduZWQgaW50IGhvc3RfaXJxLCB1aW50MzJfdCBndWVzdF9pcnEsXG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmgtMTktXHRcdCAgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2ZWN0b3IpO1xuYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5oOjIwOnZvaWQgdnRfcGlfc3RhcnRfYnlwYXNzKHN0cnVjdCBrdm0gKmt2bSk7XG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmgtMjEtXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz03MTU9dm9pZCB0ZHhfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTcxOC1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6NzE5Olx0dnRfdmNwdV9waV9sb2FkKHZjcHUsIGNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTcyMC1cdGlmICh2Y3B1LVx1MDAzZWNwdSA9PSBjcHUgfHwgIWlzX2hraWRfYXNzaWduZWQodG9fa3ZtX3RkeCh2Y3B1LVx1MDAzZWt2bSkpKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9ODI3PXZvaWQgdGR4X3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtODI4LXtcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6ODI5Olx0dnRfdmNwdV9waV9wdXQodmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTgzMC1cdHRkeF9wcmVwYXJlX3N3aXRjaF90b19ob3N0KHZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9OTYxPXN0YXRpYyBub2luc3RyIHZvaWQgdGR4X3ZjcHVfZW50ZXJfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy05NzYtXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjk3NzpcdHZ0X2hhbmRsZV9ubWkodmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTk3OC1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTE1NzM9dm9pZCB2bXhfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTE1NzktXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjE1ODA6XHR2dF92Y3B1X3BpX2xvYWQodmNwdSwgY3B1KTtcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtMTU4MS19XG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYz0xNTgzPXZvaWQgdm14X3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtMTU4NC17XG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjE1ODU6XHR2dF92Y3B1X3BpX3B1dCh2Y3B1KTtcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtMTU4Ni1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTczNjY9c3RhdGljIG5vaW5zdHIgdm9pZCB2bXhfdmNwdV9lbnRlcl9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTczOTctXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjczOTg6XHR2dF9oYW5kbGVfbm1pKHZjcHUpO1xuYXJjaC94ODYva3ZtL3ZteC92bXguYy03Mzk5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA5OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NjUxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEtWTSBDb25maWd1cmF0aW9uIGZvciBGb2N1cyBTeW1ib2xzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaGVyZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBLVk0gY29uZmlndXJhdGlvbiByZWxldmFudCB0byBhIHNwZWNpZmljIHNldCBvZiBmdW5jdGlvbnMsIHdoaWNoIEkmIzM5O2xsIGNhbGwgdGhlIGBGb2N1c1N5bWJvbHNgLiBGaXJzdCwgSSYjMzk7bGwgZGVmaW5lIHRob3NlIHN5bWJvbHM6IGB2dF9oYW5kbGVfZXhpdF9pcnFvZmZgLCBgdnRfaGFuZGxlX25taWAsIGB2dF92Y3B1X3BpX2xvYWRgLCBgdnRfdmNwdV9waV9wdXRgLCBgdnRfcGlfc3RhcnRfYnlwYXNzYCwgYHZ0X3BpX3VwZGF0ZV9pcnRlYCwgYHZteF9oYW5kbGVfZXhpdGAsIGB2bXhfdmNwdV9ydW5gLCBhbmQgYG5lc3RlZF92bXhfcmVmbGVjdF92bWV4aXRgLiBOb3csIEkgbmVlZCB0byByZWxhdGUgdGhlc2Ugc3ltYm9scyB0byByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLgoKTmV4dCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBgRW5hYmxlQ29uZmlnc2AuIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIGZvciB0aGUgcHJlc2VuY2Ugb2YgYEtWTWAgYW5kIGBLVk1fSU5URUxgLiBTaW5jZSB0aGlzIGVudmlyb25tZW50ICptaWdodCogaW5jbHVkZSBJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucywgb3IgVERYLCBJIGFsc28gbmVlZCB0byB2ZXJpZnkgYEtWTV9JTlRFTF9URFhgLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gcmVjb2duaXplIHRoYXQgYEtWTV9JTlRFTGAgaXMgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiwgYW5kIGBLVk1fSU5URUxfVERYYCBpcyBjb250aW5nZW50IG9uIGl0LCBpZiBpdCBpcyBlbmFibGVkLiBTbywgSSB3aWxsIGNoZWNrIGZvciB0aGVzZSBvcHRpb25zIGluIHRoZSBkZWZpbmVkIG9yZGVyLgoKTm93LCBJIG5lZWQgdG8gZXhwbGljaXRseSB2ZXJpZnkgdGhlIGRlcGVuZGVuY3kgb2YgYEtWTV9JTlRFTF9URFhgIG9uIGBLVk1fSU5URUxgLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgS1ZNX0lOVEVMX1REWGAgYWN0dWFsbHkgKnJlcXVpcmVzKiBgS1ZNX0lOVEVMYCB0byBiZSBlbmFibGVkLiBJJiMzOTtsbCBuZWVkIHRvIGxvY2F0ZSB0aGlzIGRlcGVuZGVuY3kgd2l0aGluIHRoZSBLY29uZmlnIGZpbGUsIHNwZWNpZmljYWxseSBgYXJjaC94ODYva3ZtL0tjb25maWdgLiBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyBsaW5lIDEzNCBpbiB0aGUgS2NvbmZpZyBmaWxlIHRvIHNlZSB0aGUgZGV0YWlscyBvZiB0aGUgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwOToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzM6XHRcbiAxMzQ6XHRjb25maWcgS1ZNX0lOVEVMX1REWFxuIDEzNTpcdFx0Ym9vbCBcJiMzNDtJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XCYjMzQ7XG4gMTM2Olx0XHRkZWZhdWx0IHlcbiAxMzc6XHRcdGRlcGVuZHMgb24gSU5URUxfVERYX0hPU1RcbiAxMzg6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuIDEzOTpcdFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxuIDE0MDpcdFx0aGVscFxuIDE0MTpcdFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBsYXVuY2hpbmcgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWClcbiAxNDI6XHRcdCAgY29uZmlkZW50aWFsIFZNcyBvbiBJbnRlbCBwcm9jZXNzb3JzLlxuIDE0MzpcdFxuIDE0NDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDE0NTpcdFxuIDE0NjpcdGNvbmZpZyBLVk1fQU1EXG4gMTQ3Olx0XHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbiAxNDg6XHRcdGRlcGVuZHMgb24gS1ZNIFx1MDAyNlx1MDAyNiAoQ1BVX1NVUF9BTUQgfHwgQ1BVX1NVUF9IWUdPTilcbiAxNDk6XHRcdGhlbHBcbiAxNTA6XHRcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgS1ZNIG9uIEFNRCBwcm9jZXNzb3JzIGVxdWlwcGVkIHdpdGggdGhlIEFNRC1WXG4gMTUxOlx0XHQgIChTVk0pIGV4dGVuc2lvbnMuXG4gMTUyOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA5OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NjQ4CgkJCQkJCQlvdXRwdXQ6IDE5OQoJCQkJCQkJdGhvdWdodHM6IDIzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBLVk0vVERYIENvbmZpZ3VyYXRpb24gQ2hlY2sqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBjb3JlIEtWTSBJbnRlbCBkcml2ZXIgY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5IGBLVk1fSU5URUxgLCB3aGljaCwgb2YgY291cnNlLCByZWxpZXMgb24gdGhlIGJyb2FkZXIgYEtWTWAgc3Vic3lzdGVtLiBBbmQsIEkgc2VlIHRoYXQgd2UgYXJlIGRlYWxpbmcgd2l0aCBgSU5URUxfVERYX0hPU1RgIGFuZCBgS1ZNX0lOVEVMX1REWGAsIHNvIHRoaXMgaXMgZGVmaW5pdGVseSByZWxhdGVkIHRvIFREWC4KCkxldCYjMzk7cyBxdWlja2x5IHJ1biBhIGNoZWNrIHRvIGVuc3VyZSBldmVyeXRoaW5nIGlzIGFzIGV4cGVjdGVkLiBJIHNlZSBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gdHJ1ZSwgZ29vZCEgQW5kIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBpcyBleGFjdGx5IHdoYXQgSSBhbnRpY2lwYXRlOiBgJiMzNDtLVk0mIzM0O2AgYW5kIGAmIzM0O0tWTV9JTlRFTCYjMzQ7YC4gUGVyZmVjdC4KCk5vdywgbGV0JiMzOTtzIGV4YW1pbmUgdGhlIGBGb2N1c1N5bWJvbHNgLiBUaGVzZSBzZWVtIHNwb3Qtb24uIEkmIzM5O20gc2VlaW5nIGZ1bmN0aW9ucyByZWxhdGVkIHRvIGhhbmRsaW5nIHZpcnR1YWwgdGVybWluYWwgZXhpdHMgaW4gYSBmZXcgZGlmZmVyZW50IHN0YXRlczogYHZ0X2hhbmRsZV9leGl0X2lycW9mZmAsIGB2dF9oYW5kbGVfbm1pYCwgcG9zdGVkIGludGVycnVwdCBmdW5jdGlvbnMgKGB2dF92Y3B1X3BpX2xvYWRgLCBgdnRfdmNwdV9waV9wdXRgLCBgdnRfcGlfc3RhcnRfYnlwYXNzYCwgYHZ0X3BpX3VwZGF0ZV9pcnRlYCksIGFuZCBhIGdvb2QgbG9vayBhdCBgdm14X2hhbmRsZV9leGl0YCBhbmQgYHZteF92Y3B1X3J1bmAgYXMgd2VsbCBhcyBgbmVzdGVkX3ZteF9yZWZsZWN0X3ZtZXhpdGAuIFllcCwgdGhpcyBhbGwgbGluZXMgdXAgd2l0aCB3aGF0IEkmIzM5O2QgZXhwZWN0IGdpdmVuIHRoZSBjb250ZXh0IOKAkyB3ZSYjMzk7cmUgbG9va2luZyBhdCBwb3RlbnRpYWxseSByZWZhY3RvcmluZyBjb21tb24gVk1YIGFuZCBURFggdmlydHVhbCB0ZXJtaW5hbCBoYW5kbGluZywgZXhpdCBoYW5kbGluZyB3aXRoIGlycW9mZiwgcG9zdGVkIGludGVycnVwdCBmdW5jdGlvbnMsIGFuZCBleGl0IHJlYXNvbi9xdWFsaWZpY2F0aW9uIGFjY2Vzc29ycyBpbiBLVk0gSW50ZWwuCgpMb29rcyBsaWtlIGV2ZXJ5dGhpbmcgaXMgZXhhY3RseSB3aGVyZSBpdCBuZWVkcyB0byBiZSwgc28gbGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4gRG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2dF9oYW5kbGVfZXhpdF9pcnFvZmYmIzM0OywKICAgICYjMzQ7dnRfaGFuZGxlX25taSYjMzQ7LAogICAgJiMzNDt2dF92Y3B1X3BpX2xvYWQmIzM0OywKICAgICYjMzQ7dnRfdmNwdV9waV9wdXQmIzM0OywKICAgICYjMzQ7dnRfcGlfc3RhcnRfYnlwYXNzJiMzNDssCiAgICAmIzM0O3Z0X3BpX3VwZGF0ZV9pcnRlJiMzNDssCiAgICAmIzM0O3ZteF9oYW5kbGVfZXhpdCYjMzQ7LAogICAgJiMzNDt2bXhfdmNwdV9ydW4mIzM0OywKICAgICYjMzQ7bmVzdGVkX3ZteF9yZWZsZWN0X3ZtZXhpdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgS1ZNIEludGVsIChWTVgvVERYKSB2aXJ0dWFsaXphdGlvbiBsb2dpYyBieSBjb25zb2xpZGF0aW5nIGV4aXQgc3RhdHVzIGhhbmRsaW5nLCBleGl0IElSUS1vZmYgcHJvY2Vzc2luZywgcG9zdGVkIGludGVycnVwdCBoZWxwZXJzLCBhbmQgVk1DUyBleGl0IHF1YWxpZmljYXRpb24gYWNjZXNzb3JzIHVuZGVyIGNvbW1vbiB2dF8qIGFic3RyYWN0aW9ucy4gVGhpcyBhZmZlY3RzIGNvcmUgS1ZNIFZNIGV4aXQgaGFuZGxpbmcgYW5kIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiByZWFjaGFibGUgb24gYW1kNjQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2dF9oYW5kbGVfZXhpdF9pcnFvZmYmIzM0OywKICAgICYjMzQ7dnRfaGFuZGxlX25taSYjMzQ7LAogICAgJiMzNDt2dF92Y3B1X3BpX2xvYWQmIzM0OywKICAgICYjMzQ7dnRfdmNwdV9waV9wdXQmIzM0OywKICAgICYjMzQ7dnRfcGlfc3RhcnRfYnlwYXNzJiMzNDssCiAgICAmIzM0O3Z0X3BpX3VwZGF0ZV9pcnRlJiMzNDssCiAgICAmIzM0O3ZteF9oYW5kbGVfZXhpdCYjMzQ7LAogICAgJiMzNDt2bXhfdmNwdV9ydW4mIzM0OywKICAgICYjMzQ7bmVzdGVkX3ZteF9yZWZsZWN0X3ZtZXhpdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgS1ZNIEludGVsIChWTVgvVERYKSB2aXJ0dWFsaXphdGlvbiBsb2dpYyBieSBjb25zb2xpZGF0aW5nIGV4aXQgc3RhdHVzIGhhbmRsaW5nLCBleGl0IElSUS1vZmYgcHJvY2Vzc2luZywgcG9zdGVkIGludGVycnVwdCBoZWxwZXJzLCBhbmQgVk1DUyBleGl0IHF1YWxpZmljYXRpb24gYWNjZXNzb3JzIHVuZGVyIGNvbW1vbiB2dF8qIGFic3RyYWN0aW9ucy4gVGhpcyBhZmZlY3RzIGNvcmUgS1ZNIFZNIGV4aXQgaGFuZGxpbmcgYW5kIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiByZWFjaGFibGUgb24gYW1kNjQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA5OjI0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MjQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpcyBhIHJlZmFjdG9yaW5nIG9mIEtWTSBJbnRlbCBWTVggYW5kIFREWCBjb2RlIHRvIGNvbnNvbGlkYXRlIGNvbW1vbiB2aXJ0dWFsaXphdGlvbiBpbmZyYXN0cnVjdHVyZSAoVlQpIGJldHdlZW4gc3RhbmRhcmQgVk1YIGFuZCBURFggdkNQVXM6XG4xLiBJdCBkZWZpbmVzIGEgY29tbW9uIHdyYXBwZXIgbGF5b3V0IGBzdHJ1Y3QgdmNwdV92bXhfdGR4YCB3aXRoIGNvbXBpbGUtdGltZSBhc3NlcnRpb25zIChgc3RhdGljX2Fzc2VydGApIGVuc3VyaW5nIG9mZnNldCBtYXRjaGluZyBvZiBgc3RydWN0IHZjcHVfdnRgIGFjcm9zcyBgdmNwdV92bXhgIGFuZCBgdmNwdV90ZHhgLlxuMi4gSXQgbW92ZXMgYW5kIHJlbmFtZXMgaGVscGVyIGZ1bmN0aW9ucyAoYHRvX3Z0YCwgYHZ0X2dldF9leGl0X3JlYXNvbmAsIGB2dF9nZXRfZXhpdF9xdWFsYCwgYHZ0X2dldF9pbnRyX2luZm9gLCBldGMuKSBmcm9tIGB2bXguaGAvYHZteC5jYCB0byBgY29tbW9uLmhgL2BtYWluLmNgLlxuMy4gSXQgbW92ZXMgY29tbW9uIGV4aXQgYW5kIGludGVycnVwdCBoYW5kbGluZyBmdW5jdGlvbnMgKGB2dF9oYW5kbGVfZXhpdF9pcnFvZmZgLCBgdnRfaGFuZGxlX25taWAsIGBoYW5kbGVfZXh0ZXJuYWxfaW50ZXJydXB0X2lycW9mZmAsIGV0Yy4pIHRvIGBtYWluLmNgLlxuNC4gSXQgcmVuYW1lcyBwb3N0ZWQgaW50ZXJydXB0IHJvdXRpbmVzIHRvIHVzZSB0aGUgYHZ0X2AgcHJlZml4IGFjcm9zcyB0aGUgY29kZWJhc2UuXG5cbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmcgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgYnVmZmVyIGJvdW5kcy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBzdHJ1Y3QgbGF5b3V0IG9yIG9mZnNldHMgYXJlIGd1YXJkZWQgYXQgY29tcGlsZSB0aW1lIGJ5IGBzdGF0aWNfYXNzZXJ0YCBvciB3b3VsZCBtYW5pZmVzdCBhcyBtZW1vcnkgY29ycnVwdGlvbi9PT0IgYWNjZXNzIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgYnVpbGRzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDlkMjVmMDZhOTNhYWJlNjRmYmFkMGRlZDc0ZjczMDAwZjRhNDdjYzMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDA5OjI0OjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaCBiL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmgKaW5kZXggMDgwMDU2NzY3MDJjMi4uM2U2OGZhMTJhY2E2NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oCkBAIC0yLDEwICYjNDM7MiwxMiBAQAogI2lmbmRlZiBfX0tWTV9YODZfVk1YX0NPTU1PTl9ICiAjZGVmaW5lIF9fS1ZNX1g4Nl9WTVhfQ09NTU9OX0gKIAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jb250YWluZXJfb2YuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rdm1faG9zdC5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9wb3N0ZWRfaW50ci5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O21tdS5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3ZteF9vcHMuaCYjMzQ7CiAKIHVuaW9uIHZteF9leGl0X3JlYXNvbiB7CiAJc3RydWN0IHsKQEAgLTc0LDE0ICYjNDM7NzYsNjIgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3RkX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7IHJldHVybiBmYWxzZTsgfQogCiAjZW5kaWYKIAomIzQzO3N0cnVjdCB2Y3B1X3ZteF90ZHggewomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgdmNwdTsKJiM0MzsJc3RydWN0IHZjcHVfdnQgdnQ7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHN0cnVjdCB2Y3B1X3Z0ICp0b192dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlyZXR1cm4gJmFtcDsoY29udGFpbmVyX29mKHZjcHUsIHN0cnVjdCB2Y3B1X3ZteF90ZHgsIHZjcHUpLSZndDt2dCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IGt2bV92Y3B1ICp2dF90b192Y3B1KHN0cnVjdCB2Y3B1X3Z0ICp2dCkKJiM0Mzt7CiYjNDM7CXJldHVybiAmYW1wOyhjb250YWluZXJfb2YodnQsIHN0cnVjdCB2Y3B1X3ZteF90ZHgsIHZ0KS0mZ3Q7dmNwdSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5pb24gdm14X2V4aXRfcmVhc29uIHZ0X2dldF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlyZXR1cm4gdG9fdnQodmNwdSktJmd0O2V4aXRfcmVhc29uOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcgdnRfZ2V0X2V4aXRfcXVhbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdmNwdV92dCAqdnQgPSB0b192dCh2Y3B1KTsKJiM0MzsKJiM0MzsJaWYgKCFrdm1fcmVnaXN0ZXJfdGVzdF9hbmRfbWFya19hdmFpbGFibGUodmNwdSwgVkNQVV9SRUdfRVhJVF9JTkZPXzEpICZhbXA7JmFtcDsKJiM0MzsJICAgICFXQVJOX09OX09OQ0UoaXNfdGRfdmNwdSh2Y3B1KSkpCiYjNDM7CQl2dC0mZ3Q7ZXhpdF9xdWFsaWZpY2F0aW9uID0gdm1jc19yZWFkbChFWElUX1FVQUxJRklDQVRJT04pOwomIzQzOwomIzQzOwlyZXR1cm4gdnQtJmd0O2V4aXRfcXVhbGlmaWNhdGlvbjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdnRfZ2V0X2ludHJfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdmNwdV92dCAqdnQgPSB0b192dCh2Y3B1KTsKJiM0MzsKJiM0MzsJaWYgKCFrdm1fcmVnaXN0ZXJfdGVzdF9hbmRfbWFya19hdmFpbGFibGUodmNwdSwgVkNQVV9SRUdfRVhJVF9JTkZPXzIpICZhbXA7JmFtcDsKJiM0MzsJICAgICFXQVJOX09OX09OQ0UoaXNfdGRfdmNwdSh2Y3B1KSkpCiYjNDM7CQl2dC0mZ3Q7ZXhpdF9pbnRyX2luZm8gPSB2bWNzX3JlYWQzMihWTV9FWElUX0lOVFJfSU5GTyk7CiYjNDM7CiYjNDM7CXJldHVybiB2dC0mZ3Q7ZXhpdF9pbnRyX2luZm87CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBpc194ZmRfbm1fZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJcmV0dXJuIHZjcHUtJmd0O2FyY2guZ3Vlc3RfZnB1LmZwc3RhdGUtJmd0O3hmZCAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICAha3ZtX2lzX2NyMF9iaXRfc2V0KHZjcHUsIFg4Nl9DUjBfVFMpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgYm9vbCB2dF9pc190ZHhfcHJpdmF0ZV9ncGEoc3RydWN0IGt2bSAqa3ZtLCBncGFfdCBncGEpCiB7CiAJLyogRm9yIFREWCB0aGUgZGlyZWN0IG1hc2sgaXMgdGhlIHNoYXJlZCBtYXNrLiAqLwogCXJldHVybiAha3ZtX2lzX2FkZHJfZGlyZWN0KGt2bSwgZ3BhKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgX192bXhfaGFuZGxlX2VwdF92aW9sYXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsCi0JCQkJCSAgICAgdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24pCiYjNDM7c3RhdGljIGlubGluZSBpbnQgX192dF9oYW5kbGVfZXB0X3Zpb2xhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwKJiM0MzsJCQkJCSAgICB1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbikKIHsKIAl1NjQgZXJyb3JfY29kZTsKIApAQCAtMTY0LDggJiM0MzsyMTQsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3ZjcHVfdHJpZ2dlcl9wb3N0ZWRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKICAqIFBvc3QgYW4gaW50ZXJydXB0IHRvIGEgdkNQVSYjMzk7cyBQSVIgYW5kIHRyaWdnZXIgdGhlIHZDUFUgdG8gcHJvY2VzcyB0aGUKICAqIGludGVycnVwdCBpZiBuZWNlc3NhcnkuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3ZteF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJCQkJICBzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYywgaW50IHZlY3RvcikKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgX192dF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAomIzQzOwkJCQkJCSBzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYywgaW50IHZlY3RvcikKIHsKIAlpZiAocGlfdGVzdF9hbmRfc2V0X3Bpcih2ZWN0b3IsIHBpX2Rlc2MpKQogCQlyZXR1cm47CkBAIC0xODMsNiAmIzQzOzIzMyw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3ZteF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCWt2bV92Y3B1X3RyaWdnZXJfcG9zdGVkX2ludGVycnVwdCh2Y3B1LCBQT1NURURfSU5UUl9WRUNUT1IpOwogfQogCi1ub2luc3RyIHZvaWQgdm14X2hhbmRsZV9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKJiM0Mztub2luc3RyIHZvaWQgdnRfaGFuZGxlX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiAjZW5kaWYgLyogX19LVk1fWDg2X1ZNWF9DT01NT05fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9tYWluLmMgYi9hcmNoL3g4Ni9rdm0vdm14L21haW4uYwppbmRleCA0YzUyYWI4ZDA3ODY5Li42ZTBiMzk1OWQ3M2FiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L21haW4uYwpAQCAtMSw0ICYjNDM7MSw1IEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9lbnRyeS1jb21tb24uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGVwYXJhbS5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O3g4Nl9vcHMuaCYjMzQ7CkBAIC0xMCw4ICYjNDM7MTEsMTIgQEAKICNpbmNsdWRlICYjMzQ7dGR4LmgmIzM0OwogI2luY2x1ZGUgJiMzNDt0ZHhfYXJjaC5oJiMzNDsKIAomIzQzOyNwcmFnbWEgR0NDIHBvaXNvbiB0b192bXgKJiM0MzsKJiM0MztzdGF0aWNfYXNzZXJ0KG9mZnNldG9mKHN0cnVjdCB2Y3B1X3ZteF90ZHgsIHZ0KSA9PSBvZmZzZXRvZihzdHJ1Y3QgdmNwdV92bXgsIHZ0KSk7CiYjNDM7CiAjaWZkZWYgQ09ORklHX0tWTV9JTlRFTF9URFgKLXN0YXRpY19hc3NlcnQob2Zmc2V0b2Yoc3RydWN0IHZjcHVfdm14LCB2dCkgPT0gb2Zmc2V0b2Yoc3RydWN0IHZjcHVfdGR4LCB2dCkpOwomIzQzO3N0YXRpY19hc3NlcnQob2Zmc2V0b2Yoc3RydWN0IHZjcHVfdm14X3RkeCwgdnQpID09IG9mZnNldG9mKHN0cnVjdCB2Y3B1X3RkeCwgdnQpKTsKIAogc3RhdGljIHZvaWQgdnRfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUodm9pZCkKIHsKQEAgLTg3Niw2ICYjNDM7ODgxLDg1IEBAIHN0YXRpYyBpbnQgdnRfZ21lbV9tYXhfbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sCiAjZGVmaW5lIHZ0X29wX3RkeF9vbmx5KG5hbWUpIE5VTEwKICNlbmRpZiAvKiBDT05GSUdfS1ZNX0lOVEVMX1REWCAqLwogCiYjNDM7c3RhdGljIHZvaWQgaGFuZGxlX25tX2ZhdWx0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBTYXZlIHhmZF9lcnIgdG8gZ3Vlc3RfZnB1IGJlZm9yZSBpbnRlcnJ1cHQgaXMgZW5hYmxlZCwgc28gdGhlCiYjNDM7CSAqIE1TUiB2YWx1ZSBpcyBub3QgY2xvYmJlcmVkIGJ5IHRoZSBob3N0IGFjdGl2aXR5IGJlZm9yZSB0aGUgZ3Vlc3QKJiM0MzsJICogaGFzIGNoYW5jZSB0byBjb25zdW1lIGl0LgomIzQzOwkgKgomIzQzOwkgKiBVcGRhdGUgdGhlIGd1ZXN0JiMzOTtzIFhGRF9FUlIgaWYgYW5kIG9ubHkgaWYgWEZEIGlzIGVuYWJsZWQsIGFzIHRoZSAjTk0KJiM0MzsJICogaW50ZXJjZXB0aW9uIG1heSBoYXZlIGJlZW4gY2F1c2VkIGJ5IEwxIGludGVyY2VwdGlvbi4gIFBlciB0aGUgU0RNLAomIzQzOwkgKiBYRkRfRVJSIGlzIG5vdCBtb2RpZmllZCBmb3Igbm9uLVhGRCAjTk0sIGkuZS4gaWYgQ1IwLlRTPTEuCiYjNDM7CSAqCiYjNDM7CSAqIE5vdGUsIFhGRF9FUlIgaXMgdXBkYXRlZCBfYmVmb3JlXyB0aGUgI05NIGludGVyY2VwdGlvbiBjaGVjaywgaS5lLgomIzQzOwkgKiB1bmxpa2UgQ1IyIGFuZCBEUjYsIHRoZSB2YWx1ZSBpcyBub3QgYSBwYXlsb2FkIHRoYXQgaXMgYXR0YWNoZWQgdG8KJiM0MzsJICogdGhlICNOTSBleGNlcHRpb24uCiYjNDM7CSAqLwomIzQzOwlpZiAoaXNfeGZkX25tX2ZhdWx0KHZjcHUpKQomIzQzOwkJcmRtc3JxKE1TUl9JQTMyX1hGRF9FUlIsIHZjcHUtJmd0O2FyY2guZ3Vlc3RfZnB1LnhmZF9lcnIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBoYW5kbGVfZXhjZXB0aW9uX2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBpbnRyX2luZm8pCiYjNDM7ewomIzQzOwkvKiBpZiBleGl0IGR1ZSB0byBQRiBjaGVjayBmb3IgYXN5bmMgUEYgKi8KJiM0MzsJaWYgKGlzX3BhZ2VfZmF1bHQoaW50cl9pbmZvKSkKJiM0MzsJCXZjcHUtJmd0O2FyY2guYXBmLmhvc3RfYXBmX2ZsYWdzID0ga3ZtX3JlYWRfYW5kX3Jlc2V0X2FwZl9mbGFncygpOwomIzQzOwkvKiBpZiBleGl0IGR1ZSB0byBOTSwgaGFuZGxlIGJlZm9yZSBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkICovCiYjNDM7CWVsc2UgaWYgKGlzX25tX2ZhdWx0KGludHJfaW5mbykpCiYjNDM7CQloYW5kbGVfbm1fZmF1bHRfaXJxb2ZmKHZjcHUpOwomIzQzOwkvKiBIYW5kbGUgbWFjaGluZSBjaGVja3MgYmVmb3JlIGludGVycnVwdHMgYXJlIGVuYWJsZWQgKi8KJiM0MzsJZWxzZSBpZiAoaXNfbWFjaGluZV9jaGVjayhpbnRyX2luZm8pKQomIzQzOwkJa3ZtX21hY2hpbmVfY2hlY2soKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaGFuZGxlX2V4dGVybmFsX2ludGVycnVwdF9pcnFvZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAomIzQzOwkJCQkJICAgICB1MzIgaW50cl9pbmZvKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IHZlY3RvciA9IGludHJfaW5mbyAmYW1wOyBJTlRSX0lORk9fVkVDVE9SX01BU0s7CiYjNDM7CiYjNDM7CWlmIChLVk1fQlVHKCFpc19leHRlcm5hbF9pbnRyKGludHJfaW5mbyksIHZjcHUtJmd0O2t2bSwKJiM0MzsJICAgICYjMzQ7dW5leHBlY3RlZCBWTS1FeGl0IGludGVycnVwdCBpbmZvOiAweCV4JiMzNDssIGludHJfaW5mbykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWt2bV9iZWZvcmVfaW50ZXJydXB0KHZjcHUsIEtWTV9IQU5ETElOR19JUlEpOwomIzQzOwl4ODZfZW50cnlfZnJvbV9rdm0oRVZFTlRfVFlQRV9FWFRJTlQsIHZlY3Rvcik7CiYjNDM7CWt2bV9hZnRlcl9pbnRlcnJ1cHQodmNwdSk7CiYjNDM7CiYjNDM7CXZjcHUtJmd0O2FyY2guYXRfaW5zdHJ1Y3Rpb25fYm91bmRhcnkgPSB0cnVlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB2dF9oYW5kbGVfZXhpdF9pcnFvZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJaWYgKHRvX3Z0KHZjcHUpLSZndDtlbXVsYXRpb25fcmVxdWlyZWQpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXN3aXRjaCAodnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljKSB7CiYjNDM7CWNhc2UgRVhJVF9SRUFTT05fRVhURVJOQUxfSU5URVJSVVBUOgomIzQzOwkJaGFuZGxlX2V4dGVybmFsX2ludGVycnVwdF9pcnFvZmYodmNwdSwgdnRfZ2V0X2ludHJfaW5mbyh2Y3B1KSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBFWElUX1JFQVNPTl9FWENFUFRJT05fTk1JOgomIzQzOwkJaGFuZGxlX2V4Y2VwdGlvbl9pcnFvZmYodmNwdSwgdnRfZ2V0X2ludHJfaW5mbyh2Y3B1KSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBFWElUX1JFQVNPTl9NQ0VfRFVSSU5HX1ZNRU5UUlk6CiYjNDM7CQlrdm1fbWFjaGluZV9jaGVjaygpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0Mztub2luc3RyIHZvaWQgdnRfaGFuZGxlX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlpZiAoKHUxNil2dF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMgIT0gRVhJVF9SRUFTT05fRVhDRVBUSU9OX05NSSB8fAomIzQzOwkgICAgIWlzX25taSh2dF9nZXRfaW50cl9pbmZvKHZjcHUpKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJa3ZtX2JlZm9yZV9pbnRlcnJ1cHQodmNwdSwgS1ZNX0hBTkRMSU5HX05NSSk7CiYjNDM7CXg4Nl9lbnRyeV9mcm9tX2t2bShFVkVOVF9UWVBFX05NSSwgTk1JX1ZFQ1RPUik7CiYjNDM7CWt2bV9hZnRlcl9pbnRlcnJ1cHQodmNwdSk7CiYjNDM7fQomIzQzOwogI2RlZmluZSBWTVhfUkVRVUlSRURfQVBJQ1ZfSU5ISUJJVFMJCQkJXAogCShCSVQoQVBJQ1ZfSU5ISUJJVF9SRUFTT05fRElTQUJMRUQpIHwJCQlcCiAJIEJJVChBUElDVl9JTkhJQklUX1JFQVNPTl9BQlNFTlQpIHwJCQlcCkBAIC0xMDAwLDEyICYjNDM7MTA4NCwxMiBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgdnRfeDg2X29wcyBfX2luaXRkYXRhID0gewogCS5sb2FkX21tdV9wZ2QgPSB2dF9vcChsb2FkX21tdV9wZ2QpLAogCiAJLmNoZWNrX2ludGVyY2VwdCA9IHZteF9jaGVja19pbnRlcmNlcHQsCi0JLmhhbmRsZV9leGl0X2lycW9mZiA9IHZteF9oYW5kbGVfZXhpdF9pcnFvZmYsCiYjNDM7CS5oYW5kbGVfZXhpdF9pcnFvZmYgPSB2dF9oYW5kbGVfZXhpdF9pcnFvZmYsCiAKIAkudXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nID0gdnRfb3AodXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKSwKIAotCS5waV91cGRhdGVfaXJ0ZSA9IHZteF9waV91cGRhdGVfaXJ0ZSwKLQkucGlfc3RhcnRfYnlwYXNzID0gdm14X3BpX3N0YXJ0X2J5cGFzcywKJiM0MzsJLnBpX3VwZGF0ZV9pcnRlID0gdnRfcGlfdXBkYXRlX2lydGUsCiYjNDM7CS5waV9zdGFydF9ieXBhc3MgPSB2dF9waV9zdGFydF9ieXBhc3MsCiAKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAJLnNldF9odl90aW1lciA9IHZ0X29wKHNldF9odl90aW1lciksCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYwppbmRleCAxNTE4NzM0MDdhYmQzLi40NzU5OWU3MzEyY2ZkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMKQEAgLTQ0Niw3ICYjNDM7NDQ2LDcgQEAgc3RhdGljIHZvaWQgbmVzdGVkX2VwdF9pbmplY3RfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCSAqICYjMzQ7Tk1JIHVuYmxvY2tpbmcgZHVlIHRvIElSRVQmIzM0OywgaS5lLiB0aGUgYml0IGNhbiBiZSBwcm9wYWdhdGVkCiAJCSAqIGFzLWlzIGZyb20gdGhlIG9yaWdpbmFsIEVYSVRfUVVBTElGSUNBVElPTi4KIAkJICovCi0JCWV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpICZhbXA7IElOVFJfSU5GT19VTkJMT0NLX05NSTsKJiM0MzsJCWV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSkgJmFtcDsgSU5UUl9JTkZPX1VOQkxPQ0tfTk1JOwogCX0gZWxzZSB7CiAJCWlmIChmYXVsdC0mZ3Q7ZXJyb3JfY29kZSAmYW1wOyBQRkVSUl9SU1ZEX01BU0spIHsKIAkJCXZtX2V4aXRfcmVhc29uID0gRVhJVF9SRUFTT05fRVBUX01JU0NPTkZJRzsKQEAgLTQ3Miw3ICYjNDM7NDcyLDcgQEAgc3RhdGljIHZvaWQgbmVzdGVkX2VwdF9pbmplY3RfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkgKiBhbmQgd2Fsa3MgdGhlIGZhdWx0aW5nIEdQQS4KIAkJCSAqLwogCQkJaWYgKGZyb21faGFyZHdhcmUpCi0JCQkJZXhpdF9xdWFsaWZpY2F0aW9uIHw9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpICZhbXA7IG1hc2s7CiYjNDM7CQkJCWV4aXRfcXVhbGlmaWNhdGlvbiB8PSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpICZhbXA7IG1hc2s7CiAJCQllbHNlCiAJCQkJZXhpdF9xdWFsaWZpY2F0aW9uIHw9IGZhdWx0LSZndDtleGl0X3F1YWxpZmljYXRpb24gJmFtcDsgbWFzazsKIApAQCAtNDc0Nyw3ICYjNDM7NDc0Nyw3IEBAIHN0YXRpYyB2b2lkIHByZXBhcmVfdm1jczEyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZtY3MxMiAqdm1jczEyLAogewogCS8qIHVwZGF0ZSBleGl0IGluZm9ybWF0aW9uIGZpZWxkczogKi8KIAl2bWNzMTItJmd0O3ZtX2V4aXRfcmVhc29uID0gdm1fZXhpdF9yZWFzb247Ci0JaWYgKHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZW5jbGF2ZV9tb2RlKQomIzQzOwlpZiAodnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmVuY2xhdmVfbW9kZSkKIAkJdm1jczEyLSZndDt2bV9leGl0X3JlYXNvbiB8PSBWTVhfRVhJVF9SRUFTT05TX1NHWF9FTkNMQVZFX01PREU7CiAJdm1jczEyLSZndDtleGl0X3F1YWxpZmljYXRpb24gPSBleGl0X3F1YWxpZmljYXRpb247CiAKQEAgLTUzNzMsNyAmIzQzOzUzNzMsNyBAQCBzdGF0aWMgaW50IG5lc3RlZF92bXhfZ2V0X3ZtcHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgKnZtcG9pbnRlciwKIAlzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBlOwogCWludCByOwogCi0JaWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgdm14X2dldF9leGl0X3F1YWwodmNwdSksCiYjNDM7CWlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZ0X2dldF9leGl0X3F1YWwodmNwdSksCiAJCQkJdm1jc19yZWFkMzIoVk1YX0lOU1RSVUNUSU9OX0lORk8pLCBmYWxzZSwKIAkJCQlzaXplb2YoKnZtcG9pbnRlciksICZhbXA7Z3ZhKSkgewogCQkqcmV0ID0gMTsKQEAgLTU2NjUsNyAmIzQzOzU2NjUsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXJlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXN0cnVjdCB2bWNzMTIgKnZtY3MxMiA9IGlzX2d1ZXN0X21vZGUodmNwdSkgPyBnZXRfc2hhZG93X3ZtY3MxMih2Y3B1KQogCQkJCQkJICAgIDogZ2V0X3ZtY3MxMih2Y3B1KTsKLQl1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpOwomIzQzOwl1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7CiAJdTMyIGluc3RyX2luZm8gPSB2bWNzX3JlYWQzMihWTVhfSU5TVFJVQ1RJT05fSU5GTyk7CiAJc3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7CiAJc3RydWN0IHg4Nl9leGNlcHRpb24gZTsKQEAgLTU3NzEsNyAmIzQzOzU3NzEsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXdyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3Qgdm1jczEyICp2bWNzMTIgPSBpc19ndWVzdF9tb2RlKHZjcHUpID8gZ2V0X3NoYWRvd192bWNzMTIodmNwdSkKIAkJCQkJCSAgICA6IGdldF92bWNzMTIodmNwdSk7Ci0JdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKJiM0MzsJdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpOwogCXUzMiBpbnN0cl9pbmZvID0gdm1jc19yZWFkMzIoVk1YX0lOU1RSVUNUSU9OX0lORk8pOwogCXN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpOwogCXN0cnVjdCB4ODZfZXhjZXB0aW9uIGU7CkBAIC01OTYwLDcgJiM0Mzs1OTYwLDcgQEAgc3RhdGljIGludCBoYW5kbGVfdm1wdHJsZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAvKiBFbXVsYXRlIHRoZSBWTVBUUlNUIGluc3RydWN0aW9uICovCiBzdGF0aWMgaW50IGhhbmRsZV92bXB0cnN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQl1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpOwomIzQzOwl1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7CiAJdTMyIGluc3RyX2luZm8gPSB2bWNzX3JlYWQzMihWTVhfSU5TVFJVQ1RJT05fSU5GTyk7CiAJZ3BhX3QgY3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS0mZ3Q7bmVzdGVkLmN1cnJlbnRfdm1wdHI7CiAJc3RydWN0IHg4Nl9leGNlcHRpb24gZTsKQEAgLTYwMjEsNyAmIzQzOzYwMjEsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9pbnZlcHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCS8qIEFjY29yZGluZyB0byB0aGUgSW50ZWwgVk1YIGluc3RydWN0aW9uIHJlZmVyZW5jZSwgdGhlIG1lbW9yeQogCSAqIG9wZXJhbmQgaXMgcmVhZCBldmVuIGlmIGl0IGlzbiYjMzk7dCBuZWVkZWQgKGUuZy4sIGZvciB0eXBlPT1nbG9iYWwpCiAJICovCi0JaWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgdm14X2dldF9leGl0X3F1YWwodmNwdSksCiYjNDM7CWlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZ0X2dldF9leGl0X3F1YWwodmNwdSksCiAJCQl2bXhfaW5zdHJ1Y3Rpb25faW5mbywgZmFsc2UsIHNpemVvZihvcGVyYW5kKSwgJmFtcDtndmEpKQogCQlyZXR1cm4gMTsKIAlyID0ga3ZtX3JlYWRfZ3Vlc3RfdmlydCh2Y3B1LCBndmEsICZhbXA7b3BlcmFuZCwgc2l6ZW9mKG9wZXJhbmQpLCAmYW1wO2UpOwpAQCAtNjEwNCw3ICYjNDM7NjEwNCw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2ludnZwaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCS8qIGFjY29yZGluZyB0byB0aGUgaW50ZWwgdm14IGluc3RydWN0aW9uIHJlZmVyZW5jZSwgdGhlIG1lbW9yeQogCSAqIG9wZXJhbmQgaXMgcmVhZCBldmVuIGlmIGl0IGlzbiYjMzk7dCBuZWVkZWQgKGUuZy4sIGZvciB0eXBlPT1nbG9iYWwpCiAJICovCi0JaWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgdm14X2dldF9leGl0X3F1YWwodmNwdSksCiYjNDM7CWlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZ0X2dldF9leGl0X3F1YWwodmNwdSksCiAJCQl2bXhfaW5zdHJ1Y3Rpb25faW5mbywgZmFsc2UsIHNpemVvZihvcGVyYW5kKSwgJmFtcDtndmEpKQogCQlyZXR1cm4gMTsKIAlyID0ga3ZtX3JlYWRfZ3Vlc3RfdmlydCh2Y3B1LCBndmEsICZhbXA7b3BlcmFuZCwgc2l6ZW9mKG9wZXJhbmQpLCAmYW1wO2UpOwpAQCAtNjIzNiw4ICYjNDM7NjIzNiw4IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3ZtZnVuYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJICogRVhJVF9SRUFTT05fVk1GVU5DIGFzIHRoZSBleGl0IHJlYXNvbi4KIAkgKi8KIAluZXN0ZWRfdm14X3ZtZXhpdCh2Y3B1LCB2bXgtJmd0O3Z0LmV4aXRfcmVhc29uLmZ1bGwsCi0JCQkgIHZteF9nZXRfaW50cl9pbmZvKHZjcHUpLAotCQkJICB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSk7CiYjNDM7CQkJICB2dF9nZXRfaW50cl9pbmZvKHZjcHUpLAomIzQzOwkJCSAgdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KSk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTYyODgsNyAmIzQzOzYyODgsNyBAQCBzdGF0aWMgYm9vbCBuZXN0ZWRfdm14X2V4aXRfaGFuZGxlZF9pbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJaWYgKCFuZXN0ZWRfY3B1X2hhcyh2bWNzMTIsIENQVV9CQVNFRF9VU0VfSU9fQklUTUFQUykpCiAJCXJldHVybiBuZXN0ZWRfY3B1X2hhcyh2bWNzMTIsIENQVV9CQVNFRF9VTkNPTkRfSU9fRVhJVElORyk7CiAKLQlleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKJiM0MzsJZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKIAogCXBvcnQgPSBleGl0X3F1YWxpZmljYXRpb24gJmd0OyZndDsgMTY7CiAJc2l6ZSA9IChleGl0X3F1YWxpZmljYXRpb24gJmFtcDsgNykgJiM0MzsgMTsKQEAgLTYzMTQsNyAmIzQzOzYzMTQsNyBAQCBzdGF0aWMgYm9vbCBuZXN0ZWRfdm14X2V4aXRfaGFuZGxlZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCiAJaWYgKGV4aXRfcmVhc29uLmJhc2ljID09IEVYSVRfUkVBU09OX01TUl9SRUFEX0lNTSB8fAogCSAgICBleGl0X3JlYXNvbi5iYXNpYyA9PSBFWElUX1JFQVNPTl9NU1JfV1JJVEVfSU1NKQotCQltc3JfaW5kZXggPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKJiM0MzsJCW1zcl9pbmRleCA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7CiAJZWxzZQogCQltc3JfaW5kZXggPSBrdm1fZWN4X3JlYWQodmNwdSk7CiAKQEAgLTYzNTAsNyAmIzQzOzYzNTAsNyBAQCBzdGF0aWMgYm9vbCBuZXN0ZWRfdm14X2V4aXRfaGFuZGxlZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogc3RhdGljIGJvb2wgbmVzdGVkX3ZteF9leGl0X2hhbmRsZWRfY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCXN0cnVjdCB2bWNzMTIgKnZtY3MxMikKIHsKLQl1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpOwomIzQzOwl1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7CiAJaW50IGNyID0gZXhpdF9xdWFsaWZpY2F0aW9uICZhbXA7IDE1OwogCWludCByZWc7CiAJdW5zaWduZWQgbG9uZyB2YWw7CkBAIC02NDg0LDcgJiM0Mzs2NDg0LDcgQEAgc3RhdGljIGJvb2wgbmVzdGVkX3ZteF9sMF93YW50c19leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAogCXN3aXRjaCAoKHUxNilleGl0X3JlYXNvbi5iYXNpYykgewogCWNhc2UgRVhJVF9SRUFTT05fRVhDRVBUSU9OX05NSToKLQkJaW50cl9pbmZvID0gdm14X2dldF9pbnRyX2luZm8odmNwdSk7CiYjNDM7CQlpbnRyX2luZm8gPSB2dF9nZXRfaW50cl9pbmZvKHZjcHUpOwogCQlpZiAoaXNfbm1pKGludHJfaW5mbykpCiAJCQlyZXR1cm4gdHJ1ZTsKIAkJZWxzZSBpZiAoaXNfcGFnZV9mYXVsdChpbnRyX2luZm8pKQpAQCAtNjU2Nyw3ICYjNDM7NjU2Nyw3IEBAIHN0YXRpYyBib29sIG5lc3RlZF92bXhfbDFfd2FudHNfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAKIAlzd2l0Y2ggKCh1MTYpZXhpdF9yZWFzb24uYmFzaWMpIHsKIAljYXNlIEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUk6Ci0JCWludHJfaW5mbyA9IHZteF9nZXRfaW50cl9pbmZvKHZjcHUpOwomIzQzOwkJaW50cl9pbmZvID0gdnRfZ2V0X2ludHJfaW5mbyh2Y3B1KTsKIAkJaWYgKGlzX25taShpbnRyX2luZm8pKQogCQkJcmV0dXJuIHRydWU7CiAJCWVsc2UgaWYgKGlzX3BhZ2VfZmF1bHQoaW50cl9pbmZvKSkKQEAgLTY3MzcsMTQgJiM0Mzs2NzM3LDE0IEBAIGJvb2wgbmVzdGVkX3ZteF9yZWZsZWN0X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJICogbmVlZCB0byBiZSBzeW50aGVzaXplZCBieSBxdWVyeWluZyB0aGUgaW4ta2VybmVsIExBUElDLCBidXQgZXh0ZXJuYWwKIAkgKiBpbnRlcnJ1cHRzIGFyZSBuZXZlciByZWZsZWN0ZWQgdG8gTDEgc28gaXQmIzM5O3MgYSBub24taXNzdWUuCiAJICovCi0JZXhpdF9pbnRyX2luZm8gPSB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KTsKJiM0MzsJZXhpdF9pbnRyX2luZm8gPSB2dF9nZXRfaW50cl9pbmZvKHZjcHUpOwogCWlmIChpc19leGNlcHRpb25fd2l0aF9lcnJvcl9jb2RlKGV4aXRfaW50cl9pbmZvKSkgewogCQlzdHJ1Y3Qgdm1jczEyICp2bWNzMTIgPSBnZXRfdm1jczEyKHZjcHUpOwogCiAJCXZtY3MxMi0mZ3Q7dm1fZXhpdF9pbnRyX2Vycm9yX2NvZGUgPQogCQkJdm1jc19yZWFkMzIoVk1fRVhJVF9JTlRSX0VSUk9SX0NPREUpOwogCX0KLQlleGl0X3F1YWwgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKJiM0MzsJZXhpdF9xdWFsID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKIAogcmVmbGVjdF92bWV4aXQ6CiAJbmVzdGVkX3ZteF92bWV4aXQodmNwdSwgZXhpdF9yZWFzb24uZnVsbCwgZXhpdF9pbnRyX2luZm8sIGV4aXRfcXVhbCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmMgYi9hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmMKaW5kZXggNGE2ZDlhMTdkYTIzOC4uMjY0NGFkZDU0Yjc2YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYwpAQCAtMTQsNiAmIzQzOzE0LDggQEAKICNpbmNsdWRlICYjMzQ7dm14LmgmIzM0OwogI2luY2x1ZGUgJiMzNDt0ZHguaCYjMzQ7CiAKJiM0MzsjcHJhZ21hIEdDQyBwb2lzb24gdG9fdm14CiYjNDM7CiAvKgogICogTWFpbnRhaW4gYSBwZXItQ1BVIGxpc3Qgb2YgdkNQVXMgdGhhdCBuZWVkIHRvIGJlIGF3YWtlbmVkIGJ5IHdha2V1cF9oYW5kbGVyKCkKICAqIHdoZW4gYSBXQUtFVVBfVkVDVE9SIGludGVycnVwdGVkIGlzIHBvc3RlZC4gIHZDUFVzIGFyZSBhZGRlZCB0byB0aGUgbGlzdCB3aGVuCkBAIC01NCw3ICYjNDM7NTYsNyBAQCBzdGF0aWMgaW50IHBpX3RyeV9zZXRfY29udHJvbChzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYywgdTY0ICpwb2xkLCB1NjQgbmV3KQogCXJldHVybiAwOwogfQogCi12b2lkIHZteF92Y3B1X3BpX2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KQomIzQzO3ZvaWQgdnRfdmNwdV9waV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSkKIHsKIAlzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYyA9IHZjcHVfdG9fcGlfZGVzYyh2Y3B1KTsKIAlzdHJ1Y3QgdmNwdV92dCAqdnQgPSB0b192dCh2Y3B1KTsKQEAgLTE0NCwxMSAmIzQzOzE0NiwxMSBAQCB2b2lkIHZteF92Y3B1X3BpX2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KQogCQlwaV9zZXRfb24ocGlfZGVzYyk7CiB9CiAKLXN0YXRpYyBib29sIHZteF9jYW5fdXNlX3Z0ZF9waShzdHJ1Y3Qga3ZtICprdm0pCiYjNDM7c3RhdGljIGJvb2wgdnRfY2FuX3VzZV92dGRfcGkoc3RydWN0IGt2bSAqa3ZtKQogewogCS8qCiAJICogTm90ZSwgcmVhZGluZyB0aGUgbnVtYmVyIG9mIHBvc3NpYmxlIGJ5cGFzcyBJUlFzIGNhbiByYWNlIHdpdGggYQotCSAqIGJ5cGFzcyBJUlEgYmVpbmcgYXR0YWNoZWQgdG8gdGhlIFZNLiAgdm14X3BpX3N0YXJ0X2J5cGFzcygpIGVuc3VyZXMKJiM0MzsJICogYnlwYXNzIElSUSBiZWluZyBhdHRhY2hlZCB0byB0aGUgVk0uICB2dF9waV9zdGFydF9ieXBhc3MoKSBlbnN1cmVzCiAJICogYmxvY2tuZyB2Q1BVcyB3aWxsIHNlZSBhbiBlbGV2YXRlZCBjb3VudCBvciBnZXQgS1ZNX1JFUV9VTkJMT0NLLgogCSAqLwogCXJldHVybiBpcnFjaGlwX2luX2tlcm5lbChrdm0pICZhbXA7JmFtcDsga3ZtX2FyY2hfaGFzX2lycV9ieXBhc3MoKSAmYW1wOyZhbXA7CkBAIC0yMDYsNyAmIzQzOzIwOCw3IEBAIHN0YXRpYyB2b2lkIHBpX2VuYWJsZV93YWtldXBfaGFuZGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJCV9fYXBpY19zZW5kX0lQSV9zZWxmKFBPU1RFRF9JTlRSX1dBS0VVUF9WRUNUT1IpOwogfQogCi1zdGF0aWMgYm9vbCB2bXhfbmVlZHNfcGlfd2FrZXVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0MztzdGF0aWMgYm9vbCB2dF9uZWVkc19waV93YWtldXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCS8qCiAJICogVGhlIGRlZmF1bHQgcG9zdGVkIGludGVycnVwdCB2ZWN0b3IgZG9lcyBub3RoaW5nIHdoZW4KQEAgLTIxNywxNCAmIzQzOzIxOSwxNCBAQCBzdGF0aWMgYm9vbCB2bXhfbmVlZHNfcGlfd2FrZXVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkgKiBiYWNrIHRvIHRoZSBwaV93YWtldXBfaGFuZGxlcigpIGZ1bmN0aW9uLgogCSAqLwogCXJldHVybiAodm14X2Nhbl91c2VfaXBpdih2Y3B1KSAmYW1wOyZhbXA7ICFpc190ZF92Y3B1KHZjcHUpKSB8fAotCQl2bXhfY2FuX3VzZV92dGRfcGkodmNwdS0mZ3Q7a3ZtKTsKJiM0MzsJCXZ0X2Nhbl91c2VfdnRkX3BpKHZjcHUtJmd0O2t2bSk7CiB9CiAKLXZvaWQgdm14X3ZjcHVfcGlfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mzt2b2lkIHZ0X3ZjcHVfcGlfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYyA9IHZjcHVfdG9fcGlfZGVzYyh2Y3B1KTsKIAotCWlmICghdm14X25lZWRzX3BpX3dha2V1cCh2Y3B1KSkKJiM0MzsJaWYgKCF2dF9uZWVkc19waV93YWtldXAodmNwdSkpCiAJCXJldHVybjsKIAogCS8qCkBAIC0yOTIsMTcgJiM0MzsyOTQsMTcgQEAgYm9vbCBwaV9oYXNfcGVuZGluZ19pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogLyoKICAqIEtpY2sgYWxsIHZDUFVzIHdoZW4gdGhlIGZpcnN0IHBvc3NpYmxlIGJ5cGFzcyBJUlEgaXMgYXR0YWNoZWQgdG8gYSBWTSwgYXMKICAqIGJsb2NraW5nIHZDUFVzIG1heSBzY2hlZHVsZWQgb3V0IHdpdGhvdXQgcmVjb25maWd1cmluZyBQSUQuTlYgdG8gdGhlIHdha2V1cAotICogdmVjdG9yLCBpLmUuIGlmIHRoZSBieXBhc3MgSVJRIGNhbWUgYWxvbmcgYWZ0ZXIgdm14X3ZjcHVfcGlfcHV0KCkuCiYjNDM7ICogdmVjdG9yLCBpLmUuIGlmIHRoZSBieXBhc3MgSVJRIGNhbWUgYWxvbmcgYWZ0ZXIgdnRfdmNwdV9waV9wdXQoKS4KICAqLwotdm9pZCB2bXhfcGlfc3RhcnRfYnlwYXNzKHN0cnVjdCBrdm0gKmt2bSkKJiM0Mzt2b2lkIHZ0X3BpX3N0YXJ0X2J5cGFzcyhzdHJ1Y3Qga3ZtICprdm0pCiB7Ci0JaWYgKFdBUk5fT05fT05DRSghdm14X2Nhbl91c2VfdnRkX3BpKGt2bSkpKQomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCF2dF9jYW5fdXNlX3Z0ZF9waShrdm0pKSkKIAkJcmV0dXJuOwogCiAJa3ZtX21ha2VfYWxsX2NwdXNfcmVxdWVzdChrdm0sIEtWTV9SRVFfVU5CTE9DSyk7CiB9CiAKLWludCB2bXhfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sCiYjNDM7aW50IHZ0X3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLAogCQkgICAgICAgdW5zaWduZWQgaW50IGhvc3RfaXJxLCB1aW50MzJfdCBndWVzdF9pcnEsCiAJCSAgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2ZWN0b3IpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmggYi9hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmgKaW5kZXggYTRhZjM5OTQ4Y2YwNC4uYzU4NjBlYTgyOGFlOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuaApAQCAtOCwxNiAmIzQzOzgsMTYgQEAKIAogI2luY2x1ZGUgJmx0O2FzbS9wb3N0ZWRfaW50ci5oJmd0OwogCi12b2lkIHZteF92Y3B1X3BpX2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTsKLXZvaWQgdm14X3ZjcHVfcGlfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiYjNDM7dm9pZCB2dF92Y3B1X3BpX2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTsKJiM0Mzt2b2lkIHZ0X3ZjcHVfcGlfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiB2b2lkIHBpX3dha2V1cF9oYW5kbGVyKHZvaWQpOwogdm9pZCBfX2luaXQgcGlfaW5pdF9jcHUoaW50IGNwdSk7CiB2b2lkIHBpX2FwaWN2X3ByZV9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBib29sIHBpX2hhc19wZW5kaW5nX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwotaW50IHZteF9waV91cGRhdGVfaXJ0ZShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQsIHN0cnVjdCBrdm0gKmt2bSwKJiM0MztpbnQgdnRfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sCiAJCSAgICAgICB1bnNpZ25lZCBpbnQgaG9zdF9pcnEsIHVpbnQzMl90IGd1ZXN0X2lycSwKIAkJICAgICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZlY3Rvcik7Ci12b2lkIHZteF9waV9zdGFydF9ieXBhc3Moc3RydWN0IGt2bSAqa3ZtKTsKJiM0Mzt2b2lkIHZ0X3BpX3N0YXJ0X2J5cGFzcyhzdHJ1Y3Qga3ZtICprdm0pOwogCiBzdGF0aWMgaW5saW5lIGludCBwaV9maW5kX2hpZ2hlc3RfdmVjdG9yKHN0cnVjdCBwaV9kZXNjICpwaV9kZXNjKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmMKaW5kZXggYjI3MmMyMDU4NmE3NC4uZWZiYjFhYzZmNTFlYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jCkBAIC03MTYsNyAmIzQzOzcxNiw3IEBAIHZvaWQgdGR4X3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpCiB7CiAJc3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7CiAKLQl2bXhfdmNwdV9waV9sb2FkKHZjcHUsIGNwdSk7CiYjNDM7CXZ0X3ZjcHVfcGlfbG9hZCh2Y3B1LCBjcHUpOwogCWlmICh2Y3B1LSZndDtjcHUgPT0gY3B1IHx8ICFpc19oa2lkX2Fzc2lnbmVkKHRvX2t2bV90ZHgodmNwdS0mZ3Q7a3ZtKSkpCiAJCXJldHVybjsKIApAQCAtNzQxLDcgJiM0Mzs3NDEsNyBAQCBib29sIHRkeF9pbnRlcnJ1cHRfYWxsb3dlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJICogaW50ZXJydXB0IGlzIGFsd2F5cyBhbGxvd2VkIHVubGVzcyBURFggZ3Vlc3QgY2FsbHMgVERWTUNBTEwgd2l0aCBITFQsCiAJICogd2hpY2ggcGFzc2VzIHRoZSBpbnRlcnJ1cHQgYmxvY2tlZCBmbGFnLgogCSAqLwotCXJldHVybiB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljICE9IEVYSVRfUkVBU09OX0hMVCB8fAomIzQzOwlyZXR1cm4gdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljICE9IEVYSVRfUkVBU09OX0hMVCB8fAogCSAgICAgICAhdG9fdGR4KHZjcHUpLSZndDt2cF9lbnRlcl9hcmdzLnIxMjsKIH0KIApAQCAtNzU5LDcgJiM0Mzs3NTksNyBAQCBzdGF0aWMgYm9vbCB0ZHhfcHJvdGVjdGVkX2FwaWNfaGFzX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJICogb3RoZXJ3aXNlIHRoZSBpbnRlcnJ1cHQgd291bGQgaGF2ZSBiZWVuIHNlcnZpY2VkIGF0IHRoZSBpbnN0cnVjdGlvbgogCSAqIGJvdW5kYXJ5LgogCSAqLwotCWlmICh2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljICE9IEVYSVRfUkVBU09OX0hMVCB8fAomIzQzOwlpZiAodnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljICE9IEVYSVRfUkVBU09OX0hMVCB8fAogCSAgICB0b190ZHgodmNwdSktJmd0O3ZwX2VudGVyX2FyZ3MucjEyKQogCQlyZXR1cm4gZmFsc2U7CiAKQEAgLTgyNiw3ICYjNDM7ODI2LDcgQEAgc3RhdGljIHZvaWQgdGR4X3ByZXBhcmVfc3dpdGNoX3RvX2hvc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiB2b2lkIHRkeF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0Jdm14X3ZjcHVfcGlfcHV0KHZjcHUpOwomIzQzOwl2dF92Y3B1X3BpX3B1dCh2Y3B1KTsKIAl0ZHhfcHJlcGFyZV9zd2l0Y2hfdG9faG9zdCh2Y3B1KTsKIH0KIApAQCAtOTc0LDE1ICYjNDM7OTc0LDE1IEBAIHN0YXRpYyBub2luc3RyIHZvaWQgdGR4X3ZjcHVfZW50ZXJfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJdGR4LSZndDtleGl0X2dwYSA9IHRkeC0mZ3Q7dnBfZW50ZXJfYXJncy5yODsKIAl2dC0mZ3Q7ZXhpdF9pbnRyX2luZm8gPSB0ZHgtJmd0O3ZwX2VudGVyX2FyZ3Mucjk7CiAKLQl2bXhfaGFuZGxlX25taSh2Y3B1KTsKJiM0MzsJdnRfaGFuZGxlX25taSh2Y3B1KTsKIAogCWd1ZXN0X3N0YXRlX2V4aXRfaXJxb2ZmKCk7CiB9CiAKIHN0YXRpYyBib29sIHRkeF9mYWlsZWRfdm1lbnRyeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JcmV0dXJuIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkgJmFtcDsmYW1wOwotCSAgICAgICB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZ1bGwgIT0gLTF1OwomIzQzOwlyZXR1cm4gdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5ICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mdWxsICE9IC0xdTsKIH0KIAogc3RhdGljIGZhc3RwYXRoX3QgdGR4X2V4aXRfaGFuZGxlcnNfZmFzdHBhdGgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtMTEzMSw3ICYjNDM7MTEzMSw3IEBAIHZvaWQgdGR4X2luamVjdF9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiBzdGF0aWMgaW50IHRkeF9oYW5kbGVfZXhjZXB0aW9uX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JdTMyIGludHJfaW5mbyA9IHZteF9nZXRfaW50cl9pbmZvKHZjcHUpOwomIzQzOwl1MzIgaW50cl9pbmZvID0gdnRfZ2V0X2ludHJfaW5mbyh2Y3B1KTsKIAogCS8qCiAJICogTWFjaGluZSBjaGVja3MgYXJlIGhhbmRsZWQgYnkgaGFuZGxlX2V4Y2VwdGlvbl9pcnFvZmYoKSwgb3IgYnkKQEAgLTE4OTUsNyAmIzQzOzE4OTUsNyBAQCB2b2lkIHRkeF9kZWxpdmVyX2ludGVycnVwdChzdHJ1Y3Qga3ZtX2xhcGljICphcGljLCBpbnQgZGVsaXZlcnlfbW9kZSwKIAlzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTsKIAogCS8qIFREWCBzdXBwb3J0cyBvbmx5IHBvc3RlZCBpbnRlcnJ1cHQuICBObyBsYXBpYyBlbXVsYXRpb24uICovCi0JX192bXhfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0KHZjcHUsICZhbXA7dGR4LSZndDt2dC5waV9kZXNjLCB2ZWN0b3IpOwomIzQzOwlfX3Z0X2RlbGl2ZXJfcG9zdGVkX2ludGVycnVwdCh2Y3B1LCAmYW1wO3RkeC0mZ3Q7dnQucGlfZGVzYywgdmVjdG9yKTsKIAogCXRyYWNlX2t2bV9hcGljdl9hY2NlcHRfaXJxKHZjcHUtJmd0O3ZjcHVfaWQsIGRlbGl2ZXJ5X21vZGUsIHRyaWdfbW9kZSwgdmVjdG9yKTsKIH0KQEAgLTE5MDMsNyAmIzQzOzE5MDMsNyBAQCB2b2lkIHRkeF9kZWxpdmVyX2ludGVycnVwdChzdHJ1Y3Qga3ZtX2xhcGljICphcGljLCBpbnQgZGVsaXZlcnlfbW9kZSwKIHN0YXRpYyBpbmxpbmUgYm9vbCB0ZHhfaXNfc2VwdF92aW9sYXRpb25fdW5leHBlY3RlZF9wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAl1NjQgZWVxX3R5cGUgPSB0b190ZHgodmNwdSktJmd0O2V4dF9leGl0X3F1YWxpZmljYXRpb24gJmFtcDsgVERYX0VYVF9FWElUX1FVQUxfVFlQRV9NQVNLOwotCXU2NCBlcSA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpOwomIzQzOwl1NjQgZXEgPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpOwogCiAJaWYgKGVlcV90eXBlICE9IFREWF9FWFRfRVhJVF9RVUFMX1RZUEVfUEVORElOR19FUFRfVklPTEFUSU9OKQogCQlyZXR1cm4gZmFsc2U7CkBAIC0xOTM5LDcgJiM0MzsxOTM5LDcgQEAgc3RhdGljIGludCB0ZHhfaGFuZGxlX2VwdF92aW9sYXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCQkvKiBPbmx5IHByaXZhdGUgR1BBIHRyaWdnZXJzIHplcm8tc3RlcCBtaXRpZ2F0aW9uICovCiAJCWxvY2FsX3JldHJ5ID0gdHJ1ZTsKIAl9IGVsc2UgewotCQlleGl0X3F1YWwgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKJiM0MzsJCWV4aXRfcXVhbCA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7CiAJCS8qCiAJCSAqIEVQVCB2aW9sYXRpb24gZHVlIHRvIGluc3RydWN0aW9uIGZldGNoIHNob3VsZCBuZXZlciBiZQogCQkgKiB0cmlnZ2VyZWQgZnJvbSBzaGFyZWQgbWVtb3J5IGluIFREWCBndWVzdC4gIElmIHN1Y2ggRVBUCkBAIC0xOTg3LDcgJiM0MzsxOTg3LDcgQEAgc3RhdGljIGludCB0ZHhfaGFuZGxlX2VwdF92aW9sYXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXdoaWxlICgxKSB7CiAJCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7CiAKLQkJcmV0ID0gX192bXhfaGFuZGxlX2VwdF92aW9sYXRpb24odmNwdSwgZ3BhLCBleGl0X3F1YWwpOwomIzQzOwkJcmV0ID0gX192dF9oYW5kbGVfZXB0X3Zpb2xhdGlvbih2Y3B1LCBncGEsIGV4aXRfcXVhbCk7CiAKIAkJaWYgKHJldCAhPSBSRVRfUEZfUkVUUlkgfHwgIWxvY2FsX3JldHJ5KQogCQkJYnJlYWs7CkBAIC0yMDIxLDcgJiM0MzsyMDIxLDcgQEAgaW50IHRkeF9jb21wbGV0ZV9lbXVsYXRlZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZXJyKQogCQlyZXR1cm4gMTsKIAl9CiAKLQlpZiAodm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYyA9PSBFWElUX1JFQVNPTl9NU1JfUkVBRCkKJiM0MzsJaWYgKHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYyA9PSBFWElUX1JFQVNPTl9NU1JfUkVBRCkKIAkJdGR2bWNhbGxfc2V0X3JldHVybl92YWwodmNwdSwga3ZtX3JlYWRfZWR4X2VheCh2Y3B1KSk7CiAKIAlyZXR1cm4gMTsKQEAgLTIwMzIsNyAmIzQzOzIwMzIsNyBAQCBpbnQgdGR4X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBmYXN0cGF0aCkKIHsKIAlzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTsKIAl1NjQgdnBfZW50ZXJfcmV0ID0gdGR4LSZndDt2cF9lbnRlcl9yZXQ7Ci0JdW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uID0gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KTsKJiM0MzsJdW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uID0gdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpOwogCiAJaWYgKGZhc3RwYXRoICE9IEVYSVRfRkFTVFBBVEhfTk9ORSkKIAkJcmV0dXJuIDE7CkBAIC0yMTQyLDkgJiM0MzsyMTQyLDkgQEAgdm9pZCB0ZHhfZ2V0X2V4aXRfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiAqcmVhc29uLAogCiAJKnJlYXNvbiA9IHRkeC0mZ3Q7dnQuZXhpdF9yZWFzb24uZnVsbDsKIAlpZiAoKnJlYXNvbiAhPSAtMXUpIHsKLQkJKmluZm8xID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7CiYjNDM7CQkqaW5mbzEgPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpOwogCQkqaW5mbzIgPSB0ZHgtJmd0O2V4dF9leGl0X3F1YWxpZmljYXRpb247Ci0JCSppbnRyX2luZm8gPSB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KTsKJiM0MzsJCSppbnRyX2luZm8gPSB2dF9nZXRfaW50cl9pbmZvKHZjcHUpOwogCX0gZWxzZSB7CiAJCSppbmZvMSA9IDA7CiAJCSppbmZvMiA9IDA7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jIGIvYXJjaC94ODYva3ZtL3ZteC92bXguYwppbmRleCA1MDQ2MzBmMGViNDBmLi43ZTM1YzJkMDNjNjllIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmMKQEAgLTE1NzcsMTIgJiM0MzsxNTc3LDEyIEBAIHZvaWQgdm14X3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpCiAKIAl2bXhfdmNwdV9sb2FkX3ZtY3ModmNwdSwgY3B1KTsKIAotCXZteF92Y3B1X3BpX2xvYWQodmNwdSwgY3B1KTsKJiM0MzsJdnRfdmNwdV9waV9sb2FkKHZjcHUsIGNwdSk7CiB9CiAKIHZvaWQgdm14X3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQl2bXhfdmNwdV9waV9wdXQodmNwdSk7CiYjNDM7CXZ0X3ZjcHVfcGlfcHV0KHZjcHUpOwogCiAJdm14X3ByZXBhcmVfc3dpdGNoX3RvX2hvc3QodG9fdm14KHZjcHUpKTsKIH0KQEAgLTE3OTEsNyAmIzQzOzE3OTEsNyBAQCBpbnQgdm14X2NoZWNrX2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZW11bF90eXBlLAogCSAqIHNvIHRoYXQgZ3Vlc3QgdXNlcnNwYWNlIGNhbiYjMzk7dCBEb1MgdGhlIGd1ZXN0IHNpbXBseSBieSB0cmlnZ2VyaW5nCiAJICogZW11bGF0aW9uIChlbmNsYXZlcyBhcmUgQ1BMMyBvbmx5KS4KIAkgKi8KLQlpZiAodm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5lbmNsYXZlX21vZGUpIHsKJiM0MzsJaWYgKHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5lbmNsYXZlX21vZGUpIHsKIAkJa3ZtX3F1ZXVlX2V4Y2VwdGlvbih2Y3B1LCBVRF9WRUNUT1IpOwogCQlyZXR1cm4gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQ7CiAJfQpAQCAtMTgwNiw3ICYjNDM7MTgwNiw3IEBAIGludCB2bXhfY2hlY2tfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlbXVsX3R5cGUsCiAKIHN0YXRpYyBpbnQgc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JdW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uID0gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KTsKJiM0MzsJdW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uID0gdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpOwogCXVuc2lnbmVkIGxvbmcgcmlwLCBvcmlnX3JpcDsKIAl1MzIgaW5zdHJfbGVuOwogCkBAIC00NDI0LDcgJiM0Mzs0NDI0LDcgQEAgc3RhdGljIGludCB2bXhfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHZlY3RvcikKIAlpZiAoIXZjcHUtJmd0O2FyY2guYXBpYy0mZ3Q7YXBpY3ZfYWN0aXZlKQogCQlyZXR1cm4gLTE7CiAKLQlfX3ZteF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHQodmNwdSwgJmFtcDt2dC0mZ3Q7cGlfZGVzYywgdmVjdG9yKTsKJiM0MzsJX192dF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHQodmNwdSwgJmFtcDt2dC0mZ3Q7cGlfZGVzYywgdmVjdG9yKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTM3OSwxNSAmIzQzOzUzNzksOSBAQCBib29sIHZteF9ndWVzdF9pbmplY3RfYWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCSAgICAgICAoa3ZtX2dldF9yZmxhZ3ModmNwdSkgJmFtcDsgWDg2X0VGTEFHU19BQyk7CiB9CiAKLXN0YXRpYyBib29sIGlzX3hmZF9ubV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCi17Ci0JcmV0dXJuIHZjcHUtJmd0O2FyY2guZ3Vlc3RfZnB1LmZwc3RhdGUtJmd0O3hmZCAmYW1wOyZhbXA7Ci0JICAgICAgICFrdm1faXNfY3IwX2JpdF9zZXQodmNwdSwgWDg2X0NSMF9UUyk7Ci19Ci0KIHN0YXRpYyBpbnQgdm14X2hhbmRsZV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGVycm9yX2NvZGUpCiB7Ci0JdW5zaWduZWQgbG9uZyBjcjIgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKJiM0MzsJdW5zaWduZWQgbG9uZyBjcjIgPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpOwogCiAJaWYgKHZjcHUtJmd0O2FyY2guYXBmLmhvc3RfYXBmX2ZsYWdzKQogCQlnb3RvIGhhbmRsZV9wZjsKQEAgLTU0MzUsNyAmIzQzOzU0MjksNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9leGNlcHRpb25fbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAl1MzIgdmVjdF9pbmZvOwogCiAJdmVjdF9pbmZvID0gdm14LSZndDtpZHRfdmVjdG9yaW5nX2luZm87Ci0JaW50cl9pbmZvID0gdm14X2dldF9pbnRyX2luZm8odmNwdSk7CiYjNDM7CWludHJfaW5mbyA9IHZ0X2dldF9pbnRyX2luZm8odmNwdSk7CiAKIAkvKgogCSAqIE1hY2hpbmUgY2hlY2tzIGFyZSBoYW5kbGVkIGJ5IGhhbmRsZV9leGNlcHRpb25faXJxb2ZmKCksIG9yIGJ5CkBAIC01NTE2LDcgJiM0Mzs1NTEwLDcgQEAgc3RhdGljIGludCBoYW5kbGVfZXhjZXB0aW9uX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIAlzd2l0Y2ggKGV4X25vKSB7CiAJY2FzZSBEQl9WRUNUT1I6Ci0JCWRyNiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpOwomIzQzOwkJZHI2ID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKIAkJaWYgKCEodmNwdS0mZ3Q7Z3Vlc3RfZGVidWcgJmFtcDsKIAkJICAgICAgKEtWTV9HVUVTVERCR19TSU5HTEVTVEVQIHwgS1ZNX0dVRVNUREJHX1VTRV9IV19CUCkpKSB7CiAJCQkvKgpAQCAtNTU5Miw3ICYjNDM7NTU4Niw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2lvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpbnQgc2l6ZSwgaW4sIHN0cmluZzsKIAl1bnNpZ25lZCBwb3J0OwogCi0JZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7CiYjNDM7CWV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7CiAJc3RyaW5nID0gKGV4aXRfcXVhbGlmaWNhdGlvbiAmYW1wOyAxNikgIT0gMDsKIAogCSYjNDM7JiM0Mzt2Y3B1LSZndDtzdGF0LmlvX2V4aXRzOwpAQCAtNTY4MSw3ICYjNDM7NTY3NSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpbnQgZXJyOwogCWludCByZXQ7CiAKLQlleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKJiM0MzsJZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKIAljciA9IGV4aXRfcXVhbGlmaWNhdGlvbiAmYW1wOyAxNTsKIAlyZWcgPSAoZXhpdF9xdWFsaWZpY2F0aW9uICZndDsmZ3Q7IDgpICZhbXA7IDE1OwogCXN3aXRjaCAoKGV4aXRfcXVhbGlmaWNhdGlvbiAmZ3Q7Jmd0OyA0KSAmYW1wOyAzKSB7CkBAIC01NzU5LDcgJiM0Mzs1NzUzLDcgQEAgc3RhdGljIGludCBoYW5kbGVfZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCWludCBkciwgZHI3LCByZWc7CiAJaW50IGVyciA9IDE7CiAKLQlleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKJiM0MzsJZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKIAlkciA9IGV4aXRfcXVhbGlmaWNhdGlvbiAmYW1wOyBERUJVR19SRUdfQUNDRVNTX05VTTsKIAogCS8qIEZpcnN0LCBpZiBEUiBkb2VzIG5vdCBleGlzdCwgdHJpZ2dlciBVRCAqLwpAQCAtNTg1NSw3ICYjNDM7NTg0OSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2ludGVycnVwdF93aW5kb3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiBzdGF0aWMgaW50IGhhbmRsZV9pbnZscGcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCXVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKIAogCWt2bV9tbXVfaW52bHBnKHZjcHUsIGV4aXRfcXVhbGlmaWNhdGlvbik7CiAJcmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpOwpAQCAtNTg2NCw3ICYjNDM7NTg1OCw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2ludmxwZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiBzdGF0aWMgaW50IGhhbmRsZV9hcGljX2FjY2VzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJaWYgKGxpa2VseShmYXN0ZW9pKSkgewotCQl1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpOwomIzQzOwkJdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpOwogCQlpbnQgYWNjZXNzX3R5cGUsIG9mZnNldDsKIAogCQlhY2Nlc3NfdHlwZSA9IGV4aXRfcXVhbGlmaWNhdGlvbiAmYW1wOyBBUElDX0FDQ0VTU19UWVBFOwpAQCAtNTg4NSw3ICYjNDM7NTg3OSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2FwaWNfYWNjZXNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogc3RhdGljIGludCBoYW5kbGVfYXBpY19lb2lfaW5kdWNlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKJiM0MzsJdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpOwogCWludCB2ZWN0b3IgPSBleGl0X3F1YWxpZmljYXRpb24gJmFtcDsgMHhmZjsKIAogCS8qIEVPSS1pbmR1Y2VkIFZNIGV4aXQgaXMgdHJhcC1saWtlIGFuZCB0aHVzIG5vIG5lZWQgdG8gYWRqdXN0IElQICovCkBAIC01ODk1LDcgJiM0Mzs1ODg5LDcgQEAgc3RhdGljIGludCBoYW5kbGVfYXBpY19lb2lfaW5kdWNlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIHN0YXRpYyBpbnQgaGFuZGxlX2FwaWNfd3JpdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCXVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKIAogCS8qCiAJICogQVBJQy13cml0ZSBWTS1FeGl0IGlzIHRyYXAtbGlrZSwgS1ZNIGRvZXNuJiMzOTt0IG5lZWQgdG8gYWR2YW5jZSBSSVAgYW5kCkBAIC01OTIzLDcgJiM0Mzs1OTE3LDcgQEAgc3RhdGljIGludCBoYW5kbGVfdGFza19zd2l0Y2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCWlkdF9pbmRleCA9ICh2bXgtJmd0O2lkdF92ZWN0b3JpbmdfaW5mbyAmYW1wOyBWRUNUT1JJTkdfSU5GT19WRUNUT1JfTUFTSyk7CiAJdHlwZSA9ICh2bXgtJmd0O2lkdF92ZWN0b3JpbmdfaW5mbyAmYW1wOyBWRUNUT1JJTkdfSU5GT19UWVBFX01BU0spOwogCi0JZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7CiYjNDM7CWV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7CiAKIAlyZWFzb24gPSAodTMyKWV4aXRfcXVhbGlmaWNhdGlvbiAmZ3Q7Jmd0OyAzMDsKIAlpZiAocmVhc29uID09IFRBU0tfU1dJVENIX0dBVEUgJmFtcDsmYW1wOyBpZHRfdikgewpAQCAtNTk2OSw3ICYjNDM7NTk2Myw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3Rhc2tfc3dpdGNoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogc3RhdGljIGludCBoYW5kbGVfZXB0X3Zpb2xhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKJiM0MzsJdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpOwogCWdwYV90IGdwYTsKIAogCS8qCkBAIC01OTk3LDcgJiM0Mzs1OTkxLDcgQEAgc3RhdGljIGludCBoYW5kbGVfZXB0X3Zpb2xhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJaWYgKHVubGlrZWx5KGFsbG93X3NtYWxsZXJfbWF4cGh5YWRkciAmYW1wOyZhbXA7ICFrdm1fdmNwdV9pc19sZWdhbF9ncGEodmNwdSwgZ3BhKSkpCiAJCXJldHVybiBrdm1fZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCAwKTsKIAotCXJldHVybiBfX3ZteF9oYW5kbGVfZXB0X3Zpb2xhdGlvbih2Y3B1LCBncGEsIGV4aXRfcXVhbGlmaWNhdGlvbik7CiYjNDM7CXJldHVybiBfX3Z0X2hhbmRsZV9lcHRfdmlvbGF0aW9uKHZjcHUsIGdwYSwgZXhpdF9xdWFsaWZpY2F0aW9uKTsKIH0KIAogc3RhdGljIGludCBoYW5kbGVfZXB0X21pc2NvbmZpZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC02MTYwLDcgJiM0Mzs2MTU0LDcgQEAgc3RhdGljIGludCBoYW5kbGVfaW52cGNpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJLyogQWNjb3JkaW5nIHRvIHRoZSBJbnRlbCBpbnN0cnVjdGlvbiByZWZlcmVuY2UsIHRoZSBtZW1vcnkgb3BlcmFuZAogCSAqIGlzIHJlYWQgZXZlbiBpZiBpdCBpc24mIzM5O3QgbmVlZGVkIChlLmcuLCBmb3IgdHlwZT09YWxsKQogCSAqLwotCWlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpLAomIzQzOwlpZiAoZ2V0X3ZteF9tZW1fYWRkcmVzcyh2Y3B1LCB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpLAogCQkJCXZteF9pbnN0cnVjdGlvbl9pbmZvLCBmYWxzZSwKIAkJCQlzaXplb2Yob3BlcmFuZCksICZhbXA7Z3ZhKSkKIAkJcmV0dXJuIDE7CkBAIC02MTc0LDcgJiM0Mzs2MTY4LDcgQEAgc3RhdGljIGludCBoYW5kbGVfcG1sX2Z1bGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiAJdHJhY2Vfa3ZtX3BtbF9mdWxsKHZjcHUtJmd0O3ZjcHVfaWQpOwogCi0JZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7CiYjNDM7CWV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7CiAKIAkvKgogCSAqIFBNTCBidWZmZXIgRlVMTCBoYXBwZW5lZCB3aGlsZSBleGVjdXRpbmcgaXJldCBmcm9tIE5NSSwKQEAgLTYyNzgsNyAmIzQzOzYyNzIsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9idXNfbG9ja192bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiBzdGF0aWMgaW50IGhhbmRsZV9ub3RpZnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCXVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKIAlib29sIGNvbnRleHRfaW52YWxpZCA9IGV4aXRfcXVhbCAmYW1wOyBOT1RJRllfVk1fQ09OVEVYVF9JTlZBTElEOwogCiAJJiM0MzsmIzQzO3ZjcHUtJmd0O3N0YXQubm90aWZ5X3dpbmRvd19leGl0czsKQEAgLTYzMDksMTMgJiM0Mzs2MzAzLDEzIEBAIHN0YXRpYyBpbnQgdm14X2dldF9tc3JfaW1tX3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIHN0YXRpYyBpbnQgaGFuZGxlX3JkbXNyX2ltbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JcmV0dXJuIGt2bV9lbXVsYXRlX3JkbXNyX2ltbSh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSwKJiM0MzsJcmV0dXJuIGt2bV9lbXVsYXRlX3JkbXNyX2ltbSh2Y3B1LCB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpLAogCQkJCSAgICAgdm14X2dldF9tc3JfaW1tX3JlZyh2Y3B1KSk7CiB9CiAKIHN0YXRpYyBpbnQgaGFuZGxlX3dybXNyX2ltbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JcmV0dXJuIGt2bV9lbXVsYXRlX3dybXNyX2ltbSh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSwKJiM0MzsJcmV0dXJuIGt2bV9lbXVsYXRlX3dybXNyX2ltbSh2Y3B1LCB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpLAogCQkJCSAgICAgdm14X2dldF9tc3JfaW1tX3JlZyh2Y3B1KSk7CiB9CiAKQEAgLTYzOTIsMTAgJiM0Mzs2Mzg2LDEwIEBAIHZvaWQgdm14X2dldF9leGl0X2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgKnJlYXNvbiwKIAlzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTsKIAogCSpyZWFzb24gPSB2bXgtJmd0O3Z0LmV4aXRfcmVhc29uLmZ1bGw7Ci0JKmluZm8xID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7CiYjNDM7CSppbmZvMSA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7CiAJaWYgKCEodm14LSZndDt2dC5leGl0X3JlYXNvbi5mYWlsZWRfdm1lbnRyeSkpIHsKIAkJKmluZm8yID0gdm14LSZndDtpZHRfdmVjdG9yaW5nX2luZm87Ci0JCSppbnRyX2luZm8gPSB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KTsKJiM0MzsJCSppbnRyX2luZm8gPSB2dF9nZXRfaW50cl9pbmZvKHZjcHUpOwogCQlpZiAoaXNfZXhjZXB0aW9uX3dpdGhfZXJyb3JfY29kZSgqaW50cl9pbmZvKSkKIAkJCSplcnJvcl9jb2RlID0gdm1jc19yZWFkMzIoVk1fRVhJVF9JTlRSX0VSUk9SX0NPREUpOwogCQllbHNlCkBAIC02NzA2LDcgJiM0Mzs2NzAwLDcgQEAgdm9pZCBkdW1wX3ZtY3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogc3RhdGljIGludCBfX3ZteF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aCkKIHsKIAlzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTsKLQl1bmlvbiB2bXhfZXhpdF9yZWFzb24gZXhpdF9yZWFzb24gPSB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpOwomIzQzOwl1bmlvbiB2bXhfZXhpdF9yZWFzb24gZXhpdF9yZWFzb24gPSB2dF9nZXRfZXhpdF9yZWFzb24odmNwdSk7CiAJdTMyIHZlY3RvcmluZ19pbmZvID0gdm14LSZndDtpZHRfdmVjdG9yaW5nX2luZm87CiAJdTE2IGV4aXRfaGFuZGxlcl9pbmRleDsKIApAQCAtNjg3MCw3ICYjNDM7Njg2NCw3IEBAIGludCB2bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpCiAJICogRXhpdCB0byB1c2VyIHNwYWNlIHdoZW4gYnVzIGxvY2sgZGV0ZWN0ZWQgdG8gaW5mb3JtIHRoYXQgdGhlcmUgaXMKIAkgKiBhIGJ1cyBsb2NrIGluIGd1ZXN0LgogCSAqLwotCWlmICh2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJ1c19sb2NrX2RldGVjdGVkKSB7CiYjNDM7CWlmICh2dF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYnVzX2xvY2tfZGV0ZWN0ZWQpIHsKIAkJaWYgKHJldCAmZ3Q7IDApCiAJCQl2Y3B1LSZndDtydW4tJmd0O2V4aXRfcmVhc29uID0gS1ZNX0VYSVRfWDg2X0JVU19MT0NLOwogCkBAIC03MTQzLDc0ICYjNDM7NzEzNyw2IEBAIHZvaWQgdm14X2xvYWRfZW9pX2V4aXRtYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKmVvaV9leGl0X2JpdG1hcCkKIAl2bWNzX3dyaXRlNjQoRU9JX0VYSVRfQklUTUFQMywgZW9pX2V4aXRfYml0bWFwWzNdKTsKIH0KIAotc3RhdGljIHZvaWQgaGFuZGxlX25tX2ZhdWx0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCi17Ci0JLyoKLQkgKiBTYXZlIHhmZF9lcnIgdG8gZ3Vlc3RfZnB1IGJlZm9yZSBpbnRlcnJ1cHQgaXMgZW5hYmxlZCwgc28gdGhlCi0JICogTVNSIHZhbHVlIGlzIG5vdCBjbG9iYmVyZWQgYnkgdGhlIGhvc3QgYWN0aXZpdHkgYmVmb3JlIHRoZSBndWVzdAotCSAqIGhhcyBjaGFuY2UgdG8gY29uc3VtZSBpdC4KLQkgKgotCSAqIFVwZGF0ZSB0aGUgZ3Vlc3QmIzM5O3MgWEZEX0VSUiBpZiBhbmQgb25seSBpZiBYRkQgaXMgZW5hYmxlZCwgYXMgdGhlICNOTQotCSAqIGludGVyY2VwdGlvbiBtYXkgaGF2ZSBiZWVuIGNhdXNlZCBieSBMMSBpbnRlcmNlcHRpb24uICBQZXIgdGhlIFNETSwKLQkgKiBYRkRfRVJSIGlzIG5vdCBtb2RpZmllZCBmb3Igbm9uLVhGRCAjTk0sIGkuZS4gaWYgQ1IwLlRTPTEuCi0JICoKLQkgKiBOb3RlLCBYRkRfRVJSIGlzIHVwZGF0ZWQgX2JlZm9yZV8gdGhlICNOTSBpbnRlcmNlcHRpb24gY2hlY2ssIGkuZS4KLQkgKiB1bmxpa2UgQ1IyIGFuZCBEUjYsIHRoZSB2YWx1ZSBpcyBub3QgYSBwYXlsb2FkIHRoYXQgaXMgYXR0YWNoZWQgdG8KLQkgKiB0aGUgI05NIGV4Y2VwdGlvbi4KLQkgKi8KLQlpZiAoaXNfeGZkX25tX2ZhdWx0KHZjcHUpKQotCQlyZG1zcnEoTVNSX0lBMzJfWEZEX0VSUiwgdmNwdS0mZ3Q7YXJjaC5ndWVzdF9mcHUueGZkX2Vycik7Ci19Ci0KLXN0YXRpYyB2b2lkIGhhbmRsZV9leGNlcHRpb25faXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGludHJfaW5mbykKLXsKLQkvKiBpZiBleGl0IGR1ZSB0byBQRiBjaGVjayBmb3IgYXN5bmMgUEYgKi8KLQlpZiAoaXNfcGFnZV9mYXVsdChpbnRyX2luZm8pKQotCQl2Y3B1LSZndDthcmNoLmFwZi5ob3N0X2FwZl9mbGFncyA9IGt2bV9yZWFkX2FuZF9yZXNldF9hcGZfZmxhZ3MoKTsKLQkvKiBpZiBleGl0IGR1ZSB0byBOTSwgaGFuZGxlIGJlZm9yZSBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkICovCi0JZWxzZSBpZiAoaXNfbm1fZmF1bHQoaW50cl9pbmZvKSkKLQkJaGFuZGxlX25tX2ZhdWx0X2lycW9mZih2Y3B1KTsKLQkvKiBIYW5kbGUgbWFjaGluZSBjaGVja3MgYmVmb3JlIGludGVycnVwdHMgYXJlIGVuYWJsZWQgKi8KLQllbHNlIGlmIChpc19tYWNoaW5lX2NoZWNrKGludHJfaW5mbykpCi0JCWt2bV9tYWNoaW5lX2NoZWNrKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGhhbmRsZV9leHRlcm5hbF9pbnRlcnJ1cHRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLQkJCQkJICAgICB1MzIgaW50cl9pbmZvKQotewotCXVuc2lnbmVkIGludCB2ZWN0b3IgPSBpbnRyX2luZm8gJmFtcDsgSU5UUl9JTkZPX1ZFQ1RPUl9NQVNLOwotCi0JaWYgKEtWTV9CVUcoIWlzX2V4dGVybmFsX2ludHIoaW50cl9pbmZvKSwgdmNwdS0mZ3Q7a3ZtLAotCSAgICAmIzM0O3VuZXhwZWN0ZWQgVk0tRXhpdCBpbnRlcnJ1cHQgaW5mbzogMHgleCYjMzQ7LCBpbnRyX2luZm8pKQotCQlyZXR1cm47Ci0KLQlrdm1fYmVmb3JlX2ludGVycnVwdCh2Y3B1LCBLVk1fSEFORExJTkdfSVJRKTsKLQl4ODZfZW50cnlfZnJvbV9rdm0oRVZFTlRfVFlQRV9FWFRJTlQsIHZlY3Rvcik7Ci0Ja3ZtX2FmdGVyX2ludGVycnVwdCh2Y3B1KTsKLQotCXZjcHUtJmd0O2FyY2guYXRfaW5zdHJ1Y3Rpb25fYm91bmRhcnkgPSB0cnVlOwotfQotCi12b2lkIHZteF9oYW5kbGVfZXhpdF9pcnFvZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQotewotCWlmICh0b192dCh2Y3B1KS0mZ3Q7ZW11bGF0aW9uX3JlcXVpcmVkKQotCQlyZXR1cm47Ci0KLQlzd2l0Y2ggKHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMpIHsKLQljYXNlIEVYSVRfUkVBU09OX0VYVEVSTkFMX0lOVEVSUlVQVDoKLQkJaGFuZGxlX2V4dGVybmFsX2ludGVycnVwdF9pcnFvZmYodmNwdSwgdm14X2dldF9pbnRyX2luZm8odmNwdSkpOwotCQlicmVhazsKLQljYXNlIEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUk6Ci0JCWhhbmRsZV9leGNlcHRpb25faXJxb2ZmKHZjcHUsIHZteF9nZXRfaW50cl9pbmZvKHZjcHUpKTsKLQkJYnJlYWs7Ci0JY2FzZSBFWElUX1JFQVNPTl9NQ0VfRFVSSU5HX1ZNRU5UUlk6Ci0JCWt2bV9tYWNoaW5lX2NoZWNrKCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLX0KLQogLyoKICAqIFRoZSBrdm0gcGFyYW1ldGVyIGNhbiBiZSBOVUxMIChtb2R1bGUgaW5pdGlhbGl6YXRpb24sIG9yIGludm9jYXRpb24gYmVmb3JlCiAgKiBWTSBjcmVhdGlvbikuIEJlIHN1cmUgdG8gY2hlY2sgdGhlIGt2bSBwYXJhbWV0ZXIgYmVmb3JlIHVzaW5nIGl0LgpAQCAtNzI1MCw3ICYjNDM7NzE3Niw3IEBAIHN0YXRpYyB2b2lkIHZteF9yZWNvdmVyX25taV9ibG9ja2luZyhzdHJ1Y3QgdmNwdV92bXggKnZteCkKIAkJaWYgKHZteC0mZ3Q7bG9hZGVkX3ZtY3MtJmd0O25taV9rbm93bl91bm1hc2tlZCkKIAkJCXJldHVybjsKIAotCQlleGl0X2ludHJfaW5mbyA9IHZteF9nZXRfaW50cl9pbmZvKCZhbXA7dm14LSZndDt2Y3B1KTsKJiM0MzsJCWV4aXRfaW50cl9pbmZvID0gdnRfZ2V0X2ludHJfaW5mbygmYW1wO3ZteC0mZ3Q7dmNwdSk7CiAJCXVuYmxvY2tfbm1pID0gKGV4aXRfaW50cl9pbmZvICZhbXA7IElOVFJfSU5GT19VTkJMT0NLX05NSSkgIT0gMDsKIAkJdmVjdG9yID0gZXhpdF9pbnRyX2luZm8gJmFtcDsgSU5UUl9JTkZPX1ZFQ1RPUl9NQVNLOwogCQkvKgpAQCAtNzQxNywxNCAmIzQzOzczNDMsMTQgQEAgc3RhdGljIGZhc3RwYXRoX3Qgdm14X2V4aXRfaGFuZGxlcnNfZmFzdHBhdGgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCSAqIHRoZSBmYXN0cGF0aCBldmVuLCBhbGwgb3RoZXIgZXhpdHMgbXVzdCB1c2UgdGhlIHNsb3cgcGF0aC4KIAkgKi8KIAlpZiAoaXNfZ3Vlc3RfbW9kZSh2Y3B1KSAmYW1wOyZhbXA7Ci0JICAgIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMgIT0gRVhJVF9SRUFTT05fUFJFRU1QVElPTl9USU1FUikKJiM0MzsJICAgIHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYyAhPSBFWElUX1JFQVNPTl9QUkVFTVBUSU9OX1RJTUVSKQogCQlyZXR1cm4gRVhJVF9GQVNUUEFUSF9OT05FOwogCi0Jc3dpdGNoICh2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljKSB7CiYjNDM7CXN3aXRjaCAodnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljKSB7CiAJY2FzZSBFWElUX1JFQVNPTl9NU1JfV1JJVEU6CiAJCXJldHVybiBoYW5kbGVfZmFzdHBhdGhfd3Jtc3IodmNwdSk7CiAJY2FzZSBFWElUX1JFQVNPTl9NU1JfV1JJVEVfSU1NOgotCQlyZXR1cm4gaGFuZGxlX2Zhc3RwYXRoX3dybXNyX2ltbSh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSwKJiM0MzsJCXJldHVybiBoYW5kbGVfZmFzdHBhdGhfd3Jtc3JfaW1tKHZjcHUsIHZ0X2dldF9leGl0X3F1YWwodmNwdSksCiAJCQkJCQkgdm14X2dldF9tc3JfaW1tX3JlZyh2Y3B1KSk7CiAJY2FzZSBFWElUX1JFQVNPTl9QUkVFTVBUSU9OX1RJTUVSOgogCQlyZXR1cm4gaGFuZGxlX2Zhc3RwYXRoX3ByZWVtcHRpb25fdGltZXIodmNwdSwgZm9yY2VfaW1tZWRpYXRlX2V4aXQpOwpAQCAtNzQzNywxNyAmIzQzOzczNjMsNiBAQCBzdGF0aWMgZmFzdHBhdGhfdCB2bXhfZXhpdF9oYW5kbGVyc19mYXN0cGF0aChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJfQogfQogCi1ub2luc3RyIHZvaWQgdm14X2hhbmRsZV9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQotewotCWlmICgodTE2KXZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMgIT0gRVhJVF9SRUFTT05fRVhDRVBUSU9OX05NSSB8fAotCSAgICAhaXNfbm1pKHZteF9nZXRfaW50cl9pbmZvKHZjcHUpKSkKLQkJcmV0dXJuOwotCi0Ja3ZtX2JlZm9yZV9pbnRlcnJ1cHQodmNwdSwgS1ZNX0hBTkRMSU5HX05NSSk7Ci0JeDg2X2VudHJ5X2Zyb21fa3ZtKEVWRU5UX1RZUEVfTk1JLCBOTUlfVkVDVE9SKTsKLQlrdm1fYWZ0ZXJfaW50ZXJydXB0KHZjcHUpOwotfQotCiBzdGF0aWMgbm9pbnN0ciB2b2lkIHZteF92Y3B1X2VudGVyX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJCQl1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CkBAIC03NDc3LDEwICYjNDM7NzM5MiwxMCBAQCBzdGF0aWMgbm9pbnN0ciB2b2lkIHZteF92Y3B1X2VudGVyX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCX0KIAogCXZteC0mZ3Q7dnQuZXhpdF9yZWFzb24uZnVsbCA9IHZtY3NfcmVhZDMyKFZNX0VYSVRfUkVBU09OKTsKLQlpZiAobGlrZWx5KCF2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5KSkKJiM0MzsJaWYgKGxpa2VseSghdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5KSkKIAkJdm14LSZndDtpZHRfdmVjdG9yaW5nX2luZm8gPSB2bWNzX3JlYWQzMihJRFRfVkVDVE9SSU5HX0lORk9fRklFTEQpOwogCi0Jdm14X2hhbmRsZV9ubWkodmNwdSk7CiYjNDM7CXZ0X2hhbmRsZV9ubWkodmNwdSk7CiAKIG91dDoKIAlndWVzdF9zdGF0ZV9leGl0X2lycW9mZigpOwpAQCAtNzYxNyw3ICYjNDM7NzUzMiw3IEBAIGZhc3RwYXRoX3Qgdm14X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncykKIAkJICogY2hlY2tpbmcuCiAJCSAqLwogCQlpZiAodmNwdS0mZ3Q7YXJjaC5uZXN0ZWRfcnVuX3BlbmRpbmcgJmFtcDsmYW1wOwotCQkgICAgIXZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkpCiYjNDM7CQkgICAgIXZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mYWlsZWRfdm1lbnRyeSkKIAkJCSYjNDM7JiM0Mzt2Y3B1LSZndDtzdGF0Lm5lc3RlZF9ydW47CiAKIAkJdmNwdS0mZ3Q7YXJjaC5uZXN0ZWRfcnVuX3BlbmRpbmcgPSAwOwpAQCAtNzYyOCw3ICYjNDM7NzU0Myw3IEBAIGZhc3RwYXRoX3Qgdm14X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncykKIAogCXRyYWNlX2t2bV9leGl0KHZjcHUsIEtWTV9JU0FfVk1YKTsKIAotCWlmICh1bmxpa2VseSh2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5KSkKJiM0MzsJaWYgKHVubGlrZWx5KHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mYWlsZWRfdm1lbnRyeSkpCiAJCXJldHVybiBFWElUX0ZBU1RQQVRIX05PTkU7CiAKIAl2bXgtJmd0O2xvYWRlZF92bWNzLSZndDtsYXVuY2hlZCA9IDE7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oIGIvYXJjaC94ODYva3ZtL3ZteC92bXguaAppbmRleCBkYzg1MTdmMTViYzQ2Li4zMjQ3YjU1YjM0ODQzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmgKQEAgLTMwNCw0MyAmIzQzOzMwNCw2IEBAIHN0cnVjdCBrdm1fdm14IHsKIAl1NjQgKnBpZF90YWJsZTsKIH07CiAKLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IHZjcHVfdnQgKnRvX3Z0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKLXsKLQlyZXR1cm4gJmFtcDsoY29udGFpbmVyX29mKHZjcHUsIHN0cnVjdCB2Y3B1X3ZteCwgdmNwdSktJmd0O3Z0KTsKLX0KLQotc3RhdGljIF9fYWx3YXlzX2lubGluZSBzdHJ1Y3Qga3ZtX3ZjcHUgKnZ0X3RvX3ZjcHUoc3RydWN0IHZjcHVfdnQgKnZ0KQotewotCXJldHVybiAmYW1wOyhjb250YWluZXJfb2YodnQsIHN0cnVjdCB2Y3B1X3ZteCwgdnQpLSZndDt2Y3B1KTsKLX0KLQotc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bmlvbiB2bXhfZXhpdF9yZWFzb24gdm14X2dldF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCi17Ci0JcmV0dXJuIHRvX3Z0KHZjcHUpLSZndDtleGl0X3JlYXNvbjsKLX0KLQotc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBsb25nIHZteF9nZXRfZXhpdF9xdWFsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKLXsKLQlzdHJ1Y3QgdmNwdV92dCAqdnQgPSB0b192dCh2Y3B1KTsKLQotCWlmICgha3ZtX3JlZ2lzdGVyX3Rlc3RfYW5kX21hcmtfYXZhaWxhYmxlKHZjcHUsIFZDUFVfUkVHX0VYSVRfSU5GT18xKSAmYW1wOyZhbXA7Ci0JICAgICFXQVJOX09OX09OQ0UoaXNfdGRfdmNwdSh2Y3B1KSkpCi0JCXZ0LSZndDtleGl0X3F1YWxpZmljYXRpb24gPSB2bWNzX3JlYWRsKEVYSVRfUVVBTElGSUNBVElPTik7Ci0KLQlyZXR1cm4gdnQtJmd0O2V4aXRfcXVhbGlmaWNhdGlvbjsKLX0KLQotc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdm14X2dldF9pbnRyX2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQotewotCXN0cnVjdCB2Y3B1X3Z0ICp2dCA9IHRvX3Z0KHZjcHUpOwotCi0JaWYgKCFrdm1fcmVnaXN0ZXJfdGVzdF9hbmRfbWFya19hdmFpbGFibGUodmNwdSwgVkNQVV9SRUdfRVhJVF9JTkZPXzIpICZhbXA7JmFtcDsKLQkgICAgIVdBUk5fT05fT05DRShpc190ZF92Y3B1KHZjcHUpKSkKLQkJdnQtJmd0O2V4aXRfaW50cl9pbmZvID0gdm1jc19yZWFkMzIoVk1fRVhJVF9JTlRSX0lORk8pOwotCi0JcmV0dXJuIHZ0LSZndDtleGl0X2ludHJfaW5mbzsKLX0KLQogdm9pZCB2bXhfdmNwdV9sb2FkX3ZtY3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTsKIGludCBhbGxvY2F0ZV92cGlkKHZvaWQpOwogdm9pZCBmcmVlX3ZwaWQoaW50IHZwaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmggYi9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaAppbmRleCAwNTRmZDE0YmIyZTE2Li43YWMwMmM2ODQ1N2YxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaApAQCAtMjcsNyAmIzQzOzI3LDYgQEAgdm9pZCB2bXhfdmNwdV9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaW5pdF9ldmVudCk7CiB2b2lkIHZteF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTsKIHZvaWQgdm14X3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBpbnQgdm14X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKTsKLXZvaWQgdm14X2hhbmRsZV9leGl0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogaW50IHZteF9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiB2b2lkIHZteF91cGRhdGVfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIGJvb2wgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA5OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDA3CgkJCQkJCQlvdXRwdXQ6IDMzMgoJCQkJCQkJdGhvdWdodHM6IDIzNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBTZXNzaW9uIEFzc2Vzc21lbnQ6IFJlZmFjdG9yZWQgVk1YL1REWCBDb2RlKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIGRldGVybWluZSBpZiB3ZSBuZWVkIHRvIGZpcmUgdXAgYSBLTVNBTiBzZXNzaW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIHByaW1hcmlseSBhIHJlZmFjdG9yaW5nIGV4ZXJjaXNlLCBidXQgd2UgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uCgpGaXJzdCwgSSBzZWUgdGhlIGNvcmUgb2YgdGhlIHBhdGNoIGludm9sdmVzIHJlb3JnYW5pemluZyBhbmQgcmVuYW1pbmcgY29kZSByZWxhdGVkIHRvIEtWTSBJbnRlbCYjMzk7cyBWTVggYW5kIFREWCBpbXBsZW1lbnRhdGlvbnMuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYHN0cnVjdCB2Y3B1X3ZteF90ZHhgIGlzIHRoZSBrZXkg4oCTIGl0JiMzOTtzIGEgdW5pZmllZCBzdHJ1Y3R1cmUgdGhhdCBhbGxvd3MgdXMgdG8gdHJlYXQgYm90aCBWTVggYW5kIFREWCB2Q1BVcyBzaW1pbGFybHksIHNwZWNpZmljYWxseSBmb3IgYWNjZXNzaW5nIHRoZSBgdnRgIG1lbWJlciB0aHJvdWdoIHRoZSBgdG9fdnQoKWAgaGVscGVyLiBUaGUgdXNlIG9mIGBjb250YWluZXJfb2ZgIGlzIGZ1bmRhbWVudGFsIHRvIEtWTSYjMzk7cyBhcmNoaXRlY3R1cmUgYW5kIHRoZSBwdXJwb3NlIG9mIHRoaXMgcmVmYWN0b3IgaXMgdG8gYWJzdHJhY3QgaXQgdW5kZXIgYSBjb21tb24gbmFtZS4gVGhlIHBhdGNoIG1vdmVzIGFuZCByZW5hbWVzIGEgc2VyaWVzIG9mIGhlbHBlciBmdW5jdGlvbnMgKGUuZy4sIGB2bXhfZ2V0X2V4aXRfcmVhc29uYCB0byBgdnRfZ2V0X2V4aXRfcmVhc29uYCkgYW5kIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSBpbnRlcnJ1cHRzIGFuZCBleGNlcHRpb25zLgoKTXkgZmlyc3QgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZXJlIGFyZSBubyBtYWpvciBmdW5jdGlvbmFsIGNoYW5nZXMsIHRoZSBtYWluIGdvYWxzIGlzIHRvIHNpbXBsaWZ5IGFuZCB1bmlmeSBjb21tb24gVk1YL1REWCBjb2RlIGZvciBpbXByb3ZlZCBtYWludGFpbmFiaWxpdHkuCgpJJiMzOTt2ZSBjYXJlZnVsbHkgZXhhbWluZWQgdGhlIGB0b192dGAgZnVuY3Rpb24gbm93IGJlaW5nIHBsYWNlZCBpbiBjb21tb24uaCBhbG9uZyB3aXRoIHRoZSBtb3ZlZCBleGl0IGFuZCBpbnRlcnJ1cHQgaGFuZGxlcnMuIFRoZXNlIGFyZSBhbG1vc3QgaWRlbnRpY2FsIHRvIHRoZWlyIG9yaWdpbmFsIGltcGxlbWVudGF0aW9ucywgYW5kIG9ubHkgdGhlIG5hbWluZyBoYXMgYmVlbiBhZGp1c3RlZCB0byB1c2UgdGhlIHVuaWZpZWQgJiMzNDt2dCYjMzQ7IHByZWZpeC4gSW1wb3J0YW50bHksIHRoZSBgc3RhdGljX2Fzc2VydGAgc3RhdGVtZW50cyBjb25maXJtaW5nIHRoZSBvZmZzZXRzIG9mIHRoZSBgdnRgIG1lbWJlciB3aXRoaW4gYHZjcHVfdm14X3RkeGAsIGB2Y3B1X3ZteGAsIGFuZCBgdmNwdV90ZHhgIHN0cnVjdHVyZXMgYXJlIGNydWNpYWwuIFRoaXMgZ3VhcmFudGVlcyB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlIGBjb250YWluZXJfb2ZgIG1hY3JvIGFuZCBlbnN1cmVzIG5vIG1lbW9yeSBjb3JydXB0aW9uIGNhbiBvY2N1ciBkdWUgdG8gc3RydWN0IG1lbWJlciBhY2Nlc3MgdGhyb3VnaCBgdG9fdnRgIGFuZCBgdnRfdG9fdmNwdWAuIEl0IGVsaW1pbmF0ZXMgdGhlIHBvc3NpYmlsaXR5IG9mIG9mZnNldCBtaXNtYXRjaCBidWdzLgoKTm93LCBsZXQmIzM5O3MgcHV0IG9uIHRoZSBLTVNBTiBoYXQuIFdlIG5lZWQgdG8gbWV0aG9kaWNhbGx5IGNoZWNrIGZvciBhbnkgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4KCjEuICAqKktlcm5lbC1Vc2VyIEludGVyZmFjZToqKiBEb2VzIHRoaXMgcGF0Y2ggYWRkLCByZW1vdmUgb3IgY2hhbmdlIGFueSBrZXJuZWwgc3RydWN0dXJlcyB0aGF0IGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZT8gTm8sIHRoaXMgaXMgcHVyZWx5IGludGVybmFsIHJlZmFjdG9yaW5nLgoyLiAgKipDb25kaXRpb25hbCBMb2dpYy9CcmFuY2hpbmc6KiogRG9lcyB0aGUgcGF0Y2ggaW50cm9kdWNlIGFueSBuZXcgY29uZGl0aW9uYWwgbG9naWMgd2hlcmUgdGhlIG91dGNvbWUgbWlnaHQgZGVwZW5kIG9uIGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGU/IE5vdCB0aGF0IEkgY2FuIHNlZS4gVGhlIGNvZGUgaXMgY2FyZWZ1bGx5IHN0cnVjdHVyZWQgdG8gYXZvaWQgc3VjaCBzY2VuYXJpb3MuCjMuICAqKkRhdGEgU3RydWN0dXJlIEluaXRpYWxpemF0aW9uOioqIElzIHRoZXJlIGFueSBpbnRyb2R1Y3Rpb24sIG9yIGNoYW5nZSB0byBjb21wbGV4IGRhdGEgc3RydWN0dXJlcywgYW5kIGlmIHNvLCBob3cgYXJlIHRoZXkgaW5pdGlhbGl6ZWQ/IEFyZSBhbnkgZmllbGRzIGxlZnQgdW5pbml0aWFsaXplZCB0aGF0IGNvdWxkIGxhdGVyIGJlIHJlYWQ/IE5vLiBUaGUgcmVmYWN0b3JpbmcgaXRzZWxmIGRvZXNuJiMzOTt0IGFsdGVyIGRhdGEgc3RydWN0dXJlcyBpbiBhIHdheSB0aGF0IGludHJvZHVjZXMgdGhpcyByaXNrLgo0LiAgKipCb3VuZHMvTGVuZ3RoIENoZWNrczoqKiBEb2VzIGl0IGltcGFjdCBhbnkgZXhpc3RpbmcgY2hlY2tzIGluIGEgd2F5IHRoYXQgYWxsb3dzIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGRhdGE/IE5vLgoKQWZ0ZXIgdGhpcyBjYXJlZnVsIGluc3BlY3Rpb24sIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIFRoZXNlIGtpbmRzIG9mIGJ1Z3MsIHdpdGggcG90ZW50aWFsIHN0cnVjdCBtZW1iZXIgb2Zmc2V0cyBtaXNtYXRjaGVzLCB3b3VsZCBiZSBjYXVnaHQgd2l0aCBzdGFuZGFyZCBtZW1vcnkgY2hlY2tlcnMgbGlrZSBLQVNBTiBkdXJpbmcgcm91dGluZSB0ZXN0aW5nLiBUaGUga2V5IGlzIGluIHRoZSBzdGF0aWMgYXNzZXJ0cyBhbmQgdGhlIHJpZ29yb3VzIGNvZGUgcmV2aWV3IGJ5IHRoZSBjb21tdW5pdHkuIEl0JiMzOTtzIGVzc2VudGlhbGx5IHN0cnVjdHVyYWwgcmVmYWN0b3JpbmcgdGhhdCBtb3ZlcyBjb2RlIGFyb3VuZCB3aGlsZSByZXRhaW5pbmcgdGhlIHNhbWUgZnVuY3Rpb25hbGl0eS4KCk15IGNvbmNsdXNpb24gaXMgdGhhdCB0aGlzIHBhdGNoICpkb2VzIG5vdCogcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSByaXNrcyBhc3NvY2lhdGVkIHdpdGggdGhpcyByZWZhY3RvcmluZyBhcmUgbWluaW1hbCwgcHJpbWFyaWx5IGxpbWl0ZWQgdG8gdGhlIGNvcnJlY3RuZXNzIG9mIHBvaW50ZXIgYXJpdGhtZXRpYyB3aXRoIG9mZnNldHMuIFRoZXNlIGFyZSB0aGluZ3MgdGhhdCB3b3VsZCBiZSByZWFkaWx5IHBpY2tlZCB1cCBieSBleGlzdGluZyBLVk0gdGVzdCBpbmZyYXN0cnVjdHVyZSBhbmQgbWVtb3J5IHNhbml0aXplcnMsIHNvIGBOZWVkc0tNU0FOYCA9IGBmYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA5OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcmVmYWN0b3Jpbmcgb2YgS1ZNIEludGVsIFZNWCBhbmQgVERYIGNvZGUgdG8gY29uc29saWRhdGUgY29tbW9uIHZpcnR1YWxpemF0aW9uIGluZnJhc3RydWN0dXJlIChWVCkgYmV0d2VlbiBzdGFuZGFyZCBWTVggYW5kIFREWCB2Q1BVczpcbjEuIEl0IGRlZmluZXMgYSBjb21tb24gd3JhcHBlciBsYXlvdXQgYHN0cnVjdCB2Y3B1X3ZteF90ZHhgIHdpdGggY29tcGlsZS10aW1lIGFzc2VydGlvbnMgKGBzdGF0aWNfYXNzZXJ0YCkgZW5zdXJpbmcgb2Zmc2V0IG1hdGNoaW5nIG9mIGBzdHJ1Y3QgdmNwdV92dGAgYWNyb3NzIGB2Y3B1X3ZteGAgYW5kIGB2Y3B1X3RkeGAuXG4yLiBJdCBtb3ZlcyBhbmQgcmVuYW1lcyBoZWxwZXIgZnVuY3Rpb25zIChgdG9fdnRgLCBgdnRfZ2V0X2V4aXRfcmVhc29uYCwgYHZ0X2dldF9leGl0X3F1YWxgLCBgdnRfZ2V0X2ludHJfaW5mb2AsIGV0Yy4pIGZyb20gYHZteC5oYC9gdm14LmNgIHRvIGBjb21tb24uaGAvYG1haW4uY2AuXG4zLiBJdCBtb3ZlcyBjb21tb24gZXhpdCBhbmQgaW50ZXJydXB0IGhhbmRsaW5nIGZ1bmN0aW9ucyAoYHZ0X2hhbmRsZV9leGl0X2lycW9mZmAsIGB2dF9oYW5kbGVfbm1pYCwgYGhhbmRsZV9leHRlcm5hbF9pbnRlcnJ1cHRfaXJxb2ZmYCwgZXRjLikgdG8gYG1haW4uY2AuXG40LiBJdCByZW5hbWVzIHBvc3RlZCBpbnRlcnJ1cHQgcm91dGluZXMgdG8gdXNlIHRoZSBgdnRfYCBwcmVmaXggYWNyb3NzIHRoZSBjb2RlYmFzZS5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBleHBvc2UgdW5pbml0aWFsaXplZCBmaWVsZHMgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlLCBvciBhbHRlciBidWZmZXIgYm91bmRzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHN0cnVjdCBsYXlvdXQgb3Igb2Zmc2V0cyBhcmUgZ3VhcmRlZCBhdCBjb21waWxlIHRpbWUgYnkgYHN0YXRpY19hc3NlcnRgIG9yIHdvdWxkIG1hbmlmZXN0IGFzIG1lbW9yeSBjb3JydXB0aW9uL09PQiBhY2Nlc3MgZGV0ZWN0YWJsZSBieSBzdGFuZGFyZCBidWlsZHMgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaXMgYSByZWZhY3RvcmluZyBvZiBLVk0gSW50ZWwgVk1YIGFuZCBURFggY29kZSB0byBjb25zb2xpZGF0ZSBjb21tb24gdmlydHVhbGl6YXRpb24gaW5mcmFzdHJ1Y3R1cmUgKFZUKSBiZXR3ZWVuIHN0YW5kYXJkIFZNWCBhbmQgVERYIHZDUFVzOlxuMS4gSXQgZGVmaW5lcyBhIGNvbW1vbiB3cmFwcGVyIGxheW91dCBgc3RydWN0IHZjcHVfdm14X3RkeGAgd2l0aCBjb21waWxlLXRpbWUgYXNzZXJ0aW9ucyAoYHN0YXRpY19hc3NlcnRgKSBlbnN1cmluZyBvZmZzZXQgbWF0Y2hpbmcgb2YgYHN0cnVjdCB2Y3B1X3Z0YCBhY3Jvc3MgYHZjcHVfdm14YCBhbmQgYHZjcHVfdGR4YC5cbjIuIEl0IG1vdmVzIGFuZCByZW5hbWVzIGhlbHBlciBmdW5jdGlvbnMgKGB0b192dGAsIGB2dF9nZXRfZXhpdF9yZWFzb25gLCBgdnRfZ2V0X2V4aXRfcXVhbGAsIGB2dF9nZXRfaW50cl9pbmZvYCwgZXRjLikgZnJvbSBgdm14LmhgL2B2bXguY2AgdG8gYGNvbW1vbi5oYC9gbWFpbi5jYC5cbjMuIEl0IG1vdmVzIGNvbW1vbiBleGl0IGFuZCBpbnRlcnJ1cHQgaGFuZGxpbmcgZnVuY3Rpb25zIChgdnRfaGFuZGxlX2V4aXRfaXJxb2ZmYCwgYHZ0X2hhbmRsZV9ubWlgLCBgaGFuZGxlX2V4dGVybmFsX2ludGVycnVwdF9pcnFvZmZgLCBldGMuKSB0byBgbWFpbi5jYC5cbjQuIEl0IHJlbmFtZXMgcG9zdGVkIGludGVycnVwdCByb3V0aW5lcyB0byB1c2UgdGhlIGB2dF9gIHByZWZpeCBhY3Jvc3MgdGhlIGNvZGViYXNlLlxuXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGV4cG9zZSB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nIHRvIHVzZXIgc3BhY2UsIG9yIGFsdGVyIGJ1ZmZlciBib3VuZHMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggc3RydWN0IGxheW91dCBvciBvZmZzZXRzIGFyZSBndWFyZGVkIGF0IGNvbXBpbGUgdGltZSBieSBgc3RhdGljX2Fzc2VydGAgb3Igd291bGQgbWFuaWZlc3QgYXMgbWVtb3J5IGNvcnJ1cHRpb24vT09CIGFjY2VzcyBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIGJ1aWxkcyBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjI0OjIzLjgxNzM5NDM1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYzMDU1NzkwNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2dF9oYW5kbGVfZXhpdF9pcnFvZmZcIixcbiAgICBcInZ0X2hhbmRsZV9ubWlcIixcbiAgICBcInZ0X3ZjcHVfcGlfbG9hZFwiLFxuICAgIFwidnRfdmNwdV9waV9wdXRcIixcbiAgICBcInZ0X3BpX3N0YXJ0X2J5cGFzc1wiLFxuICAgIFwidnRfcGlfdXBkYXRlX2lydGVcIixcbiAgICBcInZteF9oYW5kbGVfZXhpdFwiLFxuICAgIFwidm14X3ZjcHVfcnVuXCIsXG4gICAgXCJuZXN0ZWRfdm14X3JlZmxlY3Rfdm1leGl0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHJlZmFjdG9yaW5nIG9mIEtWTSBJbnRlbCBWTVggYW5kIFREWCBjb2RlIHRvIGNvbnNvbGlkYXRlIGNvbW1vbiB2aXJ0dWFsaXphdGlvbiBpbmZyYXN0cnVjdHVyZSAoVlQpIGJldHdlZW4gc3RhbmRhcmQgVk1YIGFuZCBURFggdkNQVXM6XFxuMS4gSXQgZGVmaW5lcyBhIGNvbW1vbiB3cmFwcGVyIGxheW91dCBgc3RydWN0IHZjcHVfdm14X3RkeGAgd2l0aCBjb21waWxlLXRpbWUgYXNzZXJ0aW9ucyAoYHN0YXRpY19hc3NlcnRgKSBlbnN1cmluZyBvZmZzZXQgbWF0Y2hpbmcgb2YgYHN0cnVjdCB2Y3B1X3Z0YCBhY3Jvc3MgYHZjcHVfdm14YCBhbmQgYHZjcHVfdGR4YC5cXG4yLiBJdCBtb3ZlcyBhbmQgcmVuYW1lcyBoZWxwZXIgZnVuY3Rpb25zIChgdG9fdnRgLCBgdnRfZ2V0X2V4aXRfcmVhc29uYCwgYHZ0X2dldF9leGl0X3F1YWxgLCBgdnRfZ2V0X2ludHJfaW5mb2AsIGV0Yy4pIGZyb20gYHZteC5oYC9gdm14LmNgIHRvIGBjb21tb24uaGAvYG1haW4uY2AuXFxuMy4gSXQgbW92ZXMgY29tbW9uIGV4aXQgYW5kIGludGVycnVwdCBoYW5kbGluZyBmdW5jdGlvbnMgKGB2dF9oYW5kbGVfZXhpdF9pcnFvZmZgLCBgdnRfaGFuZGxlX25taWAsIGBoYW5kbGVfZXh0ZXJuYWxfaW50ZXJydXB0X2lycW9mZmAsIGV0Yy4pIHRvIGBtYWluLmNgLlxcbjQuIEl0IHJlbmFtZXMgcG9zdGVkIGludGVycnVwdCByb3V0aW5lcyB0byB1c2UgdGhlIGB2dF9gIHByZWZpeCBhY3Jvc3MgdGhlIGNvZGViYXNlLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmcgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgYnVmZmVyIGJvdW5kcy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBzdHJ1Y3QgbGF5b3V0IG9yIG9mZnNldHMgYXJlIGd1YXJkZWQgYXQgY29tcGlsZSB0aW1lIGJ5IGBzdGF0aWNfYXNzZXJ0YCBvciB3b3VsZCBtYW5pZmVzdCBhcyBtZW1vcnkgY29ycnVwdGlvbi9PT0IgYWNjZXNzIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgYnVpbGRzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgS1ZNIEludGVsIChWTVgvVERYKSB2aXJ0dWFsaXphdGlvbiBsb2dpYyBieSBjb25zb2xpZGF0aW5nIGV4aXQgc3RhdHVzIGhhbmRsaW5nLCBleGl0IElSUS1vZmYgcHJvY2Vzc2luZywgcG9zdGVkIGludGVycnVwdCBoZWxwZXJzLCBhbmQgVk1DUyBleGl0IHF1YWxpZmljYXRpb24gYWNjZXNzb3JzIHVuZGVyIGNvbW1vbiB2dF8qIGFic3RyYWN0aW9ucy4gVGhpcyBhZmZlY3RzIGNvcmUgS1ZNIFZNIGV4aXQgaGFuZGxpbmcgYW5kIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiByZWFjaGFibGUgb24gYW1kNjQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjI0OjIzLjgxNzM5OTgzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjY5OTQ0OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5ZDI1ZjA2YTkzYWFiZTY0ZmJhZDBkZWQ3NGY3MzAwMGY0YTQ3Y2MzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgU2VwIDUgMDk6MjQ6MjIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaCBiL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmhcXG5pbmRleCAwODAwNTY3NjcwMmMyLi4zZTY4ZmExMmFjYTY1IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oXFxuQEAgLTIsMTAgKzIsMTIgQEBcXG4gI2lmbmRlZiBfX0tWTV9YODZfVk1YX0NPTU1PTl9IXFxuICNkZWZpbmUgX19LVk1fWDg2X1ZNWF9DT01NT05fSFxcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbnRhaW5lcl9vZi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva3ZtX2hvc3QuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9wb3N0ZWRfaW50ci5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcIm1tdS5oXFxcIlxcbisjaW5jbHVkZSBcXFwidm14X29wcy5oXFxcIlxcbiBcXG4gdW5pb24gdm14X2V4aXRfcmVhc29uIHtcXG4gXFx0c3RydWN0IHtcXG5AQCAtNzQsMTQgKzc2LDYyIEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc190ZF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkgeyByZXR1cm4gZmFsc2U7IH1cXG4gXFxuICNlbmRpZlxcbiBcXG4rc3RydWN0IHZjcHVfdm14X3RkeCB7XFxuK1xcdHN0cnVjdCBrdm1fdmNwdSB2Y3B1O1xcbitcXHRzdHJ1Y3QgdmNwdV92dCB2dDtcXG4rfTtcXG4rXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IHZjcHVfdnQgKnRvX3Z0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4re1xcbitcXHRyZXR1cm4gXFx1MDAyNihjb250YWluZXJfb2YodmNwdSwgc3RydWN0IHZjcHVfdm14X3RkeCwgdmNwdSktXFx1MDAzZXZ0KTtcXG4rfVxcbitcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBzdHJ1Y3Qga3ZtX3ZjcHUgKnZ0X3RvX3ZjcHUoc3RydWN0IHZjcHVfdnQgKnZ0KVxcbit7XFxuK1xcdHJldHVybiBcXHUwMDI2KGNvbnRhaW5lcl9vZih2dCwgc3RydWN0IHZjcHVfdm14X3RkeCwgdnQpLVxcdTAwM2V2Y3B1KTtcXG4rfVxcbitcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bmlvbiB2bXhfZXhpdF9yZWFzb24gdnRfZ2V0X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4re1xcbitcXHRyZXR1cm4gdG9fdnQodmNwdSktXFx1MDAzZWV4aXRfcmVhc29uO1xcbit9XFxuK1xcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcgdnRfZ2V0X2V4aXRfcXVhbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuK3tcXG4rXFx0c3RydWN0IHZjcHVfdnQgKnZ0ID0gdG9fdnQodmNwdSk7XFxuK1xcbitcXHRpZiAoIWt2bV9yZWdpc3Rlcl90ZXN0X2FuZF9tYXJrX2F2YWlsYWJsZSh2Y3B1LCBWQ1BVX1JFR19FWElUX0lORk9fMSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFXQVJOX09OX09OQ0UoaXNfdGRfdmNwdSh2Y3B1KSkpXFxuK1xcdFxcdHZ0LVxcdTAwM2VleGl0X3F1YWxpZmljYXRpb24gPSB2bWNzX3JlYWRsKEVYSVRfUVVBTElGSUNBVElPTik7XFxuK1xcbitcXHRyZXR1cm4gdnQtXFx1MDAzZWV4aXRfcXVhbGlmaWNhdGlvbjtcXG4rfVxcbitcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdnRfZ2V0X2ludHJfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuK3tcXG4rXFx0c3RydWN0IHZjcHVfdnQgKnZ0ID0gdG9fdnQodmNwdSk7XFxuK1xcbitcXHRpZiAoIWt2bV9yZWdpc3Rlcl90ZXN0X2FuZF9tYXJrX2F2YWlsYWJsZSh2Y3B1LCBWQ1BVX1JFR19FWElUX0lORk9fMikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFXQVJOX09OX09OQ0UoaXNfdGRfdmNwdSh2Y3B1KSkpXFxuK1xcdFxcdHZ0LVxcdTAwM2VleGl0X2ludHJfaW5mbyA9IHZtY3NfcmVhZDMyKFZNX0VYSVRfSU5UUl9JTkZPKTtcXG4rXFxuK1xcdHJldHVybiB2dC1cXHUwMDNlZXhpdF9pbnRyX2luZm87XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBpc194ZmRfbm1fZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbit7XFxuK1xcdHJldHVybiB2Y3B1LVxcdTAwM2VhcmNoLmd1ZXN0X2ZwdS5mcHN0YXRlLVxcdTAwM2V4ZmQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgICFrdm1faXNfY3IwX2JpdF9zZXQodmNwdSwgWDg2X0NSMF9UUyk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB2dF9pc190ZHhfcHJpdmF0ZV9ncGEoc3RydWN0IGt2bSAqa3ZtLCBncGFfdCBncGEpXFxuIHtcXG4gXFx0LyogRm9yIFREWCB0aGUgZGlyZWN0IG1hc2sgaXMgdGhlIHNoYXJlZCBtYXNrLiAqL1xcbiBcXHRyZXR1cm4gIWt2bV9pc19hZGRyX2RpcmVjdChrdm0sIGdwYSk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgaW50IF9fdm14X2hhbmRsZV9lcHRfdmlvbGF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uKVxcbitzdGF0aWMgaW5saW5lIGludCBfX3Z0X2hhbmRsZV9lcHRfdmlvbGF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24pXFxuIHtcXG4gXFx0dTY0IGVycm9yX2NvZGU7XFxuIFxcbkBAIC0xNjQsOCArMjE0LDggQEAgc3RhdGljIGlubGluZSB2b2lkIGt2bV92Y3B1X3RyaWdnZXJfcG9zdGVkX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuICAqIFBvc3QgYW4gaW50ZXJydXB0IHRvIGEgdkNQVSdzIFBJUiBhbmQgdHJpZ2dlciB0aGUgdkNQVSB0byBwcm9jZXNzIHRoZVxcbiAgKiBpbnRlcnJ1cHQgaWYgbmVjZXNzYXJ5LlxcbiAgKi9cXG4tc3RhdGljIGlubGluZSB2b2lkIF9fdm14X2RlbGl2ZXJfcG9zdGVkX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHBpX2Rlc2MgKnBpX2Rlc2MsIGludCB2ZWN0b3IpXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3Z0X2RlbGl2ZXJfcG9zdGVkX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYywgaW50IHZlY3RvcilcXG4ge1xcbiBcXHRpZiAocGlfdGVzdF9hbmRfc2V0X3Bpcih2ZWN0b3IsIHBpX2Rlc2MpKVxcbiBcXHRcXHRyZXR1cm47XFxuQEAgLTE4Myw2ICsyMzMsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX192bXhfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFx0a3ZtX3ZjcHVfdHJpZ2dlcl9wb3N0ZWRfaW50ZXJydXB0KHZjcHUsIFBPU1RFRF9JTlRSX1ZFQ1RPUik7XFxuIH1cXG4gXFxuLW5vaW5zdHIgdm9pZCB2bXhfaGFuZGxlX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbitub2luc3RyIHZvaWQgdnRfaGFuZGxlX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiBcXG4gI2VuZGlmIC8qIF9fS1ZNX1g4Nl9WTVhfQ09NTU9OX0ggKi9cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9tYWluLmMgYi9hcmNoL3g4Ni9rdm0vdm14L21haW4uY1xcbmluZGV4IDRjNTJhYjhkMDc4NjkuLjZlMGIzOTU5ZDczYWIgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L21haW4uY1xcbkBAIC0xLDQgKzEsNSBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZW50cnktY29tbW9uLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGVwYXJhbS5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcIng4Nl9vcHMuaFxcXCJcXG5AQCAtMTAsOCArMTEsMTIgQEBcXG4gI2luY2x1ZGUgXFxcInRkeC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidGR4X2FyY2guaFxcXCJcXG4gXFxuKyNwcmFnbWEgR0NDIHBvaXNvbiB0b192bXhcXG4rXFxuK3N0YXRpY19hc3NlcnQob2Zmc2V0b2Yoc3RydWN0IHZjcHVfdm14X3RkeCwgdnQpID09IG9mZnNldG9mKHN0cnVjdCB2Y3B1X3ZteCwgdnQpKTtcXG4rXFxuICNpZmRlZiBDT05GSUdfS1ZNX0lOVEVMX1REWFxcbi1zdGF0aWNfYXNzZXJ0KG9mZnNldG9mKHN0cnVjdCB2Y3B1X3ZteCwgdnQpID09IG9mZnNldG9mKHN0cnVjdCB2Y3B1X3RkeCwgdnQpKTtcXG4rc3RhdGljX2Fzc2VydChvZmZzZXRvZihzdHJ1Y3QgdmNwdV92bXhfdGR4LCB2dCkgPT0gb2Zmc2V0b2Yoc3RydWN0IHZjcHVfdGR4LCB2dCkpO1xcbiBcXG4gc3RhdGljIHZvaWQgdnRfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUodm9pZClcXG4ge1xcbkBAIC04NzYsNiArODgxLDg1IEBAIHN0YXRpYyBpbnQgdnRfZ21lbV9tYXhfbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sXFxuICNkZWZpbmUgdnRfb3BfdGR4X29ubHkobmFtZSkgTlVMTFxcbiAjZW5kaWYgLyogQ09ORklHX0tWTV9JTlRFTF9URFggKi9cXG4gXFxuK3N0YXRpYyB2b2lkIGhhbmRsZV9ubV9mYXVsdF9pcnFvZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIFNhdmUgeGZkX2VyciB0byBndWVzdF9mcHUgYmVmb3JlIGludGVycnVwdCBpcyBlbmFibGVkLCBzbyB0aGVcXG4rXFx0ICogTVNSIHZhbHVlIGlzIG5vdCBjbG9iYmVyZWQgYnkgdGhlIGhvc3QgYWN0aXZpdHkgYmVmb3JlIHRoZSBndWVzdFxcbitcXHQgKiBoYXMgY2hhbmNlIHRvIGNvbnN1bWUgaXQuXFxuK1xcdCAqXFxuK1xcdCAqIFVwZGF0ZSB0aGUgZ3Vlc3QncyBYRkRfRVJSIGlmIGFuZCBvbmx5IGlmIFhGRCBpcyBlbmFibGVkLCBhcyB0aGUgI05NXFxuK1xcdCAqIGludGVyY2VwdGlvbiBtYXkgaGF2ZSBiZWVuIGNhdXNlZCBieSBMMSBpbnRlcmNlcHRpb24uICBQZXIgdGhlIFNETSxcXG4rXFx0ICogWEZEX0VSUiBpcyBub3QgbW9kaWZpZWQgZm9yIG5vbi1YRkQgI05NLCBpLmUuIGlmIENSMC5UUz0xLlxcbitcXHQgKlxcbitcXHQgKiBOb3RlLCBYRkRfRVJSIGlzIHVwZGF0ZWQgX2JlZm9yZV8gdGhlICNOTSBpbnRlcmNlcHRpb24gY2hlY2ssIGkuZS5cXG4rXFx0ICogdW5saWtlIENSMiBhbmQgRFI2LCB0aGUgdmFsdWUgaXMgbm90IGEgcGF5bG9hZCB0aGF0IGlzIGF0dGFjaGVkIHRvXFxuK1xcdCAqIHRoZSAjTk0gZXhjZXB0aW9uLlxcbitcXHQgKi9cXG4rXFx0aWYgKGlzX3hmZF9ubV9mYXVsdCh2Y3B1KSlcXG4rXFx0XFx0cmRtc3JxKE1TUl9JQTMyX1hGRF9FUlIsIHZjcHUtXFx1MDAzZWFyY2guZ3Vlc3RfZnB1LnhmZF9lcnIpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBoYW5kbGVfZXhjZXB0aW9uX2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBpbnRyX2luZm8pXFxuK3tcXG4rXFx0LyogaWYgZXhpdCBkdWUgdG8gUEYgY2hlY2sgZm9yIGFzeW5jIFBGICovXFxuK1xcdGlmIChpc19wYWdlX2ZhdWx0KGludHJfaW5mbykpXFxuK1xcdFxcdHZjcHUtXFx1MDAzZWFyY2guYXBmLmhvc3RfYXBmX2ZsYWdzID0ga3ZtX3JlYWRfYW5kX3Jlc2V0X2FwZl9mbGFncygpO1xcbitcXHQvKiBpZiBleGl0IGR1ZSB0byBOTSwgaGFuZGxlIGJlZm9yZSBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkICovXFxuK1xcdGVsc2UgaWYgKGlzX25tX2ZhdWx0KGludHJfaW5mbykpXFxuK1xcdFxcdGhhbmRsZV9ubV9mYXVsdF9pcnFvZmYodmNwdSk7XFxuK1xcdC8qIEhhbmRsZSBtYWNoaW5lIGNoZWNrcyBiZWZvcmUgaW50ZXJydXB0cyBhcmUgZW5hYmxlZCAqL1xcbitcXHRlbHNlIGlmIChpc19tYWNoaW5lX2NoZWNrKGludHJfaW5mbykpXFxuK1xcdFxcdGt2bV9tYWNoaW5lX2NoZWNrKCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGhhbmRsZV9leHRlcm5hbF9pbnRlcnJ1cHRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICB1MzIgaW50cl9pbmZvKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCB2ZWN0b3IgPSBpbnRyX2luZm8gXFx1MDAyNiBJTlRSX0lORk9fVkVDVE9SX01BU0s7XFxuK1xcbitcXHRpZiAoS1ZNX0JVRyghaXNfZXh0ZXJuYWxfaW50cihpbnRyX2luZm8pLCB2Y3B1LVxcdTAwM2Vrdm0sXFxuK1xcdCAgICBcXFwidW5leHBlY3RlZCBWTS1FeGl0IGludGVycnVwdCBpbmZvOiAweCV4XFxcIiwgaW50cl9pbmZvKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0a3ZtX2JlZm9yZV9pbnRlcnJ1cHQodmNwdSwgS1ZNX0hBTkRMSU5HX0lSUSk7XFxuK1xcdHg4Nl9lbnRyeV9mcm9tX2t2bShFVkVOVF9UWVBFX0VYVElOVCwgdmVjdG9yKTtcXG4rXFx0a3ZtX2FmdGVyX2ludGVycnVwdCh2Y3B1KTtcXG4rXFxuK1xcdHZjcHUtXFx1MDAzZWFyY2guYXRfaW5zdHJ1Y3Rpb25fYm91bmRhcnkgPSB0cnVlO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB2dF9oYW5kbGVfZXhpdF9pcnFvZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbit7XFxuK1xcdGlmICh0b192dCh2Y3B1KS1cXHUwMDNlZW11bGF0aW9uX3JlcXVpcmVkKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzd2l0Y2ggKHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYykge1xcbitcXHRjYXNlIEVYSVRfUkVBU09OX0VYVEVSTkFMX0lOVEVSUlVQVDpcXG4rXFx0XFx0aGFuZGxlX2V4dGVybmFsX2ludGVycnVwdF9pcnFvZmYodmNwdSwgdnRfZ2V0X2ludHJfaW5mbyh2Y3B1KSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUk6XFxuK1xcdFxcdGhhbmRsZV9leGNlcHRpb25faXJxb2ZmKHZjcHUsIHZ0X2dldF9pbnRyX2luZm8odmNwdSkpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBFWElUX1JFQVNPTl9NQ0VfRFVSSU5HX1ZNRU5UUlk6XFxuK1xcdFxcdGt2bV9tYWNoaW5lX2NoZWNrKCk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbit9XFxuK1xcbitub2luc3RyIHZvaWQgdnRfaGFuZGxlX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuK3tcXG4rXFx0aWYgKCh1MTYpdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljICE9IEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUkgfHxcXG4rXFx0ICAgICFpc19ubWkodnRfZ2V0X2ludHJfaW5mbyh2Y3B1KSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGt2bV9iZWZvcmVfaW50ZXJydXB0KHZjcHUsIEtWTV9IQU5ETElOR19OTUkpO1xcbitcXHR4ODZfZW50cnlfZnJvbV9rdm0oRVZFTlRfVFlQRV9OTUksIE5NSV9WRUNUT1IpO1xcbitcXHRrdm1fYWZ0ZXJfaW50ZXJydXB0KHZjcHUpO1xcbit9XFxuK1xcbiAjZGVmaW5lIFZNWF9SRVFVSVJFRF9BUElDVl9JTkhJQklUU1xcdFxcdFxcdFxcdFxcXFxcXG4gXFx0KEJJVChBUElDVl9JTkhJQklUX1JFQVNPTl9ESVNBQkxFRCkgfFxcdFxcdFxcdFxcXFxcXG4gXFx0IEJJVChBUElDVl9JTkhJQklUX1JFQVNPTl9BQlNFTlQpIHxcXHRcXHRcXHRcXFxcXFxuQEAgLTEwMDAsMTIgKzEwODQsMTIgQEAgc3RydWN0IGt2bV94ODZfb3BzIHZ0X3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcXG4gXFx0LmxvYWRfbW11X3BnZCA9IHZ0X29wKGxvYWRfbW11X3BnZCksXFxuIFxcbiBcXHQuY2hlY2tfaW50ZXJjZXB0ID0gdm14X2NoZWNrX2ludGVyY2VwdCxcXG4tXFx0LmhhbmRsZV9leGl0X2lycW9mZiA9IHZteF9oYW5kbGVfZXhpdF9pcnFvZmYsXFxuK1xcdC5oYW5kbGVfZXhpdF9pcnFvZmYgPSB2dF9oYW5kbGVfZXhpdF9pcnFvZmYsXFxuIFxcbiBcXHQudXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nID0gdnRfb3AodXBkYXRlX2NwdV9kaXJ0eV9sb2dnaW5nKSxcXG4gXFxuLVxcdC5waV91cGRhdGVfaXJ0ZSA9IHZteF9waV91cGRhdGVfaXJ0ZSxcXG4tXFx0LnBpX3N0YXJ0X2J5cGFzcyA9IHZteF9waV9zdGFydF9ieXBhc3MsXFxuK1xcdC5waV91cGRhdGVfaXJ0ZSA9IHZ0X3BpX3VwZGF0ZV9pcnRlLFxcbitcXHQucGlfc3RhcnRfYnlwYXNzID0gdnRfcGlfc3RhcnRfYnlwYXNzLFxcbiBcXG4gI2lmZGVmIENPTkZJR19YODZfNjRcXG4gXFx0LnNldF9odl90aW1lciA9IHZ0X29wKHNldF9odl90aW1lciksXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXFxuaW5kZXggMTUxODczNDA3YWJkMy4uNDc1OTllNzMxMmNmZCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xcbkBAIC00NDYsNyArNDQ2LDcgQEAgc3RhdGljIHZvaWQgbmVzdGVkX2VwdF9pbmplY3RfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIFxcdFxcdCAqIFxcXCJOTUkgdW5ibG9ja2luZyBkdWUgdG8gSVJFVFxcXCIsIGkuZS4gdGhlIGJpdCBjYW4gYmUgcHJvcGFnYXRlZFxcbiBcXHRcXHQgKiBhcy1pcyBmcm9tIHRoZSBvcmlnaW5hbCBFWElUX1FVQUxJRklDQVRJT04uXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSBcXHUwMDI2IElOVFJfSU5GT19VTkJMT0NLX05NSTtcXG4rXFx0XFx0ZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KSBcXHUwMDI2IElOVFJfSU5GT19VTkJMT0NLX05NSTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0aWYgKGZhdWx0LVxcdTAwM2VlcnJvcl9jb2RlIFxcdTAwMjYgUEZFUlJfUlNWRF9NQVNLKSB7XFxuIFxcdFxcdFxcdHZtX2V4aXRfcmVhc29uID0gRVhJVF9SRUFTT05fRVBUX01JU0NPTkZJRztcXG5AQCAtNDcyLDcgKzQ3Miw3IEBAIHN0YXRpYyB2b2lkIG5lc3RlZF9lcHRfaW5qZWN0X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRcXHRcXHQgKiBhbmQgd2Fsa3MgdGhlIGZhdWx0aW5nIEdQQS5cXG4gXFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdGlmIChmcm9tX2hhcmR3YXJlKVxcbi1cXHRcXHRcXHRcXHRleGl0X3F1YWxpZmljYXRpb24gfD0gdm14X2dldF9leGl0X3F1YWwodmNwdSkgXFx1MDAyNiBtYXNrO1xcbitcXHRcXHRcXHRcXHRleGl0X3F1YWxpZmljYXRpb24gfD0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KSBcXHUwMDI2IG1hc2s7XFxuIFxcdFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0XFx0ZXhpdF9xdWFsaWZpY2F0aW9uIHw9IGZhdWx0LVxcdTAwM2VleGl0X3F1YWxpZmljYXRpb24gXFx1MDAyNiBtYXNrO1xcbiBcXG5AQCAtNDc0Nyw3ICs0NzQ3LDcgQEAgc3RhdGljIHZvaWQgcHJlcGFyZV92bWNzMTIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgdm1jczEyICp2bWNzMTIsXFxuIHtcXG4gXFx0LyogdXBkYXRlIGV4aXQgaW5mb3JtYXRpb24gZmllbGRzOiAqL1xcbiBcXHR2bWNzMTItXFx1MDAzZXZtX2V4aXRfcmVhc29uID0gdm1fZXhpdF9yZWFzb247XFxuLVxcdGlmICh2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmVuY2xhdmVfbW9kZSlcXG4rXFx0aWYgKHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5lbmNsYXZlX21vZGUpXFxuIFxcdFxcdHZtY3MxMi1cXHUwMDNldm1fZXhpdF9yZWFzb24gfD0gVk1YX0VYSVRfUkVBU09OU19TR1hfRU5DTEFWRV9NT0RFO1xcbiBcXHR2bWNzMTItXFx1MDAzZWV4aXRfcXVhbGlmaWNhdGlvbiA9IGV4aXRfcXVhbGlmaWNhdGlvbjtcXG4gXFxuQEAgLTUzNzMsNyArNTM3Myw3IEBAIHN0YXRpYyBpbnQgbmVzdGVkX3ZteF9nZXRfdm1wdHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCAqdm1wb2ludGVyLFxcbiBcXHRzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBlO1xcbiBcXHRpbnQgcjtcXG4gXFxuLVxcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxcbitcXHRpZiAoZ2V0X3ZteF9tZW1fYWRkcmVzcyh2Y3B1LCB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxcbiBcXHRcXHRcXHRcXHR2bWNzX3JlYWQzMihWTVhfSU5TVFJVQ1RJT05fSU5GTyksIGZhbHNlLFxcbiBcXHRcXHRcXHRcXHRzaXplb2YoKnZtcG9pbnRlciksIFxcdTAwMjZndmEpKSB7XFxuIFxcdFxcdCpyZXQgPSAxO1xcbkBAIC01NjY1LDcgKzU2NjUsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXJlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdHN0cnVjdCB2bWNzMTIgKnZtY3MxMiA9IGlzX2d1ZXN0X21vZGUodmNwdSkgPyBnZXRfc2hhZG93X3ZtY3MxMih2Y3B1KVxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgOiBnZXRfdm1jczEyKHZjcHUpO1xcbi1cXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xcbitcXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XFxuIFxcdHUzMiBpbnN0cl9pbmZvID0gdm1jc19yZWFkMzIoVk1YX0lOU1RSVUNUSU9OX0lORk8pO1xcbiBcXHRzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTtcXG4gXFx0c3RydWN0IHg4Nl9leGNlcHRpb24gZTtcXG5AQCAtNTc3MSw3ICs1NzcxLDcgQEAgc3RhdGljIGludCBoYW5kbGVfdm13cml0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0c3RydWN0IHZtY3MxMiAqdm1jczEyID0gaXNfZ3Vlc3RfbW9kZSh2Y3B1KSA/IGdldF9zaGFkb3dfdm1jczEyKHZjcHUpXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICA6IGdldF92bWNzMTIodmNwdSk7XFxuLVxcdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcXG4gXFx0dTMyIGluc3RyX2luZm8gPSB2bWNzX3JlYWQzMihWTVhfSU5TVFJVQ1RJT05fSU5GTyk7XFxuIFxcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xcbiBcXHRzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBlO1xcbkBAIC01OTYwLDcgKzU5NjAsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXB0cmxkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gLyogRW11bGF0ZSB0aGUgVk1QVFJTVCBpbnN0cnVjdGlvbiAqL1xcbiBzdGF0aWMgaW50IGhhbmRsZV92bXB0cnN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xcbitcXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XFxuIFxcdHUzMiBpbnN0cl9pbmZvID0gdm1jc19yZWFkMzIoVk1YX0lOU1RSVUNUSU9OX0lORk8pO1xcbiBcXHRncGFfdCBjdXJyZW50X3ZtcHRyID0gdG9fdm14KHZjcHUpLVxcdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0cjtcXG4gXFx0c3RydWN0IHg4Nl9leGNlcHRpb24gZTtcXG5AQCAtNjAyMSw3ICs2MDIxLDcgQEAgc3RhdGljIGludCBoYW5kbGVfaW52ZXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0LyogQWNjb3JkaW5nIHRvIHRoZSBJbnRlbCBWTVggaW5zdHJ1Y3Rpb24gcmVmZXJlbmNlLCB0aGUgbWVtb3J5XFxuIFxcdCAqIG9wZXJhbmQgaXMgcmVhZCBldmVuIGlmIGl0IGlzbid0IG5lZWRlZCAoZS5nLiwgZm9yIHR5cGU9PWdsb2JhbClcXG4gXFx0ICovXFxuLVxcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxcbitcXHRpZiAoZ2V0X3ZteF9tZW1fYWRkcmVzcyh2Y3B1LCB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxcbiBcXHRcXHRcXHR2bXhfaW5zdHJ1Y3Rpb25faW5mbywgZmFsc2UsIHNpemVvZihvcGVyYW5kKSwgXFx1MDAyNmd2YSkpXFxuIFxcdFxcdHJldHVybiAxO1xcbiBcXHRyID0ga3ZtX3JlYWRfZ3Vlc3RfdmlydCh2Y3B1LCBndmEsIFxcdTAwMjZvcGVyYW5kLCBzaXplb2Yob3BlcmFuZCksIFxcdTAwMjZlKTtcXG5AQCAtNjEwNCw3ICs2MTA0LDcgQEAgc3RhdGljIGludCBoYW5kbGVfaW52dnBpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdC8qIGFjY29yZGluZyB0byB0aGUgaW50ZWwgdm14IGluc3RydWN0aW9uIHJlZmVyZW5jZSwgdGhlIG1lbW9yeVxcbiBcXHQgKiBvcGVyYW5kIGlzIHJlYWQgZXZlbiBpZiBpdCBpc24ndCBuZWVkZWQgKGUuZy4sIGZvciB0eXBlPT1nbG9iYWwpXFxuIFxcdCAqL1xcbi1cXHRpZiAoZ2V0X3ZteF9tZW1fYWRkcmVzcyh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSxcXG4rXFx0aWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KSxcXG4gXFx0XFx0XFx0dm14X2luc3RydWN0aW9uX2luZm8sIGZhbHNlLCBzaXplb2Yob3BlcmFuZCksIFxcdTAwMjZndmEpKVxcbiBcXHRcXHRyZXR1cm4gMTtcXG4gXFx0ciA9IGt2bV9yZWFkX2d1ZXN0X3ZpcnQodmNwdSwgZ3ZhLCBcXHUwMDI2b3BlcmFuZCwgc2l6ZW9mKG9wZXJhbmQpLCBcXHUwMDI2ZSk7XFxuQEAgLTYyMzYsOCArNjIzNiw4IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3ZtZnVuYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdCAqIEVYSVRfUkVBU09OX1ZNRlVOQyBhcyB0aGUgZXhpdCByZWFzb24uXFxuIFxcdCAqL1xcbiBcXHRuZXN0ZWRfdm14X3ZtZXhpdCh2Y3B1LCB2bXgtXFx1MDAzZXZ0LmV4aXRfcmVhc29uLmZ1bGwsXFxuLVxcdFxcdFxcdCAgdm14X2dldF9pbnRyX2luZm8odmNwdSksXFxuLVxcdFxcdFxcdCAgdm14X2dldF9leGl0X3F1YWwodmNwdSkpO1xcbitcXHRcXHRcXHQgIHZ0X2dldF9pbnRyX2luZm8odmNwdSksXFxuK1xcdFxcdFxcdCAgdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KSk7XFxuIFxcdHJldHVybiAxO1xcbiB9XFxuIFxcbkBAIC02Mjg4LDcgKzYyODgsNyBAQCBzdGF0aWMgYm9vbCBuZXN0ZWRfdm14X2V4aXRfaGFuZGxlZF9pbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIFxcdGlmICghbmVzdGVkX2NwdV9oYXModm1jczEyLCBDUFVfQkFTRURfVVNFX0lPX0JJVE1BUFMpKVxcbiBcXHRcXHRyZXR1cm4gbmVzdGVkX2NwdV9oYXModm1jczEyLCBDUFVfQkFTRURfVU5DT05EX0lPX0VYSVRJTkcpO1xcbiBcXG4tXFx0ZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XFxuK1xcdGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XFxuIFxcbiBcXHRwb3J0ID0gZXhpdF9xdWFsaWZpY2F0aW9uIFxcdTAwM2VcXHUwMDNlIDE2O1xcbiBcXHRzaXplID0gKGV4aXRfcXVhbGlmaWNhdGlvbiBcXHUwMDI2IDcpICsgMTtcXG5AQCAtNjMxNCw3ICs2MzE0LDcgQEAgc3RhdGljIGJvb2wgbmVzdGVkX3ZteF9leGl0X2hhbmRsZWRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFxuIFxcdGlmIChleGl0X3JlYXNvbi5iYXNpYyA9PSBFWElUX1JFQVNPTl9NU1JfUkVBRF9JTU0gfHxcXG4gXFx0ICAgIGV4aXRfcmVhc29uLmJhc2ljID09IEVYSVRfUkVBU09OX01TUl9XUklURV9JTU0pXFxuLVxcdFxcdG1zcl9pbmRleCA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xcbitcXHRcXHRtc3JfaW5kZXggPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xcbiBcXHRlbHNlXFxuIFxcdFxcdG1zcl9pbmRleCA9IGt2bV9lY3hfcmVhZCh2Y3B1KTtcXG4gXFxuQEAgLTYzNTAsNyArNjM1MCw3IEBAIHN0YXRpYyBib29sIG5lc3RlZF92bXhfZXhpdF9oYW5kbGVkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIHN0YXRpYyBib29sIG5lc3RlZF92bXhfZXhpdF9oYW5kbGVkX2NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFx0c3RydWN0IHZtY3MxMiAqdm1jczEyKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcXG4gXFx0aW50IGNyID0gZXhpdF9xdWFsaWZpY2F0aW9uIFxcdTAwMjYgMTU7XFxuIFxcdGludCByZWc7XFxuIFxcdHVuc2lnbmVkIGxvbmcgdmFsO1xcbkBAIC02NDg0LDcgKzY0ODQsNyBAQCBzdGF0aWMgYm9vbCBuZXN0ZWRfdm14X2wwX3dhbnRzX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXG4gXFx0c3dpdGNoICgodTE2KWV4aXRfcmVhc29uLmJhc2ljKSB7XFxuIFxcdGNhc2UgRVhJVF9SRUFTT05fRVhDRVBUSU9OX05NSTpcXG4tXFx0XFx0aW50cl9pbmZvID0gdm14X2dldF9pbnRyX2luZm8odmNwdSk7XFxuK1xcdFxcdGludHJfaW5mbyA9IHZ0X2dldF9pbnRyX2luZm8odmNwdSk7XFxuIFxcdFxcdGlmIChpc19ubWkoaW50cl9pbmZvKSlcXG4gXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdFxcdGVsc2UgaWYgKGlzX3BhZ2VfZmF1bHQoaW50cl9pbmZvKSlcXG5AQCAtNjU2Nyw3ICs2NTY3LDcgQEAgc3RhdGljIGJvb2wgbmVzdGVkX3ZteF9sMV93YW50c19leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFxuIFxcdHN3aXRjaCAoKHUxNilleGl0X3JlYXNvbi5iYXNpYykge1xcbiBcXHRjYXNlIEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUk6XFxuLVxcdFxcdGludHJfaW5mbyA9IHZteF9nZXRfaW50cl9pbmZvKHZjcHUpO1xcbitcXHRcXHRpbnRyX2luZm8gPSB2dF9nZXRfaW50cl9pbmZvKHZjcHUpO1xcbiBcXHRcXHRpZiAoaXNfbm1pKGludHJfaW5mbykpXFxuIFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHRcXHRlbHNlIGlmIChpc19wYWdlX2ZhdWx0KGludHJfaW5mbykpXFxuQEAgLTY3MzcsMTQgKzY3MzcsMTQgQEAgYm9vbCBuZXN0ZWRfdm14X3JlZmxlY3Rfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0ICogbmVlZCB0byBiZSBzeW50aGVzaXplZCBieSBxdWVyeWluZyB0aGUgaW4ta2VybmVsIExBUElDLCBidXQgZXh0ZXJuYWxcXG4gXFx0ICogaW50ZXJydXB0cyBhcmUgbmV2ZXIgcmVmbGVjdGVkIHRvIEwxIHNvIGl0J3MgYSBub24taXNzdWUuXFxuIFxcdCAqL1xcbi1cXHRleGl0X2ludHJfaW5mbyA9IHZteF9nZXRfaW50cl9pbmZvKHZjcHUpO1xcbitcXHRleGl0X2ludHJfaW5mbyA9IHZ0X2dldF9pbnRyX2luZm8odmNwdSk7XFxuIFxcdGlmIChpc19leGNlcHRpb25fd2l0aF9lcnJvcl9jb2RlKGV4aXRfaW50cl9pbmZvKSkge1xcbiBcXHRcXHRzdHJ1Y3Qgdm1jczEyICp2bWNzMTIgPSBnZXRfdm1jczEyKHZjcHUpO1xcbiBcXG4gXFx0XFx0dm1jczEyLVxcdTAwM2V2bV9leGl0X2ludHJfZXJyb3JfY29kZSA9XFxuIFxcdFxcdFxcdHZtY3NfcmVhZDMyKFZNX0VYSVRfSU5UUl9FUlJPUl9DT0RFKTtcXG4gXFx0fVxcbi1cXHRleGl0X3F1YWwgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcXG4rXFx0ZXhpdF9xdWFsID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcXG4gXFxuIHJlZmxlY3Rfdm1leGl0OlxcbiBcXHRuZXN0ZWRfdm14X3ZtZXhpdCh2Y3B1LCBleGl0X3JlYXNvbi5mdWxsLCBleGl0X2ludHJfaW5mbywgZXhpdF9xdWFsKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5jIGIvYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5jXFxuaW5kZXggNGE2ZDlhMTdkYTIzOC4uMjY0NGFkZDU0Yjc2YiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmNcXG5AQCAtMTQsNiArMTQsOCBAQFxcbiAjaW5jbHVkZSBcXFwidm14LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ0ZHguaFxcXCJcXG4gXFxuKyNwcmFnbWEgR0NDIHBvaXNvbiB0b192bXhcXG4rXFxuIC8qXFxuICAqIE1haW50YWluIGEgcGVyLUNQVSBsaXN0IG9mIHZDUFVzIHRoYXQgbmVlZCB0byBiZSBhd2FrZW5lZCBieSB3YWtldXBfaGFuZGxlcigpXFxuICAqIHdoZW4gYSBXQUtFVVBfVkVDVE9SIGludGVycnVwdGVkIGlzIHBvc3RlZC4gIHZDUFVzIGFyZSBhZGRlZCB0byB0aGUgbGlzdCB3aGVuXFxuQEAgLTU0LDcgKzU2LDcgQEAgc3RhdGljIGludCBwaV90cnlfc2V0X2NvbnRyb2woc3RydWN0IHBpX2Rlc2MgKnBpX2Rlc2MsIHU2NCAqcG9sZCwgdTY0IG5ldylcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXZvaWQgdm14X3ZjcHVfcGlfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXFxuK3ZvaWQgdnRfdmNwdV9waV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcXG4ge1xcbiBcXHRzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYyA9IHZjcHVfdG9fcGlfZGVzYyh2Y3B1KTtcXG4gXFx0c3RydWN0IHZjcHVfdnQgKnZ0ID0gdG9fdnQodmNwdSk7XFxuQEAgLTE0NCwxMSArMTQ2LDExIEBAIHZvaWQgdm14X3ZjcHVfcGlfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXFxuIFxcdFxcdHBpX3NldF9vbihwaV9kZXNjKTtcXG4gfVxcbiBcXG4tc3RhdGljIGJvb2wgdm14X2Nhbl91c2VfdnRkX3BpKHN0cnVjdCBrdm0gKmt2bSlcXG4rc3RhdGljIGJvb2wgdnRfY2FuX3VzZV92dGRfcGkoc3RydWN0IGt2bSAqa3ZtKVxcbiB7XFxuIFxcdC8qXFxuIFxcdCAqIE5vdGUsIHJlYWRpbmcgdGhlIG51bWJlciBvZiBwb3NzaWJsZSBieXBhc3MgSVJRcyBjYW4gcmFjZSB3aXRoIGFcXG4tXFx0ICogYnlwYXNzIElSUSBiZWluZyBhdHRhY2hlZCB0byB0aGUgVk0uICB2bXhfcGlfc3RhcnRfYnlwYXNzKCkgZW5zdXJlc1xcbitcXHQgKiBieXBhc3MgSVJRIGJlaW5nIGF0dGFjaGVkIHRvIHRoZSBWTS4gIHZ0X3BpX3N0YXJ0X2J5cGFzcygpIGVuc3VyZXNcXG4gXFx0ICogYmxvY2tuZyB2Q1BVcyB3aWxsIHNlZSBhbiBlbGV2YXRlZCBjb3VudCBvciBnZXQgS1ZNX1JFUV9VTkJMT0NLLlxcbiBcXHQgKi9cXG4gXFx0cmV0dXJuIGlycWNoaXBfaW5fa2VybmVsKGt2bSkgXFx1MDAyNlxcdTAwMjYga3ZtX2FyY2hfaGFzX2lycV9ieXBhc3MoKSBcXHUwMDI2XFx1MDAyNlxcbkBAIC0yMDYsNyArMjA4LDcgQEAgc3RhdGljIHZvaWQgcGlfZW5hYmxlX3dha2V1cF9oYW5kbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0X19hcGljX3NlbmRfSVBJX3NlbGYoUE9TVEVEX0lOVFJfV0FLRVVQX1ZFQ1RPUik7XFxuIH1cXG4gXFxuLXN0YXRpYyBib29sIHZteF9uZWVkc19waV93YWtldXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbitzdGF0aWMgYm9vbCB2dF9uZWVkc19waV93YWtldXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdC8qXFxuIFxcdCAqIFRoZSBkZWZhdWx0IHBvc3RlZCBpbnRlcnJ1cHQgdmVjdG9yIGRvZXMgbm90aGluZyB3aGVuXFxuQEAgLTIxNywxNCArMjE5LDE0IEBAIHN0YXRpYyBib29sIHZteF9uZWVkc19waV93YWtldXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHQgKiBiYWNrIHRvIHRoZSBwaV93YWtldXBfaGFuZGxlcigpIGZ1bmN0aW9uLlxcbiBcXHQgKi9cXG4gXFx0cmV0dXJuICh2bXhfY2FuX3VzZV9pcGl2KHZjcHUpIFxcdTAwMjZcXHUwMDI2ICFpc190ZF92Y3B1KHZjcHUpKSB8fFxcbi1cXHRcXHR2bXhfY2FuX3VzZV92dGRfcGkodmNwdS1cXHUwMDNla3ZtKTtcXG4rXFx0XFx0dnRfY2FuX3VzZV92dGRfcGkodmNwdS1cXHUwMDNla3ZtKTtcXG4gfVxcbiBcXG4tdm9pZCB2bXhfdmNwdV9waV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbit2b2lkIHZ0X3ZjcHVfcGlfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbiBcXHRzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYyA9IHZjcHVfdG9fcGlfZGVzYyh2Y3B1KTtcXG4gXFxuLVxcdGlmICghdm14X25lZWRzX3BpX3dha2V1cCh2Y3B1KSlcXG4rXFx0aWYgKCF2dF9uZWVkc19waV93YWtldXAodmNwdSkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdC8qXFxuQEAgLTI5MiwxNyArMjk0LDE3IEBAIGJvb2wgcGlfaGFzX3BlbmRpbmdfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gLypcXG4gICogS2ljayBhbGwgdkNQVXMgd2hlbiB0aGUgZmlyc3QgcG9zc2libGUgYnlwYXNzIElSUSBpcyBhdHRhY2hlZCB0byBhIFZNLCBhc1xcbiAgKiBibG9ja2luZyB2Q1BVcyBtYXkgc2NoZWR1bGVkIG91dCB3aXRob3V0IHJlY29uZmlndXJpbmcgUElELk5WIHRvIHRoZSB3YWtldXBcXG4tICogdmVjdG9yLCBpLmUuIGlmIHRoZSBieXBhc3MgSVJRIGNhbWUgYWxvbmcgYWZ0ZXIgdm14X3ZjcHVfcGlfcHV0KCkuXFxuKyAqIHZlY3RvciwgaS5lLiBpZiB0aGUgYnlwYXNzIElSUSBjYW1lIGFsb25nIGFmdGVyIHZ0X3ZjcHVfcGlfcHV0KCkuXFxuICAqL1xcbi12b2lkIHZteF9waV9zdGFydF9ieXBhc3Moc3RydWN0IGt2bSAqa3ZtKVxcbit2b2lkIHZ0X3BpX3N0YXJ0X2J5cGFzcyhzdHJ1Y3Qga3ZtICprdm0pXFxuIHtcXG4tXFx0aWYgKFdBUk5fT05fT05DRSghdm14X2Nhbl91c2VfdnRkX3BpKGt2bSkpKVxcbitcXHRpZiAoV0FSTl9PTl9PTkNFKCF2dF9jYW5fdXNlX3Z0ZF9waShrdm0pKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0a3ZtX21ha2VfYWxsX2NwdXNfcmVxdWVzdChrdm0sIEtWTV9SRVFfVU5CTE9DSyk7XFxuIH1cXG4gXFxuLWludCB2bXhfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sXFxuK2ludCB2dF9waV91cGRhdGVfaXJ0ZShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQsIHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBob3N0X2lycSwgdWludDMyX3QgZ3Vlc3RfaXJxLFxcbiBcXHRcXHQgICAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdmVjdG9yKVxcbiB7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuaCBiL2FyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuaFxcbmluZGV4IGE0YWYzOTk0OGNmMDQuLmM1ODYwZWE4MjhhZTkgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5oXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5oXFxuQEAgLTgsMTYgKzgsMTYgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vcG9zdGVkX2ludHIuaFxcdTAwM2VcXG4gXFxuLXZvaWQgdm14X3ZjcHVfcGlfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpO1xcbi12b2lkIHZteF92Y3B1X3BpX3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbit2b2lkIHZ0X3ZjcHVfcGlfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpO1xcbit2b2lkIHZ0X3ZjcHVfcGlfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIHZvaWQgcGlfd2FrZXVwX2hhbmRsZXIodm9pZCk7XFxuIHZvaWQgX19pbml0IHBpX2luaXRfY3B1KGludCBjcHUpO1xcbiB2b2lkIHBpX2FwaWN2X3ByZV9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIGJvb2wgcGlfaGFzX3BlbmRpbmdfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuLWludCB2bXhfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sXFxuK2ludCB2dF9waV91cGRhdGVfaXJ0ZShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQsIHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBob3N0X2lycSwgdWludDMyX3QgZ3Vlc3RfaXJxLFxcbiBcXHRcXHQgICAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdmVjdG9yKTtcXG4tdm9pZCB2bXhfcGlfc3RhcnRfYnlwYXNzKHN0cnVjdCBrdm0gKmt2bSk7XFxuK3ZvaWQgdnRfcGlfc3RhcnRfYnlwYXNzKHN0cnVjdCBrdm0gKmt2bSk7XFxuIFxcbiBzdGF0aWMgaW5saW5lIGludCBwaV9maW5kX2hpZ2hlc3RfdmVjdG9yKHN0cnVjdCBwaV9kZXNjICpwaV9kZXNjKVxcbiB7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXFxuaW5kZXggYjI3MmMyMDU4NmE3NC4uZWZiYjFhYzZmNTFlYSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xcbkBAIC03MTYsNyArNzE2LDcgQEAgdm9pZCB0ZHhfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcXG4ge1xcbiBcXHRzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTtcXG4gXFxuLVxcdHZteF92Y3B1X3BpX2xvYWQodmNwdSwgY3B1KTtcXG4rXFx0dnRfdmNwdV9waV9sb2FkKHZjcHUsIGNwdSk7XFxuIFxcdGlmICh2Y3B1LVxcdTAwM2VjcHUgPT0gY3B1IHx8ICFpc19oa2lkX2Fzc2lnbmVkKHRvX2t2bV90ZHgodmNwdS1cXHUwMDNla3ZtKSkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuQEAgLTc0MSw3ICs3NDEsNyBAQCBib29sIHRkeF9pbnRlcnJ1cHRfYWxsb3dlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdCAqIGludGVycnVwdCBpcyBhbHdheXMgYWxsb3dlZCB1bmxlc3MgVERYIGd1ZXN0IGNhbGxzIFREVk1DQUxMIHdpdGggSExULFxcbiBcXHQgKiB3aGljaCBwYXNzZXMgdGhlIGludGVycnVwdCBibG9ja2VkIGZsYWcuXFxuIFxcdCAqL1xcbi1cXHRyZXR1cm4gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYyAhPSBFWElUX1JFQVNPTl9ITFQgfHxcXG4rXFx0cmV0dXJuIHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYyAhPSBFWElUX1JFQVNPTl9ITFQgfHxcXG4gXFx0ICAgICAgICF0b190ZHgodmNwdSktXFx1MDAzZXZwX2VudGVyX2FyZ3MucjEyO1xcbiB9XFxuIFxcbkBAIC03NTksNyArNzU5LDcgQEAgc3RhdGljIGJvb2wgdGR4X3Byb3RlY3RlZF9hcGljX2hhc19pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHQgKiBvdGhlcndpc2UgdGhlIGludGVycnVwdCB3b3VsZCBoYXZlIGJlZW4gc2VydmljZWQgYXQgdGhlIGluc3RydWN0aW9uXFxuIFxcdCAqIGJvdW5kYXJ5LlxcbiBcXHQgKi9cXG4tXFx0aWYgKHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMgIT0gRVhJVF9SRUFTT05fSExUIHx8XFxuK1xcdGlmICh2dF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMgIT0gRVhJVF9SRUFTT05fSExUIHx8XFxuIFxcdCAgICB0b190ZHgodmNwdSktXFx1MDAzZXZwX2VudGVyX2FyZ3MucjEyKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbkBAIC04MjYsNyArODI2LDcgQEAgc3RhdGljIHZvaWQgdGR4X3ByZXBhcmVfc3dpdGNoX3RvX2hvc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXG4gdm9pZCB0ZHhfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuLVxcdHZteF92Y3B1X3BpX3B1dCh2Y3B1KTtcXG4rXFx0dnRfdmNwdV9waV9wdXQodmNwdSk7XFxuIFxcdHRkeF9wcmVwYXJlX3N3aXRjaF90b19ob3N0KHZjcHUpO1xcbiB9XFxuIFxcbkBAIC05NzQsMTUgKzk3NCwxNSBAQCBzdGF0aWMgbm9pbnN0ciB2b2lkIHRkeF92Y3B1X2VudGVyX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHR0ZHgtXFx1MDAzZWV4aXRfZ3BhID0gdGR4LVxcdTAwM2V2cF9lbnRlcl9hcmdzLnI4O1xcbiBcXHR2dC1cXHUwMDNlZXhpdF9pbnRyX2luZm8gPSB0ZHgtXFx1MDAzZXZwX2VudGVyX2FyZ3Mucjk7XFxuIFxcbi1cXHR2bXhfaGFuZGxlX25taSh2Y3B1KTtcXG4rXFx0dnRfaGFuZGxlX25taSh2Y3B1KTtcXG4gXFxuIFxcdGd1ZXN0X3N0YXRlX2V4aXRfaXJxb2ZmKCk7XFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIHRkeF9mYWlsZWRfdm1lbnRyeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4tXFx0cmV0dXJuIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgICAgIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZnVsbCAhPSAtMXU7XFxuK1xcdHJldHVybiB2dF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mdWxsICE9IC0xdTtcXG4gfVxcbiBcXG4gc3RhdGljIGZhc3RwYXRoX3QgdGR4X2V4aXRfaGFuZGxlcnNfZmFzdHBhdGgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbkBAIC0xMTMxLDcgKzExMzEsNyBAQCB2b2lkIHRkeF9pbmplY3Rfbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFxuIHN0YXRpYyBpbnQgdGR4X2hhbmRsZV9leGNlcHRpb25fbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbi1cXHR1MzIgaW50cl9pbmZvID0gdm14X2dldF9pbnRyX2luZm8odmNwdSk7XFxuK1xcdHUzMiBpbnRyX2luZm8gPSB2dF9nZXRfaW50cl9pbmZvKHZjcHUpO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogTWFjaGluZSBjaGVja3MgYXJlIGhhbmRsZWQgYnkgaGFuZGxlX2V4Y2VwdGlvbl9pcnFvZmYoKSwgb3IgYnlcXG5AQCAtMTg5NSw3ICsxODk1LDcgQEAgdm9pZCB0ZHhfZGVsaXZlcl9pbnRlcnJ1cHQoc3RydWN0IGt2bV9sYXBpYyAqYXBpYywgaW50IGRlbGl2ZXJ5X21vZGUsXFxuIFxcdHN0cnVjdCB2Y3B1X3RkeCAqdGR4ID0gdG9fdGR4KHZjcHUpO1xcbiBcXG4gXFx0LyogVERYIHN1cHBvcnRzIG9ubHkgcG9zdGVkIGludGVycnVwdC4gIE5vIGxhcGljIGVtdWxhdGlvbi4gKi9cXG4tXFx0X192bXhfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0KHZjcHUsIFxcdTAwMjZ0ZHgtXFx1MDAzZXZ0LnBpX2Rlc2MsIHZlY3Rvcik7XFxuK1xcdF9fdnRfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0KHZjcHUsIFxcdTAwMjZ0ZHgtXFx1MDAzZXZ0LnBpX2Rlc2MsIHZlY3Rvcik7XFxuIFxcbiBcXHR0cmFjZV9rdm1fYXBpY3ZfYWNjZXB0X2lycSh2Y3B1LVxcdTAwM2V2Y3B1X2lkLCBkZWxpdmVyeV9tb2RlLCB0cmlnX21vZGUsIHZlY3Rvcik7XFxuIH1cXG5AQCAtMTkwMyw3ICsxOTAzLDcgQEAgdm9pZCB0ZHhfZGVsaXZlcl9pbnRlcnJ1cHQoc3RydWN0IGt2bV9sYXBpYyAqYXBpYywgaW50IGRlbGl2ZXJ5X21vZGUsXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB0ZHhfaXNfc2VwdF92aW9sYXRpb25fdW5leHBlY3RlZF9wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbiBcXHR1NjQgZWVxX3R5cGUgPSB0b190ZHgodmNwdSktXFx1MDAzZWV4dF9leGl0X3F1YWxpZmljYXRpb24gXFx1MDAyNiBURFhfRVhUX0VYSVRfUVVBTF9UWVBFX01BU0s7XFxuLVxcdHU2NCBlcSA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xcbitcXHR1NjQgZXEgPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xcbiBcXG4gXFx0aWYgKGVlcV90eXBlICE9IFREWF9FWFRfRVhJVF9RVUFMX1RZUEVfUEVORElOR19FUFRfVklPTEFUSU9OKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuQEAgLTE5MzksNyArMTkzOSw3IEBAIHN0YXRpYyBpbnQgdGR4X2hhbmRsZV9lcHRfdmlvbGF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0LyogT25seSBwcml2YXRlIEdQQSB0cmlnZ2VycyB6ZXJvLXN0ZXAgbWl0aWdhdGlvbiAqL1xcbiBcXHRcXHRsb2NhbF9yZXRyeSA9IHRydWU7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdGV4aXRfcXVhbCA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xcbitcXHRcXHRleGl0X3F1YWwgPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBFUFQgdmlvbGF0aW9uIGR1ZSB0byBpbnN0cnVjdGlvbiBmZXRjaCBzaG91bGQgbmV2ZXIgYmVcXG4gXFx0XFx0ICogdHJpZ2dlcmVkIGZyb20gc2hhcmVkIG1lbW9yeSBpbiBURFggZ3Vlc3QuICBJZiBzdWNoIEVQVFxcbkBAIC0xOTg3LDcgKzE5ODcsNyBAQCBzdGF0aWMgaW50IHRkeF9oYW5kbGVfZXB0X3Zpb2xhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdHdoaWxlICgxKSB7XFxuIFxcdFxcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7XFxuIFxcbi1cXHRcXHRyZXQgPSBfX3ZteF9oYW5kbGVfZXB0X3Zpb2xhdGlvbih2Y3B1LCBncGEsIGV4aXRfcXVhbCk7XFxuK1xcdFxcdHJldCA9IF9fdnRfaGFuZGxlX2VwdF92aW9sYXRpb24odmNwdSwgZ3BhLCBleGl0X3F1YWwpO1xcbiBcXG4gXFx0XFx0aWYgKHJldCAhPSBSRVRfUEZfUkVUUlkgfHwgIWxvY2FsX3JldHJ5KVxcbiBcXHRcXHRcXHRicmVhaztcXG5AQCAtMjAyMSw3ICsyMDIxLDcgQEAgaW50IHRkeF9jb21wbGV0ZV9lbXVsYXRlZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZXJyKVxcbiBcXHRcXHRyZXR1cm4gMTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMgPT0gRVhJVF9SRUFTT05fTVNSX1JFQUQpXFxuK1xcdGlmICh2dF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMgPT0gRVhJVF9SRUFTT05fTVNSX1JFQUQpXFxuIFxcdFxcdHRkdm1jYWxsX3NldF9yZXR1cm5fdmFsKHZjcHUsIGt2bV9yZWFkX2VkeF9lYXgodmNwdSkpO1xcbiBcXG4gXFx0cmV0dXJuIDE7XFxuQEAgLTIwMzIsNyArMjAzMiw3IEBAIGludCB0ZHhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGZhc3RwYXRoKVxcbiB7XFxuIFxcdHN0cnVjdCB2Y3B1X3RkeCAqdGR4ID0gdG9fdGR4KHZjcHUpO1xcbiBcXHR1NjQgdnBfZW50ZXJfcmV0ID0gdGR4LVxcdTAwM2V2cF9lbnRlcl9yZXQ7XFxuLVxcdHVuaW9uIHZteF9leGl0X3JlYXNvbiBleGl0X3JlYXNvbiA9IHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSk7XFxuK1xcdHVuaW9uIHZteF9leGl0X3JlYXNvbiBleGl0X3JlYXNvbiA9IHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KTtcXG4gXFxuIFxcdGlmIChmYXN0cGF0aCAhPSBFWElUX0ZBU1RQQVRIX05PTkUpXFxuIFxcdFxcdHJldHVybiAxO1xcbkBAIC0yMTQyLDkgKzIxNDIsOSBAQCB2b2lkIHRkeF9nZXRfZXhpdF9pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyICpyZWFzb24sXFxuIFxcbiBcXHQqcmVhc29uID0gdGR4LVxcdTAwM2V2dC5leGl0X3JlYXNvbi5mdWxsO1xcbiBcXHRpZiAoKnJlYXNvbiAhPSAtMXUpIHtcXG4tXFx0XFx0KmluZm8xID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XFxuK1xcdFxcdCppbmZvMSA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XFxuIFxcdFxcdCppbmZvMiA9IHRkeC1cXHUwMDNlZXh0X2V4aXRfcXVhbGlmaWNhdGlvbjtcXG4tXFx0XFx0KmludHJfaW5mbyA9IHZteF9nZXRfaW50cl9pbmZvKHZjcHUpO1xcbitcXHRcXHQqaW50cl9pbmZvID0gdnRfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0KmluZm8xID0gMDtcXG4gXFx0XFx0KmluZm8yID0gMDtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguYyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcXG5pbmRleCA1MDQ2MzBmMGViNDBmLi43ZTM1YzJkMDNjNjllIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXFxuQEAgLTE1NzcsMTIgKzE1NzcsMTIgQEAgdm9pZCB2bXhfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcXG4gXFxuIFxcdHZteF92Y3B1X2xvYWRfdm1jcyh2Y3B1LCBjcHUpO1xcbiBcXG4tXFx0dm14X3ZjcHVfcGlfbG9hZCh2Y3B1LCBjcHUpO1xcbitcXHR2dF92Y3B1X3BpX2xvYWQodmNwdSwgY3B1KTtcXG4gfVxcbiBcXG4gdm9pZCB2bXhfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuLVxcdHZteF92Y3B1X3BpX3B1dCh2Y3B1KTtcXG4rXFx0dnRfdmNwdV9waV9wdXQodmNwdSk7XFxuIFxcbiBcXHR2bXhfcHJlcGFyZV9zd2l0Y2hfdG9faG9zdCh0b192bXgodmNwdSkpO1xcbiB9XFxuQEAgLTE3OTEsNyArMTc5MSw3IEBAIGludCB2bXhfY2hlY2tfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlbXVsX3R5cGUsXFxuIFxcdCAqIHNvIHRoYXQgZ3Vlc3QgdXNlcnNwYWNlIGNhbid0IERvUyB0aGUgZ3Vlc3Qgc2ltcGx5IGJ5IHRyaWdnZXJpbmdcXG4gXFx0ICogZW11bGF0aW9uIChlbmNsYXZlcyBhcmUgQ1BMMyBvbmx5KS5cXG4gXFx0ICovXFxuLVxcdGlmICh2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmVuY2xhdmVfbW9kZSkge1xcbitcXHRpZiAodnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmVuY2xhdmVfbW9kZSkge1xcbiBcXHRcXHRrdm1fcXVldWVfZXhjZXB0aW9uKHZjcHUsIFVEX1ZFQ1RPUik7XFxuIFxcdFxcdHJldHVybiBYODZFTVVMX1BST1BBR0FURV9GQVVMVDtcXG4gXFx0fVxcbkBAIC0xODA2LDcgKzE4MDYsNyBAQCBpbnQgdm14X2NoZWNrX2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZW11bF90eXBlLFxcbiBcXG4gc3RhdGljIGludCBza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbi1cXHR1bmlvbiB2bXhfZXhpdF9yZWFzb24gZXhpdF9yZWFzb24gPSB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpO1xcbitcXHR1bmlvbiB2bXhfZXhpdF9yZWFzb24gZXhpdF9yZWFzb24gPSB2dF9nZXRfZXhpdF9yZWFzb24odmNwdSk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgcmlwLCBvcmlnX3JpcDtcXG4gXFx0dTMyIGluc3RyX2xlbjtcXG4gXFxuQEAgLTQ0MjQsNyArNDQyNCw3IEBAIHN0YXRpYyBpbnQgdm14X2RlbGl2ZXJfcG9zdGVkX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCB2ZWN0b3IpXFxuIFxcdGlmICghdmNwdS1cXHUwMDNlYXJjaC5hcGljLVxcdTAwM2VhcGljdl9hY3RpdmUpXFxuIFxcdFxcdHJldHVybiAtMTtcXG4gXFxuLVxcdF9fdm14X2RlbGl2ZXJfcG9zdGVkX2ludGVycnVwdCh2Y3B1LCBcXHUwMDI2dnQtXFx1MDAzZXBpX2Rlc2MsIHZlY3Rvcik7XFxuK1xcdF9fdnRfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0KHZjcHUsIFxcdTAwMjZ2dC1cXHUwMDNlcGlfZGVzYywgdmVjdG9yKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTUzNzksMTUgKzUzNzksOSBAQCBib29sIHZteF9ndWVzdF9pbmplY3RfYWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHQgICAgICAgKGt2bV9nZXRfcmZsYWdzKHZjcHUpIFxcdTAwMjYgWDg2X0VGTEFHU19BQyk7XFxuIH1cXG4gXFxuLXN0YXRpYyBib29sIGlzX3hmZF9ubV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLXtcXG4tXFx0cmV0dXJuIHZjcHUtXFx1MDAzZWFyY2guZ3Vlc3RfZnB1LmZwc3RhdGUtXFx1MDAzZXhmZCBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgICAgIWt2bV9pc19jcjBfYml0X3NldCh2Y3B1LCBYODZfQ1IwX1RTKTtcXG4tfVxcbi1cXG4gc3RhdGljIGludCB2bXhfaGFuZGxlX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgZXJyb3JfY29kZSlcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIGNyMiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xcbitcXHR1bnNpZ25lZCBsb25nIGNyMiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XFxuIFxcbiBcXHRpZiAodmNwdS1cXHUwMDNlYXJjaC5hcGYuaG9zdF9hcGZfZmxhZ3MpXFxuIFxcdFxcdGdvdG8gaGFuZGxlX3BmO1xcbkBAIC01NDM1LDcgKzU0MjksNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9leGNlcHRpb25fbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0dTMyIHZlY3RfaW5mbztcXG4gXFxuIFxcdHZlY3RfaW5mbyA9IHZteC1cXHUwMDNlaWR0X3ZlY3RvcmluZ19pbmZvO1xcbi1cXHRpbnRyX2luZm8gPSB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcXG4rXFx0aW50cl9pbmZvID0gdnRfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIE1hY2hpbmUgY2hlY2tzIGFyZSBoYW5kbGVkIGJ5IGhhbmRsZV9leGNlcHRpb25faXJxb2ZmKCksIG9yIGJ5XFxuQEAgLTU1MTYsNyArNTUxMCw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2V4Y2VwdGlvbl9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXG4gXFx0c3dpdGNoIChleF9ubykge1xcbiBcXHRjYXNlIERCX1ZFQ1RPUjpcXG4tXFx0XFx0ZHI2ID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XFxuK1xcdFxcdGRyNiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XFxuIFxcdFxcdGlmICghKHZjcHUtXFx1MDAzZWd1ZXN0X2RlYnVnIFxcdTAwMjZcXG4gXFx0XFx0ICAgICAgKEtWTV9HVUVTVERCR19TSU5HTEVTVEVQIHwgS1ZNX0dVRVNUREJHX1VTRV9IV19CUCkpKSB7XFxuIFxcdFxcdFxcdC8qXFxuQEAgLTU1OTIsNyArNTU4Niw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2lvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0aW50IHNpemUsIGluLCBzdHJpbmc7XFxuIFxcdHVuc2lnbmVkIHBvcnQ7XFxuIFxcbi1cXHRleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcXG4rXFx0ZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcXG4gXFx0c3RyaW5nID0gKGV4aXRfcXVhbGlmaWNhdGlvbiBcXHUwMDI2IDE2KSAhPSAwO1xcbiBcXG4gXFx0Kyt2Y3B1LVxcdTAwM2VzdGF0LmlvX2V4aXRzO1xcbkBAIC01NjgxLDcgKzU2NzUsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdGludCBlcnI7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcXG4rXFx0ZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcXG4gXFx0Y3IgPSBleGl0X3F1YWxpZmljYXRpb24gXFx1MDAyNiAxNTtcXG4gXFx0cmVnID0gKGV4aXRfcXVhbGlmaWNhdGlvbiBcXHUwMDNlXFx1MDAzZSA4KSBcXHUwMDI2IDE1O1xcbiBcXHRzd2l0Y2ggKChleGl0X3F1YWxpZmljYXRpb24gXFx1MDAzZVxcdTAwM2UgNCkgXFx1MDAyNiAzKSB7XFxuQEAgLTU3NTksNyArNTc1Myw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2RyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0aW50IGRyLCBkcjcsIHJlZztcXG4gXFx0aW50IGVyciA9IDE7XFxuIFxcbi1cXHRleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcXG4rXFx0ZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcXG4gXFx0ZHIgPSBleGl0X3F1YWxpZmljYXRpb24gXFx1MDAyNiBERUJVR19SRUdfQUNDRVNTX05VTTtcXG4gXFxuIFxcdC8qIEZpcnN0LCBpZiBEUiBkb2VzIG5vdCBleGlzdCwgdHJpZ2dlciBVRCAqL1xcbkBAIC01ODU1LDcgKzU4NDksNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9pbnRlcnJ1cHRfd2luZG93KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFxuIHN0YXRpYyBpbnQgaGFuZGxlX2ludmxwZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcXG4rXFx0dW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xcbiBcXG4gXFx0a3ZtX21tdV9pbnZscGcodmNwdSwgZXhpdF9xdWFsaWZpY2F0aW9uKTtcXG4gXFx0cmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xcbkBAIC01ODY0LDcgKzU4NTgsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9pbnZscGcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBzdGF0aWMgaW50IGhhbmRsZV9hcGljX2FjY2VzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0aWYgKGxpa2VseShmYXN0ZW9pKSkge1xcbi1cXHRcXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XFxuIFxcdFxcdGludCBhY2Nlc3NfdHlwZSwgb2Zmc2V0O1xcbiBcXG4gXFx0XFx0YWNjZXNzX3R5cGUgPSBleGl0X3F1YWxpZmljYXRpb24gXFx1MDAyNiBBUElDX0FDQ0VTU19UWVBFO1xcbkBAIC01ODg1LDcgKzU4NzksNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9hcGljX2FjY2VzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcbiBzdGF0aWMgaW50IGhhbmRsZV9hcGljX2VvaV9pbmR1Y2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xcbitcXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XFxuIFxcdGludCB2ZWN0b3IgPSBleGl0X3F1YWxpZmljYXRpb24gXFx1MDAyNiAweGZmO1xcbiBcXG4gXFx0LyogRU9JLWluZHVjZWQgVk0gZXhpdCBpcyB0cmFwLWxpa2UgYW5kIHRodXMgbm8gbmVlZCB0byBhZGp1c3QgSVAgKi9cXG5AQCAtNTg5NSw3ICs1ODg5LDcgQEAgc3RhdGljIGludCBoYW5kbGVfYXBpY19lb2lfaW5kdWNlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcbiBzdGF0aWMgaW50IGhhbmRsZV9hcGljX3dyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xcbitcXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBBUElDLXdyaXRlIFZNLUV4aXQgaXMgdHJhcC1saWtlLCBLVk0gZG9lc24ndCBuZWVkIHRvIGFkdmFuY2UgUklQIGFuZFxcbkBAIC01OTIzLDcgKzU5MTcsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV90YXNrX3N3aXRjaChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdGlkdF9pbmRleCA9ICh2bXgtXFx1MDAzZWlkdF92ZWN0b3JpbmdfaW5mbyBcXHUwMDI2IFZFQ1RPUklOR19JTkZPX1ZFQ1RPUl9NQVNLKTtcXG4gXFx0dHlwZSA9ICh2bXgtXFx1MDAzZWlkdF92ZWN0b3JpbmdfaW5mbyBcXHUwMDI2IFZFQ1RPUklOR19JTkZPX1RZUEVfTUFTSyk7XFxuIFxcbi1cXHRleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcXG4rXFx0ZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcXG4gXFxuIFxcdHJlYXNvbiA9ICh1MzIpZXhpdF9xdWFsaWZpY2F0aW9uIFxcdTAwM2VcXHUwMDNlIDMwO1xcbiBcXHRpZiAocmVhc29uID09IFRBU0tfU1dJVENIX0dBVEUgXFx1MDAyNlxcdTAwMjYgaWR0X3YpIHtcXG5AQCAtNTk2OSw3ICs1OTYzLDcgQEAgc3RhdGljIGludCBoYW5kbGVfdGFza19zd2l0Y2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXG4gc3RhdGljIGludCBoYW5kbGVfZXB0X3Zpb2xhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcXG4rXFx0dW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xcbiBcXHRncGFfdCBncGE7XFxuIFxcbiBcXHQvKlxcbkBAIC01OTk3LDcgKzU5OTEsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9lcHRfdmlvbGF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0aWYgKHVubGlrZWx5KGFsbG93X3NtYWxsZXJfbWF4cGh5YWRkciBcXHUwMDI2XFx1MDAyNiAha3ZtX3ZjcHVfaXNfbGVnYWxfZ3BhKHZjcHUsIGdwYSkpKVxcbiBcXHRcXHRyZXR1cm4ga3ZtX2VtdWxhdGVfaW5zdHJ1Y3Rpb24odmNwdSwgMCk7XFxuIFxcbi1cXHRyZXR1cm4gX192bXhfaGFuZGxlX2VwdF92aW9sYXRpb24odmNwdSwgZ3BhLCBleGl0X3F1YWxpZmljYXRpb24pO1xcbitcXHRyZXR1cm4gX192dF9oYW5kbGVfZXB0X3Zpb2xhdGlvbih2Y3B1LCBncGEsIGV4aXRfcXVhbGlmaWNhdGlvbik7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgaGFuZGxlX2VwdF9taXNjb25maWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbkBAIC02MTYwLDcgKzYxNTQsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9pbnZwY2lkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0LyogQWNjb3JkaW5nIHRvIHRoZSBJbnRlbCBpbnN0cnVjdGlvbiByZWZlcmVuY2UsIHRoZSBtZW1vcnkgb3BlcmFuZFxcbiBcXHQgKiBpcyByZWFkIGV2ZW4gaWYgaXQgaXNuJ3QgbmVlZGVkIChlLmcuLCBmb3IgdHlwZT09YWxsKVxcbiBcXHQgKi9cXG4tXFx0aWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgdm14X2dldF9leGl0X3F1YWwodmNwdSksXFxuK1xcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZ0X2dldF9leGl0X3F1YWwodmNwdSksXFxuIFxcdFxcdFxcdFxcdHZteF9pbnN0cnVjdGlvbl9pbmZvLCBmYWxzZSxcXG4gXFx0XFx0XFx0XFx0c2l6ZW9mKG9wZXJhbmQpLCBcXHUwMDI2Z3ZhKSlcXG4gXFx0XFx0cmV0dXJuIDE7XFxuQEAgLTYxNzQsNyArNjE2OCw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3BtbF9mdWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFxuIFxcdHRyYWNlX2t2bV9wbWxfZnVsbCh2Y3B1LVxcdTAwM2V2Y3B1X2lkKTtcXG4gXFxuLVxcdGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xcbitcXHRleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogUE1MIGJ1ZmZlciBGVUxMIGhhcHBlbmVkIHdoaWxlIGV4ZWN1dGluZyBpcmV0IGZyb20gTk1JLFxcbkBAIC02Mjc4LDcgKzYyNzIsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9idXNfbG9ja192bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXG4gc3RhdGljIGludCBoYW5kbGVfbm90aWZ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xcbitcXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XFxuIFxcdGJvb2wgY29udGV4dF9pbnZhbGlkID0gZXhpdF9xdWFsIFxcdTAwMjYgTk9USUZZX1ZNX0NPTlRFWFRfSU5WQUxJRDtcXG4gXFxuIFxcdCsrdmNwdS1cXHUwMDNlc3RhdC5ub3RpZnlfd2luZG93X2V4aXRzO1xcbkBAIC02MzA5LDEzICs2MzAzLDEzIEBAIHN0YXRpYyBpbnQgdm14X2dldF9tc3JfaW1tX3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcbiBzdGF0aWMgaW50IGhhbmRsZV9yZG1zcl9pbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuLVxcdHJldHVybiBrdm1fZW11bGF0ZV9yZG1zcl9pbW0odmNwdSwgdm14X2dldF9leGl0X3F1YWwodmNwdSksXFxuK1xcdHJldHVybiBrdm1fZW11bGF0ZV9yZG1zcl9pbW0odmNwdSwgdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KSxcXG4gXFx0XFx0XFx0XFx0ICAgICB2bXhfZ2V0X21zcl9pbW1fcmVnKHZjcHUpKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBoYW5kbGVfd3Jtc3JfaW1tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbi1cXHRyZXR1cm4ga3ZtX2VtdWxhdGVfd3Jtc3JfaW1tKHZjcHUsIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxcbitcXHRyZXR1cm4ga3ZtX2VtdWxhdGVfd3Jtc3JfaW1tKHZjcHUsIHZ0X2dldF9leGl0X3F1YWwodmNwdSksXFxuIFxcdFxcdFxcdFxcdCAgICAgdm14X2dldF9tc3JfaW1tX3JlZyh2Y3B1KSk7XFxuIH1cXG4gXFxuQEAgLTYzOTIsMTAgKzYzODYsMTAgQEAgdm9pZCB2bXhfZ2V0X2V4aXRfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiAqcmVhc29uLFxcbiBcXHRzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTtcXG4gXFxuIFxcdCpyZWFzb24gPSB2bXgtXFx1MDAzZXZ0LmV4aXRfcmVhc29uLmZ1bGw7XFxuLVxcdCppbmZvMSA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xcbitcXHQqaW5mbzEgPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xcbiBcXHRpZiAoISh2bXgtXFx1MDAzZXZ0LmV4aXRfcmVhc29uLmZhaWxlZF92bWVudHJ5KSkge1xcbiBcXHRcXHQqaW5mbzIgPSB2bXgtXFx1MDAzZWlkdF92ZWN0b3JpbmdfaW5mbztcXG4tXFx0XFx0KmludHJfaW5mbyA9IHZteF9nZXRfaW50cl9pbmZvKHZjcHUpO1xcbitcXHRcXHQqaW50cl9pbmZvID0gdnRfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcXG4gXFx0XFx0aWYgKGlzX2V4Y2VwdGlvbl93aXRoX2Vycm9yX2NvZGUoKmludHJfaW5mbykpXFxuIFxcdFxcdFxcdCplcnJvcl9jb2RlID0gdm1jc19yZWFkMzIoVk1fRVhJVF9JTlRSX0VSUk9SX0NPREUpO1xcbiBcXHRcXHRlbHNlXFxuQEAgLTY3MDYsNyArNjcwMCw3IEBAIHZvaWQgZHVtcF92bWNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gc3RhdGljIGludCBfX3ZteF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aClcXG4ge1xcbiBcXHRzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTtcXG4tXFx0dW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uID0gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KTtcXG4rXFx0dW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uID0gdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpO1xcbiBcXHR1MzIgdmVjdG9yaW5nX2luZm8gPSB2bXgtXFx1MDAzZWlkdF92ZWN0b3JpbmdfaW5mbztcXG4gXFx0dTE2IGV4aXRfaGFuZGxlcl9pbmRleDtcXG4gXFxuQEAgLTY4NzAsNyArNjg2NCw3IEBAIGludCB2bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpXFxuIFxcdCAqIEV4aXQgdG8gdXNlciBzcGFjZSB3aGVuIGJ1cyBsb2NrIGRldGVjdGVkIHRvIGluZm9ybSB0aGF0IHRoZXJlIGlzXFxuIFxcdCAqIGEgYnVzIGxvY2sgaW4gZ3Vlc3QuXFxuIFxcdCAqL1xcbi1cXHRpZiAodm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5idXNfbG9ja19kZXRlY3RlZCkge1xcbitcXHRpZiAodnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJ1c19sb2NrX2RldGVjdGVkKSB7XFxuIFxcdFxcdGlmIChyZXQgXFx1MDAzZSAwKVxcbiBcXHRcXHRcXHR2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZWV4aXRfcmVhc29uID0gS1ZNX0VYSVRfWDg2X0JVU19MT0NLO1xcbiBcXG5AQCAtNzE0Myw3NCArNzEzNyw2IEBAIHZvaWQgdm14X2xvYWRfZW9pX2V4aXRtYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKmVvaV9leGl0X2JpdG1hcClcXG4gXFx0dm1jc193cml0ZTY0KEVPSV9FWElUX0JJVE1BUDMsIGVvaV9leGl0X2JpdG1hcFszXSk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGhhbmRsZV9ubV9mYXVsdF9pcnFvZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi17XFxuLVxcdC8qXFxuLVxcdCAqIFNhdmUgeGZkX2VyciB0byBndWVzdF9mcHUgYmVmb3JlIGludGVycnVwdCBpcyBlbmFibGVkLCBzbyB0aGVcXG4tXFx0ICogTVNSIHZhbHVlIGlzIG5vdCBjbG9iYmVyZWQgYnkgdGhlIGhvc3QgYWN0aXZpdHkgYmVmb3JlIHRoZSBndWVzdFxcbi1cXHQgKiBoYXMgY2hhbmNlIHRvIGNvbnN1bWUgaXQuXFxuLVxcdCAqXFxuLVxcdCAqIFVwZGF0ZSB0aGUgZ3Vlc3QncyBYRkRfRVJSIGlmIGFuZCBvbmx5IGlmIFhGRCBpcyBlbmFibGVkLCBhcyB0aGUgI05NXFxuLVxcdCAqIGludGVyY2VwdGlvbiBtYXkgaGF2ZSBiZWVuIGNhdXNlZCBieSBMMSBpbnRlcmNlcHRpb24uICBQZXIgdGhlIFNETSxcXG4tXFx0ICogWEZEX0VSUiBpcyBub3QgbW9kaWZpZWQgZm9yIG5vbi1YRkQgI05NLCBpLmUuIGlmIENSMC5UUz0xLlxcbi1cXHQgKlxcbi1cXHQgKiBOb3RlLCBYRkRfRVJSIGlzIHVwZGF0ZWQgX2JlZm9yZV8gdGhlICNOTSBpbnRlcmNlcHRpb24gY2hlY2ssIGkuZS5cXG4tXFx0ICogdW5saWtlIENSMiBhbmQgRFI2LCB0aGUgdmFsdWUgaXMgbm90IGEgcGF5bG9hZCB0aGF0IGlzIGF0dGFjaGVkIHRvXFxuLVxcdCAqIHRoZSAjTk0gZXhjZXB0aW9uLlxcbi1cXHQgKi9cXG4tXFx0aWYgKGlzX3hmZF9ubV9mYXVsdCh2Y3B1KSlcXG4tXFx0XFx0cmRtc3JxKE1TUl9JQTMyX1hGRF9FUlIsIHZjcHUtXFx1MDAzZWFyY2guZ3Vlc3RfZnB1LnhmZF9lcnIpO1xcbi19XFxuLVxcbi1zdGF0aWMgdm9pZCBoYW5kbGVfZXhjZXB0aW9uX2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBpbnRyX2luZm8pXFxuLXtcXG4tXFx0LyogaWYgZXhpdCBkdWUgdG8gUEYgY2hlY2sgZm9yIGFzeW5jIFBGICovXFxuLVxcdGlmIChpc19wYWdlX2ZhdWx0KGludHJfaW5mbykpXFxuLVxcdFxcdHZjcHUtXFx1MDAzZWFyY2guYXBmLmhvc3RfYXBmX2ZsYWdzID0ga3ZtX3JlYWRfYW5kX3Jlc2V0X2FwZl9mbGFncygpO1xcbi1cXHQvKiBpZiBleGl0IGR1ZSB0byBOTSwgaGFuZGxlIGJlZm9yZSBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkICovXFxuLVxcdGVsc2UgaWYgKGlzX25tX2ZhdWx0KGludHJfaW5mbykpXFxuLVxcdFxcdGhhbmRsZV9ubV9mYXVsdF9pcnFvZmYodmNwdSk7XFxuLVxcdC8qIEhhbmRsZSBtYWNoaW5lIGNoZWNrcyBiZWZvcmUgaW50ZXJydXB0cyBhcmUgZW5hYmxlZCAqL1xcbi1cXHRlbHNlIGlmIChpc19tYWNoaW5lX2NoZWNrKGludHJfaW5mbykpXFxuLVxcdFxcdGt2bV9tYWNoaW5lX2NoZWNrKCk7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIGhhbmRsZV9leHRlcm5hbF9pbnRlcnJ1cHRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICB1MzIgaW50cl9pbmZvKVxcbi17XFxuLVxcdHVuc2lnbmVkIGludCB2ZWN0b3IgPSBpbnRyX2luZm8gXFx1MDAyNiBJTlRSX0lORk9fVkVDVE9SX01BU0s7XFxuLVxcbi1cXHRpZiAoS1ZNX0JVRyghaXNfZXh0ZXJuYWxfaW50cihpbnRyX2luZm8pLCB2Y3B1LVxcdTAwM2Vrdm0sXFxuLVxcdCAgICBcXFwidW5leHBlY3RlZCBWTS1FeGl0IGludGVycnVwdCBpbmZvOiAweCV4XFxcIiwgaW50cl9pbmZvKSlcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4tXFx0a3ZtX2JlZm9yZV9pbnRlcnJ1cHQodmNwdSwgS1ZNX0hBTkRMSU5HX0lSUSk7XFxuLVxcdHg4Nl9lbnRyeV9mcm9tX2t2bShFVkVOVF9UWVBFX0VYVElOVCwgdmVjdG9yKTtcXG4tXFx0a3ZtX2FmdGVyX2ludGVycnVwdCh2Y3B1KTtcXG4tXFxuLVxcdHZjcHUtXFx1MDAzZWFyY2guYXRfaW5zdHJ1Y3Rpb25fYm91bmRhcnkgPSB0cnVlO1xcbi19XFxuLVxcbi12b2lkIHZteF9oYW5kbGVfZXhpdF9pcnFvZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi17XFxuLVxcdGlmICh0b192dCh2Y3B1KS1cXHUwMDNlZW11bGF0aW9uX3JlcXVpcmVkKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbi1cXHRzd2l0Y2ggKHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMpIHtcXG4tXFx0Y2FzZSBFWElUX1JFQVNPTl9FWFRFUk5BTF9JTlRFUlJVUFQ6XFxuLVxcdFxcdGhhbmRsZV9leHRlcm5hbF9pbnRlcnJ1cHRfaXJxb2ZmKHZjcHUsIHZteF9nZXRfaW50cl9pbmZvKHZjcHUpKTtcXG4tXFx0XFx0YnJlYWs7XFxuLVxcdGNhc2UgRVhJVF9SRUFTT05fRVhDRVBUSU9OX05NSTpcXG4tXFx0XFx0aGFuZGxlX2V4Y2VwdGlvbl9pcnFvZmYodmNwdSwgdm14X2dldF9pbnRyX2luZm8odmNwdSkpO1xcbi1cXHRcXHRicmVhaztcXG4tXFx0Y2FzZSBFWElUX1JFQVNPTl9NQ0VfRFVSSU5HX1ZNRU5UUlk6XFxuLVxcdFxcdGt2bV9tYWNoaW5lX2NoZWNrKCk7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHRicmVhaztcXG4tXFx0fVxcbi19XFxuLVxcbiAvKlxcbiAgKiBUaGUga3ZtIHBhcmFtZXRlciBjYW4gYmUgTlVMTCAobW9kdWxlIGluaXRpYWxpemF0aW9uLCBvciBpbnZvY2F0aW9uIGJlZm9yZVxcbiAgKiBWTSBjcmVhdGlvbikuIEJlIHN1cmUgdG8gY2hlY2sgdGhlIGt2bSBwYXJhbWV0ZXIgYmVmb3JlIHVzaW5nIGl0LlxcbkBAIC03MjUwLDcgKzcxNzYsNyBAQCBzdGF0aWMgdm9pZCB2bXhfcmVjb3Zlcl9ubWlfYmxvY2tpbmcoc3RydWN0IHZjcHVfdm14ICp2bXgpXFxuIFxcdFxcdGlmICh2bXgtXFx1MDAzZWxvYWRlZF92bWNzLVxcdTAwM2VubWlfa25vd25fdW5tYXNrZWQpXFxuIFxcdFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdFxcdGV4aXRfaW50cl9pbmZvID0gdm14X2dldF9pbnRyX2luZm8oXFx1MDAyNnZteC1cXHUwMDNldmNwdSk7XFxuK1xcdFxcdGV4aXRfaW50cl9pbmZvID0gdnRfZ2V0X2ludHJfaW5mbyhcXHUwMDI2dm14LVxcdTAwM2V2Y3B1KTtcXG4gXFx0XFx0dW5ibG9ja19ubWkgPSAoZXhpdF9pbnRyX2luZm8gXFx1MDAyNiBJTlRSX0lORk9fVU5CTE9DS19OTUkpICE9IDA7XFxuIFxcdFxcdHZlY3RvciA9IGV4aXRfaW50cl9pbmZvIFxcdTAwMjYgSU5UUl9JTkZPX1ZFQ1RPUl9NQVNLO1xcbiBcXHRcXHQvKlxcbkBAIC03NDE3LDE0ICs3MzQzLDE0IEBAIHN0YXRpYyBmYXN0cGF0aF90IHZteF9leGl0X2hhbmRsZXJzX2Zhc3RwYXRoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFx0ICogdGhlIGZhc3RwYXRoIGV2ZW4sIGFsbCBvdGhlciBleGl0cyBtdXN0IHVzZSB0aGUgc2xvdyBwYXRoLlxcbiBcXHQgKi9cXG4gXFx0aWYgKGlzX2d1ZXN0X21vZGUodmNwdSkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMgIT0gRVhJVF9SRUFTT05fUFJFRU1QVElPTl9USU1FUilcXG4rXFx0ICAgIHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYyAhPSBFWElUX1JFQVNPTl9QUkVFTVBUSU9OX1RJTUVSKVxcbiBcXHRcXHRyZXR1cm4gRVhJVF9GQVNUUEFUSF9OT05FO1xcbiBcXG4tXFx0c3dpdGNoICh2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljKSB7XFxuK1xcdHN3aXRjaCAodnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljKSB7XFxuIFxcdGNhc2UgRVhJVF9SRUFTT05fTVNSX1dSSVRFOlxcbiBcXHRcXHRyZXR1cm4gaGFuZGxlX2Zhc3RwYXRoX3dybXNyKHZjcHUpO1xcbiBcXHRjYXNlIEVYSVRfUkVBU09OX01TUl9XUklURV9JTU06XFxuLVxcdFxcdHJldHVybiBoYW5kbGVfZmFzdHBhdGhfd3Jtc3JfaW1tKHZjcHUsIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxcbitcXHRcXHRyZXR1cm4gaGFuZGxlX2Zhc3RwYXRoX3dybXNyX2ltbSh2Y3B1LCB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgdm14X2dldF9tc3JfaW1tX3JlZyh2Y3B1KSk7XFxuIFxcdGNhc2UgRVhJVF9SRUFTT05fUFJFRU1QVElPTl9USU1FUjpcXG4gXFx0XFx0cmV0dXJuIGhhbmRsZV9mYXN0cGF0aF9wcmVlbXB0aW9uX3RpbWVyKHZjcHUsIGZvcmNlX2ltbWVkaWF0ZV9leGl0KTtcXG5AQCAtNzQzNywxNyArNzM2Myw2IEBAIHN0YXRpYyBmYXN0cGF0aF90IHZteF9leGl0X2hhbmRsZXJzX2Zhc3RwYXRoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFx0fVxcbiB9XFxuIFxcbi1ub2luc3RyIHZvaWQgdm14X2hhbmRsZV9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi17XFxuLVxcdGlmICgodTE2KXZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMgIT0gRVhJVF9SRUFTT05fRVhDRVBUSU9OX05NSSB8fFxcbi1cXHQgICAgIWlzX25taSh2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KSkpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuLVxcdGt2bV9iZWZvcmVfaW50ZXJydXB0KHZjcHUsIEtWTV9IQU5ETElOR19OTUkpO1xcbi1cXHR4ODZfZW50cnlfZnJvbV9rdm0oRVZFTlRfVFlQRV9OTUksIE5NSV9WRUNUT1IpO1xcbi1cXHRrdm1fYWZ0ZXJfaW50ZXJydXB0KHZjcHUpO1xcbi19XFxuLVxcbiBzdGF0aWMgbm9pbnN0ciB2b2lkIHZteF92Y3B1X2VudGVyX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuIHtcXG5AQCAtNzQ3NywxMCArNzM5MiwxMCBAQCBzdGF0aWMgbm9pbnN0ciB2b2lkIHZteF92Y3B1X2VudGVyX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHR9XFxuIFxcbiBcXHR2bXgtXFx1MDAzZXZ0LmV4aXRfcmVhc29uLmZ1bGwgPSB2bWNzX3JlYWQzMihWTV9FWElUX1JFQVNPTik7XFxuLVxcdGlmIChsaWtlbHkoIXZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkpKVxcbitcXHRpZiAobGlrZWx5KCF2dF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkpKVxcbiBcXHRcXHR2bXgtXFx1MDAzZWlkdF92ZWN0b3JpbmdfaW5mbyA9IHZtY3NfcmVhZDMyKElEVF9WRUNUT1JJTkdfSU5GT19GSUVMRCk7XFxuIFxcbi1cXHR2bXhfaGFuZGxlX25taSh2Y3B1KTtcXG4rXFx0dnRfaGFuZGxlX25taSh2Y3B1KTtcXG4gXFxuIG91dDpcXG4gXFx0Z3Vlc3Rfc3RhdGVfZXhpdF9pcnFvZmYoKTtcXG5AQCAtNzYxNyw3ICs3NTMyLDcgQEAgZmFzdHBhdGhfdCB2bXhfdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcnVuX2ZsYWdzKVxcbiBcXHRcXHQgKiBjaGVja2luZy5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmICh2Y3B1LVxcdTAwM2VhcmNoLm5lc3RlZF9ydW5fcGVuZGluZyBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgIXZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkpXFxuK1xcdFxcdCAgICAhdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5KVxcbiBcXHRcXHRcXHQrK3ZjcHUtXFx1MDAzZXN0YXQubmVzdGVkX3J1bjtcXG4gXFxuIFxcdFxcdHZjcHUtXFx1MDAzZWFyY2gubmVzdGVkX3J1bl9wZW5kaW5nID0gMDtcXG5AQCAtNzYyOCw3ICs3NTQzLDcgQEAgZmFzdHBhdGhfdCB2bXhfdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcnVuX2ZsYWdzKVxcbiBcXG4gXFx0dHJhY2Vfa3ZtX2V4aXQodmNwdSwgS1ZNX0lTQV9WTVgpO1xcbiBcXG4tXFx0aWYgKHVubGlrZWx5KHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkpKVxcbitcXHRpZiAodW5saWtlbHkodnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5KSlcXG4gXFx0XFx0cmV0dXJuIEVYSVRfRkFTVFBBVEhfTk9ORTtcXG4gXFxuIFxcdHZteC1cXHUwMDNlbG9hZGVkX3ZtY3MtXFx1MDAzZWxhdW5jaGVkID0gMTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguaCBiL2FyY2gveDg2L2t2bS92bXgvdm14LmhcXG5pbmRleCBkYzg1MTdmMTViYzQ2Li4zMjQ3YjU1YjM0ODQzIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oXFxuQEAgLTMwNCw0MyArMzA0LDYgQEAgc3RydWN0IGt2bV92bXgge1xcbiBcXHR1NjQgKnBpZF90YWJsZTtcXG4gfTtcXG4gXFxuLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IHZjcHVfdnQgKnRvX3Z0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4te1xcbi1cXHRyZXR1cm4gXFx1MDAyNihjb250YWluZXJfb2YodmNwdSwgc3RydWN0IHZjcHVfdm14LCB2Y3B1KS1cXHUwMDNldnQpO1xcbi19XFxuLVxcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHN0cnVjdCBrdm1fdmNwdSAqdnRfdG9fdmNwdShzdHJ1Y3QgdmNwdV92dCAqdnQpXFxuLXtcXG4tXFx0cmV0dXJuIFxcdTAwMjYoY29udGFpbmVyX29mKHZ0LCBzdHJ1Y3QgdmNwdV92bXgsIHZ0KS1cXHUwMDNldmNwdSk7XFxuLX1cXG4tXFxuLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5pb24gdm14X2V4aXRfcmVhc29uIHZteF9nZXRfZXhpdF9yZWFzb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi17XFxuLVxcdHJldHVybiB0b192dCh2Y3B1KS1cXHUwMDNlZXhpdF9yZWFzb247XFxuLX1cXG4tXFxuLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgbG9uZyB2bXhfZ2V0X2V4aXRfcXVhbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLXtcXG4tXFx0c3RydWN0IHZjcHVfdnQgKnZ0ID0gdG9fdnQodmNwdSk7XFxuLVxcbi1cXHRpZiAoIWt2bV9yZWdpc3Rlcl90ZXN0X2FuZF9tYXJrX2F2YWlsYWJsZSh2Y3B1LCBWQ1BVX1JFR19FWElUX0lORk9fMSkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgICFXQVJOX09OX09OQ0UoaXNfdGRfdmNwdSh2Y3B1KSkpXFxuLVxcdFxcdHZ0LVxcdTAwM2VleGl0X3F1YWxpZmljYXRpb24gPSB2bWNzX3JlYWRsKEVYSVRfUVVBTElGSUNBVElPTik7XFxuLVxcbi1cXHRyZXR1cm4gdnQtXFx1MDAzZWV4aXRfcXVhbGlmaWNhdGlvbjtcXG4tfVxcbi1cXG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdm14X2dldF9pbnRyX2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi17XFxuLVxcdHN0cnVjdCB2Y3B1X3Z0ICp2dCA9IHRvX3Z0KHZjcHUpO1xcbi1cXG4tXFx0aWYgKCFrdm1fcmVnaXN0ZXJfdGVzdF9hbmRfbWFya19hdmFpbGFibGUodmNwdSwgVkNQVV9SRUdfRVhJVF9JTkZPXzIpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAhV0FSTl9PTl9PTkNFKGlzX3RkX3ZjcHUodmNwdSkpKVxcbi1cXHRcXHR2dC1cXHUwMDNlZXhpdF9pbnRyX2luZm8gPSB2bWNzX3JlYWQzMihWTV9FWElUX0lOVFJfSU5GTyk7XFxuLVxcbi1cXHRyZXR1cm4gdnQtXFx1MDAzZWV4aXRfaW50cl9pbmZvO1xcbi19XFxuLVxcbiB2b2lkIHZteF92Y3B1X2xvYWRfdm1jcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpO1xcbiBpbnQgYWxsb2NhdGVfdnBpZCh2b2lkKTtcXG4gdm9pZCBmcmVlX3ZwaWQoaW50IHZwaWQpO1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaCBiL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oXFxuaW5kZXggMDU0ZmQxNGJiMmUxNi4uN2FjMDJjNjg0NTdmMSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaFxcbisrKyBiL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oXFxuQEAgLTI3LDcgKzI3LDYgQEAgdm9pZCB2bXhfdmNwdV9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaW5pdF9ldmVudCk7XFxuIHZvaWQgdm14X3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpO1xcbiB2b2lkIHZteF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiBpbnQgdm14X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKTtcXG4tdm9pZCB2bXhfaGFuZGxlX2V4aXRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIGludCB2bXhfc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiB2b2lkIHZteF91cGRhdGVfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gYm9vbCB2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOToyNDoyNC4zODQ5Nzc4ODZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM0OTg5MDUzNjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidnRfaGFuZGxlX2V4aXRfaXJxb2ZmXCIsXG4gICAgXCJ2dF9oYW5kbGVfbm1pXCIsXG4gICAgXCJ2dF92Y3B1X3BpX2xvYWRcIixcbiAgICBcInZ0X3ZjcHVfcGlfcHV0XCIsXG4gICAgXCJ2dF9waV9zdGFydF9ieXBhc3NcIixcbiAgICBcInZ0X3BpX3VwZGF0ZV9pcnRlXCIsXG4gICAgXCJ2bXhfaGFuZGxlX2V4aXRcIixcbiAgICBcInZteF92Y3B1X3J1blwiLFxuICAgIFwibmVzdGVkX3ZteF9yZWZsZWN0X3ZtZXhpdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBLVk0gSW50ZWwgKFZNWC9URFgpIHZpcnR1YWxpemF0aW9uIGxvZ2ljIGJ5IGNvbnNvbGlkYXRpbmcgZXhpdCBzdGF0dXMgaGFuZGxpbmcsIGV4aXQgSVJRLW9mZiBwcm9jZXNzaW5nLCBwb3N0ZWQgaW50ZXJydXB0IGhlbHBlcnMsIGFuZCBWTUNTIGV4aXQgcXVhbGlmaWNhdGlvbiBhY2Nlc3NvcnMgdW5kZXIgY29tbW9uIHZ0XyogYWJzdHJhY3Rpb25zLiBUaGlzIGFmZmVjdHMgY29yZSBLVk0gVk0gZXhpdCBoYW5kbGluZyBhbmQgbmVzdGVkIHZpcnR1YWxpemF0aW9uIHJlYWNoYWJsZSBvbiBhbWQ2NC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5ZDI1ZjA2YTkzYWFiZTY0ZmJhZDBkZWQ3NGY3MzAwMGY0YTQ3Y2MzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAwOToyNDoyMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmggYi9hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oXG5pbmRleCAwODAwNTY3NjcwMmMyLi4zZTY4ZmExMmFjYTY1IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaFxuQEAgLTIsMTAgKzIsMTIgQEBcbiAjaWZuZGVmIF9fS1ZNX1g4Nl9WTVhfQ09NTU9OX0hcbiAjZGVmaW5lIF9fS1ZNX1g4Nl9WTVhfQ09NTU9OX0hcbiBcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jb250YWluZXJfb2YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bV9ob3N0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcG9zdGVkX2ludHIuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwibW11LmhcIlxuKyNpbmNsdWRlIFwidm14X29wcy5oXCJcbiBcbiB1bmlvbiB2bXhfZXhpdF9yZWFzb24ge1xuIFx0c3RydWN0IHtcbkBAIC03NCwxNCArNzYsNjIgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3RkX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7IHJldHVybiBmYWxzZTsgfVxuIFxuICNlbmRpZlxuIFxuK3N0cnVjdCB2Y3B1X3ZteF90ZHgge1xuK1x0c3RydWN0IGt2bV92Y3B1IHZjcHU7XG4rXHRzdHJ1Y3QgdmNwdV92dCB2dDtcbit9O1xuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IHZjcHVfdnQgKnRvX3Z0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHRyZXR1cm4gXHUwMDI2KGNvbnRhaW5lcl9vZih2Y3B1LCBzdHJ1Y3QgdmNwdV92bXhfdGR4LCB2Y3B1KS1cdTAwM2V2dCk7XG4rfVxuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IGt2bV92Y3B1ICp2dF90b192Y3B1KHN0cnVjdCB2Y3B1X3Z0ICp2dClcbit7XG4rXHRyZXR1cm4gXHUwMDI2KGNvbnRhaW5lcl9vZih2dCwgc3RydWN0IHZjcHVfdm14X3RkeCwgdnQpLVx1MDAzZXZjcHUpO1xuK31cbitcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuaW9uIHZteF9leGl0X3JlYXNvbiB2dF9nZXRfZXhpdF9yZWFzb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdHJldHVybiB0b192dCh2Y3B1KS1cdTAwM2VleGl0X3JlYXNvbjtcbit9XG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBsb25nIHZ0X2dldF9leGl0X3F1YWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdHN0cnVjdCB2Y3B1X3Z0ICp2dCA9IHRvX3Z0KHZjcHUpO1xuK1xuK1x0aWYgKCFrdm1fcmVnaXN0ZXJfdGVzdF9hbmRfbWFya19hdmFpbGFibGUodmNwdSwgVkNQVV9SRUdfRVhJVF9JTkZPXzEpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFXQVJOX09OX09OQ0UoaXNfdGRfdmNwdSh2Y3B1KSkpXG4rXHRcdHZ0LVx1MDAzZWV4aXRfcXVhbGlmaWNhdGlvbiA9IHZtY3NfcmVhZGwoRVhJVF9RVUFMSUZJQ0FUSU9OKTtcbitcbitcdHJldHVybiB2dC1cdTAwM2VleGl0X3F1YWxpZmljYXRpb247XG4rfVxuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTMyIHZ0X2dldF9pbnRyX2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdHN0cnVjdCB2Y3B1X3Z0ICp2dCA9IHRvX3Z0KHZjcHUpO1xuK1xuK1x0aWYgKCFrdm1fcmVnaXN0ZXJfdGVzdF9hbmRfbWFya19hdmFpbGFibGUodmNwdSwgVkNQVV9SRUdfRVhJVF9JTkZPXzIpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFXQVJOX09OX09OQ0UoaXNfdGRfdmNwdSh2Y3B1KSkpXG4rXHRcdHZ0LVx1MDAzZWV4aXRfaW50cl9pbmZvID0gdm1jc19yZWFkMzIoVk1fRVhJVF9JTlRSX0lORk8pO1xuK1xuK1x0cmV0dXJuIHZ0LVx1MDAzZWV4aXRfaW50cl9pbmZvO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgaXNfeGZkX25tX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHRyZXR1cm4gdmNwdS1cdTAwM2VhcmNoLmd1ZXN0X2ZwdS5mcHN0YXRlLVx1MDAzZXhmZCBcdTAwMjZcdTAwMjZcbitcdCAgICAgICAha3ZtX2lzX2NyMF9iaXRfc2V0KHZjcHUsIFg4Nl9DUjBfVFMpO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIGJvb2wgdnRfaXNfdGR4X3ByaXZhdGVfZ3BhKHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3QgZ3BhKVxuIHtcbiBcdC8qIEZvciBURFggdGhlIGRpcmVjdCBtYXNrIGlzIHRoZSBzaGFyZWQgbWFzay4gKi9cbiBcdHJldHVybiAha3ZtX2lzX2FkZHJfZGlyZWN0KGt2bSwgZ3BhKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgX192bXhfaGFuZGxlX2VwdF92aW9sYXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsXG4tXHRcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24pXG4rc3RhdGljIGlubGluZSBpbnQgX192dF9oYW5kbGVfZXB0X3Zpb2xhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSxcbitcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uKVxuIHtcbiBcdHU2NCBlcnJvcl9jb2RlO1xuIFxuQEAgLTE2NCw4ICsyMTQsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3ZjcHVfdHJpZ2dlcl9wb3N0ZWRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiAgKiBQb3N0IGFuIGludGVycnVwdCB0byBhIHZDUFUncyBQSVIgYW5kIHRyaWdnZXIgdGhlIHZDUFUgdG8gcHJvY2VzcyB0aGVcbiAgKiBpbnRlcnJ1cHQgaWYgbmVjZXNzYXJ5LlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3ZteF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLVx0XHRcdFx0XHRcdCAgc3RydWN0IHBpX2Rlc2MgKnBpX2Rlc2MsIGludCB2ZWN0b3IpXG4rc3RhdGljIGlubGluZSB2b2lkIF9fdnRfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbitcdFx0XHRcdFx0XHQgc3RydWN0IHBpX2Rlc2MgKnBpX2Rlc2MsIGludCB2ZWN0b3IpXG4ge1xuIFx0aWYgKHBpX3Rlc3RfYW5kX3NldF9waXIodmVjdG9yLCBwaV9kZXNjKSlcbiBcdFx0cmV0dXJuO1xuQEAgLTE4Myw2ICsyMzMsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX192bXhfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdGt2bV92Y3B1X3RyaWdnZXJfcG9zdGVkX2ludGVycnVwdCh2Y3B1LCBQT1NURURfSU5UUl9WRUNUT1IpO1xuIH1cbiBcbi1ub2luc3RyIHZvaWQgdm14X2hhbmRsZV9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbitub2luc3RyIHZvaWQgdnRfaGFuZGxlX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIFxuICNlbmRpZiAvKiBfX0tWTV9YODZfVk1YX0NPTU1PTl9IICovXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9tYWluLmMgYi9hcmNoL3g4Ni9rdm0vdm14L21haW4uY1xuaW5kZXggNGM1MmFiOGQwNzg2OS4uNmUwYjM5NTlkNzNhYiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L21haW4uY1xuQEAgLTEsNCArMSw1IEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9lbnRyeS1jb21tb24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZXBhcmFtLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcIng4Nl9vcHMuaFwiXG5AQCAtMTAsOCArMTEsMTIgQEBcbiAjaW5jbHVkZSBcInRkeC5oXCJcbiAjaW5jbHVkZSBcInRkeF9hcmNoLmhcIlxuIFxuKyNwcmFnbWEgR0NDIHBvaXNvbiB0b192bXhcbitcbitzdGF0aWNfYXNzZXJ0KG9mZnNldG9mKHN0cnVjdCB2Y3B1X3ZteF90ZHgsIHZ0KSA9PSBvZmZzZXRvZihzdHJ1Y3QgdmNwdV92bXgsIHZ0KSk7XG4rXG4gI2lmZGVmIENPTkZJR19LVk1fSU5URUxfVERYXG4tc3RhdGljX2Fzc2VydChvZmZzZXRvZihzdHJ1Y3QgdmNwdV92bXgsIHZ0KSA9PSBvZmZzZXRvZihzdHJ1Y3QgdmNwdV90ZHgsIHZ0KSk7XG4rc3RhdGljX2Fzc2VydChvZmZzZXRvZihzdHJ1Y3QgdmNwdV92bXhfdGR4LCB2dCkgPT0gb2Zmc2V0b2Yoc3RydWN0IHZjcHVfdGR4LCB2dCkpO1xuIFxuIHN0YXRpYyB2b2lkIHZ0X2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXG4ge1xuQEAgLTg3Niw2ICs4ODEsODUgQEAgc3RhdGljIGludCB2dF9nbWVtX21heF9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbixcbiAjZGVmaW5lIHZ0X29wX3RkeF9vbmx5KG5hbWUpIE5VTExcbiAjZW5kaWYgLyogQ09ORklHX0tWTV9JTlRFTF9URFggKi9cbiBcbitzdGF0aWMgdm9pZCBoYW5kbGVfbm1fZmF1bHRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHQvKlxuK1x0ICogU2F2ZSB4ZmRfZXJyIHRvIGd1ZXN0X2ZwdSBiZWZvcmUgaW50ZXJydXB0IGlzIGVuYWJsZWQsIHNvIHRoZVxuK1x0ICogTVNSIHZhbHVlIGlzIG5vdCBjbG9iYmVyZWQgYnkgdGhlIGhvc3QgYWN0aXZpdHkgYmVmb3JlIHRoZSBndWVzdFxuK1x0ICogaGFzIGNoYW5jZSB0byBjb25zdW1lIGl0LlxuK1x0ICpcbitcdCAqIFVwZGF0ZSB0aGUgZ3Vlc3QncyBYRkRfRVJSIGlmIGFuZCBvbmx5IGlmIFhGRCBpcyBlbmFibGVkLCBhcyB0aGUgI05NXG4rXHQgKiBpbnRlcmNlcHRpb24gbWF5IGhhdmUgYmVlbiBjYXVzZWQgYnkgTDEgaW50ZXJjZXB0aW9uLiAgUGVyIHRoZSBTRE0sXG4rXHQgKiBYRkRfRVJSIGlzIG5vdCBtb2RpZmllZCBmb3Igbm9uLVhGRCAjTk0sIGkuZS4gaWYgQ1IwLlRTPTEuXG4rXHQgKlxuK1x0ICogTm90ZSwgWEZEX0VSUiBpcyB1cGRhdGVkIF9iZWZvcmVfIHRoZSAjTk0gaW50ZXJjZXB0aW9uIGNoZWNrLCBpLmUuXG4rXHQgKiB1bmxpa2UgQ1IyIGFuZCBEUjYsIHRoZSB2YWx1ZSBpcyBub3QgYSBwYXlsb2FkIHRoYXQgaXMgYXR0YWNoZWQgdG9cbitcdCAqIHRoZSAjTk0gZXhjZXB0aW9uLlxuK1x0ICovXG4rXHRpZiAoaXNfeGZkX25tX2ZhdWx0KHZjcHUpKVxuK1x0XHRyZG1zcnEoTVNSX0lBMzJfWEZEX0VSUiwgdmNwdS1cdTAwM2VhcmNoLmd1ZXN0X2ZwdS54ZmRfZXJyKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgaGFuZGxlX2V4Y2VwdGlvbl9pcnFvZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgaW50cl9pbmZvKVxuK3tcbitcdC8qIGlmIGV4aXQgZHVlIHRvIFBGIGNoZWNrIGZvciBhc3luYyBQRiAqL1xuK1x0aWYgKGlzX3BhZ2VfZmF1bHQoaW50cl9pbmZvKSlcbitcdFx0dmNwdS1cdTAwM2VhcmNoLmFwZi5ob3N0X2FwZl9mbGFncyA9IGt2bV9yZWFkX2FuZF9yZXNldF9hcGZfZmxhZ3MoKTtcbitcdC8qIGlmIGV4aXQgZHVlIHRvIE5NLCBoYW5kbGUgYmVmb3JlIGludGVycnVwdHMgYXJlIGVuYWJsZWQgKi9cbitcdGVsc2UgaWYgKGlzX25tX2ZhdWx0KGludHJfaW5mbykpXG4rXHRcdGhhbmRsZV9ubV9mYXVsdF9pcnFvZmYodmNwdSk7XG4rXHQvKiBIYW5kbGUgbWFjaGluZSBjaGVja3MgYmVmb3JlIGludGVycnVwdHMgYXJlIGVuYWJsZWQgKi9cbitcdGVsc2UgaWYgKGlzX21hY2hpbmVfY2hlY2soaW50cl9pbmZvKSlcbitcdFx0a3ZtX21hY2hpbmVfY2hlY2soKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgaGFuZGxlX2V4dGVybmFsX2ludGVycnVwdF9pcnFvZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuK1x0XHRcdFx0XHQgICAgIHUzMiBpbnRyX2luZm8pXG4re1xuK1x0dW5zaWduZWQgaW50IHZlY3RvciA9IGludHJfaW5mbyBcdTAwMjYgSU5UUl9JTkZPX1ZFQ1RPUl9NQVNLO1xuK1xuK1x0aWYgKEtWTV9CVUcoIWlzX2V4dGVybmFsX2ludHIoaW50cl9pbmZvKSwgdmNwdS1cdTAwM2Vrdm0sXG4rXHQgICAgXCJ1bmV4cGVjdGVkIFZNLUV4aXQgaW50ZXJydXB0IGluZm86IDB4JXhcIiwgaW50cl9pbmZvKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0a3ZtX2JlZm9yZV9pbnRlcnJ1cHQodmNwdSwgS1ZNX0hBTkRMSU5HX0lSUSk7XG4rXHR4ODZfZW50cnlfZnJvbV9rdm0oRVZFTlRfVFlQRV9FWFRJTlQsIHZlY3Rvcik7XG4rXHRrdm1fYWZ0ZXJfaW50ZXJydXB0KHZjcHUpO1xuK1xuK1x0dmNwdS1cdTAwM2VhcmNoLmF0X2luc3RydWN0aW9uX2JvdW5kYXJ5ID0gdHJ1ZTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdnRfaGFuZGxlX2V4aXRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHRpZiAodG9fdnQodmNwdSktXHUwMDNlZW11bGF0aW9uX3JlcXVpcmVkKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRzd2l0Y2ggKHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYykge1xuK1x0Y2FzZSBFWElUX1JFQVNPTl9FWFRFUk5BTF9JTlRFUlJVUFQ6XG4rXHRcdGhhbmRsZV9leHRlcm5hbF9pbnRlcnJ1cHRfaXJxb2ZmKHZjcHUsIHZ0X2dldF9pbnRyX2luZm8odmNwdSkpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgRVhJVF9SRUFTT05fRVhDRVBUSU9OX05NSTpcbitcdFx0aGFuZGxlX2V4Y2VwdGlvbl9pcnFvZmYodmNwdSwgdnRfZ2V0X2ludHJfaW5mbyh2Y3B1KSk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBFWElUX1JFQVNPTl9NQ0VfRFVSSU5HX1ZNRU5UUlk6XG4rXHRcdGt2bV9tYWNoaW5lX2NoZWNrKCk7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0YnJlYWs7XG4rXHR9XG4rfVxuK1xuK25vaW5zdHIgdm9pZCB2dF9oYW5kbGVfbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHRpZiAoKHUxNil2dF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMgIT0gRVhJVF9SRUFTT05fRVhDRVBUSU9OX05NSSB8fFxuK1x0ICAgICFpc19ubWkodnRfZ2V0X2ludHJfaW5mbyh2Y3B1KSkpXG4rXHRcdHJldHVybjtcbitcbitcdGt2bV9iZWZvcmVfaW50ZXJydXB0KHZjcHUsIEtWTV9IQU5ETElOR19OTUkpO1xuK1x0eDg2X2VudHJ5X2Zyb21fa3ZtKEVWRU5UX1RZUEVfTk1JLCBOTUlfVkVDVE9SKTtcbitcdGt2bV9hZnRlcl9pbnRlcnJ1cHQodmNwdSk7XG4rfVxuK1xuICNkZWZpbmUgVk1YX1JFUVVJUkVEX0FQSUNWX0lOSElCSVRTXHRcdFx0XHRcXFxuIFx0KEJJVChBUElDVl9JTkhJQklUX1JFQVNPTl9ESVNBQkxFRCkgfFx0XHRcdFxcXG4gXHQgQklUKEFQSUNWX0lOSElCSVRfUkVBU09OX0FCU0VOVCkgfFx0XHRcdFxcXG5AQCAtMTAwMCwxMiArMTA4NCwxMiBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgdnRfeDg2X29wcyBfX2luaXRkYXRhID0ge1xuIFx0LmxvYWRfbW11X3BnZCA9IHZ0X29wKGxvYWRfbW11X3BnZCksXG4gXG4gXHQuY2hlY2tfaW50ZXJjZXB0ID0gdm14X2NoZWNrX2ludGVyY2VwdCxcbi1cdC5oYW5kbGVfZXhpdF9pcnFvZmYgPSB2bXhfaGFuZGxlX2V4aXRfaXJxb2ZmLFxuK1x0LmhhbmRsZV9leGl0X2lycW9mZiA9IHZ0X2hhbmRsZV9leGl0X2lycW9mZixcbiBcbiBcdC51cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcgPSB2dF9vcCh1cGRhdGVfY3B1X2RpcnR5X2xvZ2dpbmcpLFxuIFxuLVx0LnBpX3VwZGF0ZV9pcnRlID0gdm14X3BpX3VwZGF0ZV9pcnRlLFxuLVx0LnBpX3N0YXJ0X2J5cGFzcyA9IHZteF9waV9zdGFydF9ieXBhc3MsXG4rXHQucGlfdXBkYXRlX2lydGUgPSB2dF9waV91cGRhdGVfaXJ0ZSxcbitcdC5waV9zdGFydF9ieXBhc3MgPSB2dF9waV9zdGFydF9ieXBhc3MsXG4gXG4gI2lmZGVmIENPTkZJR19YODZfNjRcbiBcdC5zZXRfaHZfdGltZXIgPSB2dF9vcChzZXRfaHZfdGltZXIpLFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXG5pbmRleCAxNTE4NzM0MDdhYmQzLi40NzU5OWU3MzEyY2ZkIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xuQEAgLTQ0Niw3ICs0NDYsNyBAQCBzdGF0aWMgdm9pZCBuZXN0ZWRfZXB0X2luamVjdF9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0ICogXCJOTUkgdW5ibG9ja2luZyBkdWUgdG8gSVJFVFwiLCBpLmUuIHRoZSBiaXQgY2FuIGJlIHByb3BhZ2F0ZWRcbiBcdFx0ICogYXMtaXMgZnJvbSB0aGUgb3JpZ2luYWwgRVhJVF9RVUFMSUZJQ0FUSU9OLlxuIFx0XHQgKi9cbi1cdFx0ZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSkgXHUwMDI2IElOVFJfSU5GT19VTkJMT0NLX05NSTtcbitcdFx0ZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KSBcdTAwMjYgSU5UUl9JTkZPX1VOQkxPQ0tfTk1JO1xuIFx0fSBlbHNlIHtcbiBcdFx0aWYgKGZhdWx0LVx1MDAzZWVycm9yX2NvZGUgXHUwMDI2IFBGRVJSX1JTVkRfTUFTSykge1xuIFx0XHRcdHZtX2V4aXRfcmVhc29uID0gRVhJVF9SRUFTT05fRVBUX01JU0NPTkZJRztcbkBAIC00NzIsNyArNDcyLDcgQEAgc3RhdGljIHZvaWQgbmVzdGVkX2VwdF9pbmplY3RfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRcdFx0ICogYW5kIHdhbGtzIHRoZSBmYXVsdGluZyBHUEEuXG4gXHRcdFx0ICovXG4gXHRcdFx0aWYgKGZyb21faGFyZHdhcmUpXG4tXHRcdFx0XHRleGl0X3F1YWxpZmljYXRpb24gfD0gdm14X2dldF9leGl0X3F1YWwodmNwdSkgXHUwMDI2IG1hc2s7XG4rXHRcdFx0XHRleGl0X3F1YWxpZmljYXRpb24gfD0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KSBcdTAwMjYgbWFzaztcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRleGl0X3F1YWxpZmljYXRpb24gfD0gZmF1bHQtXHUwMDNlZXhpdF9xdWFsaWZpY2F0aW9uIFx1MDAyNiBtYXNrO1xuIFxuQEAgLTQ3NDcsNyArNDc0Nyw3IEBAIHN0YXRpYyB2b2lkIHByZXBhcmVfdm1jczEyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZtY3MxMiAqdm1jczEyLFxuIHtcbiBcdC8qIHVwZGF0ZSBleGl0IGluZm9ybWF0aW9uIGZpZWxkczogKi9cbiBcdHZtY3MxMi1cdTAwM2V2bV9leGl0X3JlYXNvbiA9IHZtX2V4aXRfcmVhc29uO1xuLVx0aWYgKHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZW5jbGF2ZV9tb2RlKVxuK1x0aWYgKHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5lbmNsYXZlX21vZGUpXG4gXHRcdHZtY3MxMi1cdTAwM2V2bV9leGl0X3JlYXNvbiB8PSBWTVhfRVhJVF9SRUFTT05TX1NHWF9FTkNMQVZFX01PREU7XG4gXHR2bWNzMTItXHUwMDNlZXhpdF9xdWFsaWZpY2F0aW9uID0gZXhpdF9xdWFsaWZpY2F0aW9uO1xuIFxuQEAgLTUzNzMsNyArNTM3Myw3IEBAIHN0YXRpYyBpbnQgbmVzdGVkX3ZteF9nZXRfdm1wdHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCAqdm1wb2ludGVyLFxuIFx0c3RydWN0IHg4Nl9leGNlcHRpb24gZTtcbiBcdGludCByO1xuIFxuLVx0aWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgdm14X2dldF9leGl0X3F1YWwodmNwdSksXG4rXHRpZiAoZ2V0X3ZteF9tZW1fYWRkcmVzcyh2Y3B1LCB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxuIFx0XHRcdFx0dm1jc19yZWFkMzIoVk1YX0lOU1RSVUNUSU9OX0lORk8pLCBmYWxzZSxcbiBcdFx0XHRcdHNpemVvZigqdm1wb2ludGVyKSwgXHUwMDI2Z3ZhKSkge1xuIFx0XHQqcmV0ID0gMTtcbkBAIC01NjY1LDcgKzU2NjUsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXJlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCB2bWNzMTIgKnZtY3MxMiA9IGlzX2d1ZXN0X21vZGUodmNwdSkgPyBnZXRfc2hhZG93X3ZtY3MxMih2Y3B1KVxuIFx0XHRcdFx0XHRcdCAgICA6IGdldF92bWNzMTIodmNwdSk7XG4tXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuK1x0dW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFx0dTMyIGluc3RyX2luZm8gPSB2bWNzX3JlYWQzMihWTVhfSU5TVFJVQ1RJT05fSU5GTyk7XG4gXHRzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTtcbiBcdHN0cnVjdCB4ODZfZXhjZXB0aW9uIGU7XG5AQCAtNTc3MSw3ICs1NzcxLDcgQEAgc3RhdGljIGludCBoYW5kbGVfdm13cml0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IHZtY3MxMiAqdm1jczEyID0gaXNfZ3Vlc3RfbW9kZSh2Y3B1KSA/IGdldF9zaGFkb3dfdm1jczEyKHZjcHUpXG4gXHRcdFx0XHRcdFx0ICAgIDogZ2V0X3ZtY3MxMih2Y3B1KTtcbi1cdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4rXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXHR1MzIgaW5zdHJfaW5mbyA9IHZtY3NfcmVhZDMyKFZNWF9JTlNUUlVDVElPTl9JTkZPKTtcbiBcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xuIFx0c3RydWN0IHg4Nl9leGNlcHRpb24gZTtcbkBAIC01OTYwLDcgKzU5NjAsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXB0cmxkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiAvKiBFbXVsYXRlIHRoZSBWTVBUUlNUIGluc3RydWN0aW9uICovXG4gc3RhdGljIGludCBoYW5kbGVfdm1wdHJzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBleGl0X3F1YWwgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbitcdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdHUzMiBpbnN0cl9pbmZvID0gdm1jc19yZWFkMzIoVk1YX0lOU1RSVUNUSU9OX0lORk8pO1xuIFx0Z3BhX3QgY3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS1cdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0cjtcbiBcdHN0cnVjdCB4ODZfZXhjZXB0aW9uIGU7XG5AQCAtNjAyMSw3ICs2MDIxLDcgQEAgc3RhdGljIGludCBoYW5kbGVfaW52ZXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdC8qIEFjY29yZGluZyB0byB0aGUgSW50ZWwgVk1YIGluc3RydWN0aW9uIHJlZmVyZW5jZSwgdGhlIG1lbW9yeVxuIFx0ICogb3BlcmFuZCBpcyByZWFkIGV2ZW4gaWYgaXQgaXNuJ3QgbmVlZGVkIChlLmcuLCBmb3IgdHlwZT09Z2xvYmFsKVxuIFx0ICovXG4tXHRpZiAoZ2V0X3ZteF9tZW1fYWRkcmVzcyh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSxcbitcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZ0X2dldF9leGl0X3F1YWwodmNwdSksXG4gXHRcdFx0dm14X2luc3RydWN0aW9uX2luZm8sIGZhbHNlLCBzaXplb2Yob3BlcmFuZCksIFx1MDAyNmd2YSkpXG4gXHRcdHJldHVybiAxO1xuIFx0ciA9IGt2bV9yZWFkX2d1ZXN0X3ZpcnQodmNwdSwgZ3ZhLCBcdTAwMjZvcGVyYW5kLCBzaXplb2Yob3BlcmFuZCksIFx1MDAyNmUpO1xuQEAgLTYxMDQsNyArNjEwNCw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2ludnZwaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0LyogYWNjb3JkaW5nIHRvIHRoZSBpbnRlbCB2bXggaW5zdHJ1Y3Rpb24gcmVmZXJlbmNlLCB0aGUgbWVtb3J5XG4gXHQgKiBvcGVyYW5kIGlzIHJlYWQgZXZlbiBpZiBpdCBpc24ndCBuZWVkZWQgKGUuZy4sIGZvciB0eXBlPT1nbG9iYWwpXG4gXHQgKi9cbi1cdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxuK1x0aWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KSxcbiBcdFx0XHR2bXhfaW5zdHJ1Y3Rpb25faW5mbywgZmFsc2UsIHNpemVvZihvcGVyYW5kKSwgXHUwMDI2Z3ZhKSlcbiBcdFx0cmV0dXJuIDE7XG4gXHRyID0ga3ZtX3JlYWRfZ3Vlc3RfdmlydCh2Y3B1LCBndmEsIFx1MDAyNm9wZXJhbmQsIHNpemVvZihvcGVyYW5kKSwgXHUwMDI2ZSk7XG5AQCAtNjIzNiw4ICs2MjM2LDggQEAgc3RhdGljIGludCBoYW5kbGVfdm1mdW5jKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdCAqIEVYSVRfUkVBU09OX1ZNRlVOQyBhcyB0aGUgZXhpdCByZWFzb24uXG4gXHQgKi9cbiBcdG5lc3RlZF92bXhfdm1leGl0KHZjcHUsIHZteC1cdTAwM2V2dC5leGl0X3JlYXNvbi5mdWxsLFxuLVx0XHRcdCAgdm14X2dldF9pbnRyX2luZm8odmNwdSksXG4tXHRcdFx0ICB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSk7XG4rXHRcdFx0ICB2dF9nZXRfaW50cl9pbmZvKHZjcHUpLFxuK1x0XHRcdCAgdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KSk7XG4gXHRyZXR1cm4gMTtcbiB9XG4gXG5AQCAtNjI4OCw3ICs2Mjg4LDcgQEAgc3RhdGljIGJvb2wgbmVzdGVkX3ZteF9leGl0X2hhbmRsZWRfaW8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0aWYgKCFuZXN0ZWRfY3B1X2hhcyh2bWNzMTIsIENQVV9CQVNFRF9VU0VfSU9fQklUTUFQUykpXG4gXHRcdHJldHVybiBuZXN0ZWRfY3B1X2hhcyh2bWNzMTIsIENQVV9CQVNFRF9VTkNPTkRfSU9fRVhJVElORyk7XG4gXG4tXHRleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbitcdGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXG4gXHRwb3J0ID0gZXhpdF9xdWFsaWZpY2F0aW9uIFx1MDAzZVx1MDAzZSAxNjtcbiBcdHNpemUgPSAoZXhpdF9xdWFsaWZpY2F0aW9uIFx1MDAyNiA3KSArIDE7XG5AQCAtNjMxNCw3ICs2MzE0LDcgQEAgc3RhdGljIGJvb2wgbmVzdGVkX3ZteF9leGl0X2hhbmRsZWRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcbiBcdGlmIChleGl0X3JlYXNvbi5iYXNpYyA9PSBFWElUX1JFQVNPTl9NU1JfUkVBRF9JTU0gfHxcbiBcdCAgICBleGl0X3JlYXNvbi5iYXNpYyA9PSBFWElUX1JFQVNPTl9NU1JfV1JJVEVfSU1NKVxuLVx0XHRtc3JfaW5kZXggPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbitcdFx0bXNyX2luZGV4ID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdGVsc2VcbiBcdFx0bXNyX2luZGV4ID0ga3ZtX2VjeF9yZWFkKHZjcHUpO1xuIFxuQEAgLTYzNTAsNyArNjM1MCw3IEBAIHN0YXRpYyBib29sIG5lc3RlZF92bXhfZXhpdF9oYW5kbGVkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gc3RhdGljIGJvb2wgbmVzdGVkX3ZteF9leGl0X2hhbmRsZWRfY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0c3RydWN0IHZtY3MxMiAqdm1jczEyKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4rXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXHRpbnQgY3IgPSBleGl0X3F1YWxpZmljYXRpb24gXHUwMDI2IDE1O1xuIFx0aW50IHJlZztcbiBcdHVuc2lnbmVkIGxvbmcgdmFsO1xuQEAgLTY0ODQsNyArNjQ4NCw3IEBAIHN0YXRpYyBib29sIG5lc3RlZF92bXhfbDBfd2FudHNfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXG4gXHRzd2l0Y2ggKCh1MTYpZXhpdF9yZWFzb24uYmFzaWMpIHtcbiBcdGNhc2UgRVhJVF9SRUFTT05fRVhDRVBUSU9OX05NSTpcbi1cdFx0aW50cl9pbmZvID0gdm14X2dldF9pbnRyX2luZm8odmNwdSk7XG4rXHRcdGludHJfaW5mbyA9IHZ0X2dldF9pbnRyX2luZm8odmNwdSk7XG4gXHRcdGlmIChpc19ubWkoaW50cl9pbmZvKSlcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdFx0ZWxzZSBpZiAoaXNfcGFnZV9mYXVsdChpbnRyX2luZm8pKVxuQEAgLTY1NjcsNyArNjU2Nyw3IEBAIHN0YXRpYyBib29sIG5lc3RlZF92bXhfbDFfd2FudHNfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXG4gXHRzd2l0Y2ggKCh1MTYpZXhpdF9yZWFzb24uYmFzaWMpIHtcbiBcdGNhc2UgRVhJVF9SRUFTT05fRVhDRVBUSU9OX05NSTpcbi1cdFx0aW50cl9pbmZvID0gdm14X2dldF9pbnRyX2luZm8odmNwdSk7XG4rXHRcdGludHJfaW5mbyA9IHZ0X2dldF9pbnRyX2luZm8odmNwdSk7XG4gXHRcdGlmIChpc19ubWkoaW50cl9pbmZvKSlcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdFx0ZWxzZSBpZiAoaXNfcGFnZV9mYXVsdChpbnRyX2luZm8pKVxuQEAgLTY3MzcsMTQgKzY3MzcsMTQgQEAgYm9vbCBuZXN0ZWRfdm14X3JlZmxlY3Rfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdCAqIG5lZWQgdG8gYmUgc3ludGhlc2l6ZWQgYnkgcXVlcnlpbmcgdGhlIGluLWtlcm5lbCBMQVBJQywgYnV0IGV4dGVybmFsXG4gXHQgKiBpbnRlcnJ1cHRzIGFyZSBuZXZlciByZWZsZWN0ZWQgdG8gTDEgc28gaXQncyBhIG5vbi1pc3N1ZS5cbiBcdCAqL1xuLVx0ZXhpdF9pbnRyX2luZm8gPSB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcbitcdGV4aXRfaW50cl9pbmZvID0gdnRfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcbiBcdGlmIChpc19leGNlcHRpb25fd2l0aF9lcnJvcl9jb2RlKGV4aXRfaW50cl9pbmZvKSkge1xuIFx0XHRzdHJ1Y3Qgdm1jczEyICp2bWNzMTIgPSBnZXRfdm1jczEyKHZjcHUpO1xuIFxuIFx0XHR2bWNzMTItXHUwMDNldm1fZXhpdF9pbnRyX2Vycm9yX2NvZGUgPVxuIFx0XHRcdHZtY3NfcmVhZDMyKFZNX0VYSVRfSU5UUl9FUlJPUl9DT0RFKTtcbiBcdH1cbi1cdGV4aXRfcXVhbCA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuK1x0ZXhpdF9xdWFsID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcbiByZWZsZWN0X3ZtZXhpdDpcbiBcdG5lc3RlZF92bXhfdm1leGl0KHZjcHUsIGV4aXRfcmVhc29uLmZ1bGwsIGV4aXRfaW50cl9pbmZvLCBleGl0X3F1YWwpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYyBiL2FyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuY1xuaW5kZXggNGE2ZDlhMTdkYTIzOC4uMjY0NGFkZDU0Yjc2YiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuY1xuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5jXG5AQCAtMTQsNiArMTQsOCBAQFxuICNpbmNsdWRlIFwidm14LmhcIlxuICNpbmNsdWRlIFwidGR4LmhcIlxuIFxuKyNwcmFnbWEgR0NDIHBvaXNvbiB0b192bXhcbitcbiAvKlxuICAqIE1haW50YWluIGEgcGVyLUNQVSBsaXN0IG9mIHZDUFVzIHRoYXQgbmVlZCB0byBiZSBhd2FrZW5lZCBieSB3YWtldXBfaGFuZGxlcigpXG4gICogd2hlbiBhIFdBS0VVUF9WRUNUT1IgaW50ZXJydXB0ZWQgaXMgcG9zdGVkLiAgdkNQVXMgYXJlIGFkZGVkIHRvIHRoZSBsaXN0IHdoZW5cbkBAIC01NCw3ICs1Niw3IEBAIHN0YXRpYyBpbnQgcGlfdHJ5X3NldF9jb250cm9sKHN0cnVjdCBwaV9kZXNjICpwaV9kZXNjLCB1NjQgKnBvbGQsIHU2NCBuZXcpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tdm9pZCB2bXhfdmNwdV9waV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcbit2b2lkIHZ0X3ZjcHVfcGlfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4ge1xuIFx0c3RydWN0IHBpX2Rlc2MgKnBpX2Rlc2MgPSB2Y3B1X3RvX3BpX2Rlc2ModmNwdSk7XG4gXHRzdHJ1Y3QgdmNwdV92dCAqdnQgPSB0b192dCh2Y3B1KTtcbkBAIC0xNDQsMTEgKzE0NiwxMSBAQCB2b2lkIHZteF92Y3B1X3BpX2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KVxuIFx0XHRwaV9zZXRfb24ocGlfZGVzYyk7XG4gfVxuIFxuLXN0YXRpYyBib29sIHZteF9jYW5fdXNlX3Z0ZF9waShzdHJ1Y3Qga3ZtICprdm0pXG4rc3RhdGljIGJvb2wgdnRfY2FuX3VzZV92dGRfcGkoc3RydWN0IGt2bSAqa3ZtKVxuIHtcbiBcdC8qXG4gXHQgKiBOb3RlLCByZWFkaW5nIHRoZSBudW1iZXIgb2YgcG9zc2libGUgYnlwYXNzIElSUXMgY2FuIHJhY2Ugd2l0aCBhXG4tXHQgKiBieXBhc3MgSVJRIGJlaW5nIGF0dGFjaGVkIHRvIHRoZSBWTS4gIHZteF9waV9zdGFydF9ieXBhc3MoKSBlbnN1cmVzXG4rXHQgKiBieXBhc3MgSVJRIGJlaW5nIGF0dGFjaGVkIHRvIHRoZSBWTS4gIHZ0X3BpX3N0YXJ0X2J5cGFzcygpIGVuc3VyZXNcbiBcdCAqIGJsb2NrbmcgdkNQVXMgd2lsbCBzZWUgYW4gZWxldmF0ZWQgY291bnQgb3IgZ2V0IEtWTV9SRVFfVU5CTE9DSy5cbiBcdCAqL1xuIFx0cmV0dXJuIGlycWNoaXBfaW5fa2VybmVsKGt2bSkgXHUwMDI2XHUwMDI2IGt2bV9hcmNoX2hhc19pcnFfYnlwYXNzKCkgXHUwMDI2XHUwMDI2XG5AQCAtMjA2LDcgKzIwOCw3IEBAIHN0YXRpYyB2b2lkIHBpX2VuYWJsZV93YWtldXBfaGFuZGxlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdF9fYXBpY19zZW5kX0lQSV9zZWxmKFBPU1RFRF9JTlRSX1dBS0VVUF9WRUNUT1IpO1xuIH1cbiBcbi1zdGF0aWMgYm9vbCB2bXhfbmVlZHNfcGlfd2FrZXVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbitzdGF0aWMgYm9vbCB2dF9uZWVkc19waV93YWtldXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdC8qXG4gXHQgKiBUaGUgZGVmYXVsdCBwb3N0ZWQgaW50ZXJydXB0IHZlY3RvciBkb2VzIG5vdGhpbmcgd2hlblxuQEAgLTIxNywxNCArMjE5LDE0IEBAIHN0YXRpYyBib29sIHZteF9uZWVkc19waV93YWtldXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICogYmFjayB0byB0aGUgcGlfd2FrZXVwX2hhbmRsZXIoKSBmdW5jdGlvbi5cbiBcdCAqL1xuIFx0cmV0dXJuICh2bXhfY2FuX3VzZV9pcGl2KHZjcHUpIFx1MDAyNlx1MDAyNiAhaXNfdGRfdmNwdSh2Y3B1KSkgfHxcbi1cdFx0dm14X2Nhbl91c2VfdnRkX3BpKHZjcHUtXHUwMDNla3ZtKTtcbitcdFx0dnRfY2FuX3VzZV92dGRfcGkodmNwdS1cdTAwM2Vrdm0pO1xuIH1cbiBcbi12b2lkIHZteF92Y3B1X3BpX3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4rdm9pZCB2dF92Y3B1X3BpX3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IHBpX2Rlc2MgKnBpX2Rlc2MgPSB2Y3B1X3RvX3BpX2Rlc2ModmNwdSk7XG4gXG4tXHRpZiAoIXZteF9uZWVkc19waV93YWtldXAodmNwdSkpXG4rXHRpZiAoIXZ0X25lZWRzX3BpX3dha2V1cCh2Y3B1KSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0LypcbkBAIC0yOTIsMTcgKzI5NCwxNyBAQCBib29sIHBpX2hhc19wZW5kaW5nX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gLypcbiAgKiBLaWNrIGFsbCB2Q1BVcyB3aGVuIHRoZSBmaXJzdCBwb3NzaWJsZSBieXBhc3MgSVJRIGlzIGF0dGFjaGVkIHRvIGEgVk0sIGFzXG4gICogYmxvY2tpbmcgdkNQVXMgbWF5IHNjaGVkdWxlZCBvdXQgd2l0aG91dCByZWNvbmZpZ3VyaW5nIFBJRC5OViB0byB0aGUgd2FrZXVwXG4tICogdmVjdG9yLCBpLmUuIGlmIHRoZSBieXBhc3MgSVJRIGNhbWUgYWxvbmcgYWZ0ZXIgdm14X3ZjcHVfcGlfcHV0KCkuXG4rICogdmVjdG9yLCBpLmUuIGlmIHRoZSBieXBhc3MgSVJRIGNhbWUgYWxvbmcgYWZ0ZXIgdnRfdmNwdV9waV9wdXQoKS5cbiAgKi9cbi12b2lkIHZteF9waV9zdGFydF9ieXBhc3Moc3RydWN0IGt2bSAqa3ZtKVxuK3ZvaWQgdnRfcGlfc3RhcnRfYnlwYXNzKHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4tXHRpZiAoV0FSTl9PTl9PTkNFKCF2bXhfY2FuX3VzZV92dGRfcGkoa3ZtKSkpXG4rXHRpZiAoV0FSTl9PTl9PTkNFKCF2dF9jYW5fdXNlX3Z0ZF9waShrdm0pKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0a3ZtX21ha2VfYWxsX2NwdXNfcmVxdWVzdChrdm0sIEtWTV9SRVFfVU5CTE9DSyk7XG4gfVxuIFxuLWludCB2bXhfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sXG4raW50IHZ0X3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHQgICAgICAgdW5zaWduZWQgaW50IGhvc3RfaXJxLCB1aW50MzJfdCBndWVzdF9pcnEsXG4gXHRcdCAgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2ZWN0b3IpXG4ge1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuaCBiL2FyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuaFxuaW5kZXggYTRhZjM5OTQ4Y2YwNC4uYzU4NjBlYTgyOGFlOSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuaFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5oXG5AQCAtOCwxNiArOCwxNiBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS9wb3N0ZWRfaW50ci5oXHUwMDNlXG4gXG4tdm9pZCB2bXhfdmNwdV9waV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSk7XG4tdm9pZCB2bXhfdmNwdV9waV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbit2b2lkIHZ0X3ZjcHVfcGlfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpO1xuK3ZvaWQgdnRfdmNwdV9waV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIHBpX3dha2V1cF9oYW5kbGVyKHZvaWQpO1xuIHZvaWQgX19pbml0IHBpX2luaXRfY3B1KGludCBjcHUpO1xuIHZvaWQgcGlfYXBpY3ZfcHJlX3N0YXRlX3Jlc3RvcmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBib29sIHBpX2hhc19wZW5kaW5nX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuLWludCB2bXhfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sXG4raW50IHZ0X3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHQgICAgICAgdW5zaWduZWQgaW50IGhvc3RfaXJxLCB1aW50MzJfdCBndWVzdF9pcnEsXG4gXHRcdCAgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2ZWN0b3IpO1xuLXZvaWQgdm14X3BpX3N0YXJ0X2J5cGFzcyhzdHJ1Y3Qga3ZtICprdm0pO1xuK3ZvaWQgdnRfcGlfc3RhcnRfYnlwYXNzKHN0cnVjdCBrdm0gKmt2bSk7XG4gXG4gc3RhdGljIGlubGluZSBpbnQgcGlfZmluZF9oaWdoZXN0X3ZlY3RvcihzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYylcbiB7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbmluZGV4IGIyNzJjMjA1ODZhNzQuLmVmYmIxYWM2ZjUxZWEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG5AQCAtNzE2LDcgKzcxNiw3IEBAIHZvaWQgdGR4X3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4ge1xuIFx0c3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7XG4gXG4tXHR2bXhfdmNwdV9waV9sb2FkKHZjcHUsIGNwdSk7XG4rXHR2dF92Y3B1X3BpX2xvYWQodmNwdSwgY3B1KTtcbiBcdGlmICh2Y3B1LVx1MDAzZWNwdSA9PSBjcHUgfHwgIWlzX2hraWRfYXNzaWduZWQodG9fa3ZtX3RkeCh2Y3B1LVx1MDAzZWt2bSkpKVxuIFx0XHRyZXR1cm47XG4gXG5AQCAtNzQxLDcgKzc0MSw3IEBAIGJvb2wgdGR4X2ludGVycnVwdF9hbGxvd2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdCAqIGludGVycnVwdCBpcyBhbHdheXMgYWxsb3dlZCB1bmxlc3MgVERYIGd1ZXN0IGNhbGxzIFREVk1DQUxMIHdpdGggSExULFxuIFx0ICogd2hpY2ggcGFzc2VzIHRoZSBpbnRlcnJ1cHQgYmxvY2tlZCBmbGFnLlxuIFx0ICovXG4tXHRyZXR1cm4gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYyAhPSBFWElUX1JFQVNPTl9ITFQgfHxcbitcdHJldHVybiB2dF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMgIT0gRVhJVF9SRUFTT05fSExUIHx8XG4gXHQgICAgICAgIXRvX3RkeCh2Y3B1KS1cdTAwM2V2cF9lbnRlcl9hcmdzLnIxMjtcbiB9XG4gXG5AQCAtNzU5LDcgKzc1OSw3IEBAIHN0YXRpYyBib29sIHRkeF9wcm90ZWN0ZWRfYXBpY19oYXNfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdCAqIG90aGVyd2lzZSB0aGUgaW50ZXJydXB0IHdvdWxkIGhhdmUgYmVlbiBzZXJ2aWNlZCBhdCB0aGUgaW5zdHJ1Y3Rpb25cbiBcdCAqIGJvdW5kYXJ5LlxuIFx0ICovXG4tXHRpZiAodm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYyAhPSBFWElUX1JFQVNPTl9ITFQgfHxcbitcdGlmICh2dF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMgIT0gRVhJVF9SRUFTT05fSExUIHx8XG4gXHQgICAgdG9fdGR4KHZjcHUpLVx1MDAzZXZwX2VudGVyX2FyZ3MucjEyKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG5AQCAtODI2LDcgKzgyNiw3IEBAIHN0YXRpYyB2b2lkIHRkeF9wcmVwYXJlX3N3aXRjaF90b19ob3N0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiB2b2lkIHRkeF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0dm14X3ZjcHVfcGlfcHV0KHZjcHUpO1xuK1x0dnRfdmNwdV9waV9wdXQodmNwdSk7XG4gXHR0ZHhfcHJlcGFyZV9zd2l0Y2hfdG9faG9zdCh2Y3B1KTtcbiB9XG4gXG5AQCAtOTc0LDE1ICs5NzQsMTUgQEAgc3RhdGljIG5vaW5zdHIgdm9pZCB0ZHhfdmNwdV9lbnRlcl9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHRkeC1cdTAwM2VleGl0X2dwYSA9IHRkeC1cdTAwM2V2cF9lbnRlcl9hcmdzLnI4O1xuIFx0dnQtXHUwMDNlZXhpdF9pbnRyX2luZm8gPSB0ZHgtXHUwMDNldnBfZW50ZXJfYXJncy5yOTtcbiBcbi1cdHZteF9oYW5kbGVfbm1pKHZjcHUpO1xuK1x0dnRfaGFuZGxlX25taSh2Y3B1KTtcbiBcbiBcdGd1ZXN0X3N0YXRlX2V4aXRfaXJxb2ZmKCk7XG4gfVxuIFxuIHN0YXRpYyBib29sIHRkeF9mYWlsZWRfdm1lbnRyeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0cmV0dXJuIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkgXHUwMDI2XHUwMDI2XG4tXHQgICAgICAgdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mdWxsICE9IC0xdTtcbitcdHJldHVybiB2dF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZ1bGwgIT0gLTF1O1xuIH1cbiBcbiBzdGF0aWMgZmFzdHBhdGhfdCB0ZHhfZXhpdF9oYW5kbGVyc19mYXN0cGF0aChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5AQCAtMTEzMSw3ICsxMTMxLDcgQEAgdm9pZCB0ZHhfaW5qZWN0X25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gc3RhdGljIGludCB0ZHhfaGFuZGxlX2V4Y2VwdGlvbl9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHUzMiBpbnRyX2luZm8gPSB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcbitcdHUzMiBpbnRyX2luZm8gPSB2dF9nZXRfaW50cl9pbmZvKHZjcHUpO1xuIFxuIFx0LypcbiBcdCAqIE1hY2hpbmUgY2hlY2tzIGFyZSBoYW5kbGVkIGJ5IGhhbmRsZV9leGNlcHRpb25faXJxb2ZmKCksIG9yIGJ5XG5AQCAtMTg5NSw3ICsxODk1LDcgQEAgdm9pZCB0ZHhfZGVsaXZlcl9pbnRlcnJ1cHQoc3RydWN0IGt2bV9sYXBpYyAqYXBpYywgaW50IGRlbGl2ZXJ5X21vZGUsXG4gXHRzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTtcbiBcbiBcdC8qIFREWCBzdXBwb3J0cyBvbmx5IHBvc3RlZCBpbnRlcnJ1cHQuICBObyBsYXBpYyBlbXVsYXRpb24uICovXG4tXHRfX3ZteF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHQodmNwdSwgXHUwMDI2dGR4LVx1MDAzZXZ0LnBpX2Rlc2MsIHZlY3Rvcik7XG4rXHRfX3Z0X2RlbGl2ZXJfcG9zdGVkX2ludGVycnVwdCh2Y3B1LCBcdTAwMjZ0ZHgtXHUwMDNldnQucGlfZGVzYywgdmVjdG9yKTtcbiBcbiBcdHRyYWNlX2t2bV9hcGljdl9hY2NlcHRfaXJxKHZjcHUtXHUwMDNldmNwdV9pZCwgZGVsaXZlcnlfbW9kZSwgdHJpZ19tb2RlLCB2ZWN0b3IpO1xuIH1cbkBAIC0xOTAzLDcgKzE5MDMsNyBAQCB2b2lkIHRkeF9kZWxpdmVyX2ludGVycnVwdChzdHJ1Y3Qga3ZtX2xhcGljICphcGljLCBpbnQgZGVsaXZlcnlfbW9kZSxcbiBzdGF0aWMgaW5saW5lIGJvb2wgdGR4X2lzX3NlcHRfdmlvbGF0aW9uX3VuZXhwZWN0ZWRfcGVuZGluZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0dTY0IGVlcV90eXBlID0gdG9fdGR4KHZjcHUpLVx1MDAzZWV4dF9leGl0X3F1YWxpZmljYXRpb24gXHUwMDI2IFREWF9FWFRfRVhJVF9RVUFMX1RZUEVfTUFTSztcbi1cdHU2NCBlcSA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuK1x0dTY0IGVxID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcbiBcdGlmIChlZXFfdHlwZSAhPSBURFhfRVhUX0VYSVRfUVVBTF9UWVBFX1BFTkRJTkdfRVBUX1ZJT0xBVElPTilcbiBcdFx0cmV0dXJuIGZhbHNlO1xuQEAgLTE5MzksNyArMTkzOSw3IEBAIHN0YXRpYyBpbnQgdGR4X2hhbmRsZV9lcHRfdmlvbGF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0LyogT25seSBwcml2YXRlIEdQQSB0cmlnZ2VycyB6ZXJvLXN0ZXAgbWl0aWdhdGlvbiAqL1xuIFx0XHRsb2NhbF9yZXRyeSA9IHRydWU7XG4gXHR9IGVsc2Uge1xuLVx0XHRleGl0X3F1YWwgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbitcdFx0ZXhpdF9xdWFsID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdFx0LypcbiBcdFx0ICogRVBUIHZpb2xhdGlvbiBkdWUgdG8gaW5zdHJ1Y3Rpb24gZmV0Y2ggc2hvdWxkIG5ldmVyIGJlXG4gXHRcdCAqIHRyaWdnZXJlZCBmcm9tIHNoYXJlZCBtZW1vcnkgaW4gVERYIGd1ZXN0LiAgSWYgc3VjaCBFUFRcbkBAIC0xOTg3LDcgKzE5ODcsNyBAQCBzdGF0aWMgaW50IHRkeF9oYW5kbGVfZXB0X3Zpb2xhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHR3aGlsZSAoMSkge1xuIFx0XHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90O1xuIFxuLVx0XHRyZXQgPSBfX3ZteF9oYW5kbGVfZXB0X3Zpb2xhdGlvbih2Y3B1LCBncGEsIGV4aXRfcXVhbCk7XG4rXHRcdHJldCA9IF9fdnRfaGFuZGxlX2VwdF92aW9sYXRpb24odmNwdSwgZ3BhLCBleGl0X3F1YWwpO1xuIFxuIFx0XHRpZiAocmV0ICE9IFJFVF9QRl9SRVRSWSB8fCAhbG9jYWxfcmV0cnkpXG4gXHRcdFx0YnJlYWs7XG5AQCAtMjAyMSw3ICsyMDIxLDcgQEAgaW50IHRkeF9jb21wbGV0ZV9lbXVsYXRlZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZXJyKVxuIFx0XHRyZXR1cm4gMTtcbiBcdH1cbiBcbi1cdGlmICh2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljID09IEVYSVRfUkVBU09OX01TUl9SRUFEKVxuK1x0aWYgKHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYyA9PSBFWElUX1JFQVNPTl9NU1JfUkVBRClcbiBcdFx0dGR2bWNhbGxfc2V0X3JldHVybl92YWwodmNwdSwga3ZtX3JlYWRfZWR4X2VheCh2Y3B1KSk7XG4gXG4gXHRyZXR1cm4gMTtcbkBAIC0yMDMyLDcgKzIwMzIsNyBAQCBpbnQgdGR4X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBmYXN0cGF0aClcbiB7XG4gXHRzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTtcbiBcdHU2NCB2cF9lbnRlcl9yZXQgPSB0ZHgtXHUwMDNldnBfZW50ZXJfcmV0O1xuLVx0dW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uID0gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KTtcbitcdHVuaW9uIHZteF9leGl0X3JlYXNvbiBleGl0X3JlYXNvbiA9IHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KTtcbiBcbiBcdGlmIChmYXN0cGF0aCAhPSBFWElUX0ZBU1RQQVRIX05PTkUpXG4gXHRcdHJldHVybiAxO1xuQEAgLTIxNDIsOSArMjE0Miw5IEBAIHZvaWQgdGR4X2dldF9leGl0X2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgKnJlYXNvbixcbiBcbiBcdCpyZWFzb24gPSB0ZHgtXHUwMDNldnQuZXhpdF9yZWFzb24uZnVsbDtcbiBcdGlmICgqcmVhc29uICE9IC0xdSkge1xuLVx0XHQqaW5mbzEgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbitcdFx0KmluZm8xID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdFx0KmluZm8yID0gdGR4LVx1MDAzZWV4dF9leGl0X3F1YWxpZmljYXRpb247XG4tXHRcdCppbnRyX2luZm8gPSB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcbitcdFx0KmludHJfaW5mbyA9IHZ0X2dldF9pbnRyX2luZm8odmNwdSk7XG4gXHR9IGVsc2Uge1xuIFx0XHQqaW5mbzEgPSAwO1xuIFx0XHQqaW5mbzIgPSAwO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG5pbmRleCA1MDQ2MzBmMGViNDBmLi43ZTM1YzJkMDNjNjllIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC92bXguY1xuKysrIGIvYXJjaC94ODYva3ZtL3ZteC92bXguY1xuQEAgLTE1NzcsMTIgKzE1NzcsMTIgQEAgdm9pZCB2bXhfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcbiBcbiBcdHZteF92Y3B1X2xvYWRfdm1jcyh2Y3B1LCBjcHUpO1xuIFxuLVx0dm14X3ZjcHVfcGlfbG9hZCh2Y3B1LCBjcHUpO1xuK1x0dnRfdmNwdV9waV9sb2FkKHZjcHUsIGNwdSk7XG4gfVxuIFxuIHZvaWQgdm14X3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHR2bXhfdmNwdV9waV9wdXQodmNwdSk7XG4rXHR2dF92Y3B1X3BpX3B1dCh2Y3B1KTtcbiBcbiBcdHZteF9wcmVwYXJlX3N3aXRjaF90b19ob3N0KHRvX3ZteCh2Y3B1KSk7XG4gfVxuQEAgLTE3OTEsNyArMTc5MSw3IEBAIGludCB2bXhfY2hlY2tfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlbXVsX3R5cGUsXG4gXHQgKiBzbyB0aGF0IGd1ZXN0IHVzZXJzcGFjZSBjYW4ndCBEb1MgdGhlIGd1ZXN0IHNpbXBseSBieSB0cmlnZ2VyaW5nXG4gXHQgKiBlbXVsYXRpb24gKGVuY2xhdmVzIGFyZSBDUEwzIG9ubHkpLlxuIFx0ICovXG4tXHRpZiAodm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5lbmNsYXZlX21vZGUpIHtcbitcdGlmICh2dF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZW5jbGF2ZV9tb2RlKSB7XG4gXHRcdGt2bV9xdWV1ZV9leGNlcHRpb24odmNwdSwgVURfVkVDVE9SKTtcbiBcdFx0cmV0dXJuIFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUO1xuIFx0fVxuQEAgLTE4MDYsNyArMTgwNiw3IEBAIGludCB2bXhfY2hlY2tfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlbXVsX3R5cGUsXG4gXG4gc3RhdGljIGludCBza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHR1bmlvbiB2bXhfZXhpdF9yZWFzb24gZXhpdF9yZWFzb24gPSB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpO1xuK1x0dW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uID0gdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpO1xuIFx0dW5zaWduZWQgbG9uZyByaXAsIG9yaWdfcmlwO1xuIFx0dTMyIGluc3RyX2xlbjtcbiBcbkBAIC00NDI0LDcgKzQ0MjQsNyBAQCBzdGF0aWMgaW50IHZteF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgdmVjdG9yKVxuIFx0aWYgKCF2Y3B1LVx1MDAzZWFyY2guYXBpYy1cdTAwM2VhcGljdl9hY3RpdmUpXG4gXHRcdHJldHVybiAtMTtcbiBcbi1cdF9fdm14X2RlbGl2ZXJfcG9zdGVkX2ludGVycnVwdCh2Y3B1LCBcdTAwMjZ2dC1cdTAwM2VwaV9kZXNjLCB2ZWN0b3IpO1xuK1x0X192dF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHQodmNwdSwgXHUwMDI2dnQtXHUwMDNlcGlfZGVzYywgdmVjdG9yKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC01Mzc5LDE1ICs1Mzc5LDkgQEAgYm9vbCB2bXhfZ3Vlc3RfaW5qZWN0X2FjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdCAgICAgICAoa3ZtX2dldF9yZmxhZ3ModmNwdSkgXHUwMDI2IFg4Nl9FRkxBR1NfQUMpO1xuIH1cbiBcbi1zdGF0aWMgYm9vbCBpc194ZmRfbm1fZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLXtcbi1cdHJldHVybiB2Y3B1LVx1MDAzZWFyY2guZ3Vlc3RfZnB1LmZwc3RhdGUtXHUwMDNleGZkIFx1MDAyNlx1MDAyNlxuLVx0ICAgICAgICFrdm1faXNfY3IwX2JpdF9zZXQodmNwdSwgWDg2X0NSMF9UUyk7XG4tfVxuLVxuIHN0YXRpYyBpbnQgdm14X2hhbmRsZV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGVycm9yX2NvZGUpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBjcjIgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbitcdHVuc2lnbmVkIGxvbmcgY3IyID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcbiBcdGlmICh2Y3B1LVx1MDAzZWFyY2guYXBmLmhvc3RfYXBmX2ZsYWdzKVxuIFx0XHRnb3RvIGhhbmRsZV9wZjtcbkBAIC01NDM1LDcgKzU0MjksNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9leGNlcHRpb25fbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHUzMiB2ZWN0X2luZm87XG4gXG4gXHR2ZWN0X2luZm8gPSB2bXgtXHUwMDNlaWR0X3ZlY3RvcmluZ19pbmZvO1xuLVx0aW50cl9pbmZvID0gdm14X2dldF9pbnRyX2luZm8odmNwdSk7XG4rXHRpbnRyX2luZm8gPSB2dF9nZXRfaW50cl9pbmZvKHZjcHUpO1xuIFxuIFx0LypcbiBcdCAqIE1hY2hpbmUgY2hlY2tzIGFyZSBoYW5kbGVkIGJ5IGhhbmRsZV9leGNlcHRpb25faXJxb2ZmKCksIG9yIGJ5XG5AQCAtNTUxNiw3ICs1NTEwLDcgQEAgc3RhdGljIGludCBoYW5kbGVfZXhjZXB0aW9uX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHRzd2l0Y2ggKGV4X25vKSB7XG4gXHRjYXNlIERCX1ZFQ1RPUjpcbi1cdFx0ZHI2ID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4rXHRcdGRyNiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXHRcdGlmICghKHZjcHUtXHUwMDNlZ3Vlc3RfZGVidWcgXHUwMDI2XG4gXHRcdCAgICAgIChLVk1fR1VFU1REQkdfU0lOR0xFU1RFUCB8IEtWTV9HVUVTVERCR19VU0VfSFdfQlApKSkge1xuIFx0XHRcdC8qXG5AQCAtNTU5Miw3ICs1NTg2LDcgQEAgc3RhdGljIGludCBoYW5kbGVfaW8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aW50IHNpemUsIGluLCBzdHJpbmc7XG4gXHR1bnNpZ25lZCBwb3J0O1xuIFxuLVx0ZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4rXHRleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFx0c3RyaW5nID0gKGV4aXRfcXVhbGlmaWNhdGlvbiBcdTAwMjYgMTYpICE9IDA7XG4gXG4gXHQrK3ZjcHUtXHUwMDNlc3RhdC5pb19leGl0cztcbkBAIC01NjgxLDcgKzU2NzUsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpbnQgZXJyO1xuIFx0aW50IHJldDtcbiBcbi1cdGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuK1x0ZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdGNyID0gZXhpdF9xdWFsaWZpY2F0aW9uIFx1MDAyNiAxNTtcbiBcdHJlZyA9IChleGl0X3F1YWxpZmljYXRpb24gXHUwMDNlXHUwMDNlIDgpIFx1MDAyNiAxNTtcbiBcdHN3aXRjaCAoKGV4aXRfcXVhbGlmaWNhdGlvbiBcdTAwM2VcdTAwM2UgNCkgXHUwMDI2IDMpIHtcbkBAIC01NzU5LDcgKzU3NTMsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9kcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpbnQgZHIsIGRyNywgcmVnO1xuIFx0aW50IGVyciA9IDE7XG4gXG4tXHRleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbitcdGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXHRkciA9IGV4aXRfcXVhbGlmaWNhdGlvbiBcdTAwMjYgREVCVUdfUkVHX0FDQ0VTU19OVU07XG4gXG4gXHQvKiBGaXJzdCwgaWYgRFIgZG9lcyBub3QgZXhpc3QsIHRyaWdnZXIgVUQgKi9cbkBAIC01ODU1LDcgKzU4NDksNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9pbnRlcnJ1cHRfd2luZG93KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBzdGF0aWMgaW50IGhhbmRsZV9pbnZscGcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4rXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXG4gXHRrdm1fbW11X2ludmxwZyh2Y3B1LCBleGl0X3F1YWxpZmljYXRpb24pO1xuIFx0cmV0dXJuIGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xuQEAgLTU4NjQsNyArNTg1OCw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2ludmxwZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gc3RhdGljIGludCBoYW5kbGVfYXBpY19hY2Nlc3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdGlmIChsaWtlbHkoZmFzdGVvaSkpIHtcbi1cdFx0dW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbitcdFx0dW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFx0XHRpbnQgYWNjZXNzX3R5cGUsIG9mZnNldDtcbiBcbiBcdFx0YWNjZXNzX3R5cGUgPSBleGl0X3F1YWxpZmljYXRpb24gXHUwMDI2IEFQSUNfQUNDRVNTX1RZUEU7XG5AQCAtNTg4NSw3ICs1ODc5LDcgQEAgc3RhdGljIGludCBoYW5kbGVfYXBpY19hY2Nlc3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIHN0YXRpYyBpbnQgaGFuZGxlX2FwaWNfZW9pX2luZHVjZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4rXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXHRpbnQgdmVjdG9yID0gZXhpdF9xdWFsaWZpY2F0aW9uIFx1MDAyNiAweGZmO1xuIFxuIFx0LyogRU9JLWluZHVjZWQgVk0gZXhpdCBpcyB0cmFwLWxpa2UgYW5kIHRodXMgbm8gbmVlZCB0byBhZGp1c3QgSVAgKi9cbkBAIC01ODk1LDcgKzU4ODksNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9hcGljX2VvaV9pbmR1Y2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBzdGF0aWMgaW50IGhhbmRsZV9hcGljX3dyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuK1x0dW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFxuIFx0LypcbiBcdCAqIEFQSUMtd3JpdGUgVk0tRXhpdCBpcyB0cmFwLWxpa2UsIEtWTSBkb2Vzbid0IG5lZWQgdG8gYWR2YW5jZSBSSVAgYW5kXG5AQCAtNTkyMyw3ICs1OTE3LDcgQEAgc3RhdGljIGludCBoYW5kbGVfdGFza19zd2l0Y2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWR0X2luZGV4ID0gKHZteC1cdTAwM2VpZHRfdmVjdG9yaW5nX2luZm8gXHUwMDI2IFZFQ1RPUklOR19JTkZPX1ZFQ1RPUl9NQVNLKTtcbiBcdHR5cGUgPSAodm14LVx1MDAzZWlkdF92ZWN0b3JpbmdfaW5mbyBcdTAwMjYgVkVDVE9SSU5HX0lORk9fVFlQRV9NQVNLKTtcbiBcbi1cdGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuK1x0ZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcbiBcdHJlYXNvbiA9ICh1MzIpZXhpdF9xdWFsaWZpY2F0aW9uIFx1MDAzZVx1MDAzZSAzMDtcbiBcdGlmIChyZWFzb24gPT0gVEFTS19TV0lUQ0hfR0FURSBcdTAwMjZcdTAwMjYgaWR0X3YpIHtcbkBAIC01OTY5LDcgKzU5NjMsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV90YXNrX3N3aXRjaChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gc3RhdGljIGludCBoYW5kbGVfZXB0X3Zpb2xhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbitcdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdGdwYV90IGdwYTtcbiBcbiBcdC8qXG5AQCAtNTk5Nyw3ICs1OTkxLDcgQEAgc3RhdGljIGludCBoYW5kbGVfZXB0X3Zpb2xhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAodW5saWtlbHkoYWxsb3dfc21hbGxlcl9tYXhwaHlhZGRyIFx1MDAyNlx1MDAyNiAha3ZtX3ZjcHVfaXNfbGVnYWxfZ3BhKHZjcHUsIGdwYSkpKVxuIFx0XHRyZXR1cm4ga3ZtX2VtdWxhdGVfaW5zdHJ1Y3Rpb24odmNwdSwgMCk7XG4gXG4tXHRyZXR1cm4gX192bXhfaGFuZGxlX2VwdF92aW9sYXRpb24odmNwdSwgZ3BhLCBleGl0X3F1YWxpZmljYXRpb24pO1xuK1x0cmV0dXJuIF9fdnRfaGFuZGxlX2VwdF92aW9sYXRpb24odmNwdSwgZ3BhLCBleGl0X3F1YWxpZmljYXRpb24pO1xuIH1cbiBcbiBzdGF0aWMgaW50IGhhbmRsZV9lcHRfbWlzY29uZmlnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbkBAIC02MTYwLDcgKzYxNTQsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9pbnZwY2lkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdC8qIEFjY29yZGluZyB0byB0aGUgSW50ZWwgaW5zdHJ1Y3Rpb24gcmVmZXJlbmNlLCB0aGUgbWVtb3J5IG9wZXJhbmRcbiBcdCAqIGlzIHJlYWQgZXZlbiBpZiBpdCBpc24ndCBuZWVkZWQgKGUuZy4sIGZvciB0eXBlPT1hbGwpXG4gXHQgKi9cbi1cdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxuK1x0aWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KSxcbiBcdFx0XHRcdHZteF9pbnN0cnVjdGlvbl9pbmZvLCBmYWxzZSxcbiBcdFx0XHRcdHNpemVvZihvcGVyYW5kKSwgXHUwMDI2Z3ZhKSlcbiBcdFx0cmV0dXJuIDE7XG5AQCAtNjE3NCw3ICs2MTY4LDcgQEAgc3RhdGljIGludCBoYW5kbGVfcG1sX2Z1bGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIFx0dHJhY2Vfa3ZtX3BtbF9mdWxsKHZjcHUtXHUwMDNldmNwdV9pZCk7XG4gXG4tXHRleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbitcdGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXG4gXHQvKlxuIFx0ICogUE1MIGJ1ZmZlciBGVUxMIGhhcHBlbmVkIHdoaWxlIGV4ZWN1dGluZyBpcmV0IGZyb20gTk1JLFxuQEAgLTYyNzgsNyArNjI3Miw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gc3RhdGljIGludCBoYW5kbGVfbm90aWZ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuK1x0dW5zaWduZWQgbG9uZyBleGl0X3F1YWwgPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFx0Ym9vbCBjb250ZXh0X2ludmFsaWQgPSBleGl0X3F1YWwgXHUwMDI2IE5PVElGWV9WTV9DT05URVhUX0lOVkFMSUQ7XG4gXG4gXHQrK3ZjcHUtXHUwMDNlc3RhdC5ub3RpZnlfd2luZG93X2V4aXRzO1xuQEAgLTYzMDksMTMgKzYzMDMsMTMgQEAgc3RhdGljIGludCB2bXhfZ2V0X21zcl9pbW1fcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBzdGF0aWMgaW50IGhhbmRsZV9yZG1zcl9pbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHJldHVybiBrdm1fZW11bGF0ZV9yZG1zcl9pbW0odmNwdSwgdm14X2dldF9leGl0X3F1YWwodmNwdSksXG4rXHRyZXR1cm4ga3ZtX2VtdWxhdGVfcmRtc3JfaW1tKHZjcHUsIHZ0X2dldF9leGl0X3F1YWwodmNwdSksXG4gXHRcdFx0XHQgICAgIHZteF9nZXRfbXNyX2ltbV9yZWcodmNwdSkpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGhhbmRsZV93cm1zcl9pbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHJldHVybiBrdm1fZW11bGF0ZV93cm1zcl9pbW0odmNwdSwgdm14X2dldF9leGl0X3F1YWwodmNwdSksXG4rXHRyZXR1cm4ga3ZtX2VtdWxhdGVfd3Jtc3JfaW1tKHZjcHUsIHZ0X2dldF9leGl0X3F1YWwodmNwdSksXG4gXHRcdFx0XHQgICAgIHZteF9nZXRfbXNyX2ltbV9yZWcodmNwdSkpO1xuIH1cbiBcbkBAIC02MzkyLDEwICs2Mzg2LDEwIEBAIHZvaWQgdm14X2dldF9leGl0X2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgKnJlYXNvbixcbiBcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xuIFxuIFx0KnJlYXNvbiA9IHZteC1cdTAwM2V2dC5leGl0X3JlYXNvbi5mdWxsO1xuLVx0KmluZm8xID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4rXHQqaW5mbzEgPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFx0aWYgKCEodm14LVx1MDAzZXZ0LmV4aXRfcmVhc29uLmZhaWxlZF92bWVudHJ5KSkge1xuIFx0XHQqaW5mbzIgPSB2bXgtXHUwMDNlaWR0X3ZlY3RvcmluZ19pbmZvO1xuLVx0XHQqaW50cl9pbmZvID0gdm14X2dldF9pbnRyX2luZm8odmNwdSk7XG4rXHRcdCppbnRyX2luZm8gPSB2dF9nZXRfaW50cl9pbmZvKHZjcHUpO1xuIFx0XHRpZiAoaXNfZXhjZXB0aW9uX3dpdGhfZXJyb3JfY29kZSgqaW50cl9pbmZvKSlcbiBcdFx0XHQqZXJyb3JfY29kZSA9IHZtY3NfcmVhZDMyKFZNX0VYSVRfSU5UUl9FUlJPUl9DT0RFKTtcbiBcdFx0ZWxzZVxuQEAgLTY3MDYsNyArNjcwMCw3IEBAIHZvaWQgZHVtcF92bWNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBzdGF0aWMgaW50IF9fdm14X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xuLVx0dW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uID0gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KTtcbitcdHVuaW9uIHZteF9leGl0X3JlYXNvbiBleGl0X3JlYXNvbiA9IHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KTtcbiBcdHUzMiB2ZWN0b3JpbmdfaW5mbyA9IHZteC1cdTAwM2VpZHRfdmVjdG9yaW5nX2luZm87XG4gXHR1MTYgZXhpdF9oYW5kbGVyX2luZGV4O1xuIFxuQEAgLTY4NzAsNyArNjg2NCw3IEBAIGludCB2bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpXG4gXHQgKiBFeGl0IHRvIHVzZXIgc3BhY2Ugd2hlbiBidXMgbG9jayBkZXRlY3RlZCB0byBpbmZvcm0gdGhhdCB0aGVyZSBpc1xuIFx0ICogYSBidXMgbG9jayBpbiBndWVzdC5cbiBcdCAqL1xuLVx0aWYgKHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYnVzX2xvY2tfZGV0ZWN0ZWQpIHtcbitcdGlmICh2dF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYnVzX2xvY2tfZGV0ZWN0ZWQpIHtcbiBcdFx0aWYgKHJldCBcdTAwM2UgMClcbiBcdFx0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX1g4Nl9CVVNfTE9DSztcbiBcbkBAIC03MTQzLDc0ICs3MTM3LDYgQEAgdm9pZCB2bXhfbG9hZF9lb2lfZXhpdG1hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqZW9pX2V4aXRfYml0bWFwKVxuIFx0dm1jc193cml0ZTY0KEVPSV9FWElUX0JJVE1BUDMsIGVvaV9leGl0X2JpdG1hcFszXSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGhhbmRsZV9ubV9mYXVsdF9pcnFvZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLXtcbi1cdC8qXG4tXHQgKiBTYXZlIHhmZF9lcnIgdG8gZ3Vlc3RfZnB1IGJlZm9yZSBpbnRlcnJ1cHQgaXMgZW5hYmxlZCwgc28gdGhlXG4tXHQgKiBNU1IgdmFsdWUgaXMgbm90IGNsb2JiZXJlZCBieSB0aGUgaG9zdCBhY3Rpdml0eSBiZWZvcmUgdGhlIGd1ZXN0XG4tXHQgKiBoYXMgY2hhbmNlIHRvIGNvbnN1bWUgaXQuXG4tXHQgKlxuLVx0ICogVXBkYXRlIHRoZSBndWVzdCdzIFhGRF9FUlIgaWYgYW5kIG9ubHkgaWYgWEZEIGlzIGVuYWJsZWQsIGFzIHRoZSAjTk1cbi1cdCAqIGludGVyY2VwdGlvbiBtYXkgaGF2ZSBiZWVuIGNhdXNlZCBieSBMMSBpbnRlcmNlcHRpb24uICBQZXIgdGhlIFNETSxcbi1cdCAqIFhGRF9FUlIgaXMgbm90IG1vZGlmaWVkIGZvciBub24tWEZEICNOTSwgaS5lLiBpZiBDUjAuVFM9MS5cbi1cdCAqXG4tXHQgKiBOb3RlLCBYRkRfRVJSIGlzIHVwZGF0ZWQgX2JlZm9yZV8gdGhlICNOTSBpbnRlcmNlcHRpb24gY2hlY2ssIGkuZS5cbi1cdCAqIHVubGlrZSBDUjIgYW5kIERSNiwgdGhlIHZhbHVlIGlzIG5vdCBhIHBheWxvYWQgdGhhdCBpcyBhdHRhY2hlZCB0b1xuLVx0ICogdGhlICNOTSBleGNlcHRpb24uXG4tXHQgKi9cbi1cdGlmIChpc194ZmRfbm1fZmF1bHQodmNwdSkpXG4tXHRcdHJkbXNycShNU1JfSUEzMl9YRkRfRVJSLCB2Y3B1LVx1MDAzZWFyY2guZ3Vlc3RfZnB1LnhmZF9lcnIpO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBoYW5kbGVfZXhjZXB0aW9uX2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBpbnRyX2luZm8pXG4te1xuLVx0LyogaWYgZXhpdCBkdWUgdG8gUEYgY2hlY2sgZm9yIGFzeW5jIFBGICovXG4tXHRpZiAoaXNfcGFnZV9mYXVsdChpbnRyX2luZm8pKVxuLVx0XHR2Y3B1LVx1MDAzZWFyY2guYXBmLmhvc3RfYXBmX2ZsYWdzID0ga3ZtX3JlYWRfYW5kX3Jlc2V0X2FwZl9mbGFncygpO1xuLVx0LyogaWYgZXhpdCBkdWUgdG8gTk0sIGhhbmRsZSBiZWZvcmUgaW50ZXJydXB0cyBhcmUgZW5hYmxlZCAqL1xuLVx0ZWxzZSBpZiAoaXNfbm1fZmF1bHQoaW50cl9pbmZvKSlcbi1cdFx0aGFuZGxlX25tX2ZhdWx0X2lycW9mZih2Y3B1KTtcbi1cdC8qIEhhbmRsZSBtYWNoaW5lIGNoZWNrcyBiZWZvcmUgaW50ZXJydXB0cyBhcmUgZW5hYmxlZCAqL1xuLVx0ZWxzZSBpZiAoaXNfbWFjaGluZV9jaGVjayhpbnRyX2luZm8pKVxuLVx0XHRrdm1fbWFjaGluZV9jaGVjaygpO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBoYW5kbGVfZXh0ZXJuYWxfaW50ZXJydXB0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tXHRcdFx0XHRcdCAgICAgdTMyIGludHJfaW5mbylcbi17XG4tXHR1bnNpZ25lZCBpbnQgdmVjdG9yID0gaW50cl9pbmZvIFx1MDAyNiBJTlRSX0lORk9fVkVDVE9SX01BU0s7XG4tXG4tXHRpZiAoS1ZNX0JVRyghaXNfZXh0ZXJuYWxfaW50cihpbnRyX2luZm8pLCB2Y3B1LVx1MDAzZWt2bSxcbi1cdCAgICBcInVuZXhwZWN0ZWQgVk0tRXhpdCBpbnRlcnJ1cHQgaW5mbzogMHgleFwiLCBpbnRyX2luZm8pKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRrdm1fYmVmb3JlX2ludGVycnVwdCh2Y3B1LCBLVk1fSEFORExJTkdfSVJRKTtcbi1cdHg4Nl9lbnRyeV9mcm9tX2t2bShFVkVOVF9UWVBFX0VYVElOVCwgdmVjdG9yKTtcbi1cdGt2bV9hZnRlcl9pbnRlcnJ1cHQodmNwdSk7XG4tXG4tXHR2Y3B1LVx1MDAzZWFyY2guYXRfaW5zdHJ1Y3Rpb25fYm91bmRhcnkgPSB0cnVlO1xuLX1cbi1cbi12b2lkIHZteF9oYW5kbGVfZXhpdF9pcnFvZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLXtcbi1cdGlmICh0b192dCh2Y3B1KS1cdTAwM2VlbXVsYXRpb25fcmVxdWlyZWQpXG4tXHRcdHJldHVybjtcbi1cbi1cdHN3aXRjaCAodm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYykge1xuLVx0Y2FzZSBFWElUX1JFQVNPTl9FWFRFUk5BTF9JTlRFUlJVUFQ6XG4tXHRcdGhhbmRsZV9leHRlcm5hbF9pbnRlcnJ1cHRfaXJxb2ZmKHZjcHUsIHZteF9nZXRfaW50cl9pbmZvKHZjcHUpKTtcbi1cdFx0YnJlYWs7XG4tXHRjYXNlIEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUk6XG4tXHRcdGhhbmRsZV9leGNlcHRpb25faXJxb2ZmKHZjcHUsIHZteF9nZXRfaW50cl9pbmZvKHZjcHUpKTtcbi1cdFx0YnJlYWs7XG4tXHRjYXNlIEVYSVRfUkVBU09OX01DRV9EVVJJTkdfVk1FTlRSWTpcbi1cdFx0a3ZtX21hY2hpbmVfY2hlY2soKTtcbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHRicmVhaztcbi1cdH1cbi19XG4tXG4gLypcbiAgKiBUaGUga3ZtIHBhcmFtZXRlciBjYW4gYmUgTlVMTCAobW9kdWxlIGluaXRpYWxpemF0aW9uLCBvciBpbnZvY2F0aW9uIGJlZm9yZVxuICAqIFZNIGNyZWF0aW9uKS4gQmUgc3VyZSB0byBjaGVjayB0aGUga3ZtIHBhcmFtZXRlciBiZWZvcmUgdXNpbmcgaXQuXG5AQCAtNzI1MCw3ICs3MTc2LDcgQEAgc3RhdGljIHZvaWQgdm14X3JlY292ZXJfbm1pX2Jsb2NraW5nKHN0cnVjdCB2Y3B1X3ZteCAqdm14KVxuIFx0XHRpZiAodm14LVx1MDAzZWxvYWRlZF92bWNzLVx1MDAzZW5taV9rbm93bl91bm1hc2tlZClcbiBcdFx0XHRyZXR1cm47XG4gXG4tXHRcdGV4aXRfaW50cl9pbmZvID0gdm14X2dldF9pbnRyX2luZm8oXHUwMDI2dm14LVx1MDAzZXZjcHUpO1xuK1x0XHRleGl0X2ludHJfaW5mbyA9IHZ0X2dldF9pbnRyX2luZm8oXHUwMDI2dm14LVx1MDAzZXZjcHUpO1xuIFx0XHR1bmJsb2NrX25taSA9IChleGl0X2ludHJfaW5mbyBcdTAwMjYgSU5UUl9JTkZPX1VOQkxPQ0tfTk1JKSAhPSAwO1xuIFx0XHR2ZWN0b3IgPSBleGl0X2ludHJfaW5mbyBcdTAwMjYgSU5UUl9JTkZPX1ZFQ1RPUl9NQVNLO1xuIFx0XHQvKlxuQEAgLTc0MTcsMTQgKzczNDMsMTQgQEAgc3RhdGljIGZhc3RwYXRoX3Qgdm14X2V4aXRfaGFuZGxlcnNfZmFzdHBhdGgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0ICogdGhlIGZhc3RwYXRoIGV2ZW4sIGFsbCBvdGhlciBleGl0cyBtdXN0IHVzZSB0aGUgc2xvdyBwYXRoLlxuIFx0ICovXG4gXHRpZiAoaXNfZ3Vlc3RfbW9kZSh2Y3B1KSBcdTAwMjZcdTAwMjZcbi1cdCAgICB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljICE9IEVYSVRfUkVBU09OX1BSRUVNUFRJT05fVElNRVIpXG4rXHQgICAgdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljICE9IEVYSVRfUkVBU09OX1BSRUVNUFRJT05fVElNRVIpXG4gXHRcdHJldHVybiBFWElUX0ZBU1RQQVRIX05PTkU7XG4gXG4tXHRzd2l0Y2ggKHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMpIHtcbitcdHN3aXRjaCAodnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljKSB7XG4gXHRjYXNlIEVYSVRfUkVBU09OX01TUl9XUklURTpcbiBcdFx0cmV0dXJuIGhhbmRsZV9mYXN0cGF0aF93cm1zcih2Y3B1KTtcbiBcdGNhc2UgRVhJVF9SRUFTT05fTVNSX1dSSVRFX0lNTTpcbi1cdFx0cmV0dXJuIGhhbmRsZV9mYXN0cGF0aF93cm1zcl9pbW0odmNwdSwgdm14X2dldF9leGl0X3F1YWwodmNwdSksXG4rXHRcdHJldHVybiBoYW5kbGVfZmFzdHBhdGhfd3Jtc3JfaW1tKHZjcHUsIHZ0X2dldF9leGl0X3F1YWwodmNwdSksXG4gXHRcdFx0XHRcdFx0IHZteF9nZXRfbXNyX2ltbV9yZWcodmNwdSkpO1xuIFx0Y2FzZSBFWElUX1JFQVNPTl9QUkVFTVBUSU9OX1RJTUVSOlxuIFx0XHRyZXR1cm4gaGFuZGxlX2Zhc3RwYXRoX3ByZWVtcHRpb25fdGltZXIodmNwdSwgZm9yY2VfaW1tZWRpYXRlX2V4aXQpO1xuQEAgLTc0MzcsMTcgKzczNjMsNiBAQCBzdGF0aWMgZmFzdHBhdGhfdCB2bXhfZXhpdF9oYW5kbGVyc19mYXN0cGF0aChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHR9XG4gfVxuIFxuLW5vaW5zdHIgdm9pZCB2bXhfaGFuZGxlX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4te1xuLVx0aWYgKCh1MTYpdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYyAhPSBFWElUX1JFQVNPTl9FWENFUFRJT05fTk1JIHx8XG4tXHQgICAgIWlzX25taSh2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KSkpXG4tXHRcdHJldHVybjtcbi1cbi1cdGt2bV9iZWZvcmVfaW50ZXJydXB0KHZjcHUsIEtWTV9IQU5ETElOR19OTUkpO1xuLVx0eDg2X2VudHJ5X2Zyb21fa3ZtKEVWRU5UX1RZUEVfTk1JLCBOTUlfVkVDVE9SKTtcbi1cdGt2bV9hZnRlcl9pbnRlcnJ1cHQodmNwdSk7XG4tfVxuLVxuIHN0YXRpYyBub2luc3RyIHZvaWQgdm14X3ZjcHVfZW50ZXJfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRcdFx0XHRcdHVuc2lnbmVkIGludCBmbGFncylcbiB7XG5AQCAtNzQ3NywxMCArNzM5MiwxMCBAQCBzdGF0aWMgbm9pbnN0ciB2b2lkIHZteF92Y3B1X2VudGVyX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0fVxuIFxuIFx0dm14LVx1MDAzZXZ0LmV4aXRfcmVhc29uLmZ1bGwgPSB2bWNzX3JlYWQzMihWTV9FWElUX1JFQVNPTik7XG4tXHRpZiAobGlrZWx5KCF2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5KSlcbitcdGlmIChsaWtlbHkoIXZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mYWlsZWRfdm1lbnRyeSkpXG4gXHRcdHZteC1cdTAwM2VpZHRfdmVjdG9yaW5nX2luZm8gPSB2bWNzX3JlYWQzMihJRFRfVkVDVE9SSU5HX0lORk9fRklFTEQpO1xuIFxuLVx0dm14X2hhbmRsZV9ubWkodmNwdSk7XG4rXHR2dF9oYW5kbGVfbm1pKHZjcHUpO1xuIFxuIG91dDpcbiBcdGd1ZXN0X3N0YXRlX2V4aXRfaXJxb2ZmKCk7XG5AQCAtNzYxNyw3ICs3NTMyLDcgQEAgZmFzdHBhdGhfdCB2bXhfdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcnVuX2ZsYWdzKVxuIFx0XHQgKiBjaGVja2luZy5cbiBcdFx0ICovXG4gXHRcdGlmICh2Y3B1LVx1MDAzZWFyY2gubmVzdGVkX3J1bl9wZW5kaW5nIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIXZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkpXG4rXHRcdCAgICAhdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5KVxuIFx0XHRcdCsrdmNwdS1cdTAwM2VzdGF0Lm5lc3RlZF9ydW47XG4gXG4gXHRcdHZjcHUtXHUwMDNlYXJjaC5uZXN0ZWRfcnVuX3BlbmRpbmcgPSAwO1xuQEAgLTc2MjgsNyArNzU0Myw3IEBAIGZhc3RwYXRoX3Qgdm14X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncylcbiBcbiBcdHRyYWNlX2t2bV9leGl0KHZjcHUsIEtWTV9JU0FfVk1YKTtcbiBcbi1cdGlmICh1bmxpa2VseSh2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5KSlcbitcdGlmICh1bmxpa2VseSh2dF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkpKVxuIFx0XHRyZXR1cm4gRVhJVF9GQVNUUEFUSF9OT05FO1xuIFxuIFx0dm14LVx1MDAzZWxvYWRlZF92bWNzLVx1MDAzZWxhdW5jaGVkID0gMTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oIGIvYXJjaC94ODYva3ZtL3ZteC92bXguaFxuaW5kZXggZGM4NTE3ZjE1YmM0Ni4uMzI0N2I1NWIzNDg0MyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmhcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmhcbkBAIC0zMDQsNDMgKzMwNCw2IEBAIHN0cnVjdCBrdm1fdm14IHtcbiBcdHU2NCAqcGlkX3RhYmxlO1xuIH07XG4gXG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSBzdHJ1Y3QgdmNwdV92dCAqdG9fdnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLXtcbi1cdHJldHVybiBcdTAwMjYoY29udGFpbmVyX29mKHZjcHUsIHN0cnVjdCB2Y3B1X3ZteCwgdmNwdSktXHUwMDNldnQpO1xuLX1cbi1cbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHN0cnVjdCBrdm1fdmNwdSAqdnRfdG9fdmNwdShzdHJ1Y3QgdmNwdV92dCAqdnQpXG4te1xuLVx0cmV0dXJuIFx1MDAyNihjb250YWluZXJfb2YodnQsIHN0cnVjdCB2Y3B1X3ZteCwgdnQpLVx1MDAzZXZjcHUpO1xuLX1cbi1cbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHVuaW9uIHZteF9leGl0X3JlYXNvbiB2bXhfZ2V0X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi17XG4tXHRyZXR1cm4gdG9fdnQodmNwdSktXHUwMDNlZXhpdF9yZWFzb247XG4tfVxuLVxuLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgbG9uZyB2bXhfZ2V0X2V4aXRfcXVhbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4te1xuLVx0c3RydWN0IHZjcHVfdnQgKnZ0ID0gdG9fdnQodmNwdSk7XG4tXG4tXHRpZiAoIWt2bV9yZWdpc3Rlcl90ZXN0X2FuZF9tYXJrX2F2YWlsYWJsZSh2Y3B1LCBWQ1BVX1JFR19FWElUX0lORk9fMSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgIVdBUk5fT05fT05DRShpc190ZF92Y3B1KHZjcHUpKSlcbi1cdFx0dnQtXHUwMDNlZXhpdF9xdWFsaWZpY2F0aW9uID0gdm1jc19yZWFkbChFWElUX1FVQUxJRklDQVRJT04pO1xuLVxuLVx0cmV0dXJuIHZ0LVx1MDAzZWV4aXRfcXVhbGlmaWNhdGlvbjtcbi19XG4tXG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdm14X2dldF9pbnRyX2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLXtcbi1cdHN0cnVjdCB2Y3B1X3Z0ICp2dCA9IHRvX3Z0KHZjcHUpO1xuLVxuLVx0aWYgKCFrdm1fcmVnaXN0ZXJfdGVzdF9hbmRfbWFya19hdmFpbGFibGUodmNwdSwgVkNQVV9SRUdfRVhJVF9JTkZPXzIpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICFXQVJOX09OX09OQ0UoaXNfdGRfdmNwdSh2Y3B1KSkpXG4tXHRcdHZ0LVx1MDAzZWV4aXRfaW50cl9pbmZvID0gdm1jc19yZWFkMzIoVk1fRVhJVF9JTlRSX0lORk8pO1xuLVxuLVx0cmV0dXJuIHZ0LVx1MDAzZWV4aXRfaW50cl9pbmZvO1xuLX1cbi1cbiB2b2lkIHZteF92Y3B1X2xvYWRfdm1jcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpO1xuIGludCBhbGxvY2F0ZV92cGlkKHZvaWQpO1xuIHZvaWQgZnJlZV92cGlkKGludCB2cGlkKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaCBiL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oXG5pbmRleCAwNTRmZDE0YmIyZTE2Li43YWMwMmM2ODQ1N2YxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmhcbisrKyBiL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oXG5AQCAtMjcsNyArMjcsNiBAQCB2b2lkIHZteF92Y3B1X3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBpbml0X2V2ZW50KTtcbiB2b2lkIHZteF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTtcbiB2b2lkIHZteF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGludCB2bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpO1xuLXZvaWQgdm14X2hhbmRsZV9leGl0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGludCB2bXhfc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQgdm14X3VwZGF0ZV9lbXVsYXRlZF9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGJvb2wgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjI0OjI0LjM4NDk3OTMzNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY3MTMxNTI1ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoaXMgS1ZNIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIFRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LCB3aGljaCBpcyBleHBlY3RlZC4gVGhlIGZvY3VzIGlzIGNsZWFybHkgb24gdGhlIEtWTSBJbnRlbC9WTVggY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBURFggKFRydXN0ZWQgRG9tYWluIEV4dGVuc2lvbnMpIGludGVncmF0aW9uLCBnaXZlbiB0aGUgZmlsZXMgYmVpbmcgdG91Y2hlZDogYGNvbW1vbi5oYCwgYG1haW4uY2AsIGBuZXN0ZWQuY2AsIGBwb3N0ZWRfaW50ci5jYCwgYHBvc3RlZF9pbnRyLmhgLCBgdGR4LmNgLCBgdm14LmNgLCBgdm14LmhgLCBhbmQgYHg4Nl9vcHMuaGAuXG5cbkZpcnN0IGdsYW5jZSwgaXQgbG9va3MgbGlrZSBhIHJlZmFjdG9yaW5nIGFuZCBURFggaW50ZWdyYXRpb24gZWZmb3J0LiBMZXQgbWUgYnJlYWsgZG93biB3aGF0IHRoZSBwYXRjaCBpcyBkb2luZzpcblxuMS4gIEEgbmV3IGBzdHJ1Y3QgdmNwdV92bXhfdGR4YCBpcyBpbnRyb2R1Y2VkIGluIGBjb21tb24uaGAsIGFuZCB0aGUgYHRvX3Z0YCBhbmQgYHZ0X3RvX3ZjcHVgIG1hY3JvcyBhcmUgZGVmaW5lZCB1c2luZyBpdC4gVGhpcyBsaWtlbHkgdGllcyBURFgtc3BlY2lmaWMgZGF0YSBvciBmdW5jdGlvbnMgdG8gdGhlIGV4aXN0aW5nIEtWTSBWTVggc3RydWN0dXJlLiBTZWVtcyBsaWtlIGEgY29tbW9uIHBhdHRlcm4gZm9yIGFkZGluZyBhIGxheWVyLlxuMi4gIEtleSBmdW5jdGlvbnMsIGB2bXhfZ2V0X2V4aXRfcmVhc29uYCwgYHZteF9nZXRfZXhpdF9xdWFsYCwgYW5kIGB2bXhfZ2V0X2ludHJfaW5mb2AgYXJlIHJlbmFtZWQgdG8gYHZ0X2AgcHJlZml4ZWQgdmVyc2lvbnMgYW5kIG1vdmVkIHRvIGBjb21tb24uaGAuIFRoaXMgaXMgbGlrZWx5IHRvIGVzdGFibGlzaCBhIGNvbW1vbiBBUEksIHBvc3NpYmx5IHRvIGJlIHVzZWQgYmV0d2VlbiBWTVggYW5kIFREWCBjb2RlIHBhdGhzLlxuMy4gIFNpbWlsYXIgcmVuYW1pbmcgYW5kLCBwb3RlbnRpYWxseSwgcmVvcmdhbml6YXRpb24gb2Ygc2V2ZXJhbCBoYW5kbGVyIGZ1bmN0aW9ucyAoYF9fdm14X2hhbmRsZV9lcHRfdmlvbGF0aW9uYCwgZXRjLikgYWxzbyBoYXBwZW5zLiBUaGUgYHZteF9gIHByZWZpeCBpcyBjb25zaXN0ZW50bHkgY2hhbmdlZCB0byBgdnRfYCwgc3VnZ2VzdGluZyBhIGNsZWFyIHRyYW5zaXRpb24gdG8gYSBtb3JlIGdlbmVyaWMgb3IgVERYLXNwZWNpZmljIGludGVyZmFjZS5cbjQuICBNb3JlIGZ1bmN0aW9uIG1vdmVzISBUaGUgaGFuZGxlciBmdW5jdGlvbnMgYGhhbmRsZV9ubV9mYXVsdF9pcnFvZmZgLCBgaGFuZGxlX2V4Y2VwdGlvbl9pcnFvZmZgLCBgaGFuZGxlX2V4dGVybmFsX2ludGVycnVwdF9pcnFvZmZgLCBgdnRfaGFuZGxlX2V4aXRfaXJxb2ZmYCwgYW5kIGB2dF9oYW5kbGVfbm1pYCBhcmUgbW92ZWQgZnJvbSBgdm14LmNgIHRvIGBtYWluLmNgLCBhbmQgaG9vayB0aGUgIGB2dF9oYW5kbGVfZXhpdF9pcnFvZmZgIGludG8gYHZ0X3g4Nl9vcHMuaGFuZGxlX2V4aXRfaXJxb2ZmYC4gVGhpcyBpcyBhIGNsYXNzaWMgcmVmYWN0b3JpbmcgcGF0dGVybiBhbmQgcG90ZW50aWFsbHkgaXNvbGF0ZXMgdGhlIFREWC1zcGVjaWZpYyBoYW5kbGVyJ3MgaW1wbGVtZW50YXRpb24uXG41LiAgRnVuY3Rpb25zIGluIGBwb3N0ZWRfaW50ci5jYCBhcmUgYWxzbyBnZXR0aW5nIHRoZSBgdnRfYCB0cmVhdG1lbnQuIFRoaXMgc3VnZ2VzdHMgbW9kaWZpY2F0aW9ucyB0byB0aGUgcG9zdGVkIGludGVycnVwdCBoYW5kbGluZywgcG9zc2libHkgdG8gYmV0dGVyIHN1cHBvcnQgVERYJ3MgaW50ZXJydXB0IGRlbGl2ZXJ5IG1lY2hhbmlzbXMsIGlmIFREWCBldmVuIGhhcyBwb3N0ZWQgaW50ZXJydXB0cy5cbjYuICBUaGUgY3J1Y2lhbCBzdGVwOiBhbGwgY2FsbGVycyB3aXRoaW4gYHZteC5jYCwgYHRkeC5jYCwgYW5kIGBuZXN0ZWQuY2AgYXJlIHVwZGF0ZWQgdG8gdXNlIHRoZSBuZXcgYHZ0XypgIGZ1bmN0aW9ucy4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gdmVyaWZ5IHRoZSBjaGFuZ2VzIGRvbid0IGJyZWFrIGZ1bmN0aW9uYWxpdHkuXG43LiAgUHJhZ21hIEdDQyBwb2lzb24gaXMgYmVpbmcgdXNlZCB0byBlbmZvcmNlIGFuIGFic3RyYWN0aW9uIGJvdW5kYXJ5LiBOaWNlISBUaGlzIG1ha2VzIHRoZSByZWZhY3RvcmluZyBtb3JlIHJvYnVzdCBhbmQgY2xlYXIuXG44LiAgVGhlIHN0YXRpYyBhc3NlcnRpb24gYG9mZnNldG9mKHN0cnVjdCB2Y3B1X3ZteF90ZHgsIHZ0KSA9PSBvZmZzZXRvZihzdHJ1Y3QgdmNwdV92bXgsIHZ0KWAgaXMgaW50ZXJlc3RpbmcuIFRoaXMgaXMgYSBiaXQgb2YgYSBzYW5pdHkgY2hlY2s7IGl0IHNlZW1zIHRoZSBgdnRgIG1lbWJlciBvZiB0aGUgYHZjcHVfdm14X3RkeGAgc3RydWN0IG5lZWRzIHRvIGJlIGF0IHRoZSBzYW1lIG9mZnNldCBhcyBpbiB0aGUgZXhpc3RpbmcgYHZjcHVfdm14YCBzdHJ1Y3QsIGxpa2VseSByZWxhdGVkIHRvIGhvdyB0aGUgY29kZSBhY2Nlc3NlcyBhbmQgdXNlcyB0aGUgZmllbGRzLlxuXG4qKlJlYWNoYWJpbGl0eSBhbmQgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBpcyB0aGlzIGNvZGUgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nIG9uIGFtZDY0PyBBYnNvbHV0ZWx5LiBLVk0gaXMgYSAqY3JpdGljYWwqIHBpZWNlIG9mIHRoZSB2aXJ0dWFsaXphdGlvbiBpbmZyYXN0cnVjdHVyZSBvbiB4ODYvYW1kNjQgTGludXggYW5kIGlzIGhlYXZpbHkgZnV6emVkIGJ5IHRvb2xzIGxpa2Ugc3l6a2FsbGVyIHZpYSBgL2Rldi9rdm1gLiBUaGlzIGluY2x1ZGVzIHRoZSBpb2N0bCBjYWxscyBsaWtlIGBLVk1fUlVOYCwgYEtWTV9DUkVBVEVfVk1gLCBhbmQgYEtWTV9DUkVBVEVfVkNQVWAsIHdoaWNoIGlzIG5lc3RlZCB2aXJ0dWFsaXphdGlvbi4gSW50ZWwgVk1YIGlzIGFsc28gcmVsZXZhbnQuIEdpdmVuIHRoZSBmb2N1cyBvbiBURFgsIHRoaXMgaXMgcHJvYmFibHkgd29ydGggYSBmdXp6aW5nIGNhbXBhaWduIHRvIGNvdmVyIG5ldyBjb2RlIHBhdGhzLiBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyBmb3IgS1ZNIGFuZCBLVk1fSU5URUwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5Nzk1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODg0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDk6MjQ6MzEuMDk4MTM2MjFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE3NTk5NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9JTlRFTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9ODM9Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOToyNDozMS4xNzk5MDE4NDZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTYwMzQ3MDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgS1ZNX0lOVEVMIERlcGVuZGVuY2llcyBpbiBLY29uZmlnKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgYGFyY2gveDg2L2t2bS9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgS1ZNX0lOVEVMYCBvcHRpb24uIEkgd2FudCB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVudGFsIG1hcCBvZiBob3cgdGhpcyBpcyBhbGwgd2lyZWQgdG9nZXRoZXIuIEknbSBsb29raW5nIGZvciB0aGUgdXN1YWwgc3VzcGVjdHM6IGFueSBkaXJlY3QgZGVwZW5kZW5jaWVzLCBvZiBjb3Vyc2UuIEJ1dCBJJ20gYWxzbyBpbnRlcmVzdGVkIGluIGluZGlyZWN0IGRlcGVuZGVuY2llcyDigJMgdGhpbmdzIHRoYXQgbWlnaHQgYmUgZW5hYmxlZCBvciBkaXNhYmxlZCAqYmVjYXVzZSogYEtWTV9JTlRFTGAgaXMgc2VsZWN0ZWQuIFdoYXQgb3RoZXIgZmVhdHVyZXMgb3IgZHJpdmVycyBhcmUgY29udGluZ2VudCBvbiBJbnRlbCB2aXJ0dWFsaXphdGlvbiBzdXBwb3J0PyBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIGNvbmZpZ3VyYXRpb24gaW1wYWN0LCBwYXJ0aWN1bGFybHkgd2l0aCBhbGwgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgYW55IHJlbGF0ZWQgY2hhbmdlcy4gQmFzaWNhbGx5LCBJIGFtIHRoaW5raW5nIHRocm91Z2ggdGhlIEtjb25maWcgYW5kIGl0cyBjb25uZWN0aW9ucyB0byB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUsIHJlYWR5IHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTg3OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjI0OjMzLjE0MDI1Mjg4M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjAxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA5MDpcXHRcXHQgIHByb3RlY3RlZCBWTXMgYXJlIHB1cmVseSBhIGRldmVsb3BtZW50IGFuZCB0ZXN0aW5nIHZlaGljbGUgZm9yXFxuICA5MTpcXHRcXHQgIEtWTV9DUkVBVEVfR1VFU1RfTUVNRkQuICBBdHRlbXB0aW5nIHRvIHJ1biBhIFxcXCJyZWFsXFxcIiBWTSB3b3JrbG9hZCBhcyBhXFxuICA5MjpcXHRcXHQgIHNvZnR3YXJlLXByb3RlY3RlZCBWTSB3aWxsIGZhaWwgbWlzZXJhYmx5LlxcbiAgOTM6XFx0XFxuICA5NDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFxcXCJOXFxcIi5cXG4gIDk1OlxcdFxcbiAgOTY6XFx0Y29uZmlnIEtWTV9JTlRFTFxcbiAgOTc6XFx0XFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuICA5ODpcXHRcXHRkZXBlbmRzIG9uIEtWTSBcXHUwMDI2XFx1MDAyNiBJQTMyX0ZFQVRfQ1RMXFxuICA5OTpcXHRcXHRzZWxlY3QgWDg2X0ZSRUQgaWYgWDg2XzY0XFxuIDEwMDpcXHRcXHRoZWxwXFxuIDEwMTpcXHRcXHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIEtWTSBvbiBwcm9jZXNzb3JzIGVxdWlwcGVkIHdpdGggSW50ZWwncyBWVFxcbiAxMDI6XFx0XFx0ICBleHRlbnNpb25zLCBhLmsuYS4gVmlydHVhbCBNYWNoaW5lIEV4dGVuc2lvbnMgKFZNWCkuXFxuIDEwMzpcXHRcXG4gMTA0OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuIDEwNTpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIGt2bS1pbnRlbC5cXG4gMTA2OlxcdFxcbiAxMDc6XFx0Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbiAxMDg6XFx0ICAgICAgICBib29sIFxcXCJDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1xcXCJcXG4gMTA5OlxcdCAgICAgICAgZGVwZW5kcyBvbiBLVk1fSU5URUwgXFx1MDAyNlxcdTAwMjYgRVhQRVJUXFxuIDExMDpcXHQgICAgICAgIGhlbHBcXG4gMTExOlxcdCAgICAgICAgICBDaGVja3MgdGhhdCBLVk0ncyBwYWdlIHRhYmxlIG1hbmFnZW1lbnQgY29kZSB3aWxsIG5vdCBpbmNvcnJlY3RseVxcbiAxMTI6XFx0ICAgICAgICAgIGxldCBndWVzdHMgcmVjZWl2ZSBhIHZpcnR1YWxpemF0aW9uIGV4Y2VwdGlvbi4gIFZpcnR1YWxpemF0aW9uXFxuIDExMzpcXHQgICAgICAgICAgZXhjZXB0aW9ucyB3aWxsIGJlIHRyYXBwZWQgYnkgdGhlIGh5cGVydmlzb3IgcmF0aGVyIHRoYW4gaW5qZWN0ZWRcXG4gMTE0OlxcdCAgICAgICAgICBpbiB0aGUgZ3Vlc3QuXFxuIDExNTpcXHRcXG4gMTE2OlxcdCAgICAgICAgICBOb3RlOiBzb21lIENQVXMgYXBwZWFyIHRvIGdlbmVyYXRlIHNwdXJpb3VzIEVQVCBWaW9sYXRpb25zICNWRXNcXG4gMTE3OlxcdCAgICAgICAgICB0aGF0IHRyaWdnZXIgS1ZNJ3MgV0FSTiwgaW4gcGFydGljdWxhciB3aXRoIGVwdGFkPTAgYW5kL29yIG5lc3RlZFxcbiAxMTg6XFx0ICAgICAgICAgIHZpcnR1YWxpemF0aW9uLlxcbiAxMTk6XFx0XFxuIDEyMDpcXHQgICAgICAgICAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMTIxOlxcdFxcbiAxMjI6XFx0Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuIDEyMzpcXHRcXHRib29sIFxcXCJTb2Z0d2FyZSBHdWFyZCBlWHRlbnNpb25zIChTR1gpIFZpcnR1YWxpemF0aW9uXFxcIlxcbiAxMjQ6XFx0XFx0ZGVwZW5kcyBvbiBYODZfU0dYIFxcdTAwMjZcXHUwMDI2IEtWTV9JTlRFTFxcbiAxMjU6XFx0XFx0aGVscFxcbiAxMjY6XFx0XFxuIDEyNzpcXHRcXHQgIEVuYWJsZXMgS1ZNIGd1ZXN0cyB0byBjcmVhdGUgU0dYIGVuY2xhdmVzLlxcbiAxMjg6XFx0XFxuIDEyOTpcXHRcXHQgIFRoaXMgaW5jbHVkZXMgc3VwcG9ydCB0byBleHBvc2UgXFxcInJhd1xcXCIgdW5yZWNsYWltYWJsZSBlbmNsYXZlIG1lbW9yeSB0b1xcbiAxMzA6XFx0XFx0ICBndWVzdHMgdmlhIGEgZGV2aWNlIG5vZGUsIGUuZy4gL2Rldi9zZ3hfdmVwYy5cXG4gMTMxOlxcdFxcbiAxMzI6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAxMzM6XFx0XFxuIDEzNDpcXHRjb25maWcgS1ZNX0lOVEVMX1REWFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOToyNDozMy4xNDAzNjczODNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTA1NDIyNTkzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogS1ZNIEludGVsIFZpcnR1YWxpemF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlIHRhcmdldCBpcyByZWFjaGFibGUuIEkgc2VlIHdlJ3JlIGxvb2tpbmcgYXQgYENPTkZJR19LVk1gIGFuZCBgQ09ORklHX0tWTV9JTlRFTGAuIEdvb2QsIGBLVk1fSU5URUxgIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlOyBJIGtub3cgZnJvbSBleHBlcmllbmNlLCBzcGVjaWZpY2FsbHkgc3l6a2FsbGVyIGZ1enppbmcgZW52aXJvbm1lbnRzIG9uIHg4Nl82NCwgdGhhdCBpdCdzIGFjY2Vzc2libGUuIFNvIHRoYXQncyBhIHBvc2l0aXZlIHN0YXJ0aW5nIHBvaW50LlxuXG5Ob3csIHRpbWUgZm9yIHRoZSBjb3JlIHF1ZXN0aW9uOiAqaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyogSSdsbCBhcHBseSB0aGUgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIGNyaXRlcmlhLiBUaGUgcG9zaXRpdmUgc2lkZSBpcyB3aGF0IEkgYW0gcmVhbGx5IGludGVyZXN0ZWQgaW4uIFRoaXMgcGF0Y2ggdG91Y2hlcyB0aGUgY29yZSBzdWJzeXN0ZW1zIChoeXBlcnZpc29yIC8gS1ZNKSwgYW5kIHdoYXQncyBtb3JlLCBpdOKAmXMgYSBjb2RlIHJlZmFjdG9yaW5nLiBUaGlzIGFsb25lIHJhaXNlcyBhIGZsYWcuIFdlJ3JlIG5vdCBqdXN0IGxvb2tpbmcgYXQgYSBzaW1wbGUgZnVuY3Rpb25hbCBjaGFuZ2Ugb3IgY2xlYW51cC4gVGhlIGF1dGhvcuKAmXMgaW50ZW50aW9ucyBhcmUgc2Vjb25kYXJ5OyBJIGFsd2F5cyBmdXp6ICpyZWZhY3RvcmVkKiBjb2RlLCByZWdhcmRsZXNzIG9mIHRoZWlyIGNsYWltcy4gQ2hhbmdlcyBpbiBsb2dpYywgaGVscGVyIGZ1bmN0aW9uIGludHJvZHVjdGlvbnMsIG9yIHN0YXRlIG1hbmFnZW1lbnQsICplc3BlY2lhbGx5KiBpbiBjb3JlIGFyZWFzLCBhcmUgcHJpbWUgYnVnLWh1bnRpbmcgZ3JvdW5kcy4gQW5kLCBvZiBjb3Vyc2UsIHRoZSBtb2RpZmllZCBjb2RlIGlzIGluIGBhcmNoL3g4Ni9rdm0vdm14L2AsIHdoaWNoIGlzIGRpcmVjdGx5IHJlbGF0ZWQgdG8gS1ZNIEludGVsIHZpcnR1YWxpemF0aW9uIHN1cHBvcnQuXG5cblRoZXJlZm9yZSwgdGhlIGFuc3dlciBpcyBhIHJlc291bmRpbmcgKnllcyosIGBXb3J0aEZ1enppbmcgPSB0cnVlYC5cblxuQWxyaWdodCwgd2l0aCB0aGF0IGVzdGFibGlzaGVkLCBsZXQncyBkZWZpbmUgb3VyIGZvY3VzLiBJdCdzIHRpbWUgdG8gaWRlbnRpZnkgdGhlIGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AuIEknbGwgYW5hbHl6ZSB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFuZCBlbnRyeSBwb2ludHMuIEkgaGF2ZSBhIGxpc3Qgb2YgdGhvc2UgZnJvbSB0aGUgdmFyaW91cyBmaWxlcy5cblxuSW4gYGFyY2gveDg2L2t2bS92bXgvbWFpbi5jYDogSSBzZWUgYHZ0X2hhbmRsZV9leGl0X2lycW9mZmAsIGB2dF9oYW5kbGVfbm1pYCwgYGhhbmRsZV9ubV9mYXVsdF9pcnFvZmZgLCBgaGFuZGxlX2V4Y2VwdGlvbl9pcnFvZmZgLCBhbmQgYGhhbmRsZV9leHRlcm5hbF9pbnRlcnJ1cHRfaXJxb2ZmYC5cblxuSW4gYGFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuY2A6IEknbGwgbG9vayBhdCBgdnRfdmNwdV9waV9sb2FkYCwgYHZ0X3ZjcHVfcGlfcHV0YCwgYHZ0X3BpX3N0YXJ0X2J5cGFzc2AsIGFuZCBgdnRfcGlfdXBkYXRlX2lydGVgLlxuXG5gYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaGAgaXMgbmV4dDogSGVyZSwgYHZ0X2dldF9leGl0X3JlYXNvbmAsIGB2dF9nZXRfZXhpdF9xdWFsYCwgYHZ0X2dldF9pbnRyX2luZm9gLCBgX192dF9oYW5kbGVfZXB0X3Zpb2xhdGlvbmAsIGFuZCBgX192dF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHRgIGFyZSBwb3RlbnRpYWwgYXJlYXMgb2YgaW50ZXJlc3QuXG5cbmBhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jYCBpcyBleHRlbnNpdmU6IEknbGwgaW5jbHVkZSBgbmVzdGVkX2VwdF9pbmplY3RfcGFnZV9mYXVsdGAsIGBwcmVwYXJlX3ZtY3MxMmAsIGBuZXN0ZWRfdm14X2dldF92bXB0cmAsIGBoYW5kbGVfdm1yZWFkYCwgYGhhbmRsZV92bXdyaXRlYCwgYGhhbmRsZV92bXB0cmxkYCwgYGhhbmRsZV92bXB0cnN0YCwgYGhhbmRsZV9pbnZlcHRgLCBgaGFuZGxlX2ludnZwaWRgLCBgaGFuZGxlX3ZtZnVuY2AsIGBuZXN0ZWRfdm14X2V4aXRfaGFuZGxlZF9pb2AsIGBuZXN0ZWRfdm14X2V4aXRfaGFuZGxlZF9tc3JgLCBgbmVzdGVkX3ZteF9leGl0X2hhbmRsZWRfY3JgLCBgbmVzdGVkX3ZteF9sMF93YW50c19leGl0YCwgYG5lc3RlZF92bXhfbDFfd2FudHNfZXhpdGAsIGFuZCBgbmVzdGVkX3ZteF9yZWZsZWN0X3ZtZXhpdGAuXG5cbkxhc3RseSwgaW4gYGFyY2gveDg2L2t2bS92bXgvdm14LmNgOiBJJ2xsIGhhdmUgdG8gY29uc2lkZXIgYHZteF9oYW5kbGVfZXhpdGAsIGBfX3ZteF9oYW5kbGVfZXhpdGAsIGB2bXhfdmNwdV9ydW5gLCBgdm14X3ZjcHVfbG9hZGAsIGB2bXhfdmNwdV9wdXRgLCBgaGFuZGxlX2V4Y2VwdGlvbl9ubWlgLCBgaGFuZGxlX2VwdF92aW9sYXRpb25gLCBgaGFuZGxlX2lvYCwgYGhhbmRsZV9jcmAsIGBoYW5kbGVfZHJgLCBgaGFuZGxlX2ludmxwZ2AsIGBoYW5kbGVfYXBpY19hY2Nlc3NgLCBgaGFuZGxlX2FwaWNfZW9pX2luZHVjZWRgLCBgaGFuZGxlX2FwaWNfd3JpdGVgLCBgaGFuZGxlX3Rhc2tfc3dpdGNoYCwgYGhhbmRsZV9pbnZwY2lkYCwgYGhhbmRsZV9wbWxfZnVsbGAsIGBoYW5kbGVfbm90aWZ5YCwgYGhhbmRsZV9yZG1zcl9pbW1gLCBgaGFuZGxlX3dybXNyX2ltbWAsIGB2bXhfZ2V0X2V4aXRfaW5mb2AsIGB2bXhfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0YCwgYW5kIGBza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uYC5cblxuTm93LCBJJ2xsIG5lZWQgdG8gbmFycm93IHRoZXNlIGRvd24gdG8gdGhlIG5vbi1zdGF0aWMgc3ltYm9scyBvciwgdGhvc2UgYWNjZXNzaWJsZSBvdXRzaWRlIHRoZWlyIGRlZmluZWQgZmlsZXMsIHRoYXQgYXJlIGluIHZtbGludXgva3ZtLWludGVsLmtvLiBBZnRlciBjaGVja2luZyBgYXJjaC94ODYva3ZtL3ZteC9tYWluLmNgIGFuZCBgYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfXG5cbiIsIklucHV0VG9rZW5zIjoyMjg0OCwiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOToyNDo1Mi4xOTQ1OTU2NzFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg5MzYyNzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiKHZ0X3ZjcHVfcGlffHZ0X2hhbmRsZV9ubWl8dnRfcGlfKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vdm14XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvY29tbW9uLmg9MjE3PXN0YXRpYyBpbmxpbmUgdm9pZCBfX3Z0X2RlbGl2ZXJfcG9zdGVkX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTIzNS1cXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oOjIzNjpub2luc3RyIHZvaWQgdnRfaGFuZGxlX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmgtMjM3LVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9OTMyPXN0YXRpYyB2b2lkIHZ0X2hhbmRsZV9leGl0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy05NTEtXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6OTUyOm5vaW5zdHIgdm9pZCB2dF9oYW5kbGVfbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy05NTMte1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9OTcyPXN0cnVjdCBrdm1feDg2X29wcyB2dF94ODZfb3BzIF9faW5pdGRhdGEgPSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMDkwLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjEwOTE6XFx0LnBpX3VwZGF0ZV9pcnRlID0gdnRfcGlfdXBkYXRlX2lydGUsXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTA5MjpcXHQucGlfc3RhcnRfYnlwYXNzID0gdnRfcGlfc3RhcnRfYnlwYXNzLFxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwOTMtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmM9NDU9c3RhdGljIGludCBwaV90cnlfc2V0X2NvbnRyb2woc3RydWN0IHBpX2Rlc2MgKnBpX2Rlc2MsIHU2NCAqcG9sZCwgdTY0IG5ldylcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYy01OC1cXG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmM6NTk6dm9pZCB2dF92Y3B1X3BpX2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KVxcbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYy02MC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmM9MTQ5PXN0YXRpYyBib29sIHZ0X2Nhbl91c2VfdnRkX3BpKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYy0xNTItXFx0ICogTm90ZSwgcmVhZGluZyB0aGUgbnVtYmVyIG9mIHBvc3NpYmxlIGJ5cGFzcyBJUlFzIGNhbiByYWNlIHdpdGggYVxcbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYzoxNTM6XFx0ICogYnlwYXNzIElSUSBiZWluZyBhdHRhY2hlZCB0byB0aGUgVk0uICB2dF9waV9zdGFydF9ieXBhc3MoKSBlbnN1cmVzXFxuYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5jLTE1NC1cXHQgKiBibG9ja25nIHZDUFVzIHdpbGwgc2VlIGFuIGVsZXZhdGVkIGNvdW50IG9yIGdldCBLVk1fUkVRX1VOQkxPQ0suXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmM9MjExPXN0YXRpYyBib29sIHZ0X25lZWRzX3BpX3dha2V1cChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmMtMjI0LVxcbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYzoyMjU6dm9pZCB2dF92Y3B1X3BpX3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5jLTIyNi17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmM9Mjg1PWJvb2wgcGlfaGFzX3BlbmRpbmdfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYy0yOTYtICogYmxvY2tpbmcgdkNQVXMgbWF5IHNjaGVkdWxlZCBvdXQgd2l0aG91dCByZWNvbmZpZ3VyaW5nIFBJRC5OViB0byB0aGUgd2FrZXVwXFxuYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5jOjI5NzogKiB2ZWN0b3IsIGkuZS4gaWYgdGhlIGJ5cGFzcyBJUlEgY2FtZSBhbG9uZyBhZnRlciB2dF92Y3B1X3BpX3B1dCgpLlxcbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYy0yOTgtICovXFxuYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5jOjI5OTp2b2lkIHZ0X3BpX3N0YXJ0X2J5cGFzcyhzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5jLTMwMC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmMtMzA2LVxcbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYzozMDc6aW50IHZ0X3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuYy0zMDgtXFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBob3N0X2lycSwgdWludDMyX3QgZ3Vlc3RfaXJxLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5oLTEwLVxcbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuaDoxMTp2b2lkIHZ0X3ZjcHVfcGlfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpO1xcbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuaDoxMjp2b2lkIHZ0X3ZjcHVfcGlfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5oLTEzLXZvaWQgcGlfd2FrZXVwX2hhbmRsZXIodm9pZCk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmg9MTY9Ym9vbCBwaV9oYXNfcGVuZGluZ19pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmg6MTc6aW50IHZ0X3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuaC0xOC1cXHRcXHQgICAgICAgdW5zaWduZWQgaW50IGhvc3RfaXJxLCB1aW50MzJfdCBndWVzdF9pcnEsXFxuYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5oLTE5LVxcdFxcdCAgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2ZWN0b3IpO1xcbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuaDoyMDp2b2lkIHZ0X3BpX3N0YXJ0X2J5cGFzcyhzdHJ1Y3Qga3ZtICprdm0pO1xcbmFyY2gveDg2L2t2bS92bXgvcG9zdGVkX2ludHIuaC0yMS1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9NzE1PXZvaWQgdGR4X3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTcxOC1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjcxOTpcXHR2dF92Y3B1X3BpX2xvYWQodmNwdSwgY3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTcyMC1cXHRpZiAodmNwdS1cXHUwMDNlY3B1ID09IGNwdSB8fCAhaXNfaGtpZF9hc3NpZ25lZCh0b19rdm1fdGR4KHZjcHUtXFx1MDAzZWt2bSkpKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz04Mjc9dm9pZCB0ZHhfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtODI4LXtcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjgyOTpcXHR2dF92Y3B1X3BpX3B1dCh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTgzMC1cXHR0ZHhfcHJlcGFyZV9zd2l0Y2hfdG9faG9zdCh2Y3B1KTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9OTYxPXN0YXRpYyBub2luc3RyIHZvaWQgdGR4X3ZjcHVfZW50ZXJfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTk3Ni1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjk3NzpcXHR2dF9oYW5kbGVfbm1pKHZjcHUpO1xcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtOTc4LVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYz0xNTczPXZvaWQgdm14X3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTE1NzktXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzoxNTgwOlxcdHZ0X3ZjcHVfcGlfbG9hZCh2Y3B1LCBjcHUpO1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtMTU4MS19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTE1ODM9dm9pZCB2bXhfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtMTU4NC17XFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzoxNTg1OlxcdHZ0X3ZjcHVfcGlfcHV0KHZjcHUpO1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtMTU4Ni1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NzM2Nj1zdGF0aWMgbm9pbnN0ciB2b2lkIHZteF92Y3B1X2VudGVyX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy03Mzk3LVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NzM5ODpcXHR2dF9oYW5kbGVfbm1pKHZjcHUpO1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNzM5OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDk6MjQ6NTIuMjczNTM1Njk3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzMyOTcyNjY2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBLVk0gQ29uZmlndXJhdGlvbiBmb3IgRm9jdXMgU3ltYm9scyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIEtWTSBjb25maWd1cmF0aW9uIHJlbGV2YW50IHRvIGEgc3BlY2lmaWMgc2V0IG9mIGZ1bmN0aW9ucywgd2hpY2ggSSdsbCBjYWxsIHRoZSBgRm9jdXNTeW1ib2xzYC4gRmlyc3QsIEknbGwgZGVmaW5lIHRob3NlIHN5bWJvbHM6IGB2dF9oYW5kbGVfZXhpdF9pcnFvZmZgLCBgdnRfaGFuZGxlX25taWAsIGB2dF92Y3B1X3BpX2xvYWRgLCBgdnRfdmNwdV9waV9wdXRgLCBgdnRfcGlfc3RhcnRfYnlwYXNzYCwgYHZ0X3BpX3VwZGF0ZV9pcnRlYCwgYHZteF9oYW5kbGVfZXhpdGAsIGB2bXhfdmNwdV9ydW5gLCBhbmQgYG5lc3RlZF92bXhfcmVmbGVjdF92bWV4aXRgLiBOb3csIEkgbmVlZCB0byByZWxhdGUgdGhlc2Ugc3ltYm9scyB0byByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuXG5OZXh0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGBFbmFibGVDb25maWdzYC4gSSdsbCBzdGFydCBieSBjaGVja2luZyBmb3IgdGhlIHByZXNlbmNlIG9mIGBLVk1gIGFuZCBgS1ZNX0lOVEVMYC4gU2luY2UgdGhpcyBlbnZpcm9ubWVudCAqbWlnaHQqIGluY2x1ZGUgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMsIG9yIFREWCwgSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IGBLVk1fSU5URUxfVERYYC4gSXQncyBpbXBvcnRhbnQgdG8gcmVjb2duaXplIHRoYXQgYEtWTV9JTlRFTGAgaXMgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiwgYW5kIGBLVk1fSU5URUxfVERYYCBpcyBjb250aW5nZW50IG9uIGl0LCBpZiBpdCBpcyBlbmFibGVkLiBTbywgSSB3aWxsIGNoZWNrIGZvciB0aGVzZSBvcHRpb25zIGluIHRoZSBkZWZpbmVkIG9yZGVyLlxuXG5Ob3csIEkgbmVlZCB0byBleHBsaWNpdGx5IHZlcmlmeSB0aGUgZGVwZW5kZW5jeSBvZiBgS1ZNX0lOVEVMX1REWGAgb24gYEtWTV9JTlRFTGAuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgYEtWTV9JTlRFTF9URFhgIGFjdHVhbGx5ICpyZXF1aXJlcyogYEtWTV9JTlRFTGAgdG8gYmUgZW5hYmxlZC4gSSdsbCBuZWVkIHRvIGxvY2F0ZSB0aGlzIGRlcGVuZGVuY3kgd2l0aGluIHRoZSBLY29uZmlnIGZpbGUsIHNwZWNpZmljYWxseSBgYXJjaC94ODYva3ZtL0tjb25maWdgLiBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIGxpbmUgMTM0IGluIHRoZSBLY29uZmlnIGZpbGUgdG8gc2VlIHRoZSBkZXRhaWxzIG9mIHRoZSBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NjUxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjI0OjU1LjYwMzI2NTg2NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjE1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTMzLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTMzOlxcdFxcbiAxMzQ6XFx0Y29uZmlnIEtWTV9JTlRFTF9URFhcXG4gMTM1OlxcdFxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuIDEzNjpcXHRcXHRkZWZhdWx0IHlcXG4gMTM3OlxcdFxcdGRlcGVuZHMgb24gSU5URUxfVERYX0hPU1RcXG4gMTM4OlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbiAxMzk6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxcbiAxNDA6XFx0XFx0aGVscFxcbiAxNDE6XFx0XFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBsYXVuY2hpbmcgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWClcXG4gMTQyOlxcdFxcdCAgY29uZmlkZW50aWFsIFZNcyBvbiBJbnRlbCBwcm9jZXNzb3JzLlxcbiAxNDM6XFx0XFxuIDE0NDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDE0NTpcXHRcXG4gMTQ2OlxcdGNvbmZpZyBLVk1fQU1EXFxuIDE0NzpcXHRcXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbiAxNDg6XFx0XFx0ZGVwZW5kcyBvbiBLVk0gXFx1MDAyNlxcdTAwMjYgKENQVV9TVVBfQU1EIHx8IENQVV9TVVBfSFlHT04pXFxuIDE0OTpcXHRcXHRoZWxwXFxuIDE1MDpcXHRcXHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIEtWTSBvbiBBTUQgcHJvY2Vzc29ycyBlcXVpcHBlZCB3aXRoIHRoZSBBTUQtVlxcbiAxNTE6XFx0XFx0ICAoU1ZNKSBleHRlbnNpb25zLlxcbiAxNTI6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjI0OjU1LjYwMzM5MDA1NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjM1MzEyNTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEtWTS9URFggQ29uZmlndXJhdGlvbiBDaGVjayoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBjb3JlIEtWTSBJbnRlbCBkcml2ZXIgY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5IGBLVk1fSU5URUxgLCB3aGljaCwgb2YgY291cnNlLCByZWxpZXMgb24gdGhlIGJyb2FkZXIgYEtWTWAgc3Vic3lzdGVtLiBBbmQsIEkgc2VlIHRoYXQgd2UgYXJlIGRlYWxpbmcgd2l0aCBgSU5URUxfVERYX0hPU1RgIGFuZCBgS1ZNX0lOVEVMX1REWGAsIHNvIHRoaXMgaXMgZGVmaW5pdGVseSByZWxhdGVkIHRvIFREWC5cblxuTGV0J3MgcXVpY2tseSBydW4gYSBjaGVjayB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBhcyBleHBlY3RlZC4gSSBzZWUgYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIHRydWUsIGdvb2QhIEFuZCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgaXMgZXhhY3RseSB3aGF0IEkgYW50aWNpcGF0ZTogYFwiS1ZNXCJgIGFuZCBgXCJLVk1fSU5URUxcImAuIFBlcmZlY3QuXG5cbk5vdywgbGV0J3MgZXhhbWluZSB0aGUgYEZvY3VzU3ltYm9sc2AuIFRoZXNlIHNlZW0gc3BvdC1vbi4gSSdtIHNlZWluZyBmdW5jdGlvbnMgcmVsYXRlZCB0byBoYW5kbGluZyB2aXJ0dWFsIHRlcm1pbmFsIGV4aXRzIGluIGEgZmV3IGRpZmZlcmVudCBzdGF0ZXM6IGB2dF9oYW5kbGVfZXhpdF9pcnFvZmZgLCBgdnRfaGFuZGxlX25taWAsIHBvc3RlZCBpbnRlcnJ1cHQgZnVuY3Rpb25zIChgdnRfdmNwdV9waV9sb2FkYCwgYHZ0X3ZjcHVfcGlfcHV0YCwgYHZ0X3BpX3N0YXJ0X2J5cGFzc2AsIGB2dF9waV91cGRhdGVfaXJ0ZWApLCBhbmQgYSBnb29kIGxvb2sgYXQgYHZteF9oYW5kbGVfZXhpdGAgYW5kIGB2bXhfdmNwdV9ydW5gIGFzIHdlbGwgYXMgYG5lc3RlZF92bXhfcmVmbGVjdF92bWV4aXRgLiBZZXAsIHRoaXMgYWxsIGxpbmVzIHVwIHdpdGggd2hhdCBJJ2QgZXhwZWN0IGdpdmVuIHRoZSBjb250ZXh0IOKAkyB3ZSdyZSBsb29raW5nIGF0IHBvdGVudGlhbGx5IHJlZmFjdG9yaW5nIGNvbW1vbiBWTVggYW5kIFREWCB2aXJ0dWFsIHRlcm1pbmFsIGhhbmRsaW5nLCBleGl0IGhhbmRsaW5nIHdpdGggaXJxb2ZmLCBwb3N0ZWQgaW50ZXJydXB0IGZ1bmN0aW9ucywgYW5kIGV4aXQgcmVhc29uL3F1YWxpZmljYXRpb24gYWNjZXNzb3JzIGluIEtWTSBJbnRlbC5cblxuTG9va3MgbGlrZSBldmVyeXRoaW5nIGlzIGV4YWN0bHkgd2hlcmUgaXQgbmVlZHMgdG8gYmUsIHNvIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC4gRG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg2NDgsIk91dHB1dFRva2VucyI6MTk5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDk6MjQ6NTkuMjM4NzA2MTUxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1MzIyNDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZ0X2hhbmRsZV9leGl0X2lycW9mZlwiLFxuICAgIFwidnRfaGFuZGxlX25taVwiLFxuICAgIFwidnRfdmNwdV9waV9sb2FkXCIsXG4gICAgXCJ2dF92Y3B1X3BpX3B1dFwiLFxuICAgIFwidnRfcGlfc3RhcnRfYnlwYXNzXCIsXG4gICAgXCJ2dF9waV91cGRhdGVfaXJ0ZVwiLFxuICAgIFwidm14X2hhbmRsZV9leGl0XCIsXG4gICAgXCJ2bXhfdmNwdV9ydW5cIixcbiAgICBcIm5lc3RlZF92bXhfcmVmbGVjdF92bWV4aXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgS1ZNIEludGVsIChWTVgvVERYKSB2aXJ0dWFsaXphdGlvbiBsb2dpYyBieSBjb25zb2xpZGF0aW5nIGV4aXQgc3RhdHVzIGhhbmRsaW5nLCBleGl0IElSUS1vZmYgcHJvY2Vzc2luZywgcG9zdGVkIGludGVycnVwdCBoZWxwZXJzLCBhbmQgVk1DUyBleGl0IHF1YWxpZmljYXRpb24gYWNjZXNzb3JzIHVuZGVyIGNvbW1vbiB2dF8qIGFic3RyYWN0aW9ucy4gVGhpcyBhZmZlY3RzIGNvcmUgS1ZNIFZNIGV4aXQgaGFuZGxpbmcgYW5kIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiByZWFjaGFibGUgb24gYW1kNjQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2dF9oYW5kbGVfZXhpdF9pcnFvZmZcIixcbiAgICBcInZ0X2hhbmRsZV9ubWlcIixcbiAgICBcInZ0X3ZjcHVfcGlfbG9hZFwiLFxuICAgIFwidnRfdmNwdV9waV9wdXRcIixcbiAgICBcInZ0X3BpX3N0YXJ0X2J5cGFzc1wiLFxuICAgIFwidnRfcGlfdXBkYXRlX2lydGVcIixcbiAgICBcInZteF9oYW5kbGVfZXhpdFwiLFxuICAgIFwidm14X3ZjcHVfcnVuXCIsXG4gICAgXCJuZXN0ZWRfdm14X3JlZmxlY3Rfdm1leGl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIEtWTSBJbnRlbCAoVk1YL1REWCkgdmlydHVhbGl6YXRpb24gbG9naWMgYnkgY29uc29saWRhdGluZyBleGl0IHN0YXR1cyBoYW5kbGluZywgZXhpdCBJUlEtb2ZmIHByb2Nlc3NpbmcsIHBvc3RlZCBpbnRlcnJ1cHQgaGVscGVycywgYW5kIFZNQ1MgZXhpdCBxdWFsaWZpY2F0aW9uIGFjY2Vzc29ycyB1bmRlciBjb21tb24gdnRfKiBhYnN0cmFjdGlvbnMuIFRoaXMgYWZmZWN0cyBjb3JlIEtWTSBWTSBleGl0IGhhbmRsaW5nIGFuZCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gcmVhY2hhYmxlIG9uIGFtZDY0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOToyNDo1OS4zNzQwMzU2MDVaIiwiU2VxIjoxMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzQ4OTI0MjUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDk6MjQ6NTkuMzc0NTAyNjQ1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTA3NDg0NTE3MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIGEgcmVmYWN0b3Jpbmcgb2YgS1ZNIEludGVsIFZNWCBhbmQgVERYIGNvZGUgdG8gY29uc29saWRhdGUgY29tbW9uIHZpcnR1YWxpemF0aW9uIGluZnJhc3RydWN0dXJlIChWVCkgYmV0d2VlbiBzdGFuZGFyZCBWTVggYW5kIFREWCB2Q1BVczpcXG4xLiBJdCBkZWZpbmVzIGEgY29tbW9uIHdyYXBwZXIgbGF5b3V0IGBzdHJ1Y3QgdmNwdV92bXhfdGR4YCB3aXRoIGNvbXBpbGUtdGltZSBhc3NlcnRpb25zIChgc3RhdGljX2Fzc2VydGApIGVuc3VyaW5nIG9mZnNldCBtYXRjaGluZyBvZiBgc3RydWN0IHZjcHVfdnRgIGFjcm9zcyBgdmNwdV92bXhgIGFuZCBgdmNwdV90ZHhgLlxcbjIuIEl0IG1vdmVzIGFuZCByZW5hbWVzIGhlbHBlciBmdW5jdGlvbnMgKGB0b192dGAsIGB2dF9nZXRfZXhpdF9yZWFzb25gLCBgdnRfZ2V0X2V4aXRfcXVhbGAsIGB2dF9nZXRfaW50cl9pbmZvYCwgZXRjLikgZnJvbSBgdm14LmhgL2B2bXguY2AgdG8gYGNvbW1vbi5oYC9gbWFpbi5jYC5cXG4zLiBJdCBtb3ZlcyBjb21tb24gZXhpdCBhbmQgaW50ZXJydXB0IGhhbmRsaW5nIGZ1bmN0aW9ucyAoYHZ0X2hhbmRsZV9leGl0X2lycW9mZmAsIGB2dF9oYW5kbGVfbm1pYCwgYGhhbmRsZV9leHRlcm5hbF9pbnRlcnJ1cHRfaXJxb2ZmYCwgZXRjLikgdG8gYG1haW4uY2AuXFxuNC4gSXQgcmVuYW1lcyBwb3N0ZWQgaW50ZXJydXB0IHJvdXRpbmVzIHRvIHVzZSB0aGUgYHZ0X2AgcHJlZml4IGFjcm9zcyB0aGUgY29kZWJhc2UuXFxuXFxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBleHBvc2UgdW5pbml0aWFsaXplZCBmaWVsZHMgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlLCBvciBhbHRlciBidWZmZXIgYm91bmRzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHN0cnVjdCBsYXlvdXQgb3Igb2Zmc2V0cyBhcmUgZ3VhcmRlZCBhdCBjb21waWxlIHRpbWUgYnkgYHN0YXRpY19hc3NlcnRgIG9yIHdvdWxkIG1hbmlmZXN0IGFzIG1lbW9yeSBjb3JydXB0aW9uL09PQiBhY2Nlc3MgZGV0ZWN0YWJsZSBieSBzdGFuZGFyZCBidWlsZHMgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDlkMjVmMDZhOTNhYWJlNjRmYmFkMGRlZDc0ZjczMDAwZjRhNDdjYzNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDA5OjI0OjIyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaCBiL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmhcbmluZGV4IDA4MDA1Njc2NzAyYzIuLjNlNjhmYTEyYWNhNjUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oXG5AQCAtMiwxMCArMiwxMiBAQFxuICNpZm5kZWYgX19LVk1fWDg2X1ZNWF9DT01NT05fSFxuICNkZWZpbmUgX19LVk1fWDg2X1ZNWF9DT01NT05fSFxuIFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbnRhaW5lcl9vZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtX2hvc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9wb3N0ZWRfaW50ci5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJtbXUuaFwiXG4rI2luY2x1ZGUgXCJ2bXhfb3BzLmhcIlxuIFxuIHVuaW9uIHZteF9leGl0X3JlYXNvbiB7XG4gXHRzdHJ1Y3Qge1xuQEAgLTc0LDE0ICs3Niw2MiBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfdGRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHsgcmV0dXJuIGZhbHNlOyB9XG4gXG4gI2VuZGlmXG4gXG4rc3RydWN0IHZjcHVfdm14X3RkeCB7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgdmNwdTtcbitcdHN0cnVjdCB2Y3B1X3Z0IHZ0O1xuK307XG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBzdHJ1Y3QgdmNwdV92dCAqdG9fdnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdHJldHVybiBcdTAwMjYoY29udGFpbmVyX29mKHZjcHUsIHN0cnVjdCB2Y3B1X3ZteF90ZHgsIHZjcHUpLVx1MDAzZXZ0KTtcbit9XG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBzdHJ1Y3Qga3ZtX3ZjcHUgKnZ0X3RvX3ZjcHUoc3RydWN0IHZjcHVfdnQgKnZ0KVxuK3tcbitcdHJldHVybiBcdTAwMjYoY29udGFpbmVyX29mKHZ0LCBzdHJ1Y3QgdmNwdV92bXhfdGR4LCB2dCktXHUwMDNldmNwdSk7XG4rfVxuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5pb24gdm14X2V4aXRfcmVhc29uIHZ0X2dldF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0cmV0dXJuIHRvX3Z0KHZjcHUpLVx1MDAzZWV4aXRfcmVhc29uO1xuK31cbitcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcgdnRfZ2V0X2V4aXRfcXVhbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0c3RydWN0IHZjcHVfdnQgKnZ0ID0gdG9fdnQodmNwdSk7XG4rXG4rXHRpZiAoIWt2bV9yZWdpc3Rlcl90ZXN0X2FuZF9tYXJrX2F2YWlsYWJsZSh2Y3B1LCBWQ1BVX1JFR19FWElUX0lORk9fMSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIVdBUk5fT05fT05DRShpc190ZF92Y3B1KHZjcHUpKSlcbitcdFx0dnQtXHUwMDNlZXhpdF9xdWFsaWZpY2F0aW9uID0gdm1jc19yZWFkbChFWElUX1FVQUxJRklDQVRJT04pO1xuK1xuK1x0cmV0dXJuIHZ0LVx1MDAzZWV4aXRfcXVhbGlmaWNhdGlvbjtcbit9XG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdnRfZ2V0X2ludHJfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0c3RydWN0IHZjcHVfdnQgKnZ0ID0gdG9fdnQodmNwdSk7XG4rXG4rXHRpZiAoIWt2bV9yZWdpc3Rlcl90ZXN0X2FuZF9tYXJrX2F2YWlsYWJsZSh2Y3B1LCBWQ1BVX1JFR19FWElUX0lORk9fMikgXHUwMDI2XHUwMDI2XG4rXHQgICAgIVdBUk5fT05fT05DRShpc190ZF92Y3B1KHZjcHUpKSlcbitcdFx0dnQtXHUwMDNlZXhpdF9pbnRyX2luZm8gPSB2bWNzX3JlYWQzMihWTV9FWElUX0lOVFJfSU5GTyk7XG4rXG4rXHRyZXR1cm4gdnQtXHUwMDNlZXhpdF9pbnRyX2luZm87XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBpc194ZmRfbm1fZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdHJldHVybiB2Y3B1LVx1MDAzZWFyY2guZ3Vlc3RfZnB1LmZwc3RhdGUtXHUwMDNleGZkIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgICFrdm1faXNfY3IwX2JpdF9zZXQodmNwdSwgWDg2X0NSMF9UUyk7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgYm9vbCB2dF9pc190ZHhfcHJpdmF0ZV9ncGEoc3RydWN0IGt2bSAqa3ZtLCBncGFfdCBncGEpXG4ge1xuIFx0LyogRm9yIFREWCB0aGUgZGlyZWN0IG1hc2sgaXMgdGhlIHNoYXJlZCBtYXNrLiAqL1xuIFx0cmV0dXJuICFrdm1faXNfYWRkcl9kaXJlY3Qoa3ZtLCBncGEpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBfX3ZteF9oYW5kbGVfZXB0X3Zpb2xhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSxcbi1cdFx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbilcbitzdGF0aWMgaW5saW5lIGludCBfX3Z0X2hhbmRsZV9lcHRfdmlvbGF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLFxuK1x0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24pXG4ge1xuIFx0dTY0IGVycm9yX2NvZGU7XG4gXG5AQCAtMTY0LDggKzIxNCw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fdmNwdV90cmlnZ2VyX3Bvc3RlZF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuICAqIFBvc3QgYW4gaW50ZXJydXB0IHRvIGEgdkNQVSdzIFBJUiBhbmQgdHJpZ2dlciB0aGUgdkNQVSB0byBwcm9jZXNzIHRoZVxuICAqIGludGVycnVwdCBpZiBuZWNlc3NhcnkuXG4gICovXG4tc3RhdGljIGlubGluZSB2b2lkIF9fdm14X2RlbGl2ZXJfcG9zdGVkX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tXHRcdFx0XHRcdFx0ICBzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYywgaW50IHZlY3RvcilcbitzdGF0aWMgaW5saW5lIHZvaWQgX192dF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuK1x0XHRcdFx0XHRcdCBzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYywgaW50IHZlY3RvcilcbiB7XG4gXHRpZiAocGlfdGVzdF9hbmRfc2V0X3Bpcih2ZWN0b3IsIHBpX2Rlc2MpKVxuIFx0XHRyZXR1cm47XG5AQCAtMTgzLDYgKzIzMyw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3ZteF9kZWxpdmVyX3Bvc3RlZF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0a3ZtX3ZjcHVfdHJpZ2dlcl9wb3N0ZWRfaW50ZXJydXB0KHZjcHUsIFBPU1RFRF9JTlRSX1ZFQ1RPUik7XG4gfVxuIFxuLW5vaW5zdHIgdm9pZCB2bXhfaGFuZGxlX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuK25vaW5zdHIgdm9pZCB2dF9oYW5kbGVfbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG4gI2VuZGlmIC8qIF9fS1ZNX1g4Nl9WTVhfQ09NTU9OX0ggKi9cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uYyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXG5pbmRleCA0YzUyYWI4ZDA3ODY5Li42ZTBiMzk1OWQ3M2FiIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXG5AQCAtMSw0ICsxLDUgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2VudHJ5LWNvbW1vbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlcGFyYW0uaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwieDg2X29wcy5oXCJcbkBAIC0xMCw4ICsxMSwxMiBAQFxuICNpbmNsdWRlIFwidGR4LmhcIlxuICNpbmNsdWRlIFwidGR4X2FyY2guaFwiXG4gXG4rI3ByYWdtYSBHQ0MgcG9pc29uIHRvX3ZteFxuK1xuK3N0YXRpY19hc3NlcnQob2Zmc2V0b2Yoc3RydWN0IHZjcHVfdm14X3RkeCwgdnQpID09IG9mZnNldG9mKHN0cnVjdCB2Y3B1X3ZteCwgdnQpKTtcbitcbiAjaWZkZWYgQ09ORklHX0tWTV9JTlRFTF9URFhcbi1zdGF0aWNfYXNzZXJ0KG9mZnNldG9mKHN0cnVjdCB2Y3B1X3ZteCwgdnQpID09IG9mZnNldG9mKHN0cnVjdCB2Y3B1X3RkeCwgdnQpKTtcbitzdGF0aWNfYXNzZXJ0KG9mZnNldG9mKHN0cnVjdCB2Y3B1X3ZteF90ZHgsIHZ0KSA9PSBvZmZzZXRvZihzdHJ1Y3QgdmNwdV90ZHgsIHZ0KSk7XG4gXG4gc3RhdGljIHZvaWQgdnRfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUodm9pZClcbiB7XG5AQCAtODc2LDYgKzg4MSw4NSBAQCBzdGF0aWMgaW50IHZ0X2dtZW1fbWF4X21hcHBpbmdfbGV2ZWwoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLFxuICNkZWZpbmUgdnRfb3BfdGR4X29ubHkobmFtZSkgTlVMTFxuICNlbmRpZiAvKiBDT05GSUdfS1ZNX0lOVEVMX1REWCAqL1xuIFxuK3N0YXRpYyB2b2lkIGhhbmRsZV9ubV9mYXVsdF9pcnFvZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdC8qXG4rXHQgKiBTYXZlIHhmZF9lcnIgdG8gZ3Vlc3RfZnB1IGJlZm9yZSBpbnRlcnJ1cHQgaXMgZW5hYmxlZCwgc28gdGhlXG4rXHQgKiBNU1IgdmFsdWUgaXMgbm90IGNsb2JiZXJlZCBieSB0aGUgaG9zdCBhY3Rpdml0eSBiZWZvcmUgdGhlIGd1ZXN0XG4rXHQgKiBoYXMgY2hhbmNlIHRvIGNvbnN1bWUgaXQuXG4rXHQgKlxuK1x0ICogVXBkYXRlIHRoZSBndWVzdCdzIFhGRF9FUlIgaWYgYW5kIG9ubHkgaWYgWEZEIGlzIGVuYWJsZWQsIGFzIHRoZSAjTk1cbitcdCAqIGludGVyY2VwdGlvbiBtYXkgaGF2ZSBiZWVuIGNhdXNlZCBieSBMMSBpbnRlcmNlcHRpb24uICBQZXIgdGhlIFNETSxcbitcdCAqIFhGRF9FUlIgaXMgbm90IG1vZGlmaWVkIGZvciBub24tWEZEICNOTSwgaS5lLiBpZiBDUjAuVFM9MS5cbitcdCAqXG4rXHQgKiBOb3RlLCBYRkRfRVJSIGlzIHVwZGF0ZWQgX2JlZm9yZV8gdGhlICNOTSBpbnRlcmNlcHRpb24gY2hlY2ssIGkuZS5cbitcdCAqIHVubGlrZSBDUjIgYW5kIERSNiwgdGhlIHZhbHVlIGlzIG5vdCBhIHBheWxvYWQgdGhhdCBpcyBhdHRhY2hlZCB0b1xuK1x0ICogdGhlICNOTSBleGNlcHRpb24uXG4rXHQgKi9cbitcdGlmIChpc194ZmRfbm1fZmF1bHQodmNwdSkpXG4rXHRcdHJkbXNycShNU1JfSUEzMl9YRkRfRVJSLCB2Y3B1LVx1MDAzZWFyY2guZ3Vlc3RfZnB1LnhmZF9lcnIpO1xuK31cbitcbitzdGF0aWMgdm9pZCBoYW5kbGVfZXhjZXB0aW9uX2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBpbnRyX2luZm8pXG4re1xuK1x0LyogaWYgZXhpdCBkdWUgdG8gUEYgY2hlY2sgZm9yIGFzeW5jIFBGICovXG4rXHRpZiAoaXNfcGFnZV9mYXVsdChpbnRyX2luZm8pKVxuK1x0XHR2Y3B1LVx1MDAzZWFyY2guYXBmLmhvc3RfYXBmX2ZsYWdzID0ga3ZtX3JlYWRfYW5kX3Jlc2V0X2FwZl9mbGFncygpO1xuK1x0LyogaWYgZXhpdCBkdWUgdG8gTk0sIGhhbmRsZSBiZWZvcmUgaW50ZXJydXB0cyBhcmUgZW5hYmxlZCAqL1xuK1x0ZWxzZSBpZiAoaXNfbm1fZmF1bHQoaW50cl9pbmZvKSlcbitcdFx0aGFuZGxlX25tX2ZhdWx0X2lycW9mZih2Y3B1KTtcbitcdC8qIEhhbmRsZSBtYWNoaW5lIGNoZWNrcyBiZWZvcmUgaW50ZXJydXB0cyBhcmUgZW5hYmxlZCAqL1xuK1x0ZWxzZSBpZiAoaXNfbWFjaGluZV9jaGVjayhpbnRyX2luZm8pKVxuK1x0XHRrdm1fbWFjaGluZV9jaGVjaygpO1xuK31cbitcbitzdGF0aWMgdm9pZCBoYW5kbGVfZXh0ZXJuYWxfaW50ZXJydXB0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4rXHRcdFx0XHRcdCAgICAgdTMyIGludHJfaW5mbylcbit7XG4rXHR1bnNpZ25lZCBpbnQgdmVjdG9yID0gaW50cl9pbmZvIFx1MDAyNiBJTlRSX0lORk9fVkVDVE9SX01BU0s7XG4rXG4rXHRpZiAoS1ZNX0JVRyghaXNfZXh0ZXJuYWxfaW50cihpbnRyX2luZm8pLCB2Y3B1LVx1MDAzZWt2bSxcbitcdCAgICBcInVuZXhwZWN0ZWQgVk0tRXhpdCBpbnRlcnJ1cHQgaW5mbzogMHgleFwiLCBpbnRyX2luZm8pKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRrdm1fYmVmb3JlX2ludGVycnVwdCh2Y3B1LCBLVk1fSEFORExJTkdfSVJRKTtcbitcdHg4Nl9lbnRyeV9mcm9tX2t2bShFVkVOVF9UWVBFX0VYVElOVCwgdmVjdG9yKTtcbitcdGt2bV9hZnRlcl9pbnRlcnJ1cHQodmNwdSk7XG4rXG4rXHR2Y3B1LVx1MDAzZWFyY2guYXRfaW5zdHJ1Y3Rpb25fYm91bmRhcnkgPSB0cnVlO1xuK31cbitcbitzdGF0aWMgdm9pZCB2dF9oYW5kbGVfZXhpdF9pcnFvZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdGlmICh0b192dCh2Y3B1KS1cdTAwM2VlbXVsYXRpb25fcmVxdWlyZWQpXG4rXHRcdHJldHVybjtcbitcbitcdHN3aXRjaCAodnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljKSB7XG4rXHRjYXNlIEVYSVRfUkVBU09OX0VYVEVSTkFMX0lOVEVSUlVQVDpcbitcdFx0aGFuZGxlX2V4dGVybmFsX2ludGVycnVwdF9pcnFvZmYodmNwdSwgdnRfZ2V0X2ludHJfaW5mbyh2Y3B1KSk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBFWElUX1JFQVNPTl9FWENFUFRJT05fTk1JOlxuK1x0XHRoYW5kbGVfZXhjZXB0aW9uX2lycW9mZih2Y3B1LCB2dF9nZXRfaW50cl9pbmZvKHZjcHUpKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEVYSVRfUkVBU09OX01DRV9EVVJJTkdfVk1FTlRSWTpcbitcdFx0a3ZtX21hY2hpbmVfY2hlY2soKTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRicmVhaztcbitcdH1cbit9XG4rXG4rbm9pbnN0ciB2b2lkIHZ0X2hhbmRsZV9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdGlmICgodTE2KXZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYyAhPSBFWElUX1JFQVNPTl9FWENFUFRJT05fTk1JIHx8XG4rXHQgICAgIWlzX25taSh2dF9nZXRfaW50cl9pbmZvKHZjcHUpKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0a3ZtX2JlZm9yZV9pbnRlcnJ1cHQodmNwdSwgS1ZNX0hBTkRMSU5HX05NSSk7XG4rXHR4ODZfZW50cnlfZnJvbV9rdm0oRVZFTlRfVFlQRV9OTUksIE5NSV9WRUNUT1IpO1xuK1x0a3ZtX2FmdGVyX2ludGVycnVwdCh2Y3B1KTtcbit9XG4rXG4gI2RlZmluZSBWTVhfUkVRVUlSRURfQVBJQ1ZfSU5ISUJJVFNcdFx0XHRcdFxcXG4gXHQoQklUKEFQSUNWX0lOSElCSVRfUkVBU09OX0RJU0FCTEVEKSB8XHRcdFx0XFxcbiBcdCBCSVQoQVBJQ1ZfSU5ISUJJVF9SRUFTT05fQUJTRU5UKSB8XHRcdFx0XFxcbkBAIC0xMDAwLDEyICsxMDg0LDEyIEBAIHN0cnVjdCBrdm1feDg2X29wcyB2dF94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4gXHQubG9hZF9tbXVfcGdkID0gdnRfb3AobG9hZF9tbXVfcGdkKSxcbiBcbiBcdC5jaGVja19pbnRlcmNlcHQgPSB2bXhfY2hlY2tfaW50ZXJjZXB0LFxuLVx0LmhhbmRsZV9leGl0X2lycW9mZiA9IHZteF9oYW5kbGVfZXhpdF9pcnFvZmYsXG4rXHQuaGFuZGxlX2V4aXRfaXJxb2ZmID0gdnRfaGFuZGxlX2V4aXRfaXJxb2ZmLFxuIFxuIFx0LnVwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyA9IHZ0X29wKHVwZGF0ZV9jcHVfZGlydHlfbG9nZ2luZyksXG4gXG4tXHQucGlfdXBkYXRlX2lydGUgPSB2bXhfcGlfdXBkYXRlX2lydGUsXG4tXHQucGlfc3RhcnRfYnlwYXNzID0gdm14X3BpX3N0YXJ0X2J5cGFzcyxcbitcdC5waV91cGRhdGVfaXJ0ZSA9IHZ0X3BpX3VwZGF0ZV9pcnRlLFxuK1x0LnBpX3N0YXJ0X2J5cGFzcyA9IHZ0X3BpX3N0YXJ0X2J5cGFzcyxcbiBcbiAjaWZkZWYgQ09ORklHX1g4Nl82NFxuIFx0LnNldF9odl90aW1lciA9IHZ0X29wKHNldF9odl90aW1lciksXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbmluZGV4IDE1MTg3MzQwN2FiZDMuLjQ3NTk5ZTczMTJjZmQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXG5AQCAtNDQ2LDcgKzQ0Niw3IEBAIHN0YXRpYyB2b2lkIG5lc3RlZF9lcHRfaW5qZWN0X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHQgKiBcIk5NSSB1bmJsb2NraW5nIGR1ZSB0byBJUkVUXCIsIGkuZS4gdGhlIGJpdCBjYW4gYmUgcHJvcGFnYXRlZFxuIFx0XHQgKiBhcy1pcyBmcm9tIHRoZSBvcmlnaW5hbCBFWElUX1FVQUxJRklDQVRJT04uXG4gXHRcdCAqL1xuLVx0XHRleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSBcdTAwMjYgSU5UUl9JTkZPX1VOQkxPQ0tfTk1JO1xuK1x0XHRleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpIFx1MDAyNiBJTlRSX0lORk9fVU5CTE9DS19OTUk7XG4gXHR9IGVsc2Uge1xuIFx0XHRpZiAoZmF1bHQtXHUwMDNlZXJyb3JfY29kZSBcdTAwMjYgUEZFUlJfUlNWRF9NQVNLKSB7XG4gXHRcdFx0dm1fZXhpdF9yZWFzb24gPSBFWElUX1JFQVNPTl9FUFRfTUlTQ09ORklHO1xuQEAgLTQ3Miw3ICs0NzIsNyBAQCBzdGF0aWMgdm9pZCBuZXN0ZWRfZXB0X2luamVjdF9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0XHQgKiBhbmQgd2Fsa3MgdGhlIGZhdWx0aW5nIEdQQS5cbiBcdFx0XHQgKi9cbiBcdFx0XHRpZiAoZnJvbV9oYXJkd2FyZSlcbi1cdFx0XHRcdGV4aXRfcXVhbGlmaWNhdGlvbiB8PSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSBcdTAwMjYgbWFzaztcbitcdFx0XHRcdGV4aXRfcXVhbGlmaWNhdGlvbiB8PSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpIFx1MDAyNiBtYXNrO1xuIFx0XHRcdGVsc2VcbiBcdFx0XHRcdGV4aXRfcXVhbGlmaWNhdGlvbiB8PSBmYXVsdC1cdTAwM2VleGl0X3F1YWxpZmljYXRpb24gXHUwMDI2IG1hc2s7XG4gXG5AQCAtNDc0Nyw3ICs0NzQ3LDcgQEAgc3RhdGljIHZvaWQgcHJlcGFyZV92bWNzMTIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgdm1jczEyICp2bWNzMTIsXG4ge1xuIFx0LyogdXBkYXRlIGV4aXQgaW5mb3JtYXRpb24gZmllbGRzOiAqL1xuIFx0dm1jczEyLVx1MDAzZXZtX2V4aXRfcmVhc29uID0gdm1fZXhpdF9yZWFzb247XG4tXHRpZiAodm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5lbmNsYXZlX21vZGUpXG4rXHRpZiAodnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmVuY2xhdmVfbW9kZSlcbiBcdFx0dm1jczEyLVx1MDAzZXZtX2V4aXRfcmVhc29uIHw9IFZNWF9FWElUX1JFQVNPTlNfU0dYX0VOQ0xBVkVfTU9ERTtcbiBcdHZtY3MxMi1cdTAwM2VleGl0X3F1YWxpZmljYXRpb24gPSBleGl0X3F1YWxpZmljYXRpb247XG4gXG5AQCAtNTM3Myw3ICs1MzczLDcgQEAgc3RhdGljIGludCBuZXN0ZWRfdm14X2dldF92bXB0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90ICp2bXBvaW50ZXIsXG4gXHRzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBlO1xuIFx0aW50IHI7XG4gXG4tXHRpZiAoZ2V0X3ZteF9tZW1fYWRkcmVzcyh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSxcbitcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZ0X2dldF9leGl0X3F1YWwodmNwdSksXG4gXHRcdFx0XHR2bWNzX3JlYWQzMihWTVhfSU5TVFJVQ1RJT05fSU5GTyksIGZhbHNlLFxuIFx0XHRcdFx0c2l6ZW9mKCp2bXBvaW50ZXIpLCBcdTAwMjZndmEpKSB7XG4gXHRcdCpyZXQgPSAxO1xuQEAgLTU2NjUsNyArNTY2NSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3ZtcmVhZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IHZtY3MxMiAqdm1jczEyID0gaXNfZ3Vlc3RfbW9kZSh2Y3B1KSA/IGdldF9zaGFkb3dfdm1jczEyKHZjcHUpXG4gXHRcdFx0XHRcdFx0ICAgIDogZ2V0X3ZtY3MxMih2Y3B1KTtcbi1cdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4rXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXHR1MzIgaW5zdHJfaW5mbyA9IHZtY3NfcmVhZDMyKFZNWF9JTlNUUlVDVElPTl9JTkZPKTtcbiBcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xuIFx0c3RydWN0IHg4Nl9leGNlcHRpb24gZTtcbkBAIC01NzcxLDcgKzU3NzEsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXdyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRzdHJ1Y3Qgdm1jczEyICp2bWNzMTIgPSBpc19ndWVzdF9tb2RlKHZjcHUpID8gZ2V0X3NoYWRvd192bWNzMTIodmNwdSlcbiBcdFx0XHRcdFx0XHQgICAgOiBnZXRfdm1jczEyKHZjcHUpO1xuLVx0dW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbitcdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdHUzMiBpbnN0cl9pbmZvID0gdm1jc19yZWFkMzIoVk1YX0lOU1RSVUNUSU9OX0lORk8pO1xuIFx0c3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7XG4gXHRzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBlO1xuQEAgLTU5NjAsNyArNTk2MCw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRybGQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIC8qIEVtdWxhdGUgdGhlIFZNUFRSU1QgaW5zdHJ1Y3Rpb24gKi9cbiBzdGF0aWMgaW50IGhhbmRsZV92bXB0cnN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuK1x0dW5zaWduZWQgbG9uZyBleGl0X3F1YWwgPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFx0dTMyIGluc3RyX2luZm8gPSB2bWNzX3JlYWQzMihWTVhfSU5TVFJVQ1RJT05fSU5GTyk7XG4gXHRncGFfdCBjdXJyZW50X3ZtcHRyID0gdG9fdm14KHZjcHUpLVx1MDAzZW5lc3RlZC5jdXJyZW50X3ZtcHRyO1xuIFx0c3RydWN0IHg4Nl9leGNlcHRpb24gZTtcbkBAIC02MDIxLDcgKzYwMjEsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9pbnZlcHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0LyogQWNjb3JkaW5nIHRvIHRoZSBJbnRlbCBWTVggaW5zdHJ1Y3Rpb24gcmVmZXJlbmNlLCB0aGUgbWVtb3J5XG4gXHQgKiBvcGVyYW5kIGlzIHJlYWQgZXZlbiBpZiBpdCBpc24ndCBuZWVkZWQgKGUuZy4sIGZvciB0eXBlPT1nbG9iYWwpXG4gXHQgKi9cbi1cdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxuK1x0aWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KSxcbiBcdFx0XHR2bXhfaW5zdHJ1Y3Rpb25faW5mbywgZmFsc2UsIHNpemVvZihvcGVyYW5kKSwgXHUwMDI2Z3ZhKSlcbiBcdFx0cmV0dXJuIDE7XG4gXHRyID0ga3ZtX3JlYWRfZ3Vlc3RfdmlydCh2Y3B1LCBndmEsIFx1MDAyNm9wZXJhbmQsIHNpemVvZihvcGVyYW5kKSwgXHUwMDI2ZSk7XG5AQCAtNjEwNCw3ICs2MTA0LDcgQEAgc3RhdGljIGludCBoYW5kbGVfaW52dnBpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHQvKiBhY2NvcmRpbmcgdG8gdGhlIGludGVsIHZteCBpbnN0cnVjdGlvbiByZWZlcmVuY2UsIHRoZSBtZW1vcnlcbiBcdCAqIG9wZXJhbmQgaXMgcmVhZCBldmVuIGlmIGl0IGlzbid0IG5lZWRlZCAoZS5nLiwgZm9yIHR5cGU9PWdsb2JhbClcbiBcdCAqL1xuLVx0aWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgdm14X2dldF9leGl0X3F1YWwodmNwdSksXG4rXHRpZiAoZ2V0X3ZteF9tZW1fYWRkcmVzcyh2Y3B1LCB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxuIFx0XHRcdHZteF9pbnN0cnVjdGlvbl9pbmZvLCBmYWxzZSwgc2l6ZW9mKG9wZXJhbmQpLCBcdTAwMjZndmEpKVxuIFx0XHRyZXR1cm4gMTtcbiBcdHIgPSBrdm1fcmVhZF9ndWVzdF92aXJ0KHZjcHUsIGd2YSwgXHUwMDI2b3BlcmFuZCwgc2l6ZW9mKG9wZXJhbmQpLCBcdTAwMjZlKTtcbkBAIC02MjM2LDggKzYyMzYsOCBAQCBzdGF0aWMgaW50IGhhbmRsZV92bWZ1bmMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICogRVhJVF9SRUFTT05fVk1GVU5DIGFzIHRoZSBleGl0IHJlYXNvbi5cbiBcdCAqL1xuIFx0bmVzdGVkX3ZteF92bWV4aXQodmNwdSwgdm14LVx1MDAzZXZ0LmV4aXRfcmVhc29uLmZ1bGwsXG4tXHRcdFx0ICB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KSxcbi1cdFx0XHQgIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpKTtcbitcdFx0XHQgIHZ0X2dldF9pbnRyX2luZm8odmNwdSksXG4rXHRcdFx0ICB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpKTtcbiBcdHJldHVybiAxO1xuIH1cbiBcbkBAIC02Mjg4LDcgKzYyODgsNyBAQCBzdGF0aWMgYm9vbCBuZXN0ZWRfdm14X2V4aXRfaGFuZGxlZF9pbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRpZiAoIW5lc3RlZF9jcHVfaGFzKHZtY3MxMiwgQ1BVX0JBU0VEX1VTRV9JT19CSVRNQVBTKSlcbiBcdFx0cmV0dXJuIG5lc3RlZF9jcHVfaGFzKHZtY3MxMiwgQ1BVX0JBU0VEX1VOQ09ORF9JT19FWElUSU5HKTtcbiBcbi1cdGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuK1x0ZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcbiBcdHBvcnQgPSBleGl0X3F1YWxpZmljYXRpb24gXHUwMDNlXHUwMDNlIDE2O1xuIFx0c2l6ZSA9IChleGl0X3F1YWxpZmljYXRpb24gXHUwMDI2IDcpICsgMTtcbkBAIC02MzE0LDcgKzYzMTQsNyBAQCBzdGF0aWMgYm9vbCBuZXN0ZWRfdm14X2V4aXRfaGFuZGxlZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFxuIFx0aWYgKGV4aXRfcmVhc29uLmJhc2ljID09IEVYSVRfUkVBU09OX01TUl9SRUFEX0lNTSB8fFxuIFx0ICAgIGV4aXRfcmVhc29uLmJhc2ljID09IEVYSVRfUkVBU09OX01TUl9XUklURV9JTU0pXG4tXHRcdG1zcl9pbmRleCA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuK1x0XHRtc3JfaW5kZXggPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFx0ZWxzZVxuIFx0XHRtc3JfaW5kZXggPSBrdm1fZWN4X3JlYWQodmNwdSk7XG4gXG5AQCAtNjM1MCw3ICs2MzUwLDcgQEAgc3RhdGljIGJvb2wgbmVzdGVkX3ZteF9leGl0X2hhbmRsZWRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBzdGF0aWMgYm9vbCBuZXN0ZWRfdm14X2V4aXRfaGFuZGxlZF9jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRzdHJ1Y3Qgdm1jczEyICp2bWNzMTIpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbitcdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdGludCBjciA9IGV4aXRfcXVhbGlmaWNhdGlvbiBcdTAwMjYgMTU7XG4gXHRpbnQgcmVnO1xuIFx0dW5zaWduZWQgbG9uZyB2YWw7XG5AQCAtNjQ4NCw3ICs2NDg0LDcgQEAgc3RhdGljIGJvb2wgbmVzdGVkX3ZteF9sMF93YW50c19leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcbiBcdHN3aXRjaCAoKHUxNilleGl0X3JlYXNvbi5iYXNpYykge1xuIFx0Y2FzZSBFWElUX1JFQVNPTl9FWENFUFRJT05fTk1JOlxuLVx0XHRpbnRyX2luZm8gPSB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcbitcdFx0aW50cl9pbmZvID0gdnRfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcbiBcdFx0aWYgKGlzX25taShpbnRyX2luZm8pKVxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0XHRlbHNlIGlmIChpc19wYWdlX2ZhdWx0KGludHJfaW5mbykpXG5AQCAtNjU2Nyw3ICs2NTY3LDcgQEAgc3RhdGljIGJvb2wgbmVzdGVkX3ZteF9sMV93YW50c19leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcbiBcdHN3aXRjaCAoKHUxNilleGl0X3JlYXNvbi5iYXNpYykge1xuIFx0Y2FzZSBFWElUX1JFQVNPTl9FWENFUFRJT05fTk1JOlxuLVx0XHRpbnRyX2luZm8gPSB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcbitcdFx0aW50cl9pbmZvID0gdnRfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcbiBcdFx0aWYgKGlzX25taShpbnRyX2luZm8pKVxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0XHRlbHNlIGlmIChpc19wYWdlX2ZhdWx0KGludHJfaW5mbykpXG5AQCAtNjczNywxNCArNjczNywxNCBAQCBib29sIG5lc3RlZF92bXhfcmVmbGVjdF92bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICogbmVlZCB0byBiZSBzeW50aGVzaXplZCBieSBxdWVyeWluZyB0aGUgaW4ta2VybmVsIExBUElDLCBidXQgZXh0ZXJuYWxcbiBcdCAqIGludGVycnVwdHMgYXJlIG5ldmVyIHJlZmxlY3RlZCB0byBMMSBzbyBpdCdzIGEgbm9uLWlzc3VlLlxuIFx0ICovXG4tXHRleGl0X2ludHJfaW5mbyA9IHZteF9nZXRfaW50cl9pbmZvKHZjcHUpO1xuK1x0ZXhpdF9pbnRyX2luZm8gPSB2dF9nZXRfaW50cl9pbmZvKHZjcHUpO1xuIFx0aWYgKGlzX2V4Y2VwdGlvbl93aXRoX2Vycm9yX2NvZGUoZXhpdF9pbnRyX2luZm8pKSB7XG4gXHRcdHN0cnVjdCB2bWNzMTIgKnZtY3MxMiA9IGdldF92bWNzMTIodmNwdSk7XG4gXG4gXHRcdHZtY3MxMi1cdTAwM2V2bV9leGl0X2ludHJfZXJyb3JfY29kZSA9XG4gXHRcdFx0dm1jc19yZWFkMzIoVk1fRVhJVF9JTlRSX0VSUk9SX0NPREUpO1xuIFx0fVxuLVx0ZXhpdF9xdWFsID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4rXHRleGl0X3F1YWwgPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFxuIHJlZmxlY3Rfdm1leGl0OlxuIFx0bmVzdGVkX3ZteF92bWV4aXQodmNwdSwgZXhpdF9yZWFzb24uZnVsbCwgZXhpdF9pbnRyX2luZm8sIGV4aXRfcXVhbCk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5jIGIvYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5jXG5pbmRleCA0YTZkOWExN2RhMjM4Li4yNjQ0YWRkNTRiNzZiIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmNcbkBAIC0xNCw2ICsxNCw4IEBAXG4gI2luY2x1ZGUgXCJ2bXguaFwiXG4gI2luY2x1ZGUgXCJ0ZHguaFwiXG4gXG4rI3ByYWdtYSBHQ0MgcG9pc29uIHRvX3ZteFxuK1xuIC8qXG4gICogTWFpbnRhaW4gYSBwZXItQ1BVIGxpc3Qgb2YgdkNQVXMgdGhhdCBuZWVkIHRvIGJlIGF3YWtlbmVkIGJ5IHdha2V1cF9oYW5kbGVyKClcbiAgKiB3aGVuIGEgV0FLRVVQX1ZFQ1RPUiBpbnRlcnJ1cHRlZCBpcyBwb3N0ZWQuICB2Q1BVcyBhcmUgYWRkZWQgdG8gdGhlIGxpc3Qgd2hlblxuQEAgLTU0LDcgKzU2LDcgQEAgc3RhdGljIGludCBwaV90cnlfc2V0X2NvbnRyb2woc3RydWN0IHBpX2Rlc2MgKnBpX2Rlc2MsIHU2NCAqcG9sZCwgdTY0IG5ldylcbiBcdHJldHVybiAwO1xuIH1cbiBcbi12b2lkIHZteF92Y3B1X3BpX2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KVxuK3ZvaWQgdnRfdmNwdV9waV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcbiB7XG4gXHRzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYyA9IHZjcHVfdG9fcGlfZGVzYyh2Y3B1KTtcbiBcdHN0cnVjdCB2Y3B1X3Z0ICp2dCA9IHRvX3Z0KHZjcHUpO1xuQEAgLTE0NCwxMSArMTQ2LDExIEBAIHZvaWQgdm14X3ZjcHVfcGlfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4gXHRcdHBpX3NldF9vbihwaV9kZXNjKTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgdm14X2Nhbl91c2VfdnRkX3BpKHN0cnVjdCBrdm0gKmt2bSlcbitzdGF0aWMgYm9vbCB2dF9jYW5fdXNlX3Z0ZF9waShzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0LypcbiBcdCAqIE5vdGUsIHJlYWRpbmcgdGhlIG51bWJlciBvZiBwb3NzaWJsZSBieXBhc3MgSVJRcyBjYW4gcmFjZSB3aXRoIGFcbi1cdCAqIGJ5cGFzcyBJUlEgYmVpbmcgYXR0YWNoZWQgdG8gdGhlIFZNLiAgdm14X3BpX3N0YXJ0X2J5cGFzcygpIGVuc3VyZXNcbitcdCAqIGJ5cGFzcyBJUlEgYmVpbmcgYXR0YWNoZWQgdG8gdGhlIFZNLiAgdnRfcGlfc3RhcnRfYnlwYXNzKCkgZW5zdXJlc1xuIFx0ICogYmxvY2tuZyB2Q1BVcyB3aWxsIHNlZSBhbiBlbGV2YXRlZCBjb3VudCBvciBnZXQgS1ZNX1JFUV9VTkJMT0NLLlxuIFx0ICovXG4gXHRyZXR1cm4gaXJxY2hpcF9pbl9rZXJuZWwoa3ZtKSBcdTAwMjZcdTAwMjYga3ZtX2FyY2hfaGFzX2lycV9ieXBhc3MoKSBcdTAwMjZcdTAwMjZcbkBAIC0yMDYsNyArMjA4LDcgQEAgc3RhdGljIHZvaWQgcGlfZW5hYmxlX3dha2V1cF9oYW5kbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0X19hcGljX3NlbmRfSVBJX3NlbGYoUE9TVEVEX0lOVFJfV0FLRVVQX1ZFQ1RPUik7XG4gfVxuIFxuLXN0YXRpYyBib29sIHZteF9uZWVkc19waV93YWtldXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3N0YXRpYyBib29sIHZ0X25lZWRzX3BpX3dha2V1cChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0LypcbiBcdCAqIFRoZSBkZWZhdWx0IHBvc3RlZCBpbnRlcnJ1cHQgdmVjdG9yIGRvZXMgbm90aGluZyB3aGVuXG5AQCAtMjE3LDE0ICsyMTksMTQgQEAgc3RhdGljIGJvb2wgdm14X25lZWRzX3BpX3dha2V1cChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHQgKiBiYWNrIHRvIHRoZSBwaV93YWtldXBfaGFuZGxlcigpIGZ1bmN0aW9uLlxuIFx0ICovXG4gXHRyZXR1cm4gKHZteF9jYW5fdXNlX2lwaXYodmNwdSkgXHUwMDI2XHUwMDI2ICFpc190ZF92Y3B1KHZjcHUpKSB8fFxuLVx0XHR2bXhfY2FuX3VzZV92dGRfcGkodmNwdS1cdTAwM2Vrdm0pO1xuK1x0XHR2dF9jYW5fdXNlX3Z0ZF9waSh2Y3B1LVx1MDAzZWt2bSk7XG4gfVxuIFxuLXZvaWQgdm14X3ZjcHVfcGlfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit2b2lkIHZ0X3ZjcHVfcGlfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRzdHJ1Y3QgcGlfZGVzYyAqcGlfZGVzYyA9IHZjcHVfdG9fcGlfZGVzYyh2Y3B1KTtcbiBcbi1cdGlmICghdm14X25lZWRzX3BpX3dha2V1cCh2Y3B1KSlcbitcdGlmICghdnRfbmVlZHNfcGlfd2FrZXVwKHZjcHUpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHQvKlxuQEAgLTI5MiwxNyArMjk0LDE3IEBAIGJvb2wgcGlfaGFzX3BlbmRpbmdfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiAvKlxuICAqIEtpY2sgYWxsIHZDUFVzIHdoZW4gdGhlIGZpcnN0IHBvc3NpYmxlIGJ5cGFzcyBJUlEgaXMgYXR0YWNoZWQgdG8gYSBWTSwgYXNcbiAgKiBibG9ja2luZyB2Q1BVcyBtYXkgc2NoZWR1bGVkIG91dCB3aXRob3V0IHJlY29uZmlndXJpbmcgUElELk5WIHRvIHRoZSB3YWtldXBcbi0gKiB2ZWN0b3IsIGkuZS4gaWYgdGhlIGJ5cGFzcyBJUlEgY2FtZSBhbG9uZyBhZnRlciB2bXhfdmNwdV9waV9wdXQoKS5cbisgKiB2ZWN0b3IsIGkuZS4gaWYgdGhlIGJ5cGFzcyBJUlEgY2FtZSBhbG9uZyBhZnRlciB2dF92Y3B1X3BpX3B1dCgpLlxuICAqL1xuLXZvaWQgdm14X3BpX3N0YXJ0X2J5cGFzcyhzdHJ1Y3Qga3ZtICprdm0pXG4rdm9pZCB2dF9waV9zdGFydF9ieXBhc3Moc3RydWN0IGt2bSAqa3ZtKVxuIHtcbi1cdGlmIChXQVJOX09OX09OQ0UoIXZteF9jYW5fdXNlX3Z0ZF9waShrdm0pKSlcbitcdGlmIChXQVJOX09OX09OQ0UoIXZ0X2Nhbl91c2VfdnRkX3BpKGt2bSkpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRrdm1fbWFrZV9hbGxfY3B1c19yZXF1ZXN0KGt2bSwgS1ZNX1JFUV9VTkJMT0NLKTtcbiB9XG4gXG4taW50IHZteF9waV91cGRhdGVfaXJ0ZShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQsIHN0cnVjdCBrdm0gKmt2bSxcbitpbnQgdnRfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdCAgICAgICB1bnNpZ25lZCBpbnQgaG9zdF9pcnEsIHVpbnQzMl90IGd1ZXN0X2lycSxcbiBcdFx0ICAgICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZlY3RvcilcbiB7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5oIGIvYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5oXG5pbmRleCBhNGFmMzk5NDhjZjA0Li5jNTg2MGVhODI4YWU5IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9wb3N0ZWRfaW50ci5oXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3Bvc3RlZF9pbnRyLmhcbkBAIC04LDE2ICs4LDE2IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3Bvc3RlZF9pbnRyLmhcdTAwM2VcbiBcbi12b2lkIHZteF92Y3B1X3BpX2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTtcbi12b2lkIHZteF92Y3B1X3BpX3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuK3ZvaWQgdnRfdmNwdV9waV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSk7XG4rdm9pZCB2dF92Y3B1X3BpX3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQgcGlfd2FrZXVwX2hhbmRsZXIodm9pZCk7XG4gdm9pZCBfX2luaXQgcGlfaW5pdF9jcHUoaW50IGNwdSk7XG4gdm9pZCBwaV9hcGljdl9wcmVfc3RhdGVfcmVzdG9yZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGJvb2wgcGlfaGFzX3BlbmRpbmdfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4taW50IHZteF9waV91cGRhdGVfaXJ0ZShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQsIHN0cnVjdCBrdm0gKmt2bSxcbitpbnQgdnRfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdCAgICAgICB1bnNpZ25lZCBpbnQgaG9zdF9pcnEsIHVpbnQzMl90IGd1ZXN0X2lycSxcbiBcdFx0ICAgICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZlY3Rvcik7XG4tdm9pZCB2bXhfcGlfc3RhcnRfYnlwYXNzKHN0cnVjdCBrdm0gKmt2bSk7XG4rdm9pZCB2dF9waV9zdGFydF9ieXBhc3Moc3RydWN0IGt2bSAqa3ZtKTtcbiBcbiBzdGF0aWMgaW5saW5lIGludCBwaV9maW5kX2hpZ2hlc3RfdmVjdG9yKHN0cnVjdCBwaV9kZXNjICpwaV9kZXNjKVxuIHtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xuaW5kZXggYjI3MmMyMDU4NmE3NC4uZWZiYjFhYzZmNTFlYSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbkBAIC03MTYsNyArNzE2LDcgQEAgdm9pZCB0ZHhfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcbiB7XG4gXHRzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTtcbiBcbi1cdHZteF92Y3B1X3BpX2xvYWQodmNwdSwgY3B1KTtcbitcdHZ0X3ZjcHVfcGlfbG9hZCh2Y3B1LCBjcHUpO1xuIFx0aWYgKHZjcHUtXHUwMDNlY3B1ID09IGNwdSB8fCAhaXNfaGtpZF9hc3NpZ25lZCh0b19rdm1fdGR4KHZjcHUtXHUwMDNla3ZtKSkpXG4gXHRcdHJldHVybjtcbiBcbkBAIC03NDEsNyArNzQxLDcgQEAgYm9vbCB0ZHhfaW50ZXJydXB0X2FsbG93ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICogaW50ZXJydXB0IGlzIGFsd2F5cyBhbGxvd2VkIHVubGVzcyBURFggZ3Vlc3QgY2FsbHMgVERWTUNBTEwgd2l0aCBITFQsXG4gXHQgKiB3aGljaCBwYXNzZXMgdGhlIGludGVycnVwdCBibG9ja2VkIGZsYWcuXG4gXHQgKi9cbi1cdHJldHVybiB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljICE9IEVYSVRfUkVBU09OX0hMVCB8fFxuK1x0cmV0dXJuIHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYyAhPSBFWElUX1JFQVNPTl9ITFQgfHxcbiBcdCAgICAgICAhdG9fdGR4KHZjcHUpLVx1MDAzZXZwX2VudGVyX2FyZ3MucjEyO1xuIH1cbiBcbkBAIC03NTksNyArNzU5LDcgQEAgc3RhdGljIGJvb2wgdGR4X3Byb3RlY3RlZF9hcGljX2hhc19pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICogb3RoZXJ3aXNlIHRoZSBpbnRlcnJ1cHQgd291bGQgaGF2ZSBiZWVuIHNlcnZpY2VkIGF0IHRoZSBpbnN0cnVjdGlvblxuIFx0ICogYm91bmRhcnkuXG4gXHQgKi9cbi1cdGlmICh2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljICE9IEVYSVRfUkVBU09OX0hMVCB8fFxuK1x0aWYgKHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYyAhPSBFWElUX1JFQVNPTl9ITFQgfHxcbiBcdCAgICB0b190ZHgodmNwdSktXHUwMDNldnBfZW50ZXJfYXJncy5yMTIpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbkBAIC04MjYsNyArODI2LDcgQEAgc3RhdGljIHZvaWQgdGR4X3ByZXBhcmVfc3dpdGNoX3RvX2hvc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIHZvaWQgdGR4X3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHR2bXhfdmNwdV9waV9wdXQodmNwdSk7XG4rXHR2dF92Y3B1X3BpX3B1dCh2Y3B1KTtcbiBcdHRkeF9wcmVwYXJlX3N3aXRjaF90b19ob3N0KHZjcHUpO1xuIH1cbiBcbkBAIC05NzQsMTUgKzk3NCwxNSBAQCBzdGF0aWMgbm9pbnN0ciB2b2lkIHRkeF92Y3B1X2VudGVyX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0dGR4LVx1MDAzZWV4aXRfZ3BhID0gdGR4LVx1MDAzZXZwX2VudGVyX2FyZ3Mucjg7XG4gXHR2dC1cdTAwM2VleGl0X2ludHJfaW5mbyA9IHRkeC1cdTAwM2V2cF9lbnRlcl9hcmdzLnI5O1xuIFxuLVx0dm14X2hhbmRsZV9ubWkodmNwdSk7XG4rXHR2dF9oYW5kbGVfbm1pKHZjcHUpO1xuIFxuIFx0Z3Vlc3Rfc3RhdGVfZXhpdF9pcnFvZmYoKTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgdGR4X2ZhaWxlZF92bWVudHJ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRyZXR1cm4gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mYWlsZWRfdm1lbnRyeSBcdTAwMjZcdTAwMjZcbi1cdCAgICAgICB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZ1bGwgIT0gLTF1O1xuK1x0cmV0dXJuIHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mYWlsZWRfdm1lbnRyeSBcdTAwMjZcdTAwMjZcbitcdCAgICAgICB2dF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZnVsbCAhPSAtMXU7XG4gfVxuIFxuIHN0YXRpYyBmYXN0cGF0aF90IHRkeF9leGl0X2hhbmRsZXJzX2Zhc3RwYXRoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbkBAIC0xMTMxLDcgKzExMzEsNyBAQCB2b2lkIHRkeF9pbmplY3Rfbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBzdGF0aWMgaW50IHRkeF9oYW5kbGVfZXhjZXB0aW9uX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0dTMyIGludHJfaW5mbyA9IHZteF9nZXRfaW50cl9pbmZvKHZjcHUpO1xuK1x0dTMyIGludHJfaW5mbyA9IHZ0X2dldF9pbnRyX2luZm8odmNwdSk7XG4gXG4gXHQvKlxuIFx0ICogTWFjaGluZSBjaGVja3MgYXJlIGhhbmRsZWQgYnkgaGFuZGxlX2V4Y2VwdGlvbl9pcnFvZmYoKSwgb3IgYnlcbkBAIC0xODk1LDcgKzE4OTUsNyBAQCB2b2lkIHRkeF9kZWxpdmVyX2ludGVycnVwdChzdHJ1Y3Qga3ZtX2xhcGljICphcGljLCBpbnQgZGVsaXZlcnlfbW9kZSxcbiBcdHN0cnVjdCB2Y3B1X3RkeCAqdGR4ID0gdG9fdGR4KHZjcHUpO1xuIFxuIFx0LyogVERYIHN1cHBvcnRzIG9ubHkgcG9zdGVkIGludGVycnVwdC4gIE5vIGxhcGljIGVtdWxhdGlvbi4gKi9cbi1cdF9fdm14X2RlbGl2ZXJfcG9zdGVkX2ludGVycnVwdCh2Y3B1LCBcdTAwMjZ0ZHgtXHUwMDNldnQucGlfZGVzYywgdmVjdG9yKTtcbitcdF9fdnRfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0KHZjcHUsIFx1MDAyNnRkeC1cdTAwM2V2dC5waV9kZXNjLCB2ZWN0b3IpO1xuIFxuIFx0dHJhY2Vfa3ZtX2FwaWN2X2FjY2VwdF9pcnEodmNwdS1cdTAwM2V2Y3B1X2lkLCBkZWxpdmVyeV9tb2RlLCB0cmlnX21vZGUsIHZlY3Rvcik7XG4gfVxuQEAgLTE5MDMsNyArMTkwMyw3IEBAIHZvaWQgdGR4X2RlbGl2ZXJfaW50ZXJydXB0KHN0cnVjdCBrdm1fbGFwaWMgKmFwaWMsIGludCBkZWxpdmVyeV9tb2RlLFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB0ZHhfaXNfc2VwdF92aW9sYXRpb25fdW5leHBlY3RlZF9wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHR1NjQgZWVxX3R5cGUgPSB0b190ZHgodmNwdSktXHUwMDNlZXh0X2V4aXRfcXVhbGlmaWNhdGlvbiBcdTAwMjYgVERYX0VYVF9FWElUX1FVQUxfVFlQRV9NQVNLO1xuLVx0dTY0IGVxID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4rXHR1NjQgZXEgPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFxuIFx0aWYgKGVlcV90eXBlICE9IFREWF9FWFRfRVhJVF9RVUFMX1RZUEVfUEVORElOR19FUFRfVklPTEFUSU9OKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG5AQCAtMTkzOSw3ICsxOTM5LDcgQEAgc3RhdGljIGludCB0ZHhfaGFuZGxlX2VwdF92aW9sYXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHQvKiBPbmx5IHByaXZhdGUgR1BBIHRyaWdnZXJzIHplcm8tc3RlcCBtaXRpZ2F0aW9uICovXG4gXHRcdGxvY2FsX3JldHJ5ID0gdHJ1ZTtcbiBcdH0gZWxzZSB7XG4tXHRcdGV4aXRfcXVhbCA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuK1x0XHRleGl0X3F1YWwgPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFx0XHQvKlxuIFx0XHQgKiBFUFQgdmlvbGF0aW9uIGR1ZSB0byBpbnN0cnVjdGlvbiBmZXRjaCBzaG91bGQgbmV2ZXIgYmVcbiBcdFx0ICogdHJpZ2dlcmVkIGZyb20gc2hhcmVkIG1lbW9yeSBpbiBURFggZ3Vlc3QuICBJZiBzdWNoIEVQVFxuQEAgLTE5ODcsNyArMTk4Nyw3IEBAIHN0YXRpYyBpbnQgdGR4X2hhbmRsZV9lcHRfdmlvbGF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHdoaWxlICgxKSB7XG4gXHRcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7XG4gXG4tXHRcdHJldCA9IF9fdm14X2hhbmRsZV9lcHRfdmlvbGF0aW9uKHZjcHUsIGdwYSwgZXhpdF9xdWFsKTtcbitcdFx0cmV0ID0gX192dF9oYW5kbGVfZXB0X3Zpb2xhdGlvbih2Y3B1LCBncGEsIGV4aXRfcXVhbCk7XG4gXG4gXHRcdGlmIChyZXQgIT0gUkVUX1BGX1JFVFJZIHx8ICFsb2NhbF9yZXRyeSlcbiBcdFx0XHRicmVhaztcbkBAIC0yMDIxLDcgKzIwMjEsNyBAQCBpbnQgdGR4X2NvbXBsZXRlX2VtdWxhdGVkX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlcnIpXG4gXHRcdHJldHVybiAxO1xuIFx0fVxuIFxuLVx0aWYgKHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMgPT0gRVhJVF9SRUFTT05fTVNSX1JFQUQpXG4rXHRpZiAodnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljID09IEVYSVRfUkVBU09OX01TUl9SRUFEKVxuIFx0XHR0ZHZtY2FsbF9zZXRfcmV0dXJuX3ZhbCh2Y3B1LCBrdm1fcmVhZF9lZHhfZWF4KHZjcHUpKTtcbiBcbiBcdHJldHVybiAxO1xuQEAgLTIwMzIsNyArMjAzMiw3IEBAIGludCB0ZHhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGZhc3RwYXRoKVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3RkeCAqdGR4ID0gdG9fdGR4KHZjcHUpO1xuIFx0dTY0IHZwX2VudGVyX3JldCA9IHRkeC1cdTAwM2V2cF9lbnRlcl9yZXQ7XG4tXHR1bmlvbiB2bXhfZXhpdF9yZWFzb24gZXhpdF9yZWFzb24gPSB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpO1xuK1x0dW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uID0gdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpO1xuIFxuIFx0aWYgKGZhc3RwYXRoICE9IEVYSVRfRkFTVFBBVEhfTk9ORSlcbiBcdFx0cmV0dXJuIDE7XG5AQCAtMjE0Miw5ICsyMTQyLDkgQEAgdm9pZCB0ZHhfZ2V0X2V4aXRfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiAqcmVhc29uLFxuIFxuIFx0KnJlYXNvbiA9IHRkeC1cdTAwM2V2dC5leGl0X3JlYXNvbi5mdWxsO1xuIFx0aWYgKCpyZWFzb24gIT0gLTF1KSB7XG4tXHRcdCppbmZvMSA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuK1x0XHQqaW5mbzEgPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFx0XHQqaW5mbzIgPSB0ZHgtXHUwMDNlZXh0X2V4aXRfcXVhbGlmaWNhdGlvbjtcbi1cdFx0KmludHJfaW5mbyA9IHZteF9nZXRfaW50cl9pbmZvKHZjcHUpO1xuK1x0XHQqaW50cl9pbmZvID0gdnRfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcbiBcdH0gZWxzZSB7XG4gXHRcdCppbmZvMSA9IDA7XG4gXHRcdCppbmZvMiA9IDA7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguYyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbmluZGV4IDUwNDYzMGYwZWI0MGYuLjdlMzVjMmQwM2M2OWUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG5AQCAtMTU3NywxMiArMTU3NywxMiBAQCB2b2lkIHZteF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KVxuIFxuIFx0dm14X3ZjcHVfbG9hZF92bWNzKHZjcHUsIGNwdSk7XG4gXG4tXHR2bXhfdmNwdV9waV9sb2FkKHZjcHUsIGNwdSk7XG4rXHR2dF92Y3B1X3BpX2xvYWQodmNwdSwgY3B1KTtcbiB9XG4gXG4gdm9pZCB2bXhfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHZteF92Y3B1X3BpX3B1dCh2Y3B1KTtcbitcdHZ0X3ZjcHVfcGlfcHV0KHZjcHUpO1xuIFxuIFx0dm14X3ByZXBhcmVfc3dpdGNoX3RvX2hvc3QodG9fdm14KHZjcHUpKTtcbiB9XG5AQCAtMTc5MSw3ICsxNzkxLDcgQEAgaW50IHZteF9jaGVja19lbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGVtdWxfdHlwZSxcbiBcdCAqIHNvIHRoYXQgZ3Vlc3QgdXNlcnNwYWNlIGNhbid0IERvUyB0aGUgZ3Vlc3Qgc2ltcGx5IGJ5IHRyaWdnZXJpbmdcbiBcdCAqIGVtdWxhdGlvbiAoZW5jbGF2ZXMgYXJlIENQTDMgb25seSkuXG4gXHQgKi9cbi1cdGlmICh2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmVuY2xhdmVfbW9kZSkge1xuK1x0aWYgKHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5lbmNsYXZlX21vZGUpIHtcbiBcdFx0a3ZtX3F1ZXVlX2V4Y2VwdGlvbih2Y3B1LCBVRF9WRUNUT1IpO1xuIFx0XHRyZXR1cm4gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQ7XG4gXHR9XG5AQCAtMTgwNiw3ICsxODA2LDcgQEAgaW50IHZteF9jaGVja19lbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGVtdWxfdHlwZSxcbiBcbiBzdGF0aWMgaW50IHNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHVuaW9uIHZteF9leGl0X3JlYXNvbiBleGl0X3JlYXNvbiA9IHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSk7XG4rXHR1bmlvbiB2bXhfZXhpdF9yZWFzb24gZXhpdF9yZWFzb24gPSB2dF9nZXRfZXhpdF9yZWFzb24odmNwdSk7XG4gXHR1bnNpZ25lZCBsb25nIHJpcCwgb3JpZ19yaXA7XG4gXHR1MzIgaW5zdHJfbGVuO1xuIFxuQEAgLTQ0MjQsNyArNDQyNCw3IEBAIHN0YXRpYyBpbnQgdm14X2RlbGl2ZXJfcG9zdGVkX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCB2ZWN0b3IpXG4gXHRpZiAoIXZjcHUtXHUwMDNlYXJjaC5hcGljLVx1MDAzZWFwaWN2X2FjdGl2ZSlcbiBcdFx0cmV0dXJuIC0xO1xuIFxuLVx0X192bXhfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0KHZjcHUsIFx1MDAyNnZ0LVx1MDAzZXBpX2Rlc2MsIHZlY3Rvcik7XG4rXHRfX3Z0X2RlbGl2ZXJfcG9zdGVkX2ludGVycnVwdCh2Y3B1LCBcdTAwMjZ2dC1cdTAwM2VwaV9kZXNjLCB2ZWN0b3IpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTUzNzksMTUgKzUzNzksOSBAQCBib29sIHZteF9ndWVzdF9pbmplY3RfYWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICAgICAgIChrdm1fZ2V0X3JmbGFncyh2Y3B1KSBcdTAwMjYgWDg2X0VGTEFHU19BQyk7XG4gfVxuIFxuLXN0YXRpYyBib29sIGlzX3hmZF9ubV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4te1xuLVx0cmV0dXJuIHZjcHUtXHUwMDNlYXJjaC5ndWVzdF9mcHUuZnBzdGF0ZS1cdTAwM2V4ZmQgXHUwMDI2XHUwMDI2XG4tXHQgICAgICAgIWt2bV9pc19jcjBfYml0X3NldCh2Y3B1LCBYODZfQ1IwX1RTKTtcbi19XG4tXG4gc3RhdGljIGludCB2bXhfaGFuZGxlX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgZXJyb3JfY29kZSlcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGNyMiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuK1x0dW5zaWduZWQgbG9uZyBjcjIgPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFxuIFx0aWYgKHZjcHUtXHUwMDNlYXJjaC5hcGYuaG9zdF9hcGZfZmxhZ3MpXG4gXHRcdGdvdG8gaGFuZGxlX3BmO1xuQEAgLTU0MzUsNyArNTQyOSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2V4Y2VwdGlvbl9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0dTMyIHZlY3RfaW5mbztcbiBcbiBcdHZlY3RfaW5mbyA9IHZteC1cdTAwM2VpZHRfdmVjdG9yaW5nX2luZm87XG4tXHRpbnRyX2luZm8gPSB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcbitcdGludHJfaW5mbyA9IHZ0X2dldF9pbnRyX2luZm8odmNwdSk7XG4gXG4gXHQvKlxuIFx0ICogTWFjaGluZSBjaGVja3MgYXJlIGhhbmRsZWQgYnkgaGFuZGxlX2V4Y2VwdGlvbl9pcnFvZmYoKSwgb3IgYnlcbkBAIC01NTE2LDcgKzU1MTAsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9leGNlcHRpb25fbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBcdHN3aXRjaCAoZXhfbm8pIHtcbiBcdGNhc2UgREJfVkVDVE9SOlxuLVx0XHRkcjYgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbitcdFx0ZHI2ID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdFx0aWYgKCEodmNwdS1cdTAwM2VndWVzdF9kZWJ1ZyBcdTAwMjZcbiBcdFx0ICAgICAgKEtWTV9HVUVTVERCR19TSU5HTEVTVEVQIHwgS1ZNX0dVRVNUREJHX1VTRV9IV19CUCkpKSB7XG4gXHRcdFx0LypcbkBAIC01NTkyLDcgKzU1ODYsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9pbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpbnQgc2l6ZSwgaW4sIHN0cmluZztcbiBcdHVuc2lnbmVkIHBvcnQ7XG4gXG4tXHRleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbitcdGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXHRzdHJpbmcgPSAoZXhpdF9xdWFsaWZpY2F0aW9uIFx1MDAyNiAxNikgIT0gMDtcbiBcbiBcdCsrdmNwdS1cdTAwM2VzdGF0LmlvX2V4aXRzO1xuQEAgLTU2ODEsNyArNTY3NSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGludCBlcnI7XG4gXHRpbnQgcmV0O1xuIFxuLVx0ZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4rXHRleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFx0Y3IgPSBleGl0X3F1YWxpZmljYXRpb24gXHUwMDI2IDE1O1xuIFx0cmVnID0gKGV4aXRfcXVhbGlmaWNhdGlvbiBcdTAwM2VcdTAwM2UgOCkgXHUwMDI2IDE1O1xuIFx0c3dpdGNoICgoZXhpdF9xdWFsaWZpY2F0aW9uIFx1MDAzZVx1MDAzZSA0KSBcdTAwMjYgMykge1xuQEAgLTU3NTksNyArNTc1Myw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2RyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGludCBkciwgZHI3LCByZWc7XG4gXHRpbnQgZXJyID0gMTtcbiBcbi1cdGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuK1x0ZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdGRyID0gZXhpdF9xdWFsaWZpY2F0aW9uIFx1MDAyNiBERUJVR19SRUdfQUNDRVNTX05VTTtcbiBcbiBcdC8qIEZpcnN0LCBpZiBEUiBkb2VzIG5vdCBleGlzdCwgdHJpZ2dlciBVRCAqL1xuQEAgLTU4NTUsNyArNTg0OSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2ludGVycnVwdF93aW5kb3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIHN0YXRpYyBpbnQgaGFuZGxlX2ludmxwZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbitcdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcbiBcdGt2bV9tbXVfaW52bHBnKHZjcHUsIGV4aXRfcXVhbGlmaWNhdGlvbik7XG4gXHRyZXR1cm4ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XG5AQCAtNTg2NCw3ICs1ODU4LDcgQEAgc3RhdGljIGludCBoYW5kbGVfaW52bHBnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBzdGF0aWMgaW50IGhhbmRsZV9hcGljX2FjY2VzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0aWYgKGxpa2VseShmYXN0ZW9pKSkge1xuLVx0XHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuK1x0XHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXHRcdGludCBhY2Nlc3NfdHlwZSwgb2Zmc2V0O1xuIFxuIFx0XHRhY2Nlc3NfdHlwZSA9IGV4aXRfcXVhbGlmaWNhdGlvbiBcdTAwMjYgQVBJQ19BQ0NFU1NfVFlQRTtcbkBAIC01ODg1LDcgKzU4NzksNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9hcGljX2FjY2VzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gc3RhdGljIGludCBoYW5kbGVfYXBpY19lb2lfaW5kdWNlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbitcdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdGludCB2ZWN0b3IgPSBleGl0X3F1YWxpZmljYXRpb24gXHUwMDI2IDB4ZmY7XG4gXG4gXHQvKiBFT0ktaW5kdWNlZCBWTSBleGl0IGlzIHRyYXAtbGlrZSBhbmQgdGh1cyBubyBuZWVkIHRvIGFkanVzdCBJUCAqL1xuQEAgLTU4OTUsNyArNTg4OSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2FwaWNfZW9pX2luZHVjZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIHN0YXRpYyBpbnQgaGFuZGxlX2FwaWNfd3JpdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4rXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXG4gXHQvKlxuIFx0ICogQVBJQy13cml0ZSBWTS1FeGl0IGlzIHRyYXAtbGlrZSwgS1ZNIGRvZXNuJ3QgbmVlZCB0byBhZHZhbmNlIFJJUCBhbmRcbkBAIC01OTIzLDcgKzU5MTcsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV90YXNrX3N3aXRjaChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZHRfaW5kZXggPSAodm14LVx1MDAzZWlkdF92ZWN0b3JpbmdfaW5mbyBcdTAwMjYgVkVDVE9SSU5HX0lORk9fVkVDVE9SX01BU0spO1xuIFx0dHlwZSA9ICh2bXgtXHUwMDNlaWR0X3ZlY3RvcmluZ19pbmZvIFx1MDAyNiBWRUNUT1JJTkdfSU5GT19UWVBFX01BU0spO1xuIFxuLVx0ZXhpdF9xdWFsaWZpY2F0aW9uID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4rXHRleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFxuIFx0cmVhc29uID0gKHUzMilleGl0X3F1YWxpZmljYXRpb24gXHUwMDNlXHUwMDNlIDMwO1xuIFx0aWYgKHJlYXNvbiA9PSBUQVNLX1NXSVRDSF9HQVRFIFx1MDAyNlx1MDAyNiBpZHRfdikge1xuQEAgLTU5NjksNyArNTk2Myw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3Rhc2tfc3dpdGNoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBzdGF0aWMgaW50IGhhbmRsZV9lcHRfdmlvbGF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuK1x0dW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24gPSB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuIFx0Z3BhX3QgZ3BhO1xuIFxuIFx0LypcbkBAIC01OTk3LDcgKzU5OTEsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9lcHRfdmlvbGF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGlmICh1bmxpa2VseShhbGxvd19zbWFsbGVyX21heHBoeWFkZHIgXHUwMDI2XHUwMDI2ICFrdm1fdmNwdV9pc19sZWdhbF9ncGEodmNwdSwgZ3BhKSkpXG4gXHRcdHJldHVybiBrdm1fZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCAwKTtcbiBcbi1cdHJldHVybiBfX3ZteF9oYW5kbGVfZXB0X3Zpb2xhdGlvbih2Y3B1LCBncGEsIGV4aXRfcXVhbGlmaWNhdGlvbik7XG4rXHRyZXR1cm4gX192dF9oYW5kbGVfZXB0X3Zpb2xhdGlvbih2Y3B1LCBncGEsIGV4aXRfcXVhbGlmaWNhdGlvbik7XG4gfVxuIFxuIHN0YXRpYyBpbnQgaGFuZGxlX2VwdF9taXNjb25maWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuQEAgLTYxNjAsNyArNjE1NCw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2ludnBjaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0LyogQWNjb3JkaW5nIHRvIHRoZSBJbnRlbCBpbnN0cnVjdGlvbiByZWZlcmVuY2UsIHRoZSBtZW1vcnkgb3BlcmFuZFxuIFx0ICogaXMgcmVhZCBldmVuIGlmIGl0IGlzbid0IG5lZWRlZCAoZS5nLiwgZm9yIHR5cGU9PWFsbClcbiBcdCAqL1xuLVx0aWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgdm14X2dldF9leGl0X3F1YWwodmNwdSksXG4rXHRpZiAoZ2V0X3ZteF9tZW1fYWRkcmVzcyh2Y3B1LCB2dF9nZXRfZXhpdF9xdWFsKHZjcHUpLFxuIFx0XHRcdFx0dm14X2luc3RydWN0aW9uX2luZm8sIGZhbHNlLFxuIFx0XHRcdFx0c2l6ZW9mKG9wZXJhbmQpLCBcdTAwMjZndmEpKVxuIFx0XHRyZXR1cm4gMTtcbkBAIC02MTc0LDcgKzYxNjgsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9wbWxfZnVsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHR0cmFjZV9rdm1fcG1sX2Z1bGwodmNwdS1cdTAwM2V2Y3B1X2lkKTtcbiBcbi1cdGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuK1x0ZXhpdF9xdWFsaWZpY2F0aW9uID0gdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcbiBcdC8qXG4gXHQgKiBQTUwgYnVmZmVyIEZVTEwgaGFwcGVuZWQgd2hpbGUgZXhlY3V0aW5nIGlyZXQgZnJvbSBOTUksXG5AQCAtNjI3OCw3ICs2MjcyLDcgQEAgc3RhdGljIGludCBoYW5kbGVfYnVzX2xvY2tfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBzdGF0aWMgaW50IGhhbmRsZV9ub3RpZnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4rXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXHRib29sIGNvbnRleHRfaW52YWxpZCA9IGV4aXRfcXVhbCBcdTAwMjYgTk9USUZZX1ZNX0NPTlRFWFRfSU5WQUxJRDtcbiBcbiBcdCsrdmNwdS1cdTAwM2VzdGF0Lm5vdGlmeV93aW5kb3dfZXhpdHM7XG5AQCAtNjMwOSwxMyArNjMwMywxMyBAQCBzdGF0aWMgaW50IHZteF9nZXRfbXNyX2ltbV9yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIHN0YXRpYyBpbnQgaGFuZGxlX3JkbXNyX2ltbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0cmV0dXJuIGt2bV9lbXVsYXRlX3JkbXNyX2ltbSh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSxcbitcdHJldHVybiBrdm1fZW11bGF0ZV9yZG1zcl9pbW0odmNwdSwgdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KSxcbiBcdFx0XHRcdCAgICAgdm14X2dldF9tc3JfaW1tX3JlZyh2Y3B1KSk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgaGFuZGxlX3dybXNyX2ltbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0cmV0dXJuIGt2bV9lbXVsYXRlX3dybXNyX2ltbSh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSxcbitcdHJldHVybiBrdm1fZW11bGF0ZV93cm1zcl9pbW0odmNwdSwgdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KSxcbiBcdFx0XHRcdCAgICAgdm14X2dldF9tc3JfaW1tX3JlZyh2Y3B1KSk7XG4gfVxuIFxuQEAgLTYzOTIsMTAgKzYzODYsMTAgQEAgdm9pZCB2bXhfZ2V0X2V4aXRfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiAqcmVhc29uLFxuIFx0c3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7XG4gXG4gXHQqcmVhc29uID0gdm14LVx1MDAzZXZ0LmV4aXRfcmVhc29uLmZ1bGw7XG4tXHQqaW5mbzEgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbitcdCppbmZvMSA9IHZ0X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXHRpZiAoISh2bXgtXHUwMDNldnQuZXhpdF9yZWFzb24uZmFpbGVkX3ZtZW50cnkpKSB7XG4gXHRcdCppbmZvMiA9IHZteC1cdTAwM2VpZHRfdmVjdG9yaW5nX2luZm87XG4tXHRcdCppbnRyX2luZm8gPSB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcbitcdFx0KmludHJfaW5mbyA9IHZ0X2dldF9pbnRyX2luZm8odmNwdSk7XG4gXHRcdGlmIChpc19leGNlcHRpb25fd2l0aF9lcnJvcl9jb2RlKCppbnRyX2luZm8pKVxuIFx0XHRcdCplcnJvcl9jb2RlID0gdm1jc19yZWFkMzIoVk1fRVhJVF9JTlRSX0VSUk9SX0NPREUpO1xuIFx0XHRlbHNlXG5AQCAtNjcwNiw3ICs2NzAwLDcgQEAgdm9pZCBkdW1wX3ZtY3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHN0YXRpYyBpbnQgX192bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpXG4ge1xuIFx0c3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7XG4tXHR1bmlvbiB2bXhfZXhpdF9yZWFzb24gZXhpdF9yZWFzb24gPSB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpO1xuK1x0dW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uID0gdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpO1xuIFx0dTMyIHZlY3RvcmluZ19pbmZvID0gdm14LVx1MDAzZWlkdF92ZWN0b3JpbmdfaW5mbztcbiBcdHUxNiBleGl0X2hhbmRsZXJfaW5kZXg7XG4gXG5AQCAtNjg3MCw3ICs2ODY0LDcgQEAgaW50IHZteF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aClcbiBcdCAqIEV4aXQgdG8gdXNlciBzcGFjZSB3aGVuIGJ1cyBsb2NrIGRldGVjdGVkIHRvIGluZm9ybSB0aGF0IHRoZXJlIGlzXG4gXHQgKiBhIGJ1cyBsb2NrIGluIGd1ZXN0LlxuIFx0ICovXG4tXHRpZiAodm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5idXNfbG9ja19kZXRlY3RlZCkge1xuK1x0aWYgKHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5idXNfbG9ja19kZXRlY3RlZCkge1xuIFx0XHRpZiAocmV0IFx1MDAzZSAwKVxuIFx0XHRcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZWV4aXRfcmVhc29uID0gS1ZNX0VYSVRfWDg2X0JVU19MT0NLO1xuIFxuQEAgLTcxNDMsNzQgKzcxMzcsNiBAQCB2b2lkIHZteF9sb2FkX2VvaV9leGl0bWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0ICplb2lfZXhpdF9iaXRtYXApXG4gXHR2bWNzX3dyaXRlNjQoRU9JX0VYSVRfQklUTUFQMywgZW9pX2V4aXRfYml0bWFwWzNdKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgaGFuZGxlX25tX2ZhdWx0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4te1xuLVx0Lypcbi1cdCAqIFNhdmUgeGZkX2VyciB0byBndWVzdF9mcHUgYmVmb3JlIGludGVycnVwdCBpcyBlbmFibGVkLCBzbyB0aGVcbi1cdCAqIE1TUiB2YWx1ZSBpcyBub3QgY2xvYmJlcmVkIGJ5IHRoZSBob3N0IGFjdGl2aXR5IGJlZm9yZSB0aGUgZ3Vlc3Rcbi1cdCAqIGhhcyBjaGFuY2UgdG8gY29uc3VtZSBpdC5cbi1cdCAqXG4tXHQgKiBVcGRhdGUgdGhlIGd1ZXN0J3MgWEZEX0VSUiBpZiBhbmQgb25seSBpZiBYRkQgaXMgZW5hYmxlZCwgYXMgdGhlICNOTVxuLVx0ICogaW50ZXJjZXB0aW9uIG1heSBoYXZlIGJlZW4gY2F1c2VkIGJ5IEwxIGludGVyY2VwdGlvbi4gIFBlciB0aGUgU0RNLFxuLVx0ICogWEZEX0VSUiBpcyBub3QgbW9kaWZpZWQgZm9yIG5vbi1YRkQgI05NLCBpLmUuIGlmIENSMC5UUz0xLlxuLVx0ICpcbi1cdCAqIE5vdGUsIFhGRF9FUlIgaXMgdXBkYXRlZCBfYmVmb3JlXyB0aGUgI05NIGludGVyY2VwdGlvbiBjaGVjaywgaS5lLlxuLVx0ICogdW5saWtlIENSMiBhbmQgRFI2LCB0aGUgdmFsdWUgaXMgbm90IGEgcGF5bG9hZCB0aGF0IGlzIGF0dGFjaGVkIHRvXG4tXHQgKiB0aGUgI05NIGV4Y2VwdGlvbi5cbi1cdCAqL1xuLVx0aWYgKGlzX3hmZF9ubV9mYXVsdCh2Y3B1KSlcbi1cdFx0cmRtc3JxKE1TUl9JQTMyX1hGRF9FUlIsIHZjcHUtXHUwMDNlYXJjaC5ndWVzdF9mcHUueGZkX2Vycik7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIGhhbmRsZV9leGNlcHRpb25faXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGludHJfaW5mbylcbi17XG4tXHQvKiBpZiBleGl0IGR1ZSB0byBQRiBjaGVjayBmb3IgYXN5bmMgUEYgKi9cbi1cdGlmIChpc19wYWdlX2ZhdWx0KGludHJfaW5mbykpXG4tXHRcdHZjcHUtXHUwMDNlYXJjaC5hcGYuaG9zdF9hcGZfZmxhZ3MgPSBrdm1fcmVhZF9hbmRfcmVzZXRfYXBmX2ZsYWdzKCk7XG4tXHQvKiBpZiBleGl0IGR1ZSB0byBOTSwgaGFuZGxlIGJlZm9yZSBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkICovXG4tXHRlbHNlIGlmIChpc19ubV9mYXVsdChpbnRyX2luZm8pKVxuLVx0XHRoYW5kbGVfbm1fZmF1bHRfaXJxb2ZmKHZjcHUpO1xuLVx0LyogSGFuZGxlIG1hY2hpbmUgY2hlY2tzIGJlZm9yZSBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkICovXG4tXHRlbHNlIGlmIChpc19tYWNoaW5lX2NoZWNrKGludHJfaW5mbykpXG4tXHRcdGt2bV9tYWNoaW5lX2NoZWNrKCk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIGhhbmRsZV9leHRlcm5hbF9pbnRlcnJ1cHRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi1cdFx0XHRcdFx0ICAgICB1MzIgaW50cl9pbmZvKVxuLXtcbi1cdHVuc2lnbmVkIGludCB2ZWN0b3IgPSBpbnRyX2luZm8gXHUwMDI2IElOVFJfSU5GT19WRUNUT1JfTUFTSztcbi1cbi1cdGlmIChLVk1fQlVHKCFpc19leHRlcm5hbF9pbnRyKGludHJfaW5mbyksIHZjcHUtXHUwMDNla3ZtLFxuLVx0ICAgIFwidW5leHBlY3RlZCBWTS1FeGl0IGludGVycnVwdCBpbmZvOiAweCV4XCIsIGludHJfaW5mbykpXG4tXHRcdHJldHVybjtcbi1cbi1cdGt2bV9iZWZvcmVfaW50ZXJydXB0KHZjcHUsIEtWTV9IQU5ETElOR19JUlEpO1xuLVx0eDg2X2VudHJ5X2Zyb21fa3ZtKEVWRU5UX1RZUEVfRVhUSU5ULCB2ZWN0b3IpO1xuLVx0a3ZtX2FmdGVyX2ludGVycnVwdCh2Y3B1KTtcbi1cbi1cdHZjcHUtXHUwMDNlYXJjaC5hdF9pbnN0cnVjdGlvbl9ib3VuZGFyeSA9IHRydWU7XG4tfVxuLVxuLXZvaWQgdm14X2hhbmRsZV9leGl0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4te1xuLVx0aWYgKHRvX3Z0KHZjcHUpLVx1MDAzZWVtdWxhdGlvbl9yZXF1aXJlZClcbi1cdFx0cmV0dXJuO1xuLVxuLVx0c3dpdGNoICh2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljKSB7XG4tXHRjYXNlIEVYSVRfUkVBU09OX0VYVEVSTkFMX0lOVEVSUlVQVDpcbi1cdFx0aGFuZGxlX2V4dGVybmFsX2ludGVycnVwdF9pcnFvZmYodmNwdSwgdm14X2dldF9pbnRyX2luZm8odmNwdSkpO1xuLVx0XHRicmVhaztcbi1cdGNhc2UgRVhJVF9SRUFTT05fRVhDRVBUSU9OX05NSTpcbi1cdFx0aGFuZGxlX2V4Y2VwdGlvbl9pcnFvZmYodmNwdSwgdm14X2dldF9pbnRyX2luZm8odmNwdSkpO1xuLVx0XHRicmVhaztcbi1cdGNhc2UgRVhJVF9SRUFTT05fTUNFX0RVUklOR19WTUVOVFJZOlxuLVx0XHRrdm1fbWFjaGluZV9jaGVjaygpO1xuLVx0XHRicmVhaztcbi1cdGRlZmF1bHQ6XG4tXHRcdGJyZWFrO1xuLVx0fVxuLX1cbi1cbiAvKlxuICAqIFRoZSBrdm0gcGFyYW1ldGVyIGNhbiBiZSBOVUxMIChtb2R1bGUgaW5pdGlhbGl6YXRpb24sIG9yIGludm9jYXRpb24gYmVmb3JlXG4gICogVk0gY3JlYXRpb24pLiBCZSBzdXJlIHRvIGNoZWNrIHRoZSBrdm0gcGFyYW1ldGVyIGJlZm9yZSB1c2luZyBpdC5cbkBAIC03MjUwLDcgKzcxNzYsNyBAQCBzdGF0aWMgdm9pZCB2bXhfcmVjb3Zlcl9ubWlfYmxvY2tpbmcoc3RydWN0IHZjcHVfdm14ICp2bXgpXG4gXHRcdGlmICh2bXgtXHUwMDNlbG9hZGVkX3ZtY3MtXHUwMDNlbm1pX2tub3duX3VubWFza2VkKVxuIFx0XHRcdHJldHVybjtcbiBcbi1cdFx0ZXhpdF9pbnRyX2luZm8gPSB2bXhfZ2V0X2ludHJfaW5mbyhcdTAwMjZ2bXgtXHUwMDNldmNwdSk7XG4rXHRcdGV4aXRfaW50cl9pbmZvID0gdnRfZ2V0X2ludHJfaW5mbyhcdTAwMjZ2bXgtXHUwMDNldmNwdSk7XG4gXHRcdHVuYmxvY2tfbm1pID0gKGV4aXRfaW50cl9pbmZvIFx1MDAyNiBJTlRSX0lORk9fVU5CTE9DS19OTUkpICE9IDA7XG4gXHRcdHZlY3RvciA9IGV4aXRfaW50cl9pbmZvIFx1MDAyNiBJTlRSX0lORk9fVkVDVE9SX01BU0s7XG4gXHRcdC8qXG5AQCAtNzQxNywxNCArNzM0MywxNCBAQCBzdGF0aWMgZmFzdHBhdGhfdCB2bXhfZXhpdF9oYW5kbGVyc19mYXN0cGF0aChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHQgKiB0aGUgZmFzdHBhdGggZXZlbiwgYWxsIG90aGVyIGV4aXRzIG11c3QgdXNlIHRoZSBzbG93IHBhdGguXG4gXHQgKi9cbiBcdGlmIChpc19ndWVzdF9tb2RlKHZjcHUpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMgIT0gRVhJVF9SRUFTT05fUFJFRU1QVElPTl9USU1FUilcbitcdCAgICB2dF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMgIT0gRVhJVF9SRUFTT05fUFJFRU1QVElPTl9USU1FUilcbiBcdFx0cmV0dXJuIEVYSVRfRkFTVFBBVEhfTk9ORTtcbiBcbi1cdHN3aXRjaCAodm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5iYXNpYykge1xuK1x0c3dpdGNoICh2dF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYmFzaWMpIHtcbiBcdGNhc2UgRVhJVF9SRUFTT05fTVNSX1dSSVRFOlxuIFx0XHRyZXR1cm4gaGFuZGxlX2Zhc3RwYXRoX3dybXNyKHZjcHUpO1xuIFx0Y2FzZSBFWElUX1JFQVNPTl9NU1JfV1JJVEVfSU1NOlxuLVx0XHRyZXR1cm4gaGFuZGxlX2Zhc3RwYXRoX3dybXNyX2ltbSh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSxcbitcdFx0cmV0dXJuIGhhbmRsZV9mYXN0cGF0aF93cm1zcl9pbW0odmNwdSwgdnRfZ2V0X2V4aXRfcXVhbCh2Y3B1KSxcbiBcdFx0XHRcdFx0XHQgdm14X2dldF9tc3JfaW1tX3JlZyh2Y3B1KSk7XG4gXHRjYXNlIEVYSVRfUkVBU09OX1BSRUVNUFRJT05fVElNRVI6XG4gXHRcdHJldHVybiBoYW5kbGVfZmFzdHBhdGhfcHJlZW1wdGlvbl90aW1lcih2Y3B1LCBmb3JjZV9pbW1lZGlhdGVfZXhpdCk7XG5AQCAtNzQzNywxNyArNzM2Myw2IEBAIHN0YXRpYyBmYXN0cGF0aF90IHZteF9leGl0X2hhbmRsZXJzX2Zhc3RwYXRoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdH1cbiB9XG4gXG4tbm9pbnN0ciB2b2lkIHZteF9oYW5kbGVfbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi17XG4tXHRpZiAoKHUxNil2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJhc2ljICE9IEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUkgfHxcbi1cdCAgICAhaXNfbm1pKHZteF9nZXRfaW50cl9pbmZvKHZjcHUpKSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0a3ZtX2JlZm9yZV9pbnRlcnJ1cHQodmNwdSwgS1ZNX0hBTkRMSU5HX05NSSk7XG4tXHR4ODZfZW50cnlfZnJvbV9rdm0oRVZFTlRfVFlQRV9OTUksIE5NSV9WRUNUT1IpO1xuLVx0a3ZtX2FmdGVyX2ludGVycnVwdCh2Y3B1KTtcbi19XG4tXG4gc3RhdGljIG5vaW5zdHIgdm9pZCB2bXhfdmNwdV9lbnRlcl9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0XHRcdFx0dW5zaWduZWQgaW50IGZsYWdzKVxuIHtcbkBAIC03NDc3LDEwICs3MzkyLDEwIEBAIHN0YXRpYyBub2luc3RyIHZvaWQgdm14X3ZjcHVfZW50ZXJfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHR9XG4gXG4gXHR2bXgtXHUwMDNldnQuZXhpdF9yZWFzb24uZnVsbCA9IHZtY3NfcmVhZDMyKFZNX0VYSVRfUkVBU09OKTtcbi1cdGlmIChsaWtlbHkoIXZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkpKVxuK1x0aWYgKGxpa2VseSghdnRfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5KSlcbiBcdFx0dm14LVx1MDAzZWlkdF92ZWN0b3JpbmdfaW5mbyA9IHZtY3NfcmVhZDMyKElEVF9WRUNUT1JJTkdfSU5GT19GSUVMRCk7XG4gXG4tXHR2bXhfaGFuZGxlX25taSh2Y3B1KTtcbitcdHZ0X2hhbmRsZV9ubWkodmNwdSk7XG4gXG4gb3V0OlxuIFx0Z3Vlc3Rfc3RhdGVfZXhpdF9pcnFvZmYoKTtcbkBAIC03NjE3LDcgKzc1MzIsNyBAQCBmYXN0cGF0aF90IHZteF92Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBydW5fZmxhZ3MpXG4gXHRcdCAqIGNoZWNraW5nLlxuIFx0XHQgKi9cbiBcdFx0aWYgKHZjcHUtXHUwMDNlYXJjaC5uZXN0ZWRfcnVuX3BlbmRpbmcgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAhdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mYWlsZWRfdm1lbnRyeSlcbitcdFx0ICAgICF2dF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkpXG4gXHRcdFx0Kyt2Y3B1LVx1MDAzZXN0YXQubmVzdGVkX3J1bjtcbiBcbiBcdFx0dmNwdS1cdTAwM2VhcmNoLm5lc3RlZF9ydW5fcGVuZGluZyA9IDA7XG5AQCAtNzYyOCw3ICs3NTQzLDcgQEAgZmFzdHBhdGhfdCB2bXhfdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcnVuX2ZsYWdzKVxuIFxuIFx0dHJhY2Vfa3ZtX2V4aXQodmNwdSwgS1ZNX0lTQV9WTVgpO1xuIFxuLVx0aWYgKHVubGlrZWx5KHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkpKVxuK1x0aWYgKHVubGlrZWx5KHZ0X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mYWlsZWRfdm1lbnRyeSkpXG4gXHRcdHJldHVybiBFWElUX0ZBU1RQQVRIX05PTkU7XG4gXG4gXHR2bXgtXHUwMDNlbG9hZGVkX3ZtY3MtXHUwMDNlbGF1bmNoZWQgPSAxO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmggYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5oXG5pbmRleCBkYzg1MTdmMTViYzQ2Li4zMjQ3YjU1YjM0ODQzIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC92bXguaFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC92bXguaFxuQEAgLTMwNCw0MyArMzA0LDYgQEAgc3RydWN0IGt2bV92bXgge1xuIFx0dTY0ICpwaWRfdGFibGU7XG4gfTtcbiBcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHN0cnVjdCB2Y3B1X3Z0ICp0b192dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4te1xuLVx0cmV0dXJuIFx1MDAyNihjb250YWluZXJfb2YodmNwdSwgc3RydWN0IHZjcHVfdm14LCB2Y3B1KS1cdTAwM2V2dCk7XG4tfVxuLVxuLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IGt2bV92Y3B1ICp2dF90b192Y3B1KHN0cnVjdCB2Y3B1X3Z0ICp2dClcbi17XG4tXHRyZXR1cm4gXHUwMDI2KGNvbnRhaW5lcl9vZih2dCwgc3RydWN0IHZjcHVfdm14LCB2dCktXHUwMDNldmNwdSk7XG4tfVxuLVxuLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5pb24gdm14X2V4aXRfcmVhc29uIHZteF9nZXRfZXhpdF9yZWFzb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLXtcbi1cdHJldHVybiB0b192dCh2Y3B1KS1cdTAwM2VleGl0X3JlYXNvbjtcbi19XG4tXG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBsb25nIHZteF9nZXRfZXhpdF9xdWFsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi17XG4tXHRzdHJ1Y3QgdmNwdV92dCAqdnQgPSB0b192dCh2Y3B1KTtcbi1cbi1cdGlmICgha3ZtX3JlZ2lzdGVyX3Rlc3RfYW5kX21hcmtfYXZhaWxhYmxlKHZjcHUsIFZDUFVfUkVHX0VYSVRfSU5GT18xKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAhV0FSTl9PTl9PTkNFKGlzX3RkX3ZjcHUodmNwdSkpKVxuLVx0XHR2dC1cdTAwM2VleGl0X3F1YWxpZmljYXRpb24gPSB2bWNzX3JlYWRsKEVYSVRfUVVBTElGSUNBVElPTik7XG4tXG4tXHRyZXR1cm4gdnQtXHUwMDNlZXhpdF9xdWFsaWZpY2F0aW9uO1xuLX1cbi1cbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiB2bXhfZ2V0X2ludHJfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4te1xuLVx0c3RydWN0IHZjcHVfdnQgKnZ0ID0gdG9fdnQodmNwdSk7XG4tXG4tXHRpZiAoIWt2bV9yZWdpc3Rlcl90ZXN0X2FuZF9tYXJrX2F2YWlsYWJsZSh2Y3B1LCBWQ1BVX1JFR19FWElUX0lORk9fMikgXHUwMDI2XHUwMDI2XG4tXHQgICAgIVdBUk5fT05fT05DRShpc190ZF92Y3B1KHZjcHUpKSlcbi1cdFx0dnQtXHUwMDNlZXhpdF9pbnRyX2luZm8gPSB2bWNzX3JlYWQzMihWTV9FWElUX0lOVFJfSU5GTyk7XG4tXG4tXHRyZXR1cm4gdnQtXHUwMDNlZXhpdF9pbnRyX2luZm87XG4tfVxuLVxuIHZvaWQgdm14X3ZjcHVfbG9hZF92bWNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSk7XG4gaW50IGFsbG9jYXRlX3ZwaWQodm9pZCk7XG4gdm9pZCBmcmVlX3ZwaWQoaW50IHZwaWQpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oIGIvYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmhcbmluZGV4IDA1NGZkMTRiYjJlMTYuLjdhYzAyYzY4NDU3ZjEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmhcbkBAIC0yNyw3ICsyNyw2IEBAIHZvaWQgdm14X3ZjcHVfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGluaXRfZXZlbnQpO1xuIHZvaWQgdm14X3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpO1xuIHZvaWQgdm14X3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gaW50IHZteF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aCk7XG4tdm9pZCB2bXhfaGFuZGxlX2V4aXRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gaW50IHZteF9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCB2bXhfdXBkYXRlX2VtdWxhdGVkX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gYm9vbCB2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDk6MjQ6NTkuMzc0NTA1MDE1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNzQ4NDE3NjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBBc3Nlc3NtZW50OiBSZWZhY3RvcmVkIFZNWC9URFggQ29kZSoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZGV0ZXJtaW5lIGlmIHdlIG5lZWQgdG8gZmlyZSB1cCBhIEtNU0FOIHNlc3Npb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgcHJpbWFyaWx5IGEgcmVmYWN0b3JpbmcgZXhlcmNpc2UsIGJ1dCB3ZSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi5cblxuRmlyc3QsIEkgc2VlIHRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyByZW9yZ2FuaXppbmcgYW5kIHJlbmFtaW5nIGNvZGUgcmVsYXRlZCB0byBLVk0gSW50ZWwncyBWTVggYW5kIFREWCBpbXBsZW1lbnRhdGlvbnMuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYHN0cnVjdCB2Y3B1X3ZteF90ZHhgIGlzIHRoZSBrZXkg4oCTIGl0J3MgYSB1bmlmaWVkIHN0cnVjdHVyZSB0aGF0IGFsbG93cyB1cyB0byB0cmVhdCBib3RoIFZNWCBhbmQgVERYIHZDUFVzIHNpbWlsYXJseSwgc3BlY2lmaWNhbGx5IGZvciBhY2Nlc3NpbmcgdGhlIGB2dGAgbWVtYmVyIHRocm91Z2ggdGhlIGB0b192dCgpYCBoZWxwZXIuIFRoZSB1c2Ugb2YgYGNvbnRhaW5lcl9vZmAgaXMgZnVuZGFtZW50YWwgdG8gS1ZNJ3MgYXJjaGl0ZWN0dXJlIGFuZCB0aGUgcHVycG9zZSBvZiB0aGlzIHJlZmFjdG9yIGlzIHRvIGFic3RyYWN0IGl0IHVuZGVyIGEgY29tbW9uIG5hbWUuIFRoZSBwYXRjaCBtb3ZlcyBhbmQgcmVuYW1lcyBhIHNlcmllcyBvZiBoZWxwZXIgZnVuY3Rpb25zIChlLmcuLCBgdm14X2dldF9leGl0X3JlYXNvbmAgdG8gYHZ0X2dldF9leGl0X3JlYXNvbmApIGFuZCBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgaW50ZXJydXB0cyBhbmQgZXhjZXB0aW9ucy5cblxuTXkgZmlyc3QgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZXJlIGFyZSBubyBtYWpvciBmdW5jdGlvbmFsIGNoYW5nZXMsIHRoZSBtYWluIGdvYWxzIGlzIHRvIHNpbXBsaWZ5IGFuZCB1bmlmeSBjb21tb24gVk1YL1REWCBjb2RlIGZvciBpbXByb3ZlZCBtYWludGFpbmFiaWxpdHkuXG5cbkkndmUgY2FyZWZ1bGx5IGV4YW1pbmVkIHRoZSBgdG9fdnRgIGZ1bmN0aW9uIG5vdyBiZWluZyBwbGFjZWQgaW4gY29tbW9uLmggYWxvbmcgd2l0aCB0aGUgbW92ZWQgZXhpdCBhbmQgaW50ZXJydXB0IGhhbmRsZXJzLiBUaGVzZSBhcmUgYWxtb3N0IGlkZW50aWNhbCB0byB0aGVpciBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbnMsIGFuZCBvbmx5IHRoZSBuYW1pbmcgaGFzIGJlZW4gYWRqdXN0ZWQgdG8gdXNlIHRoZSB1bmlmaWVkIFwidnRcIiBwcmVmaXguIEltcG9ydGFudGx5LCB0aGUgYHN0YXRpY19hc3NlcnRgIHN0YXRlbWVudHMgY29uZmlybWluZyB0aGUgb2Zmc2V0cyBvZiB0aGUgYHZ0YCBtZW1iZXIgd2l0aGluIGB2Y3B1X3ZteF90ZHhgLCBgdmNwdV92bXhgLCBhbmQgYHZjcHVfdGR4YCBzdHJ1Y3R1cmVzIGFyZSBjcnVjaWFsLiBUaGlzIGd1YXJhbnRlZXMgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBgY29udGFpbmVyX29mYCBtYWNybyBhbmQgZW5zdXJlcyBubyBtZW1vcnkgY29ycnVwdGlvbiBjYW4gb2NjdXIgZHVlIHRvIHN0cnVjdCBtZW1iZXIgYWNjZXNzIHRocm91Z2ggYHRvX3Z0YCBhbmQgYHZ0X3RvX3ZjcHVgLiBJdCBlbGltaW5hdGVzIHRoZSBwb3NzaWJpbGl0eSBvZiBvZmZzZXQgbWlzbWF0Y2ggYnVncy5cblxuTm93LCBsZXQncyBwdXQgb24gdGhlIEtNU0FOIGhhdC4gV2UgbmVlZCB0byBtZXRob2RpY2FsbHkgY2hlY2sgZm9yIGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLlxuXG4xLiAgKipLZXJuZWwtVXNlciBJbnRlcmZhY2U6KiogRG9lcyB0aGlzIHBhdGNoIGFkZCwgcmVtb3ZlIG9yIGNoYW5nZSBhbnkga2VybmVsIHN0cnVjdHVyZXMgdGhhdCBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2U/IE5vLCB0aGlzIGlzIHB1cmVseSBpbnRlcm5hbCByZWZhY3RvcmluZy5cbjIuICAqKkNvbmRpdGlvbmFsIExvZ2ljL0JyYW5jaGluZzoqKiBEb2VzIHRoZSBwYXRjaCBpbnRyb2R1Y2UgYW55IG5ldyBjb25kaXRpb25hbCBsb2dpYyB3aGVyZSB0aGUgb3V0Y29tZSBtaWdodCBkZXBlbmQgb24gYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZT8gTm90IHRoYXQgSSBjYW4gc2VlLiBUaGUgY29kZSBpcyBjYXJlZnVsbHkgc3RydWN0dXJlZCB0byBhdm9pZCBzdWNoIHNjZW5hcmlvcy5cbjMuICAqKkRhdGEgU3RydWN0dXJlIEluaXRpYWxpemF0aW9uOioqIElzIHRoZXJlIGFueSBpbnRyb2R1Y3Rpb24sIG9yIGNoYW5nZSB0byBjb21wbGV4IGRhdGEgc3RydWN0dXJlcywgYW5kIGlmIHNvLCBob3cgYXJlIHRoZXkgaW5pdGlhbGl6ZWQ/IEFyZSBhbnkgZmllbGRzIGxlZnQgdW5pbml0aWFsaXplZCB0aGF0IGNvdWxkIGxhdGVyIGJlIHJlYWQ/IE5vLiBUaGUgcmVmYWN0b3JpbmcgaXRzZWxmIGRvZXNuJ3QgYWx0ZXIgZGF0YSBzdHJ1Y3R1cmVzIGluIGEgd2F5IHRoYXQgaW50cm9kdWNlcyB0aGlzIHJpc2suXG40LiAgKipCb3VuZHMvTGVuZ3RoIENoZWNrczoqKiBEb2VzIGl0IGltcGFjdCBhbnkgZXhpc3RpbmcgY2hlY2tzIGluIGEgd2F5IHRoYXQgYWxsb3dzIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGRhdGE/IE5vLlxuXG5BZnRlciB0aGlzIGNhcmVmdWwgaW5zcGVjdGlvbiwgSSdtIGNvbmZpZGVudCB0aGF0IHRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIFRoZXNlIGtpbmRzIG9mIGJ1Z3MsIHdpdGggcG90ZW50aWFsIHN0cnVjdCBtZW1iZXIgb2Zmc2V0cyBtaXNtYXRjaGVzLCB3b3VsZCBiZSBjYXVnaHQgd2l0aCBzdGFuZGFyZCBtZW1vcnkgY2hlY2tlcnMgbGlrZSBLQVNBTiBkdXJpbmcgcm91dGluZSB0ZXN0aW5nLiBUaGUga2V5IGlzIGluIHRoZSBzdGF0aWMgYXNzZXJ0cyBhbmQgdGhlIHJpZ29yb3VzIGNvZGUgcmV2aWV3IGJ5IHRoZSBjb21tdW5pdHkuIEl0J3MgZXNzZW50aWFsbHkgc3RydWN0dXJhbCByZWZhY3RvcmluZyB0aGF0IG1vdmVzIGNvZGUgYXJvdW5kIHdoaWxlIHJldGFpbmluZyB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5LlxuXG5NeSBjb25jbHVzaW9uIGlzIHRoYXQgdGhpcyBwYXRjaCAqZG9lcyBub3QqIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGUgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcmVmYWN0b3JpbmcgYXJlIG1pbmltYWwsIHByaW1hcmlseSBsaW1pdGVkIHRvIHRoZSBjb3JyZWN0bmVzcyBvZiBwb2ludGVyIGFyaXRobWV0aWMgd2l0aCBvZmZzZXRzLiBUaGVzZSBhcmUgdGhpbmdzIHRoYXQgd291bGQgYmUgcmVhZGlseSBwaWNrZWQgdXAgYnkgZXhpc3RpbmcgS1ZNIHRlc3QgaW5mcmFzdHJ1Y3R1cmUgYW5kIG1lbW9yeSBzYW5pdGl6ZXJzLCBzbyBgTmVlZHNLTVNBTmAgPSBgZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTAwNywiT3V0cHV0VG9rZW5zIjozMzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzQ1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDk6MjU6MTAuMTIyOTI3Mjc3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHJlZmFjdG9yaW5nIG9mIEtWTSBJbnRlbCBWTVggYW5kIFREWCBjb2RlIHRvIGNvbnNvbGlkYXRlIGNvbW1vbiB2aXJ0dWFsaXphdGlvbiBpbmZyYXN0cnVjdHVyZSAoVlQpIGJldHdlZW4gc3RhbmRhcmQgVk1YIGFuZCBURFggdkNQVXM6XFxuMS4gSXQgZGVmaW5lcyBhIGNvbW1vbiB3cmFwcGVyIGxheW91dCBgc3RydWN0IHZjcHVfdm14X3RkeGAgd2l0aCBjb21waWxlLXRpbWUgYXNzZXJ0aW9ucyAoYHN0YXRpY19hc3NlcnRgKSBlbnN1cmluZyBvZmZzZXQgbWF0Y2hpbmcgb2YgYHN0cnVjdCB2Y3B1X3Z0YCBhY3Jvc3MgYHZjcHVfdm14YCBhbmQgYHZjcHVfdGR4YC5cXG4yLiBJdCBtb3ZlcyBhbmQgcmVuYW1lcyBoZWxwZXIgZnVuY3Rpb25zIChgdG9fdnRgLCBgdnRfZ2V0X2V4aXRfcmVhc29uYCwgYHZ0X2dldF9leGl0X3F1YWxgLCBgdnRfZ2V0X2ludHJfaW5mb2AsIGV0Yy4pIGZyb20gYHZteC5oYC9gdm14LmNgIHRvIGBjb21tb24uaGAvYG1haW4uY2AuXFxuMy4gSXQgbW92ZXMgY29tbW9uIGV4aXQgYW5kIGludGVycnVwdCBoYW5kbGluZyBmdW5jdGlvbnMgKGB2dF9oYW5kbGVfZXhpdF9pcnFvZmZgLCBgdnRfaGFuZGxlX25taWAsIGBoYW5kbGVfZXh0ZXJuYWxfaW50ZXJydXB0X2lycW9mZmAsIGV0Yy4pIHRvIGBtYWluLmNgLlxcbjQuIEl0IHJlbmFtZXMgcG9zdGVkIGludGVycnVwdCByb3V0aW5lcyB0byB1c2UgdGhlIGB2dF9gIHByZWZpeCBhY3Jvc3MgdGhlIGNvZGViYXNlLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmcgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgYnVmZmVyIGJvdW5kcy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBzdHJ1Y3QgbGF5b3V0IG9yIG9mZnNldHMgYXJlIGd1YXJkZWQgYXQgY29tcGlsZSB0aW1lIGJ5IGBzdGF0aWNfYXNzZXJ0YCBvciB3b3VsZCBtYW5pZmVzdCBhcyBtZW1vcnkgY29ycnVwdGlvbi9PT0IgYWNjZXNzIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgYnVpbGRzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHJlZmFjdG9yaW5nIG9mIEtWTSBJbnRlbCBWTVggYW5kIFREWCBjb2RlIHRvIGNvbnNvbGlkYXRlIGNvbW1vbiB2aXJ0dWFsaXphdGlvbiBpbmZyYXN0cnVjdHVyZSAoVlQpIGJldHdlZW4gc3RhbmRhcmQgVk1YIGFuZCBURFggdkNQVXM6XFxuMS4gSXQgZGVmaW5lcyBhIGNvbW1vbiB3cmFwcGVyIGxheW91dCBgc3RydWN0IHZjcHVfdm14X3RkeGAgd2l0aCBjb21waWxlLXRpbWUgYXNzZXJ0aW9ucyAoYHN0YXRpY19hc3NlcnRgKSBlbnN1cmluZyBvZmZzZXQgbWF0Y2hpbmcgb2YgYHN0cnVjdCB2Y3B1X3Z0YCBhY3Jvc3MgYHZjcHVfdm14YCBhbmQgYHZjcHVfdGR4YC5cXG4yLiBJdCBtb3ZlcyBhbmQgcmVuYW1lcyBoZWxwZXIgZnVuY3Rpb25zIChgdG9fdnRgLCBgdnRfZ2V0X2V4aXRfcmVhc29uYCwgYHZ0X2dldF9leGl0X3F1YWxgLCBgdnRfZ2V0X2ludHJfaW5mb2AsIGV0Yy4pIGZyb20gYHZteC5oYC9gdm14LmNgIHRvIGBjb21tb24uaGAvYG1haW4uY2AuXFxuMy4gSXQgbW92ZXMgY29tbW9uIGV4aXQgYW5kIGludGVycnVwdCBoYW5kbGluZyBmdW5jdGlvbnMgKGB2dF9oYW5kbGVfZXhpdF9pcnFvZmZgLCBgdnRfaGFuZGxlX25taWAsIGBoYW5kbGVfZXh0ZXJuYWxfaW50ZXJydXB0X2lycW9mZmAsIGV0Yy4pIHRvIGBtYWluLmNgLlxcbjQuIEl0IHJlbmFtZXMgcG9zdGVkIGludGVycnVwdCByb3V0aW5lcyB0byB1c2UgdGhlIGB2dF9gIHByZWZpeCBhY3Jvc3MgdGhlIGNvZGViYXNlLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmcgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgYnVmZmVyIGJvdW5kcy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBzdHJ1Y3QgbGF5b3V0IG9yIG9mZnNldHMgYXJlIGd1YXJkZWQgYXQgY29tcGlsZSB0aW1lIGJ5IGBzdGF0aWNfYXNzZXJ0YCBvciB3b3VsZCBtYW5pZmVzdCBhcyBtZW1vcnkgY29ycnVwdGlvbi9PT0IgYWNjZXNzIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgYnVpbGRzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow52b6l[1] Phase: Succeeded StartedAt: 2026-09-05 09:25:22 +0000 UTC FinishedAt: 2026-09-05 09:25:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52b6l[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-05 09:25:22 +0000 UTC FinishedAt: 2026-09-05 09:25:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52b6l[2] Phase: Succeeded StartedAt: 2026-09-05 09:25:22 +0000 UTC FinishedAt: 2026-09-05 13:08:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52b6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vt_handle_exit_irqoff","vt_handle_nmi","vt_vcpu_pi_load","vt_vcpu_pi_put","vt_pi_start_bypass","vt_pi_update_irte","vmx_handle_exit","vmx_vcpu_run","nested_vmx_reflect_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"5641ba85-6f23-473f-8bc1-e77ee42483b1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-05 09:25:22 +0000 UTC FinishedAt: 2026-09-05 13:08:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vt_handle_exit_irqoff","vt_handle_nmi","vt_vcpu_pi_load","vt_vcpu_pi_put","vt_pi_start_bypass","vt_pi_update_irte","vmx_handle_exit","vmx_vcpu_run","nested_vmx_reflect_vmexit"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"5641ba85-6f23-473f-8bc1-e77ee42483b1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow52b6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vt_handle_exit_irqoff","vt_handle_nmi","vt_vcpu_pi_load","vt_vcpu_pi_put","vt_pi_start_bypass","vt_pi_update_irte","vmx_handle_exit","vmx_vcpu_run","nested_vmx_reflect_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"5641ba85-6f23-473f-8bc1-e77ee42483b1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-05 09:25:22 +0000 UTC FinishedAt: 2026-09-05 09:25:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52b6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vt_handle_exit_irqoff","vt_handle_nmi","vt_vcpu_pi_load","vt_vcpu_pi_put","vt_pi_start_bypass","vt_pi_update_irte","vmx_handle_exit","vmx_vcpu_run","nested_vmx_reflect_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"5641ba85-6f23-473f-8bc1-e77ee42483b1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-05 09:25:22 +0000 UTC FinishedAt: 2026-09-05 09:25:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflow52b6l/series-workflow52b6l-convert-artifact-115933300/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow52b6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vt_handle_exit_irqoff","vt_handle_nmi","vt_vcpu_pi_load","vt_vcpu_pi_put","vt_pi_start_bypass","vt_pi_update_irte","vmx_handle_exit","vmx_vcpu_run","nested_vmx_reflect_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"5641ba85-6f23-473f-8bc1-e77ee42483b1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-05 09:25:33 +0000 UTC FinishedAt: 2026-09-05 09:43:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52b6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vt_handle_exit_irqoff","vt_handle_nmi","vt_vcpu_pi_load","vt_vcpu_pi_put","vt_pi_start_bypass","vt_pi_update_irte","vmx_handle_exit","vmx_vcpu_run","nested_vmx_reflect_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"5641ba85-6f23-473f-8bc1-e77ee42483b1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-05 09:25:33 +0000 UTC FinishedAt: 2026-09-05 09:43:34 +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:*87514cc5-94ca-4d62-b4c8-e2857c8b537d,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-workflow52b6l/series-workflow52b6l-convert-artifact-115933300/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": "e128e3c4-8851-4843-8a5a-82ec65a4009b", "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-workflow52b6l/series-workflow52b6l-build-action-9626994/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow52b6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vt_handle_exit_irqoff","vt_handle_nmi","vt_vcpu_pi_load","vt_vcpu_pi_put","vt_pi_start_bypass","vt_pi_update_irte","vmx_handle_exit","vmx_vcpu_run","nested_vmx_reflect_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"5641ba85-6f23-473f-8bc1-e77ee42483b1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-05 09:25:33 +0000 UTC FinishedAt: 2026-09-05 09:43:22 +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:*87514cc5-94ca-4d62-b4c8-e2857c8b537d,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-workflow52b6l/series-workflow52b6l-convert-artifact-115933300/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": "e128e3c4-8851-4843-8a5a-82ec65a4009b", "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-workflow52b6l/series-workflow52b6l-build-action-9626994/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow52b6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vt_handle_exit_irqoff","vt_handle_nmi","vt_vcpu_pi_load","vt_vcpu_pi_put","vt_pi_start_bypass","vt_pi_update_irte","vmx_handle_exit","vmx_vcpu_run","nested_vmx_reflect_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"5641ba85-6f23-473f-8bc1-e77ee42483b1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-05 09:43:34 +0000 UTC FinishedAt: 2026-09-05 09:43:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52b6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vt_handle_exit_irqoff","vt_handle_nmi","vt_vcpu_pi_load","vt_vcpu_pi_put","vt_pi_start_bypass","vt_pi_update_irte","vmx_handle_exit","vmx_vcpu_run","nested_vmx_reflect_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"5641ba85-6f23-473f-8bc1-e77ee42483b1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-05 09:43:34 +0000 UTC FinishedAt: 2026-09-05 09:43:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52b6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vt_handle_exit_irqoff","vt_handle_nmi","vt_vcpu_pi_load","vt_vcpu_pi_put","vt_pi_start_bypass","vt_pi_update_irte","vmx_handle_exit","vmx_vcpu_run","nested_vmx_reflect_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"5641ba85-6f23-473f-8bc1-e77ee42483b1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-05 09:43:34 +0000 UTC FinishedAt: 2026-09-05 09:43:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52b6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vt_handle_exit_irqoff","vt_handle_nmi","vt_vcpu_pi_load","vt_vcpu_pi_put","vt_pi_start_bypass","vt_pi_update_irte","vmx_handle_exit","vmx_vcpu_run","nested_vmx_reflect_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"5641ba85-6f23-473f-8bc1-e77ee42483b1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-05 09:43:34 +0000 UTC FinishedAt: 2026-09-05 09:43:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"5641ba85-6f23-473f-8bc1-e77ee42483b1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflow52b6l/series-workflow52b6l-convert-artifact-395222323/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow52b6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vt_handle_exit_irqoff","vt_handle_nmi","vt_vcpu_pi_load","vt_vcpu_pi_put","vt_pi_start_bypass","vt_pi_update_irte","vmx_handle_exit","vmx_vcpu_run","nested_vmx_reflect_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"5641ba85-6f23-473f-8bc1-e77ee42483b1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-05 09:43:45 +0000 UTC FinishedAt: 2026-09-05 09:45:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52b6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vt_handle_exit_irqoff","vt_handle_nmi","vt_vcpu_pi_load","vt_vcpu_pi_put","vt_pi_start_bypass","vt_pi_update_irte","vmx_handle_exit","vmx_vcpu_run","nested_vmx_reflect_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"5641ba85-6f23-473f-8bc1-e77ee42483b1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-05 09:43:45 +0000 UTC FinishedAt: 2026-09-05 09:45:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e128e3c4-8851-4843-8a5a-82ec65a4009b,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-workflow52b6l/series-workflow52b6l-build-action-9626994/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-workflow52b6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vt_handle_exit_irqoff","vt_handle_nmi","vt_vcpu_pi_load","vt_vcpu_pi_put","vt_pi_start_bypass","vt_pi_update_irte","vmx_handle_exit","vmx_vcpu_run","nested_vmx_reflect_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"5641ba85-6f23-473f-8bc1-e77ee42483b1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-05 09:45:45 +0000 UTC FinishedAt: 2026-09-05 09:45:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52b6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vt_handle_exit_irqoff","vt_handle_nmi","vt_vcpu_pi_load","vt_vcpu_pi_put","vt_pi_start_bypass","vt_pi_update_irte","vmx_handle_exit","vmx_vcpu_run","nested_vmx_reflect_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"5641ba85-6f23-473f-8bc1-e77ee42483b1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-05 09:45:45 +0000 UTC FinishedAt: 2026-09-05 09:45:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52b6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vt_handle_exit_irqoff","vt_handle_nmi","vt_vcpu_pi_load","vt_vcpu_pi_put","vt_pi_start_bypass","vt_pi_update_irte","vmx_handle_exit","vmx_vcpu_run","nested_vmx_reflect_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"5641ba85-6f23-473f-8bc1-e77ee42483b1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-05 09:45:45 +0000 UTC FinishedAt: 2026-09-05 10:03:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52b6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vt_handle_exit_irqoff","vt_handle_nmi","vt_vcpu_pi_load","vt_vcpu_pi_put","vt_pi_start_bypass","vt_pi_update_irte","vmx_handle_exit","vmx_vcpu_run","nested_vmx_reflect_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"5641ba85-6f23-473f-8bc1-e77ee42483b1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-05 09:45:45 +0000 UTC FinishedAt: 2026-09-05 10:03:55 +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:*87514cc5-94ca-4d62-b4c8-e2857c8b537d,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-workflow52b6l/series-workflow52b6l-convert-artifact-395222323/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": "0302bb4a-283b-4008-aca7-a790cf1cd690", "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-workflow52b6l/series-workflow52b6l-build-action-3345982951/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow52b6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vt_handle_exit_irqoff","vt_handle_nmi","vt_vcpu_pi_load","vt_vcpu_pi_put","vt_pi_start_bypass","vt_pi_update_irte","vmx_handle_exit","vmx_vcpu_run","nested_vmx_reflect_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"5641ba85-6f23-473f-8bc1-e77ee42483b1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-05 09:45:45 +0000 UTC FinishedAt: 2026-09-05 10:03:45 +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:*87514cc5-94ca-4d62-b4c8-e2857c8b537d,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-workflow52b6l/series-workflow52b6l-convert-artifact-395222323/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": "0302bb4a-283b-4008-aca7-a790cf1cd690", "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-workflow52b6l/series-workflow52b6l-build-action-3345982951/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow52b6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vt_handle_exit_irqoff","vt_handle_nmi","vt_vcpu_pi_load","vt_vcpu_pi_put","vt_pi_start_bypass","vt_pi_update_irte","vmx_handle_exit","vmx_vcpu_run","nested_vmx_reflect_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"5641ba85-6f23-473f-8bc1-e77ee42483b1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-05 10:03:55 +0000 UTC FinishedAt: 2026-09-05 10:03:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52b6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vt_handle_exit_irqoff","vt_handle_nmi","vt_vcpu_pi_load","vt_vcpu_pi_put","vt_pi_start_bypass","vt_pi_update_irte","vmx_handle_exit","vmx_vcpu_run","nested_vmx_reflect_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"5641ba85-6f23-473f-8bc1-e77ee42483b1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-05 10:03:55 +0000 UTC FinishedAt: 2026-09-05 10:03:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52b6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vt_handle_exit_irqoff","vt_handle_nmi","vt_vcpu_pi_load","vt_vcpu_pi_put","vt_pi_start_bypass","vt_pi_update_irte","vmx_handle_exit","vmx_vcpu_run","nested_vmx_reflect_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"5641ba85-6f23-473f-8bc1-e77ee42483b1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-05 10:03:55 +0000 UTC FinishedAt: 2026-09-05 10:06:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52b6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vt_handle_exit_irqoff","vt_handle_nmi","vt_vcpu_pi_load","vt_vcpu_pi_put","vt_pi_start_bypass","vt_pi_update_irte","vmx_handle_exit","vmx_vcpu_run","nested_vmx_reflect_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"5641ba85-6f23-473f-8bc1-e77ee42483b1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-05 10:03:55 +0000 UTC FinishedAt: 2026-09-05 10:05:55 +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:*0302bb4a-283b-4008-aca7-a790cf1cd690,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-workflow52b6l/series-workflow52b6l-build-action-3345982951/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-workflow52b6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vt_handle_exit_irqoff","vt_handle_nmi","vt_vcpu_pi_load","vt_vcpu_pi_put","vt_pi_start_bypass","vt_pi_update_irte","vmx_handle_exit","vmx_vcpu_run","nested_vmx_reflect_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"5641ba85-6f23-473f-8bc1-e77ee42483b1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-05 10:06:04 +0000 UTC FinishedAt: 2026-09-05 13:08:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52b6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vt_handle_exit_irqoff","vt_handle_nmi","vt_vcpu_pi_load","vt_vcpu_pi_put","vt_pi_start_bypass","vt_pi_update_irte","vmx_handle_exit","vmx_vcpu_run","nested_vmx_reflect_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"5641ba85-6f23-473f-8bc1-e77ee42483b1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-05 10:06:04 +0000 UTC FinishedAt: 2026-09-05 13:08:45 +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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vt_handle_exit_irqoff","vt_handle_nmi","vt_vcpu_pi_load","vt_vcpu_pi_put","vt_pi_start_bypass","vt_pi_update_irte","vmx_handle_exit","vmx_vcpu_run","nested_vmx_reflect_vmexit"],"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:*e128e3c4-8851-4843-8a5a-82ec65a4009b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0302bb4a-283b-4008-aca7-a790cf1cd690,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-workflow52b6l/series-workflow52b6l-build-action-9626994/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-workflow52b6l/series-workflow52b6l-build-action-3345982951/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow52b6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vt_handle_exit_irqoff","vt_handle_nmi","vt_vcpu_pi_load","vt_vcpu_pi_put","vt_pi_start_bypass","vt_pi_update_irte","vmx_handle_exit","vmx_vcpu_run","nested_vmx_reflect_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"5641ba85-6f23-473f-8bc1-e77ee42483b1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-05 10:06:04 +0000 UTC FinishedAt: 2026-09-05 10:06:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52b6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vt_handle_exit_irqoff","vt_handle_nmi","vt_vcpu_pi_load","vt_vcpu_pi_put","vt_pi_start_bypass","vt_pi_update_irte","vmx_handle_exit","vmx_vcpu_run","nested_vmx_reflect_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"5641ba85-6f23-473f-8bc1-e77ee42483b1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-05 10:06:04 +0000 UTC FinishedAt: 2026-09-05 10:06:08 +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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vt_handle_exit_irqoff","vt_handle_nmi","vt_vcpu_pi_load","vt_vcpu_pi_put","vt_pi_start_bypass","vt_pi_update_irte","vmx_handle_exit","vmx_vcpu_run","nested_vmx_reflect_vmexit"],"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-workflow52b6l/series-workflow52b6l-convert-artifact-761195820/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow52b6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vt_handle_exit_irqoff","vt_handle_nmi","vt_vcpu_pi_load","vt_vcpu_pi_put","vt_pi_start_bypass","vt_pi_update_irte","vmx_handle_exit","vmx_vcpu_run","nested_vmx_reflect_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"5641ba85-6f23-473f-8bc1-e77ee42483b1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-05 10:06:04 +0000 UTC FinishedAt: 2026-09-05 10:06:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52b6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vt_handle_exit_irqoff","vt_handle_nmi","vt_vcpu_pi_load","vt_vcpu_pi_put","vt_pi_start_bypass","vt_pi_update_irte","vmx_handle_exit","vmx_vcpu_run","nested_vmx_reflect_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"5641ba85-6f23-473f-8bc1-e77ee42483b1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-05 10:06:04 +0000 UTC FinishedAt: 2026-09-05 10:06:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52b6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vt_handle_exit_irqoff","vt_handle_nmi","vt_vcpu_pi_load","vt_vcpu_pi_put","vt_pi_start_bypass","vt_pi_update_irte","vmx_handle_exit","vmx_vcpu_run","nested_vmx_reflect_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"5641ba85-6f23-473f-8bc1-e77ee42483b1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-05 10:06:04 +0000 UTC FinishedAt: 2026-09-05 10:06:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52b6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vt_handle_exit_irqoff","vt_handle_nmi","vt_vcpu_pi_load","vt_vcpu_pi_put","vt_pi_start_bypass","vt_pi_update_irte","vmx_handle_exit","vmx_vcpu_run","nested_vmx_reflect_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"5641ba85-6f23-473f-8bc1-e77ee42483b1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-05 10:06:14 +0000 UTC FinishedAt: 2026-09-05 13:08:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52b6l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vt_handle_exit_irqoff","vt_handle_nmi","vt_vcpu_pi_load","vt_vcpu_pi_put","vt_pi_start_bypass","vt_pi_update_irte","vmx_handle_exit","vmx_vcpu_run","nested_vmx_reflect_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"5641ba85-6f23-473f-8bc1-e77ee42483b1","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-05 10:06:14 +0000 UTC FinishedAt: 2026-09-05 13:08:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e128e3c4-8851-4843-8a5a-82ec65a4009b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0302bb4a-283b-4008-aca7-a790cf1cd690,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-workflow52b6l/series-workflow52b6l-build-action-9626994/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-workflow52b6l/series-workflow52b6l-build-action-3345982951/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-workflow52b6l/series-workflow52b6l-convert-artifact-761195820/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,}