Name: series-workflowr4jsr Phase: Succeeded StartedAt: 2026-08-14 16:31:40 +0000 UTC FinishedAt: 2026-08-14 21:21:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4jsr[0] Phase: Succeeded StartedAt: 2026-08-14 16:31:40 +0000 UTC FinishedAt: 2026-08-14 17:36:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4jsr[0].run-triage Phase: Succeeded StartedAt: 2026-08-14 16:31:40 +0000 UTC FinishedAt: 2026-08-14 17:36:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "5ec42d57655c690234c14aece6dd3f209778c1d8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_HYPERV" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "5ec42d57655c690234c14aece6dd3f209778c1d8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_HYPERV" ], "series_id": "539f9105-9012-49c6-ab06-a2240a458a57" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "handle_vmptrld", "handle_vmptrst" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTdtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9IWVBFUlYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoYW5kbGVfdm1wdHJsZCYjMzQ7LAogICAgJiMzNDtoYW5kbGVfdm1wdHJzdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSYjMzk7cyBuZXN0ZWQgVk1YIGVtdWxhdGlvbiBmb3IgdGhlIFZNUFRSTEQgYW5kIFZNUFRSU1QgaW5zdHJ1Y3Rpb25zIHdoZW4gRW5saWdodGVuZWQgVk1DUyAoZVZNQ1MpIGlzIHVzZWQuIEluIGBoYW5kbGVfdm1wdHJzdGAsIGl0IGNoYW5nZXMgdGhlIGNvZGUgdG8gd3JpdGUgdGhlIGBodl9ldm1jc192bXB0cmAgKGEgNjQtYml0IGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MpIHRvIGd1ZXN0IG1lbW9yeSBpbnN0ZWFkIG9mIHNraXBwaW5nIHRoZSBpbnN0cnVjdGlvbi4gU2luY2UgYGh2X2V2bWNzX3ZtcHRyYCBpcyBhIGZ1bGx5IGluaXRpYWxpemVkIDY0LWJpdCBpbnRlZ2VyIChgZ3BhX3RgKSB3aXRob3V0IGFueSBwYWRkaW5nLCB3cml0aW5nIGl0IHRvIGd1ZXN0IG1lbW9yeSBkb2VzIG5vdCBsZWFrIGFueSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIFRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGBoYW5kbGVfdm1wdHJsZGAgdG8gcXVldWUgYSAjVUQgZXhjZXB0aW9uLCB3aGljaCBvbmx5IGFmZmVjdHMgY29udHJvbCBmbG93IGFuZCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBjb21wbGV4IHN0cnVjdHVyZXMsIG9yIHBhZGRpbmcgaW50cm9kdWNlZCB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBidWdzIGluIHRoaXMgYXJlYS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJlaGF2aW9yIG9mIEtWTSBuZXN0ZWQgVk1YIHdoZW4gaGFuZGxpbmcgVk1QVFJMRCBhbmQgVk1QVFJTVCBpbnN0cnVjdGlvbnMgaW4gdGhlIHByZXNlbmNlIG9mIEh5cGVyLVYgZW5saWdodGVuZWQgVk1DUyAoZVZNQ1MpLiBTcGVjaWZpY2FsbHksIGl0IHF1ZXVlcyBhICNVRCBleGNlcHRpb24gaW5zdGVhZCBvZiBzaWxlbnRseSBpZ25vcmluZyBWTVBUUkxELCBhbmQgcmV0dXJucyB0aGUgZVZNQ1MgR1BBIGluc3RlYWQgb2YgaWdub3JpbmcgVk1QVFJTVC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIEtWTSBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6MTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzNDhjYWNmMDQxOTI0NjFiZDdlOTU2NTc1ZjFmN2U3ZmY0MDllNGUzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMTQgMTc6MTg6MDUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbmluZGV4IGRkZjZkZjdiZWU5M2IuLjBmNWU0YjQ3ZWNiMTkgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXG5AQCAtNTg3OSw2ICYjNDM7NTg3OSwxMiBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXB0cmxkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGlmICghbmVzdGVkX3ZteF9jaGVja19wZXJtaXNzaW9uKHZjcHUpKVxuIFx0XHRyZXR1cm4gMTtcbiBcbiYjNDM7XHQvKiBGb3JiaWQgbm9ybWFsIFZNUFRSTEQgaWYgRW5saWdodGVuZWQgdmVyc2lvbiB3YXMgdXNlZCAqL1xuJiM0MztcdGlmIChuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkpIHtcbiYjNDM7XHRcdGt2bV9xdWV1ZV9leGNlcHRpb24odmNwdSwgVURfVkVDVE9SKTtcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAobmVzdGVkX3ZteF9nZXRfdm1wdHIodmNwdSwgXHUwMDI2dm1wdHIsIFx1MDAyNnIpKVxuIFx0XHRyZXR1cm4gcjtcbiBcbkBAIC01ODg4LDEwICYjNDM7NTg5NCw2IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRybGQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKHZtcHRyID09IHZteC1cdTAwM2VuZXN0ZWQudm14b25fcHRyKVxuIFx0XHRyZXR1cm4gbmVzdGVkX3ZteF9mYWlsKHZjcHUsIFZNWEVSUl9WTVBUUkxEX1ZNWE9OX1BPSU5URVIpO1xuIFxuLVx0LyogRm9yYmlkIG5vcm1hbCBWTVBUUkxEIGlmIEVubGlnaHRlbmVkIHZlcnNpb24gd2FzIHVzZWQgKi9cbi1cdGlmIChuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkpXG4tXHRcdHJldHVybiAxO1xuLVxuIFx0aWYgKHZteC1cdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0ciAhPSB2bXB0cikge1xuIFx0XHRzdHJ1Y3QgZ2ZuX3RvX2h2YV9jYWNoZSAqZ2hjID0gXHUwMDI2dm14LVx1MDAzZW5lc3RlZC52bWNzMTJfY2FjaGU7XG4gXHRcdHN0cnVjdCB2bWNzX2hkciBoZHI7XG5AQCAtNTk0NCw3ICYjNDM7NTk0Niw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRyc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXHR1MzIgaW5zdHJfaW5mbyA9IHZtY3NfcmVhZDMyKFZNWF9JTlNUUlVDVElPTl9JTkZPKTtcbi1cdGdwYV90IGN1cnJlbnRfdm1wdHIgPSB0b192bXgodmNwdSktXHUwMDNlbmVzdGVkLmN1cnJlbnRfdm1wdHI7XG4mIzQzO1x0Z3BhX3QgY3VycmVudF92bXB0cjtcbiBcdHN0cnVjdCB4ODZfZXhjZXB0aW9uIGU7XG4gXHRndmFfdCBndmE7XG4gXHRpbnQgcjtcbkBAIC01OTUyLDggJiM0Mzs1OTU0LDE0IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRyc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKCFuZXN0ZWRfdm14X2NoZWNrX3Blcm1pc3Npb24odmNwdSkpXG4gXHRcdHJldHVybiAxO1xuIFxuLVx0aWYgKHVubGlrZWx5KG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodG9fdm14KHZjcHUpKSkpXG4tXHRcdHJldHVybiAxO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSHlwZXItViBUTEZTIGRvZXMgbm90IHNwZWNpZnkgdGhlIGJlaGF2aW9yIG9mIFZNUFRSU1Qgd2hlbiBlVk1DUyBpcyB1c2VkXG4mIzQzO1x0ICogYnV0IGdlbnVpbmUgSHlwZXItViBzZWVtcyB0byBiZSByZXR1cm5pbmcgZVZNQ1MgR1BBLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHRvX3ZteCh2Y3B1KSkpXG4mIzQzO1x0XHRjdXJyZW50X3ZtcHRyID0gdG9fdm14KHZjcHUpLVx1MDAzZW5lc3RlZC5odl9ldm1jc192bXB0cjtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRjdXJyZW50X3ZtcHRyID0gdG9fdm14KHZjcHUpLVx1MDAzZW5lc3RlZC5jdXJyZW50X3ZtcHRyO1xuIFxuIFx0aWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgZXhpdF9xdWFsLCBpbnN0cl9pbmZvLFxuIFx0XHRcdFx0dHJ1ZSwgc2l6ZW9mKGdwYV90KSwgXHUwMDI2Z3ZhKSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmhcbmluZGV4IDkwZmZmYWY5MTU5NTguLmUyMTc4YTY2ODNjYTkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaFxuQEAgLTMyNSw5ICYjNDM7MzI1LDYgQEAgc3RhdGljIGlubGluZSBpbnQgdm1wdHJsZCh1NjQgdm1jc19wYSlcbiB7XG4gXHR1OCByZXQ7XG4gXG4tXHRpZiAoZW5hYmxlX2V2bWNzKVxuLVx0XHRyZXR1cm4gLTE7XG4tXG4gXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyAoXCYjMzQ7dm1wdHJsZCAlW3BhXTsgc2V0bmEgJVtyZXRdXCYjMzQ7XG4gXHRcdDogW3JldF1cJiMzNDs9cm1cJiMzNDsocmV0KVxuIFx0XHQ6IFtwYV1cJiMzNDttXCYjMzQ7KHZtY3NfcGEpXG5AQCAtMzQxLDkgJiM0MzszMzgsNiBAQCBzdGF0aWMgaW5saW5lIGludCB2bXB0cnN0KHU2NCAqdmFsdWUpXG4gXHR1NjQgdG1wO1xuIFx0dTggcmV0O1xuIFxuLVx0aWYgKGVuYWJsZV9ldm1jcylcbi1cdFx0cmV0dXJuIGV2bWNzX3ZtcHRyc3QodmFsdWUpO1xuLVxuIFx0X19hc21fXyBfX3ZvbGF0aWxlX18oXCYjMzQ7dm1wdHJzdCAlW3ZhbHVlXTsgc2V0bmEgJVtyZXRdXCYjMzQ7XG4gXHRcdDogW3ZhbHVlXVwmIzM0Oz1tXCYjMzQ7KHRtcCksIFtyZXRdXCYjMzQ7PXJtXCYjMzQ7KHJldClcbiBcdFx0OiA6IFwmIzM0O2NjXCYjMzQ7LCBcJiMzNDttZW1vcnlcJiMzNDspO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X2V2bWNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl9ldm1jcy5jXG5pbmRleCBjN2ZhMTE0YWVlMjBmLi42YTZkOTQwYTc4OTE4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfZXZtY3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfZXZtY3MuY1xuQEAgLTE4LDEyICYjNDM7MTgsMTYgQEBcbiAjaW5jbHVkZSBcJiMzNDtoeXBlcnYuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3ZteC5oXCYjMzQ7XG4gXG4mIzQzOyNkZWZpbmUgVk1MQVVOQ0hfSU5TTl9TSVpFIDNcbiYjNDM7I2RlZmluZSBWTVBUUkxEX0lOU05fU0laRSA1XG4mIzQzO1xuIHN0YXRpYyBpbnQgdWRfY291bnQ7XG4mIzQzO3N0YXRpYyBpbnQgdWRfaW5zbl9za2lwX3NpemU7XG4gXG4gc3RhdGljIHZvaWQgZ3Vlc3RfdWRfaGFuZGxlcihzdHJ1Y3QgZXhfcmVncyAqcmVncylcbiB7XG4gXHR1ZF9jb3VudCYjNDM7JiM0Mzs7XG4tXHRyZWdzLVx1MDAzZXJpcCAmIzQzOz0gMzsgLyogVk1MQVVOQ0ggKi9cbiYjNDM7XHRyZWdzLVx1MDAzZXJpcCAmIzQzOz0gdWRfaW5zbl9za2lwX3NpemU7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGd1ZXN0X25taV9oYW5kbGVyKHN0cnVjdCBleF9yZWdzICpyZWdzKVxuQEAgLTk1LDE2ICYjNDM7OTksMTUgQEAgdm9pZCBndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcywgc3RydWN0IGh5cGVydl90ZXN0X3BhZ2VzICpodl9wYWdlcyxcbiBcdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpO1xuIFx0R1VFU1RfU1lOQygzKTtcbiBcdEdVRVNUX0FTU0VSVChsb2FkX2V2bWNzKGh2X3BhZ2VzKSk7XG4tXHRHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSBodl9wYWdlcy1cdTAwM2VlbmxpZ2h0ZW5lZF92bWNzX2dwYSk7XG4mIzQzO1x0LyogVk1QVFJTVCByZXR1cm5zIC0xIHVudGlsIFZNTEFVTkNIIHdpdGggZVZNQ1MgcHRyIHNldCAqL1xuJiM0MztcdEdVRVNUX0FTU0VSVCh2bXB0cnN0eigpID09IC0xKTtcbiBcbiBcdEdVRVNUX1NZTkMoNCk7XG4tXHRHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSBodl9wYWdlcy1cdTAwM2VlbmxpZ2h0ZW5lZF92bWNzX2dwYSk7XG4gXG4gXHRwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlLFxuIFx0XHQgICAgIFx1MDAyNmwyX2d1ZXN0X3N0YWNrW0wyX0dVRVNUX1NUQUNLX1NJWkVdKTtcbiBcbiBcdEdVRVNUX1NZTkMoNSk7XG4tXHRHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSBodl9wYWdlcy1cdTAwM2VlbmxpZ2h0ZW5lZF92bWNzX2dwYSk7XG4gXHRjdXJyZW50X2V2bWNzLVx1MDAzZXJldmlzaW9uX2lkID0gLTF1O1xuIFx0R1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpO1xuIFx0Y3VycmVudF9ldm1jcy1cdTAwM2VyZXZpc2lvbl9pZCA9IEVWTUNTX1ZFUlNJT047XG5AQCAtMTgzLDEwICYjNDM7MTg2LDE1IEBAIHZvaWQgZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMsIHN0cnVjdCBoeXBlcnZfdGVzdF9wYWdlcyAqaHZfcGFnZXMsXG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTtcbiBcdEdVRVNUX1NZTkMoMTEpO1xuIFxuJiM0MztcdHVkX2luc25fc2tpcF9zaXplID0gVk1QVFJMRF9JTlNOX1NJWkU7XG4mIzQzO1x0dm1wdHJsZChodl9wYWdlcy1cdTAwM2VlbmxpZ2h0ZW5lZF92bWNzX2dwYSk7XG4mIzQzO1x0R1VFU1RfQVNTRVJUKHVkX2NvdW50ID09IDEpO1xuJiM0MztcbiBcdC8qIFRyeSBlbmxpZ2h0ZW5lZCB2bXB0cmxkIHdpdGggYW4gaW5jb3JyZWN0IEdQQSAqL1xuJiM0MztcdHVkX2luc25fc2tpcF9zaXplID0gVk1MQVVOQ0hfSU5TTl9TSVpFO1xuIFx0ZXZtY3Nfdm1wdHJsZCgweGRlYWRiZWVmLCBodl9wYWdlcy1cdTAwM2VlbmxpZ2h0ZW5lZF92bWNzKTtcbiBcdEdVRVNUX0FTU0VSVCh2bWxhdW5jaCgpKTtcbi1cdEdVRVNUX0FTU0VSVCh1ZF9jb3VudCA9PSAxKTtcbiYjNDM7XHRHVUVTVF9BU1NFUlQodWRfY291bnQgPT0gMik7XG4gXHRHVUVTVF9ET05FKCk7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjE4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjhtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9IWVBFUlYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoYW5kbGVfdm1wdHJsZCYjMzQ7LAogICAgJiMzNDtoYW5kbGVfdm1wdHJzdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgS1ZNIG5lc3RlZCBWTVggd2hlbiBoYW5kbGluZyBWTVBUUkxEIGFuZCBWTVBUUlNUIGluc3RydWN0aW9ucyBpbiB0aGUgcHJlc2VuY2Ugb2YgSHlwZXItViBlbmxpZ2h0ZW5lZCBWTUNTIChlVk1DUykuIFNwZWNpZmljYWxseSwgaXQgcXVldWVzIGEgI1VEIGV4Y2VwdGlvbiBpbnN0ZWFkIG9mIHNpbGVudGx5IGlnbm9yaW5nIFZNUFRSTEQsIGFuZCByZXR1cm5zIHRoZSBlVk1DUyBHUEEgaW5zdGVhZCBvZiBpZ25vcmluZyBWTVBUUlNULiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgS1ZNIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM0OGNhY2YwNDE5MjQ2MWJkN2U5NTY1NzVmMWY3ZTdmZjQwOWU0ZTMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAxNCAxNzoxODowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jCmluZGV4IGRkZjZkZjdiZWU5M2IuLjBmNWU0YjQ3ZWNiMTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYwpAQCAtNTg3OSw2ICYjNDM7NTg3OSwxMiBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXB0cmxkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpZiAoIW5lc3RlZF92bXhfY2hlY2tfcGVybWlzc2lvbih2Y3B1KSkKIAkJcmV0dXJuIDE7CiAKJiM0MzsJLyogRm9yYmlkIG5vcm1hbCBWTVBUUkxEIGlmIEVubGlnaHRlbmVkIHZlcnNpb24gd2FzIHVzZWQgKi8KJiM0MzsJaWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSkgewomIzQzOwkJa3ZtX3F1ZXVlX2V4Y2VwdGlvbih2Y3B1LCBVRF9WRUNUT1IpOwomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CX0KJiM0MzsKIAlpZiAobmVzdGVkX3ZteF9nZXRfdm1wdHIodmNwdSwgJmFtcDt2bXB0ciwgJmFtcDtyKSkKIAkJcmV0dXJuIHI7CiAKQEAgLTU4ODgsMTAgJiM0Mzs1ODk0LDYgQEAgc3RhdGljIGludCBoYW5kbGVfdm1wdHJsZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJaWYgKHZtcHRyID09IHZteC0mZ3Q7bmVzdGVkLnZteG9uX3B0cikKIAkJcmV0dXJuIG5lc3RlZF92bXhfZmFpbCh2Y3B1LCBWTVhFUlJfVk1QVFJMRF9WTVhPTl9QT0lOVEVSKTsKIAotCS8qIEZvcmJpZCBub3JtYWwgVk1QVFJMRCBpZiBFbmxpZ2h0ZW5lZCB2ZXJzaW9uIHdhcyB1c2VkICovCi0JaWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSkKLQkJcmV0dXJuIDE7Ci0KIAlpZiAodm14LSZndDtuZXN0ZWQuY3VycmVudF92bXB0ciAhPSB2bXB0cikgewogCQlzdHJ1Y3QgZ2ZuX3RvX2h2YV9jYWNoZSAqZ2hjID0gJmFtcDt2bXgtJmd0O25lc3RlZC52bWNzMTJfY2FjaGU7CiAJCXN0cnVjdCB2bWNzX2hkciBoZHI7CkBAIC01OTQ0LDcgJiM0Mzs1OTQ2LDcgQEAgc3RhdGljIGludCBoYW5kbGVfdm1wdHJzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJdW5zaWduZWQgbG9uZyBleGl0X3F1YWwgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKIAl1MzIgaW5zdHJfaW5mbyA9IHZtY3NfcmVhZDMyKFZNWF9JTlNUUlVDVElPTl9JTkZPKTsKLQlncGFfdCBjdXJyZW50X3ZtcHRyID0gdG9fdm14KHZjcHUpLSZndDtuZXN0ZWQuY3VycmVudF92bXB0cjsKJiM0MzsJZ3BhX3QgY3VycmVudF92bXB0cjsKIAlzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBlOwogCWd2YV90IGd2YTsKIAlpbnQgcjsKQEAgLTU5NTIsOCAmIzQzOzU5NTQsMTQgQEAgc3RhdGljIGludCBoYW5kbGVfdm1wdHJzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJaWYgKCFuZXN0ZWRfdm14X2NoZWNrX3Blcm1pc3Npb24odmNwdSkpCiAJCXJldHVybiAxOwogCi0JaWYgKHVubGlrZWx5KG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodG9fdm14KHZjcHUpKSkpCi0JCXJldHVybiAxOwomIzQzOwkvKgomIzQzOwkgKiBIeXBlci1WIFRMRlMgZG9lcyBub3Qgc3BlY2lmeSB0aGUgYmVoYXZpb3Igb2YgVk1QVFJTVCB3aGVuIGVWTUNTIGlzIHVzZWQKJiM0MzsJICogYnV0IGdlbnVpbmUgSHlwZXItViBzZWVtcyB0byBiZSByZXR1cm5pbmcgZVZNQ1MgR1BBLgomIzQzOwkgKi8KJiM0MzsJaWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodG9fdm14KHZjcHUpKSkKJiM0MzsJCWN1cnJlbnRfdm1wdHIgPSB0b192bXgodmNwdSktJmd0O25lc3RlZC5odl9ldm1jc192bXB0cjsKJiM0MzsJZWxzZQomIzQzOwkJY3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS0mZ3Q7bmVzdGVkLmN1cnJlbnRfdm1wdHI7CiAKIAlpZiAoZ2V0X3ZteF9tZW1fYWRkcmVzcyh2Y3B1LCBleGl0X3F1YWwsIGluc3RyX2luZm8sCiAJCQkJdHJ1ZSwgc2l6ZW9mKGdwYV90KSwgJmFtcDtndmEpKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oCmluZGV4IDkwZmZmYWY5MTU5NTguLmUyMTc4YTY2ODNjYTkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmgKQEAgLTMyNSw5ICYjNDM7MzI1LDYgQEAgc3RhdGljIGlubGluZSBpbnQgdm1wdHJsZCh1NjQgdm1jc19wYSkKIHsKIAl1OCByZXQ7CiAKLQlpZiAoZW5hYmxlX2V2bWNzKQotCQlyZXR1cm4gLTE7Ci0KIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoJiMzNDt2bXB0cmxkICVbcGFdOyBzZXRuYSAlW3JldF0mIzM0OwogCQk6IFtyZXRdJiMzNDs9cm0mIzM0OyhyZXQpCiAJCTogW3BhXSYjMzQ7bSYjMzQ7KHZtY3NfcGEpCkBAIC0zNDEsOSAmIzQzOzMzOCw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IHZtcHRyc3QodTY0ICp2YWx1ZSkKIAl1NjQgdG1wOwogCXU4IHJldDsKIAotCWlmIChlbmFibGVfZXZtY3MpCi0JCXJldHVybiBldm1jc192bXB0cnN0KHZhbHVlKTsKLQogCV9fYXNtX18gX192b2xhdGlsZV9fKCYjMzQ7dm1wdHJzdCAlW3ZhbHVlXTsgc2V0bmEgJVtyZXRdJiMzNDsKIAkJOiBbdmFsdWVdJiMzNDs9bSYjMzQ7KHRtcCksIFtyZXRdJiMzNDs9cm0mIzM0OyhyZXQpCiAJCTogOiAmIzM0O2NjJiMzNDssICYjMzQ7bWVtb3J5JiMzNDspOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfZXZtY3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X2V2bWNzLmMKaW5kZXggYzdmYTExNGFlZTIwZi4uNmE2ZDk0MGE3ODkxOCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfZXZtY3MuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl9ldm1jcy5jCkBAIC0xOCwxMiAmIzQzOzE4LDE2IEBACiAjaW5jbHVkZSAmIzM0O2h5cGVydi5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dm14LmgmIzM0OwogCiYjNDM7I2RlZmluZSBWTUxBVU5DSF9JTlNOX1NJWkUgMwomIzQzOyNkZWZpbmUgVk1QVFJMRF9JTlNOX1NJWkUgNQomIzQzOwogc3RhdGljIGludCB1ZF9jb3VudDsKJiM0MztzdGF0aWMgaW50IHVkX2luc25fc2tpcF9zaXplOwogCiBzdGF0aWMgdm9pZCBndWVzdF91ZF9oYW5kbGVyKHN0cnVjdCBleF9yZWdzICpyZWdzKQogewogCXVkX2NvdW50JiM0MzsmIzQzOzsKLQlyZWdzLSZndDtyaXAgJiM0Mzs9IDM7IC8qIFZNTEFVTkNIICovCiYjNDM7CXJlZ3MtJmd0O3JpcCAmIzQzOz0gdWRfaW5zbl9za2lwX3NpemU7CiB9CiAKIHN0YXRpYyB2b2lkIGd1ZXN0X25taV9oYW5kbGVyKHN0cnVjdCBleF9yZWdzICpyZWdzKQpAQCAtOTUsMTYgJiM0Mzs5OSwxNSBAQCB2b2lkIGd1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzLCBzdHJ1Y3QgaHlwZXJ2X3Rlc3RfcGFnZXMgKmh2X3BhZ2VzLAogCUdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpOwogCUdVRVNUX1NZTkMoMyk7CiAJR1VFU1RfQVNTRVJUKGxvYWRfZXZtY3MoaHZfcGFnZXMpKTsKLQlHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSBodl9wYWdlcy0mZ3Q7ZW5saWdodGVuZWRfdm1jc19ncGEpOwomIzQzOwkvKiBWTVBUUlNUIHJldHVybnMgLTEgdW50aWwgVk1MQVVOQ0ggd2l0aCBlVk1DUyBwdHIgc2V0ICovCiYjNDM7CUdVRVNUX0FTU0VSVCh2bXB0cnN0eigpID09IC0xKTsKIAogCUdVRVNUX1NZTkMoNCk7Ci0JR1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gaHZfcGFnZXMtJmd0O2VubGlnaHRlbmVkX3ZtY3NfZ3BhKTsKIAogCXByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUsCiAJCSAgICAgJmFtcDtsMl9ndWVzdF9zdGFja1tMMl9HVUVTVF9TVEFDS19TSVpFXSk7CiAKIAlHVUVTVF9TWU5DKDUpOwotCUdVRVNUX0FTU0VSVCh2bXB0cnN0eigpID09IGh2X3BhZ2VzLSZndDtlbmxpZ2h0ZW5lZF92bWNzX2dwYSk7CiAJY3VycmVudF9ldm1jcy0mZ3Q7cmV2aXNpb25faWQgPSAtMXU7CiAJR1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpOwogCWN1cnJlbnRfZXZtY3MtJmd0O3JldmlzaW9uX2lkID0gRVZNQ1NfVkVSU0lPTjsKQEAgLTE4MywxMCAmIzQzOzE4NiwxNSBAQCB2b2lkIGd1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzLCBzdHJ1Y3QgaHlwZXJ2X3Rlc3RfcGFnZXMgKmh2X3BhZ2VzLAogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpOwogCUdVRVNUX1NZTkMoMTEpOwogCiYjNDM7CXVkX2luc25fc2tpcF9zaXplID0gVk1QVFJMRF9JTlNOX1NJWkU7CiYjNDM7CXZtcHRybGQoaHZfcGFnZXMtJmd0O2VubGlnaHRlbmVkX3ZtY3NfZ3BhKTsKJiM0MzsJR1VFU1RfQVNTRVJUKHVkX2NvdW50ID09IDEpOwomIzQzOwogCS8qIFRyeSBlbmxpZ2h0ZW5lZCB2bXB0cmxkIHdpdGggYW4gaW5jb3JyZWN0IEdQQSAqLwomIzQzOwl1ZF9pbnNuX3NraXBfc2l6ZSA9IFZNTEFVTkNIX0lOU05fU0laRTsKIAlldm1jc192bXB0cmxkKDB4ZGVhZGJlZWYsIGh2X3BhZ2VzLSZndDtlbmxpZ2h0ZW5lZF92bWNzKTsKIAlHVUVTVF9BU1NFUlQodm1sYXVuY2goKSk7Ci0JR1VFU1RfQVNTRVJUKHVkX2NvdW50ID09IDEpOwomIzQzOwlHVUVTVF9BU1NFUlQodWRfY291bnQgPT0gMik7CiAJR1VFU1RfRE9ORSgpOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MjYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA4MTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLVk0gTmVzdGVkIFZNWCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgS1ZNIG5lc3RlZCBWTVgsIHNwZWNpZmljYWxseSBjaGFuZ2VzIHRvIGBhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jYC4gIEl0JiMzOTtzIHRvdWNoaW5nIGBoYW5kbGVfdm1wdHJsZGAgYW5kIGBoYW5kbGVfdm1wdHJzdGAsIHdoaWNoIGFyZSBrZXkgYmVjYXVzZSB0aGV5IGRlYWwgd2l0aCBsb2FkaW5nIGFuZCBzdG9yaW5nIHRoZSBWTUNTIHBvaW50ZXIuIFRoaXMgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBuZXN0ZWQgVk1YLCBhbmQgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlbGF0ZWQgdG8gSHlwZXItViYjMzk7cyBlbmxpZ2h0ZW5lZCBWTUNTLCBvciBlVk1DUy4gVGhhdCBpbW1lZGlhdGVseSBncmFicyBteSBhdHRlbnRpb24g4oCTIHRoaXMgaXMgcmlwZSBmb3IgZnV6emluZy4KClNwZWNpZmljYWxseSwgd2l0aCBgaGFuZGxlX3ZtcHRybGRgLCBiZWZvcmUsIGlmIHRoZSBlbmxpZ2h0ZW5lZCB2ZXJzaW9uIHdhcyB1c2VkLCBpdCB3b3VsZCBqdXN0IHJldHVybiAxLiAgUmlnaHQsIGFuZCByZXR1cm5pbmcgMSBmcm9tIGEgaGFuZGxlIGZ1bmN0aW9uIGluIEtWTSB0eXBpY2FsbHkgbWVhbnMgaXQgaGFuZGxlZCB0aGUgZXhpdCwgYnV0IHRoZSBpbnN0cnVjdGlvbiBzaG91bGQgbm90IGJlIGFkdmFuY2VkLiBTbyBpdCB3b3VsZCBzcGluLCByaWdodD8gTm8sIGBuZXN0ZWRfdm14X2ZhaWxgIHJldHVybnMgMSwgYnV0IHNldHMgUkZMQUdTLiBOb3csIGhvd2V2ZXIsIHRoZSBwYXRjaCBub3cgcXVldWVzIGEgVUQgKEludmFsaWQgT3Bjb2RlKSBleGNlcHRpb24uIFRoaXMgaXMgYSBzaWduaWZpY2FudCBiZWhhdmlvcmFsIHNoaWZ0LiAgQmVmb3JlLCBpdCBtaWdodCBoYXZlIGJlZW4gYW4gaW5maW5pdGUgbG9vcCBvciBhIHNpbGVudCBmYWlsdXJlICh3aGljaCBpcyB3b3JzZSkuICBOb3cgaXQgd2lsbCBnZW5lcmF0ZSBhbiBleGNlcHRpb24uCgpBbmQgbG9va2luZyBhdCBgaGFuZGxlX3ZtcHRyc3RgLCBpdCYjMzk7cyB0aGUgc2FtZSBwYXR0ZXJuLiBQcmV2aW91c2x5LCBpdCBqdXN0IHJldHVybmVkIDEgaWYgZVZNQ1Mgd2FzIGluIHVzZSwgZWZmZWN0aXZlbHkgaWdub3JpbmcgdGhlIGluc3RydWN0aW9uLiAgTm93LCBpdCBhY3R1YWxseSByZXR1cm5zIHRoZSBlVk1DUyBHUEEgKEd1ZXN0IFBoeXNpY2FsIEFkZHJlc3MpLCB3aGljaCBhbGlnbnMgd2l0aCB0aGUgYmVoYXZpb3Igb2YgSHlwZXItVi4gSXQgc2F5cyB0aGF0ICYjMzQ7SHlwZXItViBUTEZTIGRvZXMgbm90IHNwZWNpZnkgdGhlIGJlaGF2aW9yIG9mIFZNUFRSU1Qgd2hlbiBlVk1DUyBpcyB1c2VkJiMzNDsuICBTbywgdGhleSYjMzk7cmUgbWFraW5nIGl0IEh5cGVyLVYgY29tcGxpYW50LgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGJlY2F1c2UgaXQgbW9kaWZpZXMgdGhlIGJlaGF2aW9yIG9mIGhvdyBWTVBUUkxEIGFuZCBWTVBUUlNUIGFyZSBoYW5kbGVkIGluIG5lc3RlZCBWTVggd2hlbiBlVk1DUyBpcyB1c2VkLiBTbywgdGhlIHBhdGNoIGlzIGNoYW5naW5nIGJlaGF2aW9yIHdoaWNoIG1ha2VzIGl0IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuCgpMZXQmIzM5O3MgcXVpY2tseSBpZGVudGlmeSB0aGUgcHJpbWFyeSBlbnRyeXBvaW50cy4gIEl0IGFwcGVhcnMgdGhleSBhcmUgYGhhbmRsZV92bXB0cmxkYCBhbmQgYGhhbmRsZV92bXB0cnN0YC4gTm93LCBhcmUgdGhleSBzdGF0aWM/IFllcywgdGhleSBhcmUgaW4gdGhlIGZpbGUuIERhbW4sIGl0IHNheXMgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyEgV2VsbCwgbGV0JiMzOTtzIHRyYWNlIHdoZXJlIHRoZXNlIGFyZSBjYWxsZWQgaW4gYGFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNgIHRvIHNlZSBob3cgd2UgY2FuIGV4cGxvaXQgdGhpcyBjaGFuZ2UuIFdlIGNhbiBzdGlsbCBzZWUgaG93IHRoZXkgYXJlIGNhbGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoYW5kbGVfdm1wdHJsZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTg1OT1zdGF0aWMgdm9pZCBzZXRfY3VycmVudF92bXB0cihzdHJ1Y3QgdmNwdV92bXggKnZteCwgZ3BhX3Qgdm1wdHIpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01ODcyLS8qIEVtdWxhdGUgdGhlIFZNUFRSTEQgaW5zdHJ1Y3Rpb24gKi9cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTg3MzpzdGF0aWMgaW50IGhhbmRsZV92bXB0cmxkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTg3NC17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz03NDIzPV9faW5pdCBpbnQgbmVzdGVkX3ZteF9oYXJkd2FyZV9zZXR1cChpbnQgKCpleGl0X2hhbmRsZXJzW10pKHN0cnVjdCBrdm1fdmNwdSAqKSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTc0NTUtXHRleGl0X2hhbmRsZXJzW0VYSVRfUkVBU09OX1ZNTEFVTkNIXVx0PSBoYW5kbGVfdm1sYXVuY2g7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjc0NTY6XHRleGl0X2hhbmRsZXJzW0VYSVRfUkVBU09OX1ZNUFRSTERdXHQ9IGhhbmRsZV92bXB0cmxkO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03NDU3LVx0ZXhpdF9oYW5kbGVyc1tFWElUX1JFQVNPTl9WTVBUUlNUXVx0PSBoYW5kbGVfdm1wdHJzdDtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTQ3NDQ9c3RhdGljIHUzMiB2bXhfc2Vjb25kYXJ5X2V4ZWNfY29udHJvbChzdHJ1Y3QgdmNwdV92bXggKnZteClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTQ3ODMtXHQvKiBTRUNPTkRBUllfRVhFQ19TSEFET1dfVk1DUyBpcyBlbmFibGVkIHdoZW4gTDEgZXhlY3V0ZXMgVk1QVFJMRFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo0Nzg0Olx0ICAgKGhhbmRsZV92bXB0cmxkKS5cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNDc4NS1cdCAgIFdlIGNhbiBOT1QgZW5hYmxlIHNoYWRvd192bWNzIGhlcmUgYmVjYXVzZSB3ZSBkb24mIzM5O3QgaGF2ZSB5ZXRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODE4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBFeGl0IEhhbmRsZXIgTWVjaGFuaXNtKioKCk9rYXksIHNvIHRoZXNlIGhhbmRsZXJzIGFyZSBkZWZpbml0ZWx5IHNpdHRpbmcgaW4gdGhlIGBleGl0X2hhbmRsZXJzYCBhcnJheS4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGV5JiMzOTtyZSBpbnZva2VkIHRocm91Z2ggZnVuY3Rpb24gcG9pbnRlcnMg4oCTIG5vdCBpbmxpbmVkLCB3aGljaCBoYXMgaW50ZXJlc3RpbmcgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gSSBzdGFydCBsb29raW5nIGF0IHRoZSBiaWdnZXIgcGljdHVyZS4gSG9sZCBvbuKApiBgbmVzdGVkX3ZteF9oYXJkd2FyZV9zZXR1cGAgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdGhlc2UgaGFuZGxlcnMgdXAsIHJpZ2h0PyBUaGF0JiMzOTtzIHdoZXJlIHRoZXkmIzM5O3JlIGJlaW5nIHBvcHVsYXRlZCBpbnRvIGBleGl0X2hhbmRsZXJzYC4gQWxyaWdodCwgdGltZSB0byB0cmFjZSBkb3duIHRoZSBkZWZpbml0aW9uIGFuZCB1c2FnZSBvZiBgZXhpdF9oYW5kbGVyc2AgaXRzZWxmLiBOZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dCBvZiBob3cgdGhpcyBhcnJheSBpcyBiZWluZyB1c2VkLiBXaGVyZSBpcyBpdCBkZWNsYXJlZD8gV2hlcmUgZWxzZSBpcyBpdCBhY2Nlc3NlZCBhbmQgbW9kaWZpZWQ/IEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIGZyYW1ld29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXN0ZWRfdm14X2hhcmR3YXJlX3NldHVwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz03NDEzPXZvaWQgbmVzdGVkX3ZteF9oYXJkd2FyZV91bnNldHVwKHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03NDIyLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo3NDIzOl9faW5pdCBpbnQgbmVzdGVkX3ZteF9oYXJkd2FyZV9zZXR1cChpbnQgKCpleGl0X2hhbmRsZXJzW10pKHN0cnVjdCBrdm1fdmNwdSAqKSlcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzQyNC17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaD0yMj12b2lkIG5lc3RlZF92bXhfaGFyZHdhcmVfdW5zZXR1cCh2b2lkKTtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmg6MjM6X19pbml0IGludCBuZXN0ZWRfdm14X2hhcmR3YXJlX3NldHVwKGludCAoKmV4aXRfaGFuZGxlcnNbXSkoc3RydWN0IGt2bV92Y3B1ICopKTtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmgtMjQtdm9pZCBuZXN0ZWRfdm14X3NldF92bWNzX3NoYWRvd2luZ19iaXRtYXAodm9pZCk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYz02MjE3PXN0YXRpYyBpbnQgaGFuZGxlX3ByZWVtcHRpb25fdGltZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjIzMC0gKiBXaGVuIG5lc3RlZD0wLCBhbGwgVk1YIGluc3RydWN0aW9uIFZNIEV4aXRzIGZpbHRlciBoZXJlLiAgVGhlIGhhbmRsZXJzXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjYyMzE6ICogYXJlIG92ZXJ3cml0dGVuIGJ5IG5lc3RlZF92bXhfaGFyZHdhcmVfc2V0dXAoKSB3aGVuIG5lc3RlZD0xLlxuYXJjaC94ODYva3ZtL3ZteC92bXguYy02MjMyLSAqL1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9ODU4OD1fX2luaXQgaW50IHZteF9oYXJkd2FyZV9zZXR1cCh2b2lkKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODc2OC1cdGlmIChuZXN0ZWQpIHtcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6ODc2OTpcdFx0ciA9IG5lc3RlZF92bXhfaGFyZHdhcmVfc2V0dXAoa3ZtX3ZteF9leGl0X2hhbmRsZXJzKTtcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODc3MC1cdFx0aWYgKHIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY0MwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNL0h5cGVyLVYgQ29kZSBmb3IgU3ltYm9sIFNlbGVjdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGt2bV92bXhfZXhpdF9oYW5kbGVyc2AgYW5kIHNwZWNpZmljYWxseSBgaGFuZGxlX3ZtcHRybGRgIGFuZCBgaGFuZGxlX3ZtcHRyc3RgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGVzZSBmdW5jdGlvbiBwb2ludGVycywgYXQgZmlyc3QgZ2xhbmNlLCBhcmUgZ29vZCBjYW5kaWRhdGVzIGFzIGZvY3VzIHN5bWJvbHMsIHNpbmNlIHRoZXkmIzM5O3JlICpkZWZpbml0ZWx5KiBub3QgaW5saW5lZC4gQWhhLCBidXQgd2FpdCwgSSBqdXN0IGNhdWdodCBteXNlbGYuLi4gdGhleSYjMzk7cmUgKnN0YXRpYyouIE5vdywgdGhlIHByb21wdCBzcGVjaWZpY2FsbHkgc2FpZCB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGF0IG1ha2VzIG1lIHBhdXNlIGZvciBhIHNlY29uZC4KCkhvd2V2ZXIsIHNpbmNlIHRoZWlyIGFkZHJlc3NlcyBhcmUgdGFrZW4sIGRlc3BpdGUgYmVpbmcgc3RhdGljLCB0aGV5ICp3b24mIzM5O3QqIGJlIGlubGluZWQuIFRoYXQgbWVhbnMgdGhleSB3aWxsLCBpbiBmYWN0LCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMsIGFuZCBjYW4gc3RpbGwgYmUgdXNlZC4gV2UgY291bGQgbG9vayBhdCBhbHRlcm5hdGl2ZXMgbGlrZSBgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZGAsIG9yIG1heWJlIHRoZSBvdmVyYXJjaGluZyBleGl0IGhhbmRsZXIgYHZteF9oYW5kbGVfZXhpdGAsIGJ1dCBJJiMzOTttIGhlc2l0YW50IG9uIGB2bXhfaGFuZGxlX2V4aXRgIOKAkyBpdCYjMzk7cyBhIGhvdC1wYXRoIGZ1bmN0aW9uLCBzbyBsaWtlbHkgdG9vIGdlbmVyaWMuCgpTbywgbGV0JiMzOTtzIGNvbmZpcm0uIGBoYW5kbGVfdm1wdHJsZGAgYW5kIGBoYW5kbGVfdm1wdHJzdGAuLi4geWVwLCB0aGV5JiMzOTtyZSB0aGUgZXhhY3QgZnVuY3Rpb25zIHRoYXQgYXJlIGJlaW5nIG1vZGlmaWVkLiBUaGF0IHNldHRsZXMgaXQgZm9yIG5vdy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmb3IgYm90aCBLVk0gYW5kIEh5cGVyLVYgc2V0dGluZ3MgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcmIzM5O3MgY29ycmVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVx0Ym9vbCBcJiMzNDtDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXHRib29sIFwmIzM0O0kvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgyOmNvbmZpZyBLVk1fU01NXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODMtXHRib29sIFwmIzM0O1N5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTkyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTkzOmNvbmZpZyBLVk1fSFlQRVJWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTQtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNjpjb25maWcgS1ZNX1BST1ZFX01NVVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE3LVx0Ym9vbCBcJiMzNDtQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjI4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMC1cdGJvb2xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMjpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xuYXJjaC94ODYva3ZtL0tjb25maWctMjMzLVx0aW50IFwmIzM0O01heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDI2CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBNdXNpbmdzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBmb3IgdGhpcyB2aXJ0dWFsaXphdGlvbiBzZXR1cC4gSXQmIzM5O3MgbG9va2luZyBsaWtlIGBLVk1gIGFuZCBgS1ZNX0lOVEVMYCBhcmUgZGVmaW5pdGVseSBrZXksIGdpdmVuIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggVk1YLCBzbyB0aGF0JiMzOTtzIGEgZ2l2ZW4uIE5vdywgSSBoYXZlIGEgaHVuY2ggdGhhdCBgS1ZNX0hZUEVSVmAgbWlnaHQgYmUgaW4gdGhlIG1peCwgc3BlY2lmaWNhbGx5IGJlY2F1c2Ugb2YgdGhlIG5hbWUgb2YgdGhhdCBmdW5jdGlvbiB3ZSYjMzk7cmUgbG9va2luZyBhdCwgYG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWRgLiBUaGF0IGtpbmQgb2YgaGludHMgYXQgSHlwZXItViBlbXVsYXRpb24gYmVpbmcgaW52b2x2ZWQuIExldCBtZSBkb3VibGUtY2hlY2sgdGhlIGltcGxpY2F0aW9ucyBvZiBoYXZpbmcgdGhhdCBLVk0gSHlwZXItViBmbGFnIGVuYWJsZWQsIGFuZCB3aGV0aGVyIGl0JiMzOTtzIHJlbGV2YW50IHRvIHRoZSBjdXJyZW50IHNjZW5hcmlvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oPTIwPXN0YXRpYyBpbmxpbmUgYm9vbCBldm1wdHJfaXNfdmFsaWQodTY0IGV2bXB0cilcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oLTI0LVxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaDoyNTpzdGF0aWMgaW5saW5lIGJvb2wgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZChzdHJ1Y3QgdmNwdV92bXggKnZteClcbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmgtMjYte1xuLS1cbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2Lmg9NjQ9c3RhdGljIGlubGluZSBib29sIGV2bXB0cl9pc192YWxpZCh1NjQgZXZtcHRyKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmgtNjgtXG5hcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oOjY5OnN0YXRpYyBpbmxpbmUgYm9vbCBuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHN0cnVjdCB2Y3B1X3ZteCAqdm14KVxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaC03MC17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0xOTQ9c3RhdGljIGludCBuZXN0ZWRfdm14X2ZhaWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdm1faW5zdHJ1Y3Rpb25fZXJyb3IpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yMDItXHRpZiAodm14LVx1MDAzZW5lc3RlZC5jdXJyZW50X3ZtcHRyID09IElOVkFMSURfR1BBIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoyMDM6XHQgICAgIW5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSlcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjA0LVx0XHRyZXR1cm4gbmVzdGVkX3ZteF9mYWlsSW52YWxpZCh2Y3B1KTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTIyNzQ9dm9pZCBuZXN0ZWRfc3luY192bWNzMTJfdG9fc2hhZG93KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTIyNzctXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjIyNzg6XHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yMjc5LVx0XHRjb3B5X3ZtY3MxMl90b19lbmxpZ2h0ZW5lZCh2bXgpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MjQzMT1zdGF0aWMgdm9pZCBwcmVwYXJlX3ZtY3MwMl9lYXJseShzdHJ1Y3QgdmNwdV92bXggKnZteCwgc3RydWN0IGxvYWRlZF92bWNzICp2bWNzMDEsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yNDM2LVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoyNDM3Olx0aWYgKHZteC1cdTAwM2VuZXN0ZWQuZGlydHlfdm1jczEyIHx8IG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSlcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjQzOC1cdFx0cHJlcGFyZV92bWNzMDJfZWFybHlfcmFyZSh2bXgsIHZtY3MxMik7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0yNzYwPXN0YXRpYyBpbnQgcHJlcGFyZV92bWNzMDIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgdm1jczEyICp2bWNzMTIsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yNzY3LVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoyNzY4Olx0aWYgKHZteC1cdTAwM2VuZXN0ZWQuZGlydHlfdm1jczEyIHx8IG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSkge1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yNzY5LVx0XHRwcmVwYXJlX3ZtY3MwMl9yYXJlKHZteCwgdm1jczEyKTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTI3NzEtXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjI3NzI6XHRcdGxvYWRfZ3Vlc3RfcGRwdHJzX3ZtY3MxMiA9ICFuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkgfHxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjc3My1cdFx0XHQhKGV2bWNzLVx1MDAzZWh2X2NsZWFuX2ZpZWxkcyBcdTAwMjYgSFZfVk1YX0VOTElHSFRFTkVEX0NMRUFOX0ZJRUxEX0dVRVNUX0dSUDEpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjkwMS1cdCAqL1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoyOTAyOlx0aWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSlcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjkwMy1cdFx0ZXZtY3MtXHUwMDNlaHZfY2xlYW5fZmllbGRzIHw9IEhWX1ZNWF9FTkxJR0hURU5FRF9DTEVBTl9GSUVMRF9BTEw7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0zNjI5PWVudW0gbnZteF92bWVudHJ5X3N0YXR1cyBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzc3NC1cdHZtY3MxMi1cdTAwM2V2bV9leGl0X3JlYXNvbiA9IGV4aXRfcmVhc29uLmZ1bGw7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjM3NzU6XHRpZiAoZW5hYmxlX3NoYWRvd192bWNzIHx8IG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSlcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzc3Ni1cdFx0dm14LVx1MDAzZW5lc3RlZC5uZWVkX3ZtY3MxMl90b19zaGFkb3dfc3luYyA9IHRydWU7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0zNzg0PXN0YXRpYyBpbnQgbmVzdGVkX3ZteF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxhdW5jaClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM4MDUtXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjM4MDY6XHRpZiAoQ0MoIW5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzgwNy1cdCAgICAgICB2bXgtXHUwMDNlbmVzdGVkLmN1cnJlbnRfdm1wdHIgPT0gSU5WQUxJRF9HUEEpKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzgyMC1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MzgyMTpcdGlmIChuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkpIHtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzgyMi1cdFx0c3RydWN0IGh2X2VubGlnaHRlbmVkX3ZtY3MgKmV2bWNzID0gbmVzdGVkX3ZteF9ldm1jcyh2bXgpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NDY0Mz1zdGF0aWMgdm9pZCBzeW5jX3ZtY3MwMl90b192bWNzMTIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgdm1jczEyICp2bWNzMTIpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy00NjQ2LVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo0NjQ3Olx0aWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSlcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNDY0OC1cdFx0c3luY192bWNzMDJfdG9fdm1jczEyX3JhcmUodmNwdSwgdm1jczEyKTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQ2NTAtXHR2bXgtXHUwMDNlbmVzdGVkLm5lZWRfc3luY192bWNzMDJfdG9fdm1jczEyX3JhcmUgPVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo0NjUxOlx0XHQhbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy00NjUyLVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTA2Mz12b2lkIF9fbmVzdGVkX3ZteF92bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdm1fZXhpdF9yZWFzb24sXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01MTY5LVx0aWYgKCh2bV9leGl0X3JlYXNvbiAhPSAtMSkgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjUxNzA6XHQgICAgKGVuYWJsZV9zaGFkb3dfdm1jcyB8fCBuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkpKVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01MTcxLVx0XHR2bXgtXHUwMDNlbmVzdGVkLm5lZWRfdm1jczEyX3RvX3NoYWRvd19zeW5jID0gdHJ1ZTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTU2NDY9c3RhdGljIGludCBoYW5kbGVfdm1yZWFkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU2NjUtXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjU2NjY6XHRpZiAoIW5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSkge1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01NjY3LVx0XHQvKlxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTg3Mz1zdGF0aWMgaW50IGhhbmRsZV92bXB0cmxkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU4ODItXHQvKiBGb3JiaWQgbm9ybWFsIFZNUFRSTEQgaWYgRW5saWdodGVuZWQgdmVyc2lvbiB3YXMgdXNlZCAqL1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1ODgzOlx0aWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSkge1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01ODg0LVx0XHRrdm1fcXVldWVfZXhjZXB0aW9uKHZjcHUsIFVEX1ZFQ1RPUik7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz01OTQ1PXN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRyc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTk2MC1cdCAqL1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1OTYxOlx0aWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodG9fdm14KHZjcHUpKSlcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTk2Mi1cdFx0Y3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS1cdTAwM2VuZXN0ZWQuaHZfZXZtY3Nfdm1wdHI7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz02NzUyPXN0YXRpYyBpbnQgdm14X2dldF9uZXN0ZWRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjg0MC1cdFx0aWYgKCF2bXgtXHUwMDNlbmVzdGVkLm5lZWRfdm1jczEyX3RvX3NoYWRvd19zeW5jKSB7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjY4NDE6XHRcdFx0aWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSlcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjg0Mi1cdFx0XHRcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDQ4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCB3ZW50OgoKKipFeGFtaW5pbmcgS1ZNIGFuZCBIeXBlci1WIEVtdWxhdGlvbioqCgpPa2F5LCBzbyB0aGlzIGlzIHJlbGF0ZWQgdG8gaG93IEtWTSBlbXVsYXRlcyBIeXBlci1WLCBpbnRlcmVzdGluZy4gSSBrbm93IHRoZSBiYXNpYyBjb25maWdzIHJlcXVpcmVkIGFyZSBgS1ZNYCBhbmQgYEtWTV9JTlRFTGAsIGJ1dCBJJiMzOTttIGp1c3QgY3VyaW91cyBpZiB0aGVyZSBpcyBhIGBLVk1fSFlQRVJWYCBjb25maWd1cmF0aW9uLiBJIGZlZWwgbGlrZSBJJiMzOTt2ZSBzZWVuIGl0IHNvbWV3aGVyZS4uLiBZZXMsIEkgdmFndWVseSByZWNhbGwgc3BvdHRpbmcgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhpcyBpbiBgYXJjaC94ODYva3ZtL0tjb25maWdgLiBUaW1lIHRvIGNoZWNrLiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdCBgS2NvbmZpZ2AgZmlsZSBhbmQgdGFrZSBhIGxvb2sgYXQgYEtWTV9IWVBFUlZgIHNwZWNpZmljYWxseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9IWVBFUlYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTE4Mj1jb25maWcgS1ZNX1NNTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5Mzpjb25maWcgS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4MjcKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipDb25zaWRlcmluZyBLVk0gYW5kIEh5cGVyLVYgQ29tcGF0aWJpbGl0eSoqCgpBbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIFdlIG5lZWQgdG8gZXhwbGljaXRseSBpbmNsdWRlIGRlZmluaXRpb25zIGZvciBgS1ZNYCwgYEtWTV9JTlRFTGAsIGFuZCBgS1ZNX0hZUEVSVmAuIE5vIHJlYWwgc3VycHJpc2VzIHRoZXJlLCB0aGF0JiMzOTtzIGp1c3QgZ29vZCBwcmFjdGljZSB0byBlbnN1cmUgdGhlIGJ1aWxkIGVudmlyb25tZW50IGlzIHNldCB1cCBwcm9wZXJseS4gTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgd2UgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYEtWTV9IWVBFUlZgIGlzIGluZGVlZCAqcmVxdWlyZWQqIGZvciB0aGUgYG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWRgIGZ1bmN0aW9uIHRvIHdvcmsgY29ycmVjdGx5LiBJIGFsd2F5cyBsaWtlIHRvIGVuc3VyZSBmdWxsIGFjY3VyYWN5LCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBzdXBwb3J0LiBJdCYjMzk7cyBlYXN5IHRvIG92ZXJsb29rIGEgc3VidGxlIGRlcGVuZGVuY3kgaW4gdGhlc2UgY29uZmlndXJhdGlvbnMsIGFuZCBhIHNpbXBsZSB2ZXJpZmljYXRpb24gc3RlcCBjYW4gc2F2ZSBhIGxvdCBvZiBkZWJ1Z2dpbmcgdGltZSBsYXRlci4gSnVzdCBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvaHlwZXJ2Lmg9MjA9c3RhdGljIGlubGluZSBib29sIGV2bXB0cl9pc192YWxpZCh1NjQgZXZtcHRyKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmgtMjQtXG5hcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oOjI1OnN0YXRpYyBpbmxpbmUgYm9vbCBuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHN0cnVjdCB2Y3B1X3ZteCAqdm14KVxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaC0yNi17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaD02ND1zdGF0aWMgaW5saW5lIGJvb2wgZXZtcHRyX2lzX3ZhbGlkKHU2NCBldm1wdHIpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaC02OC1cbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2Lmg6Njk6c3RhdGljIGlubGluZSBib29sIG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQoc3RydWN0IHZjcHVfdm14ICp2bXgpXG5hcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oLTcwLXtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTE5ND1zdGF0aWMgaW50IG5lc3RlZF92bXhfZmFpbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2bV9pbnN0cnVjdGlvbl9lcnJvcilcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTIwMi1cdGlmICh2bXgtXHUwMDNlbmVzdGVkLmN1cnJlbnRfdm1wdHIgPT0gSU5WQUxJRF9HUEEgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjIwMzpcdCAgICAhbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yMDQtXHRcdHJldHVybiBuZXN0ZWRfdm14X2ZhaWxJbnZhbGlkKHZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MjI3ND12b2lkIG5lc3RlZF9zeW5jX3ZtY3MxMl90b19zaGFkb3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjI3Ny1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MjI3ODpcdGlmIChuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkpXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTIyNzktXHRcdGNvcHlfdm1jczEyX3RvX2VubGlnaHRlbmVkKHZteCk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0yNDMxPXN0YXRpYyB2b2lkIHByZXBhcmVfdm1jczAyX2Vhcmx5KHN0cnVjdCB2Y3B1X3ZteCAqdm14LCBzdHJ1Y3QgbG9hZGVkX3ZtY3MgKnZtY3MwMSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTI0MzYtXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjI0Mzc6XHRpZiAodm14LVx1MDAzZW5lc3RlZC5kaXJ0eV92bWNzMTIgfHwgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yNDM4LVx0XHRwcmVwYXJlX3ZtY3MwMl9lYXJseV9yYXJlKHZteCwgdm1jczEyKTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTI3NjA9c3RhdGljIGludCBwcmVwYXJlX3ZtY3MwMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2bWNzMTIgKnZtY3MxMixcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTI3NjctXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjI3Njg6XHRpZiAodm14LVx1MDAzZW5lc3RlZC5kaXJ0eV92bWNzMTIgfHwgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKSB7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTI3NjktXHRcdHByZXBhcmVfdm1jczAyX3JhcmUodm14LCB2bWNzMTIpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjc3MS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Mjc3MjpcdFx0bG9hZF9ndWVzdF9wZHB0cnNfdm1jczEyID0gIW5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSB8fFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yNzczLVx0XHRcdCEoZXZtY3MtXHUwMDNlaHZfY2xlYW5fZmllbGRzIFx1MDAyNiBIVl9WTVhfRU5MSUdIVEVORURfQ0xFQU5fRklFTERfR1VFU1RfR1JQMSk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yOTAxLVx0ICovXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjI5MDI6XHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yOTAzLVx0XHRldm1jcy1cdTAwM2Vodl9jbGVhbl9maWVsZHMgfD0gSFZfVk1YX0VOTElHSFRFTkVEX0NMRUFOX0ZJRUxEX0FMTDtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTM2Mjk9ZW51bSBudm14X3ZtZW50cnlfc3RhdHVzIG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNzc0LVx0dm1jczEyLVx1MDAzZXZtX2V4aXRfcmVhc29uID0gZXhpdF9yZWFzb24uZnVsbDtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Mzc3NTpcdGlmIChlbmFibGVfc2hhZG93X3ZtY3MgfHwgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNzc2LVx0XHR2bXgtXHUwMDNlbmVzdGVkLm5lZWRfdm1jczEyX3RvX3NoYWRvd19zeW5jID0gdHJ1ZTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTM3ODQ9c3RhdGljIGludCBuZXN0ZWRfdm14X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbGF1bmNoKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzgwNS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MzgwNjpcdGlmIChDQyghbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zODA3LVx0ICAgICAgIHZteC1cdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0ciA9PSBJTlZBTElEX0dQQSkpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zODIwLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozODIxOlx0aWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSkge1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zODIyLVx0XHRzdHJ1Y3QgaHZfZW5saWdodGVuZWRfdm1jcyAqZXZtY3MgPSBuZXN0ZWRfdm14X2V2bWNzKHZteCk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz00NjQzPXN0YXRpYyB2b2lkIHN5bmNfdm1jczAyX3RvX3ZtY3MxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2bWNzMTIgKnZtY3MxMilcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQ2NDYtXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjQ2NDc6XHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy00NjQ4LVx0XHRzeW5jX3ZtY3MwMl90b192bWNzMTJfcmFyZSh2Y3B1LCB2bWNzMTIpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNDY1MC1cdHZteC1cdTAwM2VuZXN0ZWQubmVlZF9zeW5jX3ZtY3MwMl90b192bWNzMTJfcmFyZSA9XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjQ2NTE6XHRcdCFuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCk7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQ2NTItXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz01MDYzPXZvaWQgX19uZXN0ZWRfdm14X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2bV9leGl0X3JlYXNvbixcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTUxNjktXHRpZiAoKHZtX2V4aXRfcmVhc29uICE9IC0xKSBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTE3MDpcdCAgICAoZW5hYmxlX3NoYWRvd192bWNzIHx8IG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSkpXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTUxNzEtXHRcdHZteC1cdTAwM2VuZXN0ZWQubmVlZF92bWNzMTJfdG9fc2hhZG93X3N5bmMgPSB0cnVlO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTY0Nj1zdGF0aWMgaW50IGhhbmRsZV92bXJlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTY2NS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTY2NjpcdGlmICghbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKSB7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU2NjctXHRcdC8qXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz01ODczPXN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRybGQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTg4Mi1cdC8qIEZvcmJpZCBub3JtYWwgVk1QVFJMRCBpZiBFbmxpZ2h0ZW5lZCB2ZXJzaW9uIHdhcyB1c2VkICovXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjU4ODM6XHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKSB7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU4ODQtXHRcdGt2bV9xdWV1ZV9leGNlcHRpb24odmNwdSwgVURfVkVDVE9SKTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTU5NDU9c3RhdGljIGludCBoYW5kbGVfdm1wdHJzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01OTYwLVx0ICovXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjU5NjE6XHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh0b192bXgodmNwdSkpKVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01OTYyLVx0XHRjdXJyZW50X3ZtcHRyID0gdG9fdm14KHZjcHUpLVx1MDAzZW5lc3RlZC5odl9ldm1jc192bXB0cjtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTY3NTI9c3RhdGljIGludCB2bXhfZ2V0X25lc3RlZF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02ODQwLVx0XHRpZiAoIXZteC1cdTAwM2VuZXN0ZWQubmVlZF92bWNzMTJfdG9fc2hhZG93X3N5bmMpIHtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Njg0MTpcdFx0XHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02ODQyLVx0XHRcdFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4ODEKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyB0aGUgS1ZNIEh5cGVyLVYgR3VhcmQqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZGAgaXMgZGVmaW5lZCB3aXRoaW4gYGFyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmhgLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgaXRzIGluY2x1c2lvbiBvciBmdW5jdGlvbmFsaXR5IGlzIGNvbnRyb2xsZWQgYnkgYSBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19LVk1fSFlQRVJWYCBvciBhIHJlbGF0ZWQgc2V0dGluZyBpcyBlbmFibGVkLiBVbmRlcnN0YW5kaW5nIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBhcm91bmQgdGhpcyBpcyBjcml0aWNhbCB0byBmaWd1cmluZyBvdXQgaXRzIG92ZXJhbGwgcHVycG9zZSBhbmQgY29udGV4dCB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIExldCYjMzk7cyBzZWUgaG93IHRoYXQmIzM5O3MgaGFuZGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaD0yMD1zdGF0aWMgaW5saW5lIGJvb2wgZXZtcHRyX2lzX3ZhbGlkKHU2NCBldm1wdHIpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaC0yNC1cbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2Lmg6MjU6c3RhdGljIGlubGluZSBib29sIG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQoc3RydWN0IHZjcHVfdm14ICp2bXgpXG5hcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oLTI2LXtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oPTY0PXN0YXRpYyBpbmxpbmUgYm9vbCBldm1wdHJfaXNfdmFsaWQodTY0IGV2bXB0cilcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oLTY4LVxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaDo2OTpzdGF0aWMgaW5saW5lIGJvb2wgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZChzdHJ1Y3QgdmNwdV92bXggKnZteClcbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmgtNzAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQwNgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIEh5cGVyLVYgSW50ZWdyYXRpb24gaW4gS1ZNL1ZNWCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBndXRzIG9mIGhvdyBLVk0gb24geDg2IGludGVyYWN0cyB3aXRoIEh5cGVyLVYuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIG91dCBgYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaGAuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBtYWdpYyBoYXBwZW5zIOKAkyB0aGUgYCNpZmRlZmBzLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyB0aGF0IGVuYWJsZSBvciBkaXNhYmxlIEh5cGVyLVYgc3BlY2lmaWMgY29kZSBwYXRocyBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgaG9zdCBpcyBydW5uaW5nIGluIGEgSHlwZXItViBlbnZpcm9ubWVudCBvciBub3QuIFRoaXMgaGVhZGVyIHdpbGwgcHJvYmFibHkgcmV2ZWFsIGhvdyBLVk0gaGFuZGxlcyB0aG9zZSBpbnRlZ3JhdGlvbiBmZWF0dXJlcyBhbmQgaG93IGl0IGFkYXB0cyBpdHMgYmVoYXZpb3IgYmFzZWQgb24gdGhlIHVuZGVybHlpbmcgdmlydHVhbGl6YXRpb24gcGxhdGZvcm0uIEnigJltIGtlZW4gdG8gc2VlIHRoZSBzcGVjaWZpYyBkZXRhaWxzIG9mIHRoZSBmZWF0dXJlIGRldGVjdGlvbiBhbmQgaG93IHRoZSBjb2RlIGJyYW5jaGVzIGFjY29yZGluZ2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbiAgIDI6XHQjaWZuZGVmIF9fS1ZNX1g4Nl9WTVhfSFlQRVJWX0hcbiAgIDM6XHQjZGVmaW5lIF9fS1ZNX1g4Nl9WTVhfSFlQRVJWX0hcbiAgIDQ6XHRcbiAgIDU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9rdm1faG9zdC5oXHUwMDNlXG4gICA2Olx0I2luY2x1ZGUgXCYjMzQ7dm1jczEyLmhcJiMzNDtcbiAgIDc6XHQjaW5jbHVkZSBcJiMzNDt2bXguaFwmIzM0O1xuICAgODpcdFxuICAgOTpcdCNkZWZpbmUgRVZNUFRSX0lOVkFMSUQgKC0xVUxMKVxuICAxMDpcdCNkZWZpbmUgRVZNUFRSX01BUF9QRU5ESU5HICgtMlVMTClcbiAgMTE6XHRcbiAgMTI6XHRlbnVtIG5lc3RlZF9ldm1wdHJsZF9zdGF0dXMge1xuICAxMzpcdFx0RVZNUFRSTERfRElTQUJMRUQsXG4gIDE0Olx0XHRFVk1QVFJMRF9TVUNDRUVERUQsXG4gIDE1Olx0XHRFVk1QVFJMRF9WTUZBSUwsXG4gIDE2Olx0XHRFVk1QVFJMRF9FUlJPUixcbiAgMTc6XHR9O1xuICAxODpcdFxuICAxOTpcdCNpZmRlZiBDT05GSUdfS1ZNX0hZUEVSVlxuICAyMDpcdHN0YXRpYyBpbmxpbmUgYm9vbCBldm1wdHJfaXNfdmFsaWQodTY0IGV2bXB0cilcbiAgMjE6XHR7XG4gIDIyOlx0XHRyZXR1cm4gZXZtcHRyICE9IEVWTVBUUl9JTlZBTElEIFx1MDAyNlx1MDAyNiBldm1wdHIgIT0gRVZNUFRSX01BUF9QRU5ESU5HO1xuICAyMzpcdH1cbiAgMjQ6XHRcbiAgMjU6XHRzdGF0aWMgaW5saW5lIGJvb2wgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZChzdHJ1Y3QgdmNwdV92bXggKnZteClcbiAgMjY6XHR7XG4gIDI3Olx0XHRyZXR1cm4gZXZtcHRyX2lzX3ZhbGlkKHZteC1cdTAwM2VuZXN0ZWQuaHZfZXZtY3Nfdm1wdHIpO1xuICAyODpcdH1cbiAgMjk6XHRcbiAgMzA6XHRzdGF0aWMgaW5saW5lIGJvb2wgZXZtcHRyX2lzX3NldCh1NjQgZXZtcHRyKVxuICAzMTpcdHtcbiAgMzI6XHRcdHJldHVybiBldm1wdHIgIT0gRVZNUFRSX0lOVkFMSUQ7XG4gIDMzOlx0fVxuICAzNDpcdFxuICAzNTpcdHN0YXRpYyBpbmxpbmUgYm9vbCBuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3NldChzdHJ1Y3QgdmNwdV92bXggKnZteClcbiAgMzY6XHR7XG4gIDM3Olx0XHRyZXR1cm4gZXZtcHRyX2lzX3NldCh2bXgtXHUwMDNlbmVzdGVkLmh2X2V2bWNzX3ZtcHRyKTtcbiAgMzg6XHR9XG4gIDM5Olx0XG4gIDQwOlx0c3RhdGljIGlubGluZSBzdHJ1Y3QgaHZfZW5saWdodGVuZWRfdm1jcyAqbmVzdGVkX3ZteF9ldm1jcyhzdHJ1Y3QgdmNwdV92bXggKnZteClcbiAgNDE6XHR7XG4gIDQyOlx0XHRyZXR1cm4gdm14LVx1MDAzZW5lc3RlZC5odl9ldm1jcztcbiAgNDM6XHR9XG4gIDQ0Olx0XG4gIDQ1Olx0c3RhdGljIGlubGluZSBib29sIGd1ZXN0X2NwdV9jYXBfaGFzX2V2bWNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiAgNDY6XHR7XG4gIDQ3Olx0XHQvKlxuICA0ODpcdFx0ICogZVZNQ1MgaXMgZXhwb3NlZCB0byB0aGUgZ3Vlc3QgaWYgSHlwZXItViBpcyBlbmFibGVkIGluIENQVUlEIGFuZFxuICA0OTpcdFx0ICogZVZNQ1MgaGFzIGJlZW4gZXhwbGljaXRseSBlbmFibGVkIGJ5IHVzZXJzcGFjZS5cbiAgNTA6XHRcdCAqL1xuICA1MTpcdFx0cmV0dXJuIHZjcHUtXHUwMDNlYXJjaC5oeXBlcnZfZW5hYmxlZCBcdTAwMjZcdTAwMjZcbiAgNTI6XHRcdCAgICAgICB0b192bXgodmNwdSktXHUwMDNlbmVzdGVkLmVubGlnaHRlbmVkX3ZtY3NfZW5hYmxlZDtcbiAgNTM6XHR9XG4gIDU0Olx0XG4gIDU1Olx0dTY0IG5lc3RlZF9nZXRfZXZtcHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gIDU2Olx0dWludDE2X3QgbmVzdGVkX2dldF9ldm1jc192ZXJzaW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gIDU3Olx0aW50IG5lc3RlZF9lbmFibGVfZXZtY3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuICA1ODpcdFx0XHRcdHVpbnQxNl90ICp2bWNzX3ZlcnNpb24pO1xuICA1OTpcdHZvaWQgbmVzdGVkX2V2bWNzX2ZpbHRlcl9jb250cm9sX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3JfaW5kZXgsIHU2NCAqcGRhdGEpO1xuICA2MDpcdGludCBuZXN0ZWRfZXZtY3NfY2hlY2tfY29udHJvbHMoc3RydWN0IHZtY3MxMiAqdm1jczEyKTtcbiAgNjE6XHRib29sIG5lc3RlZF9ldm1jc19sMl90bGJfZmx1c2hfZW5hYmxlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuICA2MjpcdHZvaWQgdm14X2h2X2luamVjdF9zeW50aGV0aWNfdm1leGl0X3Bvc3RfdGxiX2ZsdXNoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gIDYzOlx0I2Vsc2VcbiAgNjQ6XHRzdGF0aWMgaW5saW5lIGJvb2wgZXZtcHRyX2lzX3ZhbGlkKHU2NCBldm1wdHIpXG4gIDY1Olx0e1xuICA2NjpcdFx0cmV0dXJuIGZhbHNlO1xuICA2NzpcdH1cbiAgNjg6XHRcbiAgNjk6XHRzdGF0aWMgaW5saW5lIGJvb2wgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZChzdHJ1Y3QgdmNwdV92bXggKnZteClcbiAgNzA6XHR7XG4gIDcxOlx0XHRyZXR1cm4gZmFsc2U7XG4gIDcyOlx0fVxuICA3MzpcdFxuICA3NDpcdHN0YXRpYyBpbmxpbmUgYm9vbCBldm1wdHJfaXNfc2V0KHU2NCBldm1wdHIpXG4gIDc1Olx0e1xuICA3NjpcdFx0cmV0dXJuIGZhbHNlO1xuICA3NzpcdH1cbiAgNzg6XHRcbiAgNzk6XHRzdGF0aWMgaW5saW5lIGJvb2wgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl9zZXQoc3RydWN0IHZjcHVfdm14ICp2bXgpXG4gIDgwOlx0e1xuICA4MTpcdFx0cmV0dXJuIGZhbHNlO1xuICA4MjpcdH1cbiAgODM6XHRcbiAgODQ6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBodl9lbmxpZ2h0ZW5lZF92bWNzICpuZXN0ZWRfdm14X2V2bWNzKHN0cnVjdCB2Y3B1X3ZteCAqdm14KVxuICA4NTpcdHtcbiAgODY6XHRcdHJldHVybiBOVUxMO1xuICA4NzpcdH1cbiAgODg6XHQjZW5kaWZcbiAgODk6XHRcbiAgOTA6XHQjZW5kaWYgLyogX19LVk1fWDg2X1ZNWF9IWVBFUlZfSCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzAyNQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDExMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBLVk0gQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYENPTkZJR19LVk1fSFlQRVJWYCBpcyBpbmRlZWQgYSBwcmVyZXF1aXNpdGUgZm9yIGBuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkYCB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIFRoYXQgbWVhbnMgYEtWTV9IWVBFUlZgIGFic29sdXRlbHkgbmVlZHMgdG8gYmUgaW5jbHVkZWQgaW4gYEVuYWJsZUNvbmZpZ3NgLiBJdOKAmXMgc3RyYWlnaHRmb3J3YXJkLCBhIGRpcmVjdCBkZXBlbmRlbmN5LgoKTm93LCBJJiMzOTttIHNlY29uZC1ndWVzc2luZyBteXNlbGYgc2xpZ2h0bHkuIElzIGBLVk1fSU5URUxgICpzdWZmaWNpZW50Kiwgb3IgZG8gd2UgYWxzbyByZXF1aXJlIHRoZSBiYXNlIGBLVk1gIG9wdGlvbiB0byBiZSBlbmFibGVkPyBJbnRlbCB1c3VhbGx5IHJlbGllcyBvbiB0aGUgZ2VuZXJpYyBLVk0gZnVuY3Rpb25hbGl0eSwgc28gSSYjMzk7bSBsZWFuaW5nIHRvd2FyZCBuZWVkaW5nIGJvdGguIFRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgcXVpY2tseSBjaGVjayB0aGUgYGFyY2gveDg2L2t2bS9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBkZWZpbml0aXZlIHNvdXJjZSBmb3IgdGhlc2UgZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGUgeDg2IEtWTSBtb2R1bGUuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBzYXlzLiBObyBuZWVkIHRvIGxlYXZlIGFueSBzdG9uZSB1bnR1cm5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9JTlRFTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9ODM9Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDgtICAgICAgICBib29sIFwmIzM0O0NoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVx0Ym9vbCBcJiMzNDtJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NjY1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBLVk0gQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHNwZWNpZmljIGFib3V0IEtWTSBvbiB4ODYsIHNvIEkmIzM5O20gaGVhZGluZyBkaXJlY3RseSB0byB0aGUgc291cmNlLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O2xsIG5hdmlnYXRlIHRvIHRoZSBgYXJjaC94ODYva3ZtL0tjb25maWdgIGZpbGUuIEkmIzM5O20gYWltaW5nIGZvciBhcm91bmQgbGluZSA5NiDigJMgaG9wZWZ1bGx5IHRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB3aGF0ZXZlciBJJiMzOTttIHRyb3VibGVzaG9vdGluZyBvciBpbnZlc3RpZ2F0aW5nLiBJJiMzOTttIGV4cGVjdGluZyBzb21ldGhpbmcgcmVsYXRlZCB0byBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBvciBwZXJoYXBzIGEgc2VjdGlvbiBkZWZpbmluZyBzb21lIGtleSBLVk0gZmVhdHVyZXMuIExldCYjMzk7cyBzZWUgd2hhdCBsaW5lIDk2IGhvbGRzLiBUaGlzIGlzIGdvaW5nIHRvIGdpdmUgbWUgdGhlIG1vc3QgZ3JhbnVsYXIgaW5zaWdodCBpbnRvIHRoZSBidWlsZCBjb25maWd1cmF0aW9ucyBJJiMzOTttIHdvcmtpbmcgd2l0aC4gVGltZSB0byByZWFkIGFuZCBjb21wcmVoZW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA5MDpcdFx0ICBwcm90ZWN0ZWQgVk1zIGFyZSBwdXJlbHkgYSBkZXZlbG9wbWVudCBhbmQgdGVzdGluZyB2ZWhpY2xlIGZvclxuICA5MTpcdFx0ICBLVk1fQ1JFQVRFX0dVRVNUX01FTUZELiAgQXR0ZW1wdGluZyB0byBydW4gYSBcJiMzNDtyZWFsXCYjMzQ7IFZNIHdvcmtsb2FkIGFzIGFcbiAgOTI6XHRcdCAgc29mdHdhcmUtcHJvdGVjdGVkIFZNIHdpbGwgZmFpbCBtaXNlcmFibHkuXG4gIDkzOlx0XG4gIDk0Olx0XHQgIElmIHVuc3VyZSwgc2F5IFwmIzM0O05cJiMzNDsuXG4gIDk1Olx0XG4gIDk2Olx0Y29uZmlnIEtWTV9JTlRFTFxuICA5NzpcdFx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuICA5ODpcdFx0ZGVwZW5kcyBvbiBLVk0gXHUwMDI2XHUwMDI2IElBMzJfRkVBVF9DVExcbiAgOTk6XHRcdHNlbGVjdCBYODZfRlJFRCBpZiBYODZfNjRcbiAxMDA6XHRcdGhlbHBcbiAxMDE6XHRcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgS1ZNIG9uIHByb2Nlc3NvcnMgZXF1aXBwZWQgd2l0aCBJbnRlbCYjMzk7cyBWVFxuIDEwMjpcdFx0ICBleHRlbnNpb25zLCBhLmsuYS4gVmlydHVhbCBNYWNoaW5lIEV4dGVuc2lvbnMgKFZNWCkuXG4gMTAzOlx0XG4gMTA0Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuIDEwNTpcdFx0ICB3aWxsIGJlIGNhbGxlZCBrdm0taW50ZWwuXG4gMTA2Olx0XG4gMTA3Olx0Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuIDEwODpcdCAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuIDEwOTpcdCAgICAgICAgZGVwZW5kcyBvbiBLVk1fSU5URUwgXHUwMDI2XHUwMDI2IEVYUEVSVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODIyOQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDExMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBLZXJuZWwgQ29uZmlndXJhdGlvbiBTdHJhdGVneSoqCgpPa2F5LCBzbyBJJiMzOTttIGNvbmZpZ3VyaW5nIHRoZSBrZXJuZWwgZm9yIEtWTSBzdXBwb3J0LiBJdCYjMzk7cyBvYnZpb3VzIHRoYXQgYEtWTV9JTlRFTGAgYnVpbGRzIG9uIHRvcCBvZiBgS1ZNYCwgc28gSSBkZWZpbml0ZWx5IG5lZWQgdG8gaW5jbHVkZSBib3RoIG9mIHRob3NlLiBJIGFsc28gc2VlIHRoYXQgd2UgdXNlIGBLVk1fSFlQRVJWYCBpbiBzb21lIGNhc2VzLCBzbyBsZXQmIzM5O3MgaW5jbHVkZSB0aGF0IHRvby4gSXQmIzM5O3MgYmVzdCB0byBiZSBjb21wcmVoZW5zaXZlIGFuZCBhdm9pZCBhbnkgdW5uZWNlc3NhcnkgcmVjb21waWxhdGlvbi4KCk5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBJIHJlY2FsbCBzZWVpbmcgYGhhbmRsZV92bXB0cmxkYCBhbmQgYGhhbmRsZV92bXB0cnN0YCBpbiBgYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY2AsIHdoaWNoIHN1Z2dlc3RzIG5lc3RlZCB2aXJ0dWFsaXphdGlvbi4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUmIzM5O3MgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBkaXJlY3RseSByZWxhdGVkIHRvIHRoYXQgZnVuY3Rpb25hbGl0eSwgc29tZXRoaW5nIGxpa2UgYENPTkZJR19LVk1fSU5URUxfTkVTVEVEYCBwZXJoYXBzLiBHb3R0YSBjaGVjayBmb3IgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0lOVEVMX05FU1RFRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODU3NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKk5lc3RlZCBWTVggTW9kdWxlIEludmVzdGlnYXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcsIHRoYXQgJiMzNDtuZXN0ZWQgVk1YJiMzNDsgdGhpbmcgaXMgYWxtb3N0IGNlcnRhaW5seSBub3QgYSBzdGFuZGFsb25lIG1vZHVsZSBpbiB0aGUgdHJhZGl0aW9uYWwgc2Vuc2UuIEl0JiMzOTtzIHByb2JhYmx5IGp1c3QgYSBwYXJhbWV0ZXIgdGhhdCYjMzk7cyBwYXNzZWQgdG8gYSBtb2R1bGUsIG9yIG1vcmUgbGlrZWx5LCBpdCYjMzk7cyBhIHBpZWNlIG9mIHRoZSBgS1ZNX0lOVEVMYCBtb2R1bGUgaXRzZWxmLiBJIG5lZWQgdG8gZHJpbGwgZG93biBhbmQgc2VlIGhvdyB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgYWN0dWFsbHkgY29uc3RydWN0ZWQuCgpUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaXMgdGhlIGJ1aWxkIHN5c3RlbS4gTGV0IG1lIGNoZWNrIHRoZSBgYXJjaC94ODYva3ZtL3ZteC9NYWtlZmlsZWAgdG8gc2VlIGhvdyBgbmVzdGVkLm9gIChvciB3aGF0ZXZlciBvYmplY3QgY29udGFpbnMgdGhlIG5lc3RlZCBWTVggZnVuY3Rpb25hbGl0eSkgaXMgY29tcGlsZWQuIFRoYXQgc2hvdWxkIHJldmVhbCB3aGV0aGVyIGl0JiMzOTtzIGNvbmRpdGlvbmFsbHkgaW5jbHVkZWQsIGNvbXBpbGVkIHdpdGggc3BlY2lmaWMgZmxhZ3MsIG9yIGlmIGl0JiMzOTtzIHRyZWF0ZWQgYXMgYSBjb21wb25lbnQgd2l0aGluIGEgbGFyZ2VyIGNvbXBpbGF0aW9uIHVuaXQuIFRoZSBtYWtlZmlsZSB3aWxsIGV4cG9zZSBob3cgdGhlIGRlcGVuZGVuY2llcyBhcmUgbWFuYWdlZCwgdGhlIGluY2x1c2lvbiBvZiBjb25kaXRpb25hbCBjb2RlLCBhbmQgaG93IHRoZXNlIHNldHRpbmdzIGluZmx1ZW5jZSB0aGUgYnVpbGQgcHJvY2Vzcy4gVGhhdCYjMzk7cyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93ICYjMzQ7bmVzdGVkIFZNWCYjMzQ7IGlzIGhhbmRsZWQgYXQgdGhlIHNvdXJjZSBsZXZlbC4gRnJvbSB0aGVyZSwgSSBjYW4gdHJhY2UgZGVwZW5kZW5jaWVzIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgZmxhZyBpcyBleHBvc2VkIG9yIGlmIGl0JiMzOTtzIGhhbmRsZWQgZGlmZmVyZW50bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25lc3RlZC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9tYWluLmM9ODgwPXN0cnVjdCBrdm1feDg2X29wcyB2dF94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtOTk3LVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6OTk4Olx0Lm5lc3RlZF9vcHMgPSBcdTAwMjZ2bXhfbmVzdGVkX29wcyxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTk5OS1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTc0NzA9c3RhdGljIGdwYV90IHZteF90cmFuc2xhdGVfbmVzdGVkX2dwYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTc0OTAtXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjc0OTE6c3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyB2bXhfbmVzdGVkX29wcyA9IHtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzQ5Mi1cdC5sZWF2ZV9uZXN0ZWQgPSB2bXhfbGVhdmVfbmVzdGVkLFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmg9MzEyPXN0YXRpYyBpbmxpbmUgYm9vbCBuZXN0ZWRfY3B1X2hhc19ub19od19lcnJjb2RlX2NjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oLTMyMC1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmg6MzIxOmV4dGVybiBzdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIHZteF9uZXN0ZWRfb3BzO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaC0zMjItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MzQxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEZWJ1Z2dpbmcgYSBCdWlsZCBTeXN0ZW0gRGlzY3JlcGFuY3kqKgoKSG1tLCB0aGF0JiMzOTtzIG9kZC4gSSB3YXMgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGBuZXN0ZWQub2AsIHlldCB0aGUgb3V0cHV0IGlzbiYjMzk7dCBwb2ludGluZyBtZSBiYWNrIHRvIHRoZSBgTWFrZWZpbGVgLiBUaGF0JiMzOTtzIGEgcmVkIGZsYWcuIFNvbWV0aGluZyBpc24mIzM5O3QgYmVoYXZpbmcgYXMgZXhwZWN0ZWQgd2l0aCB0aGUgYnVpbGQgZW52aXJvbm1lbnQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoYXQgb2JqZWN0IGZpbGUgaXMgYmVpbmcgcHJvZHVjZWQuIE15IGZpcnN0IGluc3RpbmN0LCBjb25zaWRlcmluZyBJJiMzOTttIHdvcmtpbmcgd2l0aCBhIGtlcm5lbCBtb2R1bGUgYW5kIGxpa2VseSB1c2luZyBhIHR5cGljYWwgYnVpbGQgc2V0dXAsIGlzIHRvIGNoZWNrIHRoZSBgYXJjaC94ODYva3ZtL01ha2VmaWxlYC4gVGhhdCYjMzk7cyBhIGtleSBhcmVhLCBlc3BlY2lhbGx5IGlmIHRoaXMgaXMgcmVsYXRlZCB0byBLVk0gb3IgeDg2IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb2RlLiBUaGF0IGBNYWtlZmlsZWAgb2Z0ZW4gaG9sZHMgY3J1Y2lhbCBpbmZvcm1hdGlvbiBhYm91dCBob3cgdGhvc2Ugc3BlY2lmaWMgb2JqZWN0IGZpbGVzIGFyZSBoYW5kbGVkLiBJdCYjMzk7cyB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gZmluZCB0aGUgcmVjaXBlIG9yIHJ1bGVzIHRoYXQgZ2VuZXJhdGUgdGhlIGBuZXN0ZWQub2AgdGhhdCBJJiMzOTttIGludGVyZXN0ZWQgaW4sIG9yIGlkZW50aWZ5IHdoeSBpdCYjMzk7cyAqbm90KiBiZWluZyBidWlsdCBhcyBJIGFudGljaXBhdGUuIFRpbWUgdG8gZGl2ZSBpbiB0aGVyZSBhbmQgc2VlIHdoYXQgdGhlIGJ1aWxkIHByb2Nlc3MgaXMgZG9pbmcgd2l0aCB0aGlzIHBhcnRpY3VsYXIgc291cmNlIGZpbGUsIG9yIGlmIHRoZXJlJiMzOTtzIGEgcHJvYmxlbSB3aXRoIGl0cyBpbmNsdXNpb24gaW4gdGhlIGJ1aWxkIGF0IGFsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmVzdGVkLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9NYWtlZmlsZT0xNz1rdm0taW50ZWwteVx0XHQmIzQzOz0gdm14L3ZteC5vIHZteC92bWVudGVyLm8gdm14L3BtdV9pbnRlbC5vIHZteC92bWNzMTIubyBcXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlOjE4Olx0XHRcdCAgIHZteC9uZXN0ZWQubyB2bXgvcG9zdGVkX2ludHIubyB2bXgvbWFpbi5vXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtMTktXG4tLVxuYXJjaC94ODYva3ZtL01ha2VmaWxlPTIyPWt2bS1pbnRlbC0kKENPTkZJR19LVk1fSU5URUxfVERYKVx0JiM0Mzs9IHZteC90ZHgub1xuYXJjaC94ODYva3ZtL01ha2VmaWxlLTIzLVxuYXJjaC94ODYva3ZtL01ha2VmaWxlOjI0Omt2bS1hbWQteVx0XHQmIzQzOz0gc3ZtL3N2bS5vIHN2bS92bWVudGVyLm8gc3ZtL3BtdS5vIHN2bS9uZXN0ZWQubyBzdm0vYXZpYy5vXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtMjUtXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTIwMTM9c3RhdGljIHU2NCBrdm1faHZfZmx1c2hfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9odl9oY2FsbCAqaGMpXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTIwNDktXHRpZiAoIWhjLVx1MDAzZWZhc3QgXHUwMDI2XHUwMDI2IG1tdV9pc19uZXN0ZWQodmNwdSkpIHtcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoyMDUwOlx0XHRoYy1cdTAwM2VpbmdwYSA9IGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNldHJhbnNsYXRlX25lc3RlZF9ncGEoXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMjA1MS1cdFx0XHRcdFx0dmNwdSwgaGMtXHUwMDNlaW5ncGEsXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTIzOTM9c3RhdGljIGludCBrdm1faHZfaHlwZXJjYWxsX2NvbXBsZXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJlc3VsdClcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMjQxMC1cdGlmICh0bGJfbG9ja19jb3VudClcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoyNDExOlx0XHRrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZWh2X2luamVjdF9zeW50aGV0aWNfdm1leGl0X3Bvc3RfdGxiX2ZsdXNoKHZjcHUpO1xuYXJjaC94ODYva3ZtL2h5cGVydi5jLTI0MTItXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTI3NzQ9aW50IGt2bV9nZXRfaHZfY3B1aWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2NwdWlkMiAqY3B1aWQsXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTI3OTEtXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6Mjc5MjpcdGlmIChrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZWdldF9ldm1jc192ZXJzaW9uKVxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjI3OTM6XHRcdGV2bWNzX3ZlciA9IGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlZ2V0X2V2bWNzX3ZlcnNpb24odmNwdSk7XG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMjc5NC1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11Lmg9MzAzPXN0YXRpYyBpbmxpbmUgZ3BhX3Qga3ZtX3RyYW5zbGF0ZV9ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS9tbXUuaC0zMTAtXHRcdHJldHVybiBncGE7XG5hcmNoL3g4Ni9rdm0vbW11Lmg6MzExOlx0cmV0dXJuIGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNldHJhbnNsYXRlX25lc3RlZF9ncGEodmNwdSwgZ3BhLCBhY2Nlc3MsXG5hcmNoL3g4Ni9rdm0vbW11LmgtMzEyLVx0XHRcdFx0XHRcdFx0ICAgIGV4Y2VwdGlvbixcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2luZ190bXBsLmg9MjA4PXN0YXRpYyBpbnQgRk5BTUUodXBkYXRlX2FjY2Vzc2VkX2RpcnR5X2JpdHMpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2luZ190bXBsLmgtMjM1LSNpZiBQVFRZUEUgPT0gUFRUWVBFX0VQVFxuYXJjaC94ODYva3ZtL21tdS9wYWdpbmdfdG1wbC5oOjIzNjpcdFx0XHRpZiAoa3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cdTAwM2V3cml0ZV9sb2dfZGlydHkodmNwdSwgYWRkcikpXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2luZ190bXBsLmgtMjM3LVx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz0yMTQ3PXN0YXRpYyBncGFfdCBzdm1fdHJhbnNsYXRlX25lc3RlZF9ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0yMTY0LVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzoyMTY1OnN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgc3ZtX25lc3RlZF9vcHMgPSB7XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTIxNjYtXHQubGVhdmVfbmVzdGVkID0gc3ZtX2xlYXZlX25lc3RlZCxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTUzNDM9c3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NDQ2LVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo1NDQ3Olx0Lm5lc3RlZF9vcHMgPSBcdTAwMjZzdm1fbmVzdGVkX29wcyxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTQ0OC1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTkxNT1zdGF0aWMgaW5saW5lIHZvaWQgc3ZtX3BtdV9oYW5kbGVfbmVzdGVkX3RyYW5zaXRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC05MjYtXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjkyNzpleHRlcm4gc3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyBzdm1fbmVzdGVkX29wcztcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtOTI4LVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTg4MD1zdHJ1Y3Qga3ZtX3g4Nl9vcHMgdnRfeDg2X29wcyBfX2luaXRkYXRhID0ge1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTk5Ny1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjk5ODpcdC5uZXN0ZWRfb3BzID0gXHUwMDI2dm14X25lc3RlZF9vcHMsXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy05OTktXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz03NDcwPXN0YXRpYyBncGFfdCB2bXhfdHJhbnNsYXRlX25lc3RlZF9ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03NDkwLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo3NDkxOnN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgdm14X25lc3RlZF9vcHMgPSB7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTc0OTItXHQubGVhdmVfbmVzdGVkID0gdm14X2xlYXZlX25lc3RlZCxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oPTMxMj1zdGF0aWMgaW5saW5lIGJvb2wgbmVzdGVkX2NwdV9oYXNfbm9faHdfZXJyY29kZV9jYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaC0zMjAtXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oOjMyMTpleHRlcm4gc3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyB2bXhfbmVzdGVkX29wcztcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmgtMzIyLVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz04MjY9c3RhdGljIHZvaWQga3ZtX211bHRpcGxlX2V4Y2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBucixcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtODM5LVx0aWYgKGlzX2d1ZXN0X21vZGUodmNwdSkgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0veDg2LmM6ODQwOlx0ICAgIGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlaXNfZXhjZXB0aW9uX3ZtZXhpdCh2Y3B1LCBuciwgZXJyb3JfY29kZSkpIHtcbmFyY2gveDg2L2t2bS94ODYuYy04NDEtXHRcdGt2bV9xdWV1ZV9leGNlcHRpb25fdm1leGl0KHZjcHUsIG5yLCBoYXNfZXJyb3IsIGVycm9yX2NvZGUsXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTI2NjE9dTY0IGt2bV9jYWxjX25lc3RlZF90c2Nfb2Zmc2V0KHU2NCBsMV9vZmZzZXQsIHU2NCBsMl9vZmZzZXQsIHU2NCBsMl9tdWx0aXBsaWVyKVxuYXJjaC94ODYva3ZtL3g4Ni5jLTI2NjIte1xuYXJjaC94ODYva3ZtL3g4Ni5jOjI2NjM6XHR1NjQgbmVzdGVkX29mZnNldDtcbmFyY2gveDg2L2t2bS94ODYuYy0yNjY0LVxuYXJjaC94ODYva3ZtL3g4Ni5jLTI2NjUtXHRpZiAobDJfbXVsdGlwbGllciA9PSBrdm1fY2Fwcy5kZWZhdWx0X3RzY19zY2FsaW5nX3JhdGlvKVxuYXJjaC94ODYva3ZtL3g4Ni5jOjI2NjY6XHRcdG5lc3RlZF9vZmZzZXQgPSBsMV9vZmZzZXQ7XG5hcmNoL3g4Ni9rdm0veDg2LmMtMjY2Ny1cdGVsc2VcbmFyY2gveDg2L2t2bS94ODYuYzoyNjY4Olx0XHRuZXN0ZWRfb2Zmc2V0ID0gbXVsX3M2NF91NjRfc2hyKChzNjQpIGwxX29mZnNldCwgbDJfbXVsdGlwbGllcixcbmFyY2gveDg2L2t2bS94ODYuYy0yNjY5LVx0XHRcdFx0XHRcdGt2bV9jYXBzLnRzY19zY2FsaW5nX3JhdGlvX2ZyYWNfYml0cyk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtMjY3MC1cbmFyY2gveDg2L2t2bS94ODYuYzoyNjcxOlx0bmVzdGVkX29mZnNldCAmIzQzOz0gbDJfb2Zmc2V0O1xuYXJjaC94ODYva3ZtL3g4Ni5jOjI2NzI6XHRyZXR1cm4gbmVzdGVkX29mZnNldDtcbmFyY2gveDg2L2t2bS94ODYuYy0yNjczLX1cbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9NDc2OD1pbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy00OTMwLVx0Y2FzZSBLVk1fQ0FQX05FU1RFRF9TVEFURTpcbmFyY2gveDg2L2t2bS94ODYuYzo0OTMxOlx0XHRyID0ga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cdTAwM2VnZXRfc3RhdGUgP1xuYXJjaC94ODYva3ZtL3g4Ni5jOjQ5MzI6XHRcdFx0a3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cdTAwM2VnZXRfc3RhdGUoTlVMTCwgTlVMTCwgMCkgOiAwO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTQ5MzMtXHRcdGJyZWFrO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYy00OTM4LVx0Y2FzZSBLVk1fQ0FQX0hZUEVSVl9FTkxJR0hURU5FRF9WTUNTOlxuYXJjaC94ODYva3ZtL3g4Ni5jOjQ5Mzk6XHRcdHIgPSBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZWVuYWJsZV9ldm1jcyAhPSBOVUxMO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTQ5NDAtXHRcdGJyZWFrO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz02MDA4PXN0YXRpYyBpbnQga3ZtX3ZjcHVfaW9jdGxfZW5hYmxlX2NhcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTYwMzEtXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjAzMjpcdFx0XHRpZiAoIWt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlZW5hYmxlX2V2bWNzKVxuYXJjaC94ODYva3ZtL3g4Ni5jLTYwMzMtXHRcdFx0XHRyZXR1cm4gLUVOT1RUWTtcbmFyY2gveDg2L2t2bS94ODYuYzo2MDM0Olx0XHRcdHIgPSBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZWVuYWJsZV9ldm1jcyh2Y3B1LCBcdTAwMjZ2bWNzX3ZlcnNpb24pO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTYwMzUtXHRcdFx0aWYgKCFyKSB7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTYxODk9bG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy02NTMxLVx0XHRyID0gLUVJTlZBTDtcbmFyY2gveDg2L2t2bS94ODYuYzo2NTMyOlx0XHRpZiAoIWt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlZ2V0X3N0YXRlKVxuYXJjaC94ODYva3ZtL3g4Ni5jLTY1MzMtXHRcdFx0YnJlYWs7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTY1MzktXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjU0MDpcdFx0ciA9IGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlZ2V0X3N0YXRlKHZjcHUsIHVzZXJfa3ZtX25lc3RlZF9zdGF0ZSxcbmFyY2gveDg2L2t2bS94ODYuYy02NTQxLVx0XHRcdFx0XHRcdCAgICAgdXNlcl9kYXRhX3NpemUpO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYy02NTYxLVx0XHRyID0gLUVJTlZBTDtcbmFyY2gveDg2L2t2bS94ODYuYzo2NTYyOlx0XHRpZiAoIWt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlc2V0X3N0YXRlKVxuYXJjaC94ODYva3ZtL3g4Ni5jLTY1NjMtXHRcdFx0YnJlYWs7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTY1ODQtXHRcdGlkeCA9IHNyY3VfcmVhZF9sb2NrKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZXNyY3UpO1xuYXJjaC94ODYva3ZtL3g4Ni5jOjY1ODU6XHRcdHIgPSBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZXNldF9zdGF0ZSh2Y3B1LCB1c2VyX2t2bV9uZXN0ZWRfc3RhdGUsIFx1MDAyNmt2bV9zdGF0ZSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtNjU4Ni1cdFx0c3JjdV9yZWFkX3VubG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzcmN1LCBpZHgpO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz0xMDU2NT1pbnQga3ZtX2NoZWNrX25lc3RlZF9ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMDU2Ny1cdGlmIChrdm1fdGVzdF9yZXF1ZXN0KEtWTV9SRVFfVFJJUExFX0ZBVUxULCB2Y3B1KSkge1xuYXJjaC94ODYva3ZtL3g4Ni5jOjEwNTY4Olx0XHRrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZXRyaXBsZV9mYXVsdCh2Y3B1KTtcbmFyY2gveDg2L2t2bS94ODYuYy0xMDU2OS1cdFx0cmV0dXJuIDE7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNTcxLVxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwNTcyOlx0cmV0dXJuIGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlY2hlY2tfZXZlbnRzKHZjcHUpO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNTczLX1cbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTA2MzM9c3RhdGljIGludCBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMDgxMC1cdGlmIChpc19ndWVzdF9tb2RlKHZjcHUpIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwODExOlx0ICAgIGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlaGFzX2V2ZW50cyBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L2t2bS94ODYuYzoxMDgxMjpcdCAgICBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZWhhc19ldmVudHModmNwdSwgdHJ1ZSkpXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA4MTMtXHRcdCpyZXFfaW1tZWRpYXRlX2V4aXQgPSB0cnVlO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz0xMTExMj1zdGF0aWMgaW50IHZjcHVfZW50ZXJfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMTEzNC1cdFx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfR0VUX05FU1RFRF9TVEFURV9QQUdFUywgdmNwdSkpIHtcbmFyY2gveDg2L2t2bS94ODYuYzoxMTEzNTpcdFx0XHRpZiAodW5saWtlbHkoIWt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlZ2V0X25lc3RlZF9zdGF0ZV9wYWdlcyh2Y3B1KSkpIHtcbmFyY2gveDg2L2t2bS94ODYuYy0xMTEzNi1cdFx0XHRcdHIgPSAwO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMTE4Ni1cdFx0XHRpZiAoaXNfZ3Vlc3RfbW9kZSh2Y3B1KSlcbmFyY2gveDg2L2t2bS94ODYuYzoxMTE4NzpcdFx0XHRcdGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNldHJpcGxlX2ZhdWx0KHZjcHUpO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTExMTg4LVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz0xMTU2OT1ib29sIGt2bV92Y3B1X2hhc19ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMTYwNS1cdGlmIChpc19ndWVzdF9tb2RlKHZjcHUpIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL3g4Ni5jOjExNjA2Olx0ICAgIGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlaGFzX2V2ZW50cyBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L2t2bS94ODYuYzoxMTYwNzpcdCAgICBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZWhhc19ldmVudHModmNwdSwgZmFsc2UpKVxuYXJjaC94ODYva3ZtL3g4Ni5jLTExNjA4LVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTE5NTY9aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTIwMzEtXHRpZiAodmNwdS1cdTAwM2VhcmNoLmV4Y2VwdGlvbl9mcm9tX3VzZXJzcGFjZSBcdTAwMjZcdTAwMjYgaXNfZ3Vlc3RfbW9kZSh2Y3B1KSBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L2t2bS94ODYuYzoxMjAzMjpcdCAgICBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZWlzX2V4Y2VwdGlvbl92bWV4aXQodmNwdSwgZXgtXHUwMDNldmVjdG9yLFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEyMDMzLVx0XHRcdFx0XHRcdFx0ZXgtXHUwMDNlZXJyb3JfY29kZSkpIHtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2Lmg9MTUyPXN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fbGVhdmVfbmVzdGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS94ODYuaC0xNTMte1xuYXJjaC94ODYva3ZtL3g4Ni5oOjE1NDpcdGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlbGVhdmVfbmVzdGVkKHZjcHUpO1xuYXJjaC94ODYva3ZtL3g4Ni5oLTE1NS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MzUxCgkJCQkJCQlvdXRwdXQ6IDE1NQoJCQkJCQkJdGhvdWdodHM6IDE0NzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgS1ZNIE5lc3RlZCBWTVggUGF0Y2ggZm9yIEh5cGVyLVYgRW5saWdodGVuZWQgVk1DUyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaGVyZSYjMzk7cyBteSB0YWtlLiBJbml0aWFsbHksIEkgemVyb2VkIGluIG9uIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvZiBgbmVzdGVkLm9gIHdpdGggYEtWTV9JTlRFTGAgZW5hYmxlZCwgYW5kLCB3aGlsZSB0aGF0ICppcyogYSBrZXkgZmFjdG9yLCBpdCYjMzk7cyBub3QgdGhlIHdob2xlIHN0b3J5LiBMZXQmIzM5O3MgbWFrZSBzdXJlIHdlIGdldCBpdCByaWdodC4KCkkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSByaWdodCBjb25maWdzLiBJIHNlZSB0aGF0IHRoaXMgcGF0Y2ggbW9kaWZpZXMgYGhhbmRsZV92bXB0cmxkYCBhbmQgYGhhbmRsZV92bXB0cnN0YCwgd2hpY2ggYXJlIHVzZWQgd2hlbiB0aGVyZSYjMzk7cyBhbiBlbmxpZ2h0ZW5lZCBWTUNTIChlVk1DUykgcHJlc2VudCwgdHJpZ2dlcmVkIHdoZW4gYEtWTV9IWVBFUlZgIGlzIGVuYWJsZWQuIGBLVk1fSFlQRVJWYCB3aWxsIG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgYG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWRgIHRvIHJldHVybiB0cnVlLiBUaGlzIG1lYW5zIHRoYXQgYm90aCBgS1ZNX0lOVEVMYCBhbmQgYEtWTWAgYXJlIG5lZWRlZCBmb3IgYSB3b3JraW5nIEtWTSwgYW5kIG9mIGNvdXJzZSBgS1ZNX0hZUEVSVmAgZm9yIHRoZSBIeXBlci1WIHNwZWNpZmljIGNoYW5nZS4gTm93LCBsb29raW5nIGF0IHRoZSBjb25maWcgb3B0aW9ucywgYEtWTV9IWVBFUlZgIGlzIGEgYm9vbGVhbiwgd2hpbGUgYEtWTV9JTlRFTGAgYW5kIGBLVk1gIGFyZSB0cmlzdGF0ZSwgc28gdGhhdCYjMzk7cyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kLgoKRGlnZ2luZyBpbnRvIHRoZSBjaGFuZ2VzLCB0aGlzIHBhdGNoIHNwZWNpZmljYWxseSBhZGRyZXNzZXMgaG93IEtWTSBuZXN0ZWQgVk1YIGhhbmRsZXMgYFZNUFRSTERgIGFuZCBgVk1QVFJTVGAgaW5zdHJ1Y3Rpb25zIHdoZW4gSHlwZXItViYjMzk7cyBlbmxpZ2h0ZW5lZCBWTUNTIGlzIGluIHBsYXkuIFRoZSBrZXkgY2hhbmdlIGlzIHRoYXQsIHByZXZpb3VzbHksIGBWTVBUUkxEYCB3YXMgc2lsZW50bHkgaWdub3JlZCwgYW5kIGBWTVBUUlNUYCB3YXMgaWdub3JlZC4gTm93LCBgVk1QVFJMRGAgcXVldWVzIGEgI1VEIGV4Y2VwdGlvbiwgYW5kIGBWTVBUUlNUYCByZXR1cm5zIHRoZSBlVk1DUyBHUEEgaW5zdGVhZC4gVGhpcyBpcyBhIGJlaGF2aW9yYWwgY2hhbmdlIGluIEtWTSwgd2hpY2ggbXVzdCBiZSBmdXp6ZWQgZm9yIHN0YWJpbGl0eS4gSXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBsb2dpYy4gV2hpbGUgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdGF0aWMsIHRoZSBmYWN0IHRoYXQgdGhlaXIgYWRkcmVzc2VzIGFyZSB0YWtlbiBhbmQgcGxhY2VkIGluIGEgZnVuY3Rpb24gcG9pbnRlciBhcnJheSBtZWFucyB0aGF0IHRoZXNlIGFyZW4mIzM5O3QgaW5saW5lZCBhbmQgaGF2ZSB1bmlxdWUgc3ltYm9sIGFkZHJlc3Nlcy4gVGhleSBhcmUgbm90IHBlcmZvcm1hbmNlIHNlbnNpdGl2ZSwgYXMgdGhlIGZ1bmN0aW9ucyBoYW5kbGUgc3BlY2lmaWMgVk0gZXhpdHMsIHJlbGF0ZWQgdG8gdGhlc2Ugc3BlY2lmaWMgaW5zdHJ1Y3Rpb25zLCBzbyBpdCYjMzk7cyBub3Qgc29tZXRoaW5nIGluIGEgaG90IHBhdGguCgpJIGFsc28gY2hlY2tlZCB0byBzZWUgaWYgYW55IG90aGVyIGZ1bmN0aW9ucyB3ZXJlIG1vZGlmaWVkLiBUaGUgcGF0Y2ggZG9lcyBhZmZlY3Qgc29tZSBzZWxmdGVzdCBjb2RlLCBidXQgdGhvc2UgYXJlIGluIHRoZSB0b29scyBkaXJlY3RvcnksIG5vdCB0aGUga2VybmVsIGl0c2VsZiwgYW5kIHNvIGFyZSBub3QgaW1wb3J0YW50IHRvIHRoZSBrZXJuZWwuCgpUaGVyZWZvcmUsIGZvciBmdXp6aW5nLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHdlIG5lZWQgdG8gZW5hYmxlOgpgS1ZNYApgS1ZNX0lOVEVMYApgS1ZNX0hZUEVSVmAKYW5kIHNwZWNpZmljYWxseSB0YXJnZXQ6CmBoYW5kbGVfdm1wdHJsZGAKYGhhbmRsZV92bXB0cnN0YAoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7LAogICAgJiMzNDtLVk1fSFlQRVJWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aGFuZGxlX3ZtcHRybGQmIzM0OywKICAgICYjMzQ7aGFuZGxlX3ZtcHRyc3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJlaGF2aW9yIG9mIEtWTSBuZXN0ZWQgVk1YIHdoZW4gaGFuZGxpbmcgVk1QVFJMRCBhbmQgVk1QVFJTVCBpbnN0cnVjdGlvbnMgaW4gdGhlIHByZXNlbmNlIG9mIEh5cGVyLVYgZW5saWdodGVuZWQgVk1DUyAoZVZNQ1MpLiBTcGVjaWZpY2FsbHksIGl0IHF1ZXVlcyBhICNVRCBleGNlcHRpb24gaW5zdGVhZCBvZiBzaWxlbnRseSBpZ25vcmluZyBWTVBUUkxELCBhbmQgcmV0dXJucyB0aGUgZVZNQ1MgR1BBIGluc3RlYWQgb2YgaWdub3JpbmcgVk1QVFJTVC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIEtWTSBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0hZUEVSViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hhbmRsZV92bXB0cmxkJiMzNDssCiAgICAmIzM0O2hhbmRsZV92bXB0cnN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBiZWhhdmlvciBvZiBLVk0gbmVzdGVkIFZNWCB3aGVuIGhhbmRsaW5nIFZNUFRSTEQgYW5kIFZNUFRSU1QgaW5zdHJ1Y3Rpb25zIGluIHRoZSBwcmVzZW5jZSBvZiBIeXBlci1WIGVubGlnaHRlbmVkIFZNQ1MgKGVWTUNTKS4gU3BlY2lmaWNhbGx5LCBpdCBxdWV1ZXMgYSAjVUQgZXhjZXB0aW9uIGluc3RlYWQgb2Ygc2lsZW50bHkgaWdub3JpbmcgVk1QVFJMRCwgYW5kIHJldHVybnMgdGhlIGVWTUNTIEdQQSBpbnN0ZWFkIG9mIGlnbm9yaW5nIFZNUFRSU1QuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBLVk0gbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzoyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT45bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjI2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjltPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSYjMzk7cyBuZXN0ZWQgVk1YIGVtdWxhdGlvbiBmb3IgdGhlIFZNUFRSTEQgYW5kIFZNUFRSU1QgaW5zdHJ1Y3Rpb25zIHdoZW4gRW5saWdodGVuZWQgVk1DUyAoZVZNQ1MpIGlzIHVzZWQuIEluIGBoYW5kbGVfdm1wdHJzdGAsIGl0IGNoYW5nZXMgdGhlIGNvZGUgdG8gd3JpdGUgdGhlIGBodl9ldm1jc192bXB0cmAgKGEgNjQtYml0IGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MpIHRvIGd1ZXN0IG1lbW9yeSBpbnN0ZWFkIG9mIHNraXBwaW5nIHRoZSBpbnN0cnVjdGlvbi4gU2luY2UgYGh2X2V2bWNzX3ZtcHRyYCBpcyBhIGZ1bGx5IGluaXRpYWxpemVkIDY0LWJpdCBpbnRlZ2VyIChgZ3BhX3RgKSB3aXRob3V0IGFueSBwYWRkaW5nLCB3cml0aW5nIGl0IHRvIGd1ZXN0IG1lbW9yeSBkb2VzIG5vdCBsZWFrIGFueSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIFRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGBoYW5kbGVfdm1wdHJsZGAgdG8gcXVldWUgYSAjVUQgZXhjZXB0aW9uLCB3aGljaCBvbmx5IGFmZmVjdHMgY29udHJvbCBmbG93IGFuZCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBjb21wbGV4IHN0cnVjdHVyZXMsIG9yIHBhZGRpbmcgaW50cm9kdWNlZCB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBidWdzIGluIHRoaXMgYXJlYS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzQ4Y2FjZjA0MTkyNDYxYmQ3ZTk1NjU3NWYxZjdlN2ZmNDA5ZTRlMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDE0IDE3OjE4OjA1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMKaW5kZXggZGRmNmRmN2JlZTkzYi4uMGY1ZTRiNDdlY2IxOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jCkBAIC01ODc5LDYgJiM0Mzs1ODc5LDEyIEBAIHN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRybGQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCWlmICghbmVzdGVkX3ZteF9jaGVja19wZXJtaXNzaW9uKHZjcHUpKQogCQlyZXR1cm4gMTsKIAomIzQzOwkvKiBGb3JiaWQgbm9ybWFsIFZNUFRSTEQgaWYgRW5saWdodGVuZWQgdmVyc2lvbiB3YXMgdXNlZCAqLwomIzQzOwlpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKSB7CiYjNDM7CQlrdm1fcXVldWVfZXhjZXB0aW9uKHZjcHUsIFVEX1ZFQ1RPUik7CiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsJfQomIzQzOwogCWlmIChuZXN0ZWRfdm14X2dldF92bXB0cih2Y3B1LCAmYW1wO3ZtcHRyLCAmYW1wO3IpKQogCQlyZXR1cm4gcjsKIApAQCAtNTg4OCwxMCAmIzQzOzU4OTQsNiBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXB0cmxkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpZiAodm1wdHIgPT0gdm14LSZndDtuZXN0ZWQudm14b25fcHRyKQogCQlyZXR1cm4gbmVzdGVkX3ZteF9mYWlsKHZjcHUsIFZNWEVSUl9WTVBUUkxEX1ZNWE9OX1BPSU5URVIpOwogCi0JLyogRm9yYmlkIG5vcm1hbCBWTVBUUkxEIGlmIEVubGlnaHRlbmVkIHZlcnNpb24gd2FzIHVzZWQgKi8KLQlpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKQotCQlyZXR1cm4gMTsKLQogCWlmICh2bXgtJmd0O25lc3RlZC5jdXJyZW50X3ZtcHRyICE9IHZtcHRyKSB7CiAJCXN0cnVjdCBnZm5fdG9faHZhX2NhY2hlICpnaGMgPSAmYW1wO3ZteC0mZ3Q7bmVzdGVkLnZtY3MxMl9jYWNoZTsKIAkJc3RydWN0IHZtY3NfaGRyIGhkcjsKQEAgLTU5NDQsNyAmIzQzOzU5NDYsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXB0cnN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAl1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpOwogCXUzMiBpbnN0cl9pbmZvID0gdm1jc19yZWFkMzIoVk1YX0lOU1RSVUNUSU9OX0lORk8pOwotCWdwYV90IGN1cnJlbnRfdm1wdHIgPSB0b192bXgodmNwdSktJmd0O25lc3RlZC5jdXJyZW50X3ZtcHRyOwomIzQzOwlncGFfdCBjdXJyZW50X3ZtcHRyOwogCXN0cnVjdCB4ODZfZXhjZXB0aW9uIGU7CiAJZ3ZhX3QgZ3ZhOwogCWludCByOwpAQCAtNTk1Miw4ICYjNDM7NTk1NCwxNCBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXB0cnN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpZiAoIW5lc3RlZF92bXhfY2hlY2tfcGVybWlzc2lvbih2Y3B1KSkKIAkJcmV0dXJuIDE7CiAKLQlpZiAodW5saWtlbHkobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh0b192bXgodmNwdSkpKSkKLQkJcmV0dXJuIDE7CiYjNDM7CS8qCiYjNDM7CSAqIEh5cGVyLVYgVExGUyBkb2VzIG5vdCBzcGVjaWZ5IHRoZSBiZWhhdmlvciBvZiBWTVBUUlNUIHdoZW4gZVZNQ1MgaXMgdXNlZAomIzQzOwkgKiBidXQgZ2VudWluZSBIeXBlci1WIHNlZW1zIHRvIGJlIHJldHVybmluZyBlVk1DUyBHUEEuCiYjNDM7CSAqLwomIzQzOwlpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh0b192bXgodmNwdSkpKQomIzQzOwkJY3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS0mZ3Q7bmVzdGVkLmh2X2V2bWNzX3ZtcHRyOwomIzQzOwllbHNlCiYjNDM7CQljdXJyZW50X3ZtcHRyID0gdG9fdm14KHZjcHUpLSZndDtuZXN0ZWQuY3VycmVudF92bXB0cjsKIAogCWlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIGV4aXRfcXVhbCwgaW5zdHJfaW5mbywKIAkJCQl0cnVlLCBzaXplb2YoZ3BhX3QpLCAmYW1wO2d2YSkpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmgKaW5kZXggOTBmZmZhZjkxNTk1OC4uZTIxNzhhNjY4M2NhOSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaApAQCAtMzI1LDkgJiM0MzszMjUsNiBAQCBzdGF0aWMgaW5saW5lIGludCB2bXB0cmxkKHU2NCB2bWNzX3BhKQogewogCXU4IHJldDsKIAotCWlmIChlbmFibGVfZXZtY3MpCi0JCXJldHVybiAtMTsKLQogCV9fYXNtX18gX192b2xhdGlsZV9fICgmIzM0O3ZtcHRybGQgJVtwYV07IHNldG5hICVbcmV0XSYjMzQ7CiAJCTogW3JldF0mIzM0Oz1ybSYjMzQ7KHJldCkKIAkJOiBbcGFdJiMzNDttJiMzNDsodm1jc19wYSkKQEAgLTM0MSw5ICYjNDM7MzM4LDYgQEAgc3RhdGljIGlubGluZSBpbnQgdm1wdHJzdCh1NjQgKnZhbHVlKQogCXU2NCB0bXA7CiAJdTggcmV0OwogCi0JaWYgKGVuYWJsZV9ldm1jcykKLQkJcmV0dXJuIGV2bWNzX3ZtcHRyc3QodmFsdWUpOwotCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oJiMzNDt2bXB0cnN0ICVbdmFsdWVdOyBzZXRuYSAlW3JldF0mIzM0OwogCQk6IFt2YWx1ZV0mIzM0Oz1tJiMzNDsodG1wKSwgW3JldF0mIzM0Oz1ybSYjMzQ7KHJldCkKIAkJOiA6ICYjMzQ7Y2MmIzM0OywgJiMzNDttZW1vcnkmIzM0Oyk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl9ldm1jcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfZXZtY3MuYwppbmRleCBjN2ZhMTE0YWVlMjBmLi42YTZkOTQwYTc4OTE4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl9ldm1jcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X2V2bWNzLmMKQEAgLTE4LDEyICYjNDM7MTgsMTYgQEAKICNpbmNsdWRlICYjMzQ7aHlwZXJ2LmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2bXguaCYjMzQ7CiAKJiM0MzsjZGVmaW5lIFZNTEFVTkNIX0lOU05fU0laRSAzCiYjNDM7I2RlZmluZSBWTVBUUkxEX0lOU05fU0laRSA1CiYjNDM7CiBzdGF0aWMgaW50IHVkX2NvdW50OwomIzQzO3N0YXRpYyBpbnQgdWRfaW5zbl9za2lwX3NpemU7CiAKIHN0YXRpYyB2b2lkIGd1ZXN0X3VkX2hhbmRsZXIoc3RydWN0IGV4X3JlZ3MgKnJlZ3MpCiB7CiAJdWRfY291bnQmIzQzOyYjNDM7OwotCXJlZ3MtJmd0O3JpcCAmIzQzOz0gMzsgLyogVk1MQVVOQ0ggKi8KJiM0MzsJcmVncy0mZ3Q7cmlwICYjNDM7PSB1ZF9pbnNuX3NraXBfc2l6ZTsKIH0KIAogc3RhdGljIHZvaWQgZ3Vlc3Rfbm1pX2hhbmRsZXIoc3RydWN0IGV4X3JlZ3MgKnJlZ3MpCkBAIC05NSwxNiAmIzQzOzk5LDE1IEBAIHZvaWQgZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMsIHN0cnVjdCBoeXBlcnZfdGVzdF9wYWdlcyAqaHZfcGFnZXMsCiAJR1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKSk7CiAJR1VFU1RfU1lOQygzKTsKIAlHVUVTVF9BU1NFUlQobG9hZF9ldm1jcyhodl9wYWdlcykpOwotCUdVRVNUX0FTU0VSVCh2bXB0cnN0eigpID09IGh2X3BhZ2VzLSZndDtlbmxpZ2h0ZW5lZF92bWNzX2dwYSk7CiYjNDM7CS8qIFZNUFRSU1QgcmV0dXJucyAtMSB1bnRpbCBWTUxBVU5DSCB3aXRoIGVWTUNTIHB0ciBzZXQgKi8KJiM0MzsJR1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gLTEpOwogCiAJR1VFU1RfU1lOQyg0KTsKLQlHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSBodl9wYWdlcy0mZ3Q7ZW5saWdodGVuZWRfdm1jc19ncGEpOwogCiAJcHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSwKIAkJICAgICAmYW1wO2wyX2d1ZXN0X3N0YWNrW0wyX0dVRVNUX1NUQUNLX1NJWkVdKTsKIAogCUdVRVNUX1NZTkMoNSk7Ci0JR1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gaHZfcGFnZXMtJmd0O2VubGlnaHRlbmVkX3ZtY3NfZ3BhKTsKIAljdXJyZW50X2V2bWNzLSZndDtyZXZpc2lvbl9pZCA9IC0xdTsKIAlHVUVTVF9BU1NFUlQodm1sYXVuY2goKSk7CiAJY3VycmVudF9ldm1jcy0mZ3Q7cmV2aXNpb25faWQgPSBFVk1DU19WRVJTSU9OOwpAQCAtMTgzLDEwICYjNDM7MTg2LDE1IEBAIHZvaWQgZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMsIHN0cnVjdCBoeXBlcnZfdGVzdF9wYWdlcyAqaHZfcGFnZXMsCiAJR1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7CiAJR1VFU1RfU1lOQygxMSk7CiAKJiM0MzsJdWRfaW5zbl9za2lwX3NpemUgPSBWTVBUUkxEX0lOU05fU0laRTsKJiM0MzsJdm1wdHJsZChodl9wYWdlcy0mZ3Q7ZW5saWdodGVuZWRfdm1jc19ncGEpOwomIzQzOwlHVUVTVF9BU1NFUlQodWRfY291bnQgPT0gMSk7CiYjNDM7CiAJLyogVHJ5IGVubGlnaHRlbmVkIHZtcHRybGQgd2l0aCBhbiBpbmNvcnJlY3QgR1BBICovCiYjNDM7CXVkX2luc25fc2tpcF9zaXplID0gVk1MQVVOQ0hfSU5TTl9TSVpFOwogCWV2bWNzX3ZtcHRybGQoMHhkZWFkYmVlZiwgaHZfcGFnZXMtJmd0O2VubGlnaHRlbmVkX3ZtY3MpOwogCUdVRVNUX0FTU0VSVCh2bWxhdW5jaCgpKTsKLQlHVUVTVF9BU1NFUlQodWRfY291bnQgPT0gMSk7CiYjNDM7CUdVRVNUX0FTU0VSVCh1ZF9jb3VudCA9PSAyKTsKIAlHVUVTVF9ET05FKCk7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT43bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MjMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA2MDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEtWTSBOZXN0ZWQgVk1YIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcgS1ZNJiMzOTtzIG5lc3RlZCBWTVggaGFuZGxpbmcsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBoYW5kbGVfdm1wdHJsZGAgYW5kIGBoYW5kbGVfdm1wdHJzdGAgZnVuY3Rpb25zLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGVzZSBhcmUgbG93LWxldmVsIG9wZXJhdGlvbnMsIHNvIEkgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBpbXBsaWNhdGlvbnMuCgpJbiBgaGFuZGxlX3ZtcHRybGRgLCB0aGUgY29kZSBub3cgZG9lcyBzb21ldGhpbmcgaW50ZXJlc3Rpbmcgd2hlbiBgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpYCBpcyB0cnVlLiBCZWZvcmUsIGl0IHdvdWxkIGp1c3QgcmV0dXJuIDEsIHdoaWNoIGVmZmVjdGl2ZWx5IG1lYW50ICYjMzQ7ZG8gbm90aGluZyYjMzQ7IGluIHRoYXQgY2FzZS4gTm93LCBpdCBxdWV1ZXMgYSBVRCAoVW5kZWZpbmVkIEluc3RydWN0aW9uKSBleGNlcHRpb24uIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBjaGFuZ2UgaW4gYmVoYXZpb3IgYW5kIHN1Z2dlc3RzIHRoYXQgYW4gaW52YWxpZCBvcGVyYXRpb24gb3IgYSBtaXN1c2Ugb2YgYW4gZVZNQ1MgcG9pbnRlciBpcyBiZWluZyBkZXRlY3RlZC4gSXQmIzM5O3MgZ29vZCB0byBmb3JjZSB0aGUgZ3Vlc3QgdG8gaGFuZGxlIHRoZSBlcnJvciBwcm9wZXJseSwgcmF0aGVyIHRoYW4gc2lsZW50bHkgZmFpbGluZy4KCmBoYW5kbGVfdm1wdHJzdGAgaXMgbW9yZSBpbnZvbHZlZC4gUHJldmlvdXNseSwgaWYgYG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWRgIHdhcyB0cnVlLCB0aGUgZnVuY3Rpb24ganVzdCByZXR1cm5lZCAxLiBOb3csIGl0JiMzOTtzIGRpZmZlcmVudC4gSXQmIzM5O3MgY2hlY2tpbmcgaWYgdGhlIGVWTUNTIHBvaW50ZXIgaXMgdmFsaWQsIGFuZCBpZiBpdCBpcywgaXQgc2V0cyBgY3VycmVudF92bXB0cmAgdG8gYGh2X2V2bWNzX3ZtcHRyYC4gVGhpcyB2YWx1ZSBpcyB0aGVuIHdyaXR0ZW4gdG8gZ3Vlc3QgbWVtb3J5IHVzaW5nIGBrdm1fd3JpdGVfZ3Vlc3RfdmlydF9zeXN0ZW1gLiBUaGUgY29tbWVudCBtZW50aW9ucyBIeXBlci1WIGFuZCBpdHMgaGFuZGxpbmcsIG9yIGxhY2sgdGhlcmVvZiwgb2YgVk1QVFJTVCB3aXRoIGVWTUNTLiBOb3csIGBjdXJyZW50X3ZtcHRyYCBjb21lcyBmcm9tIGEgcGxhY2UgYGh2X2V2bWNzX3ZtcHRyYCB0aGF0IHRoZSBndWVzdCBwcm92aWRlZCBlYXJsaWVyIHRocm91Z2ggZVZNQ1MgcG9pbnRlciBsb2FkLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgYWJvdXQgcG90ZW50aWFsIHNlY3VyaXR5IGlzc3Vlcy4gSXMgdGhlcmUgYSBwb3NzaWJpbGl0eSBvZiBpbmZvcm1hdGlvbiBsZWFrYWdlPyBJcyBgaHZfZXZtY3Nfdm1wdHJgIGluaXRpYWxpemVkIHByb3Blcmx5LCBvciBjb3VsZCBpdCBjb250YWluIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwb3RlbnRpYWxseSBleHBvc2luZyBrZXJuZWwgZGF0YSB0byB0aGUgZ3Vlc3Q/IEhvd2V2ZXIsIGBodl9ldm1jc192bXB0cmAgaXMgYSBzaW1wbGUgYGdwYV90YCAoYSA2NC1iaXQgdmFsdWUgcmVwcmVzZW50aW5nIGEgR3Vlc3QgUGh5c2ljYWwgQWRkcmVzcyksIHNvIHRoYXQmIzM5O3MgZ29vZC4gSXQmIzM5O3MgYSBzaW5nbGUgdmFsdWUsIG5vdCBhIHN0cnVjdCB3aXRoIHBhZGRpbmcsIHNvIEkgZG9uJiMzOTt0IHNlZSBhbnkgb2J2aW91cyBsZWFrYWdlIHJpc2tzIHRoZXJlLiBVbmxlc3MgYGh2X2V2bWNzX3ZtcHRyYCBpdHNlbGYgaXMgdW5pbml0aWFsaXplZCwgSSB0aGluayB3ZSYjMzk7cmUgc2FmZS4gUmVnYXJkbGVzcywgc2luY2UgdGhlIGd1ZXN0IHByb3ZpZGVzIHRoaXMgR1BBLCB0aGUgZ3Vlc3Qgd291bGQgYmUgcHJvdmlkaW5nIHdoYXQgaXMgYmVpbmcgbGVha2VkIChpZiBhbnl0aGluZykuCgpJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIHRvIGNvbmZpcm0gaG93IGBodl9ldm1jc192bXB0cmAgaXMgaW5pdGlhbGl6ZWQgdG8gYmUgY29tcGxldGVseSBzdXJlLiBPdmVyYWxsLCB0aGlzIHBhdGNoIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIGhhcmRlbmluZyBvZiB0aGUgbmVzdGVkIFZNWCBpbXBsZW1lbnRhdGlvbiwgYnkgcHJvcGVybHkgaGFuZGxpbmcgaW52YWxpZCBwb2ludGVyIGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodl9ldm1jc192bXB0ciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oPTI1PXN0YXRpYyBpbmxpbmUgYm9vbCBuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHN0cnVjdCB2Y3B1X3ZteCAqdm14KVxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaC0yNi17XG5hcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oOjI3Olx0cmV0dXJuIGV2bXB0cl9pc192YWxpZCh2bXgtXHUwMDNlbmVzdGVkLmh2X2V2bWNzX3ZtcHRyKTtcbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmgtMjgtfVxuLS1cbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2Lmg9MzU9c3RhdGljIGlubGluZSBib29sIG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfc2V0KHN0cnVjdCB2Y3B1X3ZteCAqdm14KVxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaC0zNi17XG5hcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oOjM3Olx0cmV0dXJuIGV2bXB0cl9pc19zZXQodm14LVx1MDAzZW5lc3RlZC5odl9ldm1jc192bXB0cik7XG5hcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oLTM4LX1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTIzMz1zdGF0aWMgaW5saW5lIHZvaWQgbmVzdGVkX3JlbGVhc2VfZXZtY3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjQwLVx0dm14LVx1MDAzZW5lc3RlZC5odl9ldm1jcyA9IE5VTEw7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjI0MTpcdHZteC1cdTAwM2VuZXN0ZWQuaHZfZXZtY3Nfdm1wdHIgPSBFVk1QVFJfSU5WQUxJRDtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjQyLVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MjUxPXN0YXRpYyBib29sIG5lc3RlZF9ldm1jc19oYW5kbGVfdm1jbGVhcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IHZtcHRyKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjY4LVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoyNjk6XHRpZiAobmVzdGVkX3ZteF9ldm1jcyh2bXgpIFx1MDAyNlx1MDAyNiB2bXB0ciA9PSB2bXgtXHUwMDNlbmVzdGVkLmh2X2V2bWNzX3ZtcHRyKVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yNzAtXHRcdG5lc3RlZF9yZWxlYXNlX2V2bWNzKHZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MjE4ND1zdGF0aWMgZW51bSBuZXN0ZWRfZXZtcHRybGRfc3RhdHVzIG5lc3RlZF92bXhfaGFuZGxlX2VubGlnaHRlbmVkX3ZtcHRybGQoXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yMjAwLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoyMjAxOlx0aWYgKHVubGlrZWx5KGV2bWNzX2dwYSAhPSB2bXgtXHUwMDNlbmVzdGVkLmh2X2V2bWNzX3ZtcHRyKSkge1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yMjAyLVx0XHR2bXgtXHUwMDNlbmVzdGVkLmN1cnJlbnRfdm1wdHIgPSBJTlZBTElEX0dQQTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTIyMzktXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjIyNDA6XHRcdHZteC1cdTAwM2VuZXN0ZWQuaHZfZXZtY3Nfdm1wdHIgPSBldm1jc19ncGE7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTIyNDEtXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0zNDEzPXN0YXRpYyBib29sIG5lc3RlZF9nZXRfZXZtY3NfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNDIyLVx0aWYgKGd1ZXN0X2NwdV9jYXBfaGFzX2V2bWNzKHZjcHUpIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozNDIzOlx0ICAgIHZteC1cdTAwM2VuZXN0ZWQuaHZfZXZtY3Nfdm1wdHIgPT0gRVZNUFRSX01BUF9QRU5ESU5HKSB7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM0MjQtXHRcdGVudW0gbmVzdGVkX2V2bXB0cmxkX3N0YXR1cyBldm1wdHJsZF9zdGF0dXMgPVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTk0NT1zdGF0aWMgaW50IGhhbmRsZV92bXB0cnN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU5NjEtXHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh0b192bXgodmNwdSkpKVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1OTYyOlx0XHRjdXJyZW50X3ZtcHRyID0gdG9fdm14KHZjcHUpLVx1MDAzZW5lc3RlZC5odl9ldm1jc192bXB0cjtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTk2My1cdGVsc2Vcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTY3NTI9c3RhdGljIGludCB2bXhfZ2V0X25lc3RlZF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02NzgzLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo2Nzg0Olx0XHRcdC8qICYjMzk7aHZfZXZtY3Nfdm1wdHImIzM5OyBjYW4gYWxzbyBiZSBFVk1QVFJfTUFQX1BFTkRJTkcgaGVyZSAqL1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02Nzg1LVx0XHRcdGlmIChuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3NldCh2bXgpKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NjkwNj1zdGF0aWMgaW50IHZteF9zZXRfbmVzdGVkX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTcwMTAtXHRcdCAqL1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo3MDExOlx0XHR2bXgtXHUwMDNlbmVzdGVkLmh2X2V2bWNzX3ZtcHRyID0gRVZNUFRSX01BUF9QRU5ESU5HO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03MDEyLVx0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfR0VUX05FU1RFRF9TVEFURV9QQUdFUywgdmNwdSk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaD03OT1zdGF0aWMgaW5saW5lIGludCB2bXhfaGFzX3ZhbGlkX3ZtY3MxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaC04Mi1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmg6ODM6XHQvKiAmIzM5O2h2X2V2bWNzX3ZtcHRyJiMzOTsgY2FuIGFsc28gYmUgRVZNUFRSX01BUF9QRU5ESU5HIGhlcmUgKi9cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmgtODQtXHRyZXR1cm4gdm14LVx1MDAzZW5lc3RlZC5jdXJyZW50X3ZtcHRyICE9IC0xdWxsIHx8XG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYz00OTkxPXN0YXRpYyB2b2lkIF9fdm14X3ZjcHVfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNTAwNy0jaWZkZWYgQ09ORklHX0tWTV9IWVBFUlZcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NTAwODpcdHZteC1cdTAwM2VuZXN0ZWQuaHZfZXZtY3Nfdm1wdHIgPSBFVk1QVFJfSU5WQUxJRDtcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNTAwOS0jZW5kaWZcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5oPTczPXN0cnVjdCBuZXN0ZWRfdm14IHtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5oLTE5OS0jaWZkZWYgQ09ORklHX0tWTV9IWVBFUlZcbmFyY2gveDg2L2t2bS92bXgvdm14Lmg6MjAwOlx0Z3BhX3QgaHZfZXZtY3Nfdm1wdHI7XG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5oLTIwMS1cdHN0cnVjdCBrdm1faG9zdF9tYXAgaHZfZXZtY3NfbWFwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDI1CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgaGFuZGxlX3ZtcHRyc3RgIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBtb2RpZnlpbmcgYGhhbmRsZV92bXB0cnN0YC4gVGhlIGtleSBjaGFuZ2UgaXMgdGhhdCBpdCBub3cgcmV0dXJucyBgaHZfZXZtY3Nfdm1wdHJgIGluc3RlYWQgb2YganVzdCAxLiBQcmV2aW91c2x5LCByZXR1cm5pbmcgMSB3b3VsZCBlZmZlY3RpdmVseSBza2lwIHRoZSBpbnN0cnVjdGlvbiB3aXRob3V0IHdyaXRpbmcgYW55dGhpbmcgdG8gbWVtb3J5LiBOb3csIGl0JiMzOTtzIHdyaXRpbmcgc29tZXRoaW5nIOKAkyBhIGBncGFfdGAgc3BlY2lmaWNhbGx5LiBMZXQmIzM5O3MgdW5wYWNrIHRoaXMuCgpgaHZfZXZtY3Nfdm1wdHJgIGl0c2VsZiBpcyBpbml0aWFsaXplZCB0byBgRVZNUFRSX0lOVkFMSURgIGR1cmluZyBhIHZDUFUgcmVzZXQuIFRoZW4sIGl0JiMzOTtzIHVwZGF0ZWQgdG8gYGV2bWNzX2dwYWAsIHdoaWNoIGlzIGEgcGh5c2ljYWwgYWRkcmVzcyBwcm92aWRlZCBieSB0aGUgZ3Vlc3Qgd2hlbiB0aGUgZ3Vlc3QgZXhlY3V0ZXMgYW4gZW5saWdodGVuZWQgYFZNUFRSTERgIGluc3RydWN0aW9uLiBTbywgaXQmIzM5O3MgZXNzZW50aWFsbHkganVzdCBhIDY0LWJpdCBpbnRlZ2VyLCBhIGd1ZXN0LXByb3ZpZGVkIHBoeXNpY2FsIGFkZHJlc3MgdGhhdCB3ZSYjMzk7cmUgc3RvcmluZy4gQ3J1Y2lhbGx5LCBpdCYjMzk7cyAqbm90KiBzb21lIHVuaW5pdGlhbGl6ZWQga2VybmVsIHN0cnVjdHVyZSBiZWluZyBibGluZGx5IGNvcGllZC4gVGhhdCYjMzk7cyBnb29kLgoKVGhlcmVmb3JlLCB3aGVuIGBoYW5kbGVfdm1wdHJzdGAgd3JpdGVzIHRoaXMgdmFsdWUgdG8gZ3Vlc3QgbWVtb3J5IHVzaW5nIGBrdm1fd3JpdGVfZ3Vlc3RfdmlydF9zeXN0ZW1gIG9yIGEgc2ltaWxhciBmdW5jdGlvbiwgaXQmIzM5O3Mgbm90IGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBJdCYjMzk7cyBzaW1wbHkgd3JpdGluZyB0aGUgNjQtYml0IGludGVnZXIgdGhhdCB0aGUgZ3Vlc3QgKml0c2VsZiogcHJldmlvdXNseSBwcm92aWRlZC4gVGhpcyBzZWVtcyBzYWZlIGZyb20gYSBtZW1vcnkgbGVhayBwZXJzcGVjdGl2ZSwgYXMgdGhlICYjMzQ7c2VjcmV0JiMzNDsgKHRoZSBwaHlzaWNhbCBhZGRyZXNzKSBjb21lcyBmcm9tIHRoZSBndWVzdCYjMzk7cyBpbnB1dC4gVGhlIHZ1bG5lcmFiaWxpdHkgKGlmIGFueSkgaXMgaW4gdGhlIGd1ZXN0JiMzOTtzIGNvZGUuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBoYW5kbGVfdm1wdHJzdGAgaXRzZWxmIHdpdGhpbiBgYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY2AgYW5kIG1ha2Ugc3VyZSBteSBhc3N1bXB0aW9ucyBhcmUgdmFsaWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU5NDQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTk0NDpcdC8qIEVtdWxhdGUgdGhlIFZNUFRSU1QgaW5zdHJ1Y3Rpb24gKi9cbjU5NDU6XHRzdGF0aWMgaW50IGhhbmRsZV92bXB0cnN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbjU5NDY6XHR7XG41OTQ3Olx0XHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuNTk0ODpcdFx0dTMyIGluc3RyX2luZm8gPSB2bWNzX3JlYWQzMihWTVhfSU5TVFJVQ1RJT05fSU5GTyk7XG41OTQ5Olx0XHRncGFfdCBjdXJyZW50X3ZtcHRyO1xuNTk1MDpcdFx0c3RydWN0IHg4Nl9leGNlcHRpb24gZTtcbjU5NTE6XHRcdGd2YV90IGd2YTtcbjU5NTI6XHRcdGludCByO1xuNTk1MzpcdFxuNTk1NDpcdFx0aWYgKCFuZXN0ZWRfdm14X2NoZWNrX3Blcm1pc3Npb24odmNwdSkpXG41OTU1Olx0XHRcdHJldHVybiAxO1xuNTk1NjpcdFxuNTk1NzpcdFx0LypcbjU5NTg6XHRcdCAqIEh5cGVyLVYgVExGUyBkb2VzIG5vdCBzcGVjaWZ5IHRoZSBiZWhhdmlvciBvZiBWTVBUUlNUIHdoZW4gZVZNQ1MgaXMgdXNlZFxuNTk1OTpcdFx0ICogYnV0IGdlbnVpbmUgSHlwZXItViBzZWVtcyB0byBiZSByZXR1cm5pbmcgZVZNQ1MgR1BBLlxuNTk2MDpcdFx0ICovXG41OTYxOlx0XHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh0b192bXgodmNwdSkpKVxuNTk2MjpcdFx0XHRjdXJyZW50X3ZtcHRyID0gdG9fdm14KHZjcHUpLVx1MDAzZW5lc3RlZC5odl9ldm1jc192bXB0cjtcbjU5NjM6XHRcdGVsc2VcbjU5NjQ6XHRcdFx0Y3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS1cdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0cjtcbjU5NjU6XHRcbjU5NjY6XHRcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIGV4aXRfcXVhbCwgaW5zdHJfaW5mbyxcbjU5Njc6XHRcdFx0XHRcdHRydWUsIHNpemVvZihncGFfdCksIFx1MDAyNmd2YSkpXG41OTY4Olx0XHRcdHJldHVybiAxO1xuNTk2OTpcdFx0LyogKl9zeXN0ZW0gb2ssIG5lc3RlZF92bXhfY2hlY2tfcGVybWlzc2lvbiBoYXMgdmVyaWZpZWQgY3BsPTAgKi9cbjU5NzA6XHRcdHIgPSBrdm1fd3JpdGVfZ3Vlc3RfdmlydF9zeXN0ZW0odmNwdSwgZ3ZhLCAodm9pZCAqKVx1MDAyNmN1cnJlbnRfdm1wdHIsXG41OTcxOlx0XHRcdFx0XHRcdHNpemVvZihncGFfdCksIFx1MDAyNmUpO1xuNTk3MjpcdFx0aWYgKHIgIT0gWDg2RU1VTF9DT05USU5VRSlcbjU5NzM6XHRcdFx0cmV0dXJuIGt2bV9oYW5kbGVfbWVtb3J5X2ZhaWx1cmUodmNwdSwgciwgXHUwMDI2ZSk7XG41OTc0Olx0XG41OTc1Olx0XHRyZXR1cm4gbmVzdGVkX3ZteF9zdWNjZWVkKHZjcHUpO1xuNTk3NjpcdH1cbjU5Nzc6XHRcbjU5Nzg6XHQvKiBFbXVsYXRlIHRoZSBJTlZFUFQgaW5zdHJ1Y3Rpb24gKi9cbjU5Nzk6XHRzdGF0aWMgaW50IGhhbmRsZV9pbnZlcHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuNTk4MDpcdHtcbjU5ODE6XHRcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xuNTk4MjpcdFx0dTMyIHZteF9pbnN0cnVjdGlvbl9pbmZvLCB0eXBlcztcbjU5ODM6XHRcdHVuc2lnbmVkIGxvbmcgdHlwZSwgcm9vdHNfdG9fZnJlZTtcbjU5ODQ6XHRcdHN0cnVjdCBrdm1fbW11ICptbXU7XG41OTg1Olx0XHRndmFfdCBndmE7XG41OTg2Olx0XHRzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBlO1xuNTk4NzpcdFx0c3RydWN0IHtcbjU5ODg6XHRcdFx0dTY0IGVwdHAsIGdwYTtcbjU5ODk6XHRcdH0gb3BlcmFuZDtcbjU5OTA6XHRcdGludCBpLCByLCBncHJfaW5kZXg7XG41OTkxOlx0XG41OTkyOlx0XHRpZiAoISh2bXgtXHUwMDNlbmVzdGVkLm1zcnMuc2Vjb25kYXJ5X2N0bHNfaGlnaCBcdTAwMjZcbjU5OTM6XHRcdCAgICAgIFNFQ09OREFSWV9FWEVDX0VOQUJMRV9FUFQpIHx8XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1MjAKCQkJCQkJCW91dHB1dDogMjI0CgkJCQkJCQl0aG91Z2h0czogMzcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBOZXN0ZWQgVk1YIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZnJvbSBhIG1lbW9yeSBzYWZldHkgcGVyc3BlY3RpdmUuIEkmIzM5O3ZlIHJldmlld2VkIHRoaXMgS1ZNIHBhdGNoLCBhbmQgaGVyZSYjMzk7cyBteSB0YWtlOiB0aGUga2V5IG1vZGlmaWNhdGlvbiBpcyByZWxhdGVkIHRvIHRoZSBWTVBUUkxEIGFuZCBWTVBUUlNUIGluc3RydWN0aW9ucyB3aXRoaW4gdGhlIG5lc3RlZCBWTVggZW11bGF0aW9uLCBzcGVjaWZpY2FsbHkgd2hlbiBlVk1DUyBpcyBhY3RpdmUuCgpGaXJzdCwgSSBzZWUgdGhhdCBgY3VycmVudF92bXB0cmAg4oCTIHdoaWNoIGlzIGEgYGdwYV90YCwgYSBzdHJhaWdodCA2NC1iaXQgdW5zaWduZWQgaW50ZWdlciByZXByZXNlbnRpbmcgYSBHdWVzdCBQaHlzaWNhbCBBZGRyZXNzIOKAkyBpcyBiZWluZyB3cml0dGVuIHRvIGd1ZXN0IG1lbW9yeSB1c2luZyBga3ZtX3dyaXRlX2d1ZXN0X3ZpcnRfc3lzdGVtYC4gQ3JpdGljYWxseSwgdGhpcyBgZ3BhX3RgIGlzICpmdWxseSogaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZSB3cml0ZSBhbmQgaXQgaGFzIG5vIGludGVybmFsIHBhZGRpbmcuIFRoaXMgbWVhbnMgd2UmIzM5O3JlIG5vdCBkZWFsaW5nIHdpdGggYSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGNodW5rIG9mIG1lbW9yeSBiZWluZyBsZWFrZWQuIFRoZSBgaWYvZWxzZWAgYmxvY2sgY2xlYXJseSBoYW5kbGVzIHRoZSBpbml0aWFsaXphdGlvbi4gTm8gbWVtb3J5IGxlYWtzIGhlcmUuCgpTZWNvbmQsIHRoZSBwYXRjaCBtb2RpZmllcyBgaGFuZGxlX3ZtcHRybGRgIHRvIHF1ZXVlIGEgI1VEIGV4Y2VwdGlvbiBpbnN0ZWFkIG9mIGp1c3QgcmV0dXJuaW5nLiBUaGlzIGNoYW5nZSBpbiBjb250cm9sIGZsb3cgZG9lc24mIzM5O3QgdG91Y2ggYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGF0IGFsbCwgYW5kIHRoYXQgcGFydCBpcyBzaW1wbGUgZW5vdWdoLgoKVGhlIHJlbWFpbmRlciBvZiB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgc29sZWx5IGZvY3VzZWQgb24gc2VsZnRlc3RzLiBGcm9tIHRoZSBkZXNjcmlwdGlvbiwgSSBkb24mIzM5O3Qgc2VlIGFueXRoaW5nIHN1c3BpY2lvdXMgdGhlcmUsIGVpdGhlci4KCkluIGVzc2VuY2UsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyAqbmV3KiBhdmVudWVzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mb3JtYXRpb24gbGVha3MuIFdlJiMzOTtyZSBqdXN0IGFsdGVyaW5nIHRoZSBiZWhhdmlvciBvZiB0aG9zZSB0d28gVk1YIGluc3RydWN0aW9ucy4gU3RhbmRhcmQgS0FTQU4gc2hvdWxkIGhhbmRsZSBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgaW4gdGhlIG1vZGlmaWVkIGNvZGUuCgpUaGVyZWZvcmUsIGdpdmVuIG15IHVuZGVyc3RhbmRpbmcsIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLiBUaGlzIGxvb2tzIHNhZmUgZnJvbSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBwZXJzcGVjdGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNJiMzOTtzIG5lc3RlZCBWTVggZW11bGF0aW9uIGZvciB0aGUgVk1QVFJMRCBhbmQgVk1QVFJTVCBpbnN0cnVjdGlvbnMgd2hlbiBFbmxpZ2h0ZW5lZCBWTUNTIChlVk1DUykgaXMgdXNlZC4gSW4gYGhhbmRsZV92bXB0cnN0YCwgaXQgY2hhbmdlcyB0aGUgY29kZSB0byB3cml0ZSB0aGUgYGh2X2V2bWNzX3ZtcHRyYCAoYSA2NC1iaXQgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzcykgdG8gZ3Vlc3QgbWVtb3J5IGluc3RlYWQgb2Ygc2tpcHBpbmcgdGhlIGluc3RydWN0aW9uLiBTaW5jZSBgaHZfZXZtY3Nfdm1wdHJgIGlzIGEgZnVsbHkgaW5pdGlhbGl6ZWQgNjQtYml0IGludGVnZXIgKGBncGFfdGApIHdpdGhvdXQgYW55IHBhZGRpbmcsIHdyaXRpbmcgaXQgdG8gZ3Vlc3QgbWVtb3J5IGRvZXMgbm90IGxlYWsgYW55IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gVGhlIHBhdGNoIGFsc28gbW9kaWZpZXMgYGhhbmRsZV92bXB0cmxkYCB0byBxdWV1ZSBhICNVRCBleGNlcHRpb24sIHdoaWNoIG9ubHkgYWZmZWN0cyBjb250cm9sIGZsb3cgYW5kIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIGNvbXBsZXggc3RydWN0dXJlcywgb3IgcGFkZGluZyBpbnRyb2R1Y2VkIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgaW4gdGhpcyBhcmVhLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNJiMzOTtzIG5lc3RlZCBWTVggZW11bGF0aW9uIGZvciB0aGUgVk1QVFJMRCBhbmQgVk1QVFJTVCBpbnN0cnVjdGlvbnMgd2hlbiBFbmxpZ2h0ZW5lZCBWTUNTIChlVk1DUykgaXMgdXNlZC4gSW4gYGhhbmRsZV92bXB0cnN0YCwgaXQgY2hhbmdlcyB0aGUgY29kZSB0byB3cml0ZSB0aGUgYGh2X2V2bWNzX3ZtcHRyYCAoYSA2NC1iaXQgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzcykgdG8gZ3Vlc3QgbWVtb3J5IGluc3RlYWQgb2Ygc2tpcHBpbmcgdGhlIGluc3RydWN0aW9uLiBTaW5jZSBgaHZfZXZtY3Nfdm1wdHJgIGlzIGEgZnVsbHkgaW5pdGlhbGl6ZWQgNjQtYml0IGludGVnZXIgKGBncGFfdGApIHdpdGhvdXQgYW55IHBhZGRpbmcsIHdyaXRpbmcgaXQgdG8gZ3Vlc3QgbWVtb3J5IGRvZXMgbm90IGxlYWsgYW55IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gVGhlIHBhdGNoIGFsc28gbW9kaWZpZXMgYGhhbmRsZV92bXB0cmxkYCB0byBxdWV1ZSBhICNVRCBleGNlcHRpb24sIHdoaWNoIG9ubHkgYWZmZWN0cyBjb250cm9sIGZsb3cgYW5kIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIGNvbXBsZXggc3RydWN0dXJlcywgb3IgcGFkZGluZyBpbnRyb2R1Y2VkIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgaW4gdGhpcyBhcmVhLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzoxODowNy4zMTM0MzM0ODFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDcyNTcxNDE1Mjk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fSFlQRVJWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaGFuZGxlX3ZtcHRybGRcIixcbiAgICBcImhhbmRsZV92bXB0cnN0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0ncyBuZXN0ZWQgVk1YIGVtdWxhdGlvbiBmb3IgdGhlIFZNUFRSTEQgYW5kIFZNUFRSU1QgaW5zdHJ1Y3Rpb25zIHdoZW4gRW5saWdodGVuZWQgVk1DUyAoZVZNQ1MpIGlzIHVzZWQuIEluIGBoYW5kbGVfdm1wdHJzdGAsIGl0IGNoYW5nZXMgdGhlIGNvZGUgdG8gd3JpdGUgdGhlIGBodl9ldm1jc192bXB0cmAgKGEgNjQtYml0IGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MpIHRvIGd1ZXN0IG1lbW9yeSBpbnN0ZWFkIG9mIHNraXBwaW5nIHRoZSBpbnN0cnVjdGlvbi4gU2luY2UgYGh2X2V2bWNzX3ZtcHRyYCBpcyBhIGZ1bGx5IGluaXRpYWxpemVkIDY0LWJpdCBpbnRlZ2VyIChgZ3BhX3RgKSB3aXRob3V0IGFueSBwYWRkaW5nLCB3cml0aW5nIGl0IHRvIGd1ZXN0IG1lbW9yeSBkb2VzIG5vdCBsZWFrIGFueSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIFRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGBoYW5kbGVfdm1wdHJsZGAgdG8gcXVldWUgYSAjVUQgZXhjZXB0aW9uLCB3aGljaCBvbmx5IGFmZmVjdHMgY29udHJvbCBmbG93IGFuZCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBjb21wbGV4IHN0cnVjdHVyZXMsIG9yIHBhZGRpbmcgaW50cm9kdWNlZCB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBidWdzIGluIHRoaXMgYXJlYS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgS1ZNIG5lc3RlZCBWTVggd2hlbiBoYW5kbGluZyBWTVBUUkxEIGFuZCBWTVBUUlNUIGluc3RydWN0aW9ucyBpbiB0aGUgcHJlc2VuY2Ugb2YgSHlwZXItViBlbmxpZ2h0ZW5lZCBWTUNTIChlVk1DUykuIFNwZWNpZmljYWxseSwgaXQgcXVldWVzIGEgI1VEIGV4Y2VwdGlvbiBpbnN0ZWFkIG9mIHNpbGVudGx5IGlnbm9yaW5nIFZNUFRSTEQsIGFuZCByZXR1cm5zIHRoZSBlVk1DUyBHUEEgaW5zdGVhZCBvZiBpZ25vcmluZyBWTVBUUlNULiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgS1ZNIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6MTg6MDcuMzEzNDQxNTUxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM5NDE3MDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzQ4Y2FjZjA0MTkyNDYxYmQ3ZTk1NjU3NWYxZjdlN2ZmNDA5ZTRlM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyAxNCAxNzoxODowNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xcbmluZGV4IGRkZjZkZjdiZWU5M2IuLjBmNWU0YjQ3ZWNiMTkgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcXG5AQCAtNTg3OSw2ICs1ODc5LDEyIEBAIHN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRybGQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRpZiAoIW5lc3RlZF92bXhfY2hlY2tfcGVybWlzc2lvbih2Y3B1KSlcXG4gXFx0XFx0cmV0dXJuIDE7XFxuIFxcbitcXHQvKiBGb3JiaWQgbm9ybWFsIFZNUFRSTEQgaWYgRW5saWdodGVuZWQgdmVyc2lvbiB3YXMgdXNlZCAqL1xcbitcXHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKSB7XFxuK1xcdFxcdGt2bV9xdWV1ZV9leGNlcHRpb24odmNwdSwgVURfVkVDVE9SKTtcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChuZXN0ZWRfdm14X2dldF92bXB0cih2Y3B1LCBcXHUwMDI2dm1wdHIsIFxcdTAwMjZyKSlcXG4gXFx0XFx0cmV0dXJuIHI7XFxuIFxcbkBAIC01ODg4LDEwICs1ODk0LDYgQEAgc3RhdGljIGludCBoYW5kbGVfdm1wdHJsZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdGlmICh2bXB0ciA9PSB2bXgtXFx1MDAzZW5lc3RlZC52bXhvbl9wdHIpXFxuIFxcdFxcdHJldHVybiBuZXN0ZWRfdm14X2ZhaWwodmNwdSwgVk1YRVJSX1ZNUFRSTERfVk1YT05fUE9JTlRFUik7XFxuIFxcbi1cXHQvKiBGb3JiaWQgbm9ybWFsIFZNUFRSTEQgaWYgRW5saWdodGVuZWQgdmVyc2lvbiB3YXMgdXNlZCAqL1xcbi1cXHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKVxcbi1cXHRcXHRyZXR1cm4gMTtcXG4tXFxuIFxcdGlmICh2bXgtXFx1MDAzZW5lc3RlZC5jdXJyZW50X3ZtcHRyICE9IHZtcHRyKSB7XFxuIFxcdFxcdHN0cnVjdCBnZm5fdG9faHZhX2NhY2hlICpnaGMgPSBcXHUwMDI2dm14LVxcdTAwM2VuZXN0ZWQudm1jczEyX2NhY2hlO1xcbiBcXHRcXHRzdHJ1Y3Qgdm1jc19oZHIgaGRyO1xcbkBAIC01OTQ0LDcgKzU5NDYsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXB0cnN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xcbiBcXHR1MzIgaW5zdHJfaW5mbyA9IHZtY3NfcmVhZDMyKFZNWF9JTlNUUlVDVElPTl9JTkZPKTtcXG4tXFx0Z3BhX3QgY3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS1cXHUwMDNlbmVzdGVkLmN1cnJlbnRfdm1wdHI7XFxuK1xcdGdwYV90IGN1cnJlbnRfdm1wdHI7XFxuIFxcdHN0cnVjdCB4ODZfZXhjZXB0aW9uIGU7XFxuIFxcdGd2YV90IGd2YTtcXG4gXFx0aW50IHI7XFxuQEAgLTU5NTIsOCArNTk1NCwxNCBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXB0cnN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0aWYgKCFuZXN0ZWRfdm14X2NoZWNrX3Blcm1pc3Npb24odmNwdSkpXFxuIFxcdFxcdHJldHVybiAxO1xcbiBcXG4tXFx0aWYgKHVubGlrZWx5KG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodG9fdm14KHZjcHUpKSkpXFxuLVxcdFxcdHJldHVybiAxO1xcbitcXHQvKlxcbitcXHQgKiBIeXBlci1WIFRMRlMgZG9lcyBub3Qgc3BlY2lmeSB0aGUgYmVoYXZpb3Igb2YgVk1QVFJTVCB3aGVuIGVWTUNTIGlzIHVzZWRcXG4rXFx0ICogYnV0IGdlbnVpbmUgSHlwZXItViBzZWVtcyB0byBiZSByZXR1cm5pbmcgZVZNQ1MgR1BBLlxcbitcXHQgKi9cXG4rXFx0aWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodG9fdm14KHZjcHUpKSlcXG4rXFx0XFx0Y3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS1cXHUwMDNlbmVzdGVkLmh2X2V2bWNzX3ZtcHRyO1xcbitcXHRlbHNlXFxuK1xcdFxcdGN1cnJlbnRfdm1wdHIgPSB0b192bXgodmNwdSktXFx1MDAzZW5lc3RlZC5jdXJyZW50X3ZtcHRyO1xcbiBcXG4gXFx0aWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgZXhpdF9xdWFsLCBpbnN0cl9pbmZvLFxcbiBcXHRcXHRcXHRcXHR0cnVlLCBzaXplb2YoZ3BhX3QpLCBcXHUwMDI2Z3ZhKSlcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oXFxuaW5kZXggOTBmZmZhZjkxNTk1OC4uZTIxNzhhNjY4M2NhOSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmhcXG5AQCAtMzI1LDkgKzMyNSw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IHZtcHRybGQodTY0IHZtY3NfcGEpXFxuIHtcXG4gXFx0dTggcmV0O1xcbiBcXG4tXFx0aWYgKGVuYWJsZV9ldm1jcylcXG4tXFx0XFx0cmV0dXJuIC0xO1xcbi1cXG4gXFx0X19hc21fXyBfX3ZvbGF0aWxlX18gKFxcXCJ2bXB0cmxkICVbcGFdOyBzZXRuYSAlW3JldF1cXFwiXFxuIFxcdFxcdDogW3JldF1cXFwiPXJtXFxcIihyZXQpXFxuIFxcdFxcdDogW3BhXVxcXCJtXFxcIih2bWNzX3BhKVxcbkBAIC0zNDEsOSArMzM4LDYgQEAgc3RhdGljIGlubGluZSBpbnQgdm1wdHJzdCh1NjQgKnZhbHVlKVxcbiBcXHR1NjQgdG1wO1xcbiBcXHR1OCByZXQ7XFxuIFxcbi1cXHRpZiAoZW5hYmxlX2V2bWNzKVxcbi1cXHRcXHRyZXR1cm4gZXZtY3Nfdm1wdHJzdCh2YWx1ZSk7XFxuLVxcbiBcXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcXFwidm1wdHJzdCAlW3ZhbHVlXTsgc2V0bmEgJVtyZXRdXFxcIlxcbiBcXHRcXHQ6IFt2YWx1ZV1cXFwiPW1cXFwiKHRtcCksIFtyZXRdXFxcIj1ybVxcXCIocmV0KVxcbiBcXHRcXHQ6IDogXFxcImNjXFxcIiwgXFxcIm1lbW9yeVxcXCIpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl9ldm1jcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfZXZtY3MuY1xcbmluZGV4IGM3ZmExMTRhZWUyMGYuLjZhNmQ5NDBhNzg5MTggMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfZXZtY3MuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X2V2bWNzLmNcXG5AQCAtMTgsMTIgKzE4LDE2IEBAXFxuICNpbmNsdWRlIFxcXCJoeXBlcnYuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInZteC5oXFxcIlxcbiBcXG4rI2RlZmluZSBWTUxBVU5DSF9JTlNOX1NJWkUgM1xcbisjZGVmaW5lIFZNUFRSTERfSU5TTl9TSVpFIDVcXG4rXFxuIHN0YXRpYyBpbnQgdWRfY291bnQ7XFxuK3N0YXRpYyBpbnQgdWRfaW5zbl9za2lwX3NpemU7XFxuIFxcbiBzdGF0aWMgdm9pZCBndWVzdF91ZF9oYW5kbGVyKHN0cnVjdCBleF9yZWdzICpyZWdzKVxcbiB7XFxuIFxcdHVkX2NvdW50Kys7XFxuLVxcdHJlZ3MtXFx1MDAzZXJpcCArPSAzOyAvKiBWTUxBVU5DSCAqL1xcbitcXHRyZWdzLVxcdTAwM2VyaXAgKz0gdWRfaW5zbl9za2lwX3NpemU7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGd1ZXN0X25taV9oYW5kbGVyKHN0cnVjdCBleF9yZWdzICpyZWdzKVxcbkBAIC05NSwxNiArOTksMTUgQEAgdm9pZCBndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcywgc3RydWN0IGh5cGVydl90ZXN0X3BhZ2VzICpodl9wYWdlcyxcXG4gXFx0R1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKSk7XFxuIFxcdEdVRVNUX1NZTkMoMyk7XFxuIFxcdEdVRVNUX0FTU0VSVChsb2FkX2V2bWNzKGh2X3BhZ2VzKSk7XFxuLVxcdEdVRVNUX0FTU0VSVCh2bXB0cnN0eigpID09IGh2X3BhZ2VzLVxcdTAwM2VlbmxpZ2h0ZW5lZF92bWNzX2dwYSk7XFxuK1xcdC8qIFZNUFRSU1QgcmV0dXJucyAtMSB1bnRpbCBWTUxBVU5DSCB3aXRoIGVWTUNTIHB0ciBzZXQgKi9cXG4rXFx0R1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gLTEpO1xcbiBcXG4gXFx0R1VFU1RfU1lOQyg0KTtcXG4tXFx0R1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gaHZfcGFnZXMtXFx1MDAzZWVubGlnaHRlbmVkX3ZtY3NfZ3BhKTtcXG4gXFxuIFxcdHByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUsXFxuIFxcdFxcdCAgICAgXFx1MDAyNmwyX2d1ZXN0X3N0YWNrW0wyX0dVRVNUX1NUQUNLX1NJWkVdKTtcXG4gXFxuIFxcdEdVRVNUX1NZTkMoNSk7XFxuLVxcdEdVRVNUX0FTU0VSVCh2bXB0cnN0eigpID09IGh2X3BhZ2VzLVxcdTAwM2VlbmxpZ2h0ZW5lZF92bWNzX2dwYSk7XFxuIFxcdGN1cnJlbnRfZXZtY3MtXFx1MDAzZXJldmlzaW9uX2lkID0gLTF1O1xcbiBcXHRHVUVTVF9BU1NFUlQodm1sYXVuY2goKSk7XFxuIFxcdGN1cnJlbnRfZXZtY3MtXFx1MDAzZXJldmlzaW9uX2lkID0gRVZNQ1NfVkVSU0lPTjtcXG5AQCAtMTgzLDEwICsxODYsMTUgQEAgdm9pZCBndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcywgc3RydWN0IGh5cGVydl90ZXN0X3BhZ2VzICpodl9wYWdlcyxcXG4gXFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7XFxuIFxcdEdVRVNUX1NZTkMoMTEpO1xcbiBcXG4rXFx0dWRfaW5zbl9za2lwX3NpemUgPSBWTVBUUkxEX0lOU05fU0laRTtcXG4rXFx0dm1wdHJsZChodl9wYWdlcy1cXHUwMDNlZW5saWdodGVuZWRfdm1jc19ncGEpO1xcbitcXHRHVUVTVF9BU1NFUlQodWRfY291bnQgPT0gMSk7XFxuK1xcbiBcXHQvKiBUcnkgZW5saWdodGVuZWQgdm1wdHJsZCB3aXRoIGFuIGluY29ycmVjdCBHUEEgKi9cXG4rXFx0dWRfaW5zbl9za2lwX3NpemUgPSBWTUxBVU5DSF9JTlNOX1NJWkU7XFxuIFxcdGV2bWNzX3ZtcHRybGQoMHhkZWFkYmVlZiwgaHZfcGFnZXMtXFx1MDAzZWVubGlnaHRlbmVkX3ZtY3MpO1xcbiBcXHRHVUVTVF9BU1NFUlQodm1sYXVuY2goKSk7XFxuLVxcdEdVRVNUX0FTU0VSVCh1ZF9jb3VudCA9PSAxKTtcXG4rXFx0R1VFU1RfQVNTRVJUKHVkX2NvdW50ID09IDIpO1xcbiBcXHRHVUVTVF9ET05FKCk7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE3OjE4OjA4Ljk1MzQ1NDUxOVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQ5OTU2NjE1NTgzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0hZUEVSVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhhbmRsZV92bXB0cmxkXCIsXG4gICAgXCJoYW5kbGVfdm1wdHJzdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBiZWhhdmlvciBvZiBLVk0gbmVzdGVkIFZNWCB3aGVuIGhhbmRsaW5nIFZNUFRSTEQgYW5kIFZNUFRSU1QgaW5zdHJ1Y3Rpb25zIGluIHRoZSBwcmVzZW5jZSBvZiBIeXBlci1WIGVubGlnaHRlbmVkIFZNQ1MgKGVWTUNTKS4gU3BlY2lmaWNhbGx5LCBpdCBxdWV1ZXMgYSAjVUQgZXhjZXB0aW9uIGluc3RlYWQgb2Ygc2lsZW50bHkgaWdub3JpbmcgVk1QVFJMRCwgYW5kIHJldHVybnMgdGhlIGVWTUNTIEdQQSBpbnN0ZWFkIG9mIGlnbm9yaW5nIFZNUFRSU1QuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBLVk0gbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzNDhjYWNmMDQxOTI0NjFiZDdlOTU2NTc1ZjFmN2U3ZmY0MDllNGUzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMTQgMTc6MTg6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xuaW5kZXggZGRmNmRmN2JlZTkzYi4uMGY1ZTRiNDdlY2IxOSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbkBAIC01ODc5LDYgKzU4NzksMTIgQEAgc3RhdGljIGludCBoYW5kbGVfdm1wdHJsZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAoIW5lc3RlZF92bXhfY2hlY2tfcGVybWlzc2lvbih2Y3B1KSlcbiBcdFx0cmV0dXJuIDE7XG4gXG4rXHQvKiBGb3JiaWQgbm9ybWFsIFZNUFRSTEQgaWYgRW5saWdodGVuZWQgdmVyc2lvbiB3YXMgdXNlZCAqL1xuK1x0aWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSkge1xuK1x0XHRrdm1fcXVldWVfZXhjZXB0aW9uKHZjcHUsIFVEX1ZFQ1RPUik7XG4rXHRcdHJldHVybiAxO1xuK1x0fVxuK1xuIFx0aWYgKG5lc3RlZF92bXhfZ2V0X3ZtcHRyKHZjcHUsIFx1MDAyNnZtcHRyLCBcdTAwMjZyKSlcbiBcdFx0cmV0dXJuIHI7XG4gXG5AQCAtNTg4OCwxMCArNTg5NCw2IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRybGQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKHZtcHRyID09IHZteC1cdTAwM2VuZXN0ZWQudm14b25fcHRyKVxuIFx0XHRyZXR1cm4gbmVzdGVkX3ZteF9mYWlsKHZjcHUsIFZNWEVSUl9WTVBUUkxEX1ZNWE9OX1BPSU5URVIpO1xuIFxuLVx0LyogRm9yYmlkIG5vcm1hbCBWTVBUUkxEIGlmIEVubGlnaHRlbmVkIHZlcnNpb24gd2FzIHVzZWQgKi9cbi1cdGlmIChuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkpXG4tXHRcdHJldHVybiAxO1xuLVxuIFx0aWYgKHZteC1cdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0ciAhPSB2bXB0cikge1xuIFx0XHRzdHJ1Y3QgZ2ZuX3RvX2h2YV9jYWNoZSAqZ2hjID0gXHUwMDI2dm14LVx1MDAzZW5lc3RlZC52bWNzMTJfY2FjaGU7XG4gXHRcdHN0cnVjdCB2bWNzX2hkciBoZHI7XG5AQCAtNTk0NCw3ICs1OTQ2LDcgQEAgc3RhdGljIGludCBoYW5kbGVfdm1wdHJzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBleGl0X3F1YWwgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdHUzMiBpbnN0cl9pbmZvID0gdm1jc19yZWFkMzIoVk1YX0lOU1RSVUNUSU9OX0lORk8pO1xuLVx0Z3BhX3QgY3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS1cdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0cjtcbitcdGdwYV90IGN1cnJlbnRfdm1wdHI7XG4gXHRzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBlO1xuIFx0Z3ZhX3QgZ3ZhO1xuIFx0aW50IHI7XG5AQCAtNTk1Miw4ICs1OTU0LDE0IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRyc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKCFuZXN0ZWRfdm14X2NoZWNrX3Blcm1pc3Npb24odmNwdSkpXG4gXHRcdHJldHVybiAxO1xuIFxuLVx0aWYgKHVubGlrZWx5KG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodG9fdm14KHZjcHUpKSkpXG4tXHRcdHJldHVybiAxO1xuK1x0LypcbitcdCAqIEh5cGVyLVYgVExGUyBkb2VzIG5vdCBzcGVjaWZ5IHRoZSBiZWhhdmlvciBvZiBWTVBUUlNUIHdoZW4gZVZNQ1MgaXMgdXNlZFxuK1x0ICogYnV0IGdlbnVpbmUgSHlwZXItViBzZWVtcyB0byBiZSByZXR1cm5pbmcgZVZNQ1MgR1BBLlxuK1x0ICovXG4rXHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh0b192bXgodmNwdSkpKVxuK1x0XHRjdXJyZW50X3ZtcHRyID0gdG9fdm14KHZjcHUpLVx1MDAzZW5lc3RlZC5odl9ldm1jc192bXB0cjtcbitcdGVsc2VcbitcdFx0Y3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS1cdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0cjtcbiBcbiBcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIGV4aXRfcXVhbCwgaW5zdHJfaW5mbyxcbiBcdFx0XHRcdHRydWUsIHNpemVvZihncGFfdCksIFx1MDAyNmd2YSkpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oXG5pbmRleCA5MGZmZmFmOTE1OTU4Li5lMjE3OGE2NjgzY2E5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmhcbkBAIC0zMjUsOSArMzI1LDYgQEAgc3RhdGljIGlubGluZSBpbnQgdm1wdHJsZCh1NjQgdm1jc19wYSlcbiB7XG4gXHR1OCByZXQ7XG4gXG4tXHRpZiAoZW5hYmxlX2V2bWNzKVxuLVx0XHRyZXR1cm4gLTE7XG4tXG4gXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyAoXCJ2bXB0cmxkICVbcGFdOyBzZXRuYSAlW3JldF1cIlxuIFx0XHQ6IFtyZXRdXCI9cm1cIihyZXQpXG4gXHRcdDogW3BhXVwibVwiKHZtY3NfcGEpXG5AQCAtMzQxLDkgKzMzOCw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IHZtcHRyc3QodTY0ICp2YWx1ZSlcbiBcdHU2NCB0bXA7XG4gXHR1OCByZXQ7XG4gXG4tXHRpZiAoZW5hYmxlX2V2bWNzKVxuLVx0XHRyZXR1cm4gZXZtY3Nfdm1wdHJzdCh2YWx1ZSk7XG4tXG4gXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcInZtcHRyc3QgJVt2YWx1ZV07IHNldG5hICVbcmV0XVwiXG4gXHRcdDogW3ZhbHVlXVwiPW1cIih0bXApLCBbcmV0XVwiPXJtXCIocmV0KVxuIFx0XHQ6IDogXCJjY1wiLCBcIm1lbW9yeVwiKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl9ldm1jcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfZXZtY3MuY1xuaW5kZXggYzdmYTExNGFlZTIwZi4uNmE2ZDk0MGE3ODkxOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X2V2bWNzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X2V2bWNzLmNcbkBAIC0xOCwxMiArMTgsMTYgQEBcbiAjaW5jbHVkZSBcImh5cGVydi5oXCJcbiAjaW5jbHVkZSBcInZteC5oXCJcbiBcbisjZGVmaW5lIFZNTEFVTkNIX0lOU05fU0laRSAzXG4rI2RlZmluZSBWTVBUUkxEX0lOU05fU0laRSA1XG4rXG4gc3RhdGljIGludCB1ZF9jb3VudDtcbitzdGF0aWMgaW50IHVkX2luc25fc2tpcF9zaXplO1xuIFxuIHN0YXRpYyB2b2lkIGd1ZXN0X3VkX2hhbmRsZXIoc3RydWN0IGV4X3JlZ3MgKnJlZ3MpXG4ge1xuIFx0dWRfY291bnQrKztcbi1cdHJlZ3MtXHUwMDNlcmlwICs9IDM7IC8qIFZNTEFVTkNIICovXG4rXHRyZWdzLVx1MDAzZXJpcCArPSB1ZF9pbnNuX3NraXBfc2l6ZTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZ3Vlc3Rfbm1pX2hhbmRsZXIoc3RydWN0IGV4X3JlZ3MgKnJlZ3MpXG5AQCAtOTUsMTYgKzk5LDE1IEBAIHZvaWQgZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMsIHN0cnVjdCBoeXBlcnZfdGVzdF9wYWdlcyAqaHZfcGFnZXMsXG4gXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTtcbiBcdEdVRVNUX1NZTkMoMyk7XG4gXHRHVUVTVF9BU1NFUlQobG9hZF9ldm1jcyhodl9wYWdlcykpO1xuLVx0R1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gaHZfcGFnZXMtXHUwMDNlZW5saWdodGVuZWRfdm1jc19ncGEpO1xuK1x0LyogVk1QVFJTVCByZXR1cm5zIC0xIHVudGlsIFZNTEFVTkNIIHdpdGggZVZNQ1MgcHRyIHNldCAqL1xuK1x0R1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gLTEpO1xuIFxuIFx0R1VFU1RfU1lOQyg0KTtcbi1cdEdVRVNUX0FTU0VSVCh2bXB0cnN0eigpID09IGh2X3BhZ2VzLVx1MDAzZWVubGlnaHRlbmVkX3ZtY3NfZ3BhKTtcbiBcbiBcdHByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUsXG4gXHRcdCAgICAgXHUwMDI2bDJfZ3Vlc3Rfc3RhY2tbTDJfR1VFU1RfU1RBQ0tfU0laRV0pO1xuIFxuIFx0R1VFU1RfU1lOQyg1KTtcbi1cdEdVRVNUX0FTU0VSVCh2bXB0cnN0eigpID09IGh2X3BhZ2VzLVx1MDAzZWVubGlnaHRlbmVkX3ZtY3NfZ3BhKTtcbiBcdGN1cnJlbnRfZXZtY3MtXHUwMDNlcmV2aXNpb25faWQgPSAtMXU7XG4gXHRHVUVTVF9BU1NFUlQodm1sYXVuY2goKSk7XG4gXHRjdXJyZW50X2V2bWNzLVx1MDAzZXJldmlzaW9uX2lkID0gRVZNQ1NfVkVSU0lPTjtcbkBAIC0xODMsMTAgKzE4NiwxNSBAQCB2b2lkIGd1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzLCBzdHJ1Y3QgaHlwZXJ2X3Rlc3RfcGFnZXMgKmh2X3BhZ2VzLFxuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7XG4gXHRHVUVTVF9TWU5DKDExKTtcbiBcbitcdHVkX2luc25fc2tpcF9zaXplID0gVk1QVFJMRF9JTlNOX1NJWkU7XG4rXHR2bXB0cmxkKGh2X3BhZ2VzLVx1MDAzZWVubGlnaHRlbmVkX3ZtY3NfZ3BhKTtcbitcdEdVRVNUX0FTU0VSVCh1ZF9jb3VudCA9PSAxKTtcbitcbiBcdC8qIFRyeSBlbmxpZ2h0ZW5lZCB2bXB0cmxkIHdpdGggYW4gaW5jb3JyZWN0IEdQQSAqL1xuK1x0dWRfaW5zbl9za2lwX3NpemUgPSBWTUxBVU5DSF9JTlNOX1NJWkU7XG4gXHRldm1jc192bXB0cmxkKDB4ZGVhZGJlZWYsIGh2X3BhZ2VzLVx1MDAzZWVubGlnaHRlbmVkX3ZtY3MpO1xuIFx0R1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpO1xuLVx0R1VFU1RfQVNTRVJUKHVkX2NvdW50ID09IDEpO1xuK1x0R1VFU1RfQVNTRVJUKHVkX2NvdW50ID09IDIpO1xuIFx0R1VFU1RfRE9ORSgpO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE3OjE4OjA4Ljk1MzQ1NTkzOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMjU1NDY5MjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS1ZNIE5lc3RlZCBWTVggUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBLVk0gbmVzdGVkIFZNWCwgc3BlY2lmaWNhbGx5IGNoYW5nZXMgdG8gYGFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNgLiAgSXQncyB0b3VjaGluZyBgaGFuZGxlX3ZtcHRybGRgIGFuZCBgaGFuZGxlX3ZtcHRyc3RgLCB3aGljaCBhcmUga2V5IGJlY2F1c2UgdGhleSBkZWFsIHdpdGggbG9hZGluZyBhbmQgc3RvcmluZyB0aGUgVk1DUyBwb2ludGVyLiBUaGlzIGlzIGludGVyZXN0aW5nIGJlY2F1c2Ugd2UncmUgdGFsa2luZyBhYm91dCBuZXN0ZWQgVk1YLCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVsYXRlZCB0byBIeXBlci1WJ3MgZW5saWdodGVuZWQgVk1DUywgb3IgZVZNQ1MuIFRoYXQgaW1tZWRpYXRlbHkgZ3JhYnMgbXkgYXR0ZW50aW9uIOKAkyB0aGlzIGlzIHJpcGUgZm9yIGZ1enppbmcuXG5cblNwZWNpZmljYWxseSwgd2l0aCBgaGFuZGxlX3ZtcHRybGRgLCBiZWZvcmUsIGlmIHRoZSBlbmxpZ2h0ZW5lZCB2ZXJzaW9uIHdhcyB1c2VkLCBpdCB3b3VsZCBqdXN0IHJldHVybiAxLiAgUmlnaHQsIGFuZCByZXR1cm5pbmcgMSBmcm9tIGEgaGFuZGxlIGZ1bmN0aW9uIGluIEtWTSB0eXBpY2FsbHkgbWVhbnMgaXQgaGFuZGxlZCB0aGUgZXhpdCwgYnV0IHRoZSBpbnN0cnVjdGlvbiBzaG91bGQgbm90IGJlIGFkdmFuY2VkLiBTbyBpdCB3b3VsZCBzcGluLCByaWdodD8gTm8sIGBuZXN0ZWRfdm14X2ZhaWxgIHJldHVybnMgMSwgYnV0IHNldHMgUkZMQUdTLiBOb3csIGhvd2V2ZXIsIHRoZSBwYXRjaCBub3cgcXVldWVzIGEgVUQgKEludmFsaWQgT3Bjb2RlKSBleGNlcHRpb24uIFRoaXMgaXMgYSBzaWduaWZpY2FudCBiZWhhdmlvcmFsIHNoaWZ0LiAgQmVmb3JlLCBpdCBtaWdodCBoYXZlIGJlZW4gYW4gaW5maW5pdGUgbG9vcCBvciBhIHNpbGVudCBmYWlsdXJlICh3aGljaCBpcyB3b3JzZSkuICBOb3cgaXQgd2lsbCBnZW5lcmF0ZSBhbiBleGNlcHRpb24uXG5cbkFuZCBsb29raW5nIGF0IGBoYW5kbGVfdm1wdHJzdGAsIGl0J3MgdGhlIHNhbWUgcGF0dGVybi4gUHJldmlvdXNseSwgaXQganVzdCByZXR1cm5lZCAxIGlmIGVWTUNTIHdhcyBpbiB1c2UsIGVmZmVjdGl2ZWx5IGlnbm9yaW5nIHRoZSBpbnN0cnVjdGlvbi4gIE5vdywgaXQgYWN0dWFsbHkgcmV0dXJucyB0aGUgZVZNQ1MgR1BBIChHdWVzdCBQaHlzaWNhbCBBZGRyZXNzKSwgd2hpY2ggYWxpZ25zIHdpdGggdGhlIGJlaGF2aW9yIG9mIEh5cGVyLVYuIEl0IHNheXMgdGhhdCBcIkh5cGVyLVYgVExGUyBkb2VzIG5vdCBzcGVjaWZ5IHRoZSBiZWhhdmlvciBvZiBWTVBUUlNUIHdoZW4gZVZNQ1MgaXMgdXNlZFwiLiAgU28sIHRoZXkncmUgbWFraW5nIGl0IEh5cGVyLVYgY29tcGxpYW50LlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYmVjYXVzZSBpdCBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgaG93IFZNUFRSTEQgYW5kIFZNUFRSU1QgYXJlIGhhbmRsZWQgaW4gbmVzdGVkIFZNWCB3aGVuIGVWTUNTIGlzIHVzZWQuIFNvLCB0aGUgcGF0Y2ggaXMgY2hhbmdpbmcgYmVoYXZpb3Igd2hpY2ggbWFrZXMgaXQgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy5cblxuTGV0J3MgcXVpY2tseSBpZGVudGlmeSB0aGUgcHJpbWFyeSBlbnRyeXBvaW50cy4gIEl0IGFwcGVhcnMgdGhleSBhcmUgYGhhbmRsZV92bXB0cmxkYCBhbmQgYGhhbmRsZV92bXB0cnN0YC4gTm93LCBhcmUgdGhleSBzdGF0aWM/IFllcywgdGhleSBhcmUgaW4gdGhlIGZpbGUuIERhbW4sIGl0IHNheXMgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyEgV2VsbCwgbGV0J3MgdHJhY2Ugd2hlcmUgdGhlc2UgYXJlIGNhbGxlZCBpbiBgYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY2AgdG8gc2VlIGhvdyB3ZSBjYW4gZXhwbG9pdCB0aGlzIGNoYW5nZS4gV2UgY2FuIHN0aWxsIHNlZSBob3cgdGhleSBhcmUgY2FsbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTI2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODExLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6MTg6MjAuMjA4OTI4OTYzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5Mzg4MDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhhbmRsZV92bXB0cmxkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS92bXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTg1OT1zdGF0aWMgdm9pZCBzZXRfY3VycmVudF92bXB0cihzdHJ1Y3QgdmNwdV92bXggKnZteCwgZ3BhX3Qgdm1wdHIpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU4NzItLyogRW11bGF0ZSB0aGUgVk1QVFJMRCBpbnN0cnVjdGlvbiAqL1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTg3MzpzdGF0aWMgaW50IGhhbmRsZV92bXB0cmxkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU4NzQte1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz03NDIzPV9faW5pdCBpbnQgbmVzdGVkX3ZteF9oYXJkd2FyZV9zZXR1cChpbnQgKCpleGl0X2hhbmRsZXJzW10pKHN0cnVjdCBrdm1fdmNwdSAqKSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzQ1NS1cXHRleGl0X2hhbmRsZXJzW0VYSVRfUkVBU09OX1ZNTEFVTkNIXVxcdD0gaGFuZGxlX3ZtbGF1bmNoO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NzQ1NjpcXHRleGl0X2hhbmRsZXJzW0VYSVRfUkVBU09OX1ZNUFRSTERdXFx0PSBoYW5kbGVfdm1wdHJsZDtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTc0NTctXFx0ZXhpdF9oYW5kbGVyc1tFWElUX1JFQVNPTl9WTVBUUlNUXVxcdD0gaGFuZGxlX3ZtcHRyc3Q7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTQ3NDQ9c3RhdGljIHUzMiB2bXhfc2Vjb25kYXJ5X2V4ZWNfY29udHJvbChzdHJ1Y3QgdmNwdV92bXggKnZteClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNDc4My1cXHQvKiBTRUNPTkRBUllfRVhFQ19TSEFET1dfVk1DUyBpcyBlbmFibGVkIHdoZW4gTDEgZXhlY3V0ZXMgVk1QVFJMRFxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NDc4NDpcXHQgICAoaGFuZGxlX3ZtcHRybGQpLlxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNDc4NS1cXHQgICBXZSBjYW4gTk9UIGVuYWJsZSBzaGFkb3dfdm1jcyBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSB5ZXRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6MTg6MjAuMjY4MzIwNjkyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjA4MDg4ODU0NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFeGl0IEhhbmRsZXIgTWVjaGFuaXNtKipcblxuT2theSwgc28gdGhlc2UgaGFuZGxlcnMgYXJlIGRlZmluaXRlbHkgc2l0dGluZyBpbiB0aGUgYGV4aXRfaGFuZGxlcnNgIGFycmF5LiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoZXkncmUgaW52b2tlZCB0aHJvdWdoIGZ1bmN0aW9uIHBvaW50ZXJzIOKAkyBub3QgaW5saW5lZCwgd2hpY2ggaGFzIGludGVyZXN0aW5nIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gSSdsbCBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gSSBzdGFydCBsb29raW5nIGF0IHRoZSBiaWdnZXIgcGljdHVyZS4gSG9sZCBvbuKApiBgbmVzdGVkX3ZteF9oYXJkd2FyZV9zZXR1cGAgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdGhlc2UgaGFuZGxlcnMgdXAsIHJpZ2h0PyBUaGF0J3Mgd2hlcmUgdGhleSdyZSBiZWluZyBwb3B1bGF0ZWQgaW50byBgZXhpdF9oYW5kbGVyc2AuIEFscmlnaHQsIHRpbWUgdG8gdHJhY2UgZG93biB0aGUgZGVmaW5pdGlvbiBhbmQgdXNhZ2Ugb2YgYGV4aXRfaGFuZGxlcnNgIGl0c2VsZi4gTmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbnRleHQgb2YgaG93IHRoaXMgYXJyYXkgaXMgYmVpbmcgdXNlZC4gV2hlcmUgaXMgaXQgZGVjbGFyZWQ/IFdoZXJlIGVsc2UgaXMgaXQgYWNjZXNzZWQgYW5kIG1vZGlmaWVkPyBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBmcmFtZXdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4MTgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzoxODo0MS4wNzcyMDkxNzRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg3MTEzMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmVzdGVkX3ZteF9oYXJkd2FyZV9zZXR1cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vdm14L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTc0MTM9dm9pZCBuZXN0ZWRfdm14X2hhcmR3YXJlX3Vuc2V0dXAodm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzQyMi1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjc0MjM6X19pbml0IGludCBuZXN0ZWRfdm14X2hhcmR3YXJlX3NldHVwKGludCAoKmV4aXRfaGFuZGxlcnNbXSkoc3RydWN0IGt2bV92Y3B1ICopKVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzQyNC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oPTIyPXZvaWQgbmVzdGVkX3ZteF9oYXJkd2FyZV91bnNldHVwKHZvaWQpO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmg6MjM6X19pbml0IGludCBuZXN0ZWRfdm14X2hhcmR3YXJlX3NldHVwKGludCAoKmV4aXRfaGFuZGxlcnNbXSkoc3RydWN0IGt2bV92Y3B1ICopKTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oLTI0LXZvaWQgbmVzdGVkX3ZteF9zZXRfdm1jc19zaGFkb3dpbmdfYml0bWFwKHZvaWQpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYz02MjE3PXN0YXRpYyBpbnQgaGFuZGxlX3ByZWVtcHRpb25fdGltZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy02MjMwLSAqIFdoZW4gbmVzdGVkPTAsIGFsbCBWTVggaW5zdHJ1Y3Rpb24gVk0gRXhpdHMgZmlsdGVyIGhlcmUuICBUaGUgaGFuZGxlcnNcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjYyMzE6ICogYXJlIG92ZXJ3cml0dGVuIGJ5IG5lc3RlZF92bXhfaGFyZHdhcmVfc2V0dXAoKSB3aGVuIG5lc3RlZD0xLlxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjIzMi0gKi9cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM9ODU4OD1fX2luaXQgaW50IHZteF9oYXJkd2FyZV9zZXR1cCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy04NzY4LVxcdGlmIChuZXN0ZWQpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjg3Njk6XFx0XFx0ciA9IG5lc3RlZF92bXhfaGFyZHdhcmVfc2V0dXAoa3ZtX3ZteF9leGl0X2hhbmRsZXJzKTtcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTg3NzAtXFx0XFx0aWYgKHIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE3OjE4OjQxLjE2NTkyNDc2M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNzgxNDM5MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTS9IeXBlci1WIENvZGUgZm9yIFN5bWJvbCBTZWxlY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBga3ZtX3ZteF9leGl0X2hhbmRsZXJzYCBhbmQgc3BlY2lmaWNhbGx5IGBoYW5kbGVfdm1wdHJsZGAgYW5kIGBoYW5kbGVfdm1wdHJzdGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZXNlIGZ1bmN0aW9uIHBvaW50ZXJzLCBhdCBmaXJzdCBnbGFuY2UsIGFyZSBnb29kIGNhbmRpZGF0ZXMgYXMgZm9jdXMgc3ltYm9scywgc2luY2UgdGhleSdyZSAqZGVmaW5pdGVseSogbm90IGlubGluZWQuIEFoYSwgYnV0IHdhaXQsIEkganVzdCBjYXVnaHQgbXlzZWxmLi4uIHRoZXkncmUgKnN0YXRpYyouIE5vdywgdGhlIHByb21wdCBzcGVjaWZpY2FsbHkgc2FpZCB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGF0IG1ha2VzIG1lIHBhdXNlIGZvciBhIHNlY29uZC5cblxuSG93ZXZlciwgc2luY2UgdGhlaXIgYWRkcmVzc2VzIGFyZSB0YWtlbiwgZGVzcGl0ZSBiZWluZyBzdGF0aWMsIHRoZXkgKndvbid0KiBiZSBpbmxpbmVkLiBUaGF0IG1lYW5zIHRoZXkgd2lsbCwgaW4gZmFjdCwgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLCBhbmQgY2FuIHN0aWxsIGJlIHVzZWQuIFdlIGNvdWxkIGxvb2sgYXQgYWx0ZXJuYXRpdmVzIGxpa2UgYG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWRgLCBvciBtYXliZSB0aGUgb3ZlcmFyY2hpbmcgZXhpdCBoYW5kbGVyIGB2bXhfaGFuZGxlX2V4aXRgLCBidXQgSSdtIGhlc2l0YW50IG9uIGB2bXhfaGFuZGxlX2V4aXRgIOKAkyBpdCdzIGEgaG90LXBhdGggZnVuY3Rpb24sIHNvIGxpa2VseSB0b28gZ2VuZXJpYy5cblxuU28sIGxldCdzIGNvbmZpcm0uIGBoYW5kbGVfdm1wdHJsZGAgYW5kIGBoYW5kbGVfdm1wdHJzdGAuLi4geWVwLCB0aGV5J3JlIHRoZSBleGFjdCBmdW5jdGlvbnMgdGhhdCBhcmUgYmVpbmcgbW9kaWZpZWQuIFRoYXQgc2V0dGxlcyBpdCBmb3Igbm93LiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZm9yIGJvdGggS1ZNIGFuZCBIeXBlci1WIHNldHRpbmdzIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nJ3MgY29ycmVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY0MywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzoxODo0Ni4yNDQwNzIzOTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4MTY2Njc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XFxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUzLVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo2OTpjb25maWcgS1ZNX1dFUlJPUlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVxcdGJvb2wgXFxcIkNvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcXFwiQ2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0lPQVBJQ1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3My1cXHRib29sIFxcXCJJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODI6Y29uZmlnIEtWTV9TTU1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODMtXFx0Ym9vbCBcXFwiU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTkzOmNvbmZpZyBLVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDgtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE2OmNvbmZpZyBLVk1fUFJPVkVfTU1VXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE3LVxcdGJvb2wgXFxcIlByb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzAtXFx0Ym9vbFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzI6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzMtXFx0aW50IFxcXCJNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzoxODo0Ni4zNTIyNDMzMjRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTgyNjYwMzQxNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBNdXNpbmdzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgZm9yIHRoaXMgdmlydHVhbGl6YXRpb24gc2V0dXAuIEl0J3MgbG9va2luZyBsaWtlIGBLVk1gIGFuZCBgS1ZNX0lOVEVMYCBhcmUgZGVmaW5pdGVseSBrZXksIGdpdmVuIHdlJ3JlIGRlYWxpbmcgd2l0aCBWTVgsIHNvIHRoYXQncyBhIGdpdmVuLiBOb3csIEkgaGF2ZSBhIGh1bmNoIHRoYXQgYEtWTV9IWVBFUlZgIG1pZ2h0IGJlIGluIHRoZSBtaXgsIHNwZWNpZmljYWxseSBiZWNhdXNlIG9mIHRoZSBuYW1lIG9mIHRoYXQgZnVuY3Rpb24gd2UncmUgbG9va2luZyBhdCwgYG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWRgLiBUaGF0IGtpbmQgb2YgaGludHMgYXQgSHlwZXItViBlbXVsYXRpb24gYmVpbmcgaW52b2x2ZWQuIExldCBtZSBkb3VibGUtY2hlY2sgdGhlIGltcGxpY2F0aW9ucyBvZiBoYXZpbmcgdGhhdCBLVk0gSHlwZXItViBmbGFnIGVuYWJsZWQsIGFuZCB3aGV0aGVyIGl0J3MgcmVsZXZhbnQgdG8gdGhlIGN1cnJlbnQgc2NlbmFyaW8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0MjYsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzoyNToyNC42MTgyODA5MDdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4MjAxMDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oPTIwPXN0YXRpYyBpbmxpbmUgYm9vbCBldm1wdHJfaXNfdmFsaWQodTY0IGV2bXB0cilcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmgtMjQtXFxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaDoyNTpzdGF0aWMgaW5saW5lIGJvb2wgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZChzdHJ1Y3QgdmNwdV92bXggKnZteClcXG5hcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oLTI2LXtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2Lmg9NjQ9c3RhdGljIGlubGluZSBib29sIGV2bXB0cl9pc192YWxpZCh1NjQgZXZtcHRyKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaC02OC1cXG5hcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oOjY5OnN0YXRpYyBpbmxpbmUgYm9vbCBuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHN0cnVjdCB2Y3B1X3ZteCAqdm14KVxcbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmgtNzAte1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0xOTQ9c3RhdGljIGludCBuZXN0ZWRfdm14X2ZhaWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdm1faW5zdHJ1Y3Rpb25fZXJyb3IpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTIwMi1cXHRpZiAodm14LVxcdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0ciA9PSBJTlZBTElEX0dQQSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MjAzOlxcdCAgICAhbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjA0LVxcdFxcdHJldHVybiBuZXN0ZWRfdm14X2ZhaWxJbnZhbGlkKHZjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0yMjc0PXZvaWQgbmVzdGVkX3N5bmNfdm1jczEyX3RvX3NoYWRvdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTIyNzctXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoyMjc4OlxcdGlmIChuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkpXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yMjc5LVxcdFxcdGNvcHlfdm1jczEyX3RvX2VubGlnaHRlbmVkKHZteCk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTI0MzE9c3RhdGljIHZvaWQgcHJlcGFyZV92bWNzMDJfZWFybHkoc3RydWN0IHZjcHVfdm14ICp2bXgsIHN0cnVjdCBsb2FkZWRfdm1jcyAqdm1jczAxLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yNDM2LVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MjQzNzpcXHRpZiAodm14LVxcdTAwM2VuZXN0ZWQuZGlydHlfdm1jczEyIHx8IG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSlcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTI0MzgtXFx0XFx0cHJlcGFyZV92bWNzMDJfZWFybHlfcmFyZSh2bXgsIHZtY3MxMik7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTI3NjA9c3RhdGljIGludCBwcmVwYXJlX3ZtY3MwMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2bWNzMTIgKnZtY3MxMixcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjc2Ny1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjI3Njg6XFx0aWYgKHZteC1cXHUwMDNlbmVzdGVkLmRpcnR5X3ZtY3MxMiB8fCBuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTI3NjktXFx0XFx0cHJlcGFyZV92bWNzMDJfcmFyZSh2bXgsIHZtY3MxMik7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTI3NzEtXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoyNzcyOlxcdFxcdGxvYWRfZ3Vlc3RfcGRwdHJzX3ZtY3MxMiA9ICFuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkgfHxcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTI3NzMtXFx0XFx0XFx0IShldm1jcy1cXHUwMDNlaHZfY2xlYW5fZmllbGRzIFxcdTAwMjYgSFZfVk1YX0VOTElHSFRFTkVEX0NMRUFOX0ZJRUxEX0dVRVNUX0dSUDEpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yOTAxLVxcdCAqL1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MjkwMjpcXHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjkwMy1cXHRcXHRldm1jcy1cXHUwMDNlaHZfY2xlYW5fZmllbGRzIHw9IEhWX1ZNWF9FTkxJR0hURU5FRF9DTEVBTl9GSUVMRF9BTEw7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTM2Mjk9ZW51bSBudm14X3ZtZW50cnlfc3RhdHVzIG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM3NzQtXFx0dm1jczEyLVxcdTAwM2V2bV9leGl0X3JlYXNvbiA9IGV4aXRfcmVhc29uLmZ1bGw7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozNzc1OlxcdGlmIChlbmFibGVfc2hhZG93X3ZtY3MgfHwgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzc3Ni1cXHRcXHR2bXgtXFx1MDAzZW5lc3RlZC5uZWVkX3ZtY3MxMl90b19zaGFkb3dfc3luYyA9IHRydWU7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTM3ODQ9c3RhdGljIGludCBuZXN0ZWRfdm14X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbGF1bmNoKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zODA1LVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MzgwNjpcXHRpZiAoQ0MoIW5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzgwNy1cXHQgICAgICAgdm14LVxcdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0ciA9PSBJTlZBTElEX0dQQSkpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM4MjAtXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozODIxOlxcdGlmIChuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM4MjItXFx0XFx0c3RydWN0IGh2X2VubGlnaHRlbmVkX3ZtY3MgKmV2bWNzID0gbmVzdGVkX3ZteF9ldm1jcyh2bXgpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz00NjQzPXN0YXRpYyB2b2lkIHN5bmNfdm1jczAyX3RvX3ZtY3MxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2bWNzMTIgKnZtY3MxMilcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNDY0Ni1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjQ2NDc6XFx0aWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSlcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQ2NDgtXFx0XFx0c3luY192bWNzMDJfdG9fdm1jczEyX3JhcmUodmNwdSwgdm1jczEyKTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNDY1MC1cXHR2bXgtXFx1MDAzZW5lc3RlZC5uZWVkX3N5bmNfdm1jczAyX3RvX3ZtY3MxMl9yYXJlID1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjQ2NTE6XFx0XFx0IW5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQ2NTItXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTUwNjM9dm9pZCBfX25lc3RlZF92bXhfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZtX2V4aXRfcmVhc29uLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01MTY5LVxcdGlmICgodm1fZXhpdF9yZWFzb24gIT0gLTEpIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1MTcwOlxcdCAgICAoZW5hYmxlX3NoYWRvd192bWNzIHx8IG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSkpXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01MTcxLVxcdFxcdHZteC1cXHUwMDNlbmVzdGVkLm5lZWRfdm1jczEyX3RvX3NoYWRvd19zeW5jID0gdHJ1ZTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTY0Nj1zdGF0aWMgaW50IGhhbmRsZV92bXJlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01NjY1LVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTY2NjpcXHRpZiAoIW5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSkge1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTY2Ny1cXHRcXHQvKlxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz01ODczPXN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRybGQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01ODgyLVxcdC8qIEZvcmJpZCBub3JtYWwgVk1QVFJMRCBpZiBFbmxpZ2h0ZW5lZCB2ZXJzaW9uIHdhcyB1c2VkICovXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1ODgzOlxcdGlmIChuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU4ODQtXFx0XFx0a3ZtX3F1ZXVlX2V4Y2VwdGlvbih2Y3B1LCBVRF9WRUNUT1IpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz01OTQ1PXN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRyc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01OTYwLVxcdCAqL1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTk2MTpcXHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh0b192bXgodmNwdSkpKVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTk2Mi1cXHRcXHRjdXJyZW50X3ZtcHRyID0gdG9fdm14KHZjcHUpLVxcdTAwM2VuZXN0ZWQuaHZfZXZtY3Nfdm1wdHI7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTY3NTI9c3RhdGljIGludCB2bXhfZ2V0X25lc3RlZF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTY4NDAtXFx0XFx0aWYgKCF2bXgtXFx1MDAzZW5lc3RlZC5uZWVkX3ZtY3MxMl90b19zaGFkb3dfc3luYykge1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Njg0MTpcXHRcXHRcXHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjg0Mi1cXHRcXHRcXHRcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzoyNToyNC42NzY0ODczNTdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI0ODQ5OTkyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgd2VudDpcblxuKipFeGFtaW5pbmcgS1ZNIGFuZCBIeXBlci1WIEVtdWxhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgaXMgcmVsYXRlZCB0byBob3cgS1ZNIGVtdWxhdGVzIEh5cGVyLVYsIGludGVyZXN0aW5nLiBJIGtub3cgdGhlIGJhc2ljIGNvbmZpZ3MgcmVxdWlyZWQgYXJlIGBLVk1gIGFuZCBgS1ZNX0lOVEVMYCwgYnV0IEknbSBqdXN0IGN1cmlvdXMgaWYgdGhlcmUgaXMgYSBgS1ZNX0hZUEVSVmAgY29uZmlndXJhdGlvbi4gSSBmZWVsIGxpa2UgSSd2ZSBzZWVuIGl0IHNvbWV3aGVyZS4uLiBZZXMsIEkgdmFndWVseSByZWNhbGwgc3BvdHRpbmcgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhpcyBpbiBgYXJjaC94ODYva3ZtL0tjb25maWdgLiBUaW1lIHRvIGNoZWNrLiBMZXQncyBkaWcgaW50byB0aGF0IGBLY29uZmlnYCBmaWxlIGFuZCB0YWtlIGEgbG9vayBhdCBgS1ZNX0hZUEVSVmAgc3BlY2lmaWNhbGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQ0OCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE3OjI1OjI4LjkyNDk5Mzk2OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ1NjQ0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9IWVBFUlZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xODI9Y29uZmlnIEtWTV9TTU1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxOTM6Y29uZmlnIEtWTV9IWVBFUlZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTQtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzoyNToyOC45Njk1NjMwNzlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQzNjQ5OTA1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQ29uc2lkZXJpbmcgS1ZNIGFuZCBIeXBlci1WIENvbXBhdGliaWxpdHkqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIFdlIG5lZWQgdG8gZXhwbGljaXRseSBpbmNsdWRlIGRlZmluaXRpb25zIGZvciBgS1ZNYCwgYEtWTV9JTlRFTGAsIGFuZCBgS1ZNX0hZUEVSVmAuIE5vIHJlYWwgc3VycHJpc2VzIHRoZXJlLCB0aGF0J3MganVzdCBnb29kIHByYWN0aWNlIHRvIGVuc3VyZSB0aGUgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2V0IHVwIHByb3Blcmx5LiBOb3csIGxldCdzIGp1c3QgbWFrZSBzdXJlIHdlIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgS1ZNX0hZUEVSVmAgaXMgaW5kZWVkICpyZXF1aXJlZCogZm9yIHRoZSBgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZGAgZnVuY3Rpb24gdG8gd29yayBjb3JyZWN0bHkuIEkgYWx3YXlzIGxpa2UgdG8gZW5zdXJlIGZ1bGwgYWNjdXJhY3ksIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggbmVzdGVkIHZpcnR1YWxpemF0aW9uIHN1cHBvcnQuIEl0J3MgZWFzeSB0byBvdmVybG9vayBhIHN1YnRsZSBkZXBlbmRlbmN5IGluIHRoZXNlIGNvbmZpZ3VyYXRpb25zLCBhbmQgYSBzaW1wbGUgdmVyaWZpY2F0aW9uIHN0ZXAgY2FuIHNhdmUgYSBsb3Qgb2YgZGVidWdnaW5nIHRpbWUgbGF0ZXIuIEp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODI3LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6MjU6MzUuNDA2MDY1MjExWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTM4Nzk2NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vdm14L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oPTIwPXN0YXRpYyBpbmxpbmUgYm9vbCBldm1wdHJfaXNfdmFsaWQodTY0IGV2bXB0cilcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmgtMjQtXFxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaDoyNTpzdGF0aWMgaW5saW5lIGJvb2wgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZChzdHJ1Y3QgdmNwdV92bXggKnZteClcXG5hcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oLTI2LXtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2Lmg9NjQ9c3RhdGljIGlubGluZSBib29sIGV2bXB0cl9pc192YWxpZCh1NjQgZXZtcHRyKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaC02OC1cXG5hcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oOjY5OnN0YXRpYyBpbmxpbmUgYm9vbCBuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHN0cnVjdCB2Y3B1X3ZteCAqdm14KVxcbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmgtNzAte1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0xOTQ9c3RhdGljIGludCBuZXN0ZWRfdm14X2ZhaWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdm1faW5zdHJ1Y3Rpb25fZXJyb3IpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTIwMi1cXHRpZiAodm14LVxcdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0ciA9PSBJTlZBTElEX0dQQSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MjAzOlxcdCAgICAhbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjA0LVxcdFxcdHJldHVybiBuZXN0ZWRfdm14X2ZhaWxJbnZhbGlkKHZjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0yMjc0PXZvaWQgbmVzdGVkX3N5bmNfdm1jczEyX3RvX3NoYWRvdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTIyNzctXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoyMjc4OlxcdGlmIChuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkpXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yMjc5LVxcdFxcdGNvcHlfdm1jczEyX3RvX2VubGlnaHRlbmVkKHZteCk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTI0MzE9c3RhdGljIHZvaWQgcHJlcGFyZV92bWNzMDJfZWFybHkoc3RydWN0IHZjcHVfdm14ICp2bXgsIHN0cnVjdCBsb2FkZWRfdm1jcyAqdm1jczAxLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yNDM2LVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MjQzNzpcXHRpZiAodm14LVxcdTAwM2VuZXN0ZWQuZGlydHlfdm1jczEyIHx8IG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSlcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTI0MzgtXFx0XFx0cHJlcGFyZV92bWNzMDJfZWFybHlfcmFyZSh2bXgsIHZtY3MxMik7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTI3NjA9c3RhdGljIGludCBwcmVwYXJlX3ZtY3MwMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2bWNzMTIgKnZtY3MxMixcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjc2Ny1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjI3Njg6XFx0aWYgKHZteC1cXHUwMDNlbmVzdGVkLmRpcnR5X3ZtY3MxMiB8fCBuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTI3NjktXFx0XFx0cHJlcGFyZV92bWNzMDJfcmFyZSh2bXgsIHZtY3MxMik7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTI3NzEtXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoyNzcyOlxcdFxcdGxvYWRfZ3Vlc3RfcGRwdHJzX3ZtY3MxMiA9ICFuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkgfHxcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTI3NzMtXFx0XFx0XFx0IShldm1jcy1cXHUwMDNlaHZfY2xlYW5fZmllbGRzIFxcdTAwMjYgSFZfVk1YX0VOTElHSFRFTkVEX0NMRUFOX0ZJRUxEX0dVRVNUX0dSUDEpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yOTAxLVxcdCAqL1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MjkwMjpcXHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjkwMy1cXHRcXHRldm1jcy1cXHUwMDNlaHZfY2xlYW5fZmllbGRzIHw9IEhWX1ZNWF9FTkxJR0hURU5FRF9DTEVBTl9GSUVMRF9BTEw7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTM2Mjk9ZW51bSBudm14X3ZtZW50cnlfc3RhdHVzIG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM3NzQtXFx0dm1jczEyLVxcdTAwM2V2bV9leGl0X3JlYXNvbiA9IGV4aXRfcmVhc29uLmZ1bGw7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozNzc1OlxcdGlmIChlbmFibGVfc2hhZG93X3ZtY3MgfHwgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzc3Ni1cXHRcXHR2bXgtXFx1MDAzZW5lc3RlZC5uZWVkX3ZtY3MxMl90b19zaGFkb3dfc3luYyA9IHRydWU7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTM3ODQ9c3RhdGljIGludCBuZXN0ZWRfdm14X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbGF1bmNoKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zODA1LVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MzgwNjpcXHRpZiAoQ0MoIW5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzgwNy1cXHQgICAgICAgdm14LVxcdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0ciA9PSBJTlZBTElEX0dQQSkpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM4MjAtXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozODIxOlxcdGlmIChuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM4MjItXFx0XFx0c3RydWN0IGh2X2VubGlnaHRlbmVkX3ZtY3MgKmV2bWNzID0gbmVzdGVkX3ZteF9ldm1jcyh2bXgpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz00NjQzPXN0YXRpYyB2b2lkIHN5bmNfdm1jczAyX3RvX3ZtY3MxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2bWNzMTIgKnZtY3MxMilcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNDY0Ni1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjQ2NDc6XFx0aWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSlcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQ2NDgtXFx0XFx0c3luY192bWNzMDJfdG9fdm1jczEyX3JhcmUodmNwdSwgdm1jczEyKTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNDY1MC1cXHR2bXgtXFx1MDAzZW5lc3RlZC5uZWVkX3N5bmNfdm1jczAyX3RvX3ZtY3MxMl9yYXJlID1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjQ2NTE6XFx0XFx0IW5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQ2NTItXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTUwNjM9dm9pZCBfX25lc3RlZF92bXhfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZtX2V4aXRfcmVhc29uLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01MTY5LVxcdGlmICgodm1fZXhpdF9yZWFzb24gIT0gLTEpIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1MTcwOlxcdCAgICAoZW5hYmxlX3NoYWRvd192bWNzIHx8IG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSkpXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01MTcxLVxcdFxcdHZteC1cXHUwMDNlbmVzdGVkLm5lZWRfdm1jczEyX3RvX3NoYWRvd19zeW5jID0gdHJ1ZTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTY0Nj1zdGF0aWMgaW50IGhhbmRsZV92bXJlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01NjY1LVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTY2NjpcXHRpZiAoIW5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSkge1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTY2Ny1cXHRcXHQvKlxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz01ODczPXN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRybGQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01ODgyLVxcdC8qIEZvcmJpZCBub3JtYWwgVk1QVFJMRCBpZiBFbmxpZ2h0ZW5lZCB2ZXJzaW9uIHdhcyB1c2VkICovXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1ODgzOlxcdGlmIChuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU4ODQtXFx0XFx0a3ZtX3F1ZXVlX2V4Y2VwdGlvbih2Y3B1LCBVRF9WRUNUT1IpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz01OTQ1PXN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRyc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01OTYwLVxcdCAqL1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTk2MTpcXHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh0b192bXgodmNwdSkpKVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTk2Mi1cXHRcXHRjdXJyZW50X3ZtcHRyID0gdG9fdm14KHZjcHUpLVxcdTAwM2VuZXN0ZWQuaHZfZXZtY3Nfdm1wdHI7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTY3NTI9c3RhdGljIGludCB2bXhfZ2V0X25lc3RlZF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTY4NDAtXFx0XFx0aWYgKCF2bXgtXFx1MDAzZW5lc3RlZC5uZWVkX3ZtY3MxMl90b19zaGFkb3dfc3luYykge1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Njg0MTpcXHRcXHRcXHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjg0Mi1cXHRcXHRcXHRcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzoyNTozNi4wNTk5NTAwNTZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI5ODM1ODkxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyB0aGUgS1ZNIEh5cGVyLVYgR3VhcmQqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkYCBpcyBkZWZpbmVkIHdpdGhpbiBgYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaGAuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBxdWlja2x5IGRldGVybWluZSBpZiBpdHMgaW5jbHVzaW9uIG9yIGZ1bmN0aW9uYWxpdHkgaXMgY29udHJvbGxlZCBieSBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgY29tcGlsZWQgd2hlbiBgQ09ORklHX0tWTV9IWVBFUlZgIG9yIGEgcmVsYXRlZCBzZXR0aW5nIGlzIGVuYWJsZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFyb3VuZCB0aGlzIGlzIGNyaXRpY2FsIHRvIGZpZ3VyaW5nIG91dCBpdHMgb3ZlcmFsbCBwdXJwb3NlIGFuZCBjb250ZXh0IHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gTGV0J3Mgc2VlIGhvdyB0aGF0J3MgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4ODEsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzoyNTo0MC4zNTgzMTY0MTdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMzUwMDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oPTIwPXN0YXRpYyBpbmxpbmUgYm9vbCBldm1wdHJfaXNfdmFsaWQodTY0IGV2bXB0cilcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmgtMjQtXFxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaDoyNTpzdGF0aWMgaW5saW5lIGJvb2wgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZChzdHJ1Y3QgdmNwdV92bXggKnZteClcXG5hcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oLTI2LXtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2Lmg9NjQ9c3RhdGljIGlubGluZSBib29sIGV2bXB0cl9pc192YWxpZCh1NjQgZXZtcHRyKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaC02OC1cXG5hcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oOjY5OnN0YXRpYyBpbmxpbmUgYm9vbCBuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHN0cnVjdCB2Y3B1X3ZteCAqdm14KVxcbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmgtNzAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzoyNTo0MC40MTA2NzQwNjdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIwNDYzNTEyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipFeGFtaW5pbmcgSHlwZXItViBJbnRlZ3JhdGlvbiBpbiBLVk0vVk1YKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBndXRzIG9mIGhvdyBLVk0gb24geDg2IGludGVyYWN0cyB3aXRoIEh5cGVyLVYuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIG91dCBgYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaGAuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBtYWdpYyBoYXBwZW5zIOKAkyB0aGUgYCNpZmRlZmBzLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyB0aGF0IGVuYWJsZSBvciBkaXNhYmxlIEh5cGVyLVYgc3BlY2lmaWMgY29kZSBwYXRocyBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgaG9zdCBpcyBydW5uaW5nIGluIGEgSHlwZXItViBlbnZpcm9ubWVudCBvciBub3QuIFRoaXMgaGVhZGVyIHdpbGwgcHJvYmFibHkgcmV2ZWFsIGhvdyBLVk0gaGFuZGxlcyB0aG9zZSBpbnRlZ3JhdGlvbiBmZWF0dXJlcyBhbmQgaG93IGl0IGFkYXB0cyBpdHMgYmVoYXZpb3IgYmFzZWQgb24gdGhlIHVuZGVybHlpbmcgdmlydHVhbGl6YXRpb24gcGxhdGZvcm0uIEnigJltIGtlZW4gdG8gc2VlIHRoZSBzcGVjaWZpYyBkZXRhaWxzIG9mIHRoZSBmZWF0dXJlIGRldGVjdGlvbiBhbmQgaG93IHRoZSBjb2RlIGJyYW5jaGVzIGFjY29yZGluZ2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQwNiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE3OjI1OjQ0LjYxNTMxMjMzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5NTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmhcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4gICAyOlxcdCNpZm5kZWYgX19LVk1fWDg2X1ZNWF9IWVBFUlZfSFxcbiAgIDM6XFx0I2RlZmluZSBfX0tWTV9YODZfVk1YX0hZUEVSVl9IXFxuICAgNDpcXHRcXG4gICA1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9rdm1faG9zdC5oXFx1MDAzZVxcbiAgIDY6XFx0I2luY2x1ZGUgXFxcInZtY3MxMi5oXFxcIlxcbiAgIDc6XFx0I2luY2x1ZGUgXFxcInZteC5oXFxcIlxcbiAgIDg6XFx0XFxuICAgOTpcXHQjZGVmaW5lIEVWTVBUUl9JTlZBTElEICgtMVVMTClcXG4gIDEwOlxcdCNkZWZpbmUgRVZNUFRSX01BUF9QRU5ESU5HICgtMlVMTClcXG4gIDExOlxcdFxcbiAgMTI6XFx0ZW51bSBuZXN0ZWRfZXZtcHRybGRfc3RhdHVzIHtcXG4gIDEzOlxcdFxcdEVWTVBUUkxEX0RJU0FCTEVELFxcbiAgMTQ6XFx0XFx0RVZNUFRSTERfU1VDQ0VFREVELFxcbiAgMTU6XFx0XFx0RVZNUFRSTERfVk1GQUlMLFxcbiAgMTY6XFx0XFx0RVZNUFRSTERfRVJST1IsXFxuICAxNzpcXHR9O1xcbiAgMTg6XFx0XFxuICAxOTpcXHQjaWZkZWYgQ09ORklHX0tWTV9IWVBFUlZcXG4gIDIwOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBldm1wdHJfaXNfdmFsaWQodTY0IGV2bXB0cilcXG4gIDIxOlxcdHtcXG4gIDIyOlxcdFxcdHJldHVybiBldm1wdHIgIT0gRVZNUFRSX0lOVkFMSUQgXFx1MDAyNlxcdTAwMjYgZXZtcHRyICE9IEVWTVBUUl9NQVBfUEVORElORztcXG4gIDIzOlxcdH1cXG4gIDI0OlxcdFxcbiAgMjU6XFx0c3RhdGljIGlubGluZSBib29sIG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQoc3RydWN0IHZjcHVfdm14ICp2bXgpXFxuICAyNjpcXHR7XFxuICAyNzpcXHRcXHRyZXR1cm4gZXZtcHRyX2lzX3ZhbGlkKHZteC1cXHUwMDNlbmVzdGVkLmh2X2V2bWNzX3ZtcHRyKTtcXG4gIDI4OlxcdH1cXG4gIDI5OlxcdFxcbiAgMzA6XFx0c3RhdGljIGlubGluZSBib29sIGV2bXB0cl9pc19zZXQodTY0IGV2bXB0cilcXG4gIDMxOlxcdHtcXG4gIDMyOlxcdFxcdHJldHVybiBldm1wdHIgIT0gRVZNUFRSX0lOVkFMSUQ7XFxuICAzMzpcXHR9XFxuICAzNDpcXHRcXG4gIDM1OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3NldChzdHJ1Y3QgdmNwdV92bXggKnZteClcXG4gIDM2OlxcdHtcXG4gIDM3OlxcdFxcdHJldHVybiBldm1wdHJfaXNfc2V0KHZteC1cXHUwMDNlbmVzdGVkLmh2X2V2bWNzX3ZtcHRyKTtcXG4gIDM4OlxcdH1cXG4gIDM5OlxcdFxcbiAgNDA6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgaHZfZW5saWdodGVuZWRfdm1jcyAqbmVzdGVkX3ZteF9ldm1jcyhzdHJ1Y3QgdmNwdV92bXggKnZteClcXG4gIDQxOlxcdHtcXG4gIDQyOlxcdFxcdHJldHVybiB2bXgtXFx1MDAzZW5lc3RlZC5odl9ldm1jcztcXG4gIDQzOlxcdH1cXG4gIDQ0OlxcdFxcbiAgNDU6XFx0c3RhdGljIGlubGluZSBib29sIGd1ZXN0X2NwdV9jYXBfaGFzX2V2bWNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gIDQ2OlxcdHtcXG4gIDQ3OlxcdFxcdC8qXFxuICA0ODpcXHRcXHQgKiBlVk1DUyBpcyBleHBvc2VkIHRvIHRoZSBndWVzdCBpZiBIeXBlci1WIGlzIGVuYWJsZWQgaW4gQ1BVSUQgYW5kXFxuICA0OTpcXHRcXHQgKiBlVk1DUyBoYXMgYmVlbiBleHBsaWNpdGx5IGVuYWJsZWQgYnkgdXNlcnNwYWNlLlxcbiAgNTA6XFx0XFx0ICovXFxuICA1MTpcXHRcXHRyZXR1cm4gdmNwdS1cXHUwMDNlYXJjaC5oeXBlcnZfZW5hYmxlZCBcXHUwMDI2XFx1MDAyNlxcbiAgNTI6XFx0XFx0ICAgICAgIHRvX3ZteCh2Y3B1KS1cXHUwMDNlbmVzdGVkLmVubGlnaHRlbmVkX3ZtY3NfZW5hYmxlZDtcXG4gIDUzOlxcdH1cXG4gIDU0OlxcdFxcbiAgNTU6XFx0dTY0IG5lc3RlZF9nZXRfZXZtcHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuICA1NjpcXHR1aW50MTZfdCBuZXN0ZWRfZ2V0X2V2bWNzX3ZlcnNpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gIDU3OlxcdGludCBuZXN0ZWRfZW5hYmxlX2V2bWNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gIDU4OlxcdFxcdFxcdFxcdHVpbnQxNl90ICp2bWNzX3ZlcnNpb24pO1xcbiAgNTk6XFx0dm9pZCBuZXN0ZWRfZXZtY3NfZmlsdGVyX2NvbnRyb2xfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zcl9pbmRleCwgdTY0ICpwZGF0YSk7XFxuICA2MDpcXHRpbnQgbmVzdGVkX2V2bWNzX2NoZWNrX2NvbnRyb2xzKHN0cnVjdCB2bWNzMTIgKnZtY3MxMik7XFxuICA2MTpcXHRib29sIG5lc3RlZF9ldm1jc19sMl90bGJfZmx1c2hfZW5hYmxlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiAgNjI6XFx0dm9pZCB2bXhfaHZfaW5qZWN0X3N5bnRoZXRpY192bWV4aXRfcG9zdF90bGJfZmx1c2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gIDYzOlxcdCNlbHNlXFxuICA2NDpcXHRzdGF0aWMgaW5saW5lIGJvb2wgZXZtcHRyX2lzX3ZhbGlkKHU2NCBldm1wdHIpXFxuICA2NTpcXHR7XFxuICA2NjpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuICA2NzpcXHR9XFxuICA2ODpcXHRcXG4gIDY5OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHN0cnVjdCB2Y3B1X3ZteCAqdm14KVxcbiAgNzA6XFx0e1xcbiAgNzE6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAgNzI6XFx0fVxcbiAgNzM6XFx0XFxuICA3NDpcXHRzdGF0aWMgaW5saW5lIGJvb2wgZXZtcHRyX2lzX3NldCh1NjQgZXZtcHRyKVxcbiAgNzU6XFx0e1xcbiAgNzY6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAgNzc6XFx0fVxcbiAgNzg6XFx0XFxuICA3OTpcXHRzdGF0aWMgaW5saW5lIGJvb2wgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl9zZXQoc3RydWN0IHZjcHVfdm14ICp2bXgpXFxuICA4MDpcXHR7XFxuICA4MTpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuICA4MjpcXHR9XFxuICA4MzpcXHRcXG4gIDg0OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGh2X2VubGlnaHRlbmVkX3ZtY3MgKm5lc3RlZF92bXhfZXZtY3Moc3RydWN0IHZjcHVfdm14ICp2bXgpXFxuICA4NTpcXHR7XFxuICA4NjpcXHRcXHRyZXR1cm4gTlVMTDtcXG4gIDg3OlxcdH1cXG4gIDg4OlxcdCNlbmRpZlxcbiAgODk6XFx0XFxuICA5MDpcXHQjZW5kaWYgLyogX19LVk1fWDg2X1ZNWF9IWVBFUlZfSCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzoyNTo0NC42MTU0MDM3NjFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTkzNDkwOTc1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBLVk0gQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBDT05GSUdfS1ZNX0hZUEVSVmAgaXMgaW5kZWVkIGEgcHJlcmVxdWlzaXRlIGZvciBgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZGAgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBUaGF0IG1lYW5zIGBLVk1fSFlQRVJWYCBhYnNvbHV0ZWx5IG5lZWRzIHRvIGJlIGluY2x1ZGVkIGluIGBFbmFibGVDb25maWdzYC4gSXTigJlzIHN0cmFpZ2h0Zm9yd2FyZCwgYSBkaXJlY3QgZGVwZW5kZW5jeS5cblxuTm93LCBJJ20gc2Vjb25kLWd1ZXNzaW5nIG15c2VsZiBzbGlnaHRseS4gSXMgYEtWTV9JTlRFTGAgKnN1ZmZpY2llbnQqLCBvciBkbyB3ZSBhbHNvIHJlcXVpcmUgdGhlIGJhc2UgYEtWTWAgb3B0aW9uIHRvIGJlIGVuYWJsZWQ/IEludGVsIHVzdWFsbHkgcmVsaWVzIG9uIHRoZSBnZW5lcmljIEtWTSBmdW5jdGlvbmFsaXR5LCBzbyBJJ20gbGVhbmluZyB0b3dhcmQgbmVlZGluZyBib3RoLiBUbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbGwgcXVpY2tseSBjaGVjayB0aGUgYGFyY2gveDg2L2t2bS9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIGRlZmluaXRpdmUgc291cmNlIGZvciB0aGVzZSBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSB4ODYgS1ZNIG1vZHVsZS4gTGV0J3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgc2F5cy4gTm8gbmVlZCB0byBsZWF2ZSBhbnkgc3RvbmUgdW50dXJuZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDI1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6MjU6NTQuNTUwMzE3MjYzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTg4ODg4OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9JTlRFTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTgzPWNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDgtICAgICAgICBib29sIFxcXCJDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6MjU6NTQuODY5MjEzNjhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY1MzQ4ODEwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBLVk0gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgc3BlY2lmaWMgYWJvdXQgS1ZNIG9uIHg4Niwgc28gSSdtIGhlYWRpbmcgZGlyZWN0bHkgdG8gdGhlIHNvdXJjZS4gTGV0J3Mgc2VlLi4uIEknbGwgbmF2aWdhdGUgdG8gdGhlIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgZmlsZS4gSSdtIGFpbWluZyBmb3IgYXJvdW5kIGxpbmUgOTYg4oCTIGhvcGVmdWxseSB0aGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB3aGF0ZXZlciBJJ20gdHJvdWJsZXNob290aW5nIG9yIGludmVzdGlnYXRpbmcuIEknbSBleHBlY3Rpbmcgc29tZXRoaW5nIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbiwgb3IgcGVyaGFwcyBhIHNlY3Rpb24gZGVmaW5pbmcgc29tZSBrZXkgS1ZNIGZlYXR1cmVzLiBMZXQncyBzZWUgd2hhdCBsaW5lIDk2IGhvbGRzLiBUaGlzIGlzIGdvaW5nIHRvIGdpdmUgbWUgdGhlIG1vc3QgZ3JhbnVsYXIgaW5zaWdodCBpbnRvIHRoZSBidWlsZCBjb25maWd1cmF0aW9ucyBJJ20gd29ya2luZyB3aXRoLiBUaW1lIHRvIHJlYWQgYW5kIGNvbXByZWhlbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NjY1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6MjU6NTkuNTIyNzA1MTRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogOTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgOTA6XFx0XFx0ICBwcm90ZWN0ZWQgVk1zIGFyZSBwdXJlbHkgYSBkZXZlbG9wbWVudCBhbmQgdGVzdGluZyB2ZWhpY2xlIGZvclxcbiAgOTE6XFx0XFx0ICBLVk1fQ1JFQVRFX0dVRVNUX01FTUZELiAgQXR0ZW1wdGluZyB0byBydW4gYSBcXFwicmVhbFxcXCIgVk0gd29ya2xvYWQgYXMgYVxcbiAgOTI6XFx0XFx0ICBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk0gd2lsbCBmYWlsIG1pc2VyYWJseS5cXG4gIDkzOlxcdFxcbiAgOTQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBcXFwiTlxcXCIuXFxuICA5NTpcXHRcXG4gIDk2OlxcdGNvbmZpZyBLVk1fSU5URUxcXG4gIDk3OlxcdFxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbiAgOTg6XFx0XFx0ZGVwZW5kcyBvbiBLVk0gXFx1MDAyNlxcdTAwMjYgSUEzMl9GRUFUX0NUTFxcbiAgOTk6XFx0XFx0c2VsZWN0IFg4Nl9GUkVEIGlmIFg4Nl82NFxcbiAxMDA6XFx0XFx0aGVscFxcbiAxMDE6XFx0XFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBLVk0gb24gcHJvY2Vzc29ycyBlcXVpcHBlZCB3aXRoIEludGVsJ3MgVlRcXG4gMTAyOlxcdFxcdCAgZXh0ZW5zaW9ucywgYS5rLmEuIFZpcnR1YWwgTWFjaGluZSBFeHRlbnNpb25zIChWTVgpLlxcbiAxMDM6XFx0XFxuIDEwNDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAxMDU6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBrdm0taW50ZWwuXFxuIDEwNjpcXHRcXG4gMTA3OlxcdGNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcXG4gMTA4OlxcdCAgICAgICAgYm9vbCBcXFwiQ2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcXFwiXFxuIDEwOTpcXHQgICAgICAgIGRlcGVuZHMgb24gS1ZNX0lOVEVMIFxcdTAwMjZcXHUwMDI2IEVYUEVSVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzoyNTo1OS41MjI3NzQxNFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzY4NzY3NTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEtlcm5lbCBDb25maWd1cmF0aW9uIFN0cmF0ZWd5KipcblxuT2theSwgc28gSSdtIGNvbmZpZ3VyaW5nIHRoZSBrZXJuZWwgZm9yIEtWTSBzdXBwb3J0LiBJdCdzIG9idmlvdXMgdGhhdCBgS1ZNX0lOVEVMYCBidWlsZHMgb24gdG9wIG9mIGBLVk1gLCBzbyBJIGRlZmluaXRlbHkgbmVlZCB0byBpbmNsdWRlIGJvdGggb2YgdGhvc2UuIEkgYWxzbyBzZWUgdGhhdCB3ZSB1c2UgYEtWTV9IWVBFUlZgIGluIHNvbWUgY2FzZXMsIHNvIGxldCdzIGluY2x1ZGUgdGhhdCB0b28uIEl0J3MgYmVzdCB0byBiZSBjb21wcmVoZW5zaXZlIGFuZCBhdm9pZCBhbnkgdW5uZWNlc3NhcnkgcmVjb21waWxhdGlvbi5cblxuTm93LCBJJ20gdGhpbmtpbmcgYWJvdXQgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gSSByZWNhbGwgc2VlaW5nIGBoYW5kbGVfdm1wdHJsZGAgYW5kIGBoYW5kbGVfdm1wdHJzdGAgaW4gYGFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNgLCB3aGljaCBzdWdnZXN0cyBuZXN0ZWQgdmlydHVhbGl6YXRpb24uIEkgbmVlZCB0byBjb25maXJtIGlmIHRoZXJlJ3MgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBkaXJlY3RseSByZWxhdGVkIHRvIHRoYXQgZnVuY3Rpb25hbGl0eSwgc29tZXRoaW5nIGxpa2UgYENPTkZJR19LVk1fSU5URUxfTkVTVEVEYCBwZXJoYXBzLiBHb3R0YSBjaGVjayBmb3IgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgyMjksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzoyNjowMy4yOTE1NDM3NTdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzMjQyNzc5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0lOVEVMX05FU1RFRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzoyNjowMy4zODQ3OTQwNjZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQwODY5MDY2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTmVzdGVkIFZNWCBNb2R1bGUgSW52ZXN0aWdhdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcsIHRoYXQgXCJuZXN0ZWQgVk1YXCIgdGhpbmcgaXMgYWxtb3N0IGNlcnRhaW5seSBub3QgYSBzdGFuZGFsb25lIG1vZHVsZSBpbiB0aGUgdHJhZGl0aW9uYWwgc2Vuc2UuIEl0J3MgcHJvYmFibHkganVzdCBhIHBhcmFtZXRlciB0aGF0J3MgcGFzc2VkIHRvIGEgbW9kdWxlLCBvciBtb3JlIGxpa2VseSwgaXQncyBhIHBpZWNlIG9mIHRoZSBgS1ZNX0lOVEVMYCBtb2R1bGUgaXRzZWxmLiBJIG5lZWQgdG8gZHJpbGwgZG93biBhbmQgc2VlIGhvdyB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgYWN0dWFsbHkgY29uc3RydWN0ZWQuXG5cblRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpcyB0aGUgYnVpbGQgc3lzdGVtLiBMZXQgbWUgY2hlY2sgdGhlIGBhcmNoL3g4Ni9rdm0vdm14L01ha2VmaWxlYCB0byBzZWUgaG93IGBuZXN0ZWQub2AgKG9yIHdoYXRldmVyIG9iamVjdCBjb250YWlucyB0aGUgbmVzdGVkIFZNWCBmdW5jdGlvbmFsaXR5KSBpcyBjb21waWxlZC4gVGhhdCBzaG91bGQgcmV2ZWFsIHdoZXRoZXIgaXQncyBjb25kaXRpb25hbGx5IGluY2x1ZGVkLCBjb21waWxlZCB3aXRoIHNwZWNpZmljIGZsYWdzLCBvciBpZiBpdCdzIHRyZWF0ZWQgYXMgYSBjb21wb25lbnQgd2l0aGluIGEgbGFyZ2VyIGNvbXBpbGF0aW9uIHVuaXQuIFRoZSBtYWtlZmlsZSB3aWxsIGV4cG9zZSBob3cgdGhlIGRlcGVuZGVuY2llcyBhcmUgbWFuYWdlZCwgdGhlIGluY2x1c2lvbiBvZiBjb25kaXRpb25hbCBjb2RlLCBhbmQgaG93IHRoZXNlIHNldHRpbmdzIGluZmx1ZW5jZSB0aGUgYnVpbGQgcHJvY2Vzcy4gVGhhdCdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgXCJuZXN0ZWQgVk1YXCIgaXMgaGFuZGxlZCBhdCB0aGUgc291cmNlIGxldmVsLiBGcm9tIHRoZXJlLCBJIGNhbiB0cmFjZSBkZXBlbmRlbmNpZXMgYW5kIHVuZGVyc3RhbmQgaG93IHRoZSBmbGFnIGlzIGV4cG9zZWQgb3IgaWYgaXQncyBoYW5kbGVkIGRpZmZlcmVudGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODU3NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE3OjI2OjA4Ljc5MzQ4Nzg4OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM0MjM0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmVzdGVkLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9ODgwPXN0cnVjdCBrdm1feDg2X29wcyB2dF94ODZfb3BzIF9faW5pdGRhdGEgPSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy05OTctXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6OTk4OlxcdC5uZXN0ZWRfb3BzID0gXFx1MDAyNnZteF9uZXN0ZWRfb3BzLFxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTk5OS1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NzQ3MD1zdGF0aWMgZ3BhX3Qgdm14X3RyYW5zbGF0ZV9uZXN0ZWRfZ3BhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03NDkwLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NzQ5MTpzdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIHZteF9uZXN0ZWRfb3BzID0ge1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzQ5Mi1cXHQubGVhdmVfbmVzdGVkID0gdm14X2xlYXZlX25lc3RlZCxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmg9MzEyPXN0YXRpYyBpbmxpbmUgYm9vbCBuZXN0ZWRfY3B1X2hhc19ub19od19lcnJjb2RlX2NjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmgtMzIwLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmg6MzIxOmV4dGVybiBzdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIHZteF9uZXN0ZWRfb3BzO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmgtMzIyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzoyNjowOC44NDY5MjMzNzlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE2Nzg2Njc3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRlYnVnZ2luZyBhIEJ1aWxkIFN5c3RlbSBEaXNjcmVwYW5jeSoqXG5cbkhtbSwgdGhhdCdzIG9kZC4gSSB3YXMgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGBuZXN0ZWQub2AsIHlldCB0aGUgb3V0cHV0IGlzbid0IHBvaW50aW5nIG1lIGJhY2sgdG8gdGhlIGBNYWtlZmlsZWAuIFRoYXQncyBhIHJlZCBmbGFnLiBTb21ldGhpbmcgaXNuJ3QgYmVoYXZpbmcgYXMgZXhwZWN0ZWQgd2l0aCB0aGUgYnVpbGQgZW52aXJvbm1lbnQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoYXQgb2JqZWN0IGZpbGUgaXMgYmVpbmcgcHJvZHVjZWQuIE15IGZpcnN0IGluc3RpbmN0LCBjb25zaWRlcmluZyBJJ20gd29ya2luZyB3aXRoIGEga2VybmVsIG1vZHVsZSBhbmQgbGlrZWx5IHVzaW5nIGEgdHlwaWNhbCBidWlsZCBzZXR1cCwgaXMgdG8gY2hlY2sgdGhlIGBhcmNoL3g4Ni9rdm0vTWFrZWZpbGVgLiBUaGF0J3MgYSBrZXkgYXJlYSwgZXNwZWNpYWxseSBpZiB0aGlzIGlzIHJlbGF0ZWQgdG8gS1ZNIG9yIHg4NiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29kZS4gVGhhdCBgTWFrZWZpbGVgIG9mdGVuIGhvbGRzIGNydWNpYWwgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRob3NlIHNwZWNpZmljIG9iamVjdCBmaWxlcyBhcmUgaGFuZGxlZC4gSXQncyB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gZmluZCB0aGUgcmVjaXBlIG9yIHJ1bGVzIHRoYXQgZ2VuZXJhdGUgdGhlIGBuZXN0ZWQub2AgdGhhdCBJJ20gaW50ZXJlc3RlZCBpbiwgb3IgaWRlbnRpZnkgd2h5IGl0J3MgKm5vdCogYmVpbmcgYnVpbHQgYXMgSSBhbnRpY2lwYXRlLiBUaW1lIHRvIGRpdmUgaW4gdGhlcmUgYW5kIHNlZSB3aGF0IHRoZSBidWlsZCBwcm9jZXNzIGlzIGRvaW5nIHdpdGggdGhpcyBwYXJ0aWN1bGFyIHNvdXJjZSBmaWxlLCBvciBpZiB0aGVyZSdzIGEgcHJvYmxlbSB3aXRoIGl0cyBpbmNsdXNpb24gaW4gdGhlIGJ1aWxkIGF0IGFsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkzNDEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzoyNjoxMy4wMTQ3OTI1NTFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNzQ3MjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5lc3RlZC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL01ha2VmaWxlPTE3PWt2bS1pbnRlbC15XFx0XFx0Kz0gdm14L3ZteC5vIHZteC92bWVudGVyLm8gdm14L3BtdV9pbnRlbC5vIHZteC92bWNzMTIubyBcXFxcXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlOjE4OlxcdFxcdFxcdCAgIHZteC9uZXN0ZWQubyB2bXgvcG9zdGVkX2ludHIubyB2bXgvbWFpbi5vXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlLTE5LVxcbi0tXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlPTIyPWt2bS1pbnRlbC0kKENPTkZJR19LVk1fSU5URUxfVERYKVxcdCs9IHZteC90ZHgub1xcbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0yMy1cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6MjQ6a3ZtLWFtZC15XFx0XFx0Kz0gc3ZtL3N2bS5vIHN2bS92bWVudGVyLm8gc3ZtL3BtdS5vIHN2bS9uZXN0ZWQubyBzdm0vYXZpYy5vXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlLTI1LVxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTIwMTM9c3RhdGljIHU2NCBrdm1faHZfZmx1c2hfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9odl9oY2FsbCAqaGMpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMjA0OS1cXHRpZiAoIWhjLVxcdTAwM2VmYXN0IFxcdTAwMjZcXHUwMDI2IG1tdV9pc19uZXN0ZWQodmNwdSkpIHtcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6MjA1MDpcXHRcXHRoYy1cXHUwMDNlaW5ncGEgPSBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVxcdTAwM2V0cmFuc2xhdGVfbmVzdGVkX2dwYShcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMjA1MS1cXHRcXHRcXHRcXHRcXHR2Y3B1LCBoYy1cXHUwMDNlaW5ncGEsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9MjM5Mz1zdGF0aWMgaW50IGt2bV9odl9oeXBlcmNhbGxfY29tcGxldGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcmVzdWx0KVxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTI0MTAtXFx0aWYgKHRsYl9sb2NrX2NvdW50KVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoyNDExOlxcdFxcdGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXFx1MDAzZWh2X2luamVjdF9zeW50aGV0aWNfdm1leGl0X3Bvc3RfdGxiX2ZsdXNoKHZjcHUpO1xcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0yNDEyLVxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTI3NzQ9aW50IGt2bV9nZXRfaHZfY3B1aWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2NwdWlkMiAqY3B1aWQsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMjc5MS1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6Mjc5MjpcXHRpZiAoa3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cXHUwMDNlZ2V0X2V2bWNzX3ZlcnNpb24pXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjI3OTM6XFx0XFx0ZXZtY3NfdmVyID0ga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cXHUwMDNlZ2V0X2V2bWNzX3ZlcnNpb24odmNwdSk7XFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTI3OTQtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11Lmg9MzAzPXN0YXRpYyBpbmxpbmUgZ3BhX3Qga3ZtX3RyYW5zbGF0ZV9ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS5oLTMxMC1cXHRcXHRyZXR1cm4gZ3BhO1xcbmFyY2gveDg2L2t2bS9tbXUuaDozMTE6XFx0cmV0dXJuIGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXFx1MDAzZXRyYW5zbGF0ZV9uZXN0ZWRfZ3BhKHZjcHUsIGdwYSwgYWNjZXNzLFxcbmFyY2gveDg2L2t2bS9tbXUuaC0zMTItXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGV4Y2VwdGlvbixcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnaW5nX3RtcGwuaD0yMDg9c3RhdGljIGludCBGTkFNRSh1cGRhdGVfYWNjZXNzZWRfZGlydHlfYml0cykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9wYWdpbmdfdG1wbC5oLTIzNS0jaWYgUFRUWVBFID09IFBUVFlQRV9FUFRcXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2luZ190bXBsLmg6MjM2OlxcdFxcdFxcdGlmIChrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVxcdTAwM2V3cml0ZV9sb2dfZGlydHkodmNwdSwgYWRkcikpXFxuYXJjaC94ODYva3ZtL21tdS9wYWdpbmdfdG1wbC5oLTIzNy1cXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM9MjE0Nz1zdGF0aWMgZ3BhX3Qgc3ZtX3RyYW5zbGF0ZV9uZXN0ZWRfZ3BhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0yMTY0LVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6MjE2NTpzdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIHN2bV9uZXN0ZWRfb3BzID0ge1xcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMjE2Ni1cXHQubGVhdmVfbmVzdGVkID0gc3ZtX2xlYXZlX25lc3RlZCxcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NTM0Mz1zdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTQ0Ni1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjU0NDc6XFx0Lm5lc3RlZF9vcHMgPSBcXHUwMDI2c3ZtX25lc3RlZF9vcHMsXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NDQ4LVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD05MTU9c3RhdGljIGlubGluZSB2b2lkIHN2bV9wbXVfaGFuZGxlX25lc3RlZF90cmFuc2l0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC05MjYtXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo5Mjc6ZXh0ZXJuIHN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgc3ZtX25lc3RlZF9vcHM7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC05MjgtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz04ODA9c3RydWN0IGt2bV94ODZfb3BzIHZ0X3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTk5Ny1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo5OTg6XFx0Lm5lc3RlZF9vcHMgPSBcXHUwMDI2dm14X25lc3RlZF9vcHMsXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtOTk5LVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz03NDcwPXN0YXRpYyBncGFfdCB2bXhfdHJhbnNsYXRlX25lc3RlZF9ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTc0OTAtXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo3NDkxOnN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgdm14X25lc3RlZF9vcHMgPSB7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03NDkyLVxcdC5sZWF2ZV9uZXN0ZWQgPSB2bXhfbGVhdmVfbmVzdGVkLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaD0zMTI9c3RhdGljIGlubGluZSBib29sIG5lc3RlZF9jcHVfaGFzX25vX2h3X2VycmNvZGVfY2Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaC0zMjAtXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaDozMjE6ZXh0ZXJuIHN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgdm14X25lc3RlZF9vcHM7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaC0zMjItXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9ODI2PXN0YXRpYyB2b2lkIGt2bV9tdWx0aXBsZV9leGNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgbnIsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtODM5LVxcdGlmIChpc19ndWVzdF9tb2RlKHZjcHUpIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjg0MDpcXHQgICAga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cXHUwMDNlaXNfZXhjZXB0aW9uX3ZtZXhpdCh2Y3B1LCBuciwgZXJyb3JfY29kZSkpIHtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtODQxLVxcdFxcdGt2bV9xdWV1ZV9leGNlcHRpb25fdm1leGl0KHZjcHUsIG5yLCBoYXNfZXJyb3IsIGVycm9yX2NvZGUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MjY2MT11NjQga3ZtX2NhbGNfbmVzdGVkX3RzY19vZmZzZXQodTY0IGwxX29mZnNldCwgdTY0IGwyX29mZnNldCwgdTY0IGwyX211bHRpcGxpZXIpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTI2NjIte1xcbmFyY2gveDg2L2t2bS94ODYuYzoyNjYzOlxcdHU2NCBuZXN0ZWRfb2Zmc2V0O1xcbmFyY2gveDg2L2t2bS94ODYuYy0yNjY0LVxcbmFyY2gveDg2L2t2bS94ODYuYy0yNjY1LVxcdGlmIChsMl9tdWx0aXBsaWVyID09IGt2bV9jYXBzLmRlZmF1bHRfdHNjX3NjYWxpbmdfcmF0aW8pXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjI2NjY6XFx0XFx0bmVzdGVkX29mZnNldCA9IGwxX29mZnNldDtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMjY2Ny1cXHRlbHNlXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjI2Njg6XFx0XFx0bmVzdGVkX29mZnNldCA9IG11bF9zNjRfdTY0X3NocigoczY0KSBsMV9vZmZzZXQsIGwyX211bHRpcGxpZXIsXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTI2NjktXFx0XFx0XFx0XFx0XFx0XFx0a3ZtX2NhcHMudHNjX3NjYWxpbmdfcmF0aW9fZnJhY19iaXRzKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMjY3MC1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6MjY3MTpcXHRuZXN0ZWRfb2Zmc2V0ICs9IGwyX29mZnNldDtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6MjY3MjpcXHRyZXR1cm4gbmVzdGVkX29mZnNldDtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMjY3My19XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NDc2OD1pbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTQ5MzAtXFx0Y2FzZSBLVk1fQ0FQX05FU1RFRF9TVEFURTpcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NDkzMTpcXHRcXHRyID0ga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cXHUwMDNlZ2V0X3N0YXRlID9cXG5hcmNoL3g4Ni9rdm0veDg2LmM6NDkzMjpcXHRcXHRcXHRrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVxcdTAwM2VnZXRfc3RhdGUoTlVMTCwgTlVMTCwgMCkgOiAwO1xcbmFyY2gveDg2L2t2bS94ODYuYy00OTMzLVxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTQ5MzgtXFx0Y2FzZSBLVk1fQ0FQX0hZUEVSVl9FTkxJR0hURU5FRF9WTUNTOlxcbmFyY2gveDg2L2t2bS94ODYuYzo0OTM5OlxcdFxcdHIgPSBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVxcdTAwM2VlbmFibGVfZXZtY3MgIT0gTlVMTDtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNDk0MC1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz02MDA4PXN0YXRpYyBpbnQga3ZtX3ZjcHVfaW9jdGxfZW5hYmxlX2NhcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjAzMS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjAzMjpcXHRcXHRcXHRpZiAoIWt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXFx1MDAzZWVuYWJsZV9ldm1jcylcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjAzMy1cXHRcXHRcXHRcXHRyZXR1cm4gLUVOT1RUWTtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjAzNDpcXHRcXHRcXHRyID0ga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cXHUwMDNlZW5hYmxlX2V2bWNzKHZjcHUsIFxcdTAwMjZ2bWNzX3ZlcnNpb24pO1xcbmFyY2gveDg2L2t2bS94ODYuYy02MDM1LVxcdFxcdFxcdGlmICghcikge1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTYxODk9bG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTY1MzEtXFx0XFx0ciA9IC1FSU5WQUw7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjY1MzI6XFx0XFx0aWYgKCFrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVxcdTAwM2VnZXRfc3RhdGUpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTY1MzMtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjUzOS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjU0MDpcXHRcXHRyID0ga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cXHUwMDNlZ2V0X3N0YXRlKHZjcHUsIHVzZXJfa3ZtX25lc3RlZF9zdGF0ZSxcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjU0MS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIHVzZXJfZGF0YV9zaXplKTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy02NTYxLVxcdFxcdHIgPSAtRUlOVkFMO1xcbmFyY2gveDg2L2t2bS94ODYuYzo2NTYyOlxcdFxcdGlmICgha3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cXHUwMDNlc2V0X3N0YXRlKVxcbmFyY2gveDg2L2t2bS94ODYuYy02NTYzLVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTY1ODQtXFx0XFx0aWR4ID0gc3JjdV9yZWFkX2xvY2soXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlc3JjdSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjY1ODU6XFx0XFx0ciA9IGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXFx1MDAzZXNldF9zdGF0ZSh2Y3B1LCB1c2VyX2t2bV9uZXN0ZWRfc3RhdGUsIFxcdTAwMjZrdm1fc3RhdGUpO1xcbmFyY2gveDg2L2t2bS94ODYuYy02NTg2LVxcdFxcdHNyY3VfcmVhZF91bmxvY2soXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlc3JjdSwgaWR4KTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz0xMDU2NT1pbnQga3ZtX2NoZWNrX25lc3RlZF9ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNTY3LVxcdGlmIChrdm1fdGVzdF9yZXF1ZXN0KEtWTV9SRVFfVFJJUExFX0ZBVUxULCB2Y3B1KSkge1xcbmFyY2gveDg2L2t2bS94ODYuYzoxMDU2ODpcXHRcXHRrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVxcdTAwM2V0cmlwbGVfZmF1bHQodmNwdSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNTY5LVxcdFxcdHJldHVybiAxO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNTcxLVxcbmFyY2gveDg2L2t2bS94ODYuYzoxMDU3MjpcXHRyZXR1cm4ga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cXHUwMDNlY2hlY2tfZXZlbnRzKHZjcHUpO1xcbmFyY2gveDg2L2t2bS94ODYuYy0xMDU3My19XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTA2MzM9c3RhdGljIGludCBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwODEwLVxcdGlmIChpc19ndWVzdF9tb2RlKHZjcHUpIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwODExOlxcdCAgICBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVxcdTAwM2VoYXNfZXZlbnRzIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwODEyOlxcdCAgICBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVxcdTAwM2VoYXNfZXZlbnRzKHZjcHUsIHRydWUpKVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDgxMy1cXHRcXHQqcmVxX2ltbWVkaWF0ZV9leGl0ID0gdHJ1ZTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz0xMTExMj1zdGF0aWMgaW50IHZjcHVfZW50ZXJfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTExMTM0LVxcdFxcdGlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX0dFVF9ORVNURURfU1RBVEVfUEFHRVMsIHZjcHUpKSB7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjExMTM1OlxcdFxcdFxcdGlmICh1bmxpa2VseSgha3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cXHUwMDNlZ2V0X25lc3RlZF9zdGF0ZV9wYWdlcyh2Y3B1KSkpIHtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTExMzYtXFx0XFx0XFx0XFx0ciA9IDA7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTExODYtXFx0XFx0XFx0aWYgKGlzX2d1ZXN0X21vZGUodmNwdSkpXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjExMTg3OlxcdFxcdFxcdFxcdGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXFx1MDAzZXRyaXBsZV9mYXVsdCh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTExODgtXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTE1Njk9Ym9vbCBrdm1fdmNwdV9oYXNfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMTYwNS1cXHRpZiAoaXNfZ3Vlc3RfbW9kZSh2Y3B1KSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L2t2bS94ODYuYzoxMTYwNjpcXHQgICAga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cXHUwMDNlaGFzX2V2ZW50cyBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L2t2bS94ODYuYzoxMTYwNzpcXHQgICAga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cXHUwMDNlaGFzX2V2ZW50cyh2Y3B1LCBmYWxzZSkpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTExNjA4LVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTExOTU2PWludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTIwMzEtXFx0aWYgKHZjcHUtXFx1MDAzZWFyY2guZXhjZXB0aW9uX2Zyb21fdXNlcnNwYWNlIFxcdTAwMjZcXHUwMDI2IGlzX2d1ZXN0X21vZGUodmNwdSkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTIwMzI6XFx0ICAgIGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXFx1MDAzZWlzX2V4Y2VwdGlvbl92bWV4aXQodmNwdSwgZXgtXFx1MDAzZXZlY3RvcixcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTIwMzMtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ZXgtXFx1MDAzZWVycm9yX2NvZGUpKSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2Lmg9MTUyPXN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fbGVhdmVfbmVzdGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0veDg2LmgtMTUzLXtcXG5hcmNoL3g4Ni9rdm0veDg2Lmg6MTU0OlxcdGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXFx1MDAzZWxlYXZlX25lc3RlZCh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0veDg2LmgtMTU1LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6MjY6MTMuMDY1NTQ0OTRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTUzNjk0MjAxNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgS1ZNIE5lc3RlZCBWTVggUGF0Y2ggZm9yIEh5cGVyLVYgRW5saWdodGVuZWQgVk1DUyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGhlcmUncyBteSB0YWtlLiBJbml0aWFsbHksIEkgemVyb2VkIGluIG9uIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvZiBgbmVzdGVkLm9gIHdpdGggYEtWTV9JTlRFTGAgZW5hYmxlZCwgYW5kLCB3aGlsZSB0aGF0ICppcyogYSBrZXkgZmFjdG9yLCBpdCdzIG5vdCB0aGUgd2hvbGUgc3RvcnkuIExldCdzIG1ha2Ugc3VyZSB3ZSBnZXQgaXQgcmlnaHQuXG5cbkkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSByaWdodCBjb25maWdzLiBJIHNlZSB0aGF0IHRoaXMgcGF0Y2ggbW9kaWZpZXMgYGhhbmRsZV92bXB0cmxkYCBhbmQgYGhhbmRsZV92bXB0cnN0YCwgd2hpY2ggYXJlIHVzZWQgd2hlbiB0aGVyZSdzIGFuIGVubGlnaHRlbmVkIFZNQ1MgKGVWTUNTKSBwcmVzZW50LCB0cmlnZ2VyZWQgd2hlbiBgS1ZNX0hZUEVSVmAgaXMgZW5hYmxlZC4gYEtWTV9IWVBFUlZgIHdpbGwgbmVlZCB0byBiZSBlbmFibGVkIGZvciBgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZGAgdG8gcmV0dXJuIHRydWUuIFRoaXMgbWVhbnMgdGhhdCBib3RoIGBLVk1fSU5URUxgIGFuZCBgS1ZNYCBhcmUgbmVlZGVkIGZvciBhIHdvcmtpbmcgS1ZNLCBhbmQgb2YgY291cnNlIGBLVk1fSFlQRVJWYCBmb3IgdGhlIEh5cGVyLVYgc3BlY2lmaWMgY2hhbmdlLiBOb3csIGxvb2tpbmcgYXQgdGhlIGNvbmZpZyBvcHRpb25zLCBgS1ZNX0hZUEVSVmAgaXMgYSBib29sZWFuLCB3aGlsZSBgS1ZNX0lOVEVMYCBhbmQgYEtWTWAgYXJlIHRyaXN0YXRlLCBzbyB0aGF0J3Mgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZC5cblxuRGlnZ2luZyBpbnRvIHRoZSBjaGFuZ2VzLCB0aGlzIHBhdGNoIHNwZWNpZmljYWxseSBhZGRyZXNzZXMgaG93IEtWTSBuZXN0ZWQgVk1YIGhhbmRsZXMgYFZNUFRSTERgIGFuZCBgVk1QVFJTVGAgaW5zdHJ1Y3Rpb25zIHdoZW4gSHlwZXItVidzIGVubGlnaHRlbmVkIFZNQ1MgaXMgaW4gcGxheS4gVGhlIGtleSBjaGFuZ2UgaXMgdGhhdCwgcHJldmlvdXNseSwgYFZNUFRSTERgIHdhcyBzaWxlbnRseSBpZ25vcmVkLCBhbmQgYFZNUFRSU1RgIHdhcyBpZ25vcmVkLiBOb3csIGBWTVBUUkxEYCBxdWV1ZXMgYSAjVUQgZXhjZXB0aW9uLCBhbmQgYFZNUFRSU1RgIHJldHVybnMgdGhlIGVWTUNTIEdQQSBpbnN0ZWFkLiBUaGlzIGlzIGEgYmVoYXZpb3JhbCBjaGFuZ2UgaW4gS1ZNLCB3aGljaCBtdXN0IGJlIGZ1enplZCBmb3Igc3RhYmlsaXR5LiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbG9naWMuIFdoaWxlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgc3RhdGljLCB0aGUgZmFjdCB0aGF0IHRoZWlyIGFkZHJlc3NlcyBhcmUgdGFrZW4gYW5kIHBsYWNlZCBpbiBhIGZ1bmN0aW9uIHBvaW50ZXIgYXJyYXkgbWVhbnMgdGhhdCB0aGVzZSBhcmVuJ3QgaW5saW5lZCBhbmQgaGF2ZSB1bmlxdWUgc3ltYm9sIGFkZHJlc3Nlcy4gVGhleSBhcmUgbm90IHBlcmZvcm1hbmNlIHNlbnNpdGl2ZSwgYXMgdGhlIGZ1bmN0aW9ucyBoYW5kbGUgc3BlY2lmaWMgVk0gZXhpdHMsIHJlbGF0ZWQgdG8gdGhlc2Ugc3BlY2lmaWMgaW5zdHJ1Y3Rpb25zLCBzbyBpdCdzIG5vdCBzb21ldGhpbmcgaW4gYSBob3QgcGF0aC5cblxuSSBhbHNvIGNoZWNrZWQgdG8gc2VlIGlmIGFueSBvdGhlciBmdW5jdGlvbnMgd2VyZSBtb2RpZmllZC4gVGhlIHBhdGNoIGRvZXMgYWZmZWN0IHNvbWUgc2VsZnRlc3QgY29kZSwgYnV0IHRob3NlIGFyZSBpbiB0aGUgdG9vbHMgZGlyZWN0b3J5LCBub3QgdGhlIGtlcm5lbCBpdHNlbGYsIGFuZCBzbyBhcmUgbm90IGltcG9ydGFudCB0byB0aGUga2VybmVsLlxuXG5UaGVyZWZvcmUsIGZvciBmdXp6aW5nLCBJJ20gY29uZmlkZW50IHRoYXQgd2UgbmVlZCB0byBlbmFibGU6XG5gS1ZNYFxuYEtWTV9JTlRFTGBcbmBLVk1fSFlQRVJWYFxuYW5kIHNwZWNpZmljYWxseSB0YXJnZXQ6XG5gaGFuZGxlX3ZtcHRybGRgXG5gaGFuZGxlX3ZtcHRyc3RgXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MzUxLCJPdXRwdXRUb2tlbnMiOjE1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6MjY6MjguNDM0OTY3OTY2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ2MzkzMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fSFlQRVJWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaGFuZGxlX3ZtcHRybGRcIixcbiAgICBcImhhbmRsZV92bXB0cnN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJlaGF2aW9yIG9mIEtWTSBuZXN0ZWQgVk1YIHdoZW4gaGFuZGxpbmcgVk1QVFJMRCBhbmQgVk1QVFJTVCBpbnN0cnVjdGlvbnMgaW4gdGhlIHByZXNlbmNlIG9mIEh5cGVyLVYgZW5saWdodGVuZWQgVk1DUyAoZVZNQ1MpLiBTcGVjaWZpY2FsbHksIGl0IHF1ZXVlcyBhICNVRCBleGNlcHRpb24gaW5zdGVhZCBvZiBzaWxlbnRseSBpZ25vcmluZyBWTVBUUkxELCBhbmQgcmV0dXJucyB0aGUgZVZNQ1MgR1BBIGluc3RlYWQgb2YgaWdub3JpbmcgVk1QVFJTVC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIEtWTSBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIktWTV9IWVBFUlZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoYW5kbGVfdm1wdHJsZFwiLFxuICAgIFwiaGFuZGxlX3ZtcHRyc3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgS1ZNIG5lc3RlZCBWTVggd2hlbiBoYW5kbGluZyBWTVBUUkxEIGFuZCBWTVBUUlNUIGluc3RydWN0aW9ucyBpbiB0aGUgcHJlc2VuY2Ugb2YgSHlwZXItViBlbmxpZ2h0ZW5lZCBWTUNTIChlVk1DUykuIFNwZWNpZmljYWxseSwgaXQgcXVldWVzIGEgI1VEIGV4Y2VwdGlvbiBpbnN0ZWFkIG9mIHNpbGVudGx5IGlnbm9yaW5nIFZNUFRSTEQsIGFuZCByZXR1cm5zIHRoZSBlVk1DUyBHUEEgaW5zdGVhZCBvZiBpZ25vcmluZyBWTVBUUlNULiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgS1ZNIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6MjY6MjguNTE5NjE0NTE1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzEzNjUyMDczNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzoyNjoyOC41MjAxNzQzODVaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTcxMzY0NjQzMjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0ncyBuZXN0ZWQgVk1YIGVtdWxhdGlvbiBmb3IgdGhlIFZNUFRSTEQgYW5kIFZNUFRSU1QgaW5zdHJ1Y3Rpb25zIHdoZW4gRW5saWdodGVuZWQgVk1DUyAoZVZNQ1MpIGlzIHVzZWQuIEluIGBoYW5kbGVfdm1wdHJzdGAsIGl0IGNoYW5nZXMgdGhlIGNvZGUgdG8gd3JpdGUgdGhlIGBodl9ldm1jc192bXB0cmAgKGEgNjQtYml0IGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MpIHRvIGd1ZXN0IG1lbW9yeSBpbnN0ZWFkIG9mIHNraXBwaW5nIHRoZSBpbnN0cnVjdGlvbi4gU2luY2UgYGh2X2V2bWNzX3ZtcHRyYCBpcyBhIGZ1bGx5IGluaXRpYWxpemVkIDY0LWJpdCBpbnRlZ2VyIChgZ3BhX3RgKSB3aXRob3V0IGFueSBwYWRkaW5nLCB3cml0aW5nIGl0IHRvIGd1ZXN0IG1lbW9yeSBkb2VzIG5vdCBsZWFrIGFueSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIFRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGBoYW5kbGVfdm1wdHJsZGAgdG8gcXVldWUgYSAjVUQgZXhjZXB0aW9uLCB3aGljaCBvbmx5IGFmZmVjdHMgY29udHJvbCBmbG93IGFuZCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBjb21wbGV4IHN0cnVjdHVyZXMsIG9yIHBhZGRpbmcgaW50cm9kdWNlZCB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBidWdzIGluIHRoaXMgYXJlYS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzNDhjYWNmMDQxOTI0NjFiZDdlOTU2NTc1ZjFmN2U3ZmY0MDllNGUzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMTQgMTc6MTg6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xuaW5kZXggZGRmNmRmN2JlZTkzYi4uMGY1ZTRiNDdlY2IxOSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbkBAIC01ODc5LDYgKzU4NzksMTIgQEAgc3RhdGljIGludCBoYW5kbGVfdm1wdHJsZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAoIW5lc3RlZF92bXhfY2hlY2tfcGVybWlzc2lvbih2Y3B1KSlcbiBcdFx0cmV0dXJuIDE7XG4gXG4rXHQvKiBGb3JiaWQgbm9ybWFsIFZNUFRSTEQgaWYgRW5saWdodGVuZWQgdmVyc2lvbiB3YXMgdXNlZCAqL1xuK1x0aWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSkge1xuK1x0XHRrdm1fcXVldWVfZXhjZXB0aW9uKHZjcHUsIFVEX1ZFQ1RPUik7XG4rXHRcdHJldHVybiAxO1xuK1x0fVxuK1xuIFx0aWYgKG5lc3RlZF92bXhfZ2V0X3ZtcHRyKHZjcHUsIFx1MDAyNnZtcHRyLCBcdTAwMjZyKSlcbiBcdFx0cmV0dXJuIHI7XG4gXG5AQCAtNTg4OCwxMCArNTg5NCw2IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRybGQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKHZtcHRyID09IHZteC1cdTAwM2VuZXN0ZWQudm14b25fcHRyKVxuIFx0XHRyZXR1cm4gbmVzdGVkX3ZteF9mYWlsKHZjcHUsIFZNWEVSUl9WTVBUUkxEX1ZNWE9OX1BPSU5URVIpO1xuIFxuLVx0LyogRm9yYmlkIG5vcm1hbCBWTVBUUkxEIGlmIEVubGlnaHRlbmVkIHZlcnNpb24gd2FzIHVzZWQgKi9cbi1cdGlmIChuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkpXG4tXHRcdHJldHVybiAxO1xuLVxuIFx0aWYgKHZteC1cdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0ciAhPSB2bXB0cikge1xuIFx0XHRzdHJ1Y3QgZ2ZuX3RvX2h2YV9jYWNoZSAqZ2hjID0gXHUwMDI2dm14LVx1MDAzZW5lc3RlZC52bWNzMTJfY2FjaGU7XG4gXHRcdHN0cnVjdCB2bWNzX2hkciBoZHI7XG5AQCAtNTk0NCw3ICs1OTQ2LDcgQEAgc3RhdGljIGludCBoYW5kbGVfdm1wdHJzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBleGl0X3F1YWwgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdHUzMiBpbnN0cl9pbmZvID0gdm1jc19yZWFkMzIoVk1YX0lOU1RSVUNUSU9OX0lORk8pO1xuLVx0Z3BhX3QgY3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS1cdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0cjtcbitcdGdwYV90IGN1cnJlbnRfdm1wdHI7XG4gXHRzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBlO1xuIFx0Z3ZhX3QgZ3ZhO1xuIFx0aW50IHI7XG5AQCAtNTk1Miw4ICs1OTU0LDE0IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRyc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKCFuZXN0ZWRfdm14X2NoZWNrX3Blcm1pc3Npb24odmNwdSkpXG4gXHRcdHJldHVybiAxO1xuIFxuLVx0aWYgKHVubGlrZWx5KG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodG9fdm14KHZjcHUpKSkpXG4tXHRcdHJldHVybiAxO1xuK1x0LypcbitcdCAqIEh5cGVyLVYgVExGUyBkb2VzIG5vdCBzcGVjaWZ5IHRoZSBiZWhhdmlvciBvZiBWTVBUUlNUIHdoZW4gZVZNQ1MgaXMgdXNlZFxuK1x0ICogYnV0IGdlbnVpbmUgSHlwZXItViBzZWVtcyB0byBiZSByZXR1cm5pbmcgZVZNQ1MgR1BBLlxuK1x0ICovXG4rXHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh0b192bXgodmNwdSkpKVxuK1x0XHRjdXJyZW50X3ZtcHRyID0gdG9fdm14KHZjcHUpLVx1MDAzZW5lc3RlZC5odl9ldm1jc192bXB0cjtcbitcdGVsc2VcbitcdFx0Y3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS1cdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0cjtcbiBcbiBcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIGV4aXRfcXVhbCwgaW5zdHJfaW5mbyxcbiBcdFx0XHRcdHRydWUsIHNpemVvZihncGFfdCksIFx1MDAyNmd2YSkpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oXG5pbmRleCA5MGZmZmFmOTE1OTU4Li5lMjE3OGE2NjgzY2E5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmhcbkBAIC0zMjUsOSArMzI1LDYgQEAgc3RhdGljIGlubGluZSBpbnQgdm1wdHJsZCh1NjQgdm1jc19wYSlcbiB7XG4gXHR1OCByZXQ7XG4gXG4tXHRpZiAoZW5hYmxlX2V2bWNzKVxuLVx0XHRyZXR1cm4gLTE7XG4tXG4gXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyAoXCJ2bXB0cmxkICVbcGFdOyBzZXRuYSAlW3JldF1cIlxuIFx0XHQ6IFtyZXRdXCI9cm1cIihyZXQpXG4gXHRcdDogW3BhXVwibVwiKHZtY3NfcGEpXG5AQCAtMzQxLDkgKzMzOCw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IHZtcHRyc3QodTY0ICp2YWx1ZSlcbiBcdHU2NCB0bXA7XG4gXHR1OCByZXQ7XG4gXG4tXHRpZiAoZW5hYmxlX2V2bWNzKVxuLVx0XHRyZXR1cm4gZXZtY3Nfdm1wdHJzdCh2YWx1ZSk7XG4tXG4gXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcInZtcHRyc3QgJVt2YWx1ZV07IHNldG5hICVbcmV0XVwiXG4gXHRcdDogW3ZhbHVlXVwiPW1cIih0bXApLCBbcmV0XVwiPXJtXCIocmV0KVxuIFx0XHQ6IDogXCJjY1wiLCBcIm1lbW9yeVwiKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl9ldm1jcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfZXZtY3MuY1xuaW5kZXggYzdmYTExNGFlZTIwZi4uNmE2ZDk0MGE3ODkxOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X2V2bWNzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X2V2bWNzLmNcbkBAIC0xOCwxMiArMTgsMTYgQEBcbiAjaW5jbHVkZSBcImh5cGVydi5oXCJcbiAjaW5jbHVkZSBcInZteC5oXCJcbiBcbisjZGVmaW5lIFZNTEFVTkNIX0lOU05fU0laRSAzXG4rI2RlZmluZSBWTVBUUkxEX0lOU05fU0laRSA1XG4rXG4gc3RhdGljIGludCB1ZF9jb3VudDtcbitzdGF0aWMgaW50IHVkX2luc25fc2tpcF9zaXplO1xuIFxuIHN0YXRpYyB2b2lkIGd1ZXN0X3VkX2hhbmRsZXIoc3RydWN0IGV4X3JlZ3MgKnJlZ3MpXG4ge1xuIFx0dWRfY291bnQrKztcbi1cdHJlZ3MtXHUwMDNlcmlwICs9IDM7IC8qIFZNTEFVTkNIICovXG4rXHRyZWdzLVx1MDAzZXJpcCArPSB1ZF9pbnNuX3NraXBfc2l6ZTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZ3Vlc3Rfbm1pX2hhbmRsZXIoc3RydWN0IGV4X3JlZ3MgKnJlZ3MpXG5AQCAtOTUsMTYgKzk5LDE1IEBAIHZvaWQgZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMsIHN0cnVjdCBoeXBlcnZfdGVzdF9wYWdlcyAqaHZfcGFnZXMsXG4gXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTtcbiBcdEdVRVNUX1NZTkMoMyk7XG4gXHRHVUVTVF9BU1NFUlQobG9hZF9ldm1jcyhodl9wYWdlcykpO1xuLVx0R1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gaHZfcGFnZXMtXHUwMDNlZW5saWdodGVuZWRfdm1jc19ncGEpO1xuK1x0LyogVk1QVFJTVCByZXR1cm5zIC0xIHVudGlsIFZNTEFVTkNIIHdpdGggZVZNQ1MgcHRyIHNldCAqL1xuK1x0R1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gLTEpO1xuIFxuIFx0R1VFU1RfU1lOQyg0KTtcbi1cdEdVRVNUX0FTU0VSVCh2bXB0cnN0eigpID09IGh2X3BhZ2VzLVx1MDAzZWVubGlnaHRlbmVkX3ZtY3NfZ3BhKTtcbiBcbiBcdHByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUsXG4gXHRcdCAgICAgXHUwMDI2bDJfZ3Vlc3Rfc3RhY2tbTDJfR1VFU1RfU1RBQ0tfU0laRV0pO1xuIFxuIFx0R1VFU1RfU1lOQyg1KTtcbi1cdEdVRVNUX0FTU0VSVCh2bXB0cnN0eigpID09IGh2X3BhZ2VzLVx1MDAzZWVubGlnaHRlbmVkX3ZtY3NfZ3BhKTtcbiBcdGN1cnJlbnRfZXZtY3MtXHUwMDNlcmV2aXNpb25faWQgPSAtMXU7XG4gXHRHVUVTVF9BU1NFUlQodm1sYXVuY2goKSk7XG4gXHRjdXJyZW50X2V2bWNzLVx1MDAzZXJldmlzaW9uX2lkID0gRVZNQ1NfVkVSU0lPTjtcbkBAIC0xODMsMTAgKzE4NiwxNSBAQCB2b2lkIGd1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzLCBzdHJ1Y3QgaHlwZXJ2X3Rlc3RfcGFnZXMgKmh2X3BhZ2VzLFxuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7XG4gXHRHVUVTVF9TWU5DKDExKTtcbiBcbitcdHVkX2luc25fc2tpcF9zaXplID0gVk1QVFJMRF9JTlNOX1NJWkU7XG4rXHR2bXB0cmxkKGh2X3BhZ2VzLVx1MDAzZWVubGlnaHRlbmVkX3ZtY3NfZ3BhKTtcbitcdEdVRVNUX0FTU0VSVCh1ZF9jb3VudCA9PSAxKTtcbitcbiBcdC8qIFRyeSBlbmxpZ2h0ZW5lZCB2bXB0cmxkIHdpdGggYW4gaW5jb3JyZWN0IEdQQSAqL1xuK1x0dWRfaW5zbl9za2lwX3NpemUgPSBWTUxBVU5DSF9JTlNOX1NJWkU7XG4gXHRldm1jc192bXB0cmxkKDB4ZGVhZGJlZWYsIGh2X3BhZ2VzLVx1MDAzZWVubGlnaHRlbmVkX3ZtY3MpO1xuIFx0R1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpO1xuLVx0R1VFU1RfQVNTRVJUKHVkX2NvdW50ID09IDEpO1xuK1x0R1VFU1RfQVNTRVJUKHVkX2NvdW50ID09IDIpO1xuIFx0R1VFU1RfRE9ORSgpO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE3OjI2OjI4LjUyMDE3NjAwNVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTM3NjExODUxNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEtWTSBOZXN0ZWQgVk1YIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0d2Vha2luZyBLVk0ncyBuZXN0ZWQgVk1YIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgaGFuZGxlX3ZtcHRybGRgIGFuZCBgaGFuZGxlX3ZtcHRyc3RgIGZ1bmN0aW9ucy4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhlc2UgYXJlIGxvdy1sZXZlbCBvcGVyYXRpb25zLCBzbyBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW1wbGljYXRpb25zLlxuXG5JbiBgaGFuZGxlX3ZtcHRybGRgLCB0aGUgY29kZSBub3cgZG9lcyBzb21ldGhpbmcgaW50ZXJlc3Rpbmcgd2hlbiBgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpYCBpcyB0cnVlLiBCZWZvcmUsIGl0IHdvdWxkIGp1c3QgcmV0dXJuIDEsIHdoaWNoIGVmZmVjdGl2ZWx5IG1lYW50IFwiZG8gbm90aGluZ1wiIGluIHRoYXQgY2FzZS4gTm93LCBpdCBxdWV1ZXMgYSBVRCAoVW5kZWZpbmVkIEluc3RydWN0aW9uKSBleGNlcHRpb24uIFRoYXQncyBhIGRlZmluaXRlIGNoYW5nZSBpbiBiZWhhdmlvciBhbmQgc3VnZ2VzdHMgdGhhdCBhbiBpbnZhbGlkIG9wZXJhdGlvbiBvciBhIG1pc3VzZSBvZiBhbiBlVk1DUyBwb2ludGVyIGlzIGJlaW5nIGRldGVjdGVkLiBJdCdzIGdvb2QgdG8gZm9yY2UgdGhlIGd1ZXN0IHRvIGhhbmRsZSB0aGUgZXJyb3IgcHJvcGVybHksIHJhdGhlciB0aGFuIHNpbGVudGx5IGZhaWxpbmcuXG5cbmBoYW5kbGVfdm1wdHJzdGAgaXMgbW9yZSBpbnZvbHZlZC4gUHJldmlvdXNseSwgaWYgYG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWRgIHdhcyB0cnVlLCB0aGUgZnVuY3Rpb24ganVzdCByZXR1cm5lZCAxLiBOb3csIGl0J3MgZGlmZmVyZW50LiBJdCdzIGNoZWNraW5nIGlmIHRoZSBlVk1DUyBwb2ludGVyIGlzIHZhbGlkLCBhbmQgaWYgaXQgaXMsIGl0IHNldHMgYGN1cnJlbnRfdm1wdHJgIHRvIGBodl9ldm1jc192bXB0cmAuIFRoaXMgdmFsdWUgaXMgdGhlbiB3cml0dGVuIHRvIGd1ZXN0IG1lbW9yeSB1c2luZyBga3ZtX3dyaXRlX2d1ZXN0X3ZpcnRfc3lzdGVtYC4gVGhlIGNvbW1lbnQgbWVudGlvbnMgSHlwZXItViBhbmQgaXRzIGhhbmRsaW5nLCBvciBsYWNrIHRoZXJlb2YsIG9mIFZNUFRSU1Qgd2l0aCBlVk1DUy4gTm93LCBgY3VycmVudF92bXB0cmAgY29tZXMgZnJvbSBhIHBsYWNlIGBodl9ldm1jc192bXB0cmAgdGhhdCB0aGUgZ3Vlc3QgcHJvdmlkZWQgZWFybGllciB0aHJvdWdoIGVWTUNTIHBvaW50ZXIgbG9hZC5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgYWJvdXQgcG90ZW50aWFsIHNlY3VyaXR5IGlzc3Vlcy4gSXMgdGhlcmUgYSBwb3NzaWJpbGl0eSBvZiBpbmZvcm1hdGlvbiBsZWFrYWdlPyBJcyBgaHZfZXZtY3Nfdm1wdHJgIGluaXRpYWxpemVkIHByb3Blcmx5LCBvciBjb3VsZCBpdCBjb250YWluIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwb3RlbnRpYWxseSBleHBvc2luZyBrZXJuZWwgZGF0YSB0byB0aGUgZ3Vlc3Q/IEhvd2V2ZXIsIGBodl9ldm1jc192bXB0cmAgaXMgYSBzaW1wbGUgYGdwYV90YCAoYSA2NC1iaXQgdmFsdWUgcmVwcmVzZW50aW5nIGEgR3Vlc3QgUGh5c2ljYWwgQWRkcmVzcyksIHNvIHRoYXQncyBnb29kLiBJdCdzIGEgc2luZ2xlIHZhbHVlLCBub3QgYSBzdHJ1Y3Qgd2l0aCBwYWRkaW5nLCBzbyBJIGRvbid0IHNlZSBhbnkgb2J2aW91cyBsZWFrYWdlIHJpc2tzIHRoZXJlLiBVbmxlc3MgYGh2X2V2bWNzX3ZtcHRyYCBpdHNlbGYgaXMgdW5pbml0aWFsaXplZCwgSSB0aGluayB3ZSdyZSBzYWZlLiBSZWdhcmRsZXNzLCBzaW5jZSB0aGUgZ3Vlc3QgcHJvdmlkZXMgdGhpcyBHUEEsIHRoZSBndWVzdCB3b3VsZCBiZSBwcm92aWRpbmcgd2hhdCBpcyBiZWluZyBsZWFrZWQgKGlmIGFueXRoaW5nKS5cblxuSSdsbCB1c2UgYGdyZXBwZXJgIHRvIGNvbmZpcm0gaG93IGBodl9ldm1jc192bXB0cmAgaXMgaW5pdGlhbGl6ZWQgdG8gYmUgY29tcGxldGVseSBzdXJlLiBPdmVyYWxsLCB0aGlzIHBhdGNoIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIGhhcmRlbmluZyBvZiB0aGUgbmVzdGVkIFZNWCBpbXBsZW1lbnRhdGlvbiwgYnkgcHJvcGVybHkgaGFuZGxpbmcgaW52YWxpZCBwb2ludGVyIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTIzLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjA2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6MzQ6MDIuMjgxMzY0ODkxWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDY3NjIyODc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh2X2V2bWNzX3ZtcHRyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvaHlwZXJ2Lmg9MjU9c3RhdGljIGlubGluZSBib29sIG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQoc3RydWN0IHZjcHVfdm14ICp2bXgpXFxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaC0yNi17XFxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaDoyNzpcXHRyZXR1cm4gZXZtcHRyX2lzX3ZhbGlkKHZteC1cXHUwMDNlbmVzdGVkLmh2X2V2bWNzX3ZtcHRyKTtcXG5hcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oLTI4LX1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2Lmg9MzU9c3RhdGljIGlubGluZSBib29sIG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfc2V0KHN0cnVjdCB2Y3B1X3ZteCAqdm14KVxcbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmgtMzYte1xcbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2Lmg6Mzc6XFx0cmV0dXJuIGV2bXB0cl9pc19zZXQodm14LVxcdTAwM2VuZXN0ZWQuaHZfZXZtY3Nfdm1wdHIpO1xcbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmgtMzgtfVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0yMzM9c3RhdGljIGlubGluZSB2b2lkIG5lc3RlZF9yZWxlYXNlX2V2bWNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjQwLVxcdHZteC1cXHUwMDNlbmVzdGVkLmh2X2V2bWNzID0gTlVMTDtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjI0MTpcXHR2bXgtXFx1MDAzZW5lc3RlZC5odl9ldm1jc192bXB0ciA9IEVWTVBUUl9JTlZBTElEO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjQyLVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0yNTE9c3RhdGljIGJvb2wgbmVzdGVkX2V2bWNzX2hhbmRsZV92bWNsZWFyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3Qgdm1wdHIpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTI2OC1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjI2OTpcXHRpZiAobmVzdGVkX3ZteF9ldm1jcyh2bXgpIFxcdTAwMjZcXHUwMDI2IHZtcHRyID09IHZteC1cXHUwMDNlbmVzdGVkLmh2X2V2bWNzX3ZtcHRyKVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjcwLVxcdFxcdG5lc3RlZF9yZWxlYXNlX2V2bWNzKHZjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0yMTg0PXN0YXRpYyBlbnVtIG5lc3RlZF9ldm1wdHJsZF9zdGF0dXMgbmVzdGVkX3ZteF9oYW5kbGVfZW5saWdodGVuZWRfdm1wdHJsZChcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjIwMC1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjIyMDE6XFx0aWYgKHVubGlrZWx5KGV2bWNzX2dwYSAhPSB2bXgtXFx1MDAzZW5lc3RlZC5odl9ldm1jc192bXB0cikpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTIyMDItXFx0XFx0dm14LVxcdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0ciA9IElOVkFMSURfR1BBO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yMjM5LVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MjI0MDpcXHRcXHR2bXgtXFx1MDAzZW5lc3RlZC5odl9ldm1jc192bXB0ciA9IGV2bWNzX2dwYTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTIyNDEtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTM0MTM9c3RhdGljIGJvb2wgbmVzdGVkX2dldF9ldm1jc19wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzQyMi1cXHRpZiAoZ3Vlc3RfY3B1X2NhcF9oYXNfZXZtY3ModmNwdSkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjM0MjM6XFx0ICAgIHZteC1cXHUwMDNlbmVzdGVkLmh2X2V2bWNzX3ZtcHRyID09IEVWTVBUUl9NQVBfUEVORElORykge1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzQyNC1cXHRcXHRlbnVtIG5lc3RlZF9ldm1wdHJsZF9zdGF0dXMgZXZtcHRybGRfc3RhdHVzID1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTk0NT1zdGF0aWMgaW50IGhhbmRsZV92bXB0cnN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTk2MS1cXHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh0b192bXgodmNwdSkpKVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTk2MjpcXHRcXHRjdXJyZW50X3ZtcHRyID0gdG9fdm14KHZjcHUpLVxcdTAwM2VuZXN0ZWQuaHZfZXZtY3Nfdm1wdHI7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01OTYzLVxcdGVsc2VcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9Njc1Mj1zdGF0aWMgaW50IHZteF9nZXRfbmVzdGVkX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjc4My1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjY3ODQ6XFx0XFx0XFx0LyogJ2h2X2V2bWNzX3ZtcHRyJyBjYW4gYWxzbyBiZSBFVk1QVFJfTUFQX1BFTkRJTkcgaGVyZSAqL1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjc4NS1cXHRcXHRcXHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl9zZXQodm14KSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NjkwNj1zdGF0aWMgaW50IHZteF9zZXRfbmVzdGVkX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzAxMC1cXHRcXHQgKi9cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjcwMTE6XFx0XFx0dm14LVxcdTAwM2VuZXN0ZWQuaHZfZXZtY3Nfdm1wdHIgPSBFVk1QVFJfTUFQX1BFTkRJTkc7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03MDEyLVxcdFxcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9HRVRfTkVTVEVEX1NUQVRFX1BBR0VTLCB2Y3B1KTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmg9Nzk9c3RhdGljIGlubGluZSBpbnQgdm14X2hhc192YWxpZF92bWNzMTIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaC04Mi1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oOjgzOlxcdC8qICdodl9ldm1jc192bXB0cicgY2FuIGFsc28gYmUgRVZNUFRSX01BUF9QRU5ESU5HIGhlcmUgKi9cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oLTg0LVxcdHJldHVybiB2bXgtXFx1MDAzZW5lc3RlZC5jdXJyZW50X3ZtcHRyICE9IC0xdWxsIHx8XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTQ5OTE9c3RhdGljIHZvaWQgX192bXhfdmNwdV9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTUwMDctI2lmZGVmIENPTkZJR19LVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo1MDA4OlxcdHZteC1cXHUwMDNlbmVzdGVkLmh2X2V2bWNzX3ZtcHRyID0gRVZNUFRSX0lOVkFMSUQ7XFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy01MDA5LSNlbmRpZlxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguaD03Mz1zdHJ1Y3QgbmVzdGVkX3ZteCB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5oLTE5OS0jaWZkZWYgQ09ORklHX0tWTV9IWVBFUlZcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5oOjIwMDpcXHRncGFfdCBodl9ldm1jc192bXB0cjtcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5oLTIwMS1cXHRzdHJ1Y3Qga3ZtX2hvc3RfbWFwIGh2X2V2bWNzX21hcDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6MzQ6MDUuNzQ4OTkzMzZaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA2MjA0MDM2NjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgaGFuZGxlX3ZtcHRyc3RgIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggbW9kaWZ5aW5nIGBoYW5kbGVfdm1wdHJzdGAuIFRoZSBrZXkgY2hhbmdlIGlzIHRoYXQgaXQgbm93IHJldHVybnMgYGh2X2V2bWNzX3ZtcHRyYCBpbnN0ZWFkIG9mIGp1c3QgMS4gUHJldmlvdXNseSwgcmV0dXJuaW5nIDEgd291bGQgZWZmZWN0aXZlbHkgc2tpcCB0aGUgaW5zdHJ1Y3Rpb24gd2l0aG91dCB3cml0aW5nIGFueXRoaW5nIHRvIG1lbW9yeS4gTm93LCBpdCdzIHdyaXRpbmcgc29tZXRoaW5nIOKAkyBhIGBncGFfdGAgc3BlY2lmaWNhbGx5LiBMZXQncyB1bnBhY2sgdGhpcy5cblxuYGh2X2V2bWNzX3ZtcHRyYCBpdHNlbGYgaXMgaW5pdGlhbGl6ZWQgdG8gYEVWTVBUUl9JTlZBTElEYCBkdXJpbmcgYSB2Q1BVIHJlc2V0LiBUaGVuLCBpdCdzIHVwZGF0ZWQgdG8gYGV2bWNzX2dwYWAsIHdoaWNoIGlzIGEgcGh5c2ljYWwgYWRkcmVzcyBwcm92aWRlZCBieSB0aGUgZ3Vlc3Qgd2hlbiB0aGUgZ3Vlc3QgZXhlY3V0ZXMgYW4gZW5saWdodGVuZWQgYFZNUFRSTERgIGluc3RydWN0aW9uLiBTbywgaXQncyBlc3NlbnRpYWxseSBqdXN0IGEgNjQtYml0IGludGVnZXIsIGEgZ3Vlc3QtcHJvdmlkZWQgcGh5c2ljYWwgYWRkcmVzcyB0aGF0IHdlJ3JlIHN0b3JpbmcuIENydWNpYWxseSwgaXQncyAqbm90KiBzb21lIHVuaW5pdGlhbGl6ZWQga2VybmVsIHN0cnVjdHVyZSBiZWluZyBibGluZGx5IGNvcGllZC4gVGhhdCdzIGdvb2QuXG5cblRoZXJlZm9yZSwgd2hlbiBgaGFuZGxlX3ZtcHRyc3RgIHdyaXRlcyB0aGlzIHZhbHVlIHRvIGd1ZXN0IG1lbW9yeSB1c2luZyBga3ZtX3dyaXRlX2d1ZXN0X3ZpcnRfc3lzdGVtYCBvciBhIHNpbWlsYXIgZnVuY3Rpb24sIGl0J3Mgbm90IGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBJdCdzIHNpbXBseSB3cml0aW5nIHRoZSA2NC1iaXQgaW50ZWdlciB0aGF0IHRoZSBndWVzdCAqaXRzZWxmKiBwcmV2aW91c2x5IHByb3ZpZGVkLiBUaGlzIHNlZW1zIHNhZmUgZnJvbSBhIG1lbW9yeSBsZWFrIHBlcnNwZWN0aXZlLCBhcyB0aGUgXCJzZWNyZXRcIiAodGhlIHBoeXNpY2FsIGFkZHJlc3MpIGNvbWVzIGZyb20gdGhlIGd1ZXN0J3MgaW5wdXQuIFRoZSB2dWxuZXJhYmlsaXR5IChpZiBhbnkpIGlzIGluIHRoZSBndWVzdCdzIGNvZGUuXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byBgaGFuZGxlX3ZtcHRyc3RgIGl0c2VsZiB3aXRoaW4gYGFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNgIGFuZCBtYWtlIHN1cmUgbXkgYXNzdW1wdGlvbnMgYXJlIHZhbGlkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDI1LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE3OjM1OjUxLjk1MzAzNDA3NloiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTY5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1OTQ0LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1OTQ0OlxcdC8qIEVtdWxhdGUgdGhlIFZNUFRSU1QgaW5zdHJ1Y3Rpb24gKi9cXG41OTQ1OlxcdHN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRyc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbjU5NDY6XFx0e1xcbjU5NDc6XFx0XFx0dW5zaWduZWQgbG9uZyBleGl0X3F1YWwgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcXG41OTQ4OlxcdFxcdHUzMiBpbnN0cl9pbmZvID0gdm1jc19yZWFkMzIoVk1YX0lOU1RSVUNUSU9OX0lORk8pO1xcbjU5NDk6XFx0XFx0Z3BhX3QgY3VycmVudF92bXB0cjtcXG41OTUwOlxcdFxcdHN0cnVjdCB4ODZfZXhjZXB0aW9uIGU7XFxuNTk1MTpcXHRcXHRndmFfdCBndmE7XFxuNTk1MjpcXHRcXHRpbnQgcjtcXG41OTUzOlxcdFxcbjU5NTQ6XFx0XFx0aWYgKCFuZXN0ZWRfdm14X2NoZWNrX3Blcm1pc3Npb24odmNwdSkpXFxuNTk1NTpcXHRcXHRcXHRyZXR1cm4gMTtcXG41OTU2OlxcdFxcbjU5NTc6XFx0XFx0LypcXG41OTU4OlxcdFxcdCAqIEh5cGVyLVYgVExGUyBkb2VzIG5vdCBzcGVjaWZ5IHRoZSBiZWhhdmlvciBvZiBWTVBUUlNUIHdoZW4gZVZNQ1MgaXMgdXNlZFxcbjU5NTk6XFx0XFx0ICogYnV0IGdlbnVpbmUgSHlwZXItViBzZWVtcyB0byBiZSByZXR1cm5pbmcgZVZNQ1MgR1BBLlxcbjU5NjA6XFx0XFx0ICovXFxuNTk2MTpcXHRcXHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh0b192bXgodmNwdSkpKVxcbjU5NjI6XFx0XFx0XFx0Y3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS1cXHUwMDNlbmVzdGVkLmh2X2V2bWNzX3ZtcHRyO1xcbjU5NjM6XFx0XFx0ZWxzZVxcbjU5NjQ6XFx0XFx0XFx0Y3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS1cXHUwMDNlbmVzdGVkLmN1cnJlbnRfdm1wdHI7XFxuNTk2NTpcXHRcXG41OTY2OlxcdFxcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIGV4aXRfcXVhbCwgaW5zdHJfaW5mbyxcXG41OTY3OlxcdFxcdFxcdFxcdFxcdHRydWUsIHNpemVvZihncGFfdCksIFxcdTAwMjZndmEpKVxcbjU5Njg6XFx0XFx0XFx0cmV0dXJuIDE7XFxuNTk2OTpcXHRcXHQvKiAqX3N5c3RlbSBvaywgbmVzdGVkX3ZteF9jaGVja19wZXJtaXNzaW9uIGhhcyB2ZXJpZmllZCBjcGw9MCAqL1xcbjU5NzA6XFx0XFx0ciA9IGt2bV93cml0ZV9ndWVzdF92aXJ0X3N5c3RlbSh2Y3B1LCBndmEsICh2b2lkICopXFx1MDAyNmN1cnJlbnRfdm1wdHIsXFxuNTk3MTpcXHRcXHRcXHRcXHRcXHRcXHRzaXplb2YoZ3BhX3QpLCBcXHUwMDI2ZSk7XFxuNTk3MjpcXHRcXHRpZiAociAhPSBYODZFTVVMX0NPTlRJTlVFKVxcbjU5NzM6XFx0XFx0XFx0cmV0dXJuIGt2bV9oYW5kbGVfbWVtb3J5X2ZhaWx1cmUodmNwdSwgciwgXFx1MDAyNmUpO1xcbjU5NzQ6XFx0XFxuNTk3NTpcXHRcXHRyZXR1cm4gbmVzdGVkX3ZteF9zdWNjZWVkKHZjcHUpO1xcbjU5NzY6XFx0fVxcbjU5Nzc6XFx0XFxuNTk3ODpcXHQvKiBFbXVsYXRlIHRoZSBJTlZFUFQgaW5zdHJ1Y3Rpb24gKi9cXG41OTc5OlxcdHN0YXRpYyBpbnQgaGFuZGxlX2ludmVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuNTk4MDpcXHR7XFxuNTk4MTpcXHRcXHRzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTtcXG41OTgyOlxcdFxcdHUzMiB2bXhfaW5zdHJ1Y3Rpb25faW5mbywgdHlwZXM7XFxuNTk4MzpcXHRcXHR1bnNpZ25lZCBsb25nIHR5cGUsIHJvb3RzX3RvX2ZyZWU7XFxuNTk4NDpcXHRcXHRzdHJ1Y3Qga3ZtX21tdSAqbW11O1xcbjU5ODU6XFx0XFx0Z3ZhX3QgZ3ZhO1xcbjU5ODY6XFx0XFx0c3RydWN0IHg4Nl9leGNlcHRpb24gZTtcXG41OTg3OlxcdFxcdHN0cnVjdCB7XFxuNTk4ODpcXHRcXHRcXHR1NjQgZXB0cCwgZ3BhO1xcbjU5ODk6XFx0XFx0fSBvcGVyYW5kO1xcbjU5OTA6XFx0XFx0aW50IGksIHIsIGdwcl9pbmRleDtcXG41OTkxOlxcdFxcbjU5OTI6XFx0XFx0aWYgKCEodm14LVxcdTAwM2VuZXN0ZWQubXNycy5zZWNvbmRhcnlfY3Rsc19oaWdoIFxcdTAwMjZcXG41OTkzOlxcdFxcdCAgICAgIFNFQ09OREFSWV9FWEVDX0VOQUJMRV9FUFQpIHx8XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE3OjM1OjUxLjk1MzY1NDk4NloiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTMxMTQxNDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBOZXN0ZWQgVk1YIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIGZyb20gYSBtZW1vcnkgc2FmZXR5IHBlcnNwZWN0aXZlLiBJJ3ZlIHJldmlld2VkIHRoaXMgS1ZNIHBhdGNoLCBhbmQgaGVyZSdzIG15IHRha2U6IHRoZSBrZXkgbW9kaWZpY2F0aW9uIGlzIHJlbGF0ZWQgdG8gdGhlIFZNUFRSTEQgYW5kIFZNUFRSU1QgaW5zdHJ1Y3Rpb25zIHdpdGhpbiB0aGUgbmVzdGVkIFZNWCBlbXVsYXRpb24sIHNwZWNpZmljYWxseSB3aGVuIGVWTUNTIGlzIGFjdGl2ZS5cblxuRmlyc3QsIEkgc2VlIHRoYXQgYGN1cnJlbnRfdm1wdHJgIOKAkyB3aGljaCBpcyBhIGBncGFfdGAsIGEgc3RyYWlnaHQgNjQtYml0IHVuc2lnbmVkIGludGVnZXIgcmVwcmVzZW50aW5nIGEgR3Vlc3QgUGh5c2ljYWwgQWRkcmVzcyDigJMgaXMgYmVpbmcgd3JpdHRlbiB0byBndWVzdCBtZW1vcnkgdXNpbmcgYGt2bV93cml0ZV9ndWVzdF92aXJ0X3N5c3RlbWAuIENyaXRpY2FsbHksIHRoaXMgYGdwYV90YCBpcyAqZnVsbHkqIGluaXRpYWxpemVkIGJlZm9yZSB0aGUgd3JpdGUgYW5kIGl0IGhhcyBubyBpbnRlcm5hbCBwYWRkaW5nLiBUaGlzIG1lYW5zIHdlJ3JlIG5vdCBkZWFsaW5nIHdpdGggYSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGNodW5rIG9mIG1lbW9yeSBiZWluZyBsZWFrZWQuIFRoZSBgaWYvZWxzZWAgYmxvY2sgY2xlYXJseSBoYW5kbGVzIHRoZSBpbml0aWFsaXphdGlvbi4gTm8gbWVtb3J5IGxlYWtzIGhlcmUuXG5cblNlY29uZCwgdGhlIHBhdGNoIG1vZGlmaWVzIGBoYW5kbGVfdm1wdHJsZGAgdG8gcXVldWUgYSAjVUQgZXhjZXB0aW9uIGluc3RlYWQgb2YganVzdCByZXR1cm5pbmcuIFRoaXMgY2hhbmdlIGluIGNvbnRyb2wgZmxvdyBkb2Vzbid0IHRvdWNoIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhdCBhbGwsIGFuZCB0aGF0IHBhcnQgaXMgc2ltcGxlIGVub3VnaC5cblxuVGhlIHJlbWFpbmRlciBvZiB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgc29sZWx5IGZvY3VzZWQgb24gc2VsZnRlc3RzLiBGcm9tIHRoZSBkZXNjcmlwdGlvbiwgSSBkb24ndCBzZWUgYW55dGhpbmcgc3VzcGljaW91cyB0aGVyZSwgZWl0aGVyLlxuXG5JbiBlc3NlbmNlLCB0aGlzIHBhdGNoIGludHJvZHVjZXMgbm8gKm5ldyogYXZlbnVlcyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBXZSdyZSBqdXN0IGFsdGVyaW5nIHRoZSBiZWhhdmlvciBvZiB0aG9zZSB0d28gVk1YIGluc3RydWN0aW9ucy4gU3RhbmRhcmQgS0FTQU4gc2hvdWxkIGhhbmRsZSBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgaW4gdGhlIG1vZGlmaWVkIGNvZGUuXG5cblRoZXJlZm9yZSwgZ2l2ZW4gbXkgdW5kZXJzdGFuZGluZywgSSdtIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYC4gVGhpcyBsb29rcyBzYWZlIGZyb20gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcGVyc3BlY3RpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MjAsIk91dHB1dFRva2VucyI6MjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6MzU6NTkuODg0ODAwMjc5WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyNzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0ncyBuZXN0ZWQgVk1YIGVtdWxhdGlvbiBmb3IgdGhlIFZNUFRSTEQgYW5kIFZNUFRSU1QgaW5zdHJ1Y3Rpb25zIHdoZW4gRW5saWdodGVuZWQgVk1DUyAoZVZNQ1MpIGlzIHVzZWQuIEluIGBoYW5kbGVfdm1wdHJzdGAsIGl0IGNoYW5nZXMgdGhlIGNvZGUgdG8gd3JpdGUgdGhlIGBodl9ldm1jc192bXB0cmAgKGEgNjQtYml0IGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MpIHRvIGd1ZXN0IG1lbW9yeSBpbnN0ZWFkIG9mIHNraXBwaW5nIHRoZSBpbnN0cnVjdGlvbi4gU2luY2UgYGh2X2V2bWNzX3ZtcHRyYCBpcyBhIGZ1bGx5IGluaXRpYWxpemVkIDY0LWJpdCBpbnRlZ2VyIChgZ3BhX3RgKSB3aXRob3V0IGFueSBwYWRkaW5nLCB3cml0aW5nIGl0IHRvIGd1ZXN0IG1lbW9yeSBkb2VzIG5vdCBsZWFrIGFueSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIFRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGBoYW5kbGVfdm1wdHJsZGAgdG8gcXVldWUgYSAjVUQgZXhjZXB0aW9uLCB3aGljaCBvbmx5IGFmZmVjdHMgY29udHJvbCBmbG93IGFuZCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBjb21wbGV4IHN0cnVjdHVyZXMsIG9yIHBhZGRpbmcgaW50cm9kdWNlZCB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBidWdzIGluIHRoaXMgYXJlYS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0ncyBuZXN0ZWQgVk1YIGVtdWxhdGlvbiBmb3IgdGhlIFZNUFRSTEQgYW5kIFZNUFRSU1QgaW5zdHJ1Y3Rpb25zIHdoZW4gRW5saWdodGVuZWQgVk1DUyAoZVZNQ1MpIGlzIHVzZWQuIEluIGBoYW5kbGVfdm1wdHJzdGAsIGl0IGNoYW5nZXMgdGhlIGNvZGUgdG8gd3JpdGUgdGhlIGBodl9ldm1jc192bXB0cmAgKGEgNjQtYml0IGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MpIHRvIGd1ZXN0IG1lbW9yeSBpbnN0ZWFkIG9mIHNraXBwaW5nIHRoZSBpbnN0cnVjdGlvbi4gU2luY2UgYGh2X2V2bWNzX3ZtcHRyYCBpcyBhIGZ1bGx5IGluaXRpYWxpemVkIDY0LWJpdCBpbnRlZ2VyIChgZ3BhX3RgKSB3aXRob3V0IGFueSBwYWRkaW5nLCB3cml0aW5nIGl0IHRvIGd1ZXN0IG1lbW9yeSBkb2VzIG5vdCBsZWFrIGFueSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIFRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGBoYW5kbGVfdm1wdHJsZGAgdG8gcXVldWUgYSAjVUQgZXhjZXB0aW9uLCB3aGljaCBvbmx5IGFmZmVjdHMgY29udHJvbCBmbG93IGFuZCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBjb21wbGV4IHN0cnVjdHVyZXMsIG9yIHBhZGRpbmcgaW50cm9kdWNlZCB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBidWdzIGluIHRoaXMgYXJlYS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowr4jsr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-14 16:31:40 +0000 UTC FinishedAt: 2026-08-14 17:36:02 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "5ec42d57655c690234c14aece6dd3f209778c1d8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_HYPERV" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "5ec42d57655c690234c14aece6dd3f209778c1d8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_HYPERV" ], "series_id": "539f9105-9012-49c6-ab06-a2240a458a57" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "handle_vmptrld", "handle_vmptrst" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTdtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9IWVBFUlYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoYW5kbGVfdm1wdHJsZCYjMzQ7LAogICAgJiMzNDtoYW5kbGVfdm1wdHJzdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSYjMzk7cyBuZXN0ZWQgVk1YIGVtdWxhdGlvbiBmb3IgdGhlIFZNUFRSTEQgYW5kIFZNUFRSU1QgaW5zdHJ1Y3Rpb25zIHdoZW4gRW5saWdodGVuZWQgVk1DUyAoZVZNQ1MpIGlzIHVzZWQuIEluIGBoYW5kbGVfdm1wdHJzdGAsIGl0IGNoYW5nZXMgdGhlIGNvZGUgdG8gd3JpdGUgdGhlIGBodl9ldm1jc192bXB0cmAgKGEgNjQtYml0IGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MpIHRvIGd1ZXN0IG1lbW9yeSBpbnN0ZWFkIG9mIHNraXBwaW5nIHRoZSBpbnN0cnVjdGlvbi4gU2luY2UgYGh2X2V2bWNzX3ZtcHRyYCBpcyBhIGZ1bGx5IGluaXRpYWxpemVkIDY0LWJpdCBpbnRlZ2VyIChgZ3BhX3RgKSB3aXRob3V0IGFueSBwYWRkaW5nLCB3cml0aW5nIGl0IHRvIGd1ZXN0IG1lbW9yeSBkb2VzIG5vdCBsZWFrIGFueSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIFRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGBoYW5kbGVfdm1wdHJsZGAgdG8gcXVldWUgYSAjVUQgZXhjZXB0aW9uLCB3aGljaCBvbmx5IGFmZmVjdHMgY29udHJvbCBmbG93IGFuZCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBjb21wbGV4IHN0cnVjdHVyZXMsIG9yIHBhZGRpbmcgaW50cm9kdWNlZCB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBidWdzIGluIHRoaXMgYXJlYS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJlaGF2aW9yIG9mIEtWTSBuZXN0ZWQgVk1YIHdoZW4gaGFuZGxpbmcgVk1QVFJMRCBhbmQgVk1QVFJTVCBpbnN0cnVjdGlvbnMgaW4gdGhlIHByZXNlbmNlIG9mIEh5cGVyLVYgZW5saWdodGVuZWQgVk1DUyAoZVZNQ1MpLiBTcGVjaWZpY2FsbHksIGl0IHF1ZXVlcyBhICNVRCBleGNlcHRpb24gaW5zdGVhZCBvZiBzaWxlbnRseSBpZ25vcmluZyBWTVBUUkxELCBhbmQgcmV0dXJucyB0aGUgZVZNQ1MgR1BBIGluc3RlYWQgb2YgaWdub3JpbmcgVk1QVFJTVC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIEtWTSBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6MTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzNDhjYWNmMDQxOTI0NjFiZDdlOTU2NTc1ZjFmN2U3ZmY0MDllNGUzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMTQgMTc6MTg6MDUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbmluZGV4IGRkZjZkZjdiZWU5M2IuLjBmNWU0YjQ3ZWNiMTkgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXG5AQCAtNTg3OSw2ICYjNDM7NTg3OSwxMiBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXB0cmxkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGlmICghbmVzdGVkX3ZteF9jaGVja19wZXJtaXNzaW9uKHZjcHUpKVxuIFx0XHRyZXR1cm4gMTtcbiBcbiYjNDM7XHQvKiBGb3JiaWQgbm9ybWFsIFZNUFRSTEQgaWYgRW5saWdodGVuZWQgdmVyc2lvbiB3YXMgdXNlZCAqL1xuJiM0MztcdGlmIChuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkpIHtcbiYjNDM7XHRcdGt2bV9xdWV1ZV9leGNlcHRpb24odmNwdSwgVURfVkVDVE9SKTtcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAobmVzdGVkX3ZteF9nZXRfdm1wdHIodmNwdSwgXHUwMDI2dm1wdHIsIFx1MDAyNnIpKVxuIFx0XHRyZXR1cm4gcjtcbiBcbkBAIC01ODg4LDEwICYjNDM7NTg5NCw2IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRybGQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKHZtcHRyID09IHZteC1cdTAwM2VuZXN0ZWQudm14b25fcHRyKVxuIFx0XHRyZXR1cm4gbmVzdGVkX3ZteF9mYWlsKHZjcHUsIFZNWEVSUl9WTVBUUkxEX1ZNWE9OX1BPSU5URVIpO1xuIFxuLVx0LyogRm9yYmlkIG5vcm1hbCBWTVBUUkxEIGlmIEVubGlnaHRlbmVkIHZlcnNpb24gd2FzIHVzZWQgKi9cbi1cdGlmIChuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkpXG4tXHRcdHJldHVybiAxO1xuLVxuIFx0aWYgKHZteC1cdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0ciAhPSB2bXB0cikge1xuIFx0XHRzdHJ1Y3QgZ2ZuX3RvX2h2YV9jYWNoZSAqZ2hjID0gXHUwMDI2dm14LVx1MDAzZW5lc3RlZC52bWNzMTJfY2FjaGU7XG4gXHRcdHN0cnVjdCB2bWNzX2hkciBoZHI7XG5AQCAtNTk0NCw3ICYjNDM7NTk0Niw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRyc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXHR1MzIgaW5zdHJfaW5mbyA9IHZtY3NfcmVhZDMyKFZNWF9JTlNUUlVDVElPTl9JTkZPKTtcbi1cdGdwYV90IGN1cnJlbnRfdm1wdHIgPSB0b192bXgodmNwdSktXHUwMDNlbmVzdGVkLmN1cnJlbnRfdm1wdHI7XG4mIzQzO1x0Z3BhX3QgY3VycmVudF92bXB0cjtcbiBcdHN0cnVjdCB4ODZfZXhjZXB0aW9uIGU7XG4gXHRndmFfdCBndmE7XG4gXHRpbnQgcjtcbkBAIC01OTUyLDggJiM0Mzs1OTU0LDE0IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRyc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKCFuZXN0ZWRfdm14X2NoZWNrX3Blcm1pc3Npb24odmNwdSkpXG4gXHRcdHJldHVybiAxO1xuIFxuLVx0aWYgKHVubGlrZWx5KG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodG9fdm14KHZjcHUpKSkpXG4tXHRcdHJldHVybiAxO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSHlwZXItViBUTEZTIGRvZXMgbm90IHNwZWNpZnkgdGhlIGJlaGF2aW9yIG9mIFZNUFRSU1Qgd2hlbiBlVk1DUyBpcyB1c2VkXG4mIzQzO1x0ICogYnV0IGdlbnVpbmUgSHlwZXItViBzZWVtcyB0byBiZSByZXR1cm5pbmcgZVZNQ1MgR1BBLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHRvX3ZteCh2Y3B1KSkpXG4mIzQzO1x0XHRjdXJyZW50X3ZtcHRyID0gdG9fdm14KHZjcHUpLVx1MDAzZW5lc3RlZC5odl9ldm1jc192bXB0cjtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRjdXJyZW50X3ZtcHRyID0gdG9fdm14KHZjcHUpLVx1MDAzZW5lc3RlZC5jdXJyZW50X3ZtcHRyO1xuIFxuIFx0aWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgZXhpdF9xdWFsLCBpbnN0cl9pbmZvLFxuIFx0XHRcdFx0dHJ1ZSwgc2l6ZW9mKGdwYV90KSwgXHUwMDI2Z3ZhKSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmhcbmluZGV4IDkwZmZmYWY5MTU5NTguLmUyMTc4YTY2ODNjYTkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaFxuQEAgLTMyNSw5ICYjNDM7MzI1LDYgQEAgc3RhdGljIGlubGluZSBpbnQgdm1wdHJsZCh1NjQgdm1jc19wYSlcbiB7XG4gXHR1OCByZXQ7XG4gXG4tXHRpZiAoZW5hYmxlX2V2bWNzKVxuLVx0XHRyZXR1cm4gLTE7XG4tXG4gXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyAoXCYjMzQ7dm1wdHJsZCAlW3BhXTsgc2V0bmEgJVtyZXRdXCYjMzQ7XG4gXHRcdDogW3JldF1cJiMzNDs9cm1cJiMzNDsocmV0KVxuIFx0XHQ6IFtwYV1cJiMzNDttXCYjMzQ7KHZtY3NfcGEpXG5AQCAtMzQxLDkgJiM0MzszMzgsNiBAQCBzdGF0aWMgaW5saW5lIGludCB2bXB0cnN0KHU2NCAqdmFsdWUpXG4gXHR1NjQgdG1wO1xuIFx0dTggcmV0O1xuIFxuLVx0aWYgKGVuYWJsZV9ldm1jcylcbi1cdFx0cmV0dXJuIGV2bWNzX3ZtcHRyc3QodmFsdWUpO1xuLVxuIFx0X19hc21fXyBfX3ZvbGF0aWxlX18oXCYjMzQ7dm1wdHJzdCAlW3ZhbHVlXTsgc2V0bmEgJVtyZXRdXCYjMzQ7XG4gXHRcdDogW3ZhbHVlXVwmIzM0Oz1tXCYjMzQ7KHRtcCksIFtyZXRdXCYjMzQ7PXJtXCYjMzQ7KHJldClcbiBcdFx0OiA6IFwmIzM0O2NjXCYjMzQ7LCBcJiMzNDttZW1vcnlcJiMzNDspO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X2V2bWNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl9ldm1jcy5jXG5pbmRleCBjN2ZhMTE0YWVlMjBmLi42YTZkOTQwYTc4OTE4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfZXZtY3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfZXZtY3MuY1xuQEAgLTE4LDEyICYjNDM7MTgsMTYgQEBcbiAjaW5jbHVkZSBcJiMzNDtoeXBlcnYuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3ZteC5oXCYjMzQ7XG4gXG4mIzQzOyNkZWZpbmUgVk1MQVVOQ0hfSU5TTl9TSVpFIDNcbiYjNDM7I2RlZmluZSBWTVBUUkxEX0lOU05fU0laRSA1XG4mIzQzO1xuIHN0YXRpYyBpbnQgdWRfY291bnQ7XG4mIzQzO3N0YXRpYyBpbnQgdWRfaW5zbl9za2lwX3NpemU7XG4gXG4gc3RhdGljIHZvaWQgZ3Vlc3RfdWRfaGFuZGxlcihzdHJ1Y3QgZXhfcmVncyAqcmVncylcbiB7XG4gXHR1ZF9jb3VudCYjNDM7JiM0Mzs7XG4tXHRyZWdzLVx1MDAzZXJpcCAmIzQzOz0gMzsgLyogVk1MQVVOQ0ggKi9cbiYjNDM7XHRyZWdzLVx1MDAzZXJpcCAmIzQzOz0gdWRfaW5zbl9za2lwX3NpemU7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGd1ZXN0X25taV9oYW5kbGVyKHN0cnVjdCBleF9yZWdzICpyZWdzKVxuQEAgLTk1LDE2ICYjNDM7OTksMTUgQEAgdm9pZCBndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcywgc3RydWN0IGh5cGVydl90ZXN0X3BhZ2VzICpodl9wYWdlcyxcbiBcdEdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpO1xuIFx0R1VFU1RfU1lOQygzKTtcbiBcdEdVRVNUX0FTU0VSVChsb2FkX2V2bWNzKGh2X3BhZ2VzKSk7XG4tXHRHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSBodl9wYWdlcy1cdTAwM2VlbmxpZ2h0ZW5lZF92bWNzX2dwYSk7XG4mIzQzO1x0LyogVk1QVFJTVCByZXR1cm5zIC0xIHVudGlsIFZNTEFVTkNIIHdpdGggZVZNQ1MgcHRyIHNldCAqL1xuJiM0MztcdEdVRVNUX0FTU0VSVCh2bXB0cnN0eigpID09IC0xKTtcbiBcbiBcdEdVRVNUX1NZTkMoNCk7XG4tXHRHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSBodl9wYWdlcy1cdTAwM2VlbmxpZ2h0ZW5lZF92bWNzX2dwYSk7XG4gXG4gXHRwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlLFxuIFx0XHQgICAgIFx1MDAyNmwyX2d1ZXN0X3N0YWNrW0wyX0dVRVNUX1NUQUNLX1NJWkVdKTtcbiBcbiBcdEdVRVNUX1NZTkMoNSk7XG4tXHRHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSBodl9wYWdlcy1cdTAwM2VlbmxpZ2h0ZW5lZF92bWNzX2dwYSk7XG4gXHRjdXJyZW50X2V2bWNzLVx1MDAzZXJldmlzaW9uX2lkID0gLTF1O1xuIFx0R1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpO1xuIFx0Y3VycmVudF9ldm1jcy1cdTAwM2VyZXZpc2lvbl9pZCA9IEVWTUNTX1ZFUlNJT047XG5AQCAtMTgzLDEwICYjNDM7MTg2LDE1IEBAIHZvaWQgZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMsIHN0cnVjdCBoeXBlcnZfdGVzdF9wYWdlcyAqaHZfcGFnZXMsXG4gXHRHVUVTVF9BU1NFUlQodm1yZWFkeihWTV9FWElUX1JFQVNPTikgPT0gRVhJVF9SRUFTT05fVk1DQUxMKTtcbiBcdEdVRVNUX1NZTkMoMTEpO1xuIFxuJiM0MztcdHVkX2luc25fc2tpcF9zaXplID0gVk1QVFJMRF9JTlNOX1NJWkU7XG4mIzQzO1x0dm1wdHJsZChodl9wYWdlcy1cdTAwM2VlbmxpZ2h0ZW5lZF92bWNzX2dwYSk7XG4mIzQzO1x0R1VFU1RfQVNTRVJUKHVkX2NvdW50ID09IDEpO1xuJiM0MztcbiBcdC8qIFRyeSBlbmxpZ2h0ZW5lZCB2bXB0cmxkIHdpdGggYW4gaW5jb3JyZWN0IEdQQSAqL1xuJiM0MztcdHVkX2luc25fc2tpcF9zaXplID0gVk1MQVVOQ0hfSU5TTl9TSVpFO1xuIFx0ZXZtY3Nfdm1wdHJsZCgweGRlYWRiZWVmLCBodl9wYWdlcy1cdTAwM2VlbmxpZ2h0ZW5lZF92bWNzKTtcbiBcdEdVRVNUX0FTU0VSVCh2bWxhdW5jaCgpKTtcbi1cdEdVRVNUX0FTU0VSVCh1ZF9jb3VudCA9PSAxKTtcbiYjNDM7XHRHVUVTVF9BU1NFUlQodWRfY291bnQgPT0gMik7XG4gXHRHVUVTVF9ET05FKCk7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjE4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjhtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9IWVBFUlYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoYW5kbGVfdm1wdHJsZCYjMzQ7LAogICAgJiMzNDtoYW5kbGVfdm1wdHJzdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgS1ZNIG5lc3RlZCBWTVggd2hlbiBoYW5kbGluZyBWTVBUUkxEIGFuZCBWTVBUUlNUIGluc3RydWN0aW9ucyBpbiB0aGUgcHJlc2VuY2Ugb2YgSHlwZXItViBlbmxpZ2h0ZW5lZCBWTUNTIChlVk1DUykuIFNwZWNpZmljYWxseSwgaXQgcXVldWVzIGEgI1VEIGV4Y2VwdGlvbiBpbnN0ZWFkIG9mIHNpbGVudGx5IGlnbm9yaW5nIFZNUFRSTEQsIGFuZCByZXR1cm5zIHRoZSBlVk1DUyBHUEEgaW5zdGVhZCBvZiBpZ25vcmluZyBWTVBUUlNULiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgS1ZNIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM0OGNhY2YwNDE5MjQ2MWJkN2U5NTY1NzVmMWY3ZTdmZjQwOWU0ZTMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAxNCAxNzoxODowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jCmluZGV4IGRkZjZkZjdiZWU5M2IuLjBmNWU0YjQ3ZWNiMTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYwpAQCAtNTg3OSw2ICYjNDM7NTg3OSwxMiBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXB0cmxkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpZiAoIW5lc3RlZF92bXhfY2hlY2tfcGVybWlzc2lvbih2Y3B1KSkKIAkJcmV0dXJuIDE7CiAKJiM0MzsJLyogRm9yYmlkIG5vcm1hbCBWTVBUUkxEIGlmIEVubGlnaHRlbmVkIHZlcnNpb24gd2FzIHVzZWQgKi8KJiM0MzsJaWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSkgewomIzQzOwkJa3ZtX3F1ZXVlX2V4Y2VwdGlvbih2Y3B1LCBVRF9WRUNUT1IpOwomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CX0KJiM0MzsKIAlpZiAobmVzdGVkX3ZteF9nZXRfdm1wdHIodmNwdSwgJmFtcDt2bXB0ciwgJmFtcDtyKSkKIAkJcmV0dXJuIHI7CiAKQEAgLTU4ODgsMTAgJiM0Mzs1ODk0LDYgQEAgc3RhdGljIGludCBoYW5kbGVfdm1wdHJsZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJaWYgKHZtcHRyID09IHZteC0mZ3Q7bmVzdGVkLnZteG9uX3B0cikKIAkJcmV0dXJuIG5lc3RlZF92bXhfZmFpbCh2Y3B1LCBWTVhFUlJfVk1QVFJMRF9WTVhPTl9QT0lOVEVSKTsKIAotCS8qIEZvcmJpZCBub3JtYWwgVk1QVFJMRCBpZiBFbmxpZ2h0ZW5lZCB2ZXJzaW9uIHdhcyB1c2VkICovCi0JaWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSkKLQkJcmV0dXJuIDE7Ci0KIAlpZiAodm14LSZndDtuZXN0ZWQuY3VycmVudF92bXB0ciAhPSB2bXB0cikgewogCQlzdHJ1Y3QgZ2ZuX3RvX2h2YV9jYWNoZSAqZ2hjID0gJmFtcDt2bXgtJmd0O25lc3RlZC52bWNzMTJfY2FjaGU7CiAJCXN0cnVjdCB2bWNzX2hkciBoZHI7CkBAIC01OTQ0LDcgJiM0Mzs1OTQ2LDcgQEAgc3RhdGljIGludCBoYW5kbGVfdm1wdHJzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJdW5zaWduZWQgbG9uZyBleGl0X3F1YWwgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTsKIAl1MzIgaW5zdHJfaW5mbyA9IHZtY3NfcmVhZDMyKFZNWF9JTlNUUlVDVElPTl9JTkZPKTsKLQlncGFfdCBjdXJyZW50X3ZtcHRyID0gdG9fdm14KHZjcHUpLSZndDtuZXN0ZWQuY3VycmVudF92bXB0cjsKJiM0MzsJZ3BhX3QgY3VycmVudF92bXB0cjsKIAlzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBlOwogCWd2YV90IGd2YTsKIAlpbnQgcjsKQEAgLTU5NTIsOCAmIzQzOzU5NTQsMTQgQEAgc3RhdGljIGludCBoYW5kbGVfdm1wdHJzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJaWYgKCFuZXN0ZWRfdm14X2NoZWNrX3Blcm1pc3Npb24odmNwdSkpCiAJCXJldHVybiAxOwogCi0JaWYgKHVubGlrZWx5KG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodG9fdm14KHZjcHUpKSkpCi0JCXJldHVybiAxOwomIzQzOwkvKgomIzQzOwkgKiBIeXBlci1WIFRMRlMgZG9lcyBub3Qgc3BlY2lmeSB0aGUgYmVoYXZpb3Igb2YgVk1QVFJTVCB3aGVuIGVWTUNTIGlzIHVzZWQKJiM0MzsJICogYnV0IGdlbnVpbmUgSHlwZXItViBzZWVtcyB0byBiZSByZXR1cm5pbmcgZVZNQ1MgR1BBLgomIzQzOwkgKi8KJiM0MzsJaWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodG9fdm14KHZjcHUpKSkKJiM0MzsJCWN1cnJlbnRfdm1wdHIgPSB0b192bXgodmNwdSktJmd0O25lc3RlZC5odl9ldm1jc192bXB0cjsKJiM0MzsJZWxzZQomIzQzOwkJY3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS0mZ3Q7bmVzdGVkLmN1cnJlbnRfdm1wdHI7CiAKIAlpZiAoZ2V0X3ZteF9tZW1fYWRkcmVzcyh2Y3B1LCBleGl0X3F1YWwsIGluc3RyX2luZm8sCiAJCQkJdHJ1ZSwgc2l6ZW9mKGdwYV90KSwgJmFtcDtndmEpKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oCmluZGV4IDkwZmZmYWY5MTU5NTguLmUyMTc4YTY2ODNjYTkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmgKQEAgLTMyNSw5ICYjNDM7MzI1LDYgQEAgc3RhdGljIGlubGluZSBpbnQgdm1wdHJsZCh1NjQgdm1jc19wYSkKIHsKIAl1OCByZXQ7CiAKLQlpZiAoZW5hYmxlX2V2bWNzKQotCQlyZXR1cm4gLTE7Ci0KIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoJiMzNDt2bXB0cmxkICVbcGFdOyBzZXRuYSAlW3JldF0mIzM0OwogCQk6IFtyZXRdJiMzNDs9cm0mIzM0OyhyZXQpCiAJCTogW3BhXSYjMzQ7bSYjMzQ7KHZtY3NfcGEpCkBAIC0zNDEsOSAmIzQzOzMzOCw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IHZtcHRyc3QodTY0ICp2YWx1ZSkKIAl1NjQgdG1wOwogCXU4IHJldDsKIAotCWlmIChlbmFibGVfZXZtY3MpCi0JCXJldHVybiBldm1jc192bXB0cnN0KHZhbHVlKTsKLQogCV9fYXNtX18gX192b2xhdGlsZV9fKCYjMzQ7dm1wdHJzdCAlW3ZhbHVlXTsgc2V0bmEgJVtyZXRdJiMzNDsKIAkJOiBbdmFsdWVdJiMzNDs9bSYjMzQ7KHRtcCksIFtyZXRdJiMzNDs9cm0mIzM0OyhyZXQpCiAJCTogOiAmIzM0O2NjJiMzNDssICYjMzQ7bWVtb3J5JiMzNDspOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfZXZtY3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X2V2bWNzLmMKaW5kZXggYzdmYTExNGFlZTIwZi4uNmE2ZDk0MGE3ODkxOCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfZXZtY3MuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl9ldm1jcy5jCkBAIC0xOCwxMiAmIzQzOzE4LDE2IEBACiAjaW5jbHVkZSAmIzM0O2h5cGVydi5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dm14LmgmIzM0OwogCiYjNDM7I2RlZmluZSBWTUxBVU5DSF9JTlNOX1NJWkUgMwomIzQzOyNkZWZpbmUgVk1QVFJMRF9JTlNOX1NJWkUgNQomIzQzOwogc3RhdGljIGludCB1ZF9jb3VudDsKJiM0MztzdGF0aWMgaW50IHVkX2luc25fc2tpcF9zaXplOwogCiBzdGF0aWMgdm9pZCBndWVzdF91ZF9oYW5kbGVyKHN0cnVjdCBleF9yZWdzICpyZWdzKQogewogCXVkX2NvdW50JiM0MzsmIzQzOzsKLQlyZWdzLSZndDtyaXAgJiM0Mzs9IDM7IC8qIFZNTEFVTkNIICovCiYjNDM7CXJlZ3MtJmd0O3JpcCAmIzQzOz0gdWRfaW5zbl9za2lwX3NpemU7CiB9CiAKIHN0YXRpYyB2b2lkIGd1ZXN0X25taV9oYW5kbGVyKHN0cnVjdCBleF9yZWdzICpyZWdzKQpAQCAtOTUsMTYgJiM0Mzs5OSwxNSBAQCB2b2lkIGd1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzLCBzdHJ1Y3QgaHlwZXJ2X3Rlc3RfcGFnZXMgKmh2X3BhZ2VzLAogCUdVRVNUX0FTU0VSVChwcmVwYXJlX2Zvcl92bXhfb3BlcmF0aW9uKHZteF9wYWdlcykpOwogCUdVRVNUX1NZTkMoMyk7CiAJR1VFU1RfQVNTRVJUKGxvYWRfZXZtY3MoaHZfcGFnZXMpKTsKLQlHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSBodl9wYWdlcy0mZ3Q7ZW5saWdodGVuZWRfdm1jc19ncGEpOwomIzQzOwkvKiBWTVBUUlNUIHJldHVybnMgLTEgdW50aWwgVk1MQVVOQ0ggd2l0aCBlVk1DUyBwdHIgc2V0ICovCiYjNDM7CUdVRVNUX0FTU0VSVCh2bXB0cnN0eigpID09IC0xKTsKIAogCUdVRVNUX1NZTkMoNCk7Ci0JR1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gaHZfcGFnZXMtJmd0O2VubGlnaHRlbmVkX3ZtY3NfZ3BhKTsKIAogCXByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUsCiAJCSAgICAgJmFtcDtsMl9ndWVzdF9zdGFja1tMMl9HVUVTVF9TVEFDS19TSVpFXSk7CiAKIAlHVUVTVF9TWU5DKDUpOwotCUdVRVNUX0FTU0VSVCh2bXB0cnN0eigpID09IGh2X3BhZ2VzLSZndDtlbmxpZ2h0ZW5lZF92bWNzX2dwYSk7CiAJY3VycmVudF9ldm1jcy0mZ3Q7cmV2aXNpb25faWQgPSAtMXU7CiAJR1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpOwogCWN1cnJlbnRfZXZtY3MtJmd0O3JldmlzaW9uX2lkID0gRVZNQ1NfVkVSU0lPTjsKQEAgLTE4MywxMCAmIzQzOzE4NiwxNSBAQCB2b2lkIGd1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzLCBzdHJ1Y3QgaHlwZXJ2X3Rlc3RfcGFnZXMgKmh2X3BhZ2VzLAogCUdVRVNUX0FTU0VSVCh2bXJlYWR6KFZNX0VYSVRfUkVBU09OKSA9PSBFWElUX1JFQVNPTl9WTUNBTEwpOwogCUdVRVNUX1NZTkMoMTEpOwogCiYjNDM7CXVkX2luc25fc2tpcF9zaXplID0gVk1QVFJMRF9JTlNOX1NJWkU7CiYjNDM7CXZtcHRybGQoaHZfcGFnZXMtJmd0O2VubGlnaHRlbmVkX3ZtY3NfZ3BhKTsKJiM0MzsJR1VFU1RfQVNTRVJUKHVkX2NvdW50ID09IDEpOwomIzQzOwogCS8qIFRyeSBlbmxpZ2h0ZW5lZCB2bXB0cmxkIHdpdGggYW4gaW5jb3JyZWN0IEdQQSAqLwomIzQzOwl1ZF9pbnNuX3NraXBfc2l6ZSA9IFZNTEFVTkNIX0lOU05fU0laRTsKIAlldm1jc192bXB0cmxkKDB4ZGVhZGJlZWYsIGh2X3BhZ2VzLSZndDtlbmxpZ2h0ZW5lZF92bWNzKTsKIAlHVUVTVF9BU1NFUlQodm1sYXVuY2goKSk7Ci0JR1VFU1RfQVNTRVJUKHVkX2NvdW50ID09IDEpOwomIzQzOwlHVUVTVF9BU1NFUlQodWRfY291bnQgPT0gMik7CiAJR1VFU1RfRE9ORSgpOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MjYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA4MTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLVk0gTmVzdGVkIFZNWCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgS1ZNIG5lc3RlZCBWTVgsIHNwZWNpZmljYWxseSBjaGFuZ2VzIHRvIGBhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jYC4gIEl0JiMzOTtzIHRvdWNoaW5nIGBoYW5kbGVfdm1wdHJsZGAgYW5kIGBoYW5kbGVfdm1wdHJzdGAsIHdoaWNoIGFyZSBrZXkgYmVjYXVzZSB0aGV5IGRlYWwgd2l0aCBsb2FkaW5nIGFuZCBzdG9yaW5nIHRoZSBWTUNTIHBvaW50ZXIuIFRoaXMgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBuZXN0ZWQgVk1YLCBhbmQgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlbGF0ZWQgdG8gSHlwZXItViYjMzk7cyBlbmxpZ2h0ZW5lZCBWTUNTLCBvciBlVk1DUy4gVGhhdCBpbW1lZGlhdGVseSBncmFicyBteSBhdHRlbnRpb24g4oCTIHRoaXMgaXMgcmlwZSBmb3IgZnV6emluZy4KClNwZWNpZmljYWxseSwgd2l0aCBgaGFuZGxlX3ZtcHRybGRgLCBiZWZvcmUsIGlmIHRoZSBlbmxpZ2h0ZW5lZCB2ZXJzaW9uIHdhcyB1c2VkLCBpdCB3b3VsZCBqdXN0IHJldHVybiAxLiAgUmlnaHQsIGFuZCByZXR1cm5pbmcgMSBmcm9tIGEgaGFuZGxlIGZ1bmN0aW9uIGluIEtWTSB0eXBpY2FsbHkgbWVhbnMgaXQgaGFuZGxlZCB0aGUgZXhpdCwgYnV0IHRoZSBpbnN0cnVjdGlvbiBzaG91bGQgbm90IGJlIGFkdmFuY2VkLiBTbyBpdCB3b3VsZCBzcGluLCByaWdodD8gTm8sIGBuZXN0ZWRfdm14X2ZhaWxgIHJldHVybnMgMSwgYnV0IHNldHMgUkZMQUdTLiBOb3csIGhvd2V2ZXIsIHRoZSBwYXRjaCBub3cgcXVldWVzIGEgVUQgKEludmFsaWQgT3Bjb2RlKSBleGNlcHRpb24uIFRoaXMgaXMgYSBzaWduaWZpY2FudCBiZWhhdmlvcmFsIHNoaWZ0LiAgQmVmb3JlLCBpdCBtaWdodCBoYXZlIGJlZW4gYW4gaW5maW5pdGUgbG9vcCBvciBhIHNpbGVudCBmYWlsdXJlICh3aGljaCBpcyB3b3JzZSkuICBOb3cgaXQgd2lsbCBnZW5lcmF0ZSBhbiBleGNlcHRpb24uCgpBbmQgbG9va2luZyBhdCBgaGFuZGxlX3ZtcHRyc3RgLCBpdCYjMzk7cyB0aGUgc2FtZSBwYXR0ZXJuLiBQcmV2aW91c2x5LCBpdCBqdXN0IHJldHVybmVkIDEgaWYgZVZNQ1Mgd2FzIGluIHVzZSwgZWZmZWN0aXZlbHkgaWdub3JpbmcgdGhlIGluc3RydWN0aW9uLiAgTm93LCBpdCBhY3R1YWxseSByZXR1cm5zIHRoZSBlVk1DUyBHUEEgKEd1ZXN0IFBoeXNpY2FsIEFkZHJlc3MpLCB3aGljaCBhbGlnbnMgd2l0aCB0aGUgYmVoYXZpb3Igb2YgSHlwZXItVi4gSXQgc2F5cyB0aGF0ICYjMzQ7SHlwZXItViBUTEZTIGRvZXMgbm90IHNwZWNpZnkgdGhlIGJlaGF2aW9yIG9mIFZNUFRSU1Qgd2hlbiBlVk1DUyBpcyB1c2VkJiMzNDsuICBTbywgdGhleSYjMzk7cmUgbWFraW5nIGl0IEh5cGVyLVYgY29tcGxpYW50LgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGJlY2F1c2UgaXQgbW9kaWZpZXMgdGhlIGJlaGF2aW9yIG9mIGhvdyBWTVBUUkxEIGFuZCBWTVBUUlNUIGFyZSBoYW5kbGVkIGluIG5lc3RlZCBWTVggd2hlbiBlVk1DUyBpcyB1c2VkLiBTbywgdGhlIHBhdGNoIGlzIGNoYW5naW5nIGJlaGF2aW9yIHdoaWNoIG1ha2VzIGl0IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuCgpMZXQmIzM5O3MgcXVpY2tseSBpZGVudGlmeSB0aGUgcHJpbWFyeSBlbnRyeXBvaW50cy4gIEl0IGFwcGVhcnMgdGhleSBhcmUgYGhhbmRsZV92bXB0cmxkYCBhbmQgYGhhbmRsZV92bXB0cnN0YC4gTm93LCBhcmUgdGhleSBzdGF0aWM/IFllcywgdGhleSBhcmUgaW4gdGhlIGZpbGUuIERhbW4sIGl0IHNheXMgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyEgV2VsbCwgbGV0JiMzOTtzIHRyYWNlIHdoZXJlIHRoZXNlIGFyZSBjYWxsZWQgaW4gYGFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNgIHRvIHNlZSBob3cgd2UgY2FuIGV4cGxvaXQgdGhpcyBjaGFuZ2UuIFdlIGNhbiBzdGlsbCBzZWUgaG93IHRoZXkgYXJlIGNhbGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoYW5kbGVfdm1wdHJsZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTg1OT1zdGF0aWMgdm9pZCBzZXRfY3VycmVudF92bXB0cihzdHJ1Y3QgdmNwdV92bXggKnZteCwgZ3BhX3Qgdm1wdHIpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01ODcyLS8qIEVtdWxhdGUgdGhlIFZNUFRSTEQgaW5zdHJ1Y3Rpb24gKi9cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTg3MzpzdGF0aWMgaW50IGhhbmRsZV92bXB0cmxkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTg3NC17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz03NDIzPV9faW5pdCBpbnQgbmVzdGVkX3ZteF9oYXJkd2FyZV9zZXR1cChpbnQgKCpleGl0X2hhbmRsZXJzW10pKHN0cnVjdCBrdm1fdmNwdSAqKSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTc0NTUtXHRleGl0X2hhbmRsZXJzW0VYSVRfUkVBU09OX1ZNTEFVTkNIXVx0PSBoYW5kbGVfdm1sYXVuY2g7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjc0NTY6XHRleGl0X2hhbmRsZXJzW0VYSVRfUkVBU09OX1ZNUFRSTERdXHQ9IGhhbmRsZV92bXB0cmxkO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03NDU3LVx0ZXhpdF9oYW5kbGVyc1tFWElUX1JFQVNPTl9WTVBUUlNUXVx0PSBoYW5kbGVfdm1wdHJzdDtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTQ3NDQ9c3RhdGljIHUzMiB2bXhfc2Vjb25kYXJ5X2V4ZWNfY29udHJvbChzdHJ1Y3QgdmNwdV92bXggKnZteClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTQ3ODMtXHQvKiBTRUNPTkRBUllfRVhFQ19TSEFET1dfVk1DUyBpcyBlbmFibGVkIHdoZW4gTDEgZXhlY3V0ZXMgVk1QVFJMRFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo0Nzg0Olx0ICAgKGhhbmRsZV92bXB0cmxkKS5cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNDc4NS1cdCAgIFdlIGNhbiBOT1QgZW5hYmxlIHNoYWRvd192bWNzIGhlcmUgYmVjYXVzZSB3ZSBkb24mIzM5O3QgaGF2ZSB5ZXRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODE4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBFeGl0IEhhbmRsZXIgTWVjaGFuaXNtKioKCk9rYXksIHNvIHRoZXNlIGhhbmRsZXJzIGFyZSBkZWZpbml0ZWx5IHNpdHRpbmcgaW4gdGhlIGBleGl0X2hhbmRsZXJzYCBhcnJheS4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGV5JiMzOTtyZSBpbnZva2VkIHRocm91Z2ggZnVuY3Rpb24gcG9pbnRlcnMg4oCTIG5vdCBpbmxpbmVkLCB3aGljaCBoYXMgaW50ZXJlc3RpbmcgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gSSBzdGFydCBsb29raW5nIGF0IHRoZSBiaWdnZXIgcGljdHVyZS4gSG9sZCBvbuKApiBgbmVzdGVkX3ZteF9oYXJkd2FyZV9zZXR1cGAgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdGhlc2UgaGFuZGxlcnMgdXAsIHJpZ2h0PyBUaGF0JiMzOTtzIHdoZXJlIHRoZXkmIzM5O3JlIGJlaW5nIHBvcHVsYXRlZCBpbnRvIGBleGl0X2hhbmRsZXJzYC4gQWxyaWdodCwgdGltZSB0byB0cmFjZSBkb3duIHRoZSBkZWZpbml0aW9uIGFuZCB1c2FnZSBvZiBgZXhpdF9oYW5kbGVyc2AgaXRzZWxmLiBOZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dCBvZiBob3cgdGhpcyBhcnJheSBpcyBiZWluZyB1c2VkLiBXaGVyZSBpcyBpdCBkZWNsYXJlZD8gV2hlcmUgZWxzZSBpcyBpdCBhY2Nlc3NlZCBhbmQgbW9kaWZpZWQ/IEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIGZyYW1ld29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXN0ZWRfdm14X2hhcmR3YXJlX3NldHVwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz03NDEzPXZvaWQgbmVzdGVkX3ZteF9oYXJkd2FyZV91bnNldHVwKHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03NDIyLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo3NDIzOl9faW5pdCBpbnQgbmVzdGVkX3ZteF9oYXJkd2FyZV9zZXR1cChpbnQgKCpleGl0X2hhbmRsZXJzW10pKHN0cnVjdCBrdm1fdmNwdSAqKSlcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzQyNC17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaD0yMj12b2lkIG5lc3RlZF92bXhfaGFyZHdhcmVfdW5zZXR1cCh2b2lkKTtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmg6MjM6X19pbml0IGludCBuZXN0ZWRfdm14X2hhcmR3YXJlX3NldHVwKGludCAoKmV4aXRfaGFuZGxlcnNbXSkoc3RydWN0IGt2bV92Y3B1ICopKTtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmgtMjQtdm9pZCBuZXN0ZWRfdm14X3NldF92bWNzX3NoYWRvd2luZ19iaXRtYXAodm9pZCk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYz02MjE3PXN0YXRpYyBpbnQgaGFuZGxlX3ByZWVtcHRpb25fdGltZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjIzMC0gKiBXaGVuIG5lc3RlZD0wLCBhbGwgVk1YIGluc3RydWN0aW9uIFZNIEV4aXRzIGZpbHRlciBoZXJlLiAgVGhlIGhhbmRsZXJzXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjYyMzE6ICogYXJlIG92ZXJ3cml0dGVuIGJ5IG5lc3RlZF92bXhfaGFyZHdhcmVfc2V0dXAoKSB3aGVuIG5lc3RlZD0xLlxuYXJjaC94ODYva3ZtL3ZteC92bXguYy02MjMyLSAqL1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9ODU4OD1fX2luaXQgaW50IHZteF9oYXJkd2FyZV9zZXR1cCh2b2lkKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODc2OC1cdGlmIChuZXN0ZWQpIHtcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6ODc2OTpcdFx0ciA9IG5lc3RlZF92bXhfaGFyZHdhcmVfc2V0dXAoa3ZtX3ZteF9leGl0X2hhbmRsZXJzKTtcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODc3MC1cdFx0aWYgKHIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY0MwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNL0h5cGVyLVYgQ29kZSBmb3IgU3ltYm9sIFNlbGVjdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGt2bV92bXhfZXhpdF9oYW5kbGVyc2AgYW5kIHNwZWNpZmljYWxseSBgaGFuZGxlX3ZtcHRybGRgIGFuZCBgaGFuZGxlX3ZtcHRyc3RgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGVzZSBmdW5jdGlvbiBwb2ludGVycywgYXQgZmlyc3QgZ2xhbmNlLCBhcmUgZ29vZCBjYW5kaWRhdGVzIGFzIGZvY3VzIHN5bWJvbHMsIHNpbmNlIHRoZXkmIzM5O3JlICpkZWZpbml0ZWx5KiBub3QgaW5saW5lZC4gQWhhLCBidXQgd2FpdCwgSSBqdXN0IGNhdWdodCBteXNlbGYuLi4gdGhleSYjMzk7cmUgKnN0YXRpYyouIE5vdywgdGhlIHByb21wdCBzcGVjaWZpY2FsbHkgc2FpZCB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGF0IG1ha2VzIG1lIHBhdXNlIGZvciBhIHNlY29uZC4KCkhvd2V2ZXIsIHNpbmNlIHRoZWlyIGFkZHJlc3NlcyBhcmUgdGFrZW4sIGRlc3BpdGUgYmVpbmcgc3RhdGljLCB0aGV5ICp3b24mIzM5O3QqIGJlIGlubGluZWQuIFRoYXQgbWVhbnMgdGhleSB3aWxsLCBpbiBmYWN0LCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMsIGFuZCBjYW4gc3RpbGwgYmUgdXNlZC4gV2UgY291bGQgbG9vayBhdCBhbHRlcm5hdGl2ZXMgbGlrZSBgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZGAsIG9yIG1heWJlIHRoZSBvdmVyYXJjaGluZyBleGl0IGhhbmRsZXIgYHZteF9oYW5kbGVfZXhpdGAsIGJ1dCBJJiMzOTttIGhlc2l0YW50IG9uIGB2bXhfaGFuZGxlX2V4aXRgIOKAkyBpdCYjMzk7cyBhIGhvdC1wYXRoIGZ1bmN0aW9uLCBzbyBsaWtlbHkgdG9vIGdlbmVyaWMuCgpTbywgbGV0JiMzOTtzIGNvbmZpcm0uIGBoYW5kbGVfdm1wdHJsZGAgYW5kIGBoYW5kbGVfdm1wdHJzdGAuLi4geWVwLCB0aGV5JiMzOTtyZSB0aGUgZXhhY3QgZnVuY3Rpb25zIHRoYXQgYXJlIGJlaW5nIG1vZGlmaWVkLiBUaGF0IHNldHRsZXMgaXQgZm9yIG5vdy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmb3IgYm90aCBLVk0gYW5kIEh5cGVyLVYgc2V0dGluZ3MgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcmIzM5O3MgY29ycmVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVx0Ym9vbCBcJiMzNDtDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXHRib29sIFwmIzM0O0kvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgyOmNvbmZpZyBLVk1fU01NXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODMtXHRib29sIFwmIzM0O1N5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTkyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTkzOmNvbmZpZyBLVk1fSFlQRVJWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTQtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNjpjb25maWcgS1ZNX1BST1ZFX01NVVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE3LVx0Ym9vbCBcJiMzNDtQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjI4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMC1cdGJvb2xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMjpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xuYXJjaC94ODYva3ZtL0tjb25maWctMjMzLVx0aW50IFwmIzM0O01heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDI2CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBNdXNpbmdzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBmb3IgdGhpcyB2aXJ0dWFsaXphdGlvbiBzZXR1cC4gSXQmIzM5O3MgbG9va2luZyBsaWtlIGBLVk1gIGFuZCBgS1ZNX0lOVEVMYCBhcmUgZGVmaW5pdGVseSBrZXksIGdpdmVuIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggVk1YLCBzbyB0aGF0JiMzOTtzIGEgZ2l2ZW4uIE5vdywgSSBoYXZlIGEgaHVuY2ggdGhhdCBgS1ZNX0hZUEVSVmAgbWlnaHQgYmUgaW4gdGhlIG1peCwgc3BlY2lmaWNhbGx5IGJlY2F1c2Ugb2YgdGhlIG5hbWUgb2YgdGhhdCBmdW5jdGlvbiB3ZSYjMzk7cmUgbG9va2luZyBhdCwgYG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWRgLiBUaGF0IGtpbmQgb2YgaGludHMgYXQgSHlwZXItViBlbXVsYXRpb24gYmVpbmcgaW52b2x2ZWQuIExldCBtZSBkb3VibGUtY2hlY2sgdGhlIGltcGxpY2F0aW9ucyBvZiBoYXZpbmcgdGhhdCBLVk0gSHlwZXItViBmbGFnIGVuYWJsZWQsIGFuZCB3aGV0aGVyIGl0JiMzOTtzIHJlbGV2YW50IHRvIHRoZSBjdXJyZW50IHNjZW5hcmlvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oPTIwPXN0YXRpYyBpbmxpbmUgYm9vbCBldm1wdHJfaXNfdmFsaWQodTY0IGV2bXB0cilcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oLTI0LVxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaDoyNTpzdGF0aWMgaW5saW5lIGJvb2wgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZChzdHJ1Y3QgdmNwdV92bXggKnZteClcbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmgtMjYte1xuLS1cbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2Lmg9NjQ9c3RhdGljIGlubGluZSBib29sIGV2bXB0cl9pc192YWxpZCh1NjQgZXZtcHRyKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmgtNjgtXG5hcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oOjY5OnN0YXRpYyBpbmxpbmUgYm9vbCBuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHN0cnVjdCB2Y3B1X3ZteCAqdm14KVxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaC03MC17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0xOTQ9c3RhdGljIGludCBuZXN0ZWRfdm14X2ZhaWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdm1faW5zdHJ1Y3Rpb25fZXJyb3IpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yMDItXHRpZiAodm14LVx1MDAzZW5lc3RlZC5jdXJyZW50X3ZtcHRyID09IElOVkFMSURfR1BBIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoyMDM6XHQgICAgIW5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSlcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjA0LVx0XHRyZXR1cm4gbmVzdGVkX3ZteF9mYWlsSW52YWxpZCh2Y3B1KTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTIyNzQ9dm9pZCBuZXN0ZWRfc3luY192bWNzMTJfdG9fc2hhZG93KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTIyNzctXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjIyNzg6XHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yMjc5LVx0XHRjb3B5X3ZtY3MxMl90b19lbmxpZ2h0ZW5lZCh2bXgpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MjQzMT1zdGF0aWMgdm9pZCBwcmVwYXJlX3ZtY3MwMl9lYXJseShzdHJ1Y3QgdmNwdV92bXggKnZteCwgc3RydWN0IGxvYWRlZF92bWNzICp2bWNzMDEsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yNDM2LVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoyNDM3Olx0aWYgKHZteC1cdTAwM2VuZXN0ZWQuZGlydHlfdm1jczEyIHx8IG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSlcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjQzOC1cdFx0cHJlcGFyZV92bWNzMDJfZWFybHlfcmFyZSh2bXgsIHZtY3MxMik7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0yNzYwPXN0YXRpYyBpbnQgcHJlcGFyZV92bWNzMDIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgdm1jczEyICp2bWNzMTIsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yNzY3LVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoyNzY4Olx0aWYgKHZteC1cdTAwM2VuZXN0ZWQuZGlydHlfdm1jczEyIHx8IG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSkge1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yNzY5LVx0XHRwcmVwYXJlX3ZtY3MwMl9yYXJlKHZteCwgdm1jczEyKTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTI3NzEtXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjI3NzI6XHRcdGxvYWRfZ3Vlc3RfcGRwdHJzX3ZtY3MxMiA9ICFuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkgfHxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjc3My1cdFx0XHQhKGV2bWNzLVx1MDAzZWh2X2NsZWFuX2ZpZWxkcyBcdTAwMjYgSFZfVk1YX0VOTElHSFRFTkVEX0NMRUFOX0ZJRUxEX0dVRVNUX0dSUDEpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjkwMS1cdCAqL1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoyOTAyOlx0aWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSlcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjkwMy1cdFx0ZXZtY3MtXHUwMDNlaHZfY2xlYW5fZmllbGRzIHw9IEhWX1ZNWF9FTkxJR0hURU5FRF9DTEVBTl9GSUVMRF9BTEw7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0zNjI5PWVudW0gbnZteF92bWVudHJ5X3N0YXR1cyBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzc3NC1cdHZtY3MxMi1cdTAwM2V2bV9leGl0X3JlYXNvbiA9IGV4aXRfcmVhc29uLmZ1bGw7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjM3NzU6XHRpZiAoZW5hYmxlX3NoYWRvd192bWNzIHx8IG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSlcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzc3Ni1cdFx0dm14LVx1MDAzZW5lc3RlZC5uZWVkX3ZtY3MxMl90b19zaGFkb3dfc3luYyA9IHRydWU7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0zNzg0PXN0YXRpYyBpbnQgbmVzdGVkX3ZteF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxhdW5jaClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM4MDUtXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjM4MDY6XHRpZiAoQ0MoIW5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzgwNy1cdCAgICAgICB2bXgtXHUwMDNlbmVzdGVkLmN1cnJlbnRfdm1wdHIgPT0gSU5WQUxJRF9HUEEpKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzgyMC1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MzgyMTpcdGlmIChuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkpIHtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzgyMi1cdFx0c3RydWN0IGh2X2VubGlnaHRlbmVkX3ZtY3MgKmV2bWNzID0gbmVzdGVkX3ZteF9ldm1jcyh2bXgpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NDY0Mz1zdGF0aWMgdm9pZCBzeW5jX3ZtY3MwMl90b192bWNzMTIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgdm1jczEyICp2bWNzMTIpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy00NjQ2LVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo0NjQ3Olx0aWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSlcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNDY0OC1cdFx0c3luY192bWNzMDJfdG9fdm1jczEyX3JhcmUodmNwdSwgdm1jczEyKTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQ2NTAtXHR2bXgtXHUwMDNlbmVzdGVkLm5lZWRfc3luY192bWNzMDJfdG9fdm1jczEyX3JhcmUgPVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo0NjUxOlx0XHQhbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy00NjUyLVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTA2Mz12b2lkIF9fbmVzdGVkX3ZteF92bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdm1fZXhpdF9yZWFzb24sXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01MTY5LVx0aWYgKCh2bV9leGl0X3JlYXNvbiAhPSAtMSkgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjUxNzA6XHQgICAgKGVuYWJsZV9zaGFkb3dfdm1jcyB8fCBuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkpKVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01MTcxLVx0XHR2bXgtXHUwMDNlbmVzdGVkLm5lZWRfdm1jczEyX3RvX3NoYWRvd19zeW5jID0gdHJ1ZTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTU2NDY9c3RhdGljIGludCBoYW5kbGVfdm1yZWFkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU2NjUtXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjU2NjY6XHRpZiAoIW5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSkge1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01NjY3LVx0XHQvKlxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTg3Mz1zdGF0aWMgaW50IGhhbmRsZV92bXB0cmxkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU4ODItXHQvKiBGb3JiaWQgbm9ybWFsIFZNUFRSTEQgaWYgRW5saWdodGVuZWQgdmVyc2lvbiB3YXMgdXNlZCAqL1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1ODgzOlx0aWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSkge1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01ODg0LVx0XHRrdm1fcXVldWVfZXhjZXB0aW9uKHZjcHUsIFVEX1ZFQ1RPUik7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz01OTQ1PXN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRyc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTk2MC1cdCAqL1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1OTYxOlx0aWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodG9fdm14KHZjcHUpKSlcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTk2Mi1cdFx0Y3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS1cdTAwM2VuZXN0ZWQuaHZfZXZtY3Nfdm1wdHI7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz02NzUyPXN0YXRpYyBpbnQgdm14X2dldF9uZXN0ZWRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjg0MC1cdFx0aWYgKCF2bXgtXHUwMDNlbmVzdGVkLm5lZWRfdm1jczEyX3RvX3NoYWRvd19zeW5jKSB7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjY4NDE6XHRcdFx0aWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSlcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjg0Mi1cdFx0XHRcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDQ4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCB3ZW50OgoKKipFeGFtaW5pbmcgS1ZNIGFuZCBIeXBlci1WIEVtdWxhdGlvbioqCgpPa2F5LCBzbyB0aGlzIGlzIHJlbGF0ZWQgdG8gaG93IEtWTSBlbXVsYXRlcyBIeXBlci1WLCBpbnRlcmVzdGluZy4gSSBrbm93IHRoZSBiYXNpYyBjb25maWdzIHJlcXVpcmVkIGFyZSBgS1ZNYCBhbmQgYEtWTV9JTlRFTGAsIGJ1dCBJJiMzOTttIGp1c3QgY3VyaW91cyBpZiB0aGVyZSBpcyBhIGBLVk1fSFlQRVJWYCBjb25maWd1cmF0aW9uLiBJIGZlZWwgbGlrZSBJJiMzOTt2ZSBzZWVuIGl0IHNvbWV3aGVyZS4uLiBZZXMsIEkgdmFndWVseSByZWNhbGwgc3BvdHRpbmcgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhpcyBpbiBgYXJjaC94ODYva3ZtL0tjb25maWdgLiBUaW1lIHRvIGNoZWNrLiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdCBgS2NvbmZpZ2AgZmlsZSBhbmQgdGFrZSBhIGxvb2sgYXQgYEtWTV9IWVBFUlZgIHNwZWNpZmljYWxseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9IWVBFUlYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTE4Mj1jb25maWcgS1ZNX1NNTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5Mzpjb25maWcgS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4MjcKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipDb25zaWRlcmluZyBLVk0gYW5kIEh5cGVyLVYgQ29tcGF0aWJpbGl0eSoqCgpBbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIFdlIG5lZWQgdG8gZXhwbGljaXRseSBpbmNsdWRlIGRlZmluaXRpb25zIGZvciBgS1ZNYCwgYEtWTV9JTlRFTGAsIGFuZCBgS1ZNX0hZUEVSVmAuIE5vIHJlYWwgc3VycHJpc2VzIHRoZXJlLCB0aGF0JiMzOTtzIGp1c3QgZ29vZCBwcmFjdGljZSB0byBlbnN1cmUgdGhlIGJ1aWxkIGVudmlyb25tZW50IGlzIHNldCB1cCBwcm9wZXJseS4gTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgd2UgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYEtWTV9IWVBFUlZgIGlzIGluZGVlZCAqcmVxdWlyZWQqIGZvciB0aGUgYG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWRgIGZ1bmN0aW9uIHRvIHdvcmsgY29ycmVjdGx5LiBJIGFsd2F5cyBsaWtlIHRvIGVuc3VyZSBmdWxsIGFjY3VyYWN5LCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBzdXBwb3J0LiBJdCYjMzk7cyBlYXN5IHRvIG92ZXJsb29rIGEgc3VidGxlIGRlcGVuZGVuY3kgaW4gdGhlc2UgY29uZmlndXJhdGlvbnMsIGFuZCBhIHNpbXBsZSB2ZXJpZmljYXRpb24gc3RlcCBjYW4gc2F2ZSBhIGxvdCBvZiBkZWJ1Z2dpbmcgdGltZSBsYXRlci4gSnVzdCBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvaHlwZXJ2Lmg9MjA9c3RhdGljIGlubGluZSBib29sIGV2bXB0cl9pc192YWxpZCh1NjQgZXZtcHRyKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmgtMjQtXG5hcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oOjI1OnN0YXRpYyBpbmxpbmUgYm9vbCBuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHN0cnVjdCB2Y3B1X3ZteCAqdm14KVxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaC0yNi17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaD02ND1zdGF0aWMgaW5saW5lIGJvb2wgZXZtcHRyX2lzX3ZhbGlkKHU2NCBldm1wdHIpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaC02OC1cbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2Lmg6Njk6c3RhdGljIGlubGluZSBib29sIG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQoc3RydWN0IHZjcHVfdm14ICp2bXgpXG5hcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oLTcwLXtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTE5ND1zdGF0aWMgaW50IG5lc3RlZF92bXhfZmFpbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2bV9pbnN0cnVjdGlvbl9lcnJvcilcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTIwMi1cdGlmICh2bXgtXHUwMDNlbmVzdGVkLmN1cnJlbnRfdm1wdHIgPT0gSU5WQUxJRF9HUEEgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjIwMzpcdCAgICAhbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yMDQtXHRcdHJldHVybiBuZXN0ZWRfdm14X2ZhaWxJbnZhbGlkKHZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MjI3ND12b2lkIG5lc3RlZF9zeW5jX3ZtY3MxMl90b19zaGFkb3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjI3Ny1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MjI3ODpcdGlmIChuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkpXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTIyNzktXHRcdGNvcHlfdm1jczEyX3RvX2VubGlnaHRlbmVkKHZteCk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0yNDMxPXN0YXRpYyB2b2lkIHByZXBhcmVfdm1jczAyX2Vhcmx5KHN0cnVjdCB2Y3B1X3ZteCAqdm14LCBzdHJ1Y3QgbG9hZGVkX3ZtY3MgKnZtY3MwMSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTI0MzYtXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjI0Mzc6XHRpZiAodm14LVx1MDAzZW5lc3RlZC5kaXJ0eV92bWNzMTIgfHwgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yNDM4LVx0XHRwcmVwYXJlX3ZtY3MwMl9lYXJseV9yYXJlKHZteCwgdm1jczEyKTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTI3NjA9c3RhdGljIGludCBwcmVwYXJlX3ZtY3MwMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2bWNzMTIgKnZtY3MxMixcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTI3NjctXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjI3Njg6XHRpZiAodm14LVx1MDAzZW5lc3RlZC5kaXJ0eV92bWNzMTIgfHwgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKSB7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTI3NjktXHRcdHByZXBhcmVfdm1jczAyX3JhcmUodm14LCB2bWNzMTIpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjc3MS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Mjc3MjpcdFx0bG9hZF9ndWVzdF9wZHB0cnNfdm1jczEyID0gIW5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSB8fFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yNzczLVx0XHRcdCEoZXZtY3MtXHUwMDNlaHZfY2xlYW5fZmllbGRzIFx1MDAyNiBIVl9WTVhfRU5MSUdIVEVORURfQ0xFQU5fRklFTERfR1VFU1RfR1JQMSk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yOTAxLVx0ICovXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjI5MDI6XHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yOTAzLVx0XHRldm1jcy1cdTAwM2Vodl9jbGVhbl9maWVsZHMgfD0gSFZfVk1YX0VOTElHSFRFTkVEX0NMRUFOX0ZJRUxEX0FMTDtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTM2Mjk9ZW51bSBudm14X3ZtZW50cnlfc3RhdHVzIG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNzc0LVx0dm1jczEyLVx1MDAzZXZtX2V4aXRfcmVhc29uID0gZXhpdF9yZWFzb24uZnVsbDtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Mzc3NTpcdGlmIChlbmFibGVfc2hhZG93X3ZtY3MgfHwgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNzc2LVx0XHR2bXgtXHUwMDNlbmVzdGVkLm5lZWRfdm1jczEyX3RvX3NoYWRvd19zeW5jID0gdHJ1ZTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTM3ODQ9c3RhdGljIGludCBuZXN0ZWRfdm14X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbGF1bmNoKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzgwNS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MzgwNjpcdGlmIChDQyghbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zODA3LVx0ICAgICAgIHZteC1cdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0ciA9PSBJTlZBTElEX0dQQSkpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zODIwLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozODIxOlx0aWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSkge1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zODIyLVx0XHRzdHJ1Y3QgaHZfZW5saWdodGVuZWRfdm1jcyAqZXZtY3MgPSBuZXN0ZWRfdm14X2V2bWNzKHZteCk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz00NjQzPXN0YXRpYyB2b2lkIHN5bmNfdm1jczAyX3RvX3ZtY3MxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2bWNzMTIgKnZtY3MxMilcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQ2NDYtXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjQ2NDc6XHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy00NjQ4LVx0XHRzeW5jX3ZtY3MwMl90b192bWNzMTJfcmFyZSh2Y3B1LCB2bWNzMTIpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNDY1MC1cdHZteC1cdTAwM2VuZXN0ZWQubmVlZF9zeW5jX3ZtY3MwMl90b192bWNzMTJfcmFyZSA9XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjQ2NTE6XHRcdCFuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCk7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQ2NTItXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz01MDYzPXZvaWQgX19uZXN0ZWRfdm14X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2bV9leGl0X3JlYXNvbixcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTUxNjktXHRpZiAoKHZtX2V4aXRfcmVhc29uICE9IC0xKSBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTE3MDpcdCAgICAoZW5hYmxlX3NoYWRvd192bWNzIHx8IG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSkpXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTUxNzEtXHRcdHZteC1cdTAwM2VuZXN0ZWQubmVlZF92bWNzMTJfdG9fc2hhZG93X3N5bmMgPSB0cnVlO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTY0Nj1zdGF0aWMgaW50IGhhbmRsZV92bXJlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTY2NS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTY2NjpcdGlmICghbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKSB7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU2NjctXHRcdC8qXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz01ODczPXN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRybGQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTg4Mi1cdC8qIEZvcmJpZCBub3JtYWwgVk1QVFJMRCBpZiBFbmxpZ2h0ZW5lZCB2ZXJzaW9uIHdhcyB1c2VkICovXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjU4ODM6XHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKSB7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU4ODQtXHRcdGt2bV9xdWV1ZV9leGNlcHRpb24odmNwdSwgVURfVkVDVE9SKTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTU5NDU9c3RhdGljIGludCBoYW5kbGVfdm1wdHJzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01OTYwLVx0ICovXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjU5NjE6XHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh0b192bXgodmNwdSkpKVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01OTYyLVx0XHRjdXJyZW50X3ZtcHRyID0gdG9fdm14KHZjcHUpLVx1MDAzZW5lc3RlZC5odl9ldm1jc192bXB0cjtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTY3NTI9c3RhdGljIGludCB2bXhfZ2V0X25lc3RlZF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02ODQwLVx0XHRpZiAoIXZteC1cdTAwM2VuZXN0ZWQubmVlZF92bWNzMTJfdG9fc2hhZG93X3N5bmMpIHtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Njg0MTpcdFx0XHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02ODQyLVx0XHRcdFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4ODEKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyB0aGUgS1ZNIEh5cGVyLVYgR3VhcmQqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZGAgaXMgZGVmaW5lZCB3aXRoaW4gYGFyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmhgLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgaXRzIGluY2x1c2lvbiBvciBmdW5jdGlvbmFsaXR5IGlzIGNvbnRyb2xsZWQgYnkgYSBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19LVk1fSFlQRVJWYCBvciBhIHJlbGF0ZWQgc2V0dGluZyBpcyBlbmFibGVkLiBVbmRlcnN0YW5kaW5nIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBhcm91bmQgdGhpcyBpcyBjcml0aWNhbCB0byBmaWd1cmluZyBvdXQgaXRzIG92ZXJhbGwgcHVycG9zZSBhbmQgY29udGV4dCB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIExldCYjMzk7cyBzZWUgaG93IHRoYXQmIzM5O3MgaGFuZGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaD0yMD1zdGF0aWMgaW5saW5lIGJvb2wgZXZtcHRyX2lzX3ZhbGlkKHU2NCBldm1wdHIpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaC0yNC1cbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2Lmg6MjU6c3RhdGljIGlubGluZSBib29sIG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQoc3RydWN0IHZjcHVfdm14ICp2bXgpXG5hcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oLTI2LXtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oPTY0PXN0YXRpYyBpbmxpbmUgYm9vbCBldm1wdHJfaXNfdmFsaWQodTY0IGV2bXB0cilcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oLTY4LVxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaDo2OTpzdGF0aWMgaW5saW5lIGJvb2wgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZChzdHJ1Y3QgdmNwdV92bXggKnZteClcbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmgtNzAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQwNgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIEh5cGVyLVYgSW50ZWdyYXRpb24gaW4gS1ZNL1ZNWCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBndXRzIG9mIGhvdyBLVk0gb24geDg2IGludGVyYWN0cyB3aXRoIEh5cGVyLVYuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIG91dCBgYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaGAuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBtYWdpYyBoYXBwZW5zIOKAkyB0aGUgYCNpZmRlZmBzLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyB0aGF0IGVuYWJsZSBvciBkaXNhYmxlIEh5cGVyLVYgc3BlY2lmaWMgY29kZSBwYXRocyBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgaG9zdCBpcyBydW5uaW5nIGluIGEgSHlwZXItViBlbnZpcm9ubWVudCBvciBub3QuIFRoaXMgaGVhZGVyIHdpbGwgcHJvYmFibHkgcmV2ZWFsIGhvdyBLVk0gaGFuZGxlcyB0aG9zZSBpbnRlZ3JhdGlvbiBmZWF0dXJlcyBhbmQgaG93IGl0IGFkYXB0cyBpdHMgYmVoYXZpb3IgYmFzZWQgb24gdGhlIHVuZGVybHlpbmcgdmlydHVhbGl6YXRpb24gcGxhdGZvcm0uIEnigJltIGtlZW4gdG8gc2VlIHRoZSBzcGVjaWZpYyBkZXRhaWxzIG9mIHRoZSBmZWF0dXJlIGRldGVjdGlvbiBhbmQgaG93IHRoZSBjb2RlIGJyYW5jaGVzIGFjY29yZGluZ2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbiAgIDI6XHQjaWZuZGVmIF9fS1ZNX1g4Nl9WTVhfSFlQRVJWX0hcbiAgIDM6XHQjZGVmaW5lIF9fS1ZNX1g4Nl9WTVhfSFlQRVJWX0hcbiAgIDQ6XHRcbiAgIDU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9rdm1faG9zdC5oXHUwMDNlXG4gICA2Olx0I2luY2x1ZGUgXCYjMzQ7dm1jczEyLmhcJiMzNDtcbiAgIDc6XHQjaW5jbHVkZSBcJiMzNDt2bXguaFwmIzM0O1xuICAgODpcdFxuICAgOTpcdCNkZWZpbmUgRVZNUFRSX0lOVkFMSUQgKC0xVUxMKVxuICAxMDpcdCNkZWZpbmUgRVZNUFRSX01BUF9QRU5ESU5HICgtMlVMTClcbiAgMTE6XHRcbiAgMTI6XHRlbnVtIG5lc3RlZF9ldm1wdHJsZF9zdGF0dXMge1xuICAxMzpcdFx0RVZNUFRSTERfRElTQUJMRUQsXG4gIDE0Olx0XHRFVk1QVFJMRF9TVUNDRUVERUQsXG4gIDE1Olx0XHRFVk1QVFJMRF9WTUZBSUwsXG4gIDE2Olx0XHRFVk1QVFJMRF9FUlJPUixcbiAgMTc6XHR9O1xuICAxODpcdFxuICAxOTpcdCNpZmRlZiBDT05GSUdfS1ZNX0hZUEVSVlxuICAyMDpcdHN0YXRpYyBpbmxpbmUgYm9vbCBldm1wdHJfaXNfdmFsaWQodTY0IGV2bXB0cilcbiAgMjE6XHR7XG4gIDIyOlx0XHRyZXR1cm4gZXZtcHRyICE9IEVWTVBUUl9JTlZBTElEIFx1MDAyNlx1MDAyNiBldm1wdHIgIT0gRVZNUFRSX01BUF9QRU5ESU5HO1xuICAyMzpcdH1cbiAgMjQ6XHRcbiAgMjU6XHRzdGF0aWMgaW5saW5lIGJvb2wgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZChzdHJ1Y3QgdmNwdV92bXggKnZteClcbiAgMjY6XHR7XG4gIDI3Olx0XHRyZXR1cm4gZXZtcHRyX2lzX3ZhbGlkKHZteC1cdTAwM2VuZXN0ZWQuaHZfZXZtY3Nfdm1wdHIpO1xuICAyODpcdH1cbiAgMjk6XHRcbiAgMzA6XHRzdGF0aWMgaW5saW5lIGJvb2wgZXZtcHRyX2lzX3NldCh1NjQgZXZtcHRyKVxuICAzMTpcdHtcbiAgMzI6XHRcdHJldHVybiBldm1wdHIgIT0gRVZNUFRSX0lOVkFMSUQ7XG4gIDMzOlx0fVxuICAzNDpcdFxuICAzNTpcdHN0YXRpYyBpbmxpbmUgYm9vbCBuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3NldChzdHJ1Y3QgdmNwdV92bXggKnZteClcbiAgMzY6XHR7XG4gIDM3Olx0XHRyZXR1cm4gZXZtcHRyX2lzX3NldCh2bXgtXHUwMDNlbmVzdGVkLmh2X2V2bWNzX3ZtcHRyKTtcbiAgMzg6XHR9XG4gIDM5Olx0XG4gIDQwOlx0c3RhdGljIGlubGluZSBzdHJ1Y3QgaHZfZW5saWdodGVuZWRfdm1jcyAqbmVzdGVkX3ZteF9ldm1jcyhzdHJ1Y3QgdmNwdV92bXggKnZteClcbiAgNDE6XHR7XG4gIDQyOlx0XHRyZXR1cm4gdm14LVx1MDAzZW5lc3RlZC5odl9ldm1jcztcbiAgNDM6XHR9XG4gIDQ0Olx0XG4gIDQ1Olx0c3RhdGljIGlubGluZSBib29sIGd1ZXN0X2NwdV9jYXBfaGFzX2V2bWNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiAgNDY6XHR7XG4gIDQ3Olx0XHQvKlxuICA0ODpcdFx0ICogZVZNQ1MgaXMgZXhwb3NlZCB0byB0aGUgZ3Vlc3QgaWYgSHlwZXItViBpcyBlbmFibGVkIGluIENQVUlEIGFuZFxuICA0OTpcdFx0ICogZVZNQ1MgaGFzIGJlZW4gZXhwbGljaXRseSBlbmFibGVkIGJ5IHVzZXJzcGFjZS5cbiAgNTA6XHRcdCAqL1xuICA1MTpcdFx0cmV0dXJuIHZjcHUtXHUwMDNlYXJjaC5oeXBlcnZfZW5hYmxlZCBcdTAwMjZcdTAwMjZcbiAgNTI6XHRcdCAgICAgICB0b192bXgodmNwdSktXHUwMDNlbmVzdGVkLmVubGlnaHRlbmVkX3ZtY3NfZW5hYmxlZDtcbiAgNTM6XHR9XG4gIDU0Olx0XG4gIDU1Olx0dTY0IG5lc3RlZF9nZXRfZXZtcHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gIDU2Olx0dWludDE2X3QgbmVzdGVkX2dldF9ldm1jc192ZXJzaW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gIDU3Olx0aW50IG5lc3RlZF9lbmFibGVfZXZtY3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuICA1ODpcdFx0XHRcdHVpbnQxNl90ICp2bWNzX3ZlcnNpb24pO1xuICA1OTpcdHZvaWQgbmVzdGVkX2V2bWNzX2ZpbHRlcl9jb250cm9sX21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3JfaW5kZXgsIHU2NCAqcGRhdGEpO1xuICA2MDpcdGludCBuZXN0ZWRfZXZtY3NfY2hlY2tfY29udHJvbHMoc3RydWN0IHZtY3MxMiAqdm1jczEyKTtcbiAgNjE6XHRib29sIG5lc3RlZF9ldm1jc19sMl90bGJfZmx1c2hfZW5hYmxlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuICA2MjpcdHZvaWQgdm14X2h2X2luamVjdF9zeW50aGV0aWNfdm1leGl0X3Bvc3RfdGxiX2ZsdXNoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gIDYzOlx0I2Vsc2VcbiAgNjQ6XHRzdGF0aWMgaW5saW5lIGJvb2wgZXZtcHRyX2lzX3ZhbGlkKHU2NCBldm1wdHIpXG4gIDY1Olx0e1xuICA2NjpcdFx0cmV0dXJuIGZhbHNlO1xuICA2NzpcdH1cbiAgNjg6XHRcbiAgNjk6XHRzdGF0aWMgaW5saW5lIGJvb2wgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZChzdHJ1Y3QgdmNwdV92bXggKnZteClcbiAgNzA6XHR7XG4gIDcxOlx0XHRyZXR1cm4gZmFsc2U7XG4gIDcyOlx0fVxuICA3MzpcdFxuICA3NDpcdHN0YXRpYyBpbmxpbmUgYm9vbCBldm1wdHJfaXNfc2V0KHU2NCBldm1wdHIpXG4gIDc1Olx0e1xuICA3NjpcdFx0cmV0dXJuIGZhbHNlO1xuICA3NzpcdH1cbiAgNzg6XHRcbiAgNzk6XHRzdGF0aWMgaW5saW5lIGJvb2wgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl9zZXQoc3RydWN0IHZjcHVfdm14ICp2bXgpXG4gIDgwOlx0e1xuICA4MTpcdFx0cmV0dXJuIGZhbHNlO1xuICA4MjpcdH1cbiAgODM6XHRcbiAgODQ6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBodl9lbmxpZ2h0ZW5lZF92bWNzICpuZXN0ZWRfdm14X2V2bWNzKHN0cnVjdCB2Y3B1X3ZteCAqdm14KVxuICA4NTpcdHtcbiAgODY6XHRcdHJldHVybiBOVUxMO1xuICA4NzpcdH1cbiAgODg6XHQjZW5kaWZcbiAgODk6XHRcbiAgOTA6XHQjZW5kaWYgLyogX19LVk1fWDg2X1ZNWF9IWVBFUlZfSCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzAyNQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDExMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBLVk0gQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYENPTkZJR19LVk1fSFlQRVJWYCBpcyBpbmRlZWQgYSBwcmVyZXF1aXNpdGUgZm9yIGBuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkYCB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIFRoYXQgbWVhbnMgYEtWTV9IWVBFUlZgIGFic29sdXRlbHkgbmVlZHMgdG8gYmUgaW5jbHVkZWQgaW4gYEVuYWJsZUNvbmZpZ3NgLiBJdOKAmXMgc3RyYWlnaHRmb3J3YXJkLCBhIGRpcmVjdCBkZXBlbmRlbmN5LgoKTm93LCBJJiMzOTttIHNlY29uZC1ndWVzc2luZyBteXNlbGYgc2xpZ2h0bHkuIElzIGBLVk1fSU5URUxgICpzdWZmaWNpZW50Kiwgb3IgZG8gd2UgYWxzbyByZXF1aXJlIHRoZSBiYXNlIGBLVk1gIG9wdGlvbiB0byBiZSBlbmFibGVkPyBJbnRlbCB1c3VhbGx5IHJlbGllcyBvbiB0aGUgZ2VuZXJpYyBLVk0gZnVuY3Rpb25hbGl0eSwgc28gSSYjMzk7bSBsZWFuaW5nIHRvd2FyZCBuZWVkaW5nIGJvdGguIFRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgcXVpY2tseSBjaGVjayB0aGUgYGFyY2gveDg2L2t2bS9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBkZWZpbml0aXZlIHNvdXJjZSBmb3IgdGhlc2UgZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGUgeDg2IEtWTSBtb2R1bGUuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBzYXlzLiBObyBuZWVkIHRvIGxlYXZlIGFueSBzdG9uZSB1bnR1cm5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9JTlRFTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9ODM9Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDgtICAgICAgICBib29sIFwmIzM0O0NoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVx0Ym9vbCBcJiMzNDtJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NjY1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBLVk0gQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHNwZWNpZmljIGFib3V0IEtWTSBvbiB4ODYsIHNvIEkmIzM5O20gaGVhZGluZyBkaXJlY3RseSB0byB0aGUgc291cmNlLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O2xsIG5hdmlnYXRlIHRvIHRoZSBgYXJjaC94ODYva3ZtL0tjb25maWdgIGZpbGUuIEkmIzM5O20gYWltaW5nIGZvciBhcm91bmQgbGluZSA5NiDigJMgaG9wZWZ1bGx5IHRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB3aGF0ZXZlciBJJiMzOTttIHRyb3VibGVzaG9vdGluZyBvciBpbnZlc3RpZ2F0aW5nLiBJJiMzOTttIGV4cGVjdGluZyBzb21ldGhpbmcgcmVsYXRlZCB0byBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBvciBwZXJoYXBzIGEgc2VjdGlvbiBkZWZpbmluZyBzb21lIGtleSBLVk0gZmVhdHVyZXMuIExldCYjMzk7cyBzZWUgd2hhdCBsaW5lIDk2IGhvbGRzLiBUaGlzIGlzIGdvaW5nIHRvIGdpdmUgbWUgdGhlIG1vc3QgZ3JhbnVsYXIgaW5zaWdodCBpbnRvIHRoZSBidWlsZCBjb25maWd1cmF0aW9ucyBJJiMzOTttIHdvcmtpbmcgd2l0aC4gVGltZSB0byByZWFkIGFuZCBjb21wcmVoZW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA5MDpcdFx0ICBwcm90ZWN0ZWQgVk1zIGFyZSBwdXJlbHkgYSBkZXZlbG9wbWVudCBhbmQgdGVzdGluZyB2ZWhpY2xlIGZvclxuICA5MTpcdFx0ICBLVk1fQ1JFQVRFX0dVRVNUX01FTUZELiAgQXR0ZW1wdGluZyB0byBydW4gYSBcJiMzNDtyZWFsXCYjMzQ7IFZNIHdvcmtsb2FkIGFzIGFcbiAgOTI6XHRcdCAgc29mdHdhcmUtcHJvdGVjdGVkIFZNIHdpbGwgZmFpbCBtaXNlcmFibHkuXG4gIDkzOlx0XG4gIDk0Olx0XHQgIElmIHVuc3VyZSwgc2F5IFwmIzM0O05cJiMzNDsuXG4gIDk1Olx0XG4gIDk2Olx0Y29uZmlnIEtWTV9JTlRFTFxuICA5NzpcdFx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuICA5ODpcdFx0ZGVwZW5kcyBvbiBLVk0gXHUwMDI2XHUwMDI2IElBMzJfRkVBVF9DVExcbiAgOTk6XHRcdHNlbGVjdCBYODZfRlJFRCBpZiBYODZfNjRcbiAxMDA6XHRcdGhlbHBcbiAxMDE6XHRcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgS1ZNIG9uIHByb2Nlc3NvcnMgZXF1aXBwZWQgd2l0aCBJbnRlbCYjMzk7cyBWVFxuIDEwMjpcdFx0ICBleHRlbnNpb25zLCBhLmsuYS4gVmlydHVhbCBNYWNoaW5lIEV4dGVuc2lvbnMgKFZNWCkuXG4gMTAzOlx0XG4gMTA0Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuIDEwNTpcdFx0ICB3aWxsIGJlIGNhbGxlZCBrdm0taW50ZWwuXG4gMTA2Olx0XG4gMTA3Olx0Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuIDEwODpcdCAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuIDEwOTpcdCAgICAgICAgZGVwZW5kcyBvbiBLVk1fSU5URUwgXHUwMDI2XHUwMDI2IEVYUEVSVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODIyOQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDExMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBLZXJuZWwgQ29uZmlndXJhdGlvbiBTdHJhdGVneSoqCgpPa2F5LCBzbyBJJiMzOTttIGNvbmZpZ3VyaW5nIHRoZSBrZXJuZWwgZm9yIEtWTSBzdXBwb3J0LiBJdCYjMzk7cyBvYnZpb3VzIHRoYXQgYEtWTV9JTlRFTGAgYnVpbGRzIG9uIHRvcCBvZiBgS1ZNYCwgc28gSSBkZWZpbml0ZWx5IG5lZWQgdG8gaW5jbHVkZSBib3RoIG9mIHRob3NlLiBJIGFsc28gc2VlIHRoYXQgd2UgdXNlIGBLVk1fSFlQRVJWYCBpbiBzb21lIGNhc2VzLCBzbyBsZXQmIzM5O3MgaW5jbHVkZSB0aGF0IHRvby4gSXQmIzM5O3MgYmVzdCB0byBiZSBjb21wcmVoZW5zaXZlIGFuZCBhdm9pZCBhbnkgdW5uZWNlc3NhcnkgcmVjb21waWxhdGlvbi4KCk5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBJIHJlY2FsbCBzZWVpbmcgYGhhbmRsZV92bXB0cmxkYCBhbmQgYGhhbmRsZV92bXB0cnN0YCBpbiBgYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY2AsIHdoaWNoIHN1Z2dlc3RzIG5lc3RlZCB2aXJ0dWFsaXphdGlvbi4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUmIzM5O3MgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBkaXJlY3RseSByZWxhdGVkIHRvIHRoYXQgZnVuY3Rpb25hbGl0eSwgc29tZXRoaW5nIGxpa2UgYENPTkZJR19LVk1fSU5URUxfTkVTVEVEYCBwZXJoYXBzLiBHb3R0YSBjaGVjayBmb3IgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0lOVEVMX05FU1RFRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODU3NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKk5lc3RlZCBWTVggTW9kdWxlIEludmVzdGlnYXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcsIHRoYXQgJiMzNDtuZXN0ZWQgVk1YJiMzNDsgdGhpbmcgaXMgYWxtb3N0IGNlcnRhaW5seSBub3QgYSBzdGFuZGFsb25lIG1vZHVsZSBpbiB0aGUgdHJhZGl0aW9uYWwgc2Vuc2UuIEl0JiMzOTtzIHByb2JhYmx5IGp1c3QgYSBwYXJhbWV0ZXIgdGhhdCYjMzk7cyBwYXNzZWQgdG8gYSBtb2R1bGUsIG9yIG1vcmUgbGlrZWx5LCBpdCYjMzk7cyBhIHBpZWNlIG9mIHRoZSBgS1ZNX0lOVEVMYCBtb2R1bGUgaXRzZWxmLiBJIG5lZWQgdG8gZHJpbGwgZG93biBhbmQgc2VlIGhvdyB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgYWN0dWFsbHkgY29uc3RydWN0ZWQuCgpUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaXMgdGhlIGJ1aWxkIHN5c3RlbS4gTGV0IG1lIGNoZWNrIHRoZSBgYXJjaC94ODYva3ZtL3ZteC9NYWtlZmlsZWAgdG8gc2VlIGhvdyBgbmVzdGVkLm9gIChvciB3aGF0ZXZlciBvYmplY3QgY29udGFpbnMgdGhlIG5lc3RlZCBWTVggZnVuY3Rpb25hbGl0eSkgaXMgY29tcGlsZWQuIFRoYXQgc2hvdWxkIHJldmVhbCB3aGV0aGVyIGl0JiMzOTtzIGNvbmRpdGlvbmFsbHkgaW5jbHVkZWQsIGNvbXBpbGVkIHdpdGggc3BlY2lmaWMgZmxhZ3MsIG9yIGlmIGl0JiMzOTtzIHRyZWF0ZWQgYXMgYSBjb21wb25lbnQgd2l0aGluIGEgbGFyZ2VyIGNvbXBpbGF0aW9uIHVuaXQuIFRoZSBtYWtlZmlsZSB3aWxsIGV4cG9zZSBob3cgdGhlIGRlcGVuZGVuY2llcyBhcmUgbWFuYWdlZCwgdGhlIGluY2x1c2lvbiBvZiBjb25kaXRpb25hbCBjb2RlLCBhbmQgaG93IHRoZXNlIHNldHRpbmdzIGluZmx1ZW5jZSB0aGUgYnVpbGQgcHJvY2Vzcy4gVGhhdCYjMzk7cyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93ICYjMzQ7bmVzdGVkIFZNWCYjMzQ7IGlzIGhhbmRsZWQgYXQgdGhlIHNvdXJjZSBsZXZlbC4gRnJvbSB0aGVyZSwgSSBjYW4gdHJhY2UgZGVwZW5kZW5jaWVzIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgZmxhZyBpcyBleHBvc2VkIG9yIGlmIGl0JiMzOTtzIGhhbmRsZWQgZGlmZmVyZW50bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25lc3RlZC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9tYWluLmM9ODgwPXN0cnVjdCBrdm1feDg2X29wcyB2dF94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtOTk3LVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6OTk4Olx0Lm5lc3RlZF9vcHMgPSBcdTAwMjZ2bXhfbmVzdGVkX29wcyxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTk5OS1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTc0NzA9c3RhdGljIGdwYV90IHZteF90cmFuc2xhdGVfbmVzdGVkX2dwYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTc0OTAtXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjc0OTE6c3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyB2bXhfbmVzdGVkX29wcyA9IHtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzQ5Mi1cdC5sZWF2ZV9uZXN0ZWQgPSB2bXhfbGVhdmVfbmVzdGVkLFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmg9MzEyPXN0YXRpYyBpbmxpbmUgYm9vbCBuZXN0ZWRfY3B1X2hhc19ub19od19lcnJjb2RlX2NjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oLTMyMC1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmg6MzIxOmV4dGVybiBzdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIHZteF9uZXN0ZWRfb3BzO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaC0zMjItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MzQxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEZWJ1Z2dpbmcgYSBCdWlsZCBTeXN0ZW0gRGlzY3JlcGFuY3kqKgoKSG1tLCB0aGF0JiMzOTtzIG9kZC4gSSB3YXMgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGBuZXN0ZWQub2AsIHlldCB0aGUgb3V0cHV0IGlzbiYjMzk7dCBwb2ludGluZyBtZSBiYWNrIHRvIHRoZSBgTWFrZWZpbGVgLiBUaGF0JiMzOTtzIGEgcmVkIGZsYWcuIFNvbWV0aGluZyBpc24mIzM5O3QgYmVoYXZpbmcgYXMgZXhwZWN0ZWQgd2l0aCB0aGUgYnVpbGQgZW52aXJvbm1lbnQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoYXQgb2JqZWN0IGZpbGUgaXMgYmVpbmcgcHJvZHVjZWQuIE15IGZpcnN0IGluc3RpbmN0LCBjb25zaWRlcmluZyBJJiMzOTttIHdvcmtpbmcgd2l0aCBhIGtlcm5lbCBtb2R1bGUgYW5kIGxpa2VseSB1c2luZyBhIHR5cGljYWwgYnVpbGQgc2V0dXAsIGlzIHRvIGNoZWNrIHRoZSBgYXJjaC94ODYva3ZtL01ha2VmaWxlYC4gVGhhdCYjMzk7cyBhIGtleSBhcmVhLCBlc3BlY2lhbGx5IGlmIHRoaXMgaXMgcmVsYXRlZCB0byBLVk0gb3IgeDg2IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb2RlLiBUaGF0IGBNYWtlZmlsZWAgb2Z0ZW4gaG9sZHMgY3J1Y2lhbCBpbmZvcm1hdGlvbiBhYm91dCBob3cgdGhvc2Ugc3BlY2lmaWMgb2JqZWN0IGZpbGVzIGFyZSBoYW5kbGVkLiBJdCYjMzk7cyB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gZmluZCB0aGUgcmVjaXBlIG9yIHJ1bGVzIHRoYXQgZ2VuZXJhdGUgdGhlIGBuZXN0ZWQub2AgdGhhdCBJJiMzOTttIGludGVyZXN0ZWQgaW4sIG9yIGlkZW50aWZ5IHdoeSBpdCYjMzk7cyAqbm90KiBiZWluZyBidWlsdCBhcyBJIGFudGljaXBhdGUuIFRpbWUgdG8gZGl2ZSBpbiB0aGVyZSBhbmQgc2VlIHdoYXQgdGhlIGJ1aWxkIHByb2Nlc3MgaXMgZG9pbmcgd2l0aCB0aGlzIHBhcnRpY3VsYXIgc291cmNlIGZpbGUsIG9yIGlmIHRoZXJlJiMzOTtzIGEgcHJvYmxlbSB3aXRoIGl0cyBpbmNsdXNpb24gaW4gdGhlIGJ1aWxkIGF0IGFsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmVzdGVkLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9NYWtlZmlsZT0xNz1rdm0taW50ZWwteVx0XHQmIzQzOz0gdm14L3ZteC5vIHZteC92bWVudGVyLm8gdm14L3BtdV9pbnRlbC5vIHZteC92bWNzMTIubyBcXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlOjE4Olx0XHRcdCAgIHZteC9uZXN0ZWQubyB2bXgvcG9zdGVkX2ludHIubyB2bXgvbWFpbi5vXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtMTktXG4tLVxuYXJjaC94ODYva3ZtL01ha2VmaWxlPTIyPWt2bS1pbnRlbC0kKENPTkZJR19LVk1fSU5URUxfVERYKVx0JiM0Mzs9IHZteC90ZHgub1xuYXJjaC94ODYva3ZtL01ha2VmaWxlLTIzLVxuYXJjaC94ODYva3ZtL01ha2VmaWxlOjI0Omt2bS1hbWQteVx0XHQmIzQzOz0gc3ZtL3N2bS5vIHN2bS92bWVudGVyLm8gc3ZtL3BtdS5vIHN2bS9uZXN0ZWQubyBzdm0vYXZpYy5vXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtMjUtXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTIwMTM9c3RhdGljIHU2NCBrdm1faHZfZmx1c2hfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9odl9oY2FsbCAqaGMpXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTIwNDktXHRpZiAoIWhjLVx1MDAzZWZhc3QgXHUwMDI2XHUwMDI2IG1tdV9pc19uZXN0ZWQodmNwdSkpIHtcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoyMDUwOlx0XHRoYy1cdTAwM2VpbmdwYSA9IGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNldHJhbnNsYXRlX25lc3RlZF9ncGEoXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMjA1MS1cdFx0XHRcdFx0dmNwdSwgaGMtXHUwMDNlaW5ncGEsXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTIzOTM9c3RhdGljIGludCBrdm1faHZfaHlwZXJjYWxsX2NvbXBsZXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJlc3VsdClcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMjQxMC1cdGlmICh0bGJfbG9ja19jb3VudClcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoyNDExOlx0XHRrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZWh2X2luamVjdF9zeW50aGV0aWNfdm1leGl0X3Bvc3RfdGxiX2ZsdXNoKHZjcHUpO1xuYXJjaC94ODYva3ZtL2h5cGVydi5jLTI0MTItXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTI3NzQ9aW50IGt2bV9nZXRfaHZfY3B1aWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2NwdWlkMiAqY3B1aWQsXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTI3OTEtXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6Mjc5MjpcdGlmIChrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZWdldF9ldm1jc192ZXJzaW9uKVxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjI3OTM6XHRcdGV2bWNzX3ZlciA9IGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlZ2V0X2V2bWNzX3ZlcnNpb24odmNwdSk7XG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMjc5NC1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11Lmg9MzAzPXN0YXRpYyBpbmxpbmUgZ3BhX3Qga3ZtX3RyYW5zbGF0ZV9ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS9tbXUuaC0zMTAtXHRcdHJldHVybiBncGE7XG5hcmNoL3g4Ni9rdm0vbW11Lmg6MzExOlx0cmV0dXJuIGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNldHJhbnNsYXRlX25lc3RlZF9ncGEodmNwdSwgZ3BhLCBhY2Nlc3MsXG5hcmNoL3g4Ni9rdm0vbW11LmgtMzEyLVx0XHRcdFx0XHRcdFx0ICAgIGV4Y2VwdGlvbixcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2luZ190bXBsLmg9MjA4PXN0YXRpYyBpbnQgRk5BTUUodXBkYXRlX2FjY2Vzc2VkX2RpcnR5X2JpdHMpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2luZ190bXBsLmgtMjM1LSNpZiBQVFRZUEUgPT0gUFRUWVBFX0VQVFxuYXJjaC94ODYva3ZtL21tdS9wYWdpbmdfdG1wbC5oOjIzNjpcdFx0XHRpZiAoa3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cdTAwM2V3cml0ZV9sb2dfZGlydHkodmNwdSwgYWRkcikpXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2luZ190bXBsLmgtMjM3LVx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz0yMTQ3PXN0YXRpYyBncGFfdCBzdm1fdHJhbnNsYXRlX25lc3RlZF9ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0yMTY0LVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzoyMTY1OnN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgc3ZtX25lc3RlZF9vcHMgPSB7XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTIxNjYtXHQubGVhdmVfbmVzdGVkID0gc3ZtX2xlYXZlX25lc3RlZCxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTUzNDM9c3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NDQ2LVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo1NDQ3Olx0Lm5lc3RlZF9vcHMgPSBcdTAwMjZzdm1fbmVzdGVkX29wcyxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTQ0OC1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTkxNT1zdGF0aWMgaW5saW5lIHZvaWQgc3ZtX3BtdV9oYW5kbGVfbmVzdGVkX3RyYW5zaXRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC05MjYtXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjkyNzpleHRlcm4gc3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyBzdm1fbmVzdGVkX29wcztcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtOTI4LVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTg4MD1zdHJ1Y3Qga3ZtX3g4Nl9vcHMgdnRfeDg2X29wcyBfX2luaXRkYXRhID0ge1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTk5Ny1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjk5ODpcdC5uZXN0ZWRfb3BzID0gXHUwMDI2dm14X25lc3RlZF9vcHMsXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy05OTktXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz03NDcwPXN0YXRpYyBncGFfdCB2bXhfdHJhbnNsYXRlX25lc3RlZF9ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03NDkwLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo3NDkxOnN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgdm14X25lc3RlZF9vcHMgPSB7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTc0OTItXHQubGVhdmVfbmVzdGVkID0gdm14X2xlYXZlX25lc3RlZCxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oPTMxMj1zdGF0aWMgaW5saW5lIGJvb2wgbmVzdGVkX2NwdV9oYXNfbm9faHdfZXJyY29kZV9jYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaC0zMjAtXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oOjMyMTpleHRlcm4gc3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyB2bXhfbmVzdGVkX29wcztcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmgtMzIyLVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz04MjY9c3RhdGljIHZvaWQga3ZtX211bHRpcGxlX2V4Y2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBucixcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtODM5LVx0aWYgKGlzX2d1ZXN0X21vZGUodmNwdSkgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0veDg2LmM6ODQwOlx0ICAgIGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlaXNfZXhjZXB0aW9uX3ZtZXhpdCh2Y3B1LCBuciwgZXJyb3JfY29kZSkpIHtcbmFyY2gveDg2L2t2bS94ODYuYy04NDEtXHRcdGt2bV9xdWV1ZV9leGNlcHRpb25fdm1leGl0KHZjcHUsIG5yLCBoYXNfZXJyb3IsIGVycm9yX2NvZGUsXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTI2NjE9dTY0IGt2bV9jYWxjX25lc3RlZF90c2Nfb2Zmc2V0KHU2NCBsMV9vZmZzZXQsIHU2NCBsMl9vZmZzZXQsIHU2NCBsMl9tdWx0aXBsaWVyKVxuYXJjaC94ODYva3ZtL3g4Ni5jLTI2NjIte1xuYXJjaC94ODYva3ZtL3g4Ni5jOjI2NjM6XHR1NjQgbmVzdGVkX29mZnNldDtcbmFyY2gveDg2L2t2bS94ODYuYy0yNjY0LVxuYXJjaC94ODYva3ZtL3g4Ni5jLTI2NjUtXHRpZiAobDJfbXVsdGlwbGllciA9PSBrdm1fY2Fwcy5kZWZhdWx0X3RzY19zY2FsaW5nX3JhdGlvKVxuYXJjaC94ODYva3ZtL3g4Ni5jOjI2NjY6XHRcdG5lc3RlZF9vZmZzZXQgPSBsMV9vZmZzZXQ7XG5hcmNoL3g4Ni9rdm0veDg2LmMtMjY2Ny1cdGVsc2VcbmFyY2gveDg2L2t2bS94ODYuYzoyNjY4Olx0XHRuZXN0ZWRfb2Zmc2V0ID0gbXVsX3M2NF91NjRfc2hyKChzNjQpIGwxX29mZnNldCwgbDJfbXVsdGlwbGllcixcbmFyY2gveDg2L2t2bS94ODYuYy0yNjY5LVx0XHRcdFx0XHRcdGt2bV9jYXBzLnRzY19zY2FsaW5nX3JhdGlvX2ZyYWNfYml0cyk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtMjY3MC1cbmFyY2gveDg2L2t2bS94ODYuYzoyNjcxOlx0bmVzdGVkX29mZnNldCAmIzQzOz0gbDJfb2Zmc2V0O1xuYXJjaC94ODYva3ZtL3g4Ni5jOjI2NzI6XHRyZXR1cm4gbmVzdGVkX29mZnNldDtcbmFyY2gveDg2L2t2bS94ODYuYy0yNjczLX1cbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9NDc2OD1pbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy00OTMwLVx0Y2FzZSBLVk1fQ0FQX05FU1RFRF9TVEFURTpcbmFyY2gveDg2L2t2bS94ODYuYzo0OTMxOlx0XHRyID0ga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cdTAwM2VnZXRfc3RhdGUgP1xuYXJjaC94ODYva3ZtL3g4Ni5jOjQ5MzI6XHRcdFx0a3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cdTAwM2VnZXRfc3RhdGUoTlVMTCwgTlVMTCwgMCkgOiAwO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTQ5MzMtXHRcdGJyZWFrO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYy00OTM4LVx0Y2FzZSBLVk1fQ0FQX0hZUEVSVl9FTkxJR0hURU5FRF9WTUNTOlxuYXJjaC94ODYva3ZtL3g4Ni5jOjQ5Mzk6XHRcdHIgPSBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZWVuYWJsZV9ldm1jcyAhPSBOVUxMO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTQ5NDAtXHRcdGJyZWFrO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz02MDA4PXN0YXRpYyBpbnQga3ZtX3ZjcHVfaW9jdGxfZW5hYmxlX2NhcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTYwMzEtXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjAzMjpcdFx0XHRpZiAoIWt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlZW5hYmxlX2V2bWNzKVxuYXJjaC94ODYva3ZtL3g4Ni5jLTYwMzMtXHRcdFx0XHRyZXR1cm4gLUVOT1RUWTtcbmFyY2gveDg2L2t2bS94ODYuYzo2MDM0Olx0XHRcdHIgPSBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZWVuYWJsZV9ldm1jcyh2Y3B1LCBcdTAwMjZ2bWNzX3ZlcnNpb24pO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTYwMzUtXHRcdFx0aWYgKCFyKSB7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTYxODk9bG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy02NTMxLVx0XHRyID0gLUVJTlZBTDtcbmFyY2gveDg2L2t2bS94ODYuYzo2NTMyOlx0XHRpZiAoIWt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlZ2V0X3N0YXRlKVxuYXJjaC94ODYva3ZtL3g4Ni5jLTY1MzMtXHRcdFx0YnJlYWs7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTY1MzktXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjU0MDpcdFx0ciA9IGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlZ2V0X3N0YXRlKHZjcHUsIHVzZXJfa3ZtX25lc3RlZF9zdGF0ZSxcbmFyY2gveDg2L2t2bS94ODYuYy02NTQxLVx0XHRcdFx0XHRcdCAgICAgdXNlcl9kYXRhX3NpemUpO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYy02NTYxLVx0XHRyID0gLUVJTlZBTDtcbmFyY2gveDg2L2t2bS94ODYuYzo2NTYyOlx0XHRpZiAoIWt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlc2V0X3N0YXRlKVxuYXJjaC94ODYva3ZtL3g4Ni5jLTY1NjMtXHRcdFx0YnJlYWs7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTY1ODQtXHRcdGlkeCA9IHNyY3VfcmVhZF9sb2NrKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZXNyY3UpO1xuYXJjaC94ODYva3ZtL3g4Ni5jOjY1ODU6XHRcdHIgPSBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZXNldF9zdGF0ZSh2Y3B1LCB1c2VyX2t2bV9uZXN0ZWRfc3RhdGUsIFx1MDAyNmt2bV9zdGF0ZSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtNjU4Ni1cdFx0c3JjdV9yZWFkX3VubG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzcmN1LCBpZHgpO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz0xMDU2NT1pbnQga3ZtX2NoZWNrX25lc3RlZF9ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMDU2Ny1cdGlmIChrdm1fdGVzdF9yZXF1ZXN0KEtWTV9SRVFfVFJJUExFX0ZBVUxULCB2Y3B1KSkge1xuYXJjaC94ODYva3ZtL3g4Ni5jOjEwNTY4Olx0XHRrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZXRyaXBsZV9mYXVsdCh2Y3B1KTtcbmFyY2gveDg2L2t2bS94ODYuYy0xMDU2OS1cdFx0cmV0dXJuIDE7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNTcxLVxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwNTcyOlx0cmV0dXJuIGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlY2hlY2tfZXZlbnRzKHZjcHUpO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNTczLX1cbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTA2MzM9c3RhdGljIGludCBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMDgxMC1cdGlmIChpc19ndWVzdF9tb2RlKHZjcHUpIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwODExOlx0ICAgIGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlaGFzX2V2ZW50cyBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L2t2bS94ODYuYzoxMDgxMjpcdCAgICBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZWhhc19ldmVudHModmNwdSwgdHJ1ZSkpXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTA4MTMtXHRcdCpyZXFfaW1tZWRpYXRlX2V4aXQgPSB0cnVlO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz0xMTExMj1zdGF0aWMgaW50IHZjcHVfZW50ZXJfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMTEzNC1cdFx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfR0VUX05FU1RFRF9TVEFURV9QQUdFUywgdmNwdSkpIHtcbmFyY2gveDg2L2t2bS94ODYuYzoxMTEzNTpcdFx0XHRpZiAodW5saWtlbHkoIWt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlZ2V0X25lc3RlZF9zdGF0ZV9wYWdlcyh2Y3B1KSkpIHtcbmFyY2gveDg2L2t2bS94ODYuYy0xMTEzNi1cdFx0XHRcdHIgPSAwO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMTE4Ni1cdFx0XHRpZiAoaXNfZ3Vlc3RfbW9kZSh2Y3B1KSlcbmFyY2gveDg2L2t2bS94ODYuYzoxMTE4NzpcdFx0XHRcdGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNldHJpcGxlX2ZhdWx0KHZjcHUpO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTExMTg4LVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz0xMTU2OT1ib29sIGt2bV92Y3B1X2hhc19ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMTYwNS1cdGlmIChpc19ndWVzdF9tb2RlKHZjcHUpIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL3g4Ni5jOjExNjA2Olx0ICAgIGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlaGFzX2V2ZW50cyBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L2t2bS94ODYuYzoxMTYwNzpcdCAgICBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZWhhc19ldmVudHModmNwdSwgZmFsc2UpKVxuYXJjaC94ODYva3ZtL3g4Ni5jLTExNjA4LVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTE5NTY9aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTIwMzEtXHRpZiAodmNwdS1cdTAwM2VhcmNoLmV4Y2VwdGlvbl9mcm9tX3VzZXJzcGFjZSBcdTAwMjZcdTAwMjYgaXNfZ3Vlc3RfbW9kZSh2Y3B1KSBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L2t2bS94ODYuYzoxMjAzMjpcdCAgICBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVx1MDAzZWlzX2V4Y2VwdGlvbl92bWV4aXQodmNwdSwgZXgtXHUwMDNldmVjdG9yLFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEyMDMzLVx0XHRcdFx0XHRcdFx0ZXgtXHUwMDNlZXJyb3JfY29kZSkpIHtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2Lmg9MTUyPXN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fbGVhdmVfbmVzdGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS94ODYuaC0xNTMte1xuYXJjaC94ODYva3ZtL3g4Ni5oOjE1NDpcdGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXHUwMDNlbGVhdmVfbmVzdGVkKHZjcHUpO1xuYXJjaC94ODYva3ZtL3g4Ni5oLTE1NS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MzUxCgkJCQkJCQlvdXRwdXQ6IDE1NQoJCQkJCQkJdGhvdWdodHM6IDE0NzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgS1ZNIE5lc3RlZCBWTVggUGF0Y2ggZm9yIEh5cGVyLVYgRW5saWdodGVuZWQgVk1DUyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaGVyZSYjMzk7cyBteSB0YWtlLiBJbml0aWFsbHksIEkgemVyb2VkIGluIG9uIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvZiBgbmVzdGVkLm9gIHdpdGggYEtWTV9JTlRFTGAgZW5hYmxlZCwgYW5kLCB3aGlsZSB0aGF0ICppcyogYSBrZXkgZmFjdG9yLCBpdCYjMzk7cyBub3QgdGhlIHdob2xlIHN0b3J5LiBMZXQmIzM5O3MgbWFrZSBzdXJlIHdlIGdldCBpdCByaWdodC4KCkkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSByaWdodCBjb25maWdzLiBJIHNlZSB0aGF0IHRoaXMgcGF0Y2ggbW9kaWZpZXMgYGhhbmRsZV92bXB0cmxkYCBhbmQgYGhhbmRsZV92bXB0cnN0YCwgd2hpY2ggYXJlIHVzZWQgd2hlbiB0aGVyZSYjMzk7cyBhbiBlbmxpZ2h0ZW5lZCBWTUNTIChlVk1DUykgcHJlc2VudCwgdHJpZ2dlcmVkIHdoZW4gYEtWTV9IWVBFUlZgIGlzIGVuYWJsZWQuIGBLVk1fSFlQRVJWYCB3aWxsIG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgYG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWRgIHRvIHJldHVybiB0cnVlLiBUaGlzIG1lYW5zIHRoYXQgYm90aCBgS1ZNX0lOVEVMYCBhbmQgYEtWTWAgYXJlIG5lZWRlZCBmb3IgYSB3b3JraW5nIEtWTSwgYW5kIG9mIGNvdXJzZSBgS1ZNX0hZUEVSVmAgZm9yIHRoZSBIeXBlci1WIHNwZWNpZmljIGNoYW5nZS4gTm93LCBsb29raW5nIGF0IHRoZSBjb25maWcgb3B0aW9ucywgYEtWTV9IWVBFUlZgIGlzIGEgYm9vbGVhbiwgd2hpbGUgYEtWTV9JTlRFTGAgYW5kIGBLVk1gIGFyZSB0cmlzdGF0ZSwgc28gdGhhdCYjMzk7cyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kLgoKRGlnZ2luZyBpbnRvIHRoZSBjaGFuZ2VzLCB0aGlzIHBhdGNoIHNwZWNpZmljYWxseSBhZGRyZXNzZXMgaG93IEtWTSBuZXN0ZWQgVk1YIGhhbmRsZXMgYFZNUFRSTERgIGFuZCBgVk1QVFJTVGAgaW5zdHJ1Y3Rpb25zIHdoZW4gSHlwZXItViYjMzk7cyBlbmxpZ2h0ZW5lZCBWTUNTIGlzIGluIHBsYXkuIFRoZSBrZXkgY2hhbmdlIGlzIHRoYXQsIHByZXZpb3VzbHksIGBWTVBUUkxEYCB3YXMgc2lsZW50bHkgaWdub3JlZCwgYW5kIGBWTVBUUlNUYCB3YXMgaWdub3JlZC4gTm93LCBgVk1QVFJMRGAgcXVldWVzIGEgI1VEIGV4Y2VwdGlvbiwgYW5kIGBWTVBUUlNUYCByZXR1cm5zIHRoZSBlVk1DUyBHUEEgaW5zdGVhZC4gVGhpcyBpcyBhIGJlaGF2aW9yYWwgY2hhbmdlIGluIEtWTSwgd2hpY2ggbXVzdCBiZSBmdXp6ZWQgZm9yIHN0YWJpbGl0eS4gSXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBsb2dpYy4gV2hpbGUgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdGF0aWMsIHRoZSBmYWN0IHRoYXQgdGhlaXIgYWRkcmVzc2VzIGFyZSB0YWtlbiBhbmQgcGxhY2VkIGluIGEgZnVuY3Rpb24gcG9pbnRlciBhcnJheSBtZWFucyB0aGF0IHRoZXNlIGFyZW4mIzM5O3QgaW5saW5lZCBhbmQgaGF2ZSB1bmlxdWUgc3ltYm9sIGFkZHJlc3Nlcy4gVGhleSBhcmUgbm90IHBlcmZvcm1hbmNlIHNlbnNpdGl2ZSwgYXMgdGhlIGZ1bmN0aW9ucyBoYW5kbGUgc3BlY2lmaWMgVk0gZXhpdHMsIHJlbGF0ZWQgdG8gdGhlc2Ugc3BlY2lmaWMgaW5zdHJ1Y3Rpb25zLCBzbyBpdCYjMzk7cyBub3Qgc29tZXRoaW5nIGluIGEgaG90IHBhdGguCgpJIGFsc28gY2hlY2tlZCB0byBzZWUgaWYgYW55IG90aGVyIGZ1bmN0aW9ucyB3ZXJlIG1vZGlmaWVkLiBUaGUgcGF0Y2ggZG9lcyBhZmZlY3Qgc29tZSBzZWxmdGVzdCBjb2RlLCBidXQgdGhvc2UgYXJlIGluIHRoZSB0b29scyBkaXJlY3RvcnksIG5vdCB0aGUga2VybmVsIGl0c2VsZiwgYW5kIHNvIGFyZSBub3QgaW1wb3J0YW50IHRvIHRoZSBrZXJuZWwuCgpUaGVyZWZvcmUsIGZvciBmdXp6aW5nLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHdlIG5lZWQgdG8gZW5hYmxlOgpgS1ZNYApgS1ZNX0lOVEVMYApgS1ZNX0hZUEVSVmAKYW5kIHNwZWNpZmljYWxseSB0YXJnZXQ6CmBoYW5kbGVfdm1wdHJsZGAKYGhhbmRsZV92bXB0cnN0YAoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7LAogICAgJiMzNDtLVk1fSFlQRVJWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aGFuZGxlX3ZtcHRybGQmIzM0OywKICAgICYjMzQ7aGFuZGxlX3ZtcHRyc3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJlaGF2aW9yIG9mIEtWTSBuZXN0ZWQgVk1YIHdoZW4gaGFuZGxpbmcgVk1QVFJMRCBhbmQgVk1QVFJTVCBpbnN0cnVjdGlvbnMgaW4gdGhlIHByZXNlbmNlIG9mIEh5cGVyLVYgZW5saWdodGVuZWQgVk1DUyAoZVZNQ1MpLiBTcGVjaWZpY2FsbHksIGl0IHF1ZXVlcyBhICNVRCBleGNlcHRpb24gaW5zdGVhZCBvZiBzaWxlbnRseSBpZ25vcmluZyBWTVBUUkxELCBhbmQgcmV0dXJucyB0aGUgZVZNQ1MgR1BBIGluc3RlYWQgb2YgaWdub3JpbmcgVk1QVFJTVC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIEtWTSBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0hZUEVSViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hhbmRsZV92bXB0cmxkJiMzNDssCiAgICAmIzM0O2hhbmRsZV92bXB0cnN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBiZWhhdmlvciBvZiBLVk0gbmVzdGVkIFZNWCB3aGVuIGhhbmRsaW5nIFZNUFRSTEQgYW5kIFZNUFRSU1QgaW5zdHJ1Y3Rpb25zIGluIHRoZSBwcmVzZW5jZSBvZiBIeXBlci1WIGVubGlnaHRlbmVkIFZNQ1MgKGVWTUNTKS4gU3BlY2lmaWNhbGx5LCBpdCBxdWV1ZXMgYSAjVUQgZXhjZXB0aW9uIGluc3RlYWQgb2Ygc2lsZW50bHkgaWdub3JpbmcgVk1QVFJMRCwgYW5kIHJldHVybnMgdGhlIGVWTUNTIEdQQSBpbnN0ZWFkIG9mIGlnbm9yaW5nIFZNUFRSU1QuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBLVk0gbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzoyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT45bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjI2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjltPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSYjMzk7cyBuZXN0ZWQgVk1YIGVtdWxhdGlvbiBmb3IgdGhlIFZNUFRSTEQgYW5kIFZNUFRSU1QgaW5zdHJ1Y3Rpb25zIHdoZW4gRW5saWdodGVuZWQgVk1DUyAoZVZNQ1MpIGlzIHVzZWQuIEluIGBoYW5kbGVfdm1wdHJzdGAsIGl0IGNoYW5nZXMgdGhlIGNvZGUgdG8gd3JpdGUgdGhlIGBodl9ldm1jc192bXB0cmAgKGEgNjQtYml0IGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MpIHRvIGd1ZXN0IG1lbW9yeSBpbnN0ZWFkIG9mIHNraXBwaW5nIHRoZSBpbnN0cnVjdGlvbi4gU2luY2UgYGh2X2V2bWNzX3ZtcHRyYCBpcyBhIGZ1bGx5IGluaXRpYWxpemVkIDY0LWJpdCBpbnRlZ2VyIChgZ3BhX3RgKSB3aXRob3V0IGFueSBwYWRkaW5nLCB3cml0aW5nIGl0IHRvIGd1ZXN0IG1lbW9yeSBkb2VzIG5vdCBsZWFrIGFueSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIFRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGBoYW5kbGVfdm1wdHJsZGAgdG8gcXVldWUgYSAjVUQgZXhjZXB0aW9uLCB3aGljaCBvbmx5IGFmZmVjdHMgY29udHJvbCBmbG93IGFuZCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBjb21wbGV4IHN0cnVjdHVyZXMsIG9yIHBhZGRpbmcgaW50cm9kdWNlZCB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBidWdzIGluIHRoaXMgYXJlYS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzQ4Y2FjZjA0MTkyNDYxYmQ3ZTk1NjU3NWYxZjdlN2ZmNDA5ZTRlMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDE0IDE3OjE4OjA1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMKaW5kZXggZGRmNmRmN2JlZTkzYi4uMGY1ZTRiNDdlY2IxOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jCkBAIC01ODc5LDYgJiM0Mzs1ODc5LDEyIEBAIHN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRybGQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCWlmICghbmVzdGVkX3ZteF9jaGVja19wZXJtaXNzaW9uKHZjcHUpKQogCQlyZXR1cm4gMTsKIAomIzQzOwkvKiBGb3JiaWQgbm9ybWFsIFZNUFRSTEQgaWYgRW5saWdodGVuZWQgdmVyc2lvbiB3YXMgdXNlZCAqLwomIzQzOwlpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKSB7CiYjNDM7CQlrdm1fcXVldWVfZXhjZXB0aW9uKHZjcHUsIFVEX1ZFQ1RPUik7CiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsJfQomIzQzOwogCWlmIChuZXN0ZWRfdm14X2dldF92bXB0cih2Y3B1LCAmYW1wO3ZtcHRyLCAmYW1wO3IpKQogCQlyZXR1cm4gcjsKIApAQCAtNTg4OCwxMCAmIzQzOzU4OTQsNiBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXB0cmxkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpZiAodm1wdHIgPT0gdm14LSZndDtuZXN0ZWQudm14b25fcHRyKQogCQlyZXR1cm4gbmVzdGVkX3ZteF9mYWlsKHZjcHUsIFZNWEVSUl9WTVBUUkxEX1ZNWE9OX1BPSU5URVIpOwogCi0JLyogRm9yYmlkIG5vcm1hbCBWTVBUUkxEIGlmIEVubGlnaHRlbmVkIHZlcnNpb24gd2FzIHVzZWQgKi8KLQlpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKQotCQlyZXR1cm4gMTsKLQogCWlmICh2bXgtJmd0O25lc3RlZC5jdXJyZW50X3ZtcHRyICE9IHZtcHRyKSB7CiAJCXN0cnVjdCBnZm5fdG9faHZhX2NhY2hlICpnaGMgPSAmYW1wO3ZteC0mZ3Q7bmVzdGVkLnZtY3MxMl9jYWNoZTsKIAkJc3RydWN0IHZtY3NfaGRyIGhkcjsKQEAgLTU5NDQsNyAmIzQzOzU5NDYsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXB0cnN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAl1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpOwogCXUzMiBpbnN0cl9pbmZvID0gdm1jc19yZWFkMzIoVk1YX0lOU1RSVUNUSU9OX0lORk8pOwotCWdwYV90IGN1cnJlbnRfdm1wdHIgPSB0b192bXgodmNwdSktJmd0O25lc3RlZC5jdXJyZW50X3ZtcHRyOwomIzQzOwlncGFfdCBjdXJyZW50X3ZtcHRyOwogCXN0cnVjdCB4ODZfZXhjZXB0aW9uIGU7CiAJZ3ZhX3QgZ3ZhOwogCWludCByOwpAQCAtNTk1Miw4ICYjNDM7NTk1NCwxNCBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXB0cnN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpZiAoIW5lc3RlZF92bXhfY2hlY2tfcGVybWlzc2lvbih2Y3B1KSkKIAkJcmV0dXJuIDE7CiAKLQlpZiAodW5saWtlbHkobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh0b192bXgodmNwdSkpKSkKLQkJcmV0dXJuIDE7CiYjNDM7CS8qCiYjNDM7CSAqIEh5cGVyLVYgVExGUyBkb2VzIG5vdCBzcGVjaWZ5IHRoZSBiZWhhdmlvciBvZiBWTVBUUlNUIHdoZW4gZVZNQ1MgaXMgdXNlZAomIzQzOwkgKiBidXQgZ2VudWluZSBIeXBlci1WIHNlZW1zIHRvIGJlIHJldHVybmluZyBlVk1DUyBHUEEuCiYjNDM7CSAqLwomIzQzOwlpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh0b192bXgodmNwdSkpKQomIzQzOwkJY3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS0mZ3Q7bmVzdGVkLmh2X2V2bWNzX3ZtcHRyOwomIzQzOwllbHNlCiYjNDM7CQljdXJyZW50X3ZtcHRyID0gdG9fdm14KHZjcHUpLSZndDtuZXN0ZWQuY3VycmVudF92bXB0cjsKIAogCWlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIGV4aXRfcXVhbCwgaW5zdHJfaW5mbywKIAkJCQl0cnVlLCBzaXplb2YoZ3BhX3QpLCAmYW1wO2d2YSkpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmgKaW5kZXggOTBmZmZhZjkxNTk1OC4uZTIxNzhhNjY4M2NhOSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni92bXguaApAQCAtMzI1LDkgJiM0MzszMjUsNiBAQCBzdGF0aWMgaW5saW5lIGludCB2bXB0cmxkKHU2NCB2bWNzX3BhKQogewogCXU4IHJldDsKIAotCWlmIChlbmFibGVfZXZtY3MpCi0JCXJldHVybiAtMTsKLQogCV9fYXNtX18gX192b2xhdGlsZV9fICgmIzM0O3ZtcHRybGQgJVtwYV07IHNldG5hICVbcmV0XSYjMzQ7CiAJCTogW3JldF0mIzM0Oz1ybSYjMzQ7KHJldCkKIAkJOiBbcGFdJiMzNDttJiMzNDsodm1jc19wYSkKQEAgLTM0MSw5ICYjNDM7MzM4LDYgQEAgc3RhdGljIGlubGluZSBpbnQgdm1wdHJzdCh1NjQgKnZhbHVlKQogCXU2NCB0bXA7CiAJdTggcmV0OwogCi0JaWYgKGVuYWJsZV9ldm1jcykKLQkJcmV0dXJuIGV2bWNzX3ZtcHRyc3QodmFsdWUpOwotCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oJiMzNDt2bXB0cnN0ICVbdmFsdWVdOyBzZXRuYSAlW3JldF0mIzM0OwogCQk6IFt2YWx1ZV0mIzM0Oz1tJiMzNDsodG1wKSwgW3JldF0mIzM0Oz1ybSYjMzQ7KHJldCkKIAkJOiA6ICYjMzQ7Y2MmIzM0OywgJiMzNDttZW1vcnkmIzM0Oyk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl9ldm1jcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfZXZtY3MuYwppbmRleCBjN2ZhMTE0YWVlMjBmLi42YTZkOTQwYTc4OTE4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl9ldm1jcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X2V2bWNzLmMKQEAgLTE4LDEyICYjNDM7MTgsMTYgQEAKICNpbmNsdWRlICYjMzQ7aHlwZXJ2LmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2bXguaCYjMzQ7CiAKJiM0MzsjZGVmaW5lIFZNTEFVTkNIX0lOU05fU0laRSAzCiYjNDM7I2RlZmluZSBWTVBUUkxEX0lOU05fU0laRSA1CiYjNDM7CiBzdGF0aWMgaW50IHVkX2NvdW50OwomIzQzO3N0YXRpYyBpbnQgdWRfaW5zbl9za2lwX3NpemU7CiAKIHN0YXRpYyB2b2lkIGd1ZXN0X3VkX2hhbmRsZXIoc3RydWN0IGV4X3JlZ3MgKnJlZ3MpCiB7CiAJdWRfY291bnQmIzQzOyYjNDM7OwotCXJlZ3MtJmd0O3JpcCAmIzQzOz0gMzsgLyogVk1MQVVOQ0ggKi8KJiM0MzsJcmVncy0mZ3Q7cmlwICYjNDM7PSB1ZF9pbnNuX3NraXBfc2l6ZTsKIH0KIAogc3RhdGljIHZvaWQgZ3Vlc3Rfbm1pX2hhbmRsZXIoc3RydWN0IGV4X3JlZ3MgKnJlZ3MpCkBAIC05NSwxNiAmIzQzOzk5LDE1IEBAIHZvaWQgZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMsIHN0cnVjdCBoeXBlcnZfdGVzdF9wYWdlcyAqaHZfcGFnZXMsCiAJR1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKSk7CiAJR1VFU1RfU1lOQygzKTsKIAlHVUVTVF9BU1NFUlQobG9hZF9ldm1jcyhodl9wYWdlcykpOwotCUdVRVNUX0FTU0VSVCh2bXB0cnN0eigpID09IGh2X3BhZ2VzLSZndDtlbmxpZ2h0ZW5lZF92bWNzX2dwYSk7CiYjNDM7CS8qIFZNUFRSU1QgcmV0dXJucyAtMSB1bnRpbCBWTUxBVU5DSCB3aXRoIGVWTUNTIHB0ciBzZXQgKi8KJiM0MzsJR1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gLTEpOwogCiAJR1VFU1RfU1lOQyg0KTsKLQlHVUVTVF9BU1NFUlQodm1wdHJzdHooKSA9PSBodl9wYWdlcy0mZ3Q7ZW5saWdodGVuZWRfdm1jc19ncGEpOwogCiAJcHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSwKIAkJICAgICAmYW1wO2wyX2d1ZXN0X3N0YWNrW0wyX0dVRVNUX1NUQUNLX1NJWkVdKTsKIAogCUdVRVNUX1NZTkMoNSk7Ci0JR1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gaHZfcGFnZXMtJmd0O2VubGlnaHRlbmVkX3ZtY3NfZ3BhKTsKIAljdXJyZW50X2V2bWNzLSZndDtyZXZpc2lvbl9pZCA9IC0xdTsKIAlHVUVTVF9BU1NFUlQodm1sYXVuY2goKSk7CiAJY3VycmVudF9ldm1jcy0mZ3Q7cmV2aXNpb25faWQgPSBFVk1DU19WRVJTSU9OOwpAQCAtMTgzLDEwICYjNDM7MTg2LDE1IEBAIHZvaWQgZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMsIHN0cnVjdCBoeXBlcnZfdGVzdF9wYWdlcyAqaHZfcGFnZXMsCiAJR1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7CiAJR1VFU1RfU1lOQygxMSk7CiAKJiM0MzsJdWRfaW5zbl9za2lwX3NpemUgPSBWTVBUUkxEX0lOU05fU0laRTsKJiM0MzsJdm1wdHJsZChodl9wYWdlcy0mZ3Q7ZW5saWdodGVuZWRfdm1jc19ncGEpOwomIzQzOwlHVUVTVF9BU1NFUlQodWRfY291bnQgPT0gMSk7CiYjNDM7CiAJLyogVHJ5IGVubGlnaHRlbmVkIHZtcHRybGQgd2l0aCBhbiBpbmNvcnJlY3QgR1BBICovCiYjNDM7CXVkX2luc25fc2tpcF9zaXplID0gVk1MQVVOQ0hfSU5TTl9TSVpFOwogCWV2bWNzX3ZtcHRybGQoMHhkZWFkYmVlZiwgaHZfcGFnZXMtJmd0O2VubGlnaHRlbmVkX3ZtY3MpOwogCUdVRVNUX0FTU0VSVCh2bWxhdW5jaCgpKTsKLQlHVUVTVF9BU1NFUlQodWRfY291bnQgPT0gMSk7CiYjNDM7CUdVRVNUX0FTU0VSVCh1ZF9jb3VudCA9PSAyKTsKIAlHVUVTVF9ET05FKCk7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT43bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MjMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA2MDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEtWTSBOZXN0ZWQgVk1YIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcgS1ZNJiMzOTtzIG5lc3RlZCBWTVggaGFuZGxpbmcsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBoYW5kbGVfdm1wdHJsZGAgYW5kIGBoYW5kbGVfdm1wdHJzdGAgZnVuY3Rpb25zLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGVzZSBhcmUgbG93LWxldmVsIG9wZXJhdGlvbnMsIHNvIEkgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBpbXBsaWNhdGlvbnMuCgpJbiBgaGFuZGxlX3ZtcHRybGRgLCB0aGUgY29kZSBub3cgZG9lcyBzb21ldGhpbmcgaW50ZXJlc3Rpbmcgd2hlbiBgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpYCBpcyB0cnVlLiBCZWZvcmUsIGl0IHdvdWxkIGp1c3QgcmV0dXJuIDEsIHdoaWNoIGVmZmVjdGl2ZWx5IG1lYW50ICYjMzQ7ZG8gbm90aGluZyYjMzQ7IGluIHRoYXQgY2FzZS4gTm93LCBpdCBxdWV1ZXMgYSBVRCAoVW5kZWZpbmVkIEluc3RydWN0aW9uKSBleGNlcHRpb24uIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBjaGFuZ2UgaW4gYmVoYXZpb3IgYW5kIHN1Z2dlc3RzIHRoYXQgYW4gaW52YWxpZCBvcGVyYXRpb24gb3IgYSBtaXN1c2Ugb2YgYW4gZVZNQ1MgcG9pbnRlciBpcyBiZWluZyBkZXRlY3RlZC4gSXQmIzM5O3MgZ29vZCB0byBmb3JjZSB0aGUgZ3Vlc3QgdG8gaGFuZGxlIHRoZSBlcnJvciBwcm9wZXJseSwgcmF0aGVyIHRoYW4gc2lsZW50bHkgZmFpbGluZy4KCmBoYW5kbGVfdm1wdHJzdGAgaXMgbW9yZSBpbnZvbHZlZC4gUHJldmlvdXNseSwgaWYgYG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWRgIHdhcyB0cnVlLCB0aGUgZnVuY3Rpb24ganVzdCByZXR1cm5lZCAxLiBOb3csIGl0JiMzOTtzIGRpZmZlcmVudC4gSXQmIzM5O3MgY2hlY2tpbmcgaWYgdGhlIGVWTUNTIHBvaW50ZXIgaXMgdmFsaWQsIGFuZCBpZiBpdCBpcywgaXQgc2V0cyBgY3VycmVudF92bXB0cmAgdG8gYGh2X2V2bWNzX3ZtcHRyYC4gVGhpcyB2YWx1ZSBpcyB0aGVuIHdyaXR0ZW4gdG8gZ3Vlc3QgbWVtb3J5IHVzaW5nIGBrdm1fd3JpdGVfZ3Vlc3RfdmlydF9zeXN0ZW1gLiBUaGUgY29tbWVudCBtZW50aW9ucyBIeXBlci1WIGFuZCBpdHMgaGFuZGxpbmcsIG9yIGxhY2sgdGhlcmVvZiwgb2YgVk1QVFJTVCB3aXRoIGVWTUNTLiBOb3csIGBjdXJyZW50X3ZtcHRyYCBjb21lcyBmcm9tIGEgcGxhY2UgYGh2X2V2bWNzX3ZtcHRyYCB0aGF0IHRoZSBndWVzdCBwcm92aWRlZCBlYXJsaWVyIHRocm91Z2ggZVZNQ1MgcG9pbnRlciBsb2FkLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgYWJvdXQgcG90ZW50aWFsIHNlY3VyaXR5IGlzc3Vlcy4gSXMgdGhlcmUgYSBwb3NzaWJpbGl0eSBvZiBpbmZvcm1hdGlvbiBsZWFrYWdlPyBJcyBgaHZfZXZtY3Nfdm1wdHJgIGluaXRpYWxpemVkIHByb3Blcmx5LCBvciBjb3VsZCBpdCBjb250YWluIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwb3RlbnRpYWxseSBleHBvc2luZyBrZXJuZWwgZGF0YSB0byB0aGUgZ3Vlc3Q/IEhvd2V2ZXIsIGBodl9ldm1jc192bXB0cmAgaXMgYSBzaW1wbGUgYGdwYV90YCAoYSA2NC1iaXQgdmFsdWUgcmVwcmVzZW50aW5nIGEgR3Vlc3QgUGh5c2ljYWwgQWRkcmVzcyksIHNvIHRoYXQmIzM5O3MgZ29vZC4gSXQmIzM5O3MgYSBzaW5nbGUgdmFsdWUsIG5vdCBhIHN0cnVjdCB3aXRoIHBhZGRpbmcsIHNvIEkgZG9uJiMzOTt0IHNlZSBhbnkgb2J2aW91cyBsZWFrYWdlIHJpc2tzIHRoZXJlLiBVbmxlc3MgYGh2X2V2bWNzX3ZtcHRyYCBpdHNlbGYgaXMgdW5pbml0aWFsaXplZCwgSSB0aGluayB3ZSYjMzk7cmUgc2FmZS4gUmVnYXJkbGVzcywgc2luY2UgdGhlIGd1ZXN0IHByb3ZpZGVzIHRoaXMgR1BBLCB0aGUgZ3Vlc3Qgd291bGQgYmUgcHJvdmlkaW5nIHdoYXQgaXMgYmVpbmcgbGVha2VkIChpZiBhbnl0aGluZykuCgpJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIHRvIGNvbmZpcm0gaG93IGBodl9ldm1jc192bXB0cmAgaXMgaW5pdGlhbGl6ZWQgdG8gYmUgY29tcGxldGVseSBzdXJlLiBPdmVyYWxsLCB0aGlzIHBhdGNoIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIGhhcmRlbmluZyBvZiB0aGUgbmVzdGVkIFZNWCBpbXBsZW1lbnRhdGlvbiwgYnkgcHJvcGVybHkgaGFuZGxpbmcgaW52YWxpZCBwb2ludGVyIGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodl9ldm1jc192bXB0ciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oPTI1PXN0YXRpYyBpbmxpbmUgYm9vbCBuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHN0cnVjdCB2Y3B1X3ZteCAqdm14KVxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaC0yNi17XG5hcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oOjI3Olx0cmV0dXJuIGV2bXB0cl9pc192YWxpZCh2bXgtXHUwMDNlbmVzdGVkLmh2X2V2bWNzX3ZtcHRyKTtcbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmgtMjgtfVxuLS1cbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2Lmg9MzU9c3RhdGljIGlubGluZSBib29sIG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfc2V0KHN0cnVjdCB2Y3B1X3ZteCAqdm14KVxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaC0zNi17XG5hcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oOjM3Olx0cmV0dXJuIGV2bXB0cl9pc19zZXQodm14LVx1MDAzZW5lc3RlZC5odl9ldm1jc192bXB0cik7XG5hcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oLTM4LX1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTIzMz1zdGF0aWMgaW5saW5lIHZvaWQgbmVzdGVkX3JlbGVhc2VfZXZtY3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjQwLVx0dm14LVx1MDAzZW5lc3RlZC5odl9ldm1jcyA9IE5VTEw7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjI0MTpcdHZteC1cdTAwM2VuZXN0ZWQuaHZfZXZtY3Nfdm1wdHIgPSBFVk1QVFJfSU5WQUxJRDtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjQyLVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MjUxPXN0YXRpYyBib29sIG5lc3RlZF9ldm1jc19oYW5kbGVfdm1jbGVhcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IHZtcHRyKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjY4LVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoyNjk6XHRpZiAobmVzdGVkX3ZteF9ldm1jcyh2bXgpIFx1MDAyNlx1MDAyNiB2bXB0ciA9PSB2bXgtXHUwMDNlbmVzdGVkLmh2X2V2bWNzX3ZtcHRyKVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yNzAtXHRcdG5lc3RlZF9yZWxlYXNlX2V2bWNzKHZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MjE4ND1zdGF0aWMgZW51bSBuZXN0ZWRfZXZtcHRybGRfc3RhdHVzIG5lc3RlZF92bXhfaGFuZGxlX2VubGlnaHRlbmVkX3ZtcHRybGQoXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yMjAwLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoyMjAxOlx0aWYgKHVubGlrZWx5KGV2bWNzX2dwYSAhPSB2bXgtXHUwMDNlbmVzdGVkLmh2X2V2bWNzX3ZtcHRyKSkge1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yMjAyLVx0XHR2bXgtXHUwMDNlbmVzdGVkLmN1cnJlbnRfdm1wdHIgPSBJTlZBTElEX0dQQTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTIyMzktXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjIyNDA6XHRcdHZteC1cdTAwM2VuZXN0ZWQuaHZfZXZtY3Nfdm1wdHIgPSBldm1jc19ncGE7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTIyNDEtXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0zNDEzPXN0YXRpYyBib29sIG5lc3RlZF9nZXRfZXZtY3NfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNDIyLVx0aWYgKGd1ZXN0X2NwdV9jYXBfaGFzX2V2bWNzKHZjcHUpIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozNDIzOlx0ICAgIHZteC1cdTAwM2VuZXN0ZWQuaHZfZXZtY3Nfdm1wdHIgPT0gRVZNUFRSX01BUF9QRU5ESU5HKSB7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM0MjQtXHRcdGVudW0gbmVzdGVkX2V2bXB0cmxkX3N0YXR1cyBldm1wdHJsZF9zdGF0dXMgPVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTk0NT1zdGF0aWMgaW50IGhhbmRsZV92bXB0cnN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU5NjEtXHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh0b192bXgodmNwdSkpKVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1OTYyOlx0XHRjdXJyZW50X3ZtcHRyID0gdG9fdm14KHZjcHUpLVx1MDAzZW5lc3RlZC5odl9ldm1jc192bXB0cjtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTk2My1cdGVsc2Vcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTY3NTI9c3RhdGljIGludCB2bXhfZ2V0X25lc3RlZF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02NzgzLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo2Nzg0Olx0XHRcdC8qICYjMzk7aHZfZXZtY3Nfdm1wdHImIzM5OyBjYW4gYWxzbyBiZSBFVk1QVFJfTUFQX1BFTkRJTkcgaGVyZSAqL1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02Nzg1LVx0XHRcdGlmIChuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3NldCh2bXgpKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NjkwNj1zdGF0aWMgaW50IHZteF9zZXRfbmVzdGVkX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTcwMTAtXHRcdCAqL1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo3MDExOlx0XHR2bXgtXHUwMDNlbmVzdGVkLmh2X2V2bWNzX3ZtcHRyID0gRVZNUFRSX01BUF9QRU5ESU5HO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03MDEyLVx0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfR0VUX05FU1RFRF9TVEFURV9QQUdFUywgdmNwdSk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaD03OT1zdGF0aWMgaW5saW5lIGludCB2bXhfaGFzX3ZhbGlkX3ZtY3MxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaC04Mi1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmg6ODM6XHQvKiAmIzM5O2h2X2V2bWNzX3ZtcHRyJiMzOTsgY2FuIGFsc28gYmUgRVZNUFRSX01BUF9QRU5ESU5HIGhlcmUgKi9cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmgtODQtXHRyZXR1cm4gdm14LVx1MDAzZW5lc3RlZC5jdXJyZW50X3ZtcHRyICE9IC0xdWxsIHx8XG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYz00OTkxPXN0YXRpYyB2b2lkIF9fdm14X3ZjcHVfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNTAwNy0jaWZkZWYgQ09ORklHX0tWTV9IWVBFUlZcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NTAwODpcdHZteC1cdTAwM2VuZXN0ZWQuaHZfZXZtY3Nfdm1wdHIgPSBFVk1QVFJfSU5WQUxJRDtcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNTAwOS0jZW5kaWZcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5oPTczPXN0cnVjdCBuZXN0ZWRfdm14IHtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5oLTE5OS0jaWZkZWYgQ09ORklHX0tWTV9IWVBFUlZcbmFyY2gveDg2L2t2bS92bXgvdm14Lmg6MjAwOlx0Z3BhX3QgaHZfZXZtY3Nfdm1wdHI7XG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5oLTIwMS1cdHN0cnVjdCBrdm1faG9zdF9tYXAgaHZfZXZtY3NfbWFwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDI1CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgaGFuZGxlX3ZtcHRyc3RgIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBtb2RpZnlpbmcgYGhhbmRsZV92bXB0cnN0YC4gVGhlIGtleSBjaGFuZ2UgaXMgdGhhdCBpdCBub3cgcmV0dXJucyBgaHZfZXZtY3Nfdm1wdHJgIGluc3RlYWQgb2YganVzdCAxLiBQcmV2aW91c2x5LCByZXR1cm5pbmcgMSB3b3VsZCBlZmZlY3RpdmVseSBza2lwIHRoZSBpbnN0cnVjdGlvbiB3aXRob3V0IHdyaXRpbmcgYW55dGhpbmcgdG8gbWVtb3J5LiBOb3csIGl0JiMzOTtzIHdyaXRpbmcgc29tZXRoaW5nIOKAkyBhIGBncGFfdGAgc3BlY2lmaWNhbGx5LiBMZXQmIzM5O3MgdW5wYWNrIHRoaXMuCgpgaHZfZXZtY3Nfdm1wdHJgIGl0c2VsZiBpcyBpbml0aWFsaXplZCB0byBgRVZNUFRSX0lOVkFMSURgIGR1cmluZyBhIHZDUFUgcmVzZXQuIFRoZW4sIGl0JiMzOTtzIHVwZGF0ZWQgdG8gYGV2bWNzX2dwYWAsIHdoaWNoIGlzIGEgcGh5c2ljYWwgYWRkcmVzcyBwcm92aWRlZCBieSB0aGUgZ3Vlc3Qgd2hlbiB0aGUgZ3Vlc3QgZXhlY3V0ZXMgYW4gZW5saWdodGVuZWQgYFZNUFRSTERgIGluc3RydWN0aW9uLiBTbywgaXQmIzM5O3MgZXNzZW50aWFsbHkganVzdCBhIDY0LWJpdCBpbnRlZ2VyLCBhIGd1ZXN0LXByb3ZpZGVkIHBoeXNpY2FsIGFkZHJlc3MgdGhhdCB3ZSYjMzk7cmUgc3RvcmluZy4gQ3J1Y2lhbGx5LCBpdCYjMzk7cyAqbm90KiBzb21lIHVuaW5pdGlhbGl6ZWQga2VybmVsIHN0cnVjdHVyZSBiZWluZyBibGluZGx5IGNvcGllZC4gVGhhdCYjMzk7cyBnb29kLgoKVGhlcmVmb3JlLCB3aGVuIGBoYW5kbGVfdm1wdHJzdGAgd3JpdGVzIHRoaXMgdmFsdWUgdG8gZ3Vlc3QgbWVtb3J5IHVzaW5nIGBrdm1fd3JpdGVfZ3Vlc3RfdmlydF9zeXN0ZW1gIG9yIGEgc2ltaWxhciBmdW5jdGlvbiwgaXQmIzM5O3Mgbm90IGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBJdCYjMzk7cyBzaW1wbHkgd3JpdGluZyB0aGUgNjQtYml0IGludGVnZXIgdGhhdCB0aGUgZ3Vlc3QgKml0c2VsZiogcHJldmlvdXNseSBwcm92aWRlZC4gVGhpcyBzZWVtcyBzYWZlIGZyb20gYSBtZW1vcnkgbGVhayBwZXJzcGVjdGl2ZSwgYXMgdGhlICYjMzQ7c2VjcmV0JiMzNDsgKHRoZSBwaHlzaWNhbCBhZGRyZXNzKSBjb21lcyBmcm9tIHRoZSBndWVzdCYjMzk7cyBpbnB1dC4gVGhlIHZ1bG5lcmFiaWxpdHkgKGlmIGFueSkgaXMgaW4gdGhlIGd1ZXN0JiMzOTtzIGNvZGUuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBoYW5kbGVfdm1wdHJzdGAgaXRzZWxmIHdpdGhpbiBgYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY2AgYW5kIG1ha2Ugc3VyZSBteSBhc3N1bXB0aW9ucyBhcmUgdmFsaWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU5NDQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTk0NDpcdC8qIEVtdWxhdGUgdGhlIFZNUFRSU1QgaW5zdHJ1Y3Rpb24gKi9cbjU5NDU6XHRzdGF0aWMgaW50IGhhbmRsZV92bXB0cnN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbjU5NDY6XHR7XG41OTQ3Olx0XHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuNTk0ODpcdFx0dTMyIGluc3RyX2luZm8gPSB2bWNzX3JlYWQzMihWTVhfSU5TVFJVQ1RJT05fSU5GTyk7XG41OTQ5Olx0XHRncGFfdCBjdXJyZW50X3ZtcHRyO1xuNTk1MDpcdFx0c3RydWN0IHg4Nl9leGNlcHRpb24gZTtcbjU5NTE6XHRcdGd2YV90IGd2YTtcbjU5NTI6XHRcdGludCByO1xuNTk1MzpcdFxuNTk1NDpcdFx0aWYgKCFuZXN0ZWRfdm14X2NoZWNrX3Blcm1pc3Npb24odmNwdSkpXG41OTU1Olx0XHRcdHJldHVybiAxO1xuNTk1NjpcdFxuNTk1NzpcdFx0LypcbjU5NTg6XHRcdCAqIEh5cGVyLVYgVExGUyBkb2VzIG5vdCBzcGVjaWZ5IHRoZSBiZWhhdmlvciBvZiBWTVBUUlNUIHdoZW4gZVZNQ1MgaXMgdXNlZFxuNTk1OTpcdFx0ICogYnV0IGdlbnVpbmUgSHlwZXItViBzZWVtcyB0byBiZSByZXR1cm5pbmcgZVZNQ1MgR1BBLlxuNTk2MDpcdFx0ICovXG41OTYxOlx0XHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh0b192bXgodmNwdSkpKVxuNTk2MjpcdFx0XHRjdXJyZW50X3ZtcHRyID0gdG9fdm14KHZjcHUpLVx1MDAzZW5lc3RlZC5odl9ldm1jc192bXB0cjtcbjU5NjM6XHRcdGVsc2VcbjU5NjQ6XHRcdFx0Y3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS1cdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0cjtcbjU5NjU6XHRcbjU5NjY6XHRcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIGV4aXRfcXVhbCwgaW5zdHJfaW5mbyxcbjU5Njc6XHRcdFx0XHRcdHRydWUsIHNpemVvZihncGFfdCksIFx1MDAyNmd2YSkpXG41OTY4Olx0XHRcdHJldHVybiAxO1xuNTk2OTpcdFx0LyogKl9zeXN0ZW0gb2ssIG5lc3RlZF92bXhfY2hlY2tfcGVybWlzc2lvbiBoYXMgdmVyaWZpZWQgY3BsPTAgKi9cbjU5NzA6XHRcdHIgPSBrdm1fd3JpdGVfZ3Vlc3RfdmlydF9zeXN0ZW0odmNwdSwgZ3ZhLCAodm9pZCAqKVx1MDAyNmN1cnJlbnRfdm1wdHIsXG41OTcxOlx0XHRcdFx0XHRcdHNpemVvZihncGFfdCksIFx1MDAyNmUpO1xuNTk3MjpcdFx0aWYgKHIgIT0gWDg2RU1VTF9DT05USU5VRSlcbjU5NzM6XHRcdFx0cmV0dXJuIGt2bV9oYW5kbGVfbWVtb3J5X2ZhaWx1cmUodmNwdSwgciwgXHUwMDI2ZSk7XG41OTc0Olx0XG41OTc1Olx0XHRyZXR1cm4gbmVzdGVkX3ZteF9zdWNjZWVkKHZjcHUpO1xuNTk3NjpcdH1cbjU5Nzc6XHRcbjU5Nzg6XHQvKiBFbXVsYXRlIHRoZSBJTlZFUFQgaW5zdHJ1Y3Rpb24gKi9cbjU5Nzk6XHRzdGF0aWMgaW50IGhhbmRsZV9pbnZlcHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuNTk4MDpcdHtcbjU5ODE6XHRcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xuNTk4MjpcdFx0dTMyIHZteF9pbnN0cnVjdGlvbl9pbmZvLCB0eXBlcztcbjU5ODM6XHRcdHVuc2lnbmVkIGxvbmcgdHlwZSwgcm9vdHNfdG9fZnJlZTtcbjU5ODQ6XHRcdHN0cnVjdCBrdm1fbW11ICptbXU7XG41OTg1Olx0XHRndmFfdCBndmE7XG41OTg2Olx0XHRzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBlO1xuNTk4NzpcdFx0c3RydWN0IHtcbjU5ODg6XHRcdFx0dTY0IGVwdHAsIGdwYTtcbjU5ODk6XHRcdH0gb3BlcmFuZDtcbjU5OTA6XHRcdGludCBpLCByLCBncHJfaW5kZXg7XG41OTkxOlx0XG41OTkyOlx0XHRpZiAoISh2bXgtXHUwMDNlbmVzdGVkLm1zcnMuc2Vjb25kYXJ5X2N0bHNfaGlnaCBcdTAwMjZcbjU5OTM6XHRcdCAgICAgIFNFQ09OREFSWV9FWEVDX0VOQUJMRV9FUFQpIHx8XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1MjAKCQkJCQkJCW91dHB1dDogMjI0CgkJCQkJCQl0aG91Z2h0czogMzcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBOZXN0ZWQgVk1YIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZnJvbSBhIG1lbW9yeSBzYWZldHkgcGVyc3BlY3RpdmUuIEkmIzM5O3ZlIHJldmlld2VkIHRoaXMgS1ZNIHBhdGNoLCBhbmQgaGVyZSYjMzk7cyBteSB0YWtlOiB0aGUga2V5IG1vZGlmaWNhdGlvbiBpcyByZWxhdGVkIHRvIHRoZSBWTVBUUkxEIGFuZCBWTVBUUlNUIGluc3RydWN0aW9ucyB3aXRoaW4gdGhlIG5lc3RlZCBWTVggZW11bGF0aW9uLCBzcGVjaWZpY2FsbHkgd2hlbiBlVk1DUyBpcyBhY3RpdmUuCgpGaXJzdCwgSSBzZWUgdGhhdCBgY3VycmVudF92bXB0cmAg4oCTIHdoaWNoIGlzIGEgYGdwYV90YCwgYSBzdHJhaWdodCA2NC1iaXQgdW5zaWduZWQgaW50ZWdlciByZXByZXNlbnRpbmcgYSBHdWVzdCBQaHlzaWNhbCBBZGRyZXNzIOKAkyBpcyBiZWluZyB3cml0dGVuIHRvIGd1ZXN0IG1lbW9yeSB1c2luZyBga3ZtX3dyaXRlX2d1ZXN0X3ZpcnRfc3lzdGVtYC4gQ3JpdGljYWxseSwgdGhpcyBgZ3BhX3RgIGlzICpmdWxseSogaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZSB3cml0ZSBhbmQgaXQgaGFzIG5vIGludGVybmFsIHBhZGRpbmcuIFRoaXMgbWVhbnMgd2UmIzM5O3JlIG5vdCBkZWFsaW5nIHdpdGggYSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGNodW5rIG9mIG1lbW9yeSBiZWluZyBsZWFrZWQuIFRoZSBgaWYvZWxzZWAgYmxvY2sgY2xlYXJseSBoYW5kbGVzIHRoZSBpbml0aWFsaXphdGlvbi4gTm8gbWVtb3J5IGxlYWtzIGhlcmUuCgpTZWNvbmQsIHRoZSBwYXRjaCBtb2RpZmllcyBgaGFuZGxlX3ZtcHRybGRgIHRvIHF1ZXVlIGEgI1VEIGV4Y2VwdGlvbiBpbnN0ZWFkIG9mIGp1c3QgcmV0dXJuaW5nLiBUaGlzIGNoYW5nZSBpbiBjb250cm9sIGZsb3cgZG9lc24mIzM5O3QgdG91Y2ggYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGF0IGFsbCwgYW5kIHRoYXQgcGFydCBpcyBzaW1wbGUgZW5vdWdoLgoKVGhlIHJlbWFpbmRlciBvZiB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgc29sZWx5IGZvY3VzZWQgb24gc2VsZnRlc3RzLiBGcm9tIHRoZSBkZXNjcmlwdGlvbiwgSSBkb24mIzM5O3Qgc2VlIGFueXRoaW5nIHN1c3BpY2lvdXMgdGhlcmUsIGVpdGhlci4KCkluIGVzc2VuY2UsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyAqbmV3KiBhdmVudWVzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mb3JtYXRpb24gbGVha3MuIFdlJiMzOTtyZSBqdXN0IGFsdGVyaW5nIHRoZSBiZWhhdmlvciBvZiB0aG9zZSB0d28gVk1YIGluc3RydWN0aW9ucy4gU3RhbmRhcmQgS0FTQU4gc2hvdWxkIGhhbmRsZSBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgaW4gdGhlIG1vZGlmaWVkIGNvZGUuCgpUaGVyZWZvcmUsIGdpdmVuIG15IHVuZGVyc3RhbmRpbmcsIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLiBUaGlzIGxvb2tzIHNhZmUgZnJvbSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBwZXJzcGVjdGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNJiMzOTtzIG5lc3RlZCBWTVggZW11bGF0aW9uIGZvciB0aGUgVk1QVFJMRCBhbmQgVk1QVFJTVCBpbnN0cnVjdGlvbnMgd2hlbiBFbmxpZ2h0ZW5lZCBWTUNTIChlVk1DUykgaXMgdXNlZC4gSW4gYGhhbmRsZV92bXB0cnN0YCwgaXQgY2hhbmdlcyB0aGUgY29kZSB0byB3cml0ZSB0aGUgYGh2X2V2bWNzX3ZtcHRyYCAoYSA2NC1iaXQgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzcykgdG8gZ3Vlc3QgbWVtb3J5IGluc3RlYWQgb2Ygc2tpcHBpbmcgdGhlIGluc3RydWN0aW9uLiBTaW5jZSBgaHZfZXZtY3Nfdm1wdHJgIGlzIGEgZnVsbHkgaW5pdGlhbGl6ZWQgNjQtYml0IGludGVnZXIgKGBncGFfdGApIHdpdGhvdXQgYW55IHBhZGRpbmcsIHdyaXRpbmcgaXQgdG8gZ3Vlc3QgbWVtb3J5IGRvZXMgbm90IGxlYWsgYW55IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gVGhlIHBhdGNoIGFsc28gbW9kaWZpZXMgYGhhbmRsZV92bXB0cmxkYCB0byBxdWV1ZSBhICNVRCBleGNlcHRpb24sIHdoaWNoIG9ubHkgYWZmZWN0cyBjb250cm9sIGZsb3cgYW5kIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIGNvbXBsZXggc3RydWN0dXJlcywgb3IgcGFkZGluZyBpbnRyb2R1Y2VkIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgaW4gdGhpcyBhcmVhLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNJiMzOTtzIG5lc3RlZCBWTVggZW11bGF0aW9uIGZvciB0aGUgVk1QVFJMRCBhbmQgVk1QVFJTVCBpbnN0cnVjdGlvbnMgd2hlbiBFbmxpZ2h0ZW5lZCBWTUNTIChlVk1DUykgaXMgdXNlZC4gSW4gYGhhbmRsZV92bXB0cnN0YCwgaXQgY2hhbmdlcyB0aGUgY29kZSB0byB3cml0ZSB0aGUgYGh2X2V2bWNzX3ZtcHRyYCAoYSA2NC1iaXQgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzcykgdG8gZ3Vlc3QgbWVtb3J5IGluc3RlYWQgb2Ygc2tpcHBpbmcgdGhlIGluc3RydWN0aW9uLiBTaW5jZSBgaHZfZXZtY3Nfdm1wdHJgIGlzIGEgZnVsbHkgaW5pdGlhbGl6ZWQgNjQtYml0IGludGVnZXIgKGBncGFfdGApIHdpdGhvdXQgYW55IHBhZGRpbmcsIHdyaXRpbmcgaXQgdG8gZ3Vlc3QgbWVtb3J5IGRvZXMgbm90IGxlYWsgYW55IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gVGhlIHBhdGNoIGFsc28gbW9kaWZpZXMgYGhhbmRsZV92bXB0cmxkYCB0byBxdWV1ZSBhICNVRCBleGNlcHRpb24sIHdoaWNoIG9ubHkgYWZmZWN0cyBjb250cm9sIGZsb3cgYW5kIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIGNvbXBsZXggc3RydWN0dXJlcywgb3IgcGFkZGluZyBpbnRyb2R1Y2VkIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgaW4gdGhpcyBhcmVhLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzoxODowNy4zMTM0MzM0ODFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDcyNTcxNDE1Mjk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fSFlQRVJWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaGFuZGxlX3ZtcHRybGRcIixcbiAgICBcImhhbmRsZV92bXB0cnN0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0ncyBuZXN0ZWQgVk1YIGVtdWxhdGlvbiBmb3IgdGhlIFZNUFRSTEQgYW5kIFZNUFRSU1QgaW5zdHJ1Y3Rpb25zIHdoZW4gRW5saWdodGVuZWQgVk1DUyAoZVZNQ1MpIGlzIHVzZWQuIEluIGBoYW5kbGVfdm1wdHJzdGAsIGl0IGNoYW5nZXMgdGhlIGNvZGUgdG8gd3JpdGUgdGhlIGBodl9ldm1jc192bXB0cmAgKGEgNjQtYml0IGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MpIHRvIGd1ZXN0IG1lbW9yeSBpbnN0ZWFkIG9mIHNraXBwaW5nIHRoZSBpbnN0cnVjdGlvbi4gU2luY2UgYGh2X2V2bWNzX3ZtcHRyYCBpcyBhIGZ1bGx5IGluaXRpYWxpemVkIDY0LWJpdCBpbnRlZ2VyIChgZ3BhX3RgKSB3aXRob3V0IGFueSBwYWRkaW5nLCB3cml0aW5nIGl0IHRvIGd1ZXN0IG1lbW9yeSBkb2VzIG5vdCBsZWFrIGFueSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIFRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGBoYW5kbGVfdm1wdHJsZGAgdG8gcXVldWUgYSAjVUQgZXhjZXB0aW9uLCB3aGljaCBvbmx5IGFmZmVjdHMgY29udHJvbCBmbG93IGFuZCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBjb21wbGV4IHN0cnVjdHVyZXMsIG9yIHBhZGRpbmcgaW50cm9kdWNlZCB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBidWdzIGluIHRoaXMgYXJlYS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgS1ZNIG5lc3RlZCBWTVggd2hlbiBoYW5kbGluZyBWTVBUUkxEIGFuZCBWTVBUUlNUIGluc3RydWN0aW9ucyBpbiB0aGUgcHJlc2VuY2Ugb2YgSHlwZXItViBlbmxpZ2h0ZW5lZCBWTUNTIChlVk1DUykuIFNwZWNpZmljYWxseSwgaXQgcXVldWVzIGEgI1VEIGV4Y2VwdGlvbiBpbnN0ZWFkIG9mIHNpbGVudGx5IGlnbm9yaW5nIFZNUFRSTEQsIGFuZCByZXR1cm5zIHRoZSBlVk1DUyBHUEEgaW5zdGVhZCBvZiBpZ25vcmluZyBWTVBUUlNULiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgS1ZNIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6MTg6MDcuMzEzNDQxNTUxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM5NDE3MDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzQ4Y2FjZjA0MTkyNDYxYmQ3ZTk1NjU3NWYxZjdlN2ZmNDA5ZTRlM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyAxNCAxNzoxODowNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xcbmluZGV4IGRkZjZkZjdiZWU5M2IuLjBmNWU0YjQ3ZWNiMTkgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcXG5AQCAtNTg3OSw2ICs1ODc5LDEyIEBAIHN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRybGQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRpZiAoIW5lc3RlZF92bXhfY2hlY2tfcGVybWlzc2lvbih2Y3B1KSlcXG4gXFx0XFx0cmV0dXJuIDE7XFxuIFxcbitcXHQvKiBGb3JiaWQgbm9ybWFsIFZNUFRSTEQgaWYgRW5saWdodGVuZWQgdmVyc2lvbiB3YXMgdXNlZCAqL1xcbitcXHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKSB7XFxuK1xcdFxcdGt2bV9xdWV1ZV9leGNlcHRpb24odmNwdSwgVURfVkVDVE9SKTtcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChuZXN0ZWRfdm14X2dldF92bXB0cih2Y3B1LCBcXHUwMDI2dm1wdHIsIFxcdTAwMjZyKSlcXG4gXFx0XFx0cmV0dXJuIHI7XFxuIFxcbkBAIC01ODg4LDEwICs1ODk0LDYgQEAgc3RhdGljIGludCBoYW5kbGVfdm1wdHJsZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdGlmICh2bXB0ciA9PSB2bXgtXFx1MDAzZW5lc3RlZC52bXhvbl9wdHIpXFxuIFxcdFxcdHJldHVybiBuZXN0ZWRfdm14X2ZhaWwodmNwdSwgVk1YRVJSX1ZNUFRSTERfVk1YT05fUE9JTlRFUik7XFxuIFxcbi1cXHQvKiBGb3JiaWQgbm9ybWFsIFZNUFRSTEQgaWYgRW5saWdodGVuZWQgdmVyc2lvbiB3YXMgdXNlZCAqL1xcbi1cXHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKVxcbi1cXHRcXHRyZXR1cm4gMTtcXG4tXFxuIFxcdGlmICh2bXgtXFx1MDAzZW5lc3RlZC5jdXJyZW50X3ZtcHRyICE9IHZtcHRyKSB7XFxuIFxcdFxcdHN0cnVjdCBnZm5fdG9faHZhX2NhY2hlICpnaGMgPSBcXHUwMDI2dm14LVxcdTAwM2VuZXN0ZWQudm1jczEyX2NhY2hlO1xcbiBcXHRcXHRzdHJ1Y3Qgdm1jc19oZHIgaGRyO1xcbkBAIC01OTQ0LDcgKzU5NDYsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXB0cnN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xcbiBcXHR1MzIgaW5zdHJfaW5mbyA9IHZtY3NfcmVhZDMyKFZNWF9JTlNUUlVDVElPTl9JTkZPKTtcXG4tXFx0Z3BhX3QgY3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS1cXHUwMDNlbmVzdGVkLmN1cnJlbnRfdm1wdHI7XFxuK1xcdGdwYV90IGN1cnJlbnRfdm1wdHI7XFxuIFxcdHN0cnVjdCB4ODZfZXhjZXB0aW9uIGU7XFxuIFxcdGd2YV90IGd2YTtcXG4gXFx0aW50IHI7XFxuQEAgLTU5NTIsOCArNTk1NCwxNCBAQCBzdGF0aWMgaW50IGhhbmRsZV92bXB0cnN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0aWYgKCFuZXN0ZWRfdm14X2NoZWNrX3Blcm1pc3Npb24odmNwdSkpXFxuIFxcdFxcdHJldHVybiAxO1xcbiBcXG4tXFx0aWYgKHVubGlrZWx5KG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodG9fdm14KHZjcHUpKSkpXFxuLVxcdFxcdHJldHVybiAxO1xcbitcXHQvKlxcbitcXHQgKiBIeXBlci1WIFRMRlMgZG9lcyBub3Qgc3BlY2lmeSB0aGUgYmVoYXZpb3Igb2YgVk1QVFJTVCB3aGVuIGVWTUNTIGlzIHVzZWRcXG4rXFx0ICogYnV0IGdlbnVpbmUgSHlwZXItViBzZWVtcyB0byBiZSByZXR1cm5pbmcgZVZNQ1MgR1BBLlxcbitcXHQgKi9cXG4rXFx0aWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodG9fdm14KHZjcHUpKSlcXG4rXFx0XFx0Y3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS1cXHUwMDNlbmVzdGVkLmh2X2V2bWNzX3ZtcHRyO1xcbitcXHRlbHNlXFxuK1xcdFxcdGN1cnJlbnRfdm1wdHIgPSB0b192bXgodmNwdSktXFx1MDAzZW5lc3RlZC5jdXJyZW50X3ZtcHRyO1xcbiBcXG4gXFx0aWYgKGdldF92bXhfbWVtX2FkZHJlc3ModmNwdSwgZXhpdF9xdWFsLCBpbnN0cl9pbmZvLFxcbiBcXHRcXHRcXHRcXHR0cnVlLCBzaXplb2YoZ3BhX3QpLCBcXHUwMDI2Z3ZhKSlcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oXFxuaW5kZXggOTBmZmZhZjkxNTk1OC4uZTIxNzhhNjY4M2NhOSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmhcXG5AQCAtMzI1LDkgKzMyNSw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IHZtcHRybGQodTY0IHZtY3NfcGEpXFxuIHtcXG4gXFx0dTggcmV0O1xcbiBcXG4tXFx0aWYgKGVuYWJsZV9ldm1jcylcXG4tXFx0XFx0cmV0dXJuIC0xO1xcbi1cXG4gXFx0X19hc21fXyBfX3ZvbGF0aWxlX18gKFxcXCJ2bXB0cmxkICVbcGFdOyBzZXRuYSAlW3JldF1cXFwiXFxuIFxcdFxcdDogW3JldF1cXFwiPXJtXFxcIihyZXQpXFxuIFxcdFxcdDogW3BhXVxcXCJtXFxcIih2bWNzX3BhKVxcbkBAIC0zNDEsOSArMzM4LDYgQEAgc3RhdGljIGlubGluZSBpbnQgdm1wdHJzdCh1NjQgKnZhbHVlKVxcbiBcXHR1NjQgdG1wO1xcbiBcXHR1OCByZXQ7XFxuIFxcbi1cXHRpZiAoZW5hYmxlX2V2bWNzKVxcbi1cXHRcXHRyZXR1cm4gZXZtY3Nfdm1wdHJzdCh2YWx1ZSk7XFxuLVxcbiBcXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcXFwidm1wdHJzdCAlW3ZhbHVlXTsgc2V0bmEgJVtyZXRdXFxcIlxcbiBcXHRcXHQ6IFt2YWx1ZV1cXFwiPW1cXFwiKHRtcCksIFtyZXRdXFxcIj1ybVxcXCIocmV0KVxcbiBcXHRcXHQ6IDogXFxcImNjXFxcIiwgXFxcIm1lbW9yeVxcXCIpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl9ldm1jcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfZXZtY3MuY1xcbmluZGV4IGM3ZmExMTRhZWUyMGYuLjZhNmQ5NDBhNzg5MTggMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfZXZtY3MuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X2V2bWNzLmNcXG5AQCAtMTgsMTIgKzE4LDE2IEBAXFxuICNpbmNsdWRlIFxcXCJoeXBlcnYuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInZteC5oXFxcIlxcbiBcXG4rI2RlZmluZSBWTUxBVU5DSF9JTlNOX1NJWkUgM1xcbisjZGVmaW5lIFZNUFRSTERfSU5TTl9TSVpFIDVcXG4rXFxuIHN0YXRpYyBpbnQgdWRfY291bnQ7XFxuK3N0YXRpYyBpbnQgdWRfaW5zbl9za2lwX3NpemU7XFxuIFxcbiBzdGF0aWMgdm9pZCBndWVzdF91ZF9oYW5kbGVyKHN0cnVjdCBleF9yZWdzICpyZWdzKVxcbiB7XFxuIFxcdHVkX2NvdW50Kys7XFxuLVxcdHJlZ3MtXFx1MDAzZXJpcCArPSAzOyAvKiBWTUxBVU5DSCAqL1xcbitcXHRyZWdzLVxcdTAwM2VyaXAgKz0gdWRfaW5zbl9za2lwX3NpemU7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGd1ZXN0X25taV9oYW5kbGVyKHN0cnVjdCBleF9yZWdzICpyZWdzKVxcbkBAIC05NSwxNiArOTksMTUgQEAgdm9pZCBndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcywgc3RydWN0IGh5cGVydl90ZXN0X3BhZ2VzICpodl9wYWdlcyxcXG4gXFx0R1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKSk7XFxuIFxcdEdVRVNUX1NZTkMoMyk7XFxuIFxcdEdVRVNUX0FTU0VSVChsb2FkX2V2bWNzKGh2X3BhZ2VzKSk7XFxuLVxcdEdVRVNUX0FTU0VSVCh2bXB0cnN0eigpID09IGh2X3BhZ2VzLVxcdTAwM2VlbmxpZ2h0ZW5lZF92bWNzX2dwYSk7XFxuK1xcdC8qIFZNUFRSU1QgcmV0dXJucyAtMSB1bnRpbCBWTUxBVU5DSCB3aXRoIGVWTUNTIHB0ciBzZXQgKi9cXG4rXFx0R1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gLTEpO1xcbiBcXG4gXFx0R1VFU1RfU1lOQyg0KTtcXG4tXFx0R1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gaHZfcGFnZXMtXFx1MDAzZWVubGlnaHRlbmVkX3ZtY3NfZ3BhKTtcXG4gXFxuIFxcdHByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUsXFxuIFxcdFxcdCAgICAgXFx1MDAyNmwyX2d1ZXN0X3N0YWNrW0wyX0dVRVNUX1NUQUNLX1NJWkVdKTtcXG4gXFxuIFxcdEdVRVNUX1NZTkMoNSk7XFxuLVxcdEdVRVNUX0FTU0VSVCh2bXB0cnN0eigpID09IGh2X3BhZ2VzLVxcdTAwM2VlbmxpZ2h0ZW5lZF92bWNzX2dwYSk7XFxuIFxcdGN1cnJlbnRfZXZtY3MtXFx1MDAzZXJldmlzaW9uX2lkID0gLTF1O1xcbiBcXHRHVUVTVF9BU1NFUlQodm1sYXVuY2goKSk7XFxuIFxcdGN1cnJlbnRfZXZtY3MtXFx1MDAzZXJldmlzaW9uX2lkID0gRVZNQ1NfVkVSU0lPTjtcXG5AQCAtMTgzLDEwICsxODYsMTUgQEAgdm9pZCBndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcywgc3RydWN0IGh5cGVydl90ZXN0X3BhZ2VzICpodl9wYWdlcyxcXG4gXFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7XFxuIFxcdEdVRVNUX1NZTkMoMTEpO1xcbiBcXG4rXFx0dWRfaW5zbl9za2lwX3NpemUgPSBWTVBUUkxEX0lOU05fU0laRTtcXG4rXFx0dm1wdHJsZChodl9wYWdlcy1cXHUwMDNlZW5saWdodGVuZWRfdm1jc19ncGEpO1xcbitcXHRHVUVTVF9BU1NFUlQodWRfY291bnQgPT0gMSk7XFxuK1xcbiBcXHQvKiBUcnkgZW5saWdodGVuZWQgdm1wdHJsZCB3aXRoIGFuIGluY29ycmVjdCBHUEEgKi9cXG4rXFx0dWRfaW5zbl9za2lwX3NpemUgPSBWTUxBVU5DSF9JTlNOX1NJWkU7XFxuIFxcdGV2bWNzX3ZtcHRybGQoMHhkZWFkYmVlZiwgaHZfcGFnZXMtXFx1MDAzZWVubGlnaHRlbmVkX3ZtY3MpO1xcbiBcXHRHVUVTVF9BU1NFUlQodm1sYXVuY2goKSk7XFxuLVxcdEdVRVNUX0FTU0VSVCh1ZF9jb3VudCA9PSAxKTtcXG4rXFx0R1VFU1RfQVNTRVJUKHVkX2NvdW50ID09IDIpO1xcbiBcXHRHVUVTVF9ET05FKCk7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE3OjE4OjA4Ljk1MzQ1NDUxOVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQ5OTU2NjE1NTgzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0hZUEVSVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhhbmRsZV92bXB0cmxkXCIsXG4gICAgXCJoYW5kbGVfdm1wdHJzdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBiZWhhdmlvciBvZiBLVk0gbmVzdGVkIFZNWCB3aGVuIGhhbmRsaW5nIFZNUFRSTEQgYW5kIFZNUFRSU1QgaW5zdHJ1Y3Rpb25zIGluIHRoZSBwcmVzZW5jZSBvZiBIeXBlci1WIGVubGlnaHRlbmVkIFZNQ1MgKGVWTUNTKS4gU3BlY2lmaWNhbGx5LCBpdCBxdWV1ZXMgYSAjVUQgZXhjZXB0aW9uIGluc3RlYWQgb2Ygc2lsZW50bHkgaWdub3JpbmcgVk1QVFJMRCwgYW5kIHJldHVybnMgdGhlIGVWTUNTIEdQQSBpbnN0ZWFkIG9mIGlnbm9yaW5nIFZNUFRSU1QuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBLVk0gbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzNDhjYWNmMDQxOTI0NjFiZDdlOTU2NTc1ZjFmN2U3ZmY0MDllNGUzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMTQgMTc6MTg6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xuaW5kZXggZGRmNmRmN2JlZTkzYi4uMGY1ZTRiNDdlY2IxOSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbkBAIC01ODc5LDYgKzU4NzksMTIgQEAgc3RhdGljIGludCBoYW5kbGVfdm1wdHJsZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAoIW5lc3RlZF92bXhfY2hlY2tfcGVybWlzc2lvbih2Y3B1KSlcbiBcdFx0cmV0dXJuIDE7XG4gXG4rXHQvKiBGb3JiaWQgbm9ybWFsIFZNUFRSTEQgaWYgRW5saWdodGVuZWQgdmVyc2lvbiB3YXMgdXNlZCAqL1xuK1x0aWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSkge1xuK1x0XHRrdm1fcXVldWVfZXhjZXB0aW9uKHZjcHUsIFVEX1ZFQ1RPUik7XG4rXHRcdHJldHVybiAxO1xuK1x0fVxuK1xuIFx0aWYgKG5lc3RlZF92bXhfZ2V0X3ZtcHRyKHZjcHUsIFx1MDAyNnZtcHRyLCBcdTAwMjZyKSlcbiBcdFx0cmV0dXJuIHI7XG4gXG5AQCAtNTg4OCwxMCArNTg5NCw2IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRybGQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKHZtcHRyID09IHZteC1cdTAwM2VuZXN0ZWQudm14b25fcHRyKVxuIFx0XHRyZXR1cm4gbmVzdGVkX3ZteF9mYWlsKHZjcHUsIFZNWEVSUl9WTVBUUkxEX1ZNWE9OX1BPSU5URVIpO1xuIFxuLVx0LyogRm9yYmlkIG5vcm1hbCBWTVBUUkxEIGlmIEVubGlnaHRlbmVkIHZlcnNpb24gd2FzIHVzZWQgKi9cbi1cdGlmIChuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkpXG4tXHRcdHJldHVybiAxO1xuLVxuIFx0aWYgKHZteC1cdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0ciAhPSB2bXB0cikge1xuIFx0XHRzdHJ1Y3QgZ2ZuX3RvX2h2YV9jYWNoZSAqZ2hjID0gXHUwMDI2dm14LVx1MDAzZW5lc3RlZC52bWNzMTJfY2FjaGU7XG4gXHRcdHN0cnVjdCB2bWNzX2hkciBoZHI7XG5AQCAtNTk0NCw3ICs1OTQ2LDcgQEAgc3RhdGljIGludCBoYW5kbGVfdm1wdHJzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBleGl0X3F1YWwgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdHUzMiBpbnN0cl9pbmZvID0gdm1jc19yZWFkMzIoVk1YX0lOU1RSVUNUSU9OX0lORk8pO1xuLVx0Z3BhX3QgY3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS1cdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0cjtcbitcdGdwYV90IGN1cnJlbnRfdm1wdHI7XG4gXHRzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBlO1xuIFx0Z3ZhX3QgZ3ZhO1xuIFx0aW50IHI7XG5AQCAtNTk1Miw4ICs1OTU0LDE0IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRyc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKCFuZXN0ZWRfdm14X2NoZWNrX3Blcm1pc3Npb24odmNwdSkpXG4gXHRcdHJldHVybiAxO1xuIFxuLVx0aWYgKHVubGlrZWx5KG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodG9fdm14KHZjcHUpKSkpXG4tXHRcdHJldHVybiAxO1xuK1x0LypcbitcdCAqIEh5cGVyLVYgVExGUyBkb2VzIG5vdCBzcGVjaWZ5IHRoZSBiZWhhdmlvciBvZiBWTVBUUlNUIHdoZW4gZVZNQ1MgaXMgdXNlZFxuK1x0ICogYnV0IGdlbnVpbmUgSHlwZXItViBzZWVtcyB0byBiZSByZXR1cm5pbmcgZVZNQ1MgR1BBLlxuK1x0ICovXG4rXHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh0b192bXgodmNwdSkpKVxuK1x0XHRjdXJyZW50X3ZtcHRyID0gdG9fdm14KHZjcHUpLVx1MDAzZW5lc3RlZC5odl9ldm1jc192bXB0cjtcbitcdGVsc2VcbitcdFx0Y3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS1cdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0cjtcbiBcbiBcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIGV4aXRfcXVhbCwgaW5zdHJfaW5mbyxcbiBcdFx0XHRcdHRydWUsIHNpemVvZihncGFfdCksIFx1MDAyNmd2YSkpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oXG5pbmRleCA5MGZmZmFmOTE1OTU4Li5lMjE3OGE2NjgzY2E5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmhcbkBAIC0zMjUsOSArMzI1LDYgQEAgc3RhdGljIGlubGluZSBpbnQgdm1wdHJsZCh1NjQgdm1jc19wYSlcbiB7XG4gXHR1OCByZXQ7XG4gXG4tXHRpZiAoZW5hYmxlX2V2bWNzKVxuLVx0XHRyZXR1cm4gLTE7XG4tXG4gXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyAoXCJ2bXB0cmxkICVbcGFdOyBzZXRuYSAlW3JldF1cIlxuIFx0XHQ6IFtyZXRdXCI9cm1cIihyZXQpXG4gXHRcdDogW3BhXVwibVwiKHZtY3NfcGEpXG5AQCAtMzQxLDkgKzMzOCw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IHZtcHRyc3QodTY0ICp2YWx1ZSlcbiBcdHU2NCB0bXA7XG4gXHR1OCByZXQ7XG4gXG4tXHRpZiAoZW5hYmxlX2V2bWNzKVxuLVx0XHRyZXR1cm4gZXZtY3Nfdm1wdHJzdCh2YWx1ZSk7XG4tXG4gXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcInZtcHRyc3QgJVt2YWx1ZV07IHNldG5hICVbcmV0XVwiXG4gXHRcdDogW3ZhbHVlXVwiPW1cIih0bXApLCBbcmV0XVwiPXJtXCIocmV0KVxuIFx0XHQ6IDogXCJjY1wiLCBcIm1lbW9yeVwiKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl9ldm1jcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfZXZtY3MuY1xuaW5kZXggYzdmYTExNGFlZTIwZi4uNmE2ZDk0MGE3ODkxOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X2V2bWNzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X2V2bWNzLmNcbkBAIC0xOCwxMiArMTgsMTYgQEBcbiAjaW5jbHVkZSBcImh5cGVydi5oXCJcbiAjaW5jbHVkZSBcInZteC5oXCJcbiBcbisjZGVmaW5lIFZNTEFVTkNIX0lOU05fU0laRSAzXG4rI2RlZmluZSBWTVBUUkxEX0lOU05fU0laRSA1XG4rXG4gc3RhdGljIGludCB1ZF9jb3VudDtcbitzdGF0aWMgaW50IHVkX2luc25fc2tpcF9zaXplO1xuIFxuIHN0YXRpYyB2b2lkIGd1ZXN0X3VkX2hhbmRsZXIoc3RydWN0IGV4X3JlZ3MgKnJlZ3MpXG4ge1xuIFx0dWRfY291bnQrKztcbi1cdHJlZ3MtXHUwMDNlcmlwICs9IDM7IC8qIFZNTEFVTkNIICovXG4rXHRyZWdzLVx1MDAzZXJpcCArPSB1ZF9pbnNuX3NraXBfc2l6ZTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZ3Vlc3Rfbm1pX2hhbmRsZXIoc3RydWN0IGV4X3JlZ3MgKnJlZ3MpXG5AQCAtOTUsMTYgKzk5LDE1IEBAIHZvaWQgZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMsIHN0cnVjdCBoeXBlcnZfdGVzdF9wYWdlcyAqaHZfcGFnZXMsXG4gXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTtcbiBcdEdVRVNUX1NZTkMoMyk7XG4gXHRHVUVTVF9BU1NFUlQobG9hZF9ldm1jcyhodl9wYWdlcykpO1xuLVx0R1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gaHZfcGFnZXMtXHUwMDNlZW5saWdodGVuZWRfdm1jc19ncGEpO1xuK1x0LyogVk1QVFJTVCByZXR1cm5zIC0xIHVudGlsIFZNTEFVTkNIIHdpdGggZVZNQ1MgcHRyIHNldCAqL1xuK1x0R1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gLTEpO1xuIFxuIFx0R1VFU1RfU1lOQyg0KTtcbi1cdEdVRVNUX0FTU0VSVCh2bXB0cnN0eigpID09IGh2X3BhZ2VzLVx1MDAzZWVubGlnaHRlbmVkX3ZtY3NfZ3BhKTtcbiBcbiBcdHByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUsXG4gXHRcdCAgICAgXHUwMDI2bDJfZ3Vlc3Rfc3RhY2tbTDJfR1VFU1RfU1RBQ0tfU0laRV0pO1xuIFxuIFx0R1VFU1RfU1lOQyg1KTtcbi1cdEdVRVNUX0FTU0VSVCh2bXB0cnN0eigpID09IGh2X3BhZ2VzLVx1MDAzZWVubGlnaHRlbmVkX3ZtY3NfZ3BhKTtcbiBcdGN1cnJlbnRfZXZtY3MtXHUwMDNlcmV2aXNpb25faWQgPSAtMXU7XG4gXHRHVUVTVF9BU1NFUlQodm1sYXVuY2goKSk7XG4gXHRjdXJyZW50X2V2bWNzLVx1MDAzZXJldmlzaW9uX2lkID0gRVZNQ1NfVkVSU0lPTjtcbkBAIC0xODMsMTAgKzE4NiwxNSBAQCB2b2lkIGd1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzLCBzdHJ1Y3QgaHlwZXJ2X3Rlc3RfcGFnZXMgKmh2X3BhZ2VzLFxuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7XG4gXHRHVUVTVF9TWU5DKDExKTtcbiBcbitcdHVkX2luc25fc2tpcF9zaXplID0gVk1QVFJMRF9JTlNOX1NJWkU7XG4rXHR2bXB0cmxkKGh2X3BhZ2VzLVx1MDAzZWVubGlnaHRlbmVkX3ZtY3NfZ3BhKTtcbitcdEdVRVNUX0FTU0VSVCh1ZF9jb3VudCA9PSAxKTtcbitcbiBcdC8qIFRyeSBlbmxpZ2h0ZW5lZCB2bXB0cmxkIHdpdGggYW4gaW5jb3JyZWN0IEdQQSAqL1xuK1x0dWRfaW5zbl9za2lwX3NpemUgPSBWTUxBVU5DSF9JTlNOX1NJWkU7XG4gXHRldm1jc192bXB0cmxkKDB4ZGVhZGJlZWYsIGh2X3BhZ2VzLVx1MDAzZWVubGlnaHRlbmVkX3ZtY3MpO1xuIFx0R1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpO1xuLVx0R1VFU1RfQVNTRVJUKHVkX2NvdW50ID09IDEpO1xuK1x0R1VFU1RfQVNTRVJUKHVkX2NvdW50ID09IDIpO1xuIFx0R1VFU1RfRE9ORSgpO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE3OjE4OjA4Ljk1MzQ1NTkzOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMjU1NDY5MjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS1ZNIE5lc3RlZCBWTVggUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBLVk0gbmVzdGVkIFZNWCwgc3BlY2lmaWNhbGx5IGNoYW5nZXMgdG8gYGFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNgLiAgSXQncyB0b3VjaGluZyBgaGFuZGxlX3ZtcHRybGRgIGFuZCBgaGFuZGxlX3ZtcHRyc3RgLCB3aGljaCBhcmUga2V5IGJlY2F1c2UgdGhleSBkZWFsIHdpdGggbG9hZGluZyBhbmQgc3RvcmluZyB0aGUgVk1DUyBwb2ludGVyLiBUaGlzIGlzIGludGVyZXN0aW5nIGJlY2F1c2Ugd2UncmUgdGFsa2luZyBhYm91dCBuZXN0ZWQgVk1YLCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVsYXRlZCB0byBIeXBlci1WJ3MgZW5saWdodGVuZWQgVk1DUywgb3IgZVZNQ1MuIFRoYXQgaW1tZWRpYXRlbHkgZ3JhYnMgbXkgYXR0ZW50aW9uIOKAkyB0aGlzIGlzIHJpcGUgZm9yIGZ1enppbmcuXG5cblNwZWNpZmljYWxseSwgd2l0aCBgaGFuZGxlX3ZtcHRybGRgLCBiZWZvcmUsIGlmIHRoZSBlbmxpZ2h0ZW5lZCB2ZXJzaW9uIHdhcyB1c2VkLCBpdCB3b3VsZCBqdXN0IHJldHVybiAxLiAgUmlnaHQsIGFuZCByZXR1cm5pbmcgMSBmcm9tIGEgaGFuZGxlIGZ1bmN0aW9uIGluIEtWTSB0eXBpY2FsbHkgbWVhbnMgaXQgaGFuZGxlZCB0aGUgZXhpdCwgYnV0IHRoZSBpbnN0cnVjdGlvbiBzaG91bGQgbm90IGJlIGFkdmFuY2VkLiBTbyBpdCB3b3VsZCBzcGluLCByaWdodD8gTm8sIGBuZXN0ZWRfdm14X2ZhaWxgIHJldHVybnMgMSwgYnV0IHNldHMgUkZMQUdTLiBOb3csIGhvd2V2ZXIsIHRoZSBwYXRjaCBub3cgcXVldWVzIGEgVUQgKEludmFsaWQgT3Bjb2RlKSBleGNlcHRpb24uIFRoaXMgaXMgYSBzaWduaWZpY2FudCBiZWhhdmlvcmFsIHNoaWZ0LiAgQmVmb3JlLCBpdCBtaWdodCBoYXZlIGJlZW4gYW4gaW5maW5pdGUgbG9vcCBvciBhIHNpbGVudCBmYWlsdXJlICh3aGljaCBpcyB3b3JzZSkuICBOb3cgaXQgd2lsbCBnZW5lcmF0ZSBhbiBleGNlcHRpb24uXG5cbkFuZCBsb29raW5nIGF0IGBoYW5kbGVfdm1wdHJzdGAsIGl0J3MgdGhlIHNhbWUgcGF0dGVybi4gUHJldmlvdXNseSwgaXQganVzdCByZXR1cm5lZCAxIGlmIGVWTUNTIHdhcyBpbiB1c2UsIGVmZmVjdGl2ZWx5IGlnbm9yaW5nIHRoZSBpbnN0cnVjdGlvbi4gIE5vdywgaXQgYWN0dWFsbHkgcmV0dXJucyB0aGUgZVZNQ1MgR1BBIChHdWVzdCBQaHlzaWNhbCBBZGRyZXNzKSwgd2hpY2ggYWxpZ25zIHdpdGggdGhlIGJlaGF2aW9yIG9mIEh5cGVyLVYuIEl0IHNheXMgdGhhdCBcIkh5cGVyLVYgVExGUyBkb2VzIG5vdCBzcGVjaWZ5IHRoZSBiZWhhdmlvciBvZiBWTVBUUlNUIHdoZW4gZVZNQ1MgaXMgdXNlZFwiLiAgU28sIHRoZXkncmUgbWFraW5nIGl0IEh5cGVyLVYgY29tcGxpYW50LlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYmVjYXVzZSBpdCBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgaG93IFZNUFRSTEQgYW5kIFZNUFRSU1QgYXJlIGhhbmRsZWQgaW4gbmVzdGVkIFZNWCB3aGVuIGVWTUNTIGlzIHVzZWQuIFNvLCB0aGUgcGF0Y2ggaXMgY2hhbmdpbmcgYmVoYXZpb3Igd2hpY2ggbWFrZXMgaXQgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy5cblxuTGV0J3MgcXVpY2tseSBpZGVudGlmeSB0aGUgcHJpbWFyeSBlbnRyeXBvaW50cy4gIEl0IGFwcGVhcnMgdGhleSBhcmUgYGhhbmRsZV92bXB0cmxkYCBhbmQgYGhhbmRsZV92bXB0cnN0YC4gTm93LCBhcmUgdGhleSBzdGF0aWM/IFllcywgdGhleSBhcmUgaW4gdGhlIGZpbGUuIERhbW4sIGl0IHNheXMgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyEgV2VsbCwgbGV0J3MgdHJhY2Ugd2hlcmUgdGhlc2UgYXJlIGNhbGxlZCBpbiBgYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY2AgdG8gc2VlIGhvdyB3ZSBjYW4gZXhwbG9pdCB0aGlzIGNoYW5nZS4gV2UgY2FuIHN0aWxsIHNlZSBob3cgdGhleSBhcmUgY2FsbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTI2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODExLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6MTg6MjAuMjA4OTI4OTYzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5Mzg4MDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhhbmRsZV92bXB0cmxkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS92bXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTg1OT1zdGF0aWMgdm9pZCBzZXRfY3VycmVudF92bXB0cihzdHJ1Y3QgdmNwdV92bXggKnZteCwgZ3BhX3Qgdm1wdHIpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU4NzItLyogRW11bGF0ZSB0aGUgVk1QVFJMRCBpbnN0cnVjdGlvbiAqL1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTg3MzpzdGF0aWMgaW50IGhhbmRsZV92bXB0cmxkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU4NzQte1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz03NDIzPV9faW5pdCBpbnQgbmVzdGVkX3ZteF9oYXJkd2FyZV9zZXR1cChpbnQgKCpleGl0X2hhbmRsZXJzW10pKHN0cnVjdCBrdm1fdmNwdSAqKSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzQ1NS1cXHRleGl0X2hhbmRsZXJzW0VYSVRfUkVBU09OX1ZNTEFVTkNIXVxcdD0gaGFuZGxlX3ZtbGF1bmNoO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NzQ1NjpcXHRleGl0X2hhbmRsZXJzW0VYSVRfUkVBU09OX1ZNUFRSTERdXFx0PSBoYW5kbGVfdm1wdHJsZDtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTc0NTctXFx0ZXhpdF9oYW5kbGVyc1tFWElUX1JFQVNPTl9WTVBUUlNUXVxcdD0gaGFuZGxlX3ZtcHRyc3Q7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTQ3NDQ9c3RhdGljIHUzMiB2bXhfc2Vjb25kYXJ5X2V4ZWNfY29udHJvbChzdHJ1Y3QgdmNwdV92bXggKnZteClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNDc4My1cXHQvKiBTRUNPTkRBUllfRVhFQ19TSEFET1dfVk1DUyBpcyBlbmFibGVkIHdoZW4gTDEgZXhlY3V0ZXMgVk1QVFJMRFxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NDc4NDpcXHQgICAoaGFuZGxlX3ZtcHRybGQpLlxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNDc4NS1cXHQgICBXZSBjYW4gTk9UIGVuYWJsZSBzaGFkb3dfdm1jcyBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSB5ZXRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6MTg6MjAuMjY4MzIwNjkyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjA4MDg4ODU0NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFeGl0IEhhbmRsZXIgTWVjaGFuaXNtKipcblxuT2theSwgc28gdGhlc2UgaGFuZGxlcnMgYXJlIGRlZmluaXRlbHkgc2l0dGluZyBpbiB0aGUgYGV4aXRfaGFuZGxlcnNgIGFycmF5LiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoZXkncmUgaW52b2tlZCB0aHJvdWdoIGZ1bmN0aW9uIHBvaW50ZXJzIOKAkyBub3QgaW5saW5lZCwgd2hpY2ggaGFzIGludGVyZXN0aW5nIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gSSdsbCBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gSSBzdGFydCBsb29raW5nIGF0IHRoZSBiaWdnZXIgcGljdHVyZS4gSG9sZCBvbuKApiBgbmVzdGVkX3ZteF9oYXJkd2FyZV9zZXR1cGAgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdGhlc2UgaGFuZGxlcnMgdXAsIHJpZ2h0PyBUaGF0J3Mgd2hlcmUgdGhleSdyZSBiZWluZyBwb3B1bGF0ZWQgaW50byBgZXhpdF9oYW5kbGVyc2AuIEFscmlnaHQsIHRpbWUgdG8gdHJhY2UgZG93biB0aGUgZGVmaW5pdGlvbiBhbmQgdXNhZ2Ugb2YgYGV4aXRfaGFuZGxlcnNgIGl0c2VsZi4gTmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbnRleHQgb2YgaG93IHRoaXMgYXJyYXkgaXMgYmVpbmcgdXNlZC4gV2hlcmUgaXMgaXQgZGVjbGFyZWQ/IFdoZXJlIGVsc2UgaXMgaXQgYWNjZXNzZWQgYW5kIG1vZGlmaWVkPyBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBmcmFtZXdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4MTgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzoxODo0MS4wNzcyMDkxNzRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg3MTEzMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmVzdGVkX3ZteF9oYXJkd2FyZV9zZXR1cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vdm14L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTc0MTM9dm9pZCBuZXN0ZWRfdm14X2hhcmR3YXJlX3Vuc2V0dXAodm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzQyMi1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjc0MjM6X19pbml0IGludCBuZXN0ZWRfdm14X2hhcmR3YXJlX3NldHVwKGludCAoKmV4aXRfaGFuZGxlcnNbXSkoc3RydWN0IGt2bV92Y3B1ICopKVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzQyNC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oPTIyPXZvaWQgbmVzdGVkX3ZteF9oYXJkd2FyZV91bnNldHVwKHZvaWQpO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmg6MjM6X19pbml0IGludCBuZXN0ZWRfdm14X2hhcmR3YXJlX3NldHVwKGludCAoKmV4aXRfaGFuZGxlcnNbXSkoc3RydWN0IGt2bV92Y3B1ICopKTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oLTI0LXZvaWQgbmVzdGVkX3ZteF9zZXRfdm1jc19zaGFkb3dpbmdfYml0bWFwKHZvaWQpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYz02MjE3PXN0YXRpYyBpbnQgaGFuZGxlX3ByZWVtcHRpb25fdGltZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy02MjMwLSAqIFdoZW4gbmVzdGVkPTAsIGFsbCBWTVggaW5zdHJ1Y3Rpb24gVk0gRXhpdHMgZmlsdGVyIGhlcmUuICBUaGUgaGFuZGxlcnNcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjYyMzE6ICogYXJlIG92ZXJ3cml0dGVuIGJ5IG5lc3RlZF92bXhfaGFyZHdhcmVfc2V0dXAoKSB3aGVuIG5lc3RlZD0xLlxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjIzMi0gKi9cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM9ODU4OD1fX2luaXQgaW50IHZteF9oYXJkd2FyZV9zZXR1cCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy04NzY4LVxcdGlmIChuZXN0ZWQpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjg3Njk6XFx0XFx0ciA9IG5lc3RlZF92bXhfaGFyZHdhcmVfc2V0dXAoa3ZtX3ZteF9leGl0X2hhbmRsZXJzKTtcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTg3NzAtXFx0XFx0aWYgKHIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE3OjE4OjQxLjE2NTkyNDc2M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNzgxNDM5MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTS9IeXBlci1WIENvZGUgZm9yIFN5bWJvbCBTZWxlY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBga3ZtX3ZteF9leGl0X2hhbmRsZXJzYCBhbmQgc3BlY2lmaWNhbGx5IGBoYW5kbGVfdm1wdHJsZGAgYW5kIGBoYW5kbGVfdm1wdHJzdGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZXNlIGZ1bmN0aW9uIHBvaW50ZXJzLCBhdCBmaXJzdCBnbGFuY2UsIGFyZSBnb29kIGNhbmRpZGF0ZXMgYXMgZm9jdXMgc3ltYm9scywgc2luY2UgdGhleSdyZSAqZGVmaW5pdGVseSogbm90IGlubGluZWQuIEFoYSwgYnV0IHdhaXQsIEkganVzdCBjYXVnaHQgbXlzZWxmLi4uIHRoZXkncmUgKnN0YXRpYyouIE5vdywgdGhlIHByb21wdCBzcGVjaWZpY2FsbHkgc2FpZCB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGF0IG1ha2VzIG1lIHBhdXNlIGZvciBhIHNlY29uZC5cblxuSG93ZXZlciwgc2luY2UgdGhlaXIgYWRkcmVzc2VzIGFyZSB0YWtlbiwgZGVzcGl0ZSBiZWluZyBzdGF0aWMsIHRoZXkgKndvbid0KiBiZSBpbmxpbmVkLiBUaGF0IG1lYW5zIHRoZXkgd2lsbCwgaW4gZmFjdCwgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLCBhbmQgY2FuIHN0aWxsIGJlIHVzZWQuIFdlIGNvdWxkIGxvb2sgYXQgYWx0ZXJuYXRpdmVzIGxpa2UgYG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWRgLCBvciBtYXliZSB0aGUgb3ZlcmFyY2hpbmcgZXhpdCBoYW5kbGVyIGB2bXhfaGFuZGxlX2V4aXRgLCBidXQgSSdtIGhlc2l0YW50IG9uIGB2bXhfaGFuZGxlX2V4aXRgIOKAkyBpdCdzIGEgaG90LXBhdGggZnVuY3Rpb24sIHNvIGxpa2VseSB0b28gZ2VuZXJpYy5cblxuU28sIGxldCdzIGNvbmZpcm0uIGBoYW5kbGVfdm1wdHJsZGAgYW5kIGBoYW5kbGVfdm1wdHJzdGAuLi4geWVwLCB0aGV5J3JlIHRoZSBleGFjdCBmdW5jdGlvbnMgdGhhdCBhcmUgYmVpbmcgbW9kaWZpZWQuIFRoYXQgc2V0dGxlcyBpdCBmb3Igbm93LiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZm9yIGJvdGggS1ZNIGFuZCBIeXBlci1WIHNldHRpbmdzIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nJ3MgY29ycmVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY0MywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzoxODo0Ni4yNDQwNzIzOTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4MTY2Njc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XFxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUzLVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo2OTpjb25maWcgS1ZNX1dFUlJPUlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVxcdGJvb2wgXFxcIkNvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcXFwiQ2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0lPQVBJQ1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3My1cXHRib29sIFxcXCJJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODI6Y29uZmlnIEtWTV9TTU1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODMtXFx0Ym9vbCBcXFwiU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTkzOmNvbmZpZyBLVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDgtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE2OmNvbmZpZyBLVk1fUFJPVkVfTU1VXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE3LVxcdGJvb2wgXFxcIlByb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzAtXFx0Ym9vbFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzI6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzMtXFx0aW50IFxcXCJNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzoxODo0Ni4zNTIyNDMzMjRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTgyNjYwMzQxNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBNdXNpbmdzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgZm9yIHRoaXMgdmlydHVhbGl6YXRpb24gc2V0dXAuIEl0J3MgbG9va2luZyBsaWtlIGBLVk1gIGFuZCBgS1ZNX0lOVEVMYCBhcmUgZGVmaW5pdGVseSBrZXksIGdpdmVuIHdlJ3JlIGRlYWxpbmcgd2l0aCBWTVgsIHNvIHRoYXQncyBhIGdpdmVuLiBOb3csIEkgaGF2ZSBhIGh1bmNoIHRoYXQgYEtWTV9IWVBFUlZgIG1pZ2h0IGJlIGluIHRoZSBtaXgsIHNwZWNpZmljYWxseSBiZWNhdXNlIG9mIHRoZSBuYW1lIG9mIHRoYXQgZnVuY3Rpb24gd2UncmUgbG9va2luZyBhdCwgYG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWRgLiBUaGF0IGtpbmQgb2YgaGludHMgYXQgSHlwZXItViBlbXVsYXRpb24gYmVpbmcgaW52b2x2ZWQuIExldCBtZSBkb3VibGUtY2hlY2sgdGhlIGltcGxpY2F0aW9ucyBvZiBoYXZpbmcgdGhhdCBLVk0gSHlwZXItViBmbGFnIGVuYWJsZWQsIGFuZCB3aGV0aGVyIGl0J3MgcmVsZXZhbnQgdG8gdGhlIGN1cnJlbnQgc2NlbmFyaW8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0MjYsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzoyNToyNC42MTgyODA5MDdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4MjAxMDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oPTIwPXN0YXRpYyBpbmxpbmUgYm9vbCBldm1wdHJfaXNfdmFsaWQodTY0IGV2bXB0cilcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmgtMjQtXFxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaDoyNTpzdGF0aWMgaW5saW5lIGJvb2wgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZChzdHJ1Y3QgdmNwdV92bXggKnZteClcXG5hcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oLTI2LXtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2Lmg9NjQ9c3RhdGljIGlubGluZSBib29sIGV2bXB0cl9pc192YWxpZCh1NjQgZXZtcHRyKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaC02OC1cXG5hcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oOjY5OnN0YXRpYyBpbmxpbmUgYm9vbCBuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHN0cnVjdCB2Y3B1X3ZteCAqdm14KVxcbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmgtNzAte1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0xOTQ9c3RhdGljIGludCBuZXN0ZWRfdm14X2ZhaWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdm1faW5zdHJ1Y3Rpb25fZXJyb3IpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTIwMi1cXHRpZiAodm14LVxcdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0ciA9PSBJTlZBTElEX0dQQSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MjAzOlxcdCAgICAhbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjA0LVxcdFxcdHJldHVybiBuZXN0ZWRfdm14X2ZhaWxJbnZhbGlkKHZjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0yMjc0PXZvaWQgbmVzdGVkX3N5bmNfdm1jczEyX3RvX3NoYWRvdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTIyNzctXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoyMjc4OlxcdGlmIChuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkpXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yMjc5LVxcdFxcdGNvcHlfdm1jczEyX3RvX2VubGlnaHRlbmVkKHZteCk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTI0MzE9c3RhdGljIHZvaWQgcHJlcGFyZV92bWNzMDJfZWFybHkoc3RydWN0IHZjcHVfdm14ICp2bXgsIHN0cnVjdCBsb2FkZWRfdm1jcyAqdm1jczAxLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yNDM2LVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MjQzNzpcXHRpZiAodm14LVxcdTAwM2VuZXN0ZWQuZGlydHlfdm1jczEyIHx8IG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSlcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTI0MzgtXFx0XFx0cHJlcGFyZV92bWNzMDJfZWFybHlfcmFyZSh2bXgsIHZtY3MxMik7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTI3NjA9c3RhdGljIGludCBwcmVwYXJlX3ZtY3MwMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2bWNzMTIgKnZtY3MxMixcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjc2Ny1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjI3Njg6XFx0aWYgKHZteC1cXHUwMDNlbmVzdGVkLmRpcnR5X3ZtY3MxMiB8fCBuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTI3NjktXFx0XFx0cHJlcGFyZV92bWNzMDJfcmFyZSh2bXgsIHZtY3MxMik7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTI3NzEtXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoyNzcyOlxcdFxcdGxvYWRfZ3Vlc3RfcGRwdHJzX3ZtY3MxMiA9ICFuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkgfHxcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTI3NzMtXFx0XFx0XFx0IShldm1jcy1cXHUwMDNlaHZfY2xlYW5fZmllbGRzIFxcdTAwMjYgSFZfVk1YX0VOTElHSFRFTkVEX0NMRUFOX0ZJRUxEX0dVRVNUX0dSUDEpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yOTAxLVxcdCAqL1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MjkwMjpcXHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjkwMy1cXHRcXHRldm1jcy1cXHUwMDNlaHZfY2xlYW5fZmllbGRzIHw9IEhWX1ZNWF9FTkxJR0hURU5FRF9DTEVBTl9GSUVMRF9BTEw7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTM2Mjk9ZW51bSBudm14X3ZtZW50cnlfc3RhdHVzIG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM3NzQtXFx0dm1jczEyLVxcdTAwM2V2bV9leGl0X3JlYXNvbiA9IGV4aXRfcmVhc29uLmZ1bGw7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozNzc1OlxcdGlmIChlbmFibGVfc2hhZG93X3ZtY3MgfHwgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzc3Ni1cXHRcXHR2bXgtXFx1MDAzZW5lc3RlZC5uZWVkX3ZtY3MxMl90b19zaGFkb3dfc3luYyA9IHRydWU7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTM3ODQ9c3RhdGljIGludCBuZXN0ZWRfdm14X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbGF1bmNoKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zODA1LVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MzgwNjpcXHRpZiAoQ0MoIW5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzgwNy1cXHQgICAgICAgdm14LVxcdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0ciA9PSBJTlZBTElEX0dQQSkpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM4MjAtXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozODIxOlxcdGlmIChuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM4MjItXFx0XFx0c3RydWN0IGh2X2VubGlnaHRlbmVkX3ZtY3MgKmV2bWNzID0gbmVzdGVkX3ZteF9ldm1jcyh2bXgpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz00NjQzPXN0YXRpYyB2b2lkIHN5bmNfdm1jczAyX3RvX3ZtY3MxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2bWNzMTIgKnZtY3MxMilcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNDY0Ni1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjQ2NDc6XFx0aWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSlcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQ2NDgtXFx0XFx0c3luY192bWNzMDJfdG9fdm1jczEyX3JhcmUodmNwdSwgdm1jczEyKTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNDY1MC1cXHR2bXgtXFx1MDAzZW5lc3RlZC5uZWVkX3N5bmNfdm1jczAyX3RvX3ZtY3MxMl9yYXJlID1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjQ2NTE6XFx0XFx0IW5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQ2NTItXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTUwNjM9dm9pZCBfX25lc3RlZF92bXhfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZtX2V4aXRfcmVhc29uLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01MTY5LVxcdGlmICgodm1fZXhpdF9yZWFzb24gIT0gLTEpIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1MTcwOlxcdCAgICAoZW5hYmxlX3NoYWRvd192bWNzIHx8IG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSkpXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01MTcxLVxcdFxcdHZteC1cXHUwMDNlbmVzdGVkLm5lZWRfdm1jczEyX3RvX3NoYWRvd19zeW5jID0gdHJ1ZTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTY0Nj1zdGF0aWMgaW50IGhhbmRsZV92bXJlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01NjY1LVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTY2NjpcXHRpZiAoIW5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSkge1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTY2Ny1cXHRcXHQvKlxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz01ODczPXN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRybGQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01ODgyLVxcdC8qIEZvcmJpZCBub3JtYWwgVk1QVFJMRCBpZiBFbmxpZ2h0ZW5lZCB2ZXJzaW9uIHdhcyB1c2VkICovXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1ODgzOlxcdGlmIChuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU4ODQtXFx0XFx0a3ZtX3F1ZXVlX2V4Y2VwdGlvbih2Y3B1LCBVRF9WRUNUT1IpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz01OTQ1PXN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRyc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01OTYwLVxcdCAqL1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTk2MTpcXHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh0b192bXgodmNwdSkpKVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTk2Mi1cXHRcXHRjdXJyZW50X3ZtcHRyID0gdG9fdm14KHZjcHUpLVxcdTAwM2VuZXN0ZWQuaHZfZXZtY3Nfdm1wdHI7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTY3NTI9c3RhdGljIGludCB2bXhfZ2V0X25lc3RlZF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTY4NDAtXFx0XFx0aWYgKCF2bXgtXFx1MDAzZW5lc3RlZC5uZWVkX3ZtY3MxMl90b19zaGFkb3dfc3luYykge1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Njg0MTpcXHRcXHRcXHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjg0Mi1cXHRcXHRcXHRcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzoyNToyNC42NzY0ODczNTdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI0ODQ5OTkyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgd2VudDpcblxuKipFeGFtaW5pbmcgS1ZNIGFuZCBIeXBlci1WIEVtdWxhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgaXMgcmVsYXRlZCB0byBob3cgS1ZNIGVtdWxhdGVzIEh5cGVyLVYsIGludGVyZXN0aW5nLiBJIGtub3cgdGhlIGJhc2ljIGNvbmZpZ3MgcmVxdWlyZWQgYXJlIGBLVk1gIGFuZCBgS1ZNX0lOVEVMYCwgYnV0IEknbSBqdXN0IGN1cmlvdXMgaWYgdGhlcmUgaXMgYSBgS1ZNX0hZUEVSVmAgY29uZmlndXJhdGlvbi4gSSBmZWVsIGxpa2UgSSd2ZSBzZWVuIGl0IHNvbWV3aGVyZS4uLiBZZXMsIEkgdmFndWVseSByZWNhbGwgc3BvdHRpbmcgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhpcyBpbiBgYXJjaC94ODYva3ZtL0tjb25maWdgLiBUaW1lIHRvIGNoZWNrLiBMZXQncyBkaWcgaW50byB0aGF0IGBLY29uZmlnYCBmaWxlIGFuZCB0YWtlIGEgbG9vayBhdCBgS1ZNX0hZUEVSVmAgc3BlY2lmaWNhbGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQ0OCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE3OjI1OjI4LjkyNDk5Mzk2OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ1NjQ0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9IWVBFUlZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xODI9Y29uZmlnIEtWTV9TTU1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxOTM6Y29uZmlnIEtWTV9IWVBFUlZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTQtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzoyNToyOC45Njk1NjMwNzlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQzNjQ5OTA1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQ29uc2lkZXJpbmcgS1ZNIGFuZCBIeXBlci1WIENvbXBhdGliaWxpdHkqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIFdlIG5lZWQgdG8gZXhwbGljaXRseSBpbmNsdWRlIGRlZmluaXRpb25zIGZvciBgS1ZNYCwgYEtWTV9JTlRFTGAsIGFuZCBgS1ZNX0hZUEVSVmAuIE5vIHJlYWwgc3VycHJpc2VzIHRoZXJlLCB0aGF0J3MganVzdCBnb29kIHByYWN0aWNlIHRvIGVuc3VyZSB0aGUgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2V0IHVwIHByb3Blcmx5LiBOb3csIGxldCdzIGp1c3QgbWFrZSBzdXJlIHdlIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgS1ZNX0hZUEVSVmAgaXMgaW5kZWVkICpyZXF1aXJlZCogZm9yIHRoZSBgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZGAgZnVuY3Rpb24gdG8gd29yayBjb3JyZWN0bHkuIEkgYWx3YXlzIGxpa2UgdG8gZW5zdXJlIGZ1bGwgYWNjdXJhY3ksIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggbmVzdGVkIHZpcnR1YWxpemF0aW9uIHN1cHBvcnQuIEl0J3MgZWFzeSB0byBvdmVybG9vayBhIHN1YnRsZSBkZXBlbmRlbmN5IGluIHRoZXNlIGNvbmZpZ3VyYXRpb25zLCBhbmQgYSBzaW1wbGUgdmVyaWZpY2F0aW9uIHN0ZXAgY2FuIHNhdmUgYSBsb3Qgb2YgZGVidWdnaW5nIHRpbWUgbGF0ZXIuIEp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODI3LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6MjU6MzUuNDA2MDY1MjExWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTM4Nzk2NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vdm14L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oPTIwPXN0YXRpYyBpbmxpbmUgYm9vbCBldm1wdHJfaXNfdmFsaWQodTY0IGV2bXB0cilcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmgtMjQtXFxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaDoyNTpzdGF0aWMgaW5saW5lIGJvb2wgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZChzdHJ1Y3QgdmNwdV92bXggKnZteClcXG5hcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oLTI2LXtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2Lmg9NjQ9c3RhdGljIGlubGluZSBib29sIGV2bXB0cl9pc192YWxpZCh1NjQgZXZtcHRyKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaC02OC1cXG5hcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oOjY5OnN0YXRpYyBpbmxpbmUgYm9vbCBuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHN0cnVjdCB2Y3B1X3ZteCAqdm14KVxcbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmgtNzAte1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0xOTQ9c3RhdGljIGludCBuZXN0ZWRfdm14X2ZhaWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdm1faW5zdHJ1Y3Rpb25fZXJyb3IpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTIwMi1cXHRpZiAodm14LVxcdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0ciA9PSBJTlZBTElEX0dQQSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MjAzOlxcdCAgICAhbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjA0LVxcdFxcdHJldHVybiBuZXN0ZWRfdm14X2ZhaWxJbnZhbGlkKHZjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0yMjc0PXZvaWQgbmVzdGVkX3N5bmNfdm1jczEyX3RvX3NoYWRvdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTIyNzctXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoyMjc4OlxcdGlmIChuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkpXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yMjc5LVxcdFxcdGNvcHlfdm1jczEyX3RvX2VubGlnaHRlbmVkKHZteCk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTI0MzE9c3RhdGljIHZvaWQgcHJlcGFyZV92bWNzMDJfZWFybHkoc3RydWN0IHZjcHVfdm14ICp2bXgsIHN0cnVjdCBsb2FkZWRfdm1jcyAqdm1jczAxLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yNDM2LVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MjQzNzpcXHRpZiAodm14LVxcdTAwM2VuZXN0ZWQuZGlydHlfdm1jczEyIHx8IG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSlcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTI0MzgtXFx0XFx0cHJlcGFyZV92bWNzMDJfZWFybHlfcmFyZSh2bXgsIHZtY3MxMik7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTI3NjA9c3RhdGljIGludCBwcmVwYXJlX3ZtY3MwMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2bWNzMTIgKnZtY3MxMixcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjc2Ny1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjI3Njg6XFx0aWYgKHZteC1cXHUwMDNlbmVzdGVkLmRpcnR5X3ZtY3MxMiB8fCBuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTI3NjktXFx0XFx0cHJlcGFyZV92bWNzMDJfcmFyZSh2bXgsIHZtY3MxMik7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTI3NzEtXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoyNzcyOlxcdFxcdGxvYWRfZ3Vlc3RfcGRwdHJzX3ZtY3MxMiA9ICFuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkgfHxcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTI3NzMtXFx0XFx0XFx0IShldm1jcy1cXHUwMDNlaHZfY2xlYW5fZmllbGRzIFxcdTAwMjYgSFZfVk1YX0VOTElHSFRFTkVEX0NMRUFOX0ZJRUxEX0dVRVNUX0dSUDEpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yOTAxLVxcdCAqL1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MjkwMjpcXHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjkwMy1cXHRcXHRldm1jcy1cXHUwMDNlaHZfY2xlYW5fZmllbGRzIHw9IEhWX1ZNWF9FTkxJR0hURU5FRF9DTEVBTl9GSUVMRF9BTEw7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTM2Mjk9ZW51bSBudm14X3ZtZW50cnlfc3RhdHVzIG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM3NzQtXFx0dm1jczEyLVxcdTAwM2V2bV9leGl0X3JlYXNvbiA9IGV4aXRfcmVhc29uLmZ1bGw7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozNzc1OlxcdGlmIChlbmFibGVfc2hhZG93X3ZtY3MgfHwgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzc3Ni1cXHRcXHR2bXgtXFx1MDAzZW5lc3RlZC5uZWVkX3ZtY3MxMl90b19zaGFkb3dfc3luYyA9IHRydWU7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTM3ODQ9c3RhdGljIGludCBuZXN0ZWRfdm14X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbGF1bmNoKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zODA1LVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MzgwNjpcXHRpZiAoQ0MoIW5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzgwNy1cXHQgICAgICAgdm14LVxcdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0ciA9PSBJTlZBTElEX0dQQSkpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM4MjAtXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozODIxOlxcdGlmIChuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM4MjItXFx0XFx0c3RydWN0IGh2X2VubGlnaHRlbmVkX3ZtY3MgKmV2bWNzID0gbmVzdGVkX3ZteF9ldm1jcyh2bXgpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz00NjQzPXN0YXRpYyB2b2lkIHN5bmNfdm1jczAyX3RvX3ZtY3MxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2bWNzMTIgKnZtY3MxMilcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNDY0Ni1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjQ2NDc6XFx0aWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSlcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQ2NDgtXFx0XFx0c3luY192bWNzMDJfdG9fdm1jczEyX3JhcmUodmNwdSwgdm1jczEyKTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNDY1MC1cXHR2bXgtXFx1MDAzZW5lc3RlZC5uZWVkX3N5bmNfdm1jczAyX3RvX3ZtY3MxMl9yYXJlID1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjQ2NTE6XFx0XFx0IW5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQ2NTItXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTUwNjM9dm9pZCBfX25lc3RlZF92bXhfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZtX2V4aXRfcmVhc29uLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01MTY5LVxcdGlmICgodm1fZXhpdF9yZWFzb24gIT0gLTEpIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1MTcwOlxcdCAgICAoZW5hYmxlX3NoYWRvd192bWNzIHx8IG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSkpXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01MTcxLVxcdFxcdHZteC1cXHUwMDNlbmVzdGVkLm5lZWRfdm1jczEyX3RvX3NoYWRvd19zeW5jID0gdHJ1ZTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTY0Nj1zdGF0aWMgaW50IGhhbmRsZV92bXJlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01NjY1LVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTY2NjpcXHRpZiAoIW5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSkge1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTY2Ny1cXHRcXHQvKlxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz01ODczPXN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRybGQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01ODgyLVxcdC8qIEZvcmJpZCBub3JtYWwgVk1QVFJMRCBpZiBFbmxpZ2h0ZW5lZCB2ZXJzaW9uIHdhcyB1c2VkICovXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1ODgzOlxcdGlmIChuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTU4ODQtXFx0XFx0a3ZtX3F1ZXVlX2V4Y2VwdGlvbih2Y3B1LCBVRF9WRUNUT1IpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz01OTQ1PXN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRyc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01OTYwLVxcdCAqL1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTk2MTpcXHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh0b192bXgodmNwdSkpKVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTk2Mi1cXHRcXHRjdXJyZW50X3ZtcHRyID0gdG9fdm14KHZjcHUpLVxcdTAwM2VuZXN0ZWQuaHZfZXZtY3Nfdm1wdHI7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTY3NTI9c3RhdGljIGludCB2bXhfZ2V0X25lc3RlZF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTY4NDAtXFx0XFx0aWYgKCF2bXgtXFx1MDAzZW5lc3RlZC5uZWVkX3ZtY3MxMl90b19zaGFkb3dfc3luYykge1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Njg0MTpcXHRcXHRcXHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpKVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjg0Mi1cXHRcXHRcXHRcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzoyNTozNi4wNTk5NTAwNTZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI5ODM1ODkxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyB0aGUgS1ZNIEh5cGVyLVYgR3VhcmQqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkYCBpcyBkZWZpbmVkIHdpdGhpbiBgYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaGAuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBxdWlja2x5IGRldGVybWluZSBpZiBpdHMgaW5jbHVzaW9uIG9yIGZ1bmN0aW9uYWxpdHkgaXMgY29udHJvbGxlZCBieSBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgY29tcGlsZWQgd2hlbiBgQ09ORklHX0tWTV9IWVBFUlZgIG9yIGEgcmVsYXRlZCBzZXR0aW5nIGlzIGVuYWJsZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFyb3VuZCB0aGlzIGlzIGNyaXRpY2FsIHRvIGZpZ3VyaW5nIG91dCBpdHMgb3ZlcmFsbCBwdXJwb3NlIGFuZCBjb250ZXh0IHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gTGV0J3Mgc2VlIGhvdyB0aGF0J3MgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4ODEsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzoyNTo0MC4zNTgzMTY0MTdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMzUwMDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oPTIwPXN0YXRpYyBpbmxpbmUgYm9vbCBldm1wdHJfaXNfdmFsaWQodTY0IGV2bXB0cilcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmgtMjQtXFxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaDoyNTpzdGF0aWMgaW5saW5lIGJvb2wgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZChzdHJ1Y3QgdmNwdV92bXggKnZteClcXG5hcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oLTI2LXtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2Lmg9NjQ9c3RhdGljIGlubGluZSBib29sIGV2bXB0cl9pc192YWxpZCh1NjQgZXZtcHRyKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaC02OC1cXG5hcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oOjY5OnN0YXRpYyBpbmxpbmUgYm9vbCBuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHN0cnVjdCB2Y3B1X3ZteCAqdm14KVxcbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmgtNzAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzoyNTo0MC40MTA2NzQwNjdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIwNDYzNTEyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipFeGFtaW5pbmcgSHlwZXItViBJbnRlZ3JhdGlvbiBpbiBLVk0vVk1YKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBndXRzIG9mIGhvdyBLVk0gb24geDg2IGludGVyYWN0cyB3aXRoIEh5cGVyLVYuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIG91dCBgYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaGAuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBtYWdpYyBoYXBwZW5zIOKAkyB0aGUgYCNpZmRlZmBzLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyB0aGF0IGVuYWJsZSBvciBkaXNhYmxlIEh5cGVyLVYgc3BlY2lmaWMgY29kZSBwYXRocyBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgaG9zdCBpcyBydW5uaW5nIGluIGEgSHlwZXItViBlbnZpcm9ubWVudCBvciBub3QuIFRoaXMgaGVhZGVyIHdpbGwgcHJvYmFibHkgcmV2ZWFsIGhvdyBLVk0gaGFuZGxlcyB0aG9zZSBpbnRlZ3JhdGlvbiBmZWF0dXJlcyBhbmQgaG93IGl0IGFkYXB0cyBpdHMgYmVoYXZpb3IgYmFzZWQgb24gdGhlIHVuZGVybHlpbmcgdmlydHVhbGl6YXRpb24gcGxhdGZvcm0uIEnigJltIGtlZW4gdG8gc2VlIHRoZSBzcGVjaWZpYyBkZXRhaWxzIG9mIHRoZSBmZWF0dXJlIGRldGVjdGlvbiBhbmQgaG93IHRoZSBjb2RlIGJyYW5jaGVzIGFjY29yZGluZ2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQwNiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE3OjI1OjQ0LjYxNTMxMjMzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5NTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmhcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4gICAyOlxcdCNpZm5kZWYgX19LVk1fWDg2X1ZNWF9IWVBFUlZfSFxcbiAgIDM6XFx0I2RlZmluZSBfX0tWTV9YODZfVk1YX0hZUEVSVl9IXFxuICAgNDpcXHRcXG4gICA1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9rdm1faG9zdC5oXFx1MDAzZVxcbiAgIDY6XFx0I2luY2x1ZGUgXFxcInZtY3MxMi5oXFxcIlxcbiAgIDc6XFx0I2luY2x1ZGUgXFxcInZteC5oXFxcIlxcbiAgIDg6XFx0XFxuICAgOTpcXHQjZGVmaW5lIEVWTVBUUl9JTlZBTElEICgtMVVMTClcXG4gIDEwOlxcdCNkZWZpbmUgRVZNUFRSX01BUF9QRU5ESU5HICgtMlVMTClcXG4gIDExOlxcdFxcbiAgMTI6XFx0ZW51bSBuZXN0ZWRfZXZtcHRybGRfc3RhdHVzIHtcXG4gIDEzOlxcdFxcdEVWTVBUUkxEX0RJU0FCTEVELFxcbiAgMTQ6XFx0XFx0RVZNUFRSTERfU1VDQ0VFREVELFxcbiAgMTU6XFx0XFx0RVZNUFRSTERfVk1GQUlMLFxcbiAgMTY6XFx0XFx0RVZNUFRSTERfRVJST1IsXFxuICAxNzpcXHR9O1xcbiAgMTg6XFx0XFxuICAxOTpcXHQjaWZkZWYgQ09ORklHX0tWTV9IWVBFUlZcXG4gIDIwOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBldm1wdHJfaXNfdmFsaWQodTY0IGV2bXB0cilcXG4gIDIxOlxcdHtcXG4gIDIyOlxcdFxcdHJldHVybiBldm1wdHIgIT0gRVZNUFRSX0lOVkFMSUQgXFx1MDAyNlxcdTAwMjYgZXZtcHRyICE9IEVWTVBUUl9NQVBfUEVORElORztcXG4gIDIzOlxcdH1cXG4gIDI0OlxcdFxcbiAgMjU6XFx0c3RhdGljIGlubGluZSBib29sIG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQoc3RydWN0IHZjcHVfdm14ICp2bXgpXFxuICAyNjpcXHR7XFxuICAyNzpcXHRcXHRyZXR1cm4gZXZtcHRyX2lzX3ZhbGlkKHZteC1cXHUwMDNlbmVzdGVkLmh2X2V2bWNzX3ZtcHRyKTtcXG4gIDI4OlxcdH1cXG4gIDI5OlxcdFxcbiAgMzA6XFx0c3RhdGljIGlubGluZSBib29sIGV2bXB0cl9pc19zZXQodTY0IGV2bXB0cilcXG4gIDMxOlxcdHtcXG4gIDMyOlxcdFxcdHJldHVybiBldm1wdHIgIT0gRVZNUFRSX0lOVkFMSUQ7XFxuICAzMzpcXHR9XFxuICAzNDpcXHRcXG4gIDM1OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3NldChzdHJ1Y3QgdmNwdV92bXggKnZteClcXG4gIDM2OlxcdHtcXG4gIDM3OlxcdFxcdHJldHVybiBldm1wdHJfaXNfc2V0KHZteC1cXHUwMDNlbmVzdGVkLmh2X2V2bWNzX3ZtcHRyKTtcXG4gIDM4OlxcdH1cXG4gIDM5OlxcdFxcbiAgNDA6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgaHZfZW5saWdodGVuZWRfdm1jcyAqbmVzdGVkX3ZteF9ldm1jcyhzdHJ1Y3QgdmNwdV92bXggKnZteClcXG4gIDQxOlxcdHtcXG4gIDQyOlxcdFxcdHJldHVybiB2bXgtXFx1MDAzZW5lc3RlZC5odl9ldm1jcztcXG4gIDQzOlxcdH1cXG4gIDQ0OlxcdFxcbiAgNDU6XFx0c3RhdGljIGlubGluZSBib29sIGd1ZXN0X2NwdV9jYXBfaGFzX2V2bWNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gIDQ2OlxcdHtcXG4gIDQ3OlxcdFxcdC8qXFxuICA0ODpcXHRcXHQgKiBlVk1DUyBpcyBleHBvc2VkIHRvIHRoZSBndWVzdCBpZiBIeXBlci1WIGlzIGVuYWJsZWQgaW4gQ1BVSUQgYW5kXFxuICA0OTpcXHRcXHQgKiBlVk1DUyBoYXMgYmVlbiBleHBsaWNpdGx5IGVuYWJsZWQgYnkgdXNlcnNwYWNlLlxcbiAgNTA6XFx0XFx0ICovXFxuICA1MTpcXHRcXHRyZXR1cm4gdmNwdS1cXHUwMDNlYXJjaC5oeXBlcnZfZW5hYmxlZCBcXHUwMDI2XFx1MDAyNlxcbiAgNTI6XFx0XFx0ICAgICAgIHRvX3ZteCh2Y3B1KS1cXHUwMDNlbmVzdGVkLmVubGlnaHRlbmVkX3ZtY3NfZW5hYmxlZDtcXG4gIDUzOlxcdH1cXG4gIDU0OlxcdFxcbiAgNTU6XFx0dTY0IG5lc3RlZF9nZXRfZXZtcHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuICA1NjpcXHR1aW50MTZfdCBuZXN0ZWRfZ2V0X2V2bWNzX3ZlcnNpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gIDU3OlxcdGludCBuZXN0ZWRfZW5hYmxlX2V2bWNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gIDU4OlxcdFxcdFxcdFxcdHVpbnQxNl90ICp2bWNzX3ZlcnNpb24pO1xcbiAgNTk6XFx0dm9pZCBuZXN0ZWRfZXZtY3NfZmlsdGVyX2NvbnRyb2xfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zcl9pbmRleCwgdTY0ICpwZGF0YSk7XFxuICA2MDpcXHRpbnQgbmVzdGVkX2V2bWNzX2NoZWNrX2NvbnRyb2xzKHN0cnVjdCB2bWNzMTIgKnZtY3MxMik7XFxuICA2MTpcXHRib29sIG5lc3RlZF9ldm1jc19sMl90bGJfZmx1c2hfZW5hYmxlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiAgNjI6XFx0dm9pZCB2bXhfaHZfaW5qZWN0X3N5bnRoZXRpY192bWV4aXRfcG9zdF90bGJfZmx1c2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gIDYzOlxcdCNlbHNlXFxuICA2NDpcXHRzdGF0aWMgaW5saW5lIGJvb2wgZXZtcHRyX2lzX3ZhbGlkKHU2NCBldm1wdHIpXFxuICA2NTpcXHR7XFxuICA2NjpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuICA2NzpcXHR9XFxuICA2ODpcXHRcXG4gIDY5OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHN0cnVjdCB2Y3B1X3ZteCAqdm14KVxcbiAgNzA6XFx0e1xcbiAgNzE6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAgNzI6XFx0fVxcbiAgNzM6XFx0XFxuICA3NDpcXHRzdGF0aWMgaW5saW5lIGJvb2wgZXZtcHRyX2lzX3NldCh1NjQgZXZtcHRyKVxcbiAgNzU6XFx0e1xcbiAgNzY6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAgNzc6XFx0fVxcbiAgNzg6XFx0XFxuICA3OTpcXHRzdGF0aWMgaW5saW5lIGJvb2wgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl9zZXQoc3RydWN0IHZjcHVfdm14ICp2bXgpXFxuICA4MDpcXHR7XFxuICA4MTpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuICA4MjpcXHR9XFxuICA4MzpcXHRcXG4gIDg0OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGh2X2VubGlnaHRlbmVkX3ZtY3MgKm5lc3RlZF92bXhfZXZtY3Moc3RydWN0IHZjcHVfdm14ICp2bXgpXFxuICA4NTpcXHR7XFxuICA4NjpcXHRcXHRyZXR1cm4gTlVMTDtcXG4gIDg3OlxcdH1cXG4gIDg4OlxcdCNlbmRpZlxcbiAgODk6XFx0XFxuICA5MDpcXHQjZW5kaWYgLyogX19LVk1fWDg2X1ZNWF9IWVBFUlZfSCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzoyNTo0NC42MTU0MDM3NjFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTkzNDkwOTc1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBLVk0gQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBDT05GSUdfS1ZNX0hZUEVSVmAgaXMgaW5kZWVkIGEgcHJlcmVxdWlzaXRlIGZvciBgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZGAgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBUaGF0IG1lYW5zIGBLVk1fSFlQRVJWYCBhYnNvbHV0ZWx5IG5lZWRzIHRvIGJlIGluY2x1ZGVkIGluIGBFbmFibGVDb25maWdzYC4gSXTigJlzIHN0cmFpZ2h0Zm9yd2FyZCwgYSBkaXJlY3QgZGVwZW5kZW5jeS5cblxuTm93LCBJJ20gc2Vjb25kLWd1ZXNzaW5nIG15c2VsZiBzbGlnaHRseS4gSXMgYEtWTV9JTlRFTGAgKnN1ZmZpY2llbnQqLCBvciBkbyB3ZSBhbHNvIHJlcXVpcmUgdGhlIGJhc2UgYEtWTWAgb3B0aW9uIHRvIGJlIGVuYWJsZWQ/IEludGVsIHVzdWFsbHkgcmVsaWVzIG9uIHRoZSBnZW5lcmljIEtWTSBmdW5jdGlvbmFsaXR5LCBzbyBJJ20gbGVhbmluZyB0b3dhcmQgbmVlZGluZyBib3RoLiBUbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbGwgcXVpY2tseSBjaGVjayB0aGUgYGFyY2gveDg2L2t2bS9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIGRlZmluaXRpdmUgc291cmNlIGZvciB0aGVzZSBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSB4ODYgS1ZNIG1vZHVsZS4gTGV0J3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgc2F5cy4gTm8gbmVlZCB0byBsZWF2ZSBhbnkgc3RvbmUgdW50dXJuZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDI1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6MjU6NTQuNTUwMzE3MjYzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTg4ODg4OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9JTlRFTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTgzPWNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDgtICAgICAgICBib29sIFxcXCJDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6MjU6NTQuODY5MjEzNjhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY1MzQ4ODEwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBLVk0gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgc3BlY2lmaWMgYWJvdXQgS1ZNIG9uIHg4Niwgc28gSSdtIGhlYWRpbmcgZGlyZWN0bHkgdG8gdGhlIHNvdXJjZS4gTGV0J3Mgc2VlLi4uIEknbGwgbmF2aWdhdGUgdG8gdGhlIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgZmlsZS4gSSdtIGFpbWluZyBmb3IgYXJvdW5kIGxpbmUgOTYg4oCTIGhvcGVmdWxseSB0aGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB3aGF0ZXZlciBJJ20gdHJvdWJsZXNob290aW5nIG9yIGludmVzdGlnYXRpbmcuIEknbSBleHBlY3Rpbmcgc29tZXRoaW5nIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbiwgb3IgcGVyaGFwcyBhIHNlY3Rpb24gZGVmaW5pbmcgc29tZSBrZXkgS1ZNIGZlYXR1cmVzLiBMZXQncyBzZWUgd2hhdCBsaW5lIDk2IGhvbGRzLiBUaGlzIGlzIGdvaW5nIHRvIGdpdmUgbWUgdGhlIG1vc3QgZ3JhbnVsYXIgaW5zaWdodCBpbnRvIHRoZSBidWlsZCBjb25maWd1cmF0aW9ucyBJJ20gd29ya2luZyB3aXRoLiBUaW1lIHRvIHJlYWQgYW5kIGNvbXByZWhlbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NjY1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6MjU6NTkuNTIyNzA1MTRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogOTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgOTA6XFx0XFx0ICBwcm90ZWN0ZWQgVk1zIGFyZSBwdXJlbHkgYSBkZXZlbG9wbWVudCBhbmQgdGVzdGluZyB2ZWhpY2xlIGZvclxcbiAgOTE6XFx0XFx0ICBLVk1fQ1JFQVRFX0dVRVNUX01FTUZELiAgQXR0ZW1wdGluZyB0byBydW4gYSBcXFwicmVhbFxcXCIgVk0gd29ya2xvYWQgYXMgYVxcbiAgOTI6XFx0XFx0ICBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk0gd2lsbCBmYWlsIG1pc2VyYWJseS5cXG4gIDkzOlxcdFxcbiAgOTQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBcXFwiTlxcXCIuXFxuICA5NTpcXHRcXG4gIDk2OlxcdGNvbmZpZyBLVk1fSU5URUxcXG4gIDk3OlxcdFxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbiAgOTg6XFx0XFx0ZGVwZW5kcyBvbiBLVk0gXFx1MDAyNlxcdTAwMjYgSUEzMl9GRUFUX0NUTFxcbiAgOTk6XFx0XFx0c2VsZWN0IFg4Nl9GUkVEIGlmIFg4Nl82NFxcbiAxMDA6XFx0XFx0aGVscFxcbiAxMDE6XFx0XFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBLVk0gb24gcHJvY2Vzc29ycyBlcXVpcHBlZCB3aXRoIEludGVsJ3MgVlRcXG4gMTAyOlxcdFxcdCAgZXh0ZW5zaW9ucywgYS5rLmEuIFZpcnR1YWwgTWFjaGluZSBFeHRlbnNpb25zIChWTVgpLlxcbiAxMDM6XFx0XFxuIDEwNDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAxMDU6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBrdm0taW50ZWwuXFxuIDEwNjpcXHRcXG4gMTA3OlxcdGNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcXG4gMTA4OlxcdCAgICAgICAgYm9vbCBcXFwiQ2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcXFwiXFxuIDEwOTpcXHQgICAgICAgIGRlcGVuZHMgb24gS1ZNX0lOVEVMIFxcdTAwMjZcXHUwMDI2IEVYUEVSVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzoyNTo1OS41MjI3NzQxNFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzY4NzY3NTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEtlcm5lbCBDb25maWd1cmF0aW9uIFN0cmF0ZWd5KipcblxuT2theSwgc28gSSdtIGNvbmZpZ3VyaW5nIHRoZSBrZXJuZWwgZm9yIEtWTSBzdXBwb3J0LiBJdCdzIG9idmlvdXMgdGhhdCBgS1ZNX0lOVEVMYCBidWlsZHMgb24gdG9wIG9mIGBLVk1gLCBzbyBJIGRlZmluaXRlbHkgbmVlZCB0byBpbmNsdWRlIGJvdGggb2YgdGhvc2UuIEkgYWxzbyBzZWUgdGhhdCB3ZSB1c2UgYEtWTV9IWVBFUlZgIGluIHNvbWUgY2FzZXMsIHNvIGxldCdzIGluY2x1ZGUgdGhhdCB0b28uIEl0J3MgYmVzdCB0byBiZSBjb21wcmVoZW5zaXZlIGFuZCBhdm9pZCBhbnkgdW5uZWNlc3NhcnkgcmVjb21waWxhdGlvbi5cblxuTm93LCBJJ20gdGhpbmtpbmcgYWJvdXQgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gSSByZWNhbGwgc2VlaW5nIGBoYW5kbGVfdm1wdHJsZGAgYW5kIGBoYW5kbGVfdm1wdHJzdGAgaW4gYGFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNgLCB3aGljaCBzdWdnZXN0cyBuZXN0ZWQgdmlydHVhbGl6YXRpb24uIEkgbmVlZCB0byBjb25maXJtIGlmIHRoZXJlJ3MgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBkaXJlY3RseSByZWxhdGVkIHRvIHRoYXQgZnVuY3Rpb25hbGl0eSwgc29tZXRoaW5nIGxpa2UgYENPTkZJR19LVk1fSU5URUxfTkVTVEVEYCBwZXJoYXBzLiBHb3R0YSBjaGVjayBmb3IgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgyMjksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzoyNjowMy4yOTE1NDM3NTdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzMjQyNzc5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0lOVEVMX05FU1RFRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzoyNjowMy4zODQ3OTQwNjZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQwODY5MDY2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTmVzdGVkIFZNWCBNb2R1bGUgSW52ZXN0aWdhdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcsIHRoYXQgXCJuZXN0ZWQgVk1YXCIgdGhpbmcgaXMgYWxtb3N0IGNlcnRhaW5seSBub3QgYSBzdGFuZGFsb25lIG1vZHVsZSBpbiB0aGUgdHJhZGl0aW9uYWwgc2Vuc2UuIEl0J3MgcHJvYmFibHkganVzdCBhIHBhcmFtZXRlciB0aGF0J3MgcGFzc2VkIHRvIGEgbW9kdWxlLCBvciBtb3JlIGxpa2VseSwgaXQncyBhIHBpZWNlIG9mIHRoZSBgS1ZNX0lOVEVMYCBtb2R1bGUgaXRzZWxmLiBJIG5lZWQgdG8gZHJpbGwgZG93biBhbmQgc2VlIGhvdyB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgYWN0dWFsbHkgY29uc3RydWN0ZWQuXG5cblRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpcyB0aGUgYnVpbGQgc3lzdGVtLiBMZXQgbWUgY2hlY2sgdGhlIGBhcmNoL3g4Ni9rdm0vdm14L01ha2VmaWxlYCB0byBzZWUgaG93IGBuZXN0ZWQub2AgKG9yIHdoYXRldmVyIG9iamVjdCBjb250YWlucyB0aGUgbmVzdGVkIFZNWCBmdW5jdGlvbmFsaXR5KSBpcyBjb21waWxlZC4gVGhhdCBzaG91bGQgcmV2ZWFsIHdoZXRoZXIgaXQncyBjb25kaXRpb25hbGx5IGluY2x1ZGVkLCBjb21waWxlZCB3aXRoIHNwZWNpZmljIGZsYWdzLCBvciBpZiBpdCdzIHRyZWF0ZWQgYXMgYSBjb21wb25lbnQgd2l0aGluIGEgbGFyZ2VyIGNvbXBpbGF0aW9uIHVuaXQuIFRoZSBtYWtlZmlsZSB3aWxsIGV4cG9zZSBob3cgdGhlIGRlcGVuZGVuY2llcyBhcmUgbWFuYWdlZCwgdGhlIGluY2x1c2lvbiBvZiBjb25kaXRpb25hbCBjb2RlLCBhbmQgaG93IHRoZXNlIHNldHRpbmdzIGluZmx1ZW5jZSB0aGUgYnVpbGQgcHJvY2Vzcy4gVGhhdCdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgXCJuZXN0ZWQgVk1YXCIgaXMgaGFuZGxlZCBhdCB0aGUgc291cmNlIGxldmVsLiBGcm9tIHRoZXJlLCBJIGNhbiB0cmFjZSBkZXBlbmRlbmNpZXMgYW5kIHVuZGVyc3RhbmQgaG93IHRoZSBmbGFnIGlzIGV4cG9zZWQgb3IgaWYgaXQncyBoYW5kbGVkIGRpZmZlcmVudGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODU3NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE3OjI2OjA4Ljc5MzQ4Nzg4OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM0MjM0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmVzdGVkLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9ODgwPXN0cnVjdCBrdm1feDg2X29wcyB2dF94ODZfb3BzIF9faW5pdGRhdGEgPSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy05OTctXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6OTk4OlxcdC5uZXN0ZWRfb3BzID0gXFx1MDAyNnZteF9uZXN0ZWRfb3BzLFxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTk5OS1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NzQ3MD1zdGF0aWMgZ3BhX3Qgdm14X3RyYW5zbGF0ZV9uZXN0ZWRfZ3BhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03NDkwLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NzQ5MTpzdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIHZteF9uZXN0ZWRfb3BzID0ge1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzQ5Mi1cXHQubGVhdmVfbmVzdGVkID0gdm14X2xlYXZlX25lc3RlZCxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmg9MzEyPXN0YXRpYyBpbmxpbmUgYm9vbCBuZXN0ZWRfY3B1X2hhc19ub19od19lcnJjb2RlX2NjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmgtMzIwLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmg6MzIxOmV4dGVybiBzdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIHZteF9uZXN0ZWRfb3BzO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmgtMzIyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzoyNjowOC44NDY5MjMzNzlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE2Nzg2Njc3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRlYnVnZ2luZyBhIEJ1aWxkIFN5c3RlbSBEaXNjcmVwYW5jeSoqXG5cbkhtbSwgdGhhdCdzIG9kZC4gSSB3YXMgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGBuZXN0ZWQub2AsIHlldCB0aGUgb3V0cHV0IGlzbid0IHBvaW50aW5nIG1lIGJhY2sgdG8gdGhlIGBNYWtlZmlsZWAuIFRoYXQncyBhIHJlZCBmbGFnLiBTb21ldGhpbmcgaXNuJ3QgYmVoYXZpbmcgYXMgZXhwZWN0ZWQgd2l0aCB0aGUgYnVpbGQgZW52aXJvbm1lbnQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoYXQgb2JqZWN0IGZpbGUgaXMgYmVpbmcgcHJvZHVjZWQuIE15IGZpcnN0IGluc3RpbmN0LCBjb25zaWRlcmluZyBJJ20gd29ya2luZyB3aXRoIGEga2VybmVsIG1vZHVsZSBhbmQgbGlrZWx5IHVzaW5nIGEgdHlwaWNhbCBidWlsZCBzZXR1cCwgaXMgdG8gY2hlY2sgdGhlIGBhcmNoL3g4Ni9rdm0vTWFrZWZpbGVgLiBUaGF0J3MgYSBrZXkgYXJlYSwgZXNwZWNpYWxseSBpZiB0aGlzIGlzIHJlbGF0ZWQgdG8gS1ZNIG9yIHg4NiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29kZS4gVGhhdCBgTWFrZWZpbGVgIG9mdGVuIGhvbGRzIGNydWNpYWwgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRob3NlIHNwZWNpZmljIG9iamVjdCBmaWxlcyBhcmUgaGFuZGxlZC4gSXQncyB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gZmluZCB0aGUgcmVjaXBlIG9yIHJ1bGVzIHRoYXQgZ2VuZXJhdGUgdGhlIGBuZXN0ZWQub2AgdGhhdCBJJ20gaW50ZXJlc3RlZCBpbiwgb3IgaWRlbnRpZnkgd2h5IGl0J3MgKm5vdCogYmVpbmcgYnVpbHQgYXMgSSBhbnRpY2lwYXRlLiBUaW1lIHRvIGRpdmUgaW4gdGhlcmUgYW5kIHNlZSB3aGF0IHRoZSBidWlsZCBwcm9jZXNzIGlzIGRvaW5nIHdpdGggdGhpcyBwYXJ0aWN1bGFyIHNvdXJjZSBmaWxlLCBvciBpZiB0aGVyZSdzIGEgcHJvYmxlbSB3aXRoIGl0cyBpbmNsdXNpb24gaW4gdGhlIGJ1aWxkIGF0IGFsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkzNDEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzoyNjoxMy4wMTQ3OTI1NTFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNzQ3MjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5lc3RlZC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL01ha2VmaWxlPTE3PWt2bS1pbnRlbC15XFx0XFx0Kz0gdm14L3ZteC5vIHZteC92bWVudGVyLm8gdm14L3BtdV9pbnRlbC5vIHZteC92bWNzMTIubyBcXFxcXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlOjE4OlxcdFxcdFxcdCAgIHZteC9uZXN0ZWQubyB2bXgvcG9zdGVkX2ludHIubyB2bXgvbWFpbi5vXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlLTE5LVxcbi0tXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlPTIyPWt2bS1pbnRlbC0kKENPTkZJR19LVk1fSU5URUxfVERYKVxcdCs9IHZteC90ZHgub1xcbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0yMy1cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6MjQ6a3ZtLWFtZC15XFx0XFx0Kz0gc3ZtL3N2bS5vIHN2bS92bWVudGVyLm8gc3ZtL3BtdS5vIHN2bS9uZXN0ZWQubyBzdm0vYXZpYy5vXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlLTI1LVxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTIwMTM9c3RhdGljIHU2NCBrdm1faHZfZmx1c2hfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9odl9oY2FsbCAqaGMpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMjA0OS1cXHRpZiAoIWhjLVxcdTAwM2VmYXN0IFxcdTAwMjZcXHUwMDI2IG1tdV9pc19uZXN0ZWQodmNwdSkpIHtcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6MjA1MDpcXHRcXHRoYy1cXHUwMDNlaW5ncGEgPSBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVxcdTAwM2V0cmFuc2xhdGVfbmVzdGVkX2dwYShcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMjA1MS1cXHRcXHRcXHRcXHRcXHR2Y3B1LCBoYy1cXHUwMDNlaW5ncGEsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9MjM5Mz1zdGF0aWMgaW50IGt2bV9odl9oeXBlcmNhbGxfY29tcGxldGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcmVzdWx0KVxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTI0MTAtXFx0aWYgKHRsYl9sb2NrX2NvdW50KVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoyNDExOlxcdFxcdGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXFx1MDAzZWh2X2luamVjdF9zeW50aGV0aWNfdm1leGl0X3Bvc3RfdGxiX2ZsdXNoKHZjcHUpO1xcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0yNDEyLVxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTI3NzQ9aW50IGt2bV9nZXRfaHZfY3B1aWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2NwdWlkMiAqY3B1aWQsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMjc5MS1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6Mjc5MjpcXHRpZiAoa3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cXHUwMDNlZ2V0X2V2bWNzX3ZlcnNpb24pXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjI3OTM6XFx0XFx0ZXZtY3NfdmVyID0ga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cXHUwMDNlZ2V0X2V2bWNzX3ZlcnNpb24odmNwdSk7XFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTI3OTQtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11Lmg9MzAzPXN0YXRpYyBpbmxpbmUgZ3BhX3Qga3ZtX3RyYW5zbGF0ZV9ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS5oLTMxMC1cXHRcXHRyZXR1cm4gZ3BhO1xcbmFyY2gveDg2L2t2bS9tbXUuaDozMTE6XFx0cmV0dXJuIGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXFx1MDAzZXRyYW5zbGF0ZV9uZXN0ZWRfZ3BhKHZjcHUsIGdwYSwgYWNjZXNzLFxcbmFyY2gveDg2L2t2bS9tbXUuaC0zMTItXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGV4Y2VwdGlvbixcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnaW5nX3RtcGwuaD0yMDg9c3RhdGljIGludCBGTkFNRSh1cGRhdGVfYWNjZXNzZWRfZGlydHlfYml0cykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9wYWdpbmdfdG1wbC5oLTIzNS0jaWYgUFRUWVBFID09IFBUVFlQRV9FUFRcXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2luZ190bXBsLmg6MjM2OlxcdFxcdFxcdGlmIChrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVxcdTAwM2V3cml0ZV9sb2dfZGlydHkodmNwdSwgYWRkcikpXFxuYXJjaC94ODYva3ZtL21tdS9wYWdpbmdfdG1wbC5oLTIzNy1cXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM9MjE0Nz1zdGF0aWMgZ3BhX3Qgc3ZtX3RyYW5zbGF0ZV9uZXN0ZWRfZ3BhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0yMTY0LVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6MjE2NTpzdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIHN2bV9uZXN0ZWRfb3BzID0ge1xcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMjE2Ni1cXHQubGVhdmVfbmVzdGVkID0gc3ZtX2xlYXZlX25lc3RlZCxcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NTM0Mz1zdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTQ0Ni1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjU0NDc6XFx0Lm5lc3RlZF9vcHMgPSBcXHUwMDI2c3ZtX25lc3RlZF9vcHMsXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NDQ4LVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD05MTU9c3RhdGljIGlubGluZSB2b2lkIHN2bV9wbXVfaGFuZGxlX25lc3RlZF90cmFuc2l0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC05MjYtXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo5Mjc6ZXh0ZXJuIHN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgc3ZtX25lc3RlZF9vcHM7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC05MjgtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz04ODA9c3RydWN0IGt2bV94ODZfb3BzIHZ0X3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTk5Ny1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo5OTg6XFx0Lm5lc3RlZF9vcHMgPSBcXHUwMDI2dm14X25lc3RlZF9vcHMsXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtOTk5LVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz03NDcwPXN0YXRpYyBncGFfdCB2bXhfdHJhbnNsYXRlX25lc3RlZF9ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTc0OTAtXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo3NDkxOnN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgdm14X25lc3RlZF9vcHMgPSB7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03NDkyLVxcdC5sZWF2ZV9uZXN0ZWQgPSB2bXhfbGVhdmVfbmVzdGVkLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaD0zMTI9c3RhdGljIGlubGluZSBib29sIG5lc3RlZF9jcHVfaGFzX25vX2h3X2VycmNvZGVfY2Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaC0zMjAtXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaDozMjE6ZXh0ZXJuIHN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgdm14X25lc3RlZF9vcHM7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaC0zMjItXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9ODI2PXN0YXRpYyB2b2lkIGt2bV9tdWx0aXBsZV9leGNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgbnIsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtODM5LVxcdGlmIChpc19ndWVzdF9tb2RlKHZjcHUpIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjg0MDpcXHQgICAga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cXHUwMDNlaXNfZXhjZXB0aW9uX3ZtZXhpdCh2Y3B1LCBuciwgZXJyb3JfY29kZSkpIHtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtODQxLVxcdFxcdGt2bV9xdWV1ZV9leGNlcHRpb25fdm1leGl0KHZjcHUsIG5yLCBoYXNfZXJyb3IsIGVycm9yX2NvZGUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MjY2MT11NjQga3ZtX2NhbGNfbmVzdGVkX3RzY19vZmZzZXQodTY0IGwxX29mZnNldCwgdTY0IGwyX29mZnNldCwgdTY0IGwyX211bHRpcGxpZXIpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTI2NjIte1xcbmFyY2gveDg2L2t2bS94ODYuYzoyNjYzOlxcdHU2NCBuZXN0ZWRfb2Zmc2V0O1xcbmFyY2gveDg2L2t2bS94ODYuYy0yNjY0LVxcbmFyY2gveDg2L2t2bS94ODYuYy0yNjY1LVxcdGlmIChsMl9tdWx0aXBsaWVyID09IGt2bV9jYXBzLmRlZmF1bHRfdHNjX3NjYWxpbmdfcmF0aW8pXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjI2NjY6XFx0XFx0bmVzdGVkX29mZnNldCA9IGwxX29mZnNldDtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMjY2Ny1cXHRlbHNlXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjI2Njg6XFx0XFx0bmVzdGVkX29mZnNldCA9IG11bF9zNjRfdTY0X3NocigoczY0KSBsMV9vZmZzZXQsIGwyX211bHRpcGxpZXIsXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTI2NjktXFx0XFx0XFx0XFx0XFx0XFx0a3ZtX2NhcHMudHNjX3NjYWxpbmdfcmF0aW9fZnJhY19iaXRzKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMjY3MC1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6MjY3MTpcXHRuZXN0ZWRfb2Zmc2V0ICs9IGwyX29mZnNldDtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6MjY3MjpcXHRyZXR1cm4gbmVzdGVkX29mZnNldDtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMjY3My19XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NDc2OD1pbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTQ5MzAtXFx0Y2FzZSBLVk1fQ0FQX05FU1RFRF9TVEFURTpcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NDkzMTpcXHRcXHRyID0ga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cXHUwMDNlZ2V0X3N0YXRlID9cXG5hcmNoL3g4Ni9rdm0veDg2LmM6NDkzMjpcXHRcXHRcXHRrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVxcdTAwM2VnZXRfc3RhdGUoTlVMTCwgTlVMTCwgMCkgOiAwO1xcbmFyY2gveDg2L2t2bS94ODYuYy00OTMzLVxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTQ5MzgtXFx0Y2FzZSBLVk1fQ0FQX0hZUEVSVl9FTkxJR0hURU5FRF9WTUNTOlxcbmFyY2gveDg2L2t2bS94ODYuYzo0OTM5OlxcdFxcdHIgPSBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVxcdTAwM2VlbmFibGVfZXZtY3MgIT0gTlVMTDtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNDk0MC1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz02MDA4PXN0YXRpYyBpbnQga3ZtX3ZjcHVfaW9jdGxfZW5hYmxlX2NhcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjAzMS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjAzMjpcXHRcXHRcXHRpZiAoIWt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXFx1MDAzZWVuYWJsZV9ldm1jcylcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjAzMy1cXHRcXHRcXHRcXHRyZXR1cm4gLUVOT1RUWTtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjAzNDpcXHRcXHRcXHRyID0ga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cXHUwMDNlZW5hYmxlX2V2bWNzKHZjcHUsIFxcdTAwMjZ2bWNzX3ZlcnNpb24pO1xcbmFyY2gveDg2L2t2bS94ODYuYy02MDM1LVxcdFxcdFxcdGlmICghcikge1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTYxODk9bG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTY1MzEtXFx0XFx0ciA9IC1FSU5WQUw7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjY1MzI6XFx0XFx0aWYgKCFrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVxcdTAwM2VnZXRfc3RhdGUpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTY1MzMtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjUzOS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjU0MDpcXHRcXHRyID0ga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cXHUwMDNlZ2V0X3N0YXRlKHZjcHUsIHVzZXJfa3ZtX25lc3RlZF9zdGF0ZSxcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjU0MS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIHVzZXJfZGF0YV9zaXplKTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy02NTYxLVxcdFxcdHIgPSAtRUlOVkFMO1xcbmFyY2gveDg2L2t2bS94ODYuYzo2NTYyOlxcdFxcdGlmICgha3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cXHUwMDNlc2V0X3N0YXRlKVxcbmFyY2gveDg2L2t2bS94ODYuYy02NTYzLVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTY1ODQtXFx0XFx0aWR4ID0gc3JjdV9yZWFkX2xvY2soXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlc3JjdSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjY1ODU6XFx0XFx0ciA9IGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXFx1MDAzZXNldF9zdGF0ZSh2Y3B1LCB1c2VyX2t2bV9uZXN0ZWRfc3RhdGUsIFxcdTAwMjZrdm1fc3RhdGUpO1xcbmFyY2gveDg2L2t2bS94ODYuYy02NTg2LVxcdFxcdHNyY3VfcmVhZF91bmxvY2soXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlc3JjdSwgaWR4KTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz0xMDU2NT1pbnQga3ZtX2NoZWNrX25lc3RlZF9ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNTY3LVxcdGlmIChrdm1fdGVzdF9yZXF1ZXN0KEtWTV9SRVFfVFJJUExFX0ZBVUxULCB2Y3B1KSkge1xcbmFyY2gveDg2L2t2bS94ODYuYzoxMDU2ODpcXHRcXHRrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVxcdTAwM2V0cmlwbGVfZmF1bHQodmNwdSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNTY5LVxcdFxcdHJldHVybiAxO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwNTcxLVxcbmFyY2gveDg2L2t2bS94ODYuYzoxMDU3MjpcXHRyZXR1cm4ga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cXHUwMDNlY2hlY2tfZXZlbnRzKHZjcHUpO1xcbmFyY2gveDg2L2t2bS94ODYuYy0xMDU3My19XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTA2MzM9c3RhdGljIGludCBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwODEwLVxcdGlmIChpc19ndWVzdF9tb2RlKHZjcHUpIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwODExOlxcdCAgICBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVxcdTAwM2VoYXNfZXZlbnRzIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwODEyOlxcdCAgICBrdm1feDg2X29wcy5uZXN0ZWRfb3BzLVxcdTAwM2VoYXNfZXZlbnRzKHZjcHUsIHRydWUpKVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDgxMy1cXHRcXHQqcmVxX2ltbWVkaWF0ZV9leGl0ID0gdHJ1ZTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz0xMTExMj1zdGF0aWMgaW50IHZjcHVfZW50ZXJfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTExMTM0LVxcdFxcdGlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX0dFVF9ORVNURURfU1RBVEVfUEFHRVMsIHZjcHUpKSB7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjExMTM1OlxcdFxcdFxcdGlmICh1bmxpa2VseSgha3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cXHUwMDNlZ2V0X25lc3RlZF9zdGF0ZV9wYWdlcyh2Y3B1KSkpIHtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTExMzYtXFx0XFx0XFx0XFx0ciA9IDA7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTExODYtXFx0XFx0XFx0aWYgKGlzX2d1ZXN0X21vZGUodmNwdSkpXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjExMTg3OlxcdFxcdFxcdFxcdGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXFx1MDAzZXRyaXBsZV9mYXVsdCh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTExODgtXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTE1Njk9Ym9vbCBrdm1fdmNwdV9oYXNfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMTYwNS1cXHRpZiAoaXNfZ3Vlc3RfbW9kZSh2Y3B1KSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L2t2bS94ODYuYzoxMTYwNjpcXHQgICAga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cXHUwMDNlaGFzX2V2ZW50cyBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L2t2bS94ODYuYzoxMTYwNzpcXHQgICAga3ZtX3g4Nl9vcHMubmVzdGVkX29wcy1cXHUwMDNlaGFzX2V2ZW50cyh2Y3B1LCBmYWxzZSkpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTExNjA4LVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTExOTU2PWludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTIwMzEtXFx0aWYgKHZjcHUtXFx1MDAzZWFyY2guZXhjZXB0aW9uX2Zyb21fdXNlcnNwYWNlIFxcdTAwMjZcXHUwMDI2IGlzX2d1ZXN0X21vZGUodmNwdSkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTIwMzI6XFx0ICAgIGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXFx1MDAzZWlzX2V4Y2VwdGlvbl92bWV4aXQodmNwdSwgZXgtXFx1MDAzZXZlY3RvcixcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTIwMzMtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ZXgtXFx1MDAzZWVycm9yX2NvZGUpKSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2Lmg9MTUyPXN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fbGVhdmVfbmVzdGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0veDg2LmgtMTUzLXtcXG5hcmNoL3g4Ni9rdm0veDg2Lmg6MTU0OlxcdGt2bV94ODZfb3BzLm5lc3RlZF9vcHMtXFx1MDAzZWxlYXZlX25lc3RlZCh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0veDg2LmgtMTU1LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6MjY6MTMuMDY1NTQ0OTRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTUzNjk0MjAxNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgS1ZNIE5lc3RlZCBWTVggUGF0Y2ggZm9yIEh5cGVyLVYgRW5saWdodGVuZWQgVk1DUyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGhlcmUncyBteSB0YWtlLiBJbml0aWFsbHksIEkgemVyb2VkIGluIG9uIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvZiBgbmVzdGVkLm9gIHdpdGggYEtWTV9JTlRFTGAgZW5hYmxlZCwgYW5kLCB3aGlsZSB0aGF0ICppcyogYSBrZXkgZmFjdG9yLCBpdCdzIG5vdCB0aGUgd2hvbGUgc3RvcnkuIExldCdzIG1ha2Ugc3VyZSB3ZSBnZXQgaXQgcmlnaHQuXG5cbkkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSByaWdodCBjb25maWdzLiBJIHNlZSB0aGF0IHRoaXMgcGF0Y2ggbW9kaWZpZXMgYGhhbmRsZV92bXB0cmxkYCBhbmQgYGhhbmRsZV92bXB0cnN0YCwgd2hpY2ggYXJlIHVzZWQgd2hlbiB0aGVyZSdzIGFuIGVubGlnaHRlbmVkIFZNQ1MgKGVWTUNTKSBwcmVzZW50LCB0cmlnZ2VyZWQgd2hlbiBgS1ZNX0hZUEVSVmAgaXMgZW5hYmxlZC4gYEtWTV9IWVBFUlZgIHdpbGwgbmVlZCB0byBiZSBlbmFibGVkIGZvciBgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZGAgdG8gcmV0dXJuIHRydWUuIFRoaXMgbWVhbnMgdGhhdCBib3RoIGBLVk1fSU5URUxgIGFuZCBgS1ZNYCBhcmUgbmVlZGVkIGZvciBhIHdvcmtpbmcgS1ZNLCBhbmQgb2YgY291cnNlIGBLVk1fSFlQRVJWYCBmb3IgdGhlIEh5cGVyLVYgc3BlY2lmaWMgY2hhbmdlLiBOb3csIGxvb2tpbmcgYXQgdGhlIGNvbmZpZyBvcHRpb25zLCBgS1ZNX0hZUEVSVmAgaXMgYSBib29sZWFuLCB3aGlsZSBgS1ZNX0lOVEVMYCBhbmQgYEtWTWAgYXJlIHRyaXN0YXRlLCBzbyB0aGF0J3Mgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZC5cblxuRGlnZ2luZyBpbnRvIHRoZSBjaGFuZ2VzLCB0aGlzIHBhdGNoIHNwZWNpZmljYWxseSBhZGRyZXNzZXMgaG93IEtWTSBuZXN0ZWQgVk1YIGhhbmRsZXMgYFZNUFRSTERgIGFuZCBgVk1QVFJTVGAgaW5zdHJ1Y3Rpb25zIHdoZW4gSHlwZXItVidzIGVubGlnaHRlbmVkIFZNQ1MgaXMgaW4gcGxheS4gVGhlIGtleSBjaGFuZ2UgaXMgdGhhdCwgcHJldmlvdXNseSwgYFZNUFRSTERgIHdhcyBzaWxlbnRseSBpZ25vcmVkLCBhbmQgYFZNUFRSU1RgIHdhcyBpZ25vcmVkLiBOb3csIGBWTVBUUkxEYCBxdWV1ZXMgYSAjVUQgZXhjZXB0aW9uLCBhbmQgYFZNUFRSU1RgIHJldHVybnMgdGhlIGVWTUNTIEdQQSBpbnN0ZWFkLiBUaGlzIGlzIGEgYmVoYXZpb3JhbCBjaGFuZ2UgaW4gS1ZNLCB3aGljaCBtdXN0IGJlIGZ1enplZCBmb3Igc3RhYmlsaXR5LiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbG9naWMuIFdoaWxlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgc3RhdGljLCB0aGUgZmFjdCB0aGF0IHRoZWlyIGFkZHJlc3NlcyBhcmUgdGFrZW4gYW5kIHBsYWNlZCBpbiBhIGZ1bmN0aW9uIHBvaW50ZXIgYXJyYXkgbWVhbnMgdGhhdCB0aGVzZSBhcmVuJ3QgaW5saW5lZCBhbmQgaGF2ZSB1bmlxdWUgc3ltYm9sIGFkZHJlc3Nlcy4gVGhleSBhcmUgbm90IHBlcmZvcm1hbmNlIHNlbnNpdGl2ZSwgYXMgdGhlIGZ1bmN0aW9ucyBoYW5kbGUgc3BlY2lmaWMgVk0gZXhpdHMsIHJlbGF0ZWQgdG8gdGhlc2Ugc3BlY2lmaWMgaW5zdHJ1Y3Rpb25zLCBzbyBpdCdzIG5vdCBzb21ldGhpbmcgaW4gYSBob3QgcGF0aC5cblxuSSBhbHNvIGNoZWNrZWQgdG8gc2VlIGlmIGFueSBvdGhlciBmdW5jdGlvbnMgd2VyZSBtb2RpZmllZC4gVGhlIHBhdGNoIGRvZXMgYWZmZWN0IHNvbWUgc2VsZnRlc3QgY29kZSwgYnV0IHRob3NlIGFyZSBpbiB0aGUgdG9vbHMgZGlyZWN0b3J5LCBub3QgdGhlIGtlcm5lbCBpdHNlbGYsIGFuZCBzbyBhcmUgbm90IGltcG9ydGFudCB0byB0aGUga2VybmVsLlxuXG5UaGVyZWZvcmUsIGZvciBmdXp6aW5nLCBJJ20gY29uZmlkZW50IHRoYXQgd2UgbmVlZCB0byBlbmFibGU6XG5gS1ZNYFxuYEtWTV9JTlRFTGBcbmBLVk1fSFlQRVJWYFxuYW5kIHNwZWNpZmljYWxseSB0YXJnZXQ6XG5gaGFuZGxlX3ZtcHRybGRgXG5gaGFuZGxlX3ZtcHRyc3RgXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MzUxLCJPdXRwdXRUb2tlbnMiOjE1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6MjY6MjguNDM0OTY3OTY2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ2MzkzMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fSFlQRVJWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaGFuZGxlX3ZtcHRybGRcIixcbiAgICBcImhhbmRsZV92bXB0cnN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJlaGF2aW9yIG9mIEtWTSBuZXN0ZWQgVk1YIHdoZW4gaGFuZGxpbmcgVk1QVFJMRCBhbmQgVk1QVFJTVCBpbnN0cnVjdGlvbnMgaW4gdGhlIHByZXNlbmNlIG9mIEh5cGVyLVYgZW5saWdodGVuZWQgVk1DUyAoZVZNQ1MpLiBTcGVjaWZpY2FsbHksIGl0IHF1ZXVlcyBhICNVRCBleGNlcHRpb24gaW5zdGVhZCBvZiBzaWxlbnRseSBpZ25vcmluZyBWTVBUUkxELCBhbmQgcmV0dXJucyB0aGUgZVZNQ1MgR1BBIGluc3RlYWQgb2YgaWdub3JpbmcgVk1QVFJTVC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIEtWTSBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIktWTV9IWVBFUlZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoYW5kbGVfdm1wdHJsZFwiLFxuICAgIFwiaGFuZGxlX3ZtcHRyc3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgS1ZNIG5lc3RlZCBWTVggd2hlbiBoYW5kbGluZyBWTVBUUkxEIGFuZCBWTVBUUlNUIGluc3RydWN0aW9ucyBpbiB0aGUgcHJlc2VuY2Ugb2YgSHlwZXItViBlbmxpZ2h0ZW5lZCBWTUNTIChlVk1DUykuIFNwZWNpZmljYWxseSwgaXQgcXVldWVzIGEgI1VEIGV4Y2VwdGlvbiBpbnN0ZWFkIG9mIHNpbGVudGx5IGlnbm9yaW5nIFZNUFRSTEQsIGFuZCByZXR1cm5zIHRoZSBlVk1DUyBHUEEgaW5zdGVhZCBvZiBpZ25vcmluZyBWTVBUUlNULiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgS1ZNIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6MjY6MjguNTE5NjE0NTE1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzEzNjUyMDczNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzoyNjoyOC41MjAxNzQzODVaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTcxMzY0NjQzMjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0ncyBuZXN0ZWQgVk1YIGVtdWxhdGlvbiBmb3IgdGhlIFZNUFRSTEQgYW5kIFZNUFRSU1QgaW5zdHJ1Y3Rpb25zIHdoZW4gRW5saWdodGVuZWQgVk1DUyAoZVZNQ1MpIGlzIHVzZWQuIEluIGBoYW5kbGVfdm1wdHJzdGAsIGl0IGNoYW5nZXMgdGhlIGNvZGUgdG8gd3JpdGUgdGhlIGBodl9ldm1jc192bXB0cmAgKGEgNjQtYml0IGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MpIHRvIGd1ZXN0IG1lbW9yeSBpbnN0ZWFkIG9mIHNraXBwaW5nIHRoZSBpbnN0cnVjdGlvbi4gU2luY2UgYGh2X2V2bWNzX3ZtcHRyYCBpcyBhIGZ1bGx5IGluaXRpYWxpemVkIDY0LWJpdCBpbnRlZ2VyIChgZ3BhX3RgKSB3aXRob3V0IGFueSBwYWRkaW5nLCB3cml0aW5nIGl0IHRvIGd1ZXN0IG1lbW9yeSBkb2VzIG5vdCBsZWFrIGFueSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIFRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGBoYW5kbGVfdm1wdHJsZGAgdG8gcXVldWUgYSAjVUQgZXhjZXB0aW9uLCB3aGljaCBvbmx5IGFmZmVjdHMgY29udHJvbCBmbG93IGFuZCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBjb21wbGV4IHN0cnVjdHVyZXMsIG9yIHBhZGRpbmcgaW50cm9kdWNlZCB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBidWdzIGluIHRoaXMgYXJlYS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzNDhjYWNmMDQxOTI0NjFiZDdlOTU2NTc1ZjFmN2U3ZmY0MDllNGUzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMTQgMTc6MTg6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xuaW5kZXggZGRmNmRmN2JlZTkzYi4uMGY1ZTRiNDdlY2IxOSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbkBAIC01ODc5LDYgKzU4NzksMTIgQEAgc3RhdGljIGludCBoYW5kbGVfdm1wdHJsZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAoIW5lc3RlZF92bXhfY2hlY2tfcGVybWlzc2lvbih2Y3B1KSlcbiBcdFx0cmV0dXJuIDE7XG4gXG4rXHQvKiBGb3JiaWQgbm9ybWFsIFZNUFRSTEQgaWYgRW5saWdodGVuZWQgdmVyc2lvbiB3YXMgdXNlZCAqL1xuK1x0aWYgKG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodm14KSkge1xuK1x0XHRrdm1fcXVldWVfZXhjZXB0aW9uKHZjcHUsIFVEX1ZFQ1RPUik7XG4rXHRcdHJldHVybiAxO1xuK1x0fVxuK1xuIFx0aWYgKG5lc3RlZF92bXhfZ2V0X3ZtcHRyKHZjcHUsIFx1MDAyNnZtcHRyLCBcdTAwMjZyKSlcbiBcdFx0cmV0dXJuIHI7XG4gXG5AQCAtNTg4OCwxMCArNTg5NCw2IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRybGQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKHZtcHRyID09IHZteC1cdTAwM2VuZXN0ZWQudm14b25fcHRyKVxuIFx0XHRyZXR1cm4gbmVzdGVkX3ZteF9mYWlsKHZjcHUsIFZNWEVSUl9WTVBUUkxEX1ZNWE9OX1BPSU5URVIpO1xuIFxuLVx0LyogRm9yYmlkIG5vcm1hbCBWTVBUUkxEIGlmIEVubGlnaHRlbmVkIHZlcnNpb24gd2FzIHVzZWQgKi9cbi1cdGlmIChuZXN0ZWRfdm14X2lzX2V2bXB0cjEyX3ZhbGlkKHZteCkpXG4tXHRcdHJldHVybiAxO1xuLVxuIFx0aWYgKHZteC1cdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0ciAhPSB2bXB0cikge1xuIFx0XHRzdHJ1Y3QgZ2ZuX3RvX2h2YV9jYWNoZSAqZ2hjID0gXHUwMDI2dm14LVx1MDAzZW5lc3RlZC52bWNzMTJfY2FjaGU7XG4gXHRcdHN0cnVjdCB2bWNzX2hkciBoZHI7XG5AQCAtNTk0NCw3ICs1OTQ2LDcgQEAgc3RhdGljIGludCBoYW5kbGVfdm1wdHJzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBleGl0X3F1YWwgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdHUzMiBpbnN0cl9pbmZvID0gdm1jc19yZWFkMzIoVk1YX0lOU1RSVUNUSU9OX0lORk8pO1xuLVx0Z3BhX3QgY3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS1cdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0cjtcbitcdGdwYV90IGN1cnJlbnRfdm1wdHI7XG4gXHRzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBlO1xuIFx0Z3ZhX3QgZ3ZhO1xuIFx0aW50IHI7XG5AQCAtNTk1Miw4ICs1OTU0LDE0IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRyc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKCFuZXN0ZWRfdm14X2NoZWNrX3Blcm1pc3Npb24odmNwdSkpXG4gXHRcdHJldHVybiAxO1xuIFxuLVx0aWYgKHVubGlrZWx5KG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQodG9fdm14KHZjcHUpKSkpXG4tXHRcdHJldHVybiAxO1xuK1x0LypcbitcdCAqIEh5cGVyLVYgVExGUyBkb2VzIG5vdCBzcGVjaWZ5IHRoZSBiZWhhdmlvciBvZiBWTVBUUlNUIHdoZW4gZVZNQ1MgaXMgdXNlZFxuK1x0ICogYnV0IGdlbnVpbmUgSHlwZXItViBzZWVtcyB0byBiZSByZXR1cm5pbmcgZVZNQ1MgR1BBLlxuK1x0ICovXG4rXHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh0b192bXgodmNwdSkpKVxuK1x0XHRjdXJyZW50X3ZtcHRyID0gdG9fdm14KHZjcHUpLVx1MDAzZW5lc3RlZC5odl9ldm1jc192bXB0cjtcbitcdGVsc2VcbitcdFx0Y3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS1cdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0cjtcbiBcbiBcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIGV4aXRfcXVhbCwgaW5zdHJfaW5mbyxcbiBcdFx0XHRcdHRydWUsIHNpemVvZihncGFfdCksIFx1MDAyNmd2YSkpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oXG5pbmRleCA5MGZmZmFmOTE1OTU4Li5lMjE3OGE2NjgzY2E5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3ZteC5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvdm14LmhcbkBAIC0zMjUsOSArMzI1LDYgQEAgc3RhdGljIGlubGluZSBpbnQgdm1wdHJsZCh1NjQgdm1jc19wYSlcbiB7XG4gXHR1OCByZXQ7XG4gXG4tXHRpZiAoZW5hYmxlX2V2bWNzKVxuLVx0XHRyZXR1cm4gLTE7XG4tXG4gXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyAoXCJ2bXB0cmxkICVbcGFdOyBzZXRuYSAlW3JldF1cIlxuIFx0XHQ6IFtyZXRdXCI9cm1cIihyZXQpXG4gXHRcdDogW3BhXVwibVwiKHZtY3NfcGEpXG5AQCAtMzQxLDkgKzMzOCw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IHZtcHRyc3QodTY0ICp2YWx1ZSlcbiBcdHU2NCB0bXA7XG4gXHR1OCByZXQ7XG4gXG4tXHRpZiAoZW5hYmxlX2V2bWNzKVxuLVx0XHRyZXR1cm4gZXZtY3Nfdm1wdHJzdCh2YWx1ZSk7XG4tXG4gXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcInZtcHRyc3QgJVt2YWx1ZV07IHNldG5hICVbcmV0XVwiXG4gXHRcdDogW3ZhbHVlXVwiPW1cIih0bXApLCBbcmV0XVwiPXJtXCIocmV0KVxuIFx0XHQ6IDogXCJjY1wiLCBcIm1lbW9yeVwiKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2h5cGVydl9ldm1jcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9oeXBlcnZfZXZtY3MuY1xuaW5kZXggYzdmYTExNGFlZTIwZi4uNmE2ZDk0MGE3ODkxOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X2V2bWNzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaHlwZXJ2X2V2bWNzLmNcbkBAIC0xOCwxMiArMTgsMTYgQEBcbiAjaW5jbHVkZSBcImh5cGVydi5oXCJcbiAjaW5jbHVkZSBcInZteC5oXCJcbiBcbisjZGVmaW5lIFZNTEFVTkNIX0lOU05fU0laRSAzXG4rI2RlZmluZSBWTVBUUkxEX0lOU05fU0laRSA1XG4rXG4gc3RhdGljIGludCB1ZF9jb3VudDtcbitzdGF0aWMgaW50IHVkX2luc25fc2tpcF9zaXplO1xuIFxuIHN0YXRpYyB2b2lkIGd1ZXN0X3VkX2hhbmRsZXIoc3RydWN0IGV4X3JlZ3MgKnJlZ3MpXG4ge1xuIFx0dWRfY291bnQrKztcbi1cdHJlZ3MtXHUwMDNlcmlwICs9IDM7IC8qIFZNTEFVTkNIICovXG4rXHRyZWdzLVx1MDAzZXJpcCArPSB1ZF9pbnNuX3NraXBfc2l6ZTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZ3Vlc3Rfbm1pX2hhbmRsZXIoc3RydWN0IGV4X3JlZ3MgKnJlZ3MpXG5AQCAtOTUsMTYgKzk5LDE1IEBAIHZvaWQgZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMsIHN0cnVjdCBoeXBlcnZfdGVzdF9wYWdlcyAqaHZfcGFnZXMsXG4gXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTtcbiBcdEdVRVNUX1NZTkMoMyk7XG4gXHRHVUVTVF9BU1NFUlQobG9hZF9ldm1jcyhodl9wYWdlcykpO1xuLVx0R1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gaHZfcGFnZXMtXHUwMDNlZW5saWdodGVuZWRfdm1jc19ncGEpO1xuK1x0LyogVk1QVFJTVCByZXR1cm5zIC0xIHVudGlsIFZNTEFVTkNIIHdpdGggZVZNQ1MgcHRyIHNldCAqL1xuK1x0R1VFU1RfQVNTRVJUKHZtcHRyc3R6KCkgPT0gLTEpO1xuIFxuIFx0R1VFU1RfU1lOQyg0KTtcbi1cdEdVRVNUX0FTU0VSVCh2bXB0cnN0eigpID09IGh2X3BhZ2VzLVx1MDAzZWVubGlnaHRlbmVkX3ZtY3NfZ3BhKTtcbiBcbiBcdHByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUsXG4gXHRcdCAgICAgXHUwMDI2bDJfZ3Vlc3Rfc3RhY2tbTDJfR1VFU1RfU1RBQ0tfU0laRV0pO1xuIFxuIFx0R1VFU1RfU1lOQyg1KTtcbi1cdEdVRVNUX0FTU0VSVCh2bXB0cnN0eigpID09IGh2X3BhZ2VzLVx1MDAzZWVubGlnaHRlbmVkX3ZtY3NfZ3BhKTtcbiBcdGN1cnJlbnRfZXZtY3MtXHUwMDNlcmV2aXNpb25faWQgPSAtMXU7XG4gXHRHVUVTVF9BU1NFUlQodm1sYXVuY2goKSk7XG4gXHRjdXJyZW50X2V2bWNzLVx1MDAzZXJldmlzaW9uX2lkID0gRVZNQ1NfVkVSU0lPTjtcbkBAIC0xODMsMTAgKzE4NiwxNSBAQCB2b2lkIGd1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzLCBzdHJ1Y3QgaHlwZXJ2X3Rlc3RfcGFnZXMgKmh2X3BhZ2VzLFxuIFx0R1VFU1RfQVNTRVJUKHZtcmVhZHooVk1fRVhJVF9SRUFTT04pID09IEVYSVRfUkVBU09OX1ZNQ0FMTCk7XG4gXHRHVUVTVF9TWU5DKDExKTtcbiBcbitcdHVkX2luc25fc2tpcF9zaXplID0gVk1QVFJMRF9JTlNOX1NJWkU7XG4rXHR2bXB0cmxkKGh2X3BhZ2VzLVx1MDAzZWVubGlnaHRlbmVkX3ZtY3NfZ3BhKTtcbitcdEdVRVNUX0FTU0VSVCh1ZF9jb3VudCA9PSAxKTtcbitcbiBcdC8qIFRyeSBlbmxpZ2h0ZW5lZCB2bXB0cmxkIHdpdGggYW4gaW5jb3JyZWN0IEdQQSAqL1xuK1x0dWRfaW5zbl9za2lwX3NpemUgPSBWTUxBVU5DSF9JTlNOX1NJWkU7XG4gXHRldm1jc192bXB0cmxkKDB4ZGVhZGJlZWYsIGh2X3BhZ2VzLVx1MDAzZWVubGlnaHRlbmVkX3ZtY3MpO1xuIFx0R1VFU1RfQVNTRVJUKHZtbGF1bmNoKCkpO1xuLVx0R1VFU1RfQVNTRVJUKHVkX2NvdW50ID09IDEpO1xuK1x0R1VFU1RfQVNTRVJUKHVkX2NvdW50ID09IDIpO1xuIFx0R1VFU1RfRE9ORSgpO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE3OjI2OjI4LjUyMDE3NjAwNVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTM3NjExODUxNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEtWTSBOZXN0ZWQgVk1YIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0d2Vha2luZyBLVk0ncyBuZXN0ZWQgVk1YIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgaGFuZGxlX3ZtcHRybGRgIGFuZCBgaGFuZGxlX3ZtcHRyc3RgIGZ1bmN0aW9ucy4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhlc2UgYXJlIGxvdy1sZXZlbCBvcGVyYXRpb25zLCBzbyBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW1wbGljYXRpb25zLlxuXG5JbiBgaGFuZGxlX3ZtcHRybGRgLCB0aGUgY29kZSBub3cgZG9lcyBzb21ldGhpbmcgaW50ZXJlc3Rpbmcgd2hlbiBgbmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh2bXgpYCBpcyB0cnVlLiBCZWZvcmUsIGl0IHdvdWxkIGp1c3QgcmV0dXJuIDEsIHdoaWNoIGVmZmVjdGl2ZWx5IG1lYW50IFwiZG8gbm90aGluZ1wiIGluIHRoYXQgY2FzZS4gTm93LCBpdCBxdWV1ZXMgYSBVRCAoVW5kZWZpbmVkIEluc3RydWN0aW9uKSBleGNlcHRpb24uIFRoYXQncyBhIGRlZmluaXRlIGNoYW5nZSBpbiBiZWhhdmlvciBhbmQgc3VnZ2VzdHMgdGhhdCBhbiBpbnZhbGlkIG9wZXJhdGlvbiBvciBhIG1pc3VzZSBvZiBhbiBlVk1DUyBwb2ludGVyIGlzIGJlaW5nIGRldGVjdGVkLiBJdCdzIGdvb2QgdG8gZm9yY2UgdGhlIGd1ZXN0IHRvIGhhbmRsZSB0aGUgZXJyb3IgcHJvcGVybHksIHJhdGhlciB0aGFuIHNpbGVudGx5IGZhaWxpbmcuXG5cbmBoYW5kbGVfdm1wdHJzdGAgaXMgbW9yZSBpbnZvbHZlZC4gUHJldmlvdXNseSwgaWYgYG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWRgIHdhcyB0cnVlLCB0aGUgZnVuY3Rpb24ganVzdCByZXR1cm5lZCAxLiBOb3csIGl0J3MgZGlmZmVyZW50LiBJdCdzIGNoZWNraW5nIGlmIHRoZSBlVk1DUyBwb2ludGVyIGlzIHZhbGlkLCBhbmQgaWYgaXQgaXMsIGl0IHNldHMgYGN1cnJlbnRfdm1wdHJgIHRvIGBodl9ldm1jc192bXB0cmAuIFRoaXMgdmFsdWUgaXMgdGhlbiB3cml0dGVuIHRvIGd1ZXN0IG1lbW9yeSB1c2luZyBga3ZtX3dyaXRlX2d1ZXN0X3ZpcnRfc3lzdGVtYC4gVGhlIGNvbW1lbnQgbWVudGlvbnMgSHlwZXItViBhbmQgaXRzIGhhbmRsaW5nLCBvciBsYWNrIHRoZXJlb2YsIG9mIFZNUFRSU1Qgd2l0aCBlVk1DUy4gTm93LCBgY3VycmVudF92bXB0cmAgY29tZXMgZnJvbSBhIHBsYWNlIGBodl9ldm1jc192bXB0cmAgdGhhdCB0aGUgZ3Vlc3QgcHJvdmlkZWQgZWFybGllciB0aHJvdWdoIGVWTUNTIHBvaW50ZXIgbG9hZC5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgYWJvdXQgcG90ZW50aWFsIHNlY3VyaXR5IGlzc3Vlcy4gSXMgdGhlcmUgYSBwb3NzaWJpbGl0eSBvZiBpbmZvcm1hdGlvbiBsZWFrYWdlPyBJcyBgaHZfZXZtY3Nfdm1wdHJgIGluaXRpYWxpemVkIHByb3Blcmx5LCBvciBjb3VsZCBpdCBjb250YWluIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwb3RlbnRpYWxseSBleHBvc2luZyBrZXJuZWwgZGF0YSB0byB0aGUgZ3Vlc3Q/IEhvd2V2ZXIsIGBodl9ldm1jc192bXB0cmAgaXMgYSBzaW1wbGUgYGdwYV90YCAoYSA2NC1iaXQgdmFsdWUgcmVwcmVzZW50aW5nIGEgR3Vlc3QgUGh5c2ljYWwgQWRkcmVzcyksIHNvIHRoYXQncyBnb29kLiBJdCdzIGEgc2luZ2xlIHZhbHVlLCBub3QgYSBzdHJ1Y3Qgd2l0aCBwYWRkaW5nLCBzbyBJIGRvbid0IHNlZSBhbnkgb2J2aW91cyBsZWFrYWdlIHJpc2tzIHRoZXJlLiBVbmxlc3MgYGh2X2V2bWNzX3ZtcHRyYCBpdHNlbGYgaXMgdW5pbml0aWFsaXplZCwgSSB0aGluayB3ZSdyZSBzYWZlLiBSZWdhcmRsZXNzLCBzaW5jZSB0aGUgZ3Vlc3QgcHJvdmlkZXMgdGhpcyBHUEEsIHRoZSBndWVzdCB3b3VsZCBiZSBwcm92aWRpbmcgd2hhdCBpcyBiZWluZyBsZWFrZWQgKGlmIGFueXRoaW5nKS5cblxuSSdsbCB1c2UgYGdyZXBwZXJgIHRvIGNvbmZpcm0gaG93IGBodl9ldm1jc192bXB0cmAgaXMgaW5pdGlhbGl6ZWQgdG8gYmUgY29tcGxldGVseSBzdXJlLiBPdmVyYWxsLCB0aGlzIHBhdGNoIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIGhhcmRlbmluZyBvZiB0aGUgbmVzdGVkIFZNWCBpbXBsZW1lbnRhdGlvbiwgYnkgcHJvcGVybHkgaGFuZGxpbmcgaW52YWxpZCBwb2ludGVyIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTIzLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjA2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6MzQ6MDIuMjgxMzY0ODkxWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDY3NjIyODc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh2X2V2bWNzX3ZtcHRyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvaHlwZXJ2Lmg9MjU9c3RhdGljIGlubGluZSBib29sIG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfdmFsaWQoc3RydWN0IHZjcHVfdm14ICp2bXgpXFxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaC0yNi17XFxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuaDoyNzpcXHRyZXR1cm4gZXZtcHRyX2lzX3ZhbGlkKHZteC1cXHUwMDNlbmVzdGVkLmh2X2V2bWNzX3ZtcHRyKTtcXG5hcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5oLTI4LX1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2Lmg9MzU9c3RhdGljIGlubGluZSBib29sIG5lc3RlZF92bXhfaXNfZXZtcHRyMTJfc2V0KHN0cnVjdCB2Y3B1X3ZteCAqdm14KVxcbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmgtMzYte1xcbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2Lmg6Mzc6XFx0cmV0dXJuIGV2bXB0cl9pc19zZXQodm14LVxcdTAwM2VuZXN0ZWQuaHZfZXZtY3Nfdm1wdHIpO1xcbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmgtMzgtfVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0yMzM9c3RhdGljIGlubGluZSB2b2lkIG5lc3RlZF9yZWxlYXNlX2V2bWNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjQwLVxcdHZteC1cXHUwMDNlbmVzdGVkLmh2X2V2bWNzID0gTlVMTDtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjI0MTpcXHR2bXgtXFx1MDAzZW5lc3RlZC5odl9ldm1jc192bXB0ciA9IEVWTVBUUl9JTlZBTElEO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjQyLVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0yNTE9c3RhdGljIGJvb2wgbmVzdGVkX2V2bWNzX2hhbmRsZV92bWNsZWFyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3Qgdm1wdHIpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTI2OC1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjI2OTpcXHRpZiAobmVzdGVkX3ZteF9ldm1jcyh2bXgpIFxcdTAwMjZcXHUwMDI2IHZtcHRyID09IHZteC1cXHUwMDNlbmVzdGVkLmh2X2V2bWNzX3ZtcHRyKVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjcwLVxcdFxcdG5lc3RlZF9yZWxlYXNlX2V2bWNzKHZjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0yMTg0PXN0YXRpYyBlbnVtIG5lc3RlZF9ldm1wdHJsZF9zdGF0dXMgbmVzdGVkX3ZteF9oYW5kbGVfZW5saWdodGVuZWRfdm1wdHJsZChcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjIwMC1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjIyMDE6XFx0aWYgKHVubGlrZWx5KGV2bWNzX2dwYSAhPSB2bXgtXFx1MDAzZW5lc3RlZC5odl9ldm1jc192bXB0cikpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTIyMDItXFx0XFx0dm14LVxcdTAwM2VuZXN0ZWQuY3VycmVudF92bXB0ciA9IElOVkFMSURfR1BBO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yMjM5LVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MjI0MDpcXHRcXHR2bXgtXFx1MDAzZW5lc3RlZC5odl9ldm1jc192bXB0ciA9IGV2bWNzX2dwYTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTIyNDEtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTM0MTM9c3RhdGljIGJvb2wgbmVzdGVkX2dldF9ldm1jc19wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzQyMi1cXHRpZiAoZ3Vlc3RfY3B1X2NhcF9oYXNfZXZtY3ModmNwdSkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjM0MjM6XFx0ICAgIHZteC1cXHUwMDNlbmVzdGVkLmh2X2V2bWNzX3ZtcHRyID09IEVWTVBUUl9NQVBfUEVORElORykge1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzQyNC1cXHRcXHRlbnVtIG5lc3RlZF9ldm1wdHJsZF9zdGF0dXMgZXZtcHRybGRfc3RhdHVzID1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTk0NT1zdGF0aWMgaW50IGhhbmRsZV92bXB0cnN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTk2MS1cXHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh0b192bXgodmNwdSkpKVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTk2MjpcXHRcXHRjdXJyZW50X3ZtcHRyID0gdG9fdm14KHZjcHUpLVxcdTAwM2VuZXN0ZWQuaHZfZXZtY3Nfdm1wdHI7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01OTYzLVxcdGVsc2VcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9Njc1Mj1zdGF0aWMgaW50IHZteF9nZXRfbmVzdGVkX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjc4My1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjY3ODQ6XFx0XFx0XFx0LyogJ2h2X2V2bWNzX3ZtcHRyJyBjYW4gYWxzbyBiZSBFVk1QVFJfTUFQX1BFTkRJTkcgaGVyZSAqL1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjc4NS1cXHRcXHRcXHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl9zZXQodm14KSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NjkwNj1zdGF0aWMgaW50IHZteF9zZXRfbmVzdGVkX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzAxMC1cXHRcXHQgKi9cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjcwMTE6XFx0XFx0dm14LVxcdTAwM2VuZXN0ZWQuaHZfZXZtY3Nfdm1wdHIgPSBFVk1QVFJfTUFQX1BFTkRJTkc7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03MDEyLVxcdFxcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9HRVRfTkVTVEVEX1NUQVRFX1BBR0VTLCB2Y3B1KTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmg9Nzk9c3RhdGljIGlubGluZSBpbnQgdm14X2hhc192YWxpZF92bWNzMTIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaC04Mi1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oOjgzOlxcdC8qICdodl9ldm1jc192bXB0cicgY2FuIGFsc28gYmUgRVZNUFRSX01BUF9QRU5ESU5HIGhlcmUgKi9cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oLTg0LVxcdHJldHVybiB2bXgtXFx1MDAzZW5lc3RlZC5jdXJyZW50X3ZtcHRyICE9IC0xdWxsIHx8XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTQ5OTE9c3RhdGljIHZvaWQgX192bXhfdmNwdV9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTUwMDctI2lmZGVmIENPTkZJR19LVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo1MDA4OlxcdHZteC1cXHUwMDNlbmVzdGVkLmh2X2V2bWNzX3ZtcHRyID0gRVZNUFRSX0lOVkFMSUQ7XFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy01MDA5LSNlbmRpZlxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguaD03Mz1zdHJ1Y3QgbmVzdGVkX3ZteCB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5oLTE5OS0jaWZkZWYgQ09ORklHX0tWTV9IWVBFUlZcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5oOjIwMDpcXHRncGFfdCBodl9ldm1jc192bXB0cjtcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5oLTIwMS1cXHRzdHJ1Y3Qga3ZtX2hvc3RfbWFwIGh2X2V2bWNzX21hcDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6MzQ6MDUuNzQ4OTkzMzZaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA2MjA0MDM2NjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgaGFuZGxlX3ZtcHRyc3RgIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggbW9kaWZ5aW5nIGBoYW5kbGVfdm1wdHJzdGAuIFRoZSBrZXkgY2hhbmdlIGlzIHRoYXQgaXQgbm93IHJldHVybnMgYGh2X2V2bWNzX3ZtcHRyYCBpbnN0ZWFkIG9mIGp1c3QgMS4gUHJldmlvdXNseSwgcmV0dXJuaW5nIDEgd291bGQgZWZmZWN0aXZlbHkgc2tpcCB0aGUgaW5zdHJ1Y3Rpb24gd2l0aG91dCB3cml0aW5nIGFueXRoaW5nIHRvIG1lbW9yeS4gTm93LCBpdCdzIHdyaXRpbmcgc29tZXRoaW5nIOKAkyBhIGBncGFfdGAgc3BlY2lmaWNhbGx5LiBMZXQncyB1bnBhY2sgdGhpcy5cblxuYGh2X2V2bWNzX3ZtcHRyYCBpdHNlbGYgaXMgaW5pdGlhbGl6ZWQgdG8gYEVWTVBUUl9JTlZBTElEYCBkdXJpbmcgYSB2Q1BVIHJlc2V0LiBUaGVuLCBpdCdzIHVwZGF0ZWQgdG8gYGV2bWNzX2dwYWAsIHdoaWNoIGlzIGEgcGh5c2ljYWwgYWRkcmVzcyBwcm92aWRlZCBieSB0aGUgZ3Vlc3Qgd2hlbiB0aGUgZ3Vlc3QgZXhlY3V0ZXMgYW4gZW5saWdodGVuZWQgYFZNUFRSTERgIGluc3RydWN0aW9uLiBTbywgaXQncyBlc3NlbnRpYWxseSBqdXN0IGEgNjQtYml0IGludGVnZXIsIGEgZ3Vlc3QtcHJvdmlkZWQgcGh5c2ljYWwgYWRkcmVzcyB0aGF0IHdlJ3JlIHN0b3JpbmcuIENydWNpYWxseSwgaXQncyAqbm90KiBzb21lIHVuaW5pdGlhbGl6ZWQga2VybmVsIHN0cnVjdHVyZSBiZWluZyBibGluZGx5IGNvcGllZC4gVGhhdCdzIGdvb2QuXG5cblRoZXJlZm9yZSwgd2hlbiBgaGFuZGxlX3ZtcHRyc3RgIHdyaXRlcyB0aGlzIHZhbHVlIHRvIGd1ZXN0IG1lbW9yeSB1c2luZyBga3ZtX3dyaXRlX2d1ZXN0X3ZpcnRfc3lzdGVtYCBvciBhIHNpbWlsYXIgZnVuY3Rpb24sIGl0J3Mgbm90IGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBJdCdzIHNpbXBseSB3cml0aW5nIHRoZSA2NC1iaXQgaW50ZWdlciB0aGF0IHRoZSBndWVzdCAqaXRzZWxmKiBwcmV2aW91c2x5IHByb3ZpZGVkLiBUaGlzIHNlZW1zIHNhZmUgZnJvbSBhIG1lbW9yeSBsZWFrIHBlcnNwZWN0aXZlLCBhcyB0aGUgXCJzZWNyZXRcIiAodGhlIHBoeXNpY2FsIGFkZHJlc3MpIGNvbWVzIGZyb20gdGhlIGd1ZXN0J3MgaW5wdXQuIFRoZSB2dWxuZXJhYmlsaXR5IChpZiBhbnkpIGlzIGluIHRoZSBndWVzdCdzIGNvZGUuXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byBgaGFuZGxlX3ZtcHRyc3RgIGl0c2VsZiB3aXRoaW4gYGFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNgIGFuZCBtYWtlIHN1cmUgbXkgYXNzdW1wdGlvbnMgYXJlIHZhbGlkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDI1LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE3OjM1OjUxLjk1MzAzNDA3NloiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTY5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1OTQ0LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1OTQ0OlxcdC8qIEVtdWxhdGUgdGhlIFZNUFRSU1QgaW5zdHJ1Y3Rpb24gKi9cXG41OTQ1OlxcdHN0YXRpYyBpbnQgaGFuZGxlX3ZtcHRyc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbjU5NDY6XFx0e1xcbjU5NDc6XFx0XFx0dW5zaWduZWQgbG9uZyBleGl0X3F1YWwgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcXG41OTQ4OlxcdFxcdHUzMiBpbnN0cl9pbmZvID0gdm1jc19yZWFkMzIoVk1YX0lOU1RSVUNUSU9OX0lORk8pO1xcbjU5NDk6XFx0XFx0Z3BhX3QgY3VycmVudF92bXB0cjtcXG41OTUwOlxcdFxcdHN0cnVjdCB4ODZfZXhjZXB0aW9uIGU7XFxuNTk1MTpcXHRcXHRndmFfdCBndmE7XFxuNTk1MjpcXHRcXHRpbnQgcjtcXG41OTUzOlxcdFxcbjU5NTQ6XFx0XFx0aWYgKCFuZXN0ZWRfdm14X2NoZWNrX3Blcm1pc3Npb24odmNwdSkpXFxuNTk1NTpcXHRcXHRcXHRyZXR1cm4gMTtcXG41OTU2OlxcdFxcbjU5NTc6XFx0XFx0LypcXG41OTU4OlxcdFxcdCAqIEh5cGVyLVYgVExGUyBkb2VzIG5vdCBzcGVjaWZ5IHRoZSBiZWhhdmlvciBvZiBWTVBUUlNUIHdoZW4gZVZNQ1MgaXMgdXNlZFxcbjU5NTk6XFx0XFx0ICogYnV0IGdlbnVpbmUgSHlwZXItViBzZWVtcyB0byBiZSByZXR1cm5pbmcgZVZNQ1MgR1BBLlxcbjU5NjA6XFx0XFx0ICovXFxuNTk2MTpcXHRcXHRpZiAobmVzdGVkX3ZteF9pc19ldm1wdHIxMl92YWxpZCh0b192bXgodmNwdSkpKVxcbjU5NjI6XFx0XFx0XFx0Y3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS1cXHUwMDNlbmVzdGVkLmh2X2V2bWNzX3ZtcHRyO1xcbjU5NjM6XFx0XFx0ZWxzZVxcbjU5NjQ6XFx0XFx0XFx0Y3VycmVudF92bXB0ciA9IHRvX3ZteCh2Y3B1KS1cXHUwMDNlbmVzdGVkLmN1cnJlbnRfdm1wdHI7XFxuNTk2NTpcXHRcXG41OTY2OlxcdFxcdGlmIChnZXRfdm14X21lbV9hZGRyZXNzKHZjcHUsIGV4aXRfcXVhbCwgaW5zdHJfaW5mbyxcXG41OTY3OlxcdFxcdFxcdFxcdFxcdHRydWUsIHNpemVvZihncGFfdCksIFxcdTAwMjZndmEpKVxcbjU5Njg6XFx0XFx0XFx0cmV0dXJuIDE7XFxuNTk2OTpcXHRcXHQvKiAqX3N5c3RlbSBvaywgbmVzdGVkX3ZteF9jaGVja19wZXJtaXNzaW9uIGhhcyB2ZXJpZmllZCBjcGw9MCAqL1xcbjU5NzA6XFx0XFx0ciA9IGt2bV93cml0ZV9ndWVzdF92aXJ0X3N5c3RlbSh2Y3B1LCBndmEsICh2b2lkICopXFx1MDAyNmN1cnJlbnRfdm1wdHIsXFxuNTk3MTpcXHRcXHRcXHRcXHRcXHRcXHRzaXplb2YoZ3BhX3QpLCBcXHUwMDI2ZSk7XFxuNTk3MjpcXHRcXHRpZiAociAhPSBYODZFTVVMX0NPTlRJTlVFKVxcbjU5NzM6XFx0XFx0XFx0cmV0dXJuIGt2bV9oYW5kbGVfbWVtb3J5X2ZhaWx1cmUodmNwdSwgciwgXFx1MDAyNmUpO1xcbjU5NzQ6XFx0XFxuNTk3NTpcXHRcXHRyZXR1cm4gbmVzdGVkX3ZteF9zdWNjZWVkKHZjcHUpO1xcbjU5NzY6XFx0fVxcbjU5Nzc6XFx0XFxuNTk3ODpcXHQvKiBFbXVsYXRlIHRoZSBJTlZFUFQgaW5zdHJ1Y3Rpb24gKi9cXG41OTc5OlxcdHN0YXRpYyBpbnQgaGFuZGxlX2ludmVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuNTk4MDpcXHR7XFxuNTk4MTpcXHRcXHRzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTtcXG41OTgyOlxcdFxcdHUzMiB2bXhfaW5zdHJ1Y3Rpb25faW5mbywgdHlwZXM7XFxuNTk4MzpcXHRcXHR1bnNpZ25lZCBsb25nIHR5cGUsIHJvb3RzX3RvX2ZyZWU7XFxuNTk4NDpcXHRcXHRzdHJ1Y3Qga3ZtX21tdSAqbW11O1xcbjU5ODU6XFx0XFx0Z3ZhX3QgZ3ZhO1xcbjU5ODY6XFx0XFx0c3RydWN0IHg4Nl9leGNlcHRpb24gZTtcXG41OTg3OlxcdFxcdHN0cnVjdCB7XFxuNTk4ODpcXHRcXHRcXHR1NjQgZXB0cCwgZ3BhO1xcbjU5ODk6XFx0XFx0fSBvcGVyYW5kO1xcbjU5OTA6XFx0XFx0aW50IGksIHIsIGdwcl9pbmRleDtcXG41OTkxOlxcdFxcbjU5OTI6XFx0XFx0aWYgKCEodm14LVxcdTAwM2VuZXN0ZWQubXNycy5zZWNvbmRhcnlfY3Rsc19oaWdoIFxcdTAwMjZcXG41OTkzOlxcdFxcdCAgICAgIFNFQ09OREFSWV9FWEVDX0VOQUJMRV9FUFQpIHx8XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE3OjM1OjUxLjk1MzY1NDk4NloiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTMxMTQxNDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBOZXN0ZWQgVk1YIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIGZyb20gYSBtZW1vcnkgc2FmZXR5IHBlcnNwZWN0aXZlLiBJJ3ZlIHJldmlld2VkIHRoaXMgS1ZNIHBhdGNoLCBhbmQgaGVyZSdzIG15IHRha2U6IHRoZSBrZXkgbW9kaWZpY2F0aW9uIGlzIHJlbGF0ZWQgdG8gdGhlIFZNUFRSTEQgYW5kIFZNUFRSU1QgaW5zdHJ1Y3Rpb25zIHdpdGhpbiB0aGUgbmVzdGVkIFZNWCBlbXVsYXRpb24sIHNwZWNpZmljYWxseSB3aGVuIGVWTUNTIGlzIGFjdGl2ZS5cblxuRmlyc3QsIEkgc2VlIHRoYXQgYGN1cnJlbnRfdm1wdHJgIOKAkyB3aGljaCBpcyBhIGBncGFfdGAsIGEgc3RyYWlnaHQgNjQtYml0IHVuc2lnbmVkIGludGVnZXIgcmVwcmVzZW50aW5nIGEgR3Vlc3QgUGh5c2ljYWwgQWRkcmVzcyDigJMgaXMgYmVpbmcgd3JpdHRlbiB0byBndWVzdCBtZW1vcnkgdXNpbmcgYGt2bV93cml0ZV9ndWVzdF92aXJ0X3N5c3RlbWAuIENyaXRpY2FsbHksIHRoaXMgYGdwYV90YCBpcyAqZnVsbHkqIGluaXRpYWxpemVkIGJlZm9yZSB0aGUgd3JpdGUgYW5kIGl0IGhhcyBubyBpbnRlcm5hbCBwYWRkaW5nLiBUaGlzIG1lYW5zIHdlJ3JlIG5vdCBkZWFsaW5nIHdpdGggYSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGNodW5rIG9mIG1lbW9yeSBiZWluZyBsZWFrZWQuIFRoZSBgaWYvZWxzZWAgYmxvY2sgY2xlYXJseSBoYW5kbGVzIHRoZSBpbml0aWFsaXphdGlvbi4gTm8gbWVtb3J5IGxlYWtzIGhlcmUuXG5cblNlY29uZCwgdGhlIHBhdGNoIG1vZGlmaWVzIGBoYW5kbGVfdm1wdHJsZGAgdG8gcXVldWUgYSAjVUQgZXhjZXB0aW9uIGluc3RlYWQgb2YganVzdCByZXR1cm5pbmcuIFRoaXMgY2hhbmdlIGluIGNvbnRyb2wgZmxvdyBkb2Vzbid0IHRvdWNoIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhdCBhbGwsIGFuZCB0aGF0IHBhcnQgaXMgc2ltcGxlIGVub3VnaC5cblxuVGhlIHJlbWFpbmRlciBvZiB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgc29sZWx5IGZvY3VzZWQgb24gc2VsZnRlc3RzLiBGcm9tIHRoZSBkZXNjcmlwdGlvbiwgSSBkb24ndCBzZWUgYW55dGhpbmcgc3VzcGljaW91cyB0aGVyZSwgZWl0aGVyLlxuXG5JbiBlc3NlbmNlLCB0aGlzIHBhdGNoIGludHJvZHVjZXMgbm8gKm5ldyogYXZlbnVlcyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBXZSdyZSBqdXN0IGFsdGVyaW5nIHRoZSBiZWhhdmlvciBvZiB0aG9zZSB0d28gVk1YIGluc3RydWN0aW9ucy4gU3RhbmRhcmQgS0FTQU4gc2hvdWxkIGhhbmRsZSBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgaW4gdGhlIG1vZGlmaWVkIGNvZGUuXG5cblRoZXJlZm9yZSwgZ2l2ZW4gbXkgdW5kZXJzdGFuZGluZywgSSdtIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYC4gVGhpcyBsb29rcyBzYWZlIGZyb20gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcGVyc3BlY3RpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MjAsIk91dHB1dFRva2VucyI6MjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6MzU6NTkuODg0ODAwMjc5WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyNzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0ncyBuZXN0ZWQgVk1YIGVtdWxhdGlvbiBmb3IgdGhlIFZNUFRSTEQgYW5kIFZNUFRSU1QgaW5zdHJ1Y3Rpb25zIHdoZW4gRW5saWdodGVuZWQgVk1DUyAoZVZNQ1MpIGlzIHVzZWQuIEluIGBoYW5kbGVfdm1wdHJzdGAsIGl0IGNoYW5nZXMgdGhlIGNvZGUgdG8gd3JpdGUgdGhlIGBodl9ldm1jc192bXB0cmAgKGEgNjQtYml0IGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MpIHRvIGd1ZXN0IG1lbW9yeSBpbnN0ZWFkIG9mIHNraXBwaW5nIHRoZSBpbnN0cnVjdGlvbi4gU2luY2UgYGh2X2V2bWNzX3ZtcHRyYCBpcyBhIGZ1bGx5IGluaXRpYWxpemVkIDY0LWJpdCBpbnRlZ2VyIChgZ3BhX3RgKSB3aXRob3V0IGFueSBwYWRkaW5nLCB3cml0aW5nIGl0IHRvIGd1ZXN0IG1lbW9yeSBkb2VzIG5vdCBsZWFrIGFueSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIFRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGBoYW5kbGVfdm1wdHJsZGAgdG8gcXVldWUgYSAjVUQgZXhjZXB0aW9uLCB3aGljaCBvbmx5IGFmZmVjdHMgY29udHJvbCBmbG93IGFuZCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBjb21wbGV4IHN0cnVjdHVyZXMsIG9yIHBhZGRpbmcgaW50cm9kdWNlZCB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBidWdzIGluIHRoaXMgYXJlYS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0ncyBuZXN0ZWQgVk1YIGVtdWxhdGlvbiBmb3IgdGhlIFZNUFRSTEQgYW5kIFZNUFRSU1QgaW5zdHJ1Y3Rpb25zIHdoZW4gRW5saWdodGVuZWQgVk1DUyAoZVZNQ1MpIGlzIHVzZWQuIEluIGBoYW5kbGVfdm1wdHJzdGAsIGl0IGNoYW5nZXMgdGhlIGNvZGUgdG8gd3JpdGUgdGhlIGBodl9ldm1jc192bXB0cmAgKGEgNjQtYml0IGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MpIHRvIGd1ZXN0IG1lbW9yeSBpbnN0ZWFkIG9mIHNraXBwaW5nIHRoZSBpbnN0cnVjdGlvbi4gU2luY2UgYGh2X2V2bWNzX3ZtcHRyYCBpcyBhIGZ1bGx5IGluaXRpYWxpemVkIDY0LWJpdCBpbnRlZ2VyIChgZ3BhX3RgKSB3aXRob3V0IGFueSBwYWRkaW5nLCB3cml0aW5nIGl0IHRvIGd1ZXN0IG1lbW9yeSBkb2VzIG5vdCBsZWFrIGFueSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIFRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGBoYW5kbGVfdm1wdHJsZGAgdG8gcXVldWUgYSAjVUQgZXhjZXB0aW9uLCB3aGljaCBvbmx5IGFmZmVjdHMgY29udHJvbCBmbG93IGFuZCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBjb21wbGV4IHN0cnVjdHVyZXMsIG9yIHBhZGRpbmcgaW50cm9kdWNlZCB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBidWdzIGluIHRoaXMgYXJlYS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowr4jsr[1] Phase: Succeeded StartedAt: 2026-08-14 17:36:12 +0000 UTC FinishedAt: 2026-08-14 17:36:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4jsr[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-14 17:36:12 +0000 UTC FinishedAt: 2026-08-14 17:36:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4jsr[2] Phase: Succeeded StartedAt: 2026-08-14 17:36:12 +0000 UTC FinishedAt: 2026-08-14 21:21:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4jsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"539f9105-9012-49c6-ab06-a2240a458a57","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-14 17:36:12 +0000 UTC FinishedAt: 2026-08-14 21:21:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"539f9105-9012-49c6-ab06-a2240a458a57","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowr4jsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"539f9105-9012-49c6-ab06-a2240a458a57","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-14 17:36:12 +0000 UTC FinishedAt: 2026-08-14 17:36:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4jsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"539f9105-9012-49c6-ab06-a2240a458a57","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-14 17:36:12 +0000 UTC FinishedAt: 2026-08-14 17:36:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflowr4jsr/series-workflowr4jsr-convert-artifact-2613314248/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr4jsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"539f9105-9012-49c6-ab06-a2240a458a57","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-14 17:36:22 +0000 UTC FinishedAt: 2026-08-14 17:53:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4jsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"539f9105-9012-49c6-ab06-a2240a458a57","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-14 17:36:22 +0000 UTC FinishedAt: 2026-08-14 17:53:14 +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:*873b56d3-3d68-45aa-adb3-6c8e20207d5b,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-workflowr4jsr/series-workflowr4jsr-convert-artifact-2613314248/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": "e5d571a9-4428-4bdc-975e-bb042ce76545", "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-workflowr4jsr/series-workflowr4jsr-build-action-4037144382/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr4jsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"539f9105-9012-49c6-ab06-a2240a458a57","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-14 17:36:22 +0000 UTC FinishedAt: 2026-08-14 17:53:04 +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:*873b56d3-3d68-45aa-adb3-6c8e20207d5b,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-workflowr4jsr/series-workflowr4jsr-convert-artifact-2613314248/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": "e5d571a9-4428-4bdc-975e-bb042ce76545", "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-workflowr4jsr/series-workflowr4jsr-build-action-4037144382/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr4jsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"539f9105-9012-49c6-ab06-a2240a458a57","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-14 17:53:14 +0000 UTC FinishedAt: 2026-08-14 17:53:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4jsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"539f9105-9012-49c6-ab06-a2240a458a57","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-14 17:53:14 +0000 UTC FinishedAt: 2026-08-14 17:53:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4jsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"539f9105-9012-49c6-ab06-a2240a458a57","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-14 17:53:14 +0000 UTC FinishedAt: 2026-08-14 17:53:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4jsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"539f9105-9012-49c6-ab06-a2240a458a57","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-14 17:53:14 +0000 UTC FinishedAt: 2026-08-14 17:53:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"539f9105-9012-49c6-ab06-a2240a458a57","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflowr4jsr/series-workflowr4jsr-convert-artifact-2358769071/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr4jsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"539f9105-9012-49c6-ab06-a2240a458a57","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-14 17:53:25 +0000 UTC FinishedAt: 2026-08-14 17:55:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4jsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"539f9105-9012-49c6-ab06-a2240a458a57","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-14 17:53:25 +0000 UTC FinishedAt: 2026-08-14 17:55:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e5d571a9-4428-4bdc-975e-bb042ce76545,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-workflowr4jsr/series-workflowr4jsr-build-action-4037144382/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-workflowr4jsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"539f9105-9012-49c6-ab06-a2240a458a57","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-14 17:55:41 +0000 UTC FinishedAt: 2026-08-14 17:55:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4jsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"539f9105-9012-49c6-ab06-a2240a458a57","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-14 17:55:41 +0000 UTC FinishedAt: 2026-08-14 17:55:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4jsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"539f9105-9012-49c6-ab06-a2240a458a57","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-14 17:55:41 +0000 UTC FinishedAt: 2026-08-14 18:16:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4jsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"539f9105-9012-49c6-ab06-a2240a458a57","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-14 17:55:41 +0000 UTC FinishedAt: 2026-08-14 18:16:46 +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:*873b56d3-3d68-45aa-adb3-6c8e20207d5b,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-workflowr4jsr/series-workflowr4jsr-convert-artifact-2358769071/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": "6caf6dbc-77bf-4858-8f22-f98487fc43a3", "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-workflowr4jsr/series-workflowr4jsr-build-action-2796011843/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr4jsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"539f9105-9012-49c6-ab06-a2240a458a57","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-14 17:55:41 +0000 UTC FinishedAt: 2026-08-14 18:16:24 +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:*873b56d3-3d68-45aa-adb3-6c8e20207d5b,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-workflowr4jsr/series-workflowr4jsr-convert-artifact-2358769071/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": "6caf6dbc-77bf-4858-8f22-f98487fc43a3", "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-workflowr4jsr/series-workflowr4jsr-build-action-2796011843/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr4jsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"539f9105-9012-49c6-ab06-a2240a458a57","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-14 18:16:46 +0000 UTC FinishedAt: 2026-08-14 18:16:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4jsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"539f9105-9012-49c6-ab06-a2240a458a57","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-14 18:16:46 +0000 UTC FinishedAt: 2026-08-14 18:16:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4jsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"539f9105-9012-49c6-ab06-a2240a458a57","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-14 18:16:46 +0000 UTC FinishedAt: 2026-08-14 18:18:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4jsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"539f9105-9012-49c6-ab06-a2240a458a57","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-14 18:16:46 +0000 UTC FinishedAt: 2026-08-14 18:18:41 +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:*6caf6dbc-77bf-4858-8f22-f98487fc43a3,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-workflowr4jsr/series-workflowr4jsr-build-action-2796011843/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-workflowr4jsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"539f9105-9012-49c6-ab06-a2240a458a57","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-14 18:18:51 +0000 UTC FinishedAt: 2026-08-14 21:21:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4jsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"539f9105-9012-49c6-ab06-a2240a458a57","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-14 18:18:51 +0000 UTC FinishedAt: 2026-08-14 21:21:39 +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":["handle_vmptrld","handle_vmptrst"],"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:*e5d571a9-4428-4bdc-975e-bb042ce76545,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6caf6dbc-77bf-4858-8f22-f98487fc43a3,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-workflowr4jsr/series-workflowr4jsr-build-action-4037144382/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-workflowr4jsr/series-workflowr4jsr-build-action-2796011843/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowr4jsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"539f9105-9012-49c6-ab06-a2240a458a57","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-14 18:18:51 +0000 UTC FinishedAt: 2026-08-14 18:19:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4jsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"539f9105-9012-49c6-ab06-a2240a458a57","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-14 18:18:51 +0000 UTC FinishedAt: 2026-08-14 18:19:09 +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":["handle_vmptrld","handle_vmptrst"],"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-workflowr4jsr/series-workflowr4jsr-convert-artifact-511016552/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr4jsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"539f9105-9012-49c6-ab06-a2240a458a57","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-14 18:18:51 +0000 UTC FinishedAt: 2026-08-14 18:18:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4jsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"539f9105-9012-49c6-ab06-a2240a458a57","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-14 18:18:51 +0000 UTC FinishedAt: 2026-08-14 18:18:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4jsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"539f9105-9012-49c6-ab06-a2240a458a57","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-14 18:18:51 +0000 UTC FinishedAt: 2026-08-14 18:18:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4jsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"539f9105-9012-49c6-ab06-a2240a458a57","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-14 18:19:16 +0000 UTC FinishedAt: 2026-08-14 21:21:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr4jsr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["handle_vmptrld","handle_vmptrst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_HYPERV"],"series_id":"539f9105-9012-49c6-ab06-a2240a458a57","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-14 18:19:16 +0000 UTC FinishedAt: 2026-08-14 21:21:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e5d571a9-4428-4bdc-975e-bb042ce76545,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6caf6dbc-77bf-4858-8f22-f98487fc43a3,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-workflowr4jsr/series-workflowr4jsr-build-action-4037144382/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-workflowr4jsr/series-workflowr4jsr-build-action-2796011843/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-workflowr4jsr/series-workflowr4jsr-convert-artifact-511016552/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,}