Name: series-workflowqd5wd Phase: Succeeded StartedAt: 2026-08-03 16:52:46 +0000 UTC FinishedAt: 2026-08-03 17:55:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqd5wd[0] Phase: Succeeded StartedAt: 2026-08-03 16:52:46 +0000 UTC FinishedAt: 2026-08-03 17:10:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqd5wd[0].run-triage Phase: Succeeded StartedAt: 2026-08-03 16:52:46 +0000 UTC FinishedAt: 2026-08-03 17:10:42 +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": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "d4c21645-b951-4982-b8f3-ed4eafef838f" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_arch_vcpu_create", "kvm_arch_vcpu_ioctl_run", "kvm_arch_vcpu_ioctl", "kvm_arch_vcpu_unlocked_ioctl", "kvm_s390_vm_set_migration", "kvm_arch_commit_memory_region", "kvm_s390_pv_destroy_cpu", "kvm_s390_pv_create_cpu", "handle_rrbe", "handle_essa", "kvm_s390_keyop", "dat_reset_reference_bit" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfY3JlYXRlJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfaW9jdGwmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bCYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1JiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3B2X2NyZWF0ZV9jcHUmIzM0OywKICAgICYjMzQ7aGFuZGxlX3JyYmUmIzM0OywKICAgICYjMzQ7aGFuZGxlX2Vzc2EmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfa2V5b3AmIzM0OywKICAgICYjMzQ7ZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBzMzkwIEtWTSBpbXBsZW1lbnRhdGlvbiwgaW5jbHVkaW5nIGZpeGluZyByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHZDUFUgY3JlYXRpb24vaW5pdGlhbGl6YXRpb24sIGZpeGluZyBtZW1vcnkgbGVha3MsIGFuZCB1cGRhdGluZyBsb2NraW5nIG1lY2hhbmlzbXMgKHVzaW5nIHNsb3RzX2FyY2hfbG9jaykuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIEtWTSBpb2N0bHMgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LCBtYWtpbmcgdGhlbSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTQ5NzA2NDdjNGIzYzkyNDU2ZGUzY2RmMDAzNmZmODdiZGRiMjNjNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMgMTc6MDk6NDggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggZWFhMzRjNWJkM2MxMS4uZWRmNzViNmFkMjBjZSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTQ0MCw2ICYjNDM7NDQwLDcgQEAgc3RydWN0IGt2bV92Y3B1X2FyY2gge1xuIFx0Ym9vbCBza2V5X2VuYWJsZWQ7XG4gXHQvKiBJbmRpY2F0b3IgaWYgdGhlIGFjY2VzcyByZWdpc3RlcnMgaGF2ZSBiZWVuIGxvYWRlZCBmcm9tIGd1ZXN0ICovXG4gXHRib29sIGFjcnNfbG9hZGVkO1xuJiM0MztcdGJvb2wgaW5pdGlhbGl6ZWQ7XG4gXHRzdHJ1Y3Qga3ZtX3MzOTBfcHZfdmNwdSBwdjtcbiBcdHVuaW9uIGRpYWczMThfaW5mbyBkaWFnMzE4X2luZm87XG4gXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYztcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2RhdC5jIGIvYXJjaC9zMzkwL2t2bS9kYXQuY1xuaW5kZXggZWQ0MjU5ZDE3NjI5NS4uM2YyZDZlODkwMmQ3NiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vZGF0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vZGF0LmNcbkBAIC03NTUsMTMgJiM0Mzs3NTUsMTUgQEAgaW50IGRhdF9jb25kX3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2ZcbiBcdHJldHVybiByYztcbiB9XG4gXG4taW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuKVxuJiM0MztpbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4sIHVuaW9uIHNrZXkgKnNrZXkpXG4ge1xuIFx0dW5pb24gcGdzdGUgcGdzdGUsIG9sZDtcbiBcdHVuaW9uIGNyc3RlICpjcnN0ZXA7XG4gXHR1bmlvbiBwdGUgKnB0ZXA7XG4gXHRpbnQgcmM7XG4gXG4mIzQzO1x0c2tleS1cdTAwM2Vza2V5ID0gMDtcbiYjNDM7XG4gXHRyYyA9IGRhdF9lbnRyeV93YWxrKE5VTEwsIGdmbiwgYXNjZSwgREFUX1dBTEtfQU5ZLCBUQUJMRV9UWVBFX1BBR0VfVEFCTEUsIFx1MDAyNmNyc3RlcCwgXHUwMDI2cHRlcCk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiByYztcbkBAIC03NzEsMjEgJiM0Mzs3NzMsMjMgQEAgaW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuKVxuIFxuIFx0XHRpZiAoIWNyc3RlLmguZmMgfHwgIWNyc3RlLnMuZmMxLnByKVxuIFx0XHRcdHJldHVybiAwO1xuLVx0XHRyZXR1cm4gcGFnZV9yZXNldF9yZWZlcmVuY2VkKGxhcmdlX2Nyc3RlX3RvX3BoeXMoKmNyc3RlcCwgZ2ZuKSk7XG4mIzQzO1x0XHRza2V5LVx1MDAzZXNrZXkgPSBwYWdlX3Jlc2V0X3JlZmVyZW5jZWQobGFyZ2VfY3JzdGVfdG9fcGh5cygqY3JzdGVwLCBnZm4pKSBcdTAwM2NcdTAwM2MgMTtcbiYjNDM7XHRcdHJldHVybiAwO1xuIFx0fVxuIFx0b2xkID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7XG4gXHRwZ3N0ZSA9IG9sZDtcbiBcbiBcdGlmICghcHRlcC1cdTAwM2VoLmkpIHtcbi1cdFx0cmMgPSBwYWdlX3Jlc2V0X3JlZmVyZW5jZWQocHRlX29yaWdpbigqcHRlcCkpO1xuLVx0XHRwZ3N0ZS5ociA9IHJjIFx1MDAzZVx1MDAzZSAxO1xuJiM0MztcdFx0c2tleS1cdTAwM2Vza2V5ID0gcGFnZV9yZXNldF9yZWZlcmVuY2VkKHB0ZV9vcmlnaW4oKnB0ZXApKSBcdTAwM2NcdTAwM2MgMTtcbiYjNDM7XHRcdHBnc3RlLmhyID0gc2tleS1cdTAwM2VyO1xuIFx0fVxuLVx0cmMgfD0gKHBnc3RlLmdyIFx1MDAzY1x1MDAzYyAxKSB8IHBnc3RlLmdjO1xuJiM0MztcdHNrZXktXHUwMDNlciB8PSBwZ3N0ZS5ncjtcbiYjNDM7XHRza2V5LVx1MDAzZWMgfD0gcGdzdGUuZ2M7XG4gXHRwZ3N0ZS5nciA9IDA7XG4gXG4gXHRkYXRfdXBkYXRlX3B0ZXBfc2Qob2xkLCBwZ3N0ZSwgcHRlcCk7XG4gXHRwZ3N0ZV9zZXRfdW5sb2NrKHB0ZXAsIHBnc3RlKTtcbi1cdHJldHVybiByYztcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGxvbmcgZGF0X3Jlc2V0X3NrZXlzX3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxuQEAgLTg0Niw2ICYjNDM7ODUwLDcgQEAgc3RhdGljIGxvbmcgX2RhdF9zbG90X3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxcbiBcdHN0cnVjdCBzbG90X3ByaXYgKnAgPSB3YWxrLVx1MDAzZXByaXY7XG4gXHR1bmlvbiBjcnN0ZSBkdW1teSA9IHsgLnZhbCA9IHAtXHUwMDNldG9rZW4gfTtcbiBcdHVuaW9uIHB0ZSBuZXdfcHRlLCBwdGUgPSBSRUFEX09OQ0UoKnB0ZXApO1xuJiM0MztcdHVuaW9uIHBnc3RlIHBnc3RlO1xuIFxuIFx0bmV3X3B0ZSA9IF9QVEVfVE9LKGR1bW15LnRvay50eXBlLCBkdW1teS50b2sucGFyKTtcbiBcbkBAIC04NTMsNyAmIzQzOzg1OCwxMSBAQCBzdGF0aWMgbG9uZyBfZGF0X3Nsb3RfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbFxuIFx0aWYgKHB0ZS52YWwgPT0gbmV3X3B0ZS52YWwpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0ZGF0X3B0ZXBfeGNoZyhwdGVwLCBuZXdfcHRlLCBnZm4sIHdhbGstXHUwMDNlYXNjZSwgZmFsc2UpO1xuJiM0MztcdHBnc3RlID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7XG4mIzQzO1x0cGdzdGUgPSBfX2RhdF9wdGVwX3hjaGcocHRlcCwgcGdzdGUsIG5ld19wdGUsIGdmbiwgd2Fsay1cdTAwM2Vhc2NlLCBmYWxzZSk7XG4mIzQzO1x0cGdzdGUuY21tYV9kID0gMDtcbiYjNDM7XHRwZ3N0ZV9zZXRfdW5sb2NrKHB0ZXAsIHBnc3RlKTtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9kYXQuaCBiL2FyY2gvczM5MC9rdm0vZGF0LmhcbmluZGV4IGZhZDYwNTMwNWUwNWMuLjE0MWVlN2I5ZjAxOTEgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2RhdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2RhdC5oXG5AQCAtNTM3LDcgJiM0Mzs1MzcsNyBAQCBpbnQgZGF0X3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgdW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZlxuIFx0XHRcdHVuaW9uIHNrZXkgc2tleSwgYm9vbCBucSk7XG4gaW50IGRhdF9jb25kX3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLFxuIFx0XHRcdCAgICAgdW5pb24gc2tleSBza2V5LCB1bmlvbiBza2V5ICpvbGRrZXksIGJvb2wgbnEsIGJvb2wgbXIsIGJvb2wgbWMpO1xuLWludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbik7XG4mIzQzO2ludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbiwgdW5pb24gc2tleSAqc2tleSk7XG4gbG9uZyBkYXRfcmVzZXRfc2tleXModW5pb24gYXNjZSBhc2NlLCBnZm5fdCBzdGFydCk7XG4gXG4gdW5zaWduZWQgbG9uZyBkYXRfZ2V0X3B0dmFsKHN0cnVjdCBwYWdlX3RhYmxlICp0YWJsZSwgc3RydWN0IHB0dmFsX3BhcmFtIHBhcmFtKTtcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYyBiL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jXG5pbmRleCBmZWU4MDA0N2JkOTRmLi4zY2M0NWY3ZjViMmQ3IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9mYXVsdGluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jXG5AQCAtOTEsOSAmIzQzOzkxLDkgQEAgaW50IGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgZ3Vlc3RfZmFcbiBcdFx0LyogQWNjZXNzIG91dHNpZGUgbWVtb3J5LCBhZGRyZXNzaW5nIGV4Y2VwdGlvbi4gKi9cbiBcdFx0aWYgKGlzX25vc2xvdF9wZm4oZi1cdTAwM2VwZm4pKVxuIFx0XHRcdHJldHVybiBQR01fQUREUkVTU0lORztcbi1cdFx0LyogU2lnbmFsIHBlbmRpbmc6IHRyeSBhZ2Fpbi4gKi9cbi1cdFx0aWYgKGYtXHUwMDNlcGZuID09IEtWTV9QRk5fRVJSX1NJR1BFTkRJTkcpXG4tXHRcdFx0cmV0dXJuIC1FQUdBSU47XG4mIzQzO1x0XHQvKiBGYXRhbCBzaWduYWwgcGVuZGluZzogYmFpbCBvdXQuICovXG4mIzQzO1x0XHRpZiAoaXNfc2lncGVuZGluZ19wZm4oZi1cdTAwM2VwZm4pKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlRSO1xuIFx0XHQvKiBDaGVjayBpZiBpdCYjMzk7cyByZWFkLW9ubHkgbWVtb3J5OyBkb24mIzM5O3QgdHJ5IHRvIGFjdHVhbGx5IGhhbmRsZSB0aGF0IGNhc2UuICovXG4gXHRcdGlmIChmLVx1MDAzZXBmbiA9PSBLVk1fUEZOX0VSUl9ST19GQVVMVClcbiBcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcbmluZGV4IDllM2U2YjBkNzJhZDYuLjZiM2Y5N2E3NTEzYjMgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXG5AQCAtNDUsMTMgJiM0Mzs0NSwxNiBAQCBzdGF0aWMgc3RydWN0IGt2bV9zMzkwX2dpYiAqZ2liO1xuIHN0YXRpYyBpbnQgc2NhX2V4dF9jYWxsX3BlbmRpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgKnNyY19pZClcbiB7XG4gXHRzdHJ1Y3QgZXNjYV9ibG9jayAqc2NhID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5zY2E7XG4tXHR1bmlvbiBlc2NhX3NpZ3BfY3RybCBzaWdwX2N0cmwgPSBzY2EtXHUwMDNlY3B1W3ZjcHUtXHUwMDNldmNwdV9pZF0uc2lncF9jdHJsO1xuJiM0MztcdHVuaW9uIGVzY2Ffc2lncF9jdHJsIHNpZ3BfY3RybDtcbiBcbiBcdGlmICgha3ZtX3MzOTBfdGVzdF9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX0VDQUxMX1BFTkQpKVxuIFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuIFxuIFx0QlVHX09OKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSk7XG4gXG4mIzQzO1x0c2lncF9jdHJsID0gc2NhLVx1MDAzZWNwdVt2Y3B1LVx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcbiBcdGlmIChzcmNfaWQpXG4gXHRcdCpzcmNfaWQgPSBzaWdwX2N0cmwuc2NuO1xuIFxuQEAgLTYwLDEzICYjNDM7NjMsMTYgQEAgc3RhdGljIGludCBzY2FfZXh0X2NhbGxfcGVuZGluZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCAqc3JjX2lkKVxuIFxuIHN0YXRpYyBpbnQgc2NhX2luamVjdF9leHRfY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzcmNfaWQpXG4ge1xuLVx0c3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guc2NhO1xuLVx0dW5pb24gZXNjYV9zaWdwX2N0cmwgKnNpZ3BfY3RybCA9IFx1MDAyNnNjYS1cdTAwM2VjcHVbdmNwdS1cdTAwM2V2Y3B1X2lkXS5zaWdwX2N0cmw7XG4gXHR1bmlvbiBlc2NhX3NpZ3BfY3RybCBvbGRfdmFsLCBuZXdfdmFsID0gey5zY24gPSBzcmNfaWQsIC5jID0gMX07XG4mIzQzO1x0c3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guc2NhO1xuJiM0MztcdHVuaW9uIGVzY2Ffc2lncF9jdHJsICpzaWdwX2N0cmw7XG4gXHRpbnQgZXhwZWN0LCByYztcbiBcbiBcdEJVR19PTigha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpO1xuJiM0MztcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4mIzQzO1x0c2lncF9jdHJsID0gXHUwMDI2c2NhLVx1MDAzZWNwdVt2Y3B1LVx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcbiBcdG9sZF92YWwgPSBSRUFEX09OQ0UoKnNpZ3BfY3RybCk7XG4gXHRvbGRfdmFsLmMgPSAwO1xuIFxuQEAgLTg0LDEwICYjNDM7OTAsMTMgQEAgc3RhdGljIGludCBzY2FfaW5qZWN0X2V4dF9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNyY19pZClcbiBzdGF0aWMgdm9pZCBzY2FfY2xlYXJfZXh0X2NhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCBlc2NhX2Jsb2NrICpzY2EgPSB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnNjYTtcbi1cdHVuaW9uIGVzY2Ffc2lncF9jdHJsICpzaWdwX2N0cmwgPSBcdTAwMjZzY2EtXHUwMDNlY3B1W3ZjcHUtXHUwMDNldmNwdV9pZF0uc2lncF9jdHJsO1xuJiM0MztcdHVuaW9uIGVzY2Ffc2lncF9jdHJsICpzaWdwX2N0cmw7XG4gXG4tXHRpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKVxuJiM0MztcdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkgfHwgIXZjcHUtXHUwMDNlYXJjaC5pbml0aWFsaXplZCB8fCBrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKVxuIFx0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdC8qIEluaXRpYWxpemUgYWZ0ZXIgdGhlIGFib3ZlIGNoZWNrLCB0byBwcmV2ZW50IGdvaW5nIG91dCBvZiBib3VuZHMgKi9cbiYjNDM7XHRzaWdwX2N0cmwgPSBcdTAwMjZzY2EtXHUwMDNlY3B1W3ZjcHUtXHUwMDNldmNwdV9pZF0uc2lncF9jdHJsO1xuIFx0a3ZtX3MzOTBfY2xlYXJfY3B1ZmxhZ3ModmNwdSwgQ1BVU1RBVF9FQ0FMTF9QRU5EKTtcbiBcbiBcdFdSSVRFX09OQ0Uoc2lncF9jdHJsLVx1MDAzZXZhbHVlLCAwKTtcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbmluZGV4IDE1MGI1ZGQyMTcwZTIuLjUxOGE2OWM1NWU4NWMgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuQEAgLTU3MSw3ICYjNDM7NTcxLDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9rZXlvcChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGt2bSAqa3ZtLCBpbnQgb3BcbiBcdHN3aXRjaCAob3ApIHtcbiBcdGNhc2UgS1ZNX1MzOTBfS0VZT1BfU1NLRTpcbiBcdFx0ciA9IGRhdF9jb25kX3NldF9zdG9yYWdlX2tleShtYywgYXNjZSwgZ2ZuLCBza2V5LCBcdTAwMjZza2V5LCAwLCAwLCAwKTtcbi1cdFx0aWYgKHIgXHUwMDNlPSAwKVxuJiM0MztcdFx0aWYgKHIgPT0gMCB8fCByID09IDEpXG4gXHRcdFx0cmV0dXJuIHNrZXkuc2tleTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEtWTV9TMzkwX0tFWU9QX0lTS0U6XG5AQCAtNTgwLDE0ICYjNDM7NTgwLDE0IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfa2V5b3Aoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBrdm0gKmt2bSwgaW50IG9wXG4gXHRcdFx0cmV0dXJuIHNrZXkuc2tleTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEtWTV9TMzkwX0tFWU9QX1JSQkU6XG4tXHRcdHIgPSBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdChhc2NlLCBnZm4pO1xuLVx0XHRpZiAociBcdTAwM2UgMClcbi1cdFx0XHRyZXR1cm4gciBcdTAwM2NcdTAwM2MgMTtcbiYjNDM7XHRcdHIgPSBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdChhc2NlLCBnZm4sIFx1MDAyNnNrZXkpO1xuJiM0MztcdFx0aWYgKCFyKVxuJiM0MztcdFx0XHRyZXR1cm4gc2tleS5za2V5O1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuLVx0cmV0dXJuIHI7XG4mIzQzO1x0cmV0dXJuIHIgXHUwMDNlIDAgPyAtRUZBVUxUIDogcjtcbiB9XG4gXG4gLyogU2VjdGlvbjogZGV2aWNlIHJlbGF0ZWQgKi9cbkBAIC0xMjE5LDggJiM0MzsxMjE5LDggQEAgc3RhdGljIHZvaWQga3ZtX3MzOTBfc3luY19yZXF1ZXN0X2Jyb2FkY2FzdChzdHJ1Y3Qga3ZtICprdm0sIGludCByZXEpXG4gXG4gLypcbiAgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGt2bS1cdTAwM2VzcmN1IGhlbGQgdG8gYXZvaWQgcmFjZXMgb24gbWVtc2xvdHMsIGFuZCB3aXRoXG4tICoga3ZtLVx1MDAzZXNsb3RzX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsIGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKCksXG4tICogYW5kIGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoKS5cbiYjNDM7ICoga3ZtLVx1MDAzZXNsb3RzX2FyY2hfbG9jayB0byBhdm9pZCByYWNlcyB3aXRoIG91cnNlbHZlcyxcbiYjNDM7ICoga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb24oKSwgYW5kIGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoKS5cbiAgKi9cbiBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuQEAgLTEyNjUsNyAmIzQzOzEyNjUsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXG4gfVxuIFxuIC8qXG4tICogTXVzdCBiZSBjYWxsZWQgd2l0aCBrdm0tXHUwMDNlc2xvdHNfbG9jayB0byBhdm9pZCByYWNlcyB3aXRoIG91cnNlbHZlcyxcbiYjNDM7ICogTXVzdCBiZSBjYWxsZWQgd2l0aCBrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLFxuICAqIGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbigpIGFuZCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKCkuXG4gICovXG4gc3RhdGljIGludCBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXG5AQCAtMTMwMCw3ICYjNDM7MTMwMCw5IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0sXG4ge1xuIFx0aW50IHJlcyA9IC1FTlhJTztcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuJiM0MztcdGd1YXJkKHNyY3UpKFx1MDAyNmt2bS1cdTAwM2VzcmN1KTtcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2FyY2hfbG9jayk7XG4mIzQzO1xuIFx0c3dpdGNoIChhdHRyLVx1MDAzZWF0dHIpIHtcbiBcdGNhc2UgS1ZNX1MzOTBfVk1fTUlHUkFUSU9OX1NUQVJUOlxuIFx0XHRyZXMgPSBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oa3ZtKTtcbkBAIC0xMzExLDcgJiM0MzsxMzEzLDYgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSxcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuIFx0fVxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiBcbiBcdHJldHVybiByZXM7XG4gfVxuQEAgLTIyMTQsNyAmIzQzOzIyMTUsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX2dldF9za2V5cyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9za2V5cyAqYXJncylcbiBcdH1cbiBcbiBcdGt2ZnJlZShrZXlzKTtcbi1cdHJldHVybiByO1xuJiM0MztcdHJldHVybiByIFx1MDAzYz0gMCA/IHIgOiAtRUZBVUxUO1xuIH1cbiBcbiBzdGF0aWMgaW50IGt2bV9zMzkwX3NldF9za2V5cyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9za2V5cyAqYXJncylcbkBAIC0yMjc2LDcgJiM0MzsyMjc3LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfc2tleXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfc2tleXMgKmFyZ3MpXG4gXHRrdm1fczM5MF9mcmVlX21tdV9jYWNoZShtYyk7XG4gb3V0OlxuIFx0a3ZmcmVlKGtleXMpO1xuLVx0cmV0dXJuIHI7XG4mIzQzO1x0cmV0dXJuIHIgXHUwMDNjPSAwID8gciA6IC1FRkFVTFQ7XG4gfVxuIFxuIC8qXG5AQCAtMjM4Niw3ICYjNDM7MjM4Nyw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X2NtbWFfYml0cyhzdHJ1Y3Qga3ZtICprdm0sXG4gXG4gXHRzZXRfYml0KEdNQVBfRkxBR19VU0VTX0NNTSwgXHUwMDI2a3ZtLVx1MDAzZWFyY2guZ21hcC1cdTAwM2VmbGFncyk7XG4gXG4tXHRyZXR1cm4gcjtcbiYjNDM7XHRyZXR1cm4gciBcdTAwM2M9IDAgPyByIDogLUVGQVVMVDtcbiB9XG4gXG4gLyoqXG5AQCAtMjkzNCw2ICYjNDM7MjkzNSw5IEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdGNhc2UgS1ZNX1MzOTBfSU5URVJSVVBUOiB7XG4gXHRcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgczM5MGludDtcbiBcbiYjNDM7XHRcdHIgPSAtRUlOVkFMO1xuJiM0MztcdFx0aWYgKGt2bV9pc191Y29udHJvbChrdm0pKVxuJiM0MztcdFx0XHRicmVhaztcbiBcdFx0ciA9IC1FRkFVTFQ7XG4gXHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZzMzkwaW50LCBhcmdwLCBzaXplb2YoczM5MGludCkpKVxuIFx0XHRcdGJyZWFrO1xuQEAgLTI5OTgsOSAmIzQzOzMwMDIsOCBAQCBpbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gXHRcdHIgPSAtRUZBVUxUO1xuIFx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2YXJncywgYXJncCwgc2l6ZW9mKGFyZ3MpKSlcbiBcdFx0XHRicmVhaztcbi1cdFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4tXHRcdHIgPSBrdm1fczM5MF9nZXRfY21tYV9iaXRzKGt2bSwgXHUwMDI2YXJncyk7XG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4mIzQzO1x0XHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNmt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2spXG4mIzQzO1x0XHRcdHIgPSBrdm1fczM5MF9nZXRfY21tYV9iaXRzKGt2bSwgXHUwMDI2YXJncyk7XG4gXHRcdGlmICghcikge1xuIFx0XHRcdHIgPSBjb3B5X3RvX3VzZXIoYXJncCwgXHUwMDI2YXJncywgc2l6ZW9mKGFyZ3MpKTtcbiBcdFx0XHRpZiAocilcbkBAIC0zMDE0LDkgJiM0MzszMDE3LDkgQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0XHRyID0gLUVGQVVMVDtcbiBcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmFyZ3MsIGFyZ3AsIHNpemVvZihhcmdzKSkpXG4gXHRcdFx0YnJlYWs7XG4tXHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuJiM0MztcdFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcbiBcdFx0ciA9IGt2bV9zMzkwX3NldF9jbW1hX2JpdHMoa3ZtLCBcdTAwMjZhcmdzKTtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXHRjYXNlIEtWTV9TMzkwX1BWX0NPTU1BTkQ6IHtcbkBAIC0zMjQ3LDcgJiM0MzszMjUwLDggQEAgc3RhdGljIHZvaWQga3ZtX3MzOTBfY3J5cHRvX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuIFxuIHN0YXRpYyB2b2lkIHNjYV9kaXNwb3NlKHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4tXHRmcmVlX3BhZ2VzX2V4YWN0KGt2bS1cdTAwM2VhcmNoLnNjYSwgc2l6ZW9mKCprdm0tXHUwMDNlYXJjaC5zY2EpKTtcbiYjNDM7XHRpZiAoa3ZtLVx1MDAzZWFyY2guc2NhKVxuJiM0MztcdFx0ZnJlZV9wYWdlc19leGFjdChrdm0tXHUwMDNlYXJjaC5zY2EsIHNpemVvZigqa3ZtLVx1MDAzZWFyY2guc2NhKSk7XG4gXHRrdm0tXHUwMDNlYXJjaC5zY2EgPSBOVUxMO1xuIH1cbiBcbkBAIC0zNDYxLDcgJiM0MzszNDY1LDcgQEAgc3RhdGljIHZvaWQgc2NhX2RlbF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRzdHJ1Y3QgZXNjYV9ibG9jayAqc2NhID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5zY2E7XG4gXG4tXHRpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKVxuJiM0MztcdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkgfHwgIXZjcHUtXHUwMDNlYXJjaC5pbml0aWFsaXplZClcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Y2xlYXJfYml0X2ludih2Y3B1LVx1MDAzZXZjcHVfaWQsICh1bnNpZ25lZCBsb25nICopc2NhLVx1MDAzZW1jbik7XG5AQCAtMzQ4MSw4ICYjNDM7MzQ4NSw4IEBAIHN0YXRpYyB2b2lkIHNjYV9hZGRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKVxuIFx0XHRyZXR1cm47XG4gXG4mIzQzO1x0V1JJVEVfT05DRShzY2EtXHUwMDNlY3B1W3ZjcHUtXHUwMDNldmNwdV9pZF0uc2RhLCB2aXJ0X3RvX3BoeXModmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jaykpO1xuIFx0c2V0X2JpdF9pbnYodmNwdS1cdTAwM2V2Y3B1X2lkLCAodW5zaWduZWQgbG9uZyAqKXNjYS1cdTAwM2VtY24pO1xuLVx0c2NhLVx1MDAzZWNwdVt2Y3B1LVx1MDAzZXZjcHVfaWRdLnNkYSA9IHZpcnRfdG9fcGh5cyh2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrKTtcbiB9XG4gXG4gc3RhdGljIGludCBzY2FfY2FuX2FkZF92Y3B1KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkKVxuQEAgLTM2MTMsNiAmIzQzOzM2MTcsOSBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAodGVzdF9rdm1fZmFjaWxpdHkodmNwdS1cdTAwM2Vrdm0sIDc0KSB8fCB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnVzZXJfaW5zdHIwIHx8XG4gXHQgICAgdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC51c2VyX29wZXJleGVjKVxuIFx0XHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWljdGwgfD0gSUNUTF9PUEVSRVhDO1xuJiM0MztcbiYjNDM7XHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bigpIGFuZCBrdm1fYXJjaF92Y3B1X2lvY3RsKCkgKi9cbiYjNDM7XHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaW5pdGlhbGl6ZWQsIHRydWUpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBrdm1faGFzX3Bja21vX3N1YmZ1bmMoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIG5yKVxuQEAgLTM2NzQsNyAmIzQzOzM2ODEsOCBAQCBzdGF0aWMgdm9pZCBrdm1fczM5MF92Y3B1X2NyeXB0b19zZXR1cChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gdm9pZCBrdm1fczM5MF92Y3B1X3Vuc2V0dXBfY21tYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydCh2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWNicmxvKSk7XG4mIzQzO1x0aWYgKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlY2JybG8pXG4mIzQzO1x0XHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcGh5c190b192aXJ0KHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlY2JybG8pKTtcbiBcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlY2JybG8gPSAwO1xuIH1cbiBcbkBAIC0zNzkyLDIxICYjNDM7MzgwMCwyMSBAQCBpbnQga3ZtX2FyY2hfdmNwdV9wcmVjcmVhdGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO0RFRklORV9GUkVFKHNpZV9wYWdlLCBzdHJ1Y3Qgc2llX3BhZ2UgKiwgaWYgKF9UKSBmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpKF9UKSkpXG4mIzQzO1xuIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0c3RydWN0IHNpZV9wYWdlICpzaWVfcGFnZTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYyBfX2ZyZWUoa3ZtX3MzOTBfbW11X2NhY2hlKSA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IHNpZV9wYWdlICpzaWVfcGFnZSBfX2ZyZWUoc2llX3BhZ2UpID0gTlVMTDtcbiBcdGludCByYztcbiBcbiBcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHNpZV9wYWdlKSAhPSA0MDk2KTtcbi1cdHZjcHUtXHUwMDNlYXJjaC5tYyA9IGt2bV9zMzkwX25ld19tbXVfY2FjaGUoKTtcbi1cdGlmICghdmNwdS1cdTAwM2VhcmNoLm1jKVxuJiM0MztcdG1jID0ga3ZtX3MzOTBfbmV3X21tdV9jYWNoZSgpO1xuJiM0MztcdGlmICghbWMpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0c2llX3BhZ2UgPSAoc3RydWN0IHNpZV9wYWdlICopIGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLVx0aWYgKCFzaWVfcGFnZSkge1xuLVx0XHRrdm1fczM5MF9mcmVlX21tdV9jYWNoZSh2Y3B1LVx1MDAzZWFyY2gubWMpO1xuLVx0XHR2Y3B1LVx1MDAzZWFyY2gubWMgPSBOVUxMO1xuJiM0MztcdGlmICghc2llX3BhZ2UpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuLVx0fVxuIFxuIFx0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jayA9IFx1MDAyNnNpZV9wYWdlLVx1MDAzZXNpZV9ibG9jaztcbiBcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlaXRkYmEgPSB2aXJ0X3RvX3BoeXMoXHUwMDI2c2llX3BhZ2UtXHUwMDNlaXRkYik7XG5AQCAtMzg0OCwxMCAmIzQzOzM4NTYsOSBAQCBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2Vrdm1fdmFsaWRfcmVncyB8PSBLVk1fU1lOQ19GUFJTO1xuIFxuIFx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpIHtcbi1cdFx0cmMgPSAtRU5PTUVNO1xuIFx0XHR2Y3B1LVx1MDAzZWFyY2guZ21hcCA9IGdtYXBfbmV3X2NoaWxkKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guZ21hcCwgLTFVTCk7XG4gXHRcdGlmICghdmNwdS1cdTAwM2VhcmNoLmdtYXApXG4tXHRcdFx0Z290byBvdXRfZnJlZV9zaWVfYmxvY2s7XG4mIzQzO1x0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFxuIFx0Vk1fRVZFTlQodmNwdS1cdTAwM2Vrdm0sIDMsIFwmIzM0O2NyZWF0ZSBjcHUgJWQgYXQgMHglcCwgc2llIGJsb2NrIGF0IDB4JXBcJiMzNDssXG5AQCAtMzg1OSwyMCAmIzQzOzM4NjYsMTkgQEAgaW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHRyYWNlX2t2bV9zMzkwX2NyZWF0ZV92Y3B1KHZjcHUtXHUwMDNldmNwdV9pZCwgdmNwdSwgdmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jayk7XG4gXG4gXHRyYyA9IGt2bV9zMzkwX3ZjcHVfc2V0dXAodmNwdSk7XG4tXHRpZiAocmMpXG4tXHRcdGdvdG8gb3V0X3Vjb250cm9sX3VuaW5pdDtcbiYjNDM7XHRpZiAocmMpIHtcbiYjNDM7XHRcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKSB7XG4mIzQzO1x0XHRcdHNjb3BlZF9ndWFyZChzcGlubG9jaywgXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWNoaWxkcmVuX2xvY2spXG4mIzQzO1x0XHRcdFx0Z21hcF9yZW1vdmVfY2hpbGQodmNwdS1cdTAwM2VhcmNoLmdtYXApO1xuJiM0MztcdFx0XHR2Y3B1LVx1MDAzZWFyY2guZ21hcCA9IGdtYXBfcHV0KHZjcHUtXHUwMDNlYXJjaC5nbWFwKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XHR9XG4gXG4mIzQzO1x0dmNwdS1cdTAwM2VhcmNoLm1jID0gbm9fZnJlZV9wdHIobWMpO1xuJiM0MztcdHNpZV9wYWdlID0gTlVMTDtcbiBcdGt2bV9zMzkwX3VwZGF0ZV90b3BvbG9neV9jaGFuZ2VfcmVwb3J0KHZjcHUtXHUwMDNla3ZtLCAxKTtcbiBcdHJldHVybiAwO1xuLVxuLW91dF91Y29udHJvbF91bmluaXQ6XG4tXHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKSkge1xuLVx0XHRnbWFwX3JlbW92ZV9jaGlsZCh2Y3B1LVx1MDAzZWFyY2guZ21hcCk7XG4tXHRcdHZjcHUtXHUwMDNlYXJjaC5nbWFwID0gZ21hcF9wdXQodmNwdS1cdTAwM2VhcmNoLmdtYXApO1xuLVx0fVxuLW91dF9mcmVlX3NpZV9ibG9jazpcbi1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykodmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jaykpO1xuLVx0cmV0dXJuIHJjO1xuIH1cbiBcbiBpbnQga3ZtX2FyY2hfdmNwdV9ydW5uYWJsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5AQCAtNTAzOSw2ICYjNDM7NTA0NSwxMCBAQCBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICAgIGt2bV9ydW4tXHUwMDNla3ZtX2RpcnR5X3JlZ3MgXHUwMDI2IH5LVk1fU1lOQ19TMzkwX1ZBTElEX0ZJRUxEUylcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4mIzQzO1x0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZSgpICovXG4mIzQzO1x0aWYgKCFzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pbml0aWFsaXplZCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHR2Y3B1X2xvYWQodmNwdSk7XG4gXG4gXHRpZiAoZ3Vlc3RkYmdfZXhpdF9wZW5kaW5nKHZjcHUpKSB7XG5AQCAtNTQ0Nyw2ICYjNDM7NTQ1Nyw4IEBAIGxvbmcga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLFxuIFx0XHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0IHMzOTBpbnQ7XG4gXHRcdHN0cnVjdCBrdm1fczM5MF9pcnEgczM5MGlycSA9IHt9O1xuIFxuJiM0MztcdFx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2czM5MGludCwgYXJncCwgc2l6ZW9mKHMzOTBpbnQpKSlcbiBcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdFx0aWYgKHMzOTBpbnRfdG9fczM5MGlycShcdTAwMjZzMzkwaW50LCBcdTAwMjZzMzkwaXJxKSlcbkBAIC01NTIzLDYgJiM0Mzs1NTM1LDEwIEBAIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbiBcdGxvbmcgcjtcbiBcdHUxNiByYywgcnJjO1xuIFxuJiM0MztcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUoKSAqL1xuJiM0MztcdGlmICghc21wX2xvYWRfYWNxdWlyZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaW5pdGlhbGl6ZWQpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuIFx0dmNwdV9sb2FkKHZjcHUpO1xuIFxuIFx0c3dpdGNoIChpb2N0bCkge1xuQEAgLTU3OTQsMTQgJiM0Mzs1ODEwLDMwIEBAIGludCBrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgbG9uZyBjbW1hX2RfY291bnRfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXG4mIzQzO3tcbiYjNDM7XHR1bmlvbiBwZ3N0ZSBwZ3N0ZTtcbiYjNDM7XG4mIzQzO1x0cGdzdGUgPSBwZ3N0ZV9nZXRfbG9jayhwdGVwKTtcbiYjNDM7XHRpZiAocGdzdGUuY21tYV9kKSB7XG4mIzQzO1x0XHRwZ3N0ZS5jbW1hX2QgPSAwO1xuJiM0MztcdFx0YXRvbWljNjRfZGVjKHdhbGstXHUwMDNlcHJpdik7XG4mIzQzO1x0fVxuJiM0MztcdHBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRcdFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqb2xkLFxuIFx0XHRcdFx0Y29uc3Qgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbmV3LFxuIFx0XHRcdFx0ZW51bSBrdm1fbXJfY2hhbmdlIGNoYW5nZSlcbiB7XG4tXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYyA9IE5VTEw7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGRhdF93YWxrX29wcyBvcHMgPSB7IC5wdGVfZW50cnkgPSBjbW1hX2RfY291bnRfcHRlLCB9O1xuJiM0MztcdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jIF9fZnJlZShrdm1fczM5MF9tbXVfY2FjaGUpID0gTlVMTDtcbiBcdGludCByYyA9IDA7XG4gXG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNmt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2spO1xuJiM0MztcbiBcdGlmIChjaGFuZ2UgPT0gS1ZNX01SX0ZMQUdTX09OTFkpXG4gXHRcdHJldHVybjtcbiBcbkBAIC01ODEyLDYgJiM0Mzs1ODQ0LDEyIEBAIHZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuIFx0fVxuIFxuIFx0c2NvcGVkX2d1YXJkKHdyaXRlX2xvY2ssIFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jaykge1xuJiM0MztcdFx0aWYgKGt2bS1cdTAwM2VhcmNoLm1pZ3JhdGlvbl9tb2RlIFx1MDAyNlx1MDAyNiBrdm0tXHUwMDNlYXJjaC51c2VfY21tYSBcdTAwMjZcdTAwMjYgb2xkKSB7XG4mIzQzO1x0XHRcdF9kYXRfd2Fsa19nZm5fcmFuZ2Uob2xkLVx1MDAzZWJhc2VfZ2ZuLCBvbGQtXHUwMDNlYmFzZV9nZm4gJiM0Mzsgb2xkLVx1MDAzZW5wYWdlcyxcbiYjNDM7XHRcdFx0XHRcdCAgICBrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWFzY2UsIFx1MDAyNm9wcywgREFUX1dBTEtfSUdOX0hPTEVTLFxuJiM0MztcdFx0XHRcdFx0ICAgIFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNtbWFfZGlydHlfcGFnZXMpO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0c3dpdGNoIChjaGFuZ2UpIHtcbiBcdFx0Y2FzZSBLVk1fTVJfREVMRVRFOlxuIFx0XHRcdHJjID0gZGF0X2RlbGV0ZV9zbG90KG1jLCBrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWFzY2UsIG9sZC1cdTAwM2ViYXNlX2dmbiwgb2xkLVx1MDAzZW5wYWdlcyk7XG5AQCAtNTgzMyw3ICYjNDM7NTg3MSw2IEBAIHZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuIG91dDpcbiBcdGlmIChyYylcbiBcdFx0cHJfd2FybihcJiMzNDtmYWlsZWQgdG8gY29tbWl0IG1lbW9yeSByZWdpb25cXG5cJiMzNDspO1xuLVx0a3ZtX3MzOTBfZnJlZV9tbXVfY2FjaGUobWMpO1xuIFx0cmV0dXJuO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3ByaXYuYyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jXG5pbmRleCBhZDBkZGM0MzNhNzNjLi5iMWJhMjRjMzQ2ZWZhIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9wcml2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jXG5AQCAtMjg5LDYgJiM0MzsyODksNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9pc2tlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBzdGF0aWMgaW50IGhhbmRsZV9ycmJlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGdhZGRyO1xuJiM0MztcdHVuaW9uIHNrZXkgc2tleTtcbiBcdGludCByZWcxLCByZWcyO1xuIFx0aW50IHJjO1xuIFxuQEAgLTMwNywxMiAmIzQzOzMwOCwxMiBAQCBzdGF0aWMgaW50IGhhbmRsZV9ycmJlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGdhZGRyID0ga3ZtX3MzOTBfbG9naWNhbF90b19lZmZlY3RpdmUodmNwdSwgZ2FkZHIpO1xuIFx0Z2FkZHIgPSBrdm1fczM5MF9yZWFsX3RvX2Ficyh2Y3B1LCBnYWRkcik7XG4gXHRzY29wZWRfZ3VhcmQocmVhZF9sb2NrLCBcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VtbXVfbG9jaylcbi1cdFx0cmMgPSBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh2Y3B1LVx1MDAzZWFyY2guZ21hcC1cdTAwM2Vhc2NlLCBncGFfdG9fZ2ZuKGdhZGRyKSk7XG4mIzQzO1x0XHRyYyA9IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHZjcHUtXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWFzY2UsIGdwYV90b19nZm4oZ2FkZHIpLCBcdTAwMjZza2V5KTtcbiBcdGlmIChyYyBcdTAwM2UgMClcbiBcdFx0cmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LCByYyk7XG4gXHRpZiAocmMgXHUwMDNjIDApXG4gXHRcdHJldHVybiByYztcbi1cdGt2bV9zMzkwX3NldF9wc3dfY2ModmNwdSwgcmMpO1xuJiM0MztcdGt2bV9zMzkwX3NldF9wc3dfY2ModmNwdSwgKHNrZXkuc2tleSBcdTAwM2VcdTAwM2UgMSkgXHUwMDI2IDMpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTEyNjAsOCAmIzQzOzEyNjEsOSBAQCBzdGF0aWMgaW50IGhhbmRsZV9lc3NhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0LyogUmV0cnkgdGhlIEVTU0EgaW5zdHJ1Y3Rpb24gKi9cbiBcdFx0a3ZtX3MzOTBfcmV0cnlfaW5zdHIodmNwdSk7XG4gXHR9IGVsc2Uge1xuLVx0XHRzY29wZWRfZ3VhcmQocmVhZF9sb2NrLCBcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VtbXVfbG9jaylcbi1cdFx0XHRpID0gX19kb19lc3NhKHZjcHUsIG9yYyk7XG4mIzQzO1x0XHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZXNsb3RzX2FyY2hfbG9jaylcbiYjNDM7XHRcdFx0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlbW11X2xvY2spXG4mIzQzO1x0XHRcdFx0aSA9IF9fZG9fZXNzYSh2Y3B1LCBvcmMpO1xuIFx0XHRpZiAoaSBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gaTtcbiBcdFx0LyogQWNjb3VudCBmb3IgdGhlIHBvc3NpYmxlIGV4dHJhIGNicmwgZW50cnkgKi9cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3B2LmMgYi9hcmNoL3MzOTAva3ZtL3B2LmNcbmluZGV4IDFiZWFjYzg0MWNhODUuLmIwMmUwMTU5ZDNjZDIgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL3B2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vcHYuY1xuQEAgLTI0NCw2ICYjNDM7MjQ0LDI0IEBAIHN0YXRpYyB2b2lkIGt2bV9zMzkwX2NsZWFyX3B2X3N0YXRlKHN0cnVjdCBrdm0gKmt2bSlcbiBcdGt2bS1cdTAwM2VhcmNoLnB2LnN0b3JfdmFyID0gTlVMTDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGt2bV9zMzkwX3B2X2Rpc3Bvc2VfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmcmVlX3N0b3JfYmFzZSlcbiYjNDM7e1xuJiM0MztcdGlmIChmcmVlX3N0b3JfYmFzZSlcbiYjNDM7XHRcdGZyZWVfcGFnZXModmNwdS1cdTAwM2VhcmNoLnB2LnN0b3JfYmFzZSwgZ2V0X29yZGVyKHV2X2luZm8uZ3Vlc3RfY3B1X3N0b3JfbGVuKSk7XG4mIzQzO1x0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNpZGFfYWRkcih2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrKSk7XG4mIzQzO1x0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2Vwdl9oYW5kbGVfY3B1ID0gMDtcbiYjNDM7XHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZXB2X2hhbmRsZV9jb25maWcgPSAwO1xuJiM0MztcdG1lbXNldChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gucHYsIDAsIHNpemVvZih2Y3B1LVx1MDAzZWFyY2gucHYpKTtcbiYjNDM7XHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZXNkZiA9IDA7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgc2lkYWQgZmllbGQgKGZvciBzZGYgPT0gMikgaXMgbm93IHRoZSBnYmVhIGZpZWxkIChmb3Igc2RmID09IDApLlxuJiM0MztcdCAqIFVzZSB0aGUgcmVzZXQgdmFsdWUgb2YgZ2JlYSB0byBhdm9pZCBsZWFraW5nIHRoZSBrZXJuZWwgcG9pbnRlciBvZlxuJiM0MztcdCAqIHRoZSBqdXN0IGZyZWVkIHNpZGEuXG4mIzQzO1x0ICovXG4mIzQzO1x0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VnYmVhID0gMTtcbiYjNDM7XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfVExCX0ZMVVNILCB2Y3B1KTtcbiYjNDM7fVxuJiM0MztcbiBpbnQga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYylcbiB7XG4gXHRpbnQgY2M7XG5AQCAtMjU4LDI0ICYjNDM7Mjc2LDkgQEAgaW50IGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXG4gXHRXQVJOX09OQ0UoY2MsIFwmIzM0O3Byb3R2aXJ0IGRlc3Ryb3kgY3B1IGZhaWxlZCByYyAleCBycmMgJXhcJiMzNDssICpyYywgKnJyYyk7XG4gXG4gXHQvKiBJbnRlbmRlZCBtZW1vcnkgbGVhayBmb3Igc29tZXRoaW5nIHRoYXQgc2hvdWxkIG5ldmVyIGhhcHBlbi4gKi9cbi1cdGlmICghY2MpXG4tXHRcdGZyZWVfcGFnZXModmNwdS1cdTAwM2VhcmNoLnB2LnN0b3JfYmFzZSxcbi1cdFx0XHQgICBnZXRfb3JkZXIodXZfaW5mby5ndWVzdF9jcHVfc3Rvcl9sZW4pKTtcbi1cbi1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzaWRhX2FkZHIodmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jaykpO1xuLVx0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2Vwdl9oYW5kbGVfY3B1ID0gMDtcbi1cdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlcHZfaGFuZGxlX2NvbmZpZyA9IDA7XG4tXHRtZW1zZXQoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnB2LCAwLCBzaXplb2YodmNwdS1cdTAwM2VhcmNoLnB2KSk7XG4tXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZXNkZiA9IDA7XG4tXHQvKlxuLVx0ICogVGhlIHNpZGFkIGZpZWxkIChmb3Igc2RmID09IDIpIGlzIG5vdyB0aGUgZ2JlYSBmaWVsZCAoZm9yIHNkZiA9PSAwKS5cbi1cdCAqIFVzZSB0aGUgcmVzZXQgdmFsdWUgb2YgZ2JlYSB0byBhdm9pZCBsZWFraW5nIHRoZSBrZXJuZWwgcG9pbnRlciBvZlxuLVx0ICogdGhlIGp1c3QgZnJlZWQgc2lkYS5cbi1cdCAqL1xuLVx0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VnYmVhID0gMTtcbi1cdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9UTEJfRkxVU0gsIHZjcHUpO1xuJiM0MztcdGt2bV9zMzkwX3B2X2Rpc3Bvc2VfY3B1KHZjcHUsICFjYyk7XG4gXG4tXHRyZXR1cm4gY2MgPyBFSU8gOiAwO1xuJiM0MztcdHJldHVybiBjYyA/IC1FSU8gOiAwO1xuIH1cbiBcbiBpbnQga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKVxuQEAgLTMxOSw5ICYjNDM7MzIyLDcgQEAgaW50IGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYylcbiBcdFx0ICAgICB1dmNiLmhlYWRlci5ycmMpO1xuIFxuIFx0aWYgKGNjKSB7XG4tXHRcdHUxNiBkdW1teTtcbi1cbi1cdFx0a3ZtX3MzOTBfcHZfZGVzdHJveV9jcHUodmNwdSwgXHUwMDI2ZHVtbXksIFx1MDAyNmR1bW15KTtcbiYjNDM7XHRcdGt2bV9zMzkwX3B2X2Rpc3Bvc2VfY3B1KHZjcHUsIHRydWUpO1xuIFx0XHRyZXR1cm4gLUVJTztcbiBcdH1cbiBcbkBAIC04MDksNyAmIzQzOzgxMCw3IEBAIHN0YXRpYyBpbnQgdW5wYWNrX29uZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgYWRkciwgdTY0IHR3ZWFrLFxuIFx0XHRcdHJldHVybiAtRUFHQUlOO1xuIFx0fVxuIFxuLVx0aWYgKHJldCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FQUdBSU4pXG4mIzQzO1x0aWYgKHJldCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FQUdBSU4gXHUwMDI2XHUwMDI2IHJldCAhPSAtRUlOVFIpXG4gXHRcdEtWTV9VVl9FVkVOVChrdm0sIDMsIFwmIzM0O1BST1RWSVJUIFZNIFVOUEFDSzogZmFpbGVkIGFkZHIgJWxseCB3aXRoIHJjICV4IHJyYyAleFwmIzM0OyxcbiBcdFx0XHQgICAgIHV2Y2IuZ2FkZHIsICpyYywgKnJyYyk7XG4gXHRyZXR1cm4gcmV0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fYXJjaF92Y3B1X2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF92Y3B1X2lvY3RsX3J1biYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF92Y3B1X2lvY3RsJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGwmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbiYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbiYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9wdl9kZXN0cm95X2NwdSYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9wdl9jcmVhdGVfY3B1JiMzNDssCiAgICAmIzM0O2hhbmRsZV9ycmJlJiMzNDssCiAgICAmIzM0O2hhbmRsZV9lc3NhJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2tleW9wJiMzNDssCiAgICAmIzM0O2RhdF9yZXNldF9yZWZlcmVuY2VfYml0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgczM5MCBLVk0gaW1wbGVtZW50YXRpb24sIGluY2x1ZGluZyBmaXhpbmcgcmFjZSBjb25kaXRpb25zIGR1cmluZyB2Q1BVIGNyZWF0aW9uL2luaXRpYWxpemF0aW9uLCBmaXhpbmcgbWVtb3J5IGxlYWtzLCBhbmQgdXBkYXRpbmcgbG9ja2luZyBtZWNoYW5pc21zICh1c2luZyBzbG90c19hcmNoX2xvY2spLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBvZiBLVk0gaW9jdGxzIGFuZCBtZW1vcnkgbWFuYWdlbWVudCwgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk0OTcwNjQ3YzRiM2M5MjQ1NmRlM2NkZjAwMzZmZjg3YmRkYjIzYzUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzIDE3OjA5OjQ4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCBlYWEzNGM1YmQzYzExLi5lZGY3NWI2YWQyMGNlIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtNDQwLDYgJiM0Mzs0NDAsNyBAQCBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7CiAJYm9vbCBza2V5X2VuYWJsZWQ7CiAJLyogSW5kaWNhdG9yIGlmIHRoZSBhY2Nlc3MgcmVnaXN0ZXJzIGhhdmUgYmVlbiBsb2FkZWQgZnJvbSBndWVzdCAqLwogCWJvb2wgYWNyc19sb2FkZWQ7CiYjNDM7CWJvb2wgaW5pdGlhbGl6ZWQ7CiAJc3RydWN0IGt2bV9zMzkwX3B2X3ZjcHUgcHY7CiAJdW5pb24gZGlhZzMxOF9pbmZvIGRpYWczMThfaW5mbzsKIAlzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYzsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZGF0LmMgYi9hcmNoL3MzOTAva3ZtL2RhdC5jCmluZGV4IGVkNDI1OWQxNzYyOTUuLjNmMmQ2ZTg5MDJkNzYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vZGF0LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9kYXQuYwpAQCAtNzU1LDEzICYjNDM7NzU1LDE1IEBAIGludCBkYXRfY29uZF9zZXRfc3RvcmFnZV9rZXkoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbW1jLCB1bmlvbiBhc2NlIGFzY2UsIGdmCiAJcmV0dXJuIHJjOwogfQogCi1pbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4pCiYjNDM7aW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLCB1bmlvbiBza2V5ICpza2V5KQogewogCXVuaW9uIHBnc3RlIHBnc3RlLCBvbGQ7CiAJdW5pb24gY3JzdGUgKmNyc3RlcDsKIAl1bmlvbiBwdGUgKnB0ZXA7CiAJaW50IHJjOwogCiYjNDM7CXNrZXktJmd0O3NrZXkgPSAwOwomIzQzOwogCXJjID0gZGF0X2VudHJ5X3dhbGsoTlVMTCwgZ2ZuLCBhc2NlLCBEQVRfV0FMS19BTlksIFRBQkxFX1RZUEVfUEFHRV9UQUJMRSwgJmFtcDtjcnN0ZXAsICZhbXA7cHRlcCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CkBAIC03NzEsMjEgJiM0Mzs3NzMsMjMgQEAgaW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuKQogCiAJCWlmICghY3JzdGUuaC5mYyB8fCAhY3JzdGUucy5mYzEucHIpCiAJCQlyZXR1cm4gMDsKLQkJcmV0dXJuIHBhZ2VfcmVzZXRfcmVmZXJlbmNlZChsYXJnZV9jcnN0ZV90b19waHlzKCpjcnN0ZXAsIGdmbikpOwomIzQzOwkJc2tleS0mZ3Q7c2tleSA9IHBhZ2VfcmVzZXRfcmVmZXJlbmNlZChsYXJnZV9jcnN0ZV90b19waHlzKCpjcnN0ZXAsIGdmbikpICZsdDsmbHQ7IDE7CiYjNDM7CQlyZXR1cm4gMDsKIAl9CiAJb2xkID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7CiAJcGdzdGUgPSBvbGQ7CiAKIAlpZiAoIXB0ZXAtJmd0O2guaSkgewotCQlyYyA9IHBhZ2VfcmVzZXRfcmVmZXJlbmNlZChwdGVfb3JpZ2luKCpwdGVwKSk7Ci0JCXBnc3RlLmhyID0gcmMgJmd0OyZndDsgMTsKJiM0MzsJCXNrZXktJmd0O3NrZXkgPSBwYWdlX3Jlc2V0X3JlZmVyZW5jZWQocHRlX29yaWdpbigqcHRlcCkpICZsdDsmbHQ7IDE7CiYjNDM7CQlwZ3N0ZS5ociA9IHNrZXktJmd0O3I7CiAJfQotCXJjIHw9IChwZ3N0ZS5nciAmbHQ7Jmx0OyAxKSB8IHBnc3RlLmdjOwomIzQzOwlza2V5LSZndDtyIHw9IHBnc3RlLmdyOwomIzQzOwlza2V5LSZndDtjIHw9IHBnc3RlLmdjOwogCXBnc3RlLmdyID0gMDsKIAogCWRhdF91cGRhdGVfcHRlcF9zZChvbGQsIHBnc3RlLCBwdGVwKTsKIAlwZ3N0ZV9zZXRfdW5sb2NrKHB0ZXAsIHBnc3RlKTsKLQlyZXR1cm4gcmM7CiYjNDM7CXJldHVybiAwOwogfQogCiBzdGF0aWMgbG9uZyBkYXRfcmVzZXRfc2tleXNfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspCkBAIC04NDYsNiAmIzQzOzg1MCw3IEBAIHN0YXRpYyBsb25nIF9kYXRfc2xvdF9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsCiAJc3RydWN0IHNsb3RfcHJpdiAqcCA9IHdhbGstJmd0O3ByaXY7CiAJdW5pb24gY3JzdGUgZHVtbXkgPSB7IC52YWwgPSBwLSZndDt0b2tlbiB9OwogCXVuaW9uIHB0ZSBuZXdfcHRlLCBwdGUgPSBSRUFEX09OQ0UoKnB0ZXApOwomIzQzOwl1bmlvbiBwZ3N0ZSBwZ3N0ZTsKIAogCW5ld19wdGUgPSBfUFRFX1RPSyhkdW1teS50b2sudHlwZSwgZHVtbXkudG9rLnBhcik7CiAKQEAgLTg1Myw3ICYjNDM7ODU4LDExIEBAIHN0YXRpYyBsb25nIF9kYXRfc2xvdF9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsCiAJaWYgKHB0ZS52YWwgPT0gbmV3X3B0ZS52YWwpCiAJCXJldHVybiAwOwogCi0JZGF0X3B0ZXBfeGNoZyhwdGVwLCBuZXdfcHRlLCBnZm4sIHdhbGstJmd0O2FzY2UsIGZhbHNlKTsKJiM0MzsJcGdzdGUgPSBwZ3N0ZV9nZXRfbG9jayhwdGVwKTsKJiM0MzsJcGdzdGUgPSBfX2RhdF9wdGVwX3hjaGcocHRlcCwgcGdzdGUsIG5ld19wdGUsIGdmbiwgd2Fsay0mZ3Q7YXNjZSwgZmFsc2UpOwomIzQzOwlwZ3N0ZS5jbW1hX2QgPSAwOwomIzQzOwlwZ3N0ZV9zZXRfdW5sb2NrKHB0ZXAsIHBnc3RlKTsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9kYXQuaCBiL2FyY2gvczM5MC9rdm0vZGF0LmgKaW5kZXggZmFkNjA1MzA1ZTA1Yy4uMTQxZWU3YjlmMDE5MSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9kYXQuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2RhdC5oCkBAIC01MzcsNyAmIzQzOzUzNyw3IEBAIGludCBkYXRfc2V0X3N0b3JhZ2Vfa2V5KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCB1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmCiAJCQl1bmlvbiBza2V5IHNrZXksIGJvb2wgbnEpOwogaW50IGRhdF9jb25kX3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLAogCQkJICAgICB1bmlvbiBza2V5IHNrZXksIHVuaW9uIHNrZXkgKm9sZGtleSwgYm9vbCBucSwgYm9vbCBtciwgYm9vbCBtYyk7Ci1pbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4pOwomIzQzO2ludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbiwgdW5pb24gc2tleSAqc2tleSk7CiBsb25nIGRhdF9yZXNldF9za2V5cyh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IHN0YXJ0KTsKIAogdW5zaWduZWQgbG9uZyBkYXRfZ2V0X3B0dmFsKHN0cnVjdCBwYWdlX3RhYmxlICp0YWJsZSwgc3RydWN0IHB0dmFsX3BhcmFtIHBhcmFtKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jIGIvYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMKaW5kZXggZmVlODAwNDdiZDk0Zi4uM2NjNDVmN2Y1YjJkNyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMKQEAgLTkxLDkgJiM0Mzs5MSw5IEBAIGludCBrdm1fczM5MF9mYXVsdGluX2dmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGd1ZXN0X2ZhCiAJCS8qIEFjY2VzcyBvdXRzaWRlIG1lbW9yeSwgYWRkcmVzc2luZyBleGNlcHRpb24uICovCiAJCWlmIChpc19ub3Nsb3RfcGZuKGYtJmd0O3BmbikpCiAJCQlyZXR1cm4gUEdNX0FERFJFU1NJTkc7Ci0JCS8qIFNpZ25hbCBwZW5kaW5nOiB0cnkgYWdhaW4uICovCi0JCWlmIChmLSZndDtwZm4gPT0gS1ZNX1BGTl9FUlJfU0lHUEVORElORykKLQkJCXJldHVybiAtRUFHQUlOOwomIzQzOwkJLyogRmF0YWwgc2lnbmFsIHBlbmRpbmc6IGJhaWwgb3V0LiAqLwomIzQzOwkJaWYgKGlzX3NpZ3BlbmRpbmdfcGZuKGYtJmd0O3BmbikpCiYjNDM7CQkJcmV0dXJuIC1FSU5UUjsKIAkJLyogQ2hlY2sgaWYgaXQmIzM5O3MgcmVhZC1vbmx5IG1lbW9yeTsgZG9uJiMzOTt0IHRyeSB0byBhY3R1YWxseSBoYW5kbGUgdGhhdCBjYXNlLiAqLwogCQlpZiAoZi0mZ3Q7cGZuID09IEtWTV9QRk5fRVJSX1JPX0ZBVUxUKQogCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMKaW5kZXggOWUzZTZiMGQ3MmFkNi4uNmIzZjk3YTc1MTNiMyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jCkBAIC00NSwxMyAmIzQzOzQ1LDE2IEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtX3MzOTBfZ2liICpnaWI7CiBzdGF0aWMgaW50IHNjYV9leHRfY2FsbF9wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50ICpzcmNfaWQpCiB7CiAJc3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5zY2E7Ci0JdW5pb24gZXNjYV9zaWdwX2N0cmwgc2lncF9jdHJsID0gc2NhLSZndDtjcHVbdmNwdS0mZ3Q7dmNwdV9pZF0uc2lncF9jdHJsOwomIzQzOwl1bmlvbiBlc2NhX3NpZ3BfY3RybCBzaWdwX2N0cmw7CiAKIAlpZiAoIWt2bV9zMzkwX3Rlc3RfY3B1ZmxhZ3ModmNwdSwgQ1BVU1RBVF9FQ0FMTF9QRU5EKSkKIAkJcmV0dXJuIDA7CiYjNDM7CWlmIChrdm1faXNfdWNvbnRyb2wodmNwdS0mZ3Q7a3ZtKSkKJiM0MzsJCXJldHVybiAwOwogCiAJQlVHX09OKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSk7CiAKJiM0MzsJc2lncF9jdHJsID0gc2NhLSZndDtjcHVbdmNwdS0mZ3Q7dmNwdV9pZF0uc2lncF9jdHJsOwogCWlmIChzcmNfaWQpCiAJCSpzcmNfaWQgPSBzaWdwX2N0cmwuc2NuOwogCkBAIC02MCwxMyAmIzQzOzYzLDE2IEBAIHN0YXRpYyBpbnQgc2NhX2V4dF9jYWxsX3BlbmRpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgKnNyY19pZCkKIAogc3RhdGljIGludCBzY2FfaW5qZWN0X2V4dF9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNyY19pZCkKIHsKLQlzdHJ1Y3QgZXNjYV9ibG9jayAqc2NhID0gdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnNjYTsKLQl1bmlvbiBlc2NhX3NpZ3BfY3RybCAqc2lncF9jdHJsID0gJmFtcDtzY2EtJmd0O2NwdVt2Y3B1LSZndDt2Y3B1X2lkXS5zaWdwX2N0cmw7CiAJdW5pb24gZXNjYV9zaWdwX2N0cmwgb2xkX3ZhbCwgbmV3X3ZhbCA9IHsuc2NuID0gc3JjX2lkLCAuYyA9IDF9OwomIzQzOwlzdHJ1Y3QgZXNjYV9ibG9jayAqc2NhID0gdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnNjYTsKJiM0MzsJdW5pb24gZXNjYV9zaWdwX2N0cmwgKnNpZ3BfY3RybDsKIAlpbnQgZXhwZWN0LCByYzsKIAogCUJVR19PTigha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpOwomIzQzOwlpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtJmd0O2t2bSkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKIAomIzQzOwlzaWdwX2N0cmwgPSAmYW1wO3NjYS0mZ3Q7Y3B1W3ZjcHUtJmd0O3ZjcHVfaWRdLnNpZ3BfY3RybDsKIAlvbGRfdmFsID0gUkVBRF9PTkNFKCpzaWdwX2N0cmwpOwogCW9sZF92YWwuYyA9IDA7CiAKQEAgLTg0LDEwICYjNDM7OTAsMTMgQEAgc3RhdGljIGludCBzY2FfaW5qZWN0X2V4dF9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNyY19pZCkKIHN0YXRpYyB2b2lkIHNjYV9jbGVhcl9leHRfY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5zY2E7Ci0JdW5pb24gZXNjYV9zaWdwX2N0cmwgKnNpZ3BfY3RybCA9ICZhbXA7c2NhLSZndDtjcHVbdmNwdS0mZ3Q7dmNwdV9pZF0uc2lncF9jdHJsOwomIzQzOwl1bmlvbiBlc2NhX3NpZ3BfY3RybCAqc2lncF9jdHJsOwogCi0JaWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSkKJiM0MzsJaWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSB8fCAhdmNwdS0mZ3Q7YXJjaC5pbml0aWFsaXplZCB8fCBrdm1faXNfdWNvbnRyb2wodmNwdS0mZ3Q7a3ZtKSkKIAkJcmV0dXJuOwomIzQzOwomIzQzOwkvKiBJbml0aWFsaXplIGFmdGVyIHRoZSBhYm92ZSBjaGVjaywgdG8gcHJldmVudCBnb2luZyBvdXQgb2YgYm91bmRzICovCiYjNDM7CXNpZ3BfY3RybCA9ICZhbXA7c2NhLSZndDtjcHVbdmNwdS0mZ3Q7dmNwdV9pZF0uc2lncF9jdHJsOwogCWt2bV9zMzkwX2NsZWFyX2NwdWZsYWdzKHZjcHUsIENQVVNUQVRfRUNBTExfUEVORCk7CiAKIAlXUklURV9PTkNFKHNpZ3BfY3RybC0mZ3Q7dmFsdWUsIDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCmluZGV4IDE1MGI1ZGQyMTcwZTIuLjUxOGE2OWM1NWU4NWMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKQEAgLTU3MSw3ICYjNDM7NTcxLDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9rZXlvcChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGt2bSAqa3ZtLCBpbnQgb3AKIAlzd2l0Y2ggKG9wKSB7CiAJY2FzZSBLVk1fUzM5MF9LRVlPUF9TU0tFOgogCQlyID0gZGF0X2NvbmRfc2V0X3N0b3JhZ2Vfa2V5KG1jLCBhc2NlLCBnZm4sIHNrZXksICZhbXA7c2tleSwgMCwgMCwgMCk7Ci0JCWlmIChyICZndDs9IDApCiYjNDM7CQlpZiAociA9PSAwIHx8IHIgPT0gMSkKIAkJCXJldHVybiBza2V5LnNrZXk7CiAJCWJyZWFrOwogCWNhc2UgS1ZNX1MzOTBfS0VZT1BfSVNLRToKQEAgLTU4MCwxNCAmIzQzOzU4MCwxNCBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX2tleW9wKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3Qga3ZtICprdm0sIGludCBvcAogCQkJcmV0dXJuIHNrZXkuc2tleTsKIAkJYnJlYWs7CiAJY2FzZSBLVk1fUzM5MF9LRVlPUF9SUkJFOgotCQlyID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQoYXNjZSwgZ2ZuKTsKLQkJaWYgKHIgJmd0OyAwKQotCQkJcmV0dXJuIHIgJmx0OyZsdDsgMTsKJiM0MzsJCXIgPSBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdChhc2NlLCBnZm4sICZhbXA7c2tleSk7CiYjNDM7CQlpZiAoIXIpCiYjNDM7CQkJcmV0dXJuIHNrZXkuc2tleTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXJldHVybiByOwomIzQzOwlyZXR1cm4gciAmZ3Q7IDAgPyAtRUZBVUxUIDogcjsKIH0KIAogLyogU2VjdGlvbjogZGV2aWNlIHJlbGF0ZWQgKi8KQEAgLTEyMTksOCAmIzQzOzEyMTksOCBAQCBzdGF0aWMgdm9pZCBrdm1fczM5MF9zeW5jX3JlcXVlc3RfYnJvYWRjYXN0KHN0cnVjdCBrdm0gKmt2bSwgaW50IHJlcSkKIAogLyoKICAqIE11c3QgYmUgY2FsbGVkIHdpdGgga3ZtLSZndDtzcmN1IGhlbGQgdG8gYXZvaWQgcmFjZXMgb24gbWVtc2xvdHMsIGFuZCB3aXRoCi0gKiBrdm0tJmd0O3Nsb3RzX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsIGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKCksCi0gKiBhbmQga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cygpLgomIzQzOyAqIGt2bS0mZ3Q7c2xvdHNfYXJjaF9sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLAomIzQzOyAqIGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKCksIGFuZCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKCkuCiAgKi8KIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSkKIHsKQEAgLTEyNjUsNyAmIzQzOzEyNjUsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pCiB9CiAKIC8qCi0gKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGt2bS0mZ3Q7c2xvdHNfbG9jayB0byBhdm9pZCByYWNlcyB3aXRoIG91cnNlbHZlcywKJiM0MzsgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGt2bS0mZ3Q7c2xvdHNfYXJjaF9sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLAogICoga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKCkgYW5kIGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoKS4KICAqLwogc3RhdGljIGludCBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pCkBAIC0xMzAwLDcgJiM0MzsxMzAwLDkgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSwKIHsKIAlpbnQgcmVzID0gLUVOWElPOwogCi0JbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7c2xvdHNfbG9jayk7CiYjNDM7CWd1YXJkKHNyY3UpKCZhbXA7a3ZtLSZndDtzcmN1KTsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7a3ZtLSZndDtzbG90c19hcmNoX2xvY2spOwomIzQzOwogCXN3aXRjaCAoYXR0ci0mZ3Q7YXR0cikgewogCWNhc2UgS1ZNX1MzOTBfVk1fTUlHUkFUSU9OX1NUQVJUOgogCQlyZXMgPSBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oa3ZtKTsKQEAgLTEzMTEsNyAmIzQzOzEzMTMsNiBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtLAogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KLQltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O3Nsb3RzX2xvY2spOwogCiAJcmV0dXJuIHJlczsKIH0KQEAgLTIyMTQsNyAmIzQzOzIyMTUsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX2dldF9za2V5cyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9za2V5cyAqYXJncykKIAl9CiAKIAlrdmZyZWUoa2V5cyk7Ci0JcmV0dXJuIHI7CiYjNDM7CXJldHVybiByICZsdDs9IDAgPyByIDogLUVGQVVMVDsKIH0KIAogc3RhdGljIGludCBrdm1fczM5MF9zZXRfc2tleXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfc2tleXMgKmFyZ3MpCkBAIC0yMjc2LDcgJiM0MzsyMjc3LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfc2tleXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfc2tleXMgKmFyZ3MpCiAJa3ZtX3MzOTBfZnJlZV9tbXVfY2FjaGUobWMpOwogb3V0OgogCWt2ZnJlZShrZXlzKTsKLQlyZXR1cm4gcjsKJiM0MzsJcmV0dXJuIHIgJmx0Oz0gMCA/IHIgOiAtRUZBVUxUOwogfQogCiAvKgpAQCAtMjM4Niw3ICYjNDM7MjM4Nyw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X2NtbWFfYml0cyhzdHJ1Y3Qga3ZtICprdm0sCiAKIAlzZXRfYml0KEdNQVBfRkxBR19VU0VTX0NNTSwgJmFtcDtrdm0tJmd0O2FyY2guZ21hcC0mZ3Q7ZmxhZ3MpOwogCi0JcmV0dXJuIHI7CiYjNDM7CXJldHVybiByICZsdDs9IDAgPyByIDogLUVGQVVMVDsKIH0KIAogLyoqCkBAIC0yOTM0LDYgJiM0MzsyOTM1LDkgQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKQogCWNhc2UgS1ZNX1MzOTBfSU5URVJSVVBUOiB7CiAJCXN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgczM5MGludDsKIAomIzQzOwkJciA9IC1FSU5WQUw7CiYjNDM7CQlpZiAoa3ZtX2lzX3Vjb250cm9sKGt2bSkpCiYjNDM7CQkJYnJlYWs7CiAJCXIgPSAtRUZBVUxUOwogCQlpZiAoY29weV9mcm9tX3VzZXIoJmFtcDtzMzkwaW50LCBhcmdwLCBzaXplb2YoczM5MGludCkpKQogCQkJYnJlYWs7CkBAIC0yOTk4LDkgJiM0MzszMDAyLDggQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKQogCQlyID0gLUVGQVVMVDsKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZhbXA7YXJncywgYXJncCwgc2l6ZW9mKGFyZ3MpKSkKIAkJCWJyZWFrOwotCQltdXRleF9sb2NrKCZhbXA7a3ZtLSZndDtzbG90c19sb2NrKTsKLQkJciA9IGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoa3ZtLCAmYW1wO2FyZ3MpOwotCQltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O3Nsb3RzX2xvY2spOwomIzQzOwkJc2NvcGVkX2d1YXJkKG11dGV4LCAmYW1wO2t2bS0mZ3Q7c2xvdHNfYXJjaF9sb2NrKQomIzQzOwkJCXIgPSBrdm1fczM5MF9nZXRfY21tYV9iaXRzKGt2bSwgJmFtcDthcmdzKTsKIAkJaWYgKCFyKSB7CiAJCQlyID0gY29weV90b191c2VyKGFyZ3AsICZhbXA7YXJncywgc2l6ZW9mKGFyZ3MpKTsKIAkJCWlmIChyKQpAQCAtMzAxNCw5ICYjNDM7MzAxNyw5IEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZykKIAkJciA9IC1FRkFVTFQ7CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmYW1wO2FyZ3MsIGFyZ3AsIHNpemVvZihhcmdzKSkpCiAJCQlicmVhazsKLQkJbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7c2xvdHNfbG9jayk7CiYjNDM7CQltdXRleF9sb2NrKCZhbXA7a3ZtLSZndDtzbG90c19hcmNoX2xvY2spOwogCQlyID0ga3ZtX3MzOTBfc2V0X2NtbWFfYml0cyhrdm0sICZhbXA7YXJncyk7Ci0JCW11dGV4X3VubG9jaygmYW1wO2t2bS0mZ3Q7c2xvdHNfbG9jayk7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O3Nsb3RzX2FyY2hfbG9jayk7CiAJCWJyZWFrOwogCX0KIAljYXNlIEtWTV9TMzkwX1BWX0NPTU1BTkQ6IHsKQEAgLTMyNDcsNyAmIzQzOzMyNTAsOCBAQCBzdGF0aWMgdm9pZCBrdm1fczM5MF9jcnlwdG9faW5pdChzdHJ1Y3Qga3ZtICprdm0pCiAKIHN0YXRpYyB2b2lkIHNjYV9kaXNwb3NlKHN0cnVjdCBrdm0gKmt2bSkKIHsKLQlmcmVlX3BhZ2VzX2V4YWN0KGt2bS0mZ3Q7YXJjaC5zY2EsIHNpemVvZigqa3ZtLSZndDthcmNoLnNjYSkpOwomIzQzOwlpZiAoa3ZtLSZndDthcmNoLnNjYSkKJiM0MzsJCWZyZWVfcGFnZXNfZXhhY3Qoa3ZtLSZndDthcmNoLnNjYSwgc2l6ZW9mKCprdm0tJmd0O2FyY2guc2NhKSk7CiAJa3ZtLSZndDthcmNoLnNjYSA9IE5VTEw7CiB9CiAKQEAgLTM0NjEsNyAmIzQzOzM0NjUsNyBAQCBzdGF0aWMgdm9pZCBzY2FfZGVsX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXN0cnVjdCBlc2NhX2Jsb2NrICpzY2EgPSB2Y3B1LSZndDtrdm0tJmd0O2FyY2guc2NhOwogCi0JaWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSkKJiM0MzsJaWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSB8fCAhdmNwdS0mZ3Q7YXJjaC5pbml0aWFsaXplZCkKIAkJcmV0dXJuOwogCiAJY2xlYXJfYml0X2ludih2Y3B1LSZndDt2Y3B1X2lkLCAodW5zaWduZWQgbG9uZyAqKXNjYS0mZ3Q7bWNuKTsKQEAgLTM0ODEsOCAmIzQzOzM0ODUsOCBAQCBzdGF0aWMgdm9pZCBzY2FfYWRkX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCWlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpCiAJCXJldHVybjsKIAomIzQzOwlXUklURV9PTkNFKHNjYS0mZ3Q7Y3B1W3ZjcHUtJmd0O3ZjcHVfaWRdLnNkYSwgdmlydF90b19waHlzKHZjcHUtJmd0O2FyY2guc2llX2Jsb2NrKSk7CiAJc2V0X2JpdF9pbnYodmNwdS0mZ3Q7dmNwdV9pZCwgKHVuc2lnbmVkIGxvbmcgKilzY2EtJmd0O21jbik7Ci0Jc2NhLSZndDtjcHVbdmNwdS0mZ3Q7dmNwdV9pZF0uc2RhID0gdmlydF90b19waHlzKHZjcHUtJmd0O2FyY2guc2llX2Jsb2NrKTsKIH0KIAogc3RhdGljIGludCBzY2FfY2FuX2FkZF92Y3B1KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkKQpAQCAtMzYxMyw2ICYjNDM7MzYxNyw5IEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpZiAodGVzdF9rdm1fZmFjaWxpdHkodmNwdS0mZ3Q7a3ZtLCA3NCkgfHwgdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnVzZXJfaW5zdHIwIHx8CiAJICAgIHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC51c2VyX29wZXJleGVjKQogCQl2Y3B1LSZndDthcmNoLnNpZV9ibG9jay0mZ3Q7aWN0bCB8PSBJQ1RMX09QRVJFWEM7CiYjNDM7CiYjNDM7CS8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKCkgYW5kIGt2bV9hcmNoX3ZjcHVfaW9jdGwoKSAqLwomIzQzOwlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO3ZjcHUtJmd0O2FyY2guaW5pdGlhbGl6ZWQsIHRydWUpOwogfQogCiBzdGF0aWMgYm9vbCBrdm1faGFzX3Bja21vX3N1YmZ1bmMoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIG5yKQpAQCAtMzY3NCw3ICYjNDM7MzY4MSw4IEBAIHN0YXRpYyB2b2lkIGt2bV9zMzkwX3ZjcHVfY3J5cHRvX3NldHVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogdm9pZCBrdm1fczM5MF92Y3B1X3Vuc2V0dXBfY21tYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydCh2Y3B1LSZndDthcmNoLnNpZV9ibG9jay0mZ3Q7Y2JybG8pKTsKJiM0MzsJaWYgKHZjcHUtJmd0O2FyY2guc2llX2Jsb2NrLSZndDtjYnJsbykKJiM0MzsJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwaHlzX3RvX3ZpcnQodmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O2NicmxvKSk7CiAJdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O2NicmxvID0gMDsKIH0KIApAQCAtMzc5MiwyMSAmIzQzOzM4MDAsMjEgQEAgaW50IGt2bV9hcmNoX3ZjcHVfcHJlY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkKQogCXJldHVybiAwOwogfQogCiYjNDM7REVGSU5FX0ZSRUUoc2llX3BhZ2UsIHN0cnVjdCBzaWVfcGFnZSAqLCBpZiAoX1QpIGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykoX1QpKSkKJiM0MzsKIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0Jc3RydWN0IHNpZV9wYWdlICpzaWVfcGFnZTsKJiM0MzsJc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMgX19mcmVlKGt2bV9zMzkwX21tdV9jYWNoZSkgPSBOVUxMOwomIzQzOwlzdHJ1Y3Qgc2llX3BhZ2UgKnNpZV9wYWdlIF9fZnJlZShzaWVfcGFnZSkgPSBOVUxMOwogCWludCByYzsKIAogCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHNpZV9wYWdlKSAhPSA0MDk2KTsKLQl2Y3B1LSZndDthcmNoLm1jID0ga3ZtX3MzOTBfbmV3X21tdV9jYWNoZSgpOwotCWlmICghdmNwdS0mZ3Q7YXJjaC5tYykKJiM0MzsJbWMgPSBrdm1fczM5MF9uZXdfbW11X2NhY2hlKCk7CiYjNDM7CWlmICghbWMpCiAJCXJldHVybiAtRU5PTUVNOwogCXNpZV9wYWdlID0gKHN0cnVjdCBzaWVfcGFnZSAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKLQlpZiAoIXNpZV9wYWdlKSB7Ci0JCWt2bV9zMzkwX2ZyZWVfbW11X2NhY2hlKHZjcHUtJmd0O2FyY2gubWMpOwotCQl2Y3B1LSZndDthcmNoLm1jID0gTlVMTDsKJiM0MzsJaWYgKCFzaWVfcGFnZSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCiAJdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2sgPSAmYW1wO3NpZV9wYWdlLSZndDtzaWVfYmxvY2s7CiAJdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O2l0ZGJhID0gdmlydF90b19waHlzKCZhbXA7c2llX3BhZ2UtJmd0O2l0ZGIpOwpAQCAtMzg0OCwxMCAmIzQzOzM4NTYsOSBAQCBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCQl2Y3B1LSZndDtydW4tJmd0O2t2bV92YWxpZF9yZWdzIHw9IEtWTV9TWU5DX0ZQUlM7CiAKIAlpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtJmd0O2t2bSkpIHsKLQkJcmMgPSAtRU5PTUVNOwogCQl2Y3B1LSZndDthcmNoLmdtYXAgPSBnbWFwX25ld19jaGlsZCh2Y3B1LSZndDtrdm0tJmd0O2FyY2guZ21hcCwgLTFVTCk7CiAJCWlmICghdmNwdS0mZ3Q7YXJjaC5nbWFwKQotCQkJZ290byBvdXRfZnJlZV9zaWVfYmxvY2s7CiYjNDM7CQkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJVk1fRVZFTlQodmNwdS0mZ3Q7a3ZtLCAzLCAmIzM0O2NyZWF0ZSBjcHUgJWQgYXQgMHglcCwgc2llIGJsb2NrIGF0IDB4JXAmIzM0OywKQEAgLTM4NTksMjAgJiM0MzszODY2LDE5IEBAIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJdHJhY2Vfa3ZtX3MzOTBfY3JlYXRlX3ZjcHUodmNwdS0mZ3Q7dmNwdV9pZCwgdmNwdSwgdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2spOwogCiAJcmMgPSBrdm1fczM5MF92Y3B1X3NldHVwKHZjcHUpOwotCWlmIChyYykKLQkJZ290byBvdXRfdWNvbnRyb2xfdW5pbml0OwomIzQzOwlpZiAocmMpIHsKJiM0MzsJCWlmIChrdm1faXNfdWNvbnRyb2wodmNwdS0mZ3Q7a3ZtKSkgewomIzQzOwkJCXNjb3BlZF9ndWFyZChzcGlubG9jaywgJmFtcDt2Y3B1LSZndDtrdm0tJmd0O2FyY2guZ21hcC0mZ3Q7Y2hpbGRyZW5fbG9jaykKJiM0MzsJCQkJZ21hcF9yZW1vdmVfY2hpbGQodmNwdS0mZ3Q7YXJjaC5nbWFwKTsKJiM0MzsJCQl2Y3B1LSZndDthcmNoLmdtYXAgPSBnbWFwX3B1dCh2Y3B1LSZndDthcmNoLmdtYXApOwomIzQzOwkJfQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwl9CiAKJiM0MzsJdmNwdS0mZ3Q7YXJjaC5tYyA9IG5vX2ZyZWVfcHRyKG1jKTsKJiM0MzsJc2llX3BhZ2UgPSBOVUxMOwogCWt2bV9zMzkwX3VwZGF0ZV90b3BvbG9neV9jaGFuZ2VfcmVwb3J0KHZjcHUtJmd0O2t2bSwgMSk7CiAJcmV0dXJuIDA7Ci0KLW91dF91Y29udHJvbF91bmluaXQ6Ci0JaWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LSZndDtrdm0pKSB7Ci0JCWdtYXBfcmVtb3ZlX2NoaWxkKHZjcHUtJmd0O2FyY2guZ21hcCk7Ci0JCXZjcHUtJmd0O2FyY2guZ21hcCA9IGdtYXBfcHV0KHZjcHUtJmd0O2FyY2guZ21hcCk7Ci0JfQotb3V0X2ZyZWVfc2llX2Jsb2NrOgotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykodmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2spKTsKLQlyZXR1cm4gcmM7CiB9CiAKIGludCBrdm1fYXJjaF92Y3B1X3J1bm5hYmxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTUwMzksNiAmIzQzOzUwNDUsMTAgQEAgaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkgICAga3ZtX3J1bi0mZ3Q7a3ZtX2RpcnR5X3JlZ3MgJmFtcDsgfktWTV9TWU5DX1MzOTBfVkFMSURfRklFTERTKQogCQlyZXR1cm4gLUVJTlZBTDsKIAomIzQzOwkvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4ga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKCkgKi8KJiM0MzsJaWYgKCFzbXBfbG9hZF9hY3F1aXJlKCZhbXA7dmNwdS0mZ3Q7YXJjaC5pbml0aWFsaXplZCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAl2Y3B1X2xvYWQodmNwdSk7CiAKIAlpZiAoZ3Vlc3RkYmdfZXhpdF9wZW5kaW5nKHZjcHUpKSB7CkBAIC01NDQ3LDYgJiM0Mzs1NDU3LDggQEAgbG9uZyBrdm1fYXJjaF92Y3B1X3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsCiAJCXN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgczM5MGludDsKIAkJc3RydWN0IGt2bV9zMzkwX2lycSBzMzkwaXJxID0ge307CiAKJiM0MzsJCWlmIChrdm1faXNfdWNvbnRyb2wodmNwdS0mZ3Q7a3ZtKSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZhbXA7czM5MGludCwgYXJncCwgc2l6ZW9mKHMzOTBpbnQpKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQlpZiAoczM5MGludF90b19zMzkwaXJxKCZhbXA7czM5MGludCwgJmFtcDtzMzkwaXJxKSkKQEAgLTU1MjMsNiAmIzQzOzU1MzUsMTAgQEAgbG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLAogCWxvbmcgcjsKIAl1MTYgcmMsIHJyYzsKIAomIzQzOwkvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4ga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKCkgKi8KJiM0MzsJaWYgKCFzbXBfbG9hZF9hY3F1aXJlKCZhbXA7dmNwdS0mZ3Q7YXJjaC5pbml0aWFsaXplZCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAl2Y3B1X2xvYWQodmNwdSk7CiAKIAlzd2l0Y2ggKGlvY3RsKSB7CkBAIC01Nzk0LDE0ICYjNDM7NTgxMCwzMCBAQCBpbnQga3ZtX2FyY2hfcHJlcGFyZV9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBsb25nIGNtbWFfZF9jb3VudF9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaykKJiM0Mzt7CiYjNDM7CXVuaW9uIHBnc3RlIHBnc3RlOwomIzQzOwomIzQzOwlwZ3N0ZSA9IHBnc3RlX2dldF9sb2NrKHB0ZXApOwomIzQzOwlpZiAocGdzdGUuY21tYV9kKSB7CiYjNDM7CQlwZ3N0ZS5jbW1hX2QgPSAwOwomIzQzOwkJYXRvbWljNjRfZGVjKHdhbGstJmd0O3ByaXYpOwomIzQzOwl9CiYjNDM7CXBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiB2b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwKIAkJCQlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpvbGQsCiAJCQkJY29uc3Qgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbmV3LAogCQkJCWVudW0ga3ZtX21yX2NoYW5nZSBjaGFuZ2UpCiB7Ci0Jc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMgPSBOVUxMOwomIzQzOwljb25zdCBzdHJ1Y3QgZGF0X3dhbGtfb3BzIG9wcyA9IHsgLnB0ZV9lbnRyeSA9IGNtbWFfZF9jb3VudF9wdGUsIH07CiYjNDM7CXN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jIF9fZnJlZShrdm1fczM5MF9tbXVfY2FjaGUpID0gTlVMTDsKIAlpbnQgcmMgPSAwOwogCiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO2t2bS0mZ3Q7c2xvdHNfYXJjaF9sb2NrKTsKJiM0MzsKIAlpZiAoY2hhbmdlID09IEtWTV9NUl9GTEFHU19PTkxZKQogCQlyZXR1cm47CiAKQEAgLTU4MTIsNiAmIzQzOzU4NDQsMTIgQEAgdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sCiAJfQogCiAJc2NvcGVkX2d1YXJkKHdyaXRlX2xvY2ssICZhbXA7a3ZtLSZndDttbXVfbG9jaykgewomIzQzOwkJaWYgKGt2bS0mZ3Q7YXJjaC5taWdyYXRpb25fbW9kZSAmYW1wOyZhbXA7IGt2bS0mZ3Q7YXJjaC51c2VfY21tYSAmYW1wOyZhbXA7IG9sZCkgewomIzQzOwkJCV9kYXRfd2Fsa19nZm5fcmFuZ2Uob2xkLSZndDtiYXNlX2dmbiwgb2xkLSZndDtiYXNlX2dmbiAmIzQzOyBvbGQtJmd0O25wYWdlcywKJiM0MzsJCQkJCSAgICBrdm0tJmd0O2FyY2guZ21hcC0mZ3Q7YXNjZSwgJmFtcDtvcHMsIERBVF9XQUxLX0lHTl9IT0xFUywKJiM0MzsJCQkJCSAgICAmYW1wO2t2bS0mZ3Q7YXJjaC5jbW1hX2RpcnR5X3BhZ2VzKTsKJiM0MzsJCX0KJiM0MzsKIAkJc3dpdGNoIChjaGFuZ2UpIHsKIAkJY2FzZSBLVk1fTVJfREVMRVRFOgogCQkJcmMgPSBkYXRfZGVsZXRlX3Nsb3QobWMsIGt2bS0mZ3Q7YXJjaC5nbWFwLSZndDthc2NlLCBvbGQtJmd0O2Jhc2VfZ2ZuLCBvbGQtJmd0O25wYWdlcyk7CkBAIC01ODMzLDcgJiM0Mzs1ODcxLDYgQEAgdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sCiBvdXQ6CiAJaWYgKHJjKQogCQlwcl93YXJuKCYjMzQ7ZmFpbGVkIHRvIGNvbW1pdCBtZW1vcnkgcmVnaW9uXG4mIzM0Oyk7Ci0Ja3ZtX3MzOTBfZnJlZV9tbXVfY2FjaGUobWMpOwogCXJldHVybjsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9wcml2LmMgYi9hcmNoL3MzOTAva3ZtL3ByaXYuYwppbmRleCBhZDBkZGM0MzNhNzNjLi5iMWJhMjRjMzQ2ZWZhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL3ByaXYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL3ByaXYuYwpAQCAtMjg5LDYgJiM0MzsyODksNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9pc2tlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHN0YXRpYyBpbnQgaGFuZGxlX3JyYmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXVuc2lnbmVkIGxvbmcgZ2FkZHI7CiYjNDM7CXVuaW9uIHNrZXkgc2tleTsKIAlpbnQgcmVnMSwgcmVnMjsKIAlpbnQgcmM7CiAKQEAgLTMwNywxMiAmIzQzOzMwOCwxMiBAQCBzdGF0aWMgaW50IGhhbmRsZV9ycmJlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlnYWRkciA9IGt2bV9zMzkwX2xvZ2ljYWxfdG9fZWZmZWN0aXZlKHZjcHUsIGdhZGRyKTsKIAlnYWRkciA9IGt2bV9zMzkwX3JlYWxfdG9fYWJzKHZjcHUsIGdhZGRyKTsKIAlzY29wZWRfZ3VhcmQocmVhZF9sb2NrLCAmYW1wO3ZjcHUtJmd0O2t2bS0mZ3Q7bW11X2xvY2spCi0JCXJjID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodmNwdS0mZ3Q7YXJjaC5nbWFwLSZndDthc2NlLCBncGFfdG9fZ2ZuKGdhZGRyKSk7CiYjNDM7CQlyYyA9IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHZjcHUtJmd0O2FyY2guZ21hcC0mZ3Q7YXNjZSwgZ3BhX3RvX2dmbihnYWRkciksICZhbXA7c2tleSk7CiAJaWYgKHJjICZndDsgMCkKIAkJcmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LCByYyk7CiAJaWYgKHJjICZsdDsgMCkKIAkJcmV0dXJuIHJjOwotCWt2bV9zMzkwX3NldF9wc3dfY2ModmNwdSwgcmMpOwomIzQzOwlrdm1fczM5MF9zZXRfcHN3X2NjKHZjcHUsIChza2V5LnNrZXkgJmd0OyZndDsgMSkgJmFtcDsgMyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyNjAsOCAmIzQzOzEyNjEsOSBAQCBzdGF0aWMgaW50IGhhbmRsZV9lc3NhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJLyogUmV0cnkgdGhlIEVTU0EgaW5zdHJ1Y3Rpb24gKi8KIAkJa3ZtX3MzOTBfcmV0cnlfaW5zdHIodmNwdSk7CiAJfSBlbHNlIHsKLQkJc2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgJmFtcDt2Y3B1LSZndDtrdm0tJmd0O21tdV9sb2NrKQotCQkJaSA9IF9fZG9fZXNzYSh2Y3B1LCBvcmMpOwomIzQzOwkJc2NvcGVkX2d1YXJkKG11dGV4LCAmYW1wO3ZjcHUtJmd0O2t2bS0mZ3Q7c2xvdHNfYXJjaF9sb2NrKQomIzQzOwkJCXNjb3BlZF9ndWFyZChyZWFkX2xvY2ssICZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDttbXVfbG9jaykKJiM0MzsJCQkJaSA9IF9fZG9fZXNzYSh2Y3B1LCBvcmMpOwogCQlpZiAoaSAmbHQ7IDApCiAJCQlyZXR1cm4gaTsKIAkJLyogQWNjb3VudCBmb3IgdGhlIHBvc3NpYmxlIGV4dHJhIGNicmwgZW50cnkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHYuYyBiL2FyY2gvczM5MC9rdm0vcHYuYwppbmRleCAxYmVhY2M4NDFjYTg1Li5iMDJlMDE1OWQzY2QyIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL3B2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9wdi5jCkBAIC0yNDQsNiAmIzQzOzI0NCwyNCBAQCBzdGF0aWMgdm9pZCBrdm1fczM5MF9jbGVhcl9wdl9zdGF0ZShzdHJ1Y3Qga3ZtICprdm0pCiAJa3ZtLSZndDthcmNoLnB2LnN0b3JfdmFyID0gTlVMTDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGt2bV9zMzkwX3B2X2Rpc3Bvc2VfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmcmVlX3N0b3JfYmFzZSkKJiM0Mzt7CiYjNDM7CWlmIChmcmVlX3N0b3JfYmFzZSkKJiM0MzsJCWZyZWVfcGFnZXModmNwdS0mZ3Q7YXJjaC5wdi5zdG9yX2Jhc2UsIGdldF9vcmRlcih1dl9pbmZvLmd1ZXN0X2NwdV9zdG9yX2xlbikpOwomIzQzOwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2lkYV9hZGRyKHZjcHUtJmd0O2FyY2guc2llX2Jsb2NrKSk7CiYjNDM7CXZjcHUtJmd0O2FyY2guc2llX2Jsb2NrLSZndDtwdl9oYW5kbGVfY3B1ID0gMDsKJiM0MzsJdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O3B2X2hhbmRsZV9jb25maWcgPSAwOwomIzQzOwltZW1zZXQoJmFtcDt2Y3B1LSZndDthcmNoLnB2LCAwLCBzaXplb2YodmNwdS0mZ3Q7YXJjaC5wdikpOwomIzQzOwl2Y3B1LSZndDthcmNoLnNpZV9ibG9jay0mZ3Q7c2RmID0gMDsKJiM0MzsJLyoKJiM0MzsJICogVGhlIHNpZGFkIGZpZWxkIChmb3Igc2RmID09IDIpIGlzIG5vdyB0aGUgZ2JlYSBmaWVsZCAoZm9yIHNkZiA9PSAwKS4KJiM0MzsJICogVXNlIHRoZSByZXNldCB2YWx1ZSBvZiBnYmVhIHRvIGF2b2lkIGxlYWtpbmcgdGhlIGtlcm5lbCBwb2ludGVyIG9mCiYjNDM7CSAqIHRoZSBqdXN0IGZyZWVkIHNpZGEuCiYjNDM7CSAqLwomIzQzOwl2Y3B1LSZndDthcmNoLnNpZV9ibG9jay0mZ3Q7Z2JlYSA9IDE7CiYjNDM7CWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9UTEJfRkxVU0gsIHZjcHUpOwomIzQzO30KJiM0MzsKIGludCBrdm1fczM5MF9wdl9kZXN0cm95X2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKQogewogCWludCBjYzsKQEAgLTI1OCwyNCAmIzQzOzI3Niw5IEBAIGludCBrdm1fczM5MF9wdl9kZXN0cm95X2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKQogCVdBUk5fT05DRShjYywgJiMzNDtwcm90dmlydCBkZXN0cm95IGNwdSBmYWlsZWQgcmMgJXggcnJjICV4JiMzNDssICpyYywgKnJyYyk7CiAKIAkvKiBJbnRlbmRlZCBtZW1vcnkgbGVhayBmb3Igc29tZXRoaW5nIHRoYXQgc2hvdWxkIG5ldmVyIGhhcHBlbi4gKi8KLQlpZiAoIWNjKQotCQlmcmVlX3BhZ2VzKHZjcHUtJmd0O2FyY2gucHYuc3Rvcl9iYXNlLAotCQkJICAgZ2V0X29yZGVyKHV2X2luZm8uZ3Vlc3RfY3B1X3N0b3JfbGVuKSk7Ci0KLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2lkYV9hZGRyKHZjcHUtJmd0O2FyY2guc2llX2Jsb2NrKSk7Ci0JdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O3B2X2hhbmRsZV9jcHUgPSAwOwotCXZjcHUtJmd0O2FyY2guc2llX2Jsb2NrLSZndDtwdl9oYW5kbGVfY29uZmlnID0gMDsKLQltZW1zZXQoJmFtcDt2Y3B1LSZndDthcmNoLnB2LCAwLCBzaXplb2YodmNwdS0mZ3Q7YXJjaC5wdikpOwotCXZjcHUtJmd0O2FyY2guc2llX2Jsb2NrLSZndDtzZGYgPSAwOwotCS8qCi0JICogVGhlIHNpZGFkIGZpZWxkIChmb3Igc2RmID09IDIpIGlzIG5vdyB0aGUgZ2JlYSBmaWVsZCAoZm9yIHNkZiA9PSAwKS4KLQkgKiBVc2UgdGhlIHJlc2V0IHZhbHVlIG9mIGdiZWEgdG8gYXZvaWQgbGVha2luZyB0aGUga2VybmVsIHBvaW50ZXIgb2YKLQkgKiB0aGUganVzdCBmcmVlZCBzaWRhLgotCSAqLwotCXZjcHUtJmd0O2FyY2guc2llX2Jsb2NrLSZndDtnYmVhID0gMTsKLQlrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfVExCX0ZMVVNILCB2Y3B1KTsKJiM0MzsJa3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUodmNwdSwgIWNjKTsKIAotCXJldHVybiBjYyA/IEVJTyA6IDA7CiYjNDM7CXJldHVybiBjYyA/IC1FSU8gOiAwOwogfQogCiBpbnQga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKQpAQCAtMzE5LDkgJiM0MzszMjIsNyBAQCBpbnQga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKQogCQkgICAgIHV2Y2IuaGVhZGVyLnJyYyk7CiAKIAlpZiAoY2MpIHsKLQkJdTE2IGR1bW15OwotCi0JCWt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHZjcHUsICZhbXA7ZHVtbXksICZhbXA7ZHVtbXkpOwomIzQzOwkJa3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUodmNwdSwgdHJ1ZSk7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtODA5LDcgJiM0Mzs4MTAsNyBAQCBzdGF0aWMgaW50IHVucGFja19vbmUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGFkZHIsIHU2NCB0d2VhaywKIAkJCXJldHVybiAtRUFHQUlOOwogCX0KIAotCWlmIChyZXQgJmFtcDsmYW1wOyByZXQgIT0gLUVBR0FJTikKJiM0MzsJaWYgKHJldCAmYW1wOyZhbXA7IHJldCAhPSAtRUFHQUlOICZhbXA7JmFtcDsgcmV0ICE9IC1FSU5UUikKIAkJS1ZNX1VWX0VWRU5UKGt2bSwgMywgJiMzNDtQUk9UVklSVCBWTSBVTlBBQ0s6IGZhaWxlZCBhZGRyICVsbHggd2l0aCByYyAleCBycmMgJXgmIzM0OywKIAkJCSAgICAgdXZjYi5nYWRkciwgKnJjLCAqcnJjKTsKIAlyZXR1cm4gcmV0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTgxNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDk3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYW4gczM5MCBLVk0gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggZm9yIHMzOTAgS1ZNLCBhbmQgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBpdCBxdWlja2x5LiBMZXQmIzM5O3Mgc2VlLi4uIGl0JiMzOTtzIHRvdWNoaW5nIHNldmVyYWwgY29yZSBhcmVhczogYGFyY2gvczM5MC9rdm0vYC4gIFRoZSBrZXkgY2hhbmdlcyBqdW1wIG91dCByaWdodCBhd2F5LiBUaGV5JiMzOTt2ZSBhZGRlZCBhIGBib29sIGluaXRpYWxpemVkO2AgdG8gYHN0cnVjdCBrdm1fdmNwdV9hcmNoYCBpbiBga3ZtX2hvc3QuaGAuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIHN1Z2dlc3RpbmcgdGhleSYjMzk7cmUgdHJhY2tpbmcgVkNQVSBpbml0aWFsaXphdGlvbiBzdGF0ZSwgYW5kIHByb2JhYmx5IGZpeGluZyBzb21lIHJhY2UgY29uZGl0aW9ucy4KClRoZW4sIHRoZXJlJiMzOTtzIGEgbW9kaWZpY2F0aW9uIHRvIGBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdGAgaW4gYGRhdC5jYC4gVGhlIHNpZ25hdHVyZSBjaGFuZ2VkLCByZXR1cm5pbmcgdGhlIGBza2V5YCB2aWEgYSBwb2ludGVyLiAgVGhhdCYjMzk7cyBhIHBvdGVudGlhbCBhcmVhIGZvciBzdWJ0bGUgYnVncyBpZiBub3QgaGFuZGxlZCBjb3JyZWN0bHkgYnkgYWxsIGNhbGxlcnMuIFRoZSBgZmF1bHRpbi5jYCBjaGFuZ2UsIGhhbmRsaW5nIGAtRUlOVFJgIGZyb20gYGlzX3NpZ3BlbmRpbmdfcGZuKClgLCBpcyBhIGdvb2QgZGVmZW5zaXZlIG1lYXN1cmU7IGFkZHJlc3Npbmcgc2lnbmFsIGhhbmRsaW5nIGluIGZhdWx0aW5nIHBhdGhzIGlzIGFsd2F5cyBhIHdpbi4KCk1vdmluZyB0byBgaW50ZXJydXB0LmNgLCB0aGUgY2hlY2tzIGZvciBga3ZtX2lzX3Vjb250cm9sKHZjcHUtJmd0O2t2bSlgIGluIGludGVycnVwdCBmdW5jdGlvbnMgbG9vayBsaWtlIGEgZ29vZCBzZWN1cml0eSBtZWFzdXJlLCBvbmx5IGFsbG93aW5nIHByaXZpbGVnZWQgb3BlcmF0aW9ucyBmcm9tIGFwcHJvcHJpYXRlIGNvbnRleHRzLgoKYGt2bS1zMzkwLmNgIGlzIHdoZXJlIHRoaW5ncyBnZXQgcmVhbGx5IGludGVyZXN0aW5nLiBUaGVyZSBhcmUgdXBkYXRlcyB0byBga3ZtX3MzOTBfa2V5b3BgIHRvIGFjY29tbW9kYXRlIHRoZSBgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXRgIGNoYW5nZSwgd2hpY2ggaXMgZXhwZWN0ZWQuIFRoZSB1c2Ugb2YgYGt2bS0mZ3Q7c2xvdHNfYXJjaF9sb2NrYCBpbnN0ZWFkIG9mIGBrdm0tJmd0O3Nsb3RzX2xvY2tgIGluIGBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uYCBhbmQgYGt2bV9hcmNoX3ZtX2lvY3RsYCBpcyBhIGdvb2Qgc2lnbiB0aGF0IHRoZXkmIzM5O3JlIGFkZHJlc3Npbmcgc29tZSBsb2NraW5nIGlzc3VlcywgZXNwZWNpYWxseSB3aXRoIHRoZSBDTU1BIGJpdHMsIHdoaWNoIHdvdWxkIGhhdmUgaGFkIHRvIGRvIHdpdGggdGhlIGd1ZXN0IHBoeXNpY2FsIHRvIGhvc3QgcGh5c2ljYWwgdHJhbnNsYXRpb24uIFRoZSBhZGRpdGlvbiBvZiBjaGVja3MgZm9yIHRoZSBga3ZtLSZndDthcmNoLnNjYWAgYmVmb3JlIGZyZWVpbmcgYW5kIHRoZSBWQ1BVJiMzOTtzIGluaXRpYWxpemF0aW9uIHN0YXRlIChgdmNwdS0mZ3Q7YXJjaC5pbml0aWFsaXplZGApIGluIHNldmVyYWwgc3BvdHMgc3VnZ2VzdHMgYSBmb2N1cyBvbiByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBhdm9pZGluZyB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLiBUaGUgdXNlIG9mIGBzbXBfc3RvcmVfcmVsZWFzZWAgYW5kIGBzbXBfbG9hZF9hY3F1aXJlYCB3aXRoIHRoZSBpbml0aWFsaXplZCBmbGFnIGlzIGFic29sdXRlbHkgbmVjZXNzYXJ5IGZvciBjb3JyZWN0IHN5bmNocm9uaXphdGlvbiBvbiBhIG11bHRpLWNvcmUgbWFjaGluZSwgYW5kIEkmIzM5O20gZ2xhZCB0byBzZWUgdGhhdC4gRml4aW5nIHRob3NlIG1lbW9yeSBsZWFrcyBhbmQgZXJyb3IgaGFuZGxpbmcgaXNzdWVzIGluIGBrdm1fYXJjaF92Y3B1X2NyZWF0ZWAgaXMgaW1wb3J0YW50LiBJIG5lZWQgdG8gbm90ZSB0aGF0IGZ1bmN0aW9uIGFuZCBhbmFseXplIGl0LgoKVGhlIHVzZSBvZiBgc2xvdHNfYXJjaF9sb2NrYCBpbiBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gIGFsc28gcG9pbnRzIHRvIGxvY2tpbmcgaW1wcm92ZW1lbnRzLCBhbmQgQ01NQSBkaXJ0eSBwYWdlIHVwZGF0ZXMgYXJlIGEga2V5IHBhcnQgb2YgdGhpcy4gVGhlIGBwcml2LmNgIGFuZCBgcHYuY2AgY2hhbmdlcywgd2l0aCB0aGUgdXBkYXRlZCBgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXRgIGNhbGxzIGFuZCB0aGUgYHNsb3RzX2FyY2hfbG9ja2AgdXNhZ2UgaW4gYGhhbmRsZV9lc3NhYCBhcmUgc3RhbmRhcmQgYWRhcHRhdGlvbnMgdG8gdGhlIGNoYW5nZXMgaW4gdGhlIHJlc3Qgb2YgdGhlIGNvZGUuIFRoZSBzcGxpdHRpbmcgb2YgYGt2bV9zMzkwX3B2X2Rpc3Bvc2VfY3B1YCB3aXRoIHRoZSByZXNwZWN0aXZlIGNoYW5nZXMgaW4gYGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1YCBhbmQgYGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVgIGlzIGEgZ29vZCBzdGVwIHRvd2FyZHMgc2ltcGxpZnlpbmcgdGhlIENQVSByZXNvdXJjZSBtYW5hZ2VtZW50LgoKU28sIG92ZXJhbGwsIHRoaXMgbG9va3MgbGlrZSBhIGZ1bmN0aW9uYWwgcGF0Y2ggc2VyaWVzLiBEZWZpbml0ZWx5IHdvcnRoIGEgdGhvcm91Z2ggbG9vay4gSXQgYWRkcmVzc2VzIGEgZmV3IGJ1Z3MsIGluY2x1ZGluZyByYWNlIGNvbmRpdGlvbnMgcmVsYXRlZCB0byBWQ1BVIGluaXRpYWxpemF0aW9uLCBsb2NraW5nIHByb2JsZW1zLCBhbmQgc29tZSBtZW1vcnkgbGVha3MuIFRoYXQmIzM5O3MgZ29vZCBzdHVmZi4KCk9rYXksIGxldCBtZSBsaXN0IHRoZSBmb2N1cyBzeW1ib2xzOgoKKiAgIGBrdm1fYXJjaF92Y3B1X2NyZWF0ZWAgLSBUaGF0IG9uZSBuZWVkcyBzY3J1dGlueS4KKiAgIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAKKiAgIGBrdm1fYXJjaF92Y3B1X2lvY3RsYAoqICAgYGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGxgCiogICBga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbmAKKiAgIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAKKiAgIGBrdm1fczM5MF9wdl9kZXN0cm95X2NwdWAKKiAgIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YAoqICAgYGhhbmRsZV9ycmJlYAoqICAgYGhhbmRsZV9lc3NhYAoqICAgYGt2bV9zMzkwX2tleW9wYAoqICAgYGRhdF9yZXNldF9yZWZlcmVuY2VfYml0YCAtIEtlZXAgYW4gZXllIG9uIHRoZSBgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXRgIHNpZ25hdHVyZSBjaGFuZ2UsIGFzIHdlbGwgYXMgZXZlcnkgbG9jYXRpb24gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC4KCk5vdywgbGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGUgS2NvbmZpZyBpcyBzZXQgY29ycmVjdGx5LiBzMzkwIEtWTSBkZXBlbmRzIG9uIGBDT05GSUdfS1ZNYCwgb2J2aW91c2x5LiAgTGV0JiMzOTtzIHVzZSBgZ3JlcHBlcmAgaW4gdGhlIGBhcmNoL3MzOTAva3ZtL0tjb25maWdgIHRvIHNlZQoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL0tjb25maWc9MTc9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0xOC1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzoxOTpjb25maWcgS1ZNXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMjAtXHRkZWZfdHJpc3RhdGUgeVxuLS1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7VXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDE1CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgS1ZNIFMzOTAgVUNvbnRyb2wgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgcmVmZXJlbmNlcyBga3ZtX2lzX3Vjb250cm9sKHZjcHUtJmd0O2t2bSlgLiBUaGF0IGZ1bmN0aW9uIGNhbGwsIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIEtWTSBjb2RlYmFzZSwgc3Ryb25nbHkgaW1wbGllcyB0aGF0IHRoZSBgQ09ORklHX0tWTV9TMzkwX1VDT05UUk9MYCBjb25maWd1cmF0aW9uIG9wdGlvbiAqc2hvdWxkKiBiZSBlbmFibGVkIGZvciB0aGUgdGFyZ2V0IHBsYXRmb3JtLiBHaXZlbiB0aGlzLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBpbmRlZWQgc2V0IGFzIGV4cGVjdGVkLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGUgcHJlc2VuY2UgYW5kIHN0YXR1cyBvZiBgS1ZNX1MzOTBfVUNPTlRST0xgLiBJJiMzOTtsbCBnbyBjaGVjayBgYXJjaC9zMzkwL2t2bS9LY29uZmlnYCB0byBpbnNwZWN0IHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoZSByZWxldmFudCBvcHRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjb25maWd1cmF0aW9uIGVsZW1lbnQgaXMgc2V0IGNvcnJlY3RseSwgYW5kIHRoZSBidWlsZCBpcyBwaWNraW5nIHRoaXMgb3B0aW9uIHVwIG9yIGNvbmZpZ3VyZWQgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL0tjb25maWc9MTk9Y29uZmlnIEtWTVxuLS1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7VXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDMzCgkJCQkJCQlvdXRwdXQ6IDI2MgoJCQkJCQkJdGhvdWdodHM6IDE5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGZvY3VzIHN5bWJvbHMsIHRoaW5raW5nIHRocm91Z2ggdGhpcyBhbmFseXNpczoKCioqRm9jdXMgU3ltYm9sIFJldmlldyAmYW1wOyBLVk0gSW50ZWdyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgYSBzZXQgb2Yga2V5IHN5bWJvbHMgcmVsYXRlZCB0byB0aGUgYEtWTWAgaW5mcmFzdHJ1Y3R1cmUg4oCTIGRlZmluaXRlbHkgY2VudHJhbCB0byBhbnkgZGVlcCBkaXZlIGludG8gdmlydHVhbGl6YXRpb24gb24gTGludXguIFRoZSBvYmplY3RpdmUgaGVyZSBpcyB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB3aGVyZSB0aGUgbW9zdCBjcml0aWNhbCBpbnRlcmFjdGlvbnMgYW5kIHByb2Nlc3Npbmcgb2NjdXIgd2l0aGluIHRoZSBgS1ZNYCBsYXllci4KCkkmIzM5O3ZlIGdvdCBhIGNvbXByZWhlbnNpdmUgbGlzdCBvZiBmdW5jdGlvbnMgdG8gY29uc2lkZXIuIFRoZXNlIGZ1bmN0aW9ucyByZXByZXNlbnQgdGhlIGJhY2tib25lIG9mIGBLVk1gJiMzOTtzIGludGVyYWN0aW9ucyB3aXRoIHRoZSBhcmNoaXRlY3R1cmUgYW5kIEkvTy4gSSYjMzk7bSBub3RpbmcgdGhlIGluaXRpYWwgbGlzdDoKCiogICBga3ZtX2FyY2hfdmNwdV9jcmVhdGVgOiBUaGlzIGlzIGNydWNpYWwg4oCTIHRoZSBjcmVhdGlvbiBvZiBhIHZpcnR1YWwgQ1BVIGNvbnRleHQuIEV2ZXJ5dGhpbmcgc3BpbnMgb3V0IGZyb20gaGVyZS4KKiAgIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmA6IFRoaXMgaXMgdGhlIGhlYXJ0IG9mIHRoZSBWQ1BVJiMzOTtzIGV4ZWN1dGlvbiBsb29wLCB0aGUgZ2x1ZSBiZXR3ZWVuIHVzZXJzcGFjZSBhbmQgdGhlIGd1ZXN0LgoqICAgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgOiBUaGUgZ2VuZXJhbCBwdXJwb3NlIGBpb2N0bGAgaW50ZXJmYWNlIGZvciBWQ1BVcy4KKiAgIGBrdm1fYXJjaF92Y3B1X3VubG9ja2VkX2lvY3RsYDogVmFyaWFudCBvZiB0aGUgYWJvdmUsIG9mdGVuIHVzZWQgd2hlbiBjcml0aWNhbCBzZWN0aW9ucyBkb24mIzM5O3QgbmVlZCB0byBiZSBsb2NrZWQuCiogICBga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbmA6IFRoaXMgb25lIGlzIHZlcnkgaW50ZXJlc3RpbmcsIHNpbmNlIGl0IHJlbGF0ZXMgdG8gVk0gbWlncmF0aW9uLCBzbyBpdCYjMzk7cyBhIGdvb2QgaW5jbHVzaW9uLgoqICAgYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYDogVGhpcyBpcyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGV2YWx1YXRlLgoqICAgYGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1YDogQW5kIGl0cyBjb3VudGVycGFydDogdGhlIGRlc3RydWN0aW9uIG9mIHRoZSB2aXJ0dWFsIENQVS4KKiAgIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YDogQ3JlYXRpbmcgYSB2aXJ0dWFsIENQVSwgYnV0IGZvciBhIHNwZWNpZmljIGFyY2hpdGVjdHVyZS4KKiAgIGBoYW5kbGVfcnJiZWA6IExvb2tzIGxpa2UgYSBjcnVjaWFsIGhhbmRsZXIgZm9yIGEgY2VydGFpbiB0eXBlIG9mIGluc3RydWN0aW9uIG9yIGhhcmR3YXJlIGV2ZW50LgoqICAgYGhhbmRsZV9lc3NhYDogU2ltaWxhciB0byB0aGUgYWJvdmUsIHRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWwuCiogICBga3ZtX3MzOTBfa2V5b3BgOiBUaGlzIGlzIHJlbGF0ZWQgdG8ga2V5IG9wZXJhdGlvbnMsIHByb2JhYmx5IHdpdGhpbiB0aGUgUzM5MCBhcmNoaXRlY3R1cmUuCiogICBgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXRgOiBUaGlzIGlzIGltcG9ydGFudCwgYXMgaXQgaGVscHMgd2l0aCBhIHNwZWNpZmljIGJpdCBtYW5pcHVsYXRpb24uCgpBbGwgb2YgdGhlc2UgYXJlIHNvbGlkIGNob2ljZXMuIFRoaXMgaXMgYSB2ZXJ5IHVzZWZ1bCBzZXQgb2YgZm9jdXMgc3ltYm9scyBmb3IgYSBmaXJzdCBwYXNzLiBJJiMzOTttIGdvaW5nIHRvIHNldCB0aGVzZSBzeW1ib2xzIGFzIHRoZSBrZXkgY29tcG9uZW50cyBmb3IgbXkgYW5hbHlzaXMgYW5kIGJlZ2luIGZyb20gaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+dGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IEtWTV9TMzkwX1VDT05UUk9MPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fUzM5MF9VQ09OVFJPTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfY3JlYXRlJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfaW9jdGwmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bCYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1JiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3B2X2NyZWF0ZV9jcHUmIzM0OywKICAgICYjMzQ7aGFuZGxlX3JyYmUmIzM0OywKICAgICYjMzQ7aGFuZGxlX2Vzc2EmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfa2V5b3AmIzM0OywKICAgICYjMzQ7ZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBzMzkwIEtWTSBpbXBsZW1lbnRhdGlvbiwgaW5jbHVkaW5nIGZpeGluZyByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHZDUFUgY3JlYXRpb24vaW5pdGlhbGl6YXRpb24sIGZpeGluZyBtZW1vcnkgbGVha3MsIGFuZCB1cGRhdGluZyBsb2NraW5nIG1lY2hhbmlzbXMgKHVzaW5nIHNsb3RzX2FyY2hfbG9jaykuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIEtWTSBpb2N0bHMgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LCBtYWtpbmcgdGhlbSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7dGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IEtWTV9TMzkwX1VDT05UUk9MJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDYzCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBhIE1pc3NpbmcgS2VybmVsIEZlYXR1cmUqKgoKUmlnaHQsIHNvIGBLVk1fUzM5MF9VQ09OVFJPTGAgc2VlbXMgdG8gYmUgdW5kZWZpbmVkLiBUaGF0JiMzOTtzIHVuZXhwZWN0ZWQuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgYGFyY2gvczM5MC9rdm0vS2NvbmZpZ2AgZmlsZSBhZ2Fpbi4gSSBwcm9iYWJseSBtaXNzZWQgc29tZXRoaW5nLCBvciBtYXliZSB0aGVyZSYjMzk7cyBhIGRlcGVuZGVuY3kgSSYjMzk7bSBvdmVybG9va2luZyB0aGF0JiMzOTtzIGNhdXNpbmcgaXQgbm90IHRvIGJlIGV4cG9zZWQuIEkgbmVlZCB0byBlbnN1cmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIEkmIzM5O20gdHJ5aW5nIHRvIHVzZSwgbGlrZWx5IHJlbGF0ZWQgdG8gdXNlciBjb250cm9sIGZlYXR1cmVzIGZvciBLVk0gb24gczM5MHgsIGlzIGFjdHVhbGx5IGVuYWJsZWQgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgb3B0aW9ucy4gQSBxdWljayByZS1leGFtaW5hdGlvbiBvZiB0aGUgS2NvbmZpZyBmaWxlIHNob3VsZCBnaXZlIG1lIHRoZSBhbnN3ZXIuIE1heWJlIHRoZXJlJiMzOTtzIGEgcHJlcmVxdWlzaXRlIGtlcm5lbCBmbGFnIHRoYXQgaXNuJiMzOTt0IHNldCwgb3IgcGVyaGFwcyBpdCYjMzk7cyBtb3ZlZCBvciByZW5hbWVkLiBObyBiaWcgZGVhbCwganVzdCBhIG1pbm9yIG92ZXJzaWdodC4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtLVk1fUzM5MF9VQ09OVFJPTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL0tjb25maWc9MTk9Y29uZmlnIEtWTVxuLS1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7VXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTg0MwoJCQkJCQkJb3V0cHV0OiAyNDkKCQkJCQkJCXRob3VnaHRzOiAxODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVidWdnaW5nIGEgS2VybmVsIENvbmZpZ3VyYXRpb24gSXNzdWUqKgoKT2theSwgc28gSSB0aG91Z2h0IEkgd2FzIG9udG8gc29tZXRoaW5nIHdpdGggdGhlIGBLVk1fUzM5MF9VQ09OVFJPTGAgY29uZmlndXJhdGlvbiBvcHRpb24uIFRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgd2FzIHNheWluZyBpdCBkaWRuJiMzOTt0IGV4aXN0LCB3aGljaCB3YXMgdGhyb3dpbmcgbWUgb2ZmLiBCdXQgd2FpdC4uLiBJJiMzOTt2ZSBqdXN0IHJlbWVtYmVyZWQgc2VlaW5nIGl0LCByaWdodD8gWWVzLCBpdCYjMzk7cyBkZWZpbml0ZWx5IGluIGBhcmNoL3MzOTAva3ZtL0tjb25maWdgLgoKVGhlbiB3aHkgd2FzIHRoZSB0b29sIHJlcG9ydGluZyBpdCBhcyBtaXNzaW5nPyBIbW0sIG1heWJlIGl0JiMzOTtzIGNyb3NzLXJlZmVyZW5jaW5nIGFnYWluc3QgdGhlIHdyb25nIGFyY2hpdGVjdHVyZT8gUGVyaGFwcyB0aGUgdG9vbCBpcyBkZWZhdWx0aW5nIHRvIGNoZWNraW5nIHRoZSBgeDg2YCB0cmVlIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBUaGF0IHdvdWxkIGV4cGxhaW4gdGhlIGNvbmZ1c2lvbi4gQnV0IG5vLCB0aGUgdG9vbCBzaG91bGQgYmUgY2hlY2tpbmcgKmFsbCogYEtjb25maWdgIGZpbGVzIGdsb2JhbGx5LCBub3QganVzdCBhIHNwZWNpZmljIGFyY2hpdGVjdHVyZS4KCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgc3RlcCBiYWNrIGFuZCBkb3VibGUtY2hlY2sgdGhlIGV4YWN0IHN5bnRheCBvZiB0aGUgb3B0aW9uIG5hbWUuIElzIGBLVk1fUzM5MF9VQ09OVFJPTGAgdGhlIGFic29sdXRlIHRydXRoPyBZZXMsIGBjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBmb3JtLgoKSSYjMzk7bSBzdGlsbCBtaXNzaW5nIHNvbWV0aGluZy4gTWF5YmUgdGhlIHRvb2wgaXMgbWlzdGFrZW5seSB0YXJnZXRpbmcgYGFyY2gveDg2L0tjb25maWdgPyBObywgaXQgc2hvdWxkbiYjMzk7dC4gSXQmIzM5O3Mgc3VwcG9zZWQgdG8gZG8gYSBnbG9iYWwgc2VhcmNoLgoKQWxyaWdodCwgSSYjMzk7bGwgdHJ5IHRvIHNpbXBsaWZ5IHRoaW5ncy4gSSYjMzk7bGwganVzdCB1c2UgdGhlIGJhc2ljIG9wdGlvbiwgYEtWTWAuIElmIHRoZSB0b29sIHN0aWxsIGNvbXBsYWlucywgdGhlbiBJIGtub3cgc29tZXRoaW5nIGlzIGZ1bmRhbWVudGFsbHkgd3JvbmcsIG9yLCBhcyBhIGxhc3QgcmVzb3J0LCBtYXliZSBJIHNob3VsZCBvbWl0IHRoZSBtb3JlIHNwZWNpZmljIG5hbWUuIFBlcmhhcHMganVzdCB1c2luZyBgS1ZNYCB3aWxsIGJlIGVub3VnaCBmb3IgdGhlIHRvb2wgdG8gd29yaywgYW55d2F5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2FyY2hfdmNwdV9jcmVhdGUmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4mIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfdmNwdV9pb2N0bCYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF92Y3B1X3VubG9ja2VkX2lvY3RsJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3ZtX3NldF9taWdyYXRpb24mIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24mIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfcHZfZGVzdHJveV9jcHUmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfcHZfY3JlYXRlX2NwdSYjMzQ7LAogICAgJiMzNDtoYW5kbGVfcnJiZSYjMzQ7LAogICAgJiMzNDtoYW5kbGVfZXNzYSYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9rZXlvcCYjMzQ7LAogICAgJiMzNDtkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHMzOTAgS1ZNIGltcGxlbWVudGF0aW9uLCBpbmNsdWRpbmcgZml4aW5nIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgdkNQVSBjcmVhdGlvbi9pbml0aWFsaXphdGlvbiwgZml4aW5nIG1lbW9yeSBsZWFrcywgYW5kIHVwZGF0aW5nIGxvY2tpbmcgbWVjaGFuaXNtcyAodXNpbmcgc2xvdHNfYXJjaF9sb2NrKS4gVGhlc2UgY2hhbmdlcyBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgS1ZNIGlvY3RscyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQsIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfY3JlYXRlJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfaW9jdGwmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bCYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1JiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3B2X2NyZWF0ZV9jcHUmIzM0OywKICAgICYjMzQ7aGFuZGxlX3JyYmUmIzM0OywKICAgICYjMzQ7aGFuZGxlX2Vzc2EmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfa2V5b3AmIzM0OywKICAgICYjMzQ7ZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBzMzkwIEtWTSBpbXBsZW1lbnRhdGlvbiwgaW5jbHVkaW5nIGZpeGluZyByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHZDUFUgY3JlYXRpb24vaW5pdGlhbGl6YXRpb24sIGZpeGluZyBtZW1vcnkgbGVha3MsIGFuZCB1cGRhdGluZyBsb2NraW5nIG1lY2hhbmlzbXMgKHVzaW5nIHNsb3RzX2FyY2hfbG9jaykuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIEtWTSBpb2N0bHMgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LCBtYWtpbmcgdGhlbSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MDk6NDkuMjYxNjg2MTYyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE2NTkxMjEyNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2FyY2hfdmNwdV9jcmVhdGVcIixcbiAgICBcImt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuXCIsXG4gICAgXCJrdm1fYXJjaF92Y3B1X2lvY3RsXCIsXG4gICAgXCJrdm1fYXJjaF92Y3B1X3VubG9ja2VkX2lvY3RsXCIsXG4gICAgXCJrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uXCIsXG4gICAgXCJrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvblwiLFxuICAgIFwia3ZtX3MzOTBfcHZfZGVzdHJveV9jcHVcIixcbiAgICBcImt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVcIixcbiAgICBcImhhbmRsZV9ycmJlXCIsXG4gICAgXCJoYW5kbGVfZXNzYVwiLFxuICAgIFwia3ZtX3MzOTBfa2V5b3BcIixcbiAgICBcImRhdF9yZXNldF9yZWZlcmVuY2VfYml0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBzMzkwIEtWTSBpbXBsZW1lbnRhdGlvbiwgaW5jbHVkaW5nIGZpeGluZyByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHZDUFUgY3JlYXRpb24vaW5pdGlhbGl6YXRpb24sIGZpeGluZyBtZW1vcnkgbGVha3MsIGFuZCB1cGRhdGluZyBsb2NraW5nIG1lY2hhbmlzbXMgKHVzaW5nIHNsb3RzX2FyY2hfbG9jaykuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIEtWTSBpb2N0bHMgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LCBtYWtpbmcgdGhlbSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowOTo0OS4yNjE2OTMxMTJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMzA1NTUxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDk0OTcwNjQ3YzRiM2M5MjQ1NmRlM2NkZjAwMzZmZjg3YmRkYjIzYzVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMyAxNzowOTo0OCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuaW5kZXggZWFhMzRjNWJkM2MxMS4uZWRmNzViNmFkMjBjZSAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuQEAgLTQ0MCw2ICs0NDAsNyBAQCBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7XFxuIFxcdGJvb2wgc2tleV9lbmFibGVkO1xcbiBcXHQvKiBJbmRpY2F0b3IgaWYgdGhlIGFjY2VzcyByZWdpc3RlcnMgaGF2ZSBiZWVuIGxvYWRlZCBmcm9tIGd1ZXN0ICovXFxuIFxcdGJvb2wgYWNyc19sb2FkZWQ7XFxuK1xcdGJvb2wgaW5pdGlhbGl6ZWQ7XFxuIFxcdHN0cnVjdCBrdm1fczM5MF9wdl92Y3B1IHB2O1xcbiBcXHR1bmlvbiBkaWFnMzE4X2luZm8gZGlhZzMxOF9pbmZvO1xcbiBcXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYztcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9kYXQuYyBiL2FyY2gvczM5MC9rdm0vZGF0LmNcXG5pbmRleCBlZDQyNTlkMTc2Mjk1Li4zZjJkNmU4OTAyZDc2IDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9rdm0vZGF0LmNcXG4rKysgYi9hcmNoL3MzOTAva3ZtL2RhdC5jXFxuQEAgLTc1NSwxMyArNzU1LDE1IEBAIGludCBkYXRfY29uZF9zZXRfc3RvcmFnZV9rZXkoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbW1jLCB1bmlvbiBhc2NlIGFzY2UsIGdmXFxuIFxcdHJldHVybiByYztcXG4gfVxcbiBcXG4taW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuKVxcbitpbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4sIHVuaW9uIHNrZXkgKnNrZXkpXFxuIHtcXG4gXFx0dW5pb24gcGdzdGUgcGdzdGUsIG9sZDtcXG4gXFx0dW5pb24gY3JzdGUgKmNyc3RlcDtcXG4gXFx0dW5pb24gcHRlICpwdGVwO1xcbiBcXHRpbnQgcmM7XFxuIFxcbitcXHRza2V5LVxcdTAwM2Vza2V5ID0gMDtcXG4rXFxuIFxcdHJjID0gZGF0X2VudHJ5X3dhbGsoTlVMTCwgZ2ZuLCBhc2NlLCBEQVRfV0FMS19BTlksIFRBQkxFX1RZUEVfUEFHRV9UQUJMRSwgXFx1MDAyNmNyc3RlcCwgXFx1MDAyNnB0ZXApO1xcbiBcXHRpZiAocmMpXFxuIFxcdFxcdHJldHVybiByYztcXG5AQCAtNzcxLDIxICs3NzMsMjMgQEAgaW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuKVxcbiBcXG4gXFx0XFx0aWYgKCFjcnN0ZS5oLmZjIHx8ICFjcnN0ZS5zLmZjMS5wcilcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuLVxcdFxcdHJldHVybiBwYWdlX3Jlc2V0X3JlZmVyZW5jZWQobGFyZ2VfY3JzdGVfdG9fcGh5cygqY3JzdGVwLCBnZm4pKTtcXG4rXFx0XFx0c2tleS1cXHUwMDNlc2tleSA9IHBhZ2VfcmVzZXRfcmVmZXJlbmNlZChsYXJnZV9jcnN0ZV90b19waHlzKCpjcnN0ZXAsIGdmbikpIFxcdTAwM2NcXHUwMDNjIDE7XFxuK1xcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuIFxcdG9sZCA9IHBnc3RlX2dldF9sb2NrKHB0ZXApO1xcbiBcXHRwZ3N0ZSA9IG9sZDtcXG4gXFxuIFxcdGlmICghcHRlcC1cXHUwMDNlaC5pKSB7XFxuLVxcdFxcdHJjID0gcGFnZV9yZXNldF9yZWZlcmVuY2VkKHB0ZV9vcmlnaW4oKnB0ZXApKTtcXG4tXFx0XFx0cGdzdGUuaHIgPSByYyBcXHUwMDNlXFx1MDAzZSAxO1xcbitcXHRcXHRza2V5LVxcdTAwM2Vza2V5ID0gcGFnZV9yZXNldF9yZWZlcmVuY2VkKHB0ZV9vcmlnaW4oKnB0ZXApKSBcXHUwMDNjXFx1MDAzYyAxO1xcbitcXHRcXHRwZ3N0ZS5ociA9IHNrZXktXFx1MDAzZXI7XFxuIFxcdH1cXG4tXFx0cmMgfD0gKHBnc3RlLmdyIFxcdTAwM2NcXHUwMDNjIDEpIHwgcGdzdGUuZ2M7XFxuK1xcdHNrZXktXFx1MDAzZXIgfD0gcGdzdGUuZ3I7XFxuK1xcdHNrZXktXFx1MDAzZWMgfD0gcGdzdGUuZ2M7XFxuIFxcdHBnc3RlLmdyID0gMDtcXG4gXFxuIFxcdGRhdF91cGRhdGVfcHRlcF9zZChvbGQsIHBnc3RlLCBwdGVwKTtcXG4gXFx0cGdzdGVfc2V0X3VubG9jayhwdGVwLCBwZ3N0ZSk7XFxuLVxcdHJldHVybiByYztcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0YXRpYyBsb25nIGRhdF9yZXNldF9za2V5c19wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaylcXG5AQCAtODQ2LDYgKzg1MCw3IEBAIHN0YXRpYyBsb25nIF9kYXRfc2xvdF9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsXFxuIFxcdHN0cnVjdCBzbG90X3ByaXYgKnAgPSB3YWxrLVxcdTAwM2Vwcml2O1xcbiBcXHR1bmlvbiBjcnN0ZSBkdW1teSA9IHsgLnZhbCA9IHAtXFx1MDAzZXRva2VuIH07XFxuIFxcdHVuaW9uIHB0ZSBuZXdfcHRlLCBwdGUgPSBSRUFEX09OQ0UoKnB0ZXApO1xcbitcXHR1bmlvbiBwZ3N0ZSBwZ3N0ZTtcXG4gXFxuIFxcdG5ld19wdGUgPSBfUFRFX1RPSyhkdW1teS50b2sudHlwZSwgZHVtbXkudG9rLnBhcik7XFxuIFxcbkBAIC04NTMsNyArODU4LDExIEBAIHN0YXRpYyBsb25nIF9kYXRfc2xvdF9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsXFxuIFxcdGlmIChwdGUudmFsID09IG5ld19wdGUudmFsKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdGRhdF9wdGVwX3hjaGcocHRlcCwgbmV3X3B0ZSwgZ2ZuLCB3YWxrLVxcdTAwM2Vhc2NlLCBmYWxzZSk7XFxuK1xcdHBnc3RlID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7XFxuK1xcdHBnc3RlID0gX19kYXRfcHRlcF94Y2hnKHB0ZXAsIHBnc3RlLCBuZXdfcHRlLCBnZm4sIHdhbGstXFx1MDAzZWFzY2UsIGZhbHNlKTtcXG4rXFx0cGdzdGUuY21tYV9kID0gMDtcXG4rXFx0cGdzdGVfc2V0X3VubG9jayhwdGVwLCBwZ3N0ZSk7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9kYXQuaCBiL2FyY2gvczM5MC9rdm0vZGF0LmhcXG5pbmRleCBmYWQ2MDUzMDVlMDVjLi4xNDFlZTdiOWYwMTkxIDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9rdm0vZGF0LmhcXG4rKysgYi9hcmNoL3MzOTAva3ZtL2RhdC5oXFxuQEAgLTUzNyw3ICs1MzcsNyBAQCBpbnQgZGF0X3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgdW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZlxcbiBcXHRcXHRcXHR1bmlvbiBza2V5IHNrZXksIGJvb2wgbnEpO1xcbiBpbnQgZGF0X2NvbmRfc2V0X3N0b3JhZ2Vfa2V5KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1tYywgdW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4sXFxuIFxcdFxcdFxcdCAgICAgdW5pb24gc2tleSBza2V5LCB1bmlvbiBza2V5ICpvbGRrZXksIGJvb2wgbnEsIGJvb2wgbXIsIGJvb2wgbWMpO1xcbi1pbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4pO1xcbitpbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4sIHVuaW9uIHNrZXkgKnNrZXkpO1xcbiBsb25nIGRhdF9yZXNldF9za2V5cyh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IHN0YXJ0KTtcXG4gXFxuIHVuc2lnbmVkIGxvbmcgZGF0X2dldF9wdHZhbChzdHJ1Y3QgcGFnZV90YWJsZSAqdGFibGUsIHN0cnVjdCBwdHZhbF9wYXJhbSBwYXJhbSk7XFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jIGIvYXJjaC9zMzkwL2t2bS9mYXVsdGluLmNcXG5pbmRleCBmZWU4MDA0N2JkOTRmLi4zY2M0NWY3ZjViMmQ3IDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jXFxuKysrIGIvYXJjaC9zMzkwL2t2bS9mYXVsdGluLmNcXG5AQCAtOTEsOSArOTEsOSBAQCBpbnQga3ZtX3MzOTBfZmF1bHRpbl9nZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBndWVzdF9mYVxcbiBcXHRcXHQvKiBBY2Nlc3Mgb3V0c2lkZSBtZW1vcnksIGFkZHJlc3NpbmcgZXhjZXB0aW9uLiAqL1xcbiBcXHRcXHRpZiAoaXNfbm9zbG90X3BmbihmLVxcdTAwM2VwZm4pKVxcbiBcXHRcXHRcXHRyZXR1cm4gUEdNX0FERFJFU1NJTkc7XFxuLVxcdFxcdC8qIFNpZ25hbCBwZW5kaW5nOiB0cnkgYWdhaW4uICovXFxuLVxcdFxcdGlmIChmLVxcdTAwM2VwZm4gPT0gS1ZNX1BGTl9FUlJfU0lHUEVORElORylcXG4tXFx0XFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuK1xcdFxcdC8qIEZhdGFsIHNpZ25hbCBwZW5kaW5nOiBiYWlsIG91dC4gKi9cXG4rXFx0XFx0aWYgKGlzX3NpZ3BlbmRpbmdfcGZuKGYtXFx1MDAzZXBmbikpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVFI7XFxuIFxcdFxcdC8qIENoZWNrIGlmIGl0J3MgcmVhZC1vbmx5IG1lbW9yeTsgZG9uJ3QgdHJ5IHRvIGFjdHVhbGx5IGhhbmRsZSB0aGF0IGNhc2UuICovXFxuIFxcdFxcdGlmIChmLVxcdTAwM2VwZm4gPT0gS1ZNX1BGTl9FUlJfUk9fRkFVTFQpXFxuIFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcXG5pbmRleCA5ZTNlNmIwZDcyYWQ2Li42YjNmOTdhNzUxM2IzIDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcXG4rKysgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXFxuQEAgLTQ1LDEzICs0NSwxNiBAQCBzdGF0aWMgc3RydWN0IGt2bV9zMzkwX2dpYiAqZ2liO1xcbiBzdGF0aWMgaW50IHNjYV9leHRfY2FsbF9wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50ICpzcmNfaWQpXFxuIHtcXG4gXFx0c3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5zY2E7XFxuLVxcdHVuaW9uIGVzY2Ffc2lncF9jdHJsIHNpZ3BfY3RybCA9IHNjYS1cXHUwMDNlY3B1W3ZjcHUtXFx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcXG4rXFx0dW5pb24gZXNjYV9zaWdwX2N0cmwgc2lncF9jdHJsO1xcbiBcXG4gXFx0aWYgKCFrdm1fczM5MF90ZXN0X2NwdWZsYWdzKHZjcHUsIENQVVNUQVRfRUNBTExfUEVORCkpXFxuIFxcdFxcdHJldHVybiAwO1xcbitcXHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSkpXFxuK1xcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0QlVHX09OKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSk7XFxuIFxcbitcXHRzaWdwX2N0cmwgPSBzY2EtXFx1MDAzZWNwdVt2Y3B1LVxcdTAwM2V2Y3B1X2lkXS5zaWdwX2N0cmw7XFxuIFxcdGlmIChzcmNfaWQpXFxuIFxcdFxcdCpzcmNfaWQgPSBzaWdwX2N0cmwuc2NuO1xcbiBcXG5AQCAtNjAsMTMgKzYzLDE2IEBAIHN0YXRpYyBpbnQgc2NhX2V4dF9jYWxsX3BlbmRpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgKnNyY19pZClcXG4gXFxuIHN0YXRpYyBpbnQgc2NhX2luamVjdF9leHRfY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzcmNfaWQpXFxuIHtcXG4tXFx0c3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5zY2E7XFxuLVxcdHVuaW9uIGVzY2Ffc2lncF9jdHJsICpzaWdwX2N0cmwgPSBcXHUwMDI2c2NhLVxcdTAwM2VjcHVbdmNwdS1cXHUwMDNldmNwdV9pZF0uc2lncF9jdHJsO1xcbiBcXHR1bmlvbiBlc2NhX3NpZ3BfY3RybCBvbGRfdmFsLCBuZXdfdmFsID0gey5zY24gPSBzcmNfaWQsIC5jID0gMX07XFxuK1xcdHN0cnVjdCBlc2NhX2Jsb2NrICpzY2EgPSB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guc2NhO1xcbitcXHR1bmlvbiBlc2NhX3NpZ3BfY3RybCAqc2lncF9jdHJsO1xcbiBcXHRpbnQgZXhwZWN0LCByYztcXG4gXFxuIFxcdEJVR19PTigha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpO1xcbitcXHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4rXFx0c2lncF9jdHJsID0gXFx1MDAyNnNjYS1cXHUwMDNlY3B1W3ZjcHUtXFx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcXG4gXFx0b2xkX3ZhbCA9IFJFQURfT05DRSgqc2lncF9jdHJsKTtcXG4gXFx0b2xkX3ZhbC5jID0gMDtcXG4gXFxuQEAgLTg0LDEwICs5MCwxMyBAQCBzdGF0aWMgaW50IHNjYV9pbmplY3RfZXh0X2NhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc3JjX2lkKVxcbiBzdGF0aWMgdm9pZCBzY2FfY2xlYXJfZXh0X2NhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdHN0cnVjdCBlc2NhX2Jsb2NrICpzY2EgPSB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guc2NhO1xcbi1cXHR1bmlvbiBlc2NhX3NpZ3BfY3RybCAqc2lncF9jdHJsID0gXFx1MDAyNnNjYS1cXHUwMDNlY3B1W3ZjcHUtXFx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcXG4rXFx0dW5pb24gZXNjYV9zaWdwX2N0cmwgKnNpZ3BfY3RybDtcXG4gXFxuLVxcdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpXFxuK1xcdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkgfHwgIXZjcHUtXFx1MDAzZWFyY2guaW5pdGlhbGl6ZWQgfHwga3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSkpXFxuIFxcdFxcdHJldHVybjtcXG4rXFxuK1xcdC8qIEluaXRpYWxpemUgYWZ0ZXIgdGhlIGFib3ZlIGNoZWNrLCB0byBwcmV2ZW50IGdvaW5nIG91dCBvZiBib3VuZHMgKi9cXG4rXFx0c2lncF9jdHJsID0gXFx1MDAyNnNjYS1cXHUwMDNlY3B1W3ZjcHUtXFx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcXG4gXFx0a3ZtX3MzOTBfY2xlYXJfY3B1ZmxhZ3ModmNwdSwgQ1BVU1RBVF9FQ0FMTF9QRU5EKTtcXG4gXFxuIFxcdFdSSVRFX09OQ0Uoc2lncF9jdHJsLVxcdTAwM2V2YWx1ZSwgMCk7XFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xcbmluZGV4IDE1MGI1ZGQyMTcwZTIuLjUxOGE2OWM1NWU4NWMgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXFxuKysrIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXFxuQEAgLTU3MSw3ICs1NzEsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX2tleW9wKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3Qga3ZtICprdm0sIGludCBvcFxcbiBcXHRzd2l0Y2ggKG9wKSB7XFxuIFxcdGNhc2UgS1ZNX1MzOTBfS0VZT1BfU1NLRTpcXG4gXFx0XFx0ciA9IGRhdF9jb25kX3NldF9zdG9yYWdlX2tleShtYywgYXNjZSwgZ2ZuLCBza2V5LCBcXHUwMDI2c2tleSwgMCwgMCwgMCk7XFxuLVxcdFxcdGlmIChyIFxcdTAwM2U9IDApXFxuK1xcdFxcdGlmIChyID09IDAgfHwgciA9PSAxKVxcbiBcXHRcXHRcXHRyZXR1cm4gc2tleS5za2V5O1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBLVk1fUzM5MF9LRVlPUF9JU0tFOlxcbkBAIC01ODAsMTQgKzU4MCwxNCBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX2tleW9wKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3Qga3ZtICprdm0sIGludCBvcFxcbiBcXHRcXHRcXHRyZXR1cm4gc2tleS5za2V5O1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBLVk1fUzM5MF9LRVlPUF9SUkJFOlxcbi1cXHRcXHRyID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQoYXNjZSwgZ2ZuKTtcXG4tXFx0XFx0aWYgKHIgXFx1MDAzZSAwKVxcbi1cXHRcXHRcXHRyZXR1cm4gciBcXHUwMDNjXFx1MDAzYyAxO1xcbitcXHRcXHRyID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQoYXNjZSwgZ2ZuLCBcXHUwMDI2c2tleSk7XFxuK1xcdFxcdGlmICghcilcXG4rXFx0XFx0XFx0cmV0dXJuIHNrZXkuc2tleTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuLVxcdHJldHVybiByO1xcbitcXHRyZXR1cm4gciBcXHUwMDNlIDAgPyAtRUZBVUxUIDogcjtcXG4gfVxcbiBcXG4gLyogU2VjdGlvbjogZGV2aWNlIHJlbGF0ZWQgKi9cXG5AQCAtMTIxOSw4ICsxMjE5LDggQEAgc3RhdGljIHZvaWQga3ZtX3MzOTBfc3luY19yZXF1ZXN0X2Jyb2FkY2FzdChzdHJ1Y3Qga3ZtICprdm0sIGludCByZXEpXFxuIFxcbiAvKlxcbiAgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGt2bS1cXHUwMDNlc3JjdSBoZWxkIHRvIGF2b2lkIHJhY2VzIG9uIG1lbXNsb3RzLCBhbmQgd2l0aFxcbi0gKiBrdm0tXFx1MDAzZXNsb3RzX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsIGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKCksXFxuLSAqIGFuZCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKCkuXFxuKyAqIGt2bS1cXHUwMDNlc2xvdHNfYXJjaF9sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLFxcbisgKiBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbigpLCBhbmQga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cygpLlxcbiAgKi9cXG4gc3RhdGljIGludCBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKVxcbiB7XFxuQEAgLTEyNjUsNyArMTI2NSw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSlcXG4gfVxcbiBcXG4gLypcXG4tICogTXVzdCBiZSBjYWxsZWQgd2l0aCBrdm0tXFx1MDAzZXNsb3RzX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsXFxuKyAqIE11c3QgYmUgY2FsbGVkIHdpdGgga3ZtLVxcdTAwM2VzbG90c19hcmNoX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsXFxuICAqIGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbigpIGFuZCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKCkuXFxuICAqL1xcbiBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSlcXG5AQCAtMTMwMCw3ICsxMzAwLDkgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4ge1xcbiBcXHRpbnQgcmVzID0gLUVOWElPO1xcbiBcXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG4rXFx0Z3VhcmQoc3JjdSkoXFx1MDAyNmt2bS1cXHUwMDNlc3JjdSk7XFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19hcmNoX2xvY2spO1xcbitcXG4gXFx0c3dpdGNoIChhdHRyLVxcdTAwM2VhdHRyKSB7XFxuIFxcdGNhc2UgS1ZNX1MzOTBfVk1fTUlHUkFUSU9OX1NUQVJUOlxcbiBcXHRcXHRyZXMgPSBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oa3ZtKTtcXG5AQCAtMTMxMSw3ICsxMzEzLDYgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbiBcXG4gXFx0cmV0dXJuIHJlcztcXG4gfVxcbkBAIC0yMjE0LDcgKzIyMTUsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX2dldF9za2V5cyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9za2V5cyAqYXJncylcXG4gXFx0fVxcbiBcXG4gXFx0a3ZmcmVlKGtleXMpO1xcbi1cXHRyZXR1cm4gcjtcXG4rXFx0cmV0dXJuIHIgXFx1MDAzYz0gMCA/IHIgOiAtRUZBVUxUO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGt2bV9zMzkwX3NldF9za2V5cyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9za2V5cyAqYXJncylcXG5AQCAtMjI3Niw3ICsyMjc3LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfc2tleXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfc2tleXMgKmFyZ3MpXFxuIFxcdGt2bV9zMzkwX2ZyZWVfbW11X2NhY2hlKG1jKTtcXG4gb3V0OlxcbiBcXHRrdmZyZWUoa2V5cyk7XFxuLVxcdHJldHVybiByO1xcbitcXHRyZXR1cm4gciBcXHUwMDNjPSAwID8gciA6IC1FRkFVTFQ7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTIzODYsNyArMjM4Nyw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X2NtbWFfYml0cyhzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcbiBcXHRzZXRfYml0KEdNQVBfRkxBR19VU0VTX0NNTSwgXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5nbWFwLVxcdTAwM2VmbGFncyk7XFxuIFxcbi1cXHRyZXR1cm4gcjtcXG4rXFx0cmV0dXJuIHIgXFx1MDAzYz0gMCA/IHIgOiAtRUZBVUxUO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMjkzNCw2ICsyOTM1LDkgQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbiBcXHRjYXNlIEtWTV9TMzkwX0lOVEVSUlVQVDoge1xcbiBcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0IHMzOTBpbnQ7XFxuIFxcbitcXHRcXHRyID0gLUVJTlZBTDtcXG4rXFx0XFx0aWYgKGt2bV9pc191Y29udHJvbChrdm0pKVxcbitcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0ciA9IC1FRkFVTFQ7XFxuIFxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2czM5MGludCwgYXJncCwgc2l6ZW9mKHMzOTBpbnQpKSlcXG4gXFx0XFx0XFx0YnJlYWs7XFxuQEAgLTI5OTgsOSArMzAwMiw4IEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG4gXFx0XFx0ciA9IC1FRkFVTFQ7XFxuIFxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2YXJncywgYXJncCwgc2l6ZW9mKGFyZ3MpKSlcXG4gXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuLVxcdFxcdHIgPSBrdm1fczM5MF9nZXRfY21tYV9iaXRzKGt2bSwgXFx1MDAyNmFyZ3MpO1xcbi1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuK1xcdFxcdHNjb3BlZF9ndWFyZChtdXRleCwgXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfYXJjaF9sb2NrKVxcbitcXHRcXHRcXHRyID0ga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cyhrdm0sIFxcdTAwMjZhcmdzKTtcXG4gXFx0XFx0aWYgKCFyKSB7XFxuIFxcdFxcdFxcdHIgPSBjb3B5X3RvX3VzZXIoYXJncCwgXFx1MDAyNmFyZ3MsIHNpemVvZihhcmdzKSk7XFxuIFxcdFxcdFxcdGlmIChyKVxcbkBAIC0zMDE0LDkgKzMwMTcsOSBAQCBpbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuIFxcdFxcdHIgPSAtRUZBVUxUO1xcbiBcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNmFyZ3MsIGFyZ3AsIHNpemVvZihhcmdzKSkpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbitcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2FyY2hfbG9jayk7XFxuIFxcdFxcdHIgPSBrdm1fczM5MF9zZXRfY21tYV9iaXRzKGt2bSwgXFx1MDAyNmFyZ3MpO1xcbi1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19hcmNoX2xvY2spO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcbiBcXHRjYXNlIEtWTV9TMzkwX1BWX0NPTU1BTkQ6IHtcXG5AQCAtMzI0Nyw3ICszMjUwLDggQEAgc3RhdGljIHZvaWQga3ZtX3MzOTBfY3J5cHRvX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxcbiBcXG4gc3RhdGljIHZvaWQgc2NhX2Rpc3Bvc2Uoc3RydWN0IGt2bSAqa3ZtKVxcbiB7XFxuLVxcdGZyZWVfcGFnZXNfZXhhY3Qoa3ZtLVxcdTAwM2VhcmNoLnNjYSwgc2l6ZW9mKCprdm0tXFx1MDAzZWFyY2guc2NhKSk7XFxuK1xcdGlmIChrdm0tXFx1MDAzZWFyY2guc2NhKVxcbitcXHRcXHRmcmVlX3BhZ2VzX2V4YWN0KGt2bS1cXHUwMDNlYXJjaC5zY2EsIHNpemVvZigqa3ZtLVxcdTAwM2VhcmNoLnNjYSkpO1xcbiBcXHRrdm0tXFx1MDAzZWFyY2guc2NhID0gTlVMTDtcXG4gfVxcbiBcXG5AQCAtMzQ2MSw3ICszNDY1LDcgQEAgc3RhdGljIHZvaWQgc2NhX2RlbF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbiBcXHRzdHJ1Y3QgZXNjYV9ibG9jayAqc2NhID0gdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLnNjYTtcXG4gXFxuLVxcdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpXFxuK1xcdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkgfHwgIXZjcHUtXFx1MDAzZWFyY2guaW5pdGlhbGl6ZWQpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGNsZWFyX2JpdF9pbnYodmNwdS1cXHUwMDNldmNwdV9pZCwgKHVuc2lnbmVkIGxvbmcgKilzY2EtXFx1MDAzZW1jbik7XFxuQEAgLTM0ODEsOCArMzQ4NSw4IEBAIHN0YXRpYyB2b2lkIHNjYV9hZGRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuK1xcdFdSSVRFX09OQ0Uoc2NhLVxcdTAwM2VjcHVbdmNwdS1cXHUwMDNldmNwdV9pZF0uc2RhLCB2aXJ0X3RvX3BoeXModmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2spKTtcXG4gXFx0c2V0X2JpdF9pbnYodmNwdS1cXHUwMDNldmNwdV9pZCwgKHVuc2lnbmVkIGxvbmcgKilzY2EtXFx1MDAzZW1jbik7XFxuLVxcdHNjYS1cXHUwMDNlY3B1W3ZjcHUtXFx1MDAzZXZjcHVfaWRdLnNkYSA9IHZpcnRfdG9fcGh5cyh2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jayk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgc2NhX2Nhbl9hZGRfdmNwdShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZClcXG5AQCAtMzYxMyw2ICszNjE3LDkgQEAgdm9pZCBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRpZiAodGVzdF9rdm1fZmFjaWxpdHkodmNwdS1cXHUwMDNla3ZtLCA3NCkgfHwgdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLnVzZXJfaW5zdHIwIHx8XFxuIFxcdCAgICB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gudXNlcl9vcGVyZXhlYylcXG4gXFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZWljdGwgfD0gSUNUTF9PUEVSRVhDO1xcbitcXG4rXFx0LyogUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4ga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oKSBhbmQga3ZtX2FyY2hfdmNwdV9pb2N0bCgpICovXFxuK1xcdHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmluaXRpYWxpemVkLCB0cnVlKTtcXG4gfVxcbiBcXG4gc3RhdGljIGJvb2wga3ZtX2hhc19wY2ttb19zdWJmdW5jKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBucilcXG5AQCAtMzY3NCw3ICszNjgxLDggQEAgc3RhdGljIHZvaWQga3ZtX3MzOTBfdmNwdV9jcnlwdG9fc2V0dXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXG4gdm9pZCBrdm1fczM5MF92Y3B1X3Vuc2V0dXBfY21tYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4tXFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydCh2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jay1cXHUwMDNlY2JybG8pKTtcXG4rXFx0aWYgKHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrLVxcdTAwM2VjYnJsbylcXG4rXFx0XFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydCh2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jay1cXHUwMDNlY2JybG8pKTtcXG4gXFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZWNicmxvID0gMDtcXG4gfVxcbiBcXG5AQCAtMzc5MiwyMSArMzgwMCwyMSBAQCBpbnQga3ZtX2FyY2hfdmNwdV9wcmVjcmVhdGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitERUZJTkVfRlJFRShzaWVfcGFnZSwgc3RydWN0IHNpZV9wYWdlICosIGlmIChfVCkgZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKShfVCkpKVxcbitcXG4gaW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbi1cXHRzdHJ1Y3Qgc2llX3BhZ2UgKnNpZV9wYWdlO1xcbitcXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYyBfX2ZyZWUoa3ZtX3MzOTBfbW11X2NhY2hlKSA9IE5VTEw7XFxuK1xcdHN0cnVjdCBzaWVfcGFnZSAqc2llX3BhZ2UgX19mcmVlKHNpZV9wYWdlKSA9IE5VTEw7XFxuIFxcdGludCByYztcXG4gXFxuIFxcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHNpZV9wYWdlKSAhPSA0MDk2KTtcXG4tXFx0dmNwdS1cXHUwMDNlYXJjaC5tYyA9IGt2bV9zMzkwX25ld19tbXVfY2FjaGUoKTtcXG4tXFx0aWYgKCF2Y3B1LVxcdTAwM2VhcmNoLm1jKVxcbitcXHRtYyA9IGt2bV9zMzkwX25ld19tbXVfY2FjaGUoKTtcXG4rXFx0aWYgKCFtYylcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdHNpZV9wYWdlID0gKHN0cnVjdCBzaWVfcGFnZSAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4tXFx0aWYgKCFzaWVfcGFnZSkge1xcbi1cXHRcXHRrdm1fczM5MF9mcmVlX21tdV9jYWNoZSh2Y3B1LVxcdTAwM2VhcmNoLm1jKTtcXG4tXFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5tYyA9IE5VTEw7XFxuK1xcdGlmICghc2llX3BhZ2UpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi1cXHR9XFxuIFxcbiBcXHR2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jayA9IFxcdTAwMjZzaWVfcGFnZS1cXHUwMDNlc2llX2Jsb2NrO1xcbiBcXHR2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jay1cXHUwMDNlaXRkYmEgPSB2aXJ0X3RvX3BoeXMoXFx1MDAyNnNpZV9wYWdlLVxcdTAwM2VpdGRiKTtcXG5AQCAtMzg0OCwxMCArMzg1Niw5IEBAIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdFxcdHZjcHUtXFx1MDAzZXJ1bi1cXHUwMDNla3ZtX3ZhbGlkX3JlZ3MgfD0gS1ZNX1NZTkNfRlBSUztcXG4gXFxuIFxcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cXHUwMDNla3ZtKSkge1xcbi1cXHRcXHRyYyA9IC1FTk9NRU07XFxuIFxcdFxcdHZjcHUtXFx1MDAzZWFyY2guZ21hcCA9IGdtYXBfbmV3X2NoaWxkKHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5nbWFwLCAtMVVMKTtcXG4gXFx0XFx0aWYgKCF2Y3B1LVxcdTAwM2VhcmNoLmdtYXApXFxuLVxcdFxcdFxcdGdvdG8gb3V0X2ZyZWVfc2llX2Jsb2NrO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0fVxcbiBcXG4gXFx0Vk1fRVZFTlQodmNwdS1cXHUwMDNla3ZtLCAzLCBcXFwiY3JlYXRlIGNwdSAlZCBhdCAweCVwLCBzaWUgYmxvY2sgYXQgMHglcFxcXCIsXFxuQEAgLTM4NTksMjAgKzM4NjYsMTkgQEAgaW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0dHJhY2Vfa3ZtX3MzOTBfY3JlYXRlX3ZjcHUodmNwdS1cXHUwMDNldmNwdV9pZCwgdmNwdSwgdmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2spO1xcbiBcXG4gXFx0cmMgPSBrdm1fczM5MF92Y3B1X3NldHVwKHZjcHUpO1xcbi1cXHRpZiAocmMpXFxuLVxcdFxcdGdvdG8gb3V0X3Vjb250cm9sX3VuaW5pdDtcXG4rXFx0aWYgKHJjKSB7XFxuK1xcdFxcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cXHUwMDNla3ZtKSkge1xcbitcXHRcXHRcXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2ssIFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guZ21hcC1cXHUwMDNlY2hpbGRyZW5fbG9jaylcXG4rXFx0XFx0XFx0XFx0Z21hcF9yZW1vdmVfY2hpbGQodmNwdS1cXHUwMDNlYXJjaC5nbWFwKTtcXG4rXFx0XFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5nbWFwID0gZ21hcF9wdXQodmNwdS1cXHUwMDNlYXJjaC5nbWFwKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcdH1cXG4gXFxuK1xcdHZjcHUtXFx1MDAzZWFyY2gubWMgPSBub19mcmVlX3B0cihtYyk7XFxuK1xcdHNpZV9wYWdlID0gTlVMTDtcXG4gXFx0a3ZtX3MzOTBfdXBkYXRlX3RvcG9sb2d5X2NoYW5nZV9yZXBvcnQodmNwdS1cXHUwMDNla3ZtLCAxKTtcXG4gXFx0cmV0dXJuIDA7XFxuLVxcbi1vdXRfdWNvbnRyb2xfdW5pbml0Olxcbi1cXHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSkpIHtcXG4tXFx0XFx0Z21hcF9yZW1vdmVfY2hpbGQodmNwdS1cXHUwMDNlYXJjaC5nbWFwKTtcXG4tXFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5nbWFwID0gZ21hcF9wdXQodmNwdS1cXHUwMDNlYXJjaC5nbWFwKTtcXG4tXFx0fVxcbi1vdXRfZnJlZV9zaWVfYmxvY2s6XFxuLVxcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykodmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2spKTtcXG4tXFx0cmV0dXJuIHJjO1xcbiB9XFxuIFxcbiBpbnQga3ZtX2FyY2hfdmNwdV9ydW5uYWJsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuQEAgLTUwMzksNiArNTA0NSwxMCBAQCBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHQgICAga3ZtX3J1bi1cXHUwMDNla3ZtX2RpcnR5X3JlZ3MgXFx1MDAyNiB+S1ZNX1NZTkNfUzM5MF9WQUxJRF9GSUVMRFMpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4rXFx0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZSgpICovXFxuK1xcdGlmICghc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5pbml0aWFsaXplZCkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0dmNwdV9sb2FkKHZjcHUpO1xcbiBcXG4gXFx0aWYgKGd1ZXN0ZGJnX2V4aXRfcGVuZGluZyh2Y3B1KSkge1xcbkBAIC01NDQ3LDYgKzU0NTcsOCBAQCBsb25nIGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCxcXG4gXFx0XFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCBzMzkwaW50O1xcbiBcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfaXJxIHMzOTBpcnEgPSB7fTtcXG4gXFxuK1xcdFxcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cXHUwMDNla3ZtKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2czM5MGludCwgYXJncCwgc2l6ZW9mKHMzOTBpbnQpKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcdFxcdGlmIChzMzkwaW50X3RvX3MzOTBpcnEoXFx1MDAyNnMzOTBpbnQsIFxcdTAwMjZzMzkwaXJxKSlcXG5AQCAtNTUyMyw2ICs1NTM1LDEwIEBAIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcXG4gXFx0bG9uZyByO1xcbiBcXHR1MTYgcmMsIHJyYztcXG4gXFxuK1xcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUoKSAqL1xcbitcXHRpZiAoIXNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guaW5pdGlhbGl6ZWQpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuIFxcdHZjcHVfbG9hZCh2Y3B1KTtcXG4gXFxuIFxcdHN3aXRjaCAoaW9jdGwpIHtcXG5AQCAtNTc5NCwxNCArNTgxMCwzMCBAQCBpbnQga3ZtX2FyY2hfcHJlcGFyZV9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBsb25nIGNtbWFfZF9jb3VudF9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaylcXG4re1xcbitcXHR1bmlvbiBwZ3N0ZSBwZ3N0ZTtcXG4rXFxuK1xcdHBnc3RlID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7XFxuK1xcdGlmIChwZ3N0ZS5jbW1hX2QpIHtcXG4rXFx0XFx0cGdzdGUuY21tYV9kID0gMDtcXG4rXFx0XFx0YXRvbWljNjRfZGVjKHdhbGstXFx1MDAzZXByaXYpO1xcbitcXHR9XFxuK1xcdHBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm9sZCxcXG4gXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbmV3LFxcbiBcXHRcXHRcXHRcXHRlbnVtIGt2bV9tcl9jaGFuZ2UgY2hhbmdlKVxcbiB7XFxuLVxcdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jID0gTlVMTDtcXG4rXFx0Y29uc3Qgc3RydWN0IGRhdF93YWxrX29wcyBvcHMgPSB7IC5wdGVfZW50cnkgPSBjbW1hX2RfY291bnRfcHRlLCB9O1xcbitcXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYyBfX2ZyZWUoa3ZtX3MzOTBfbW11X2NhY2hlKSA9IE5VTEw7XFxuIFxcdGludCByYyA9IDA7XFxuIFxcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcXG4rXFxuIFxcdGlmIChjaGFuZ2UgPT0gS1ZNX01SX0ZMQUdTX09OTFkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuQEAgLTU4MTIsNiArNTg0NCwxMiBAQCB2b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0fVxcbiBcXG4gXFx0c2NvcGVkX2d1YXJkKHdyaXRlX2xvY2ssIFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9sb2NrKSB7XFxuK1xcdFxcdGlmIChrdm0tXFx1MDAzZWFyY2gubWlncmF0aW9uX21vZGUgXFx1MDAyNlxcdTAwMjYga3ZtLVxcdTAwM2VhcmNoLnVzZV9jbW1hIFxcdTAwMjZcXHUwMDI2IG9sZCkge1xcbitcXHRcXHRcXHRfZGF0X3dhbGtfZ2ZuX3JhbmdlKG9sZC1cXHUwMDNlYmFzZV9nZm4sIG9sZC1cXHUwMDNlYmFzZV9nZm4gKyBvbGQtXFx1MDAzZW5wYWdlcyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGt2bS1cXHUwMDNlYXJjaC5nbWFwLVxcdTAwM2Vhc2NlLCBcXHUwMDI2b3BzLCBEQVRfV0FMS19JR05fSE9MRVMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmNtbWFfZGlydHlfcGFnZXMpO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRzd2l0Y2ggKGNoYW5nZSkge1xcbiBcXHRcXHRjYXNlIEtWTV9NUl9ERUxFVEU6XFxuIFxcdFxcdFxcdHJjID0gZGF0X2RlbGV0ZV9zbG90KG1jLCBrdm0tXFx1MDAzZWFyY2guZ21hcC1cXHUwMDNlYXNjZSwgb2xkLVxcdTAwM2ViYXNlX2dmbiwgb2xkLVxcdTAwM2VucGFnZXMpO1xcbkBAIC01ODMzLDcgKzU4NzEsNiBAQCB2b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4gb3V0OlxcbiBcXHRpZiAocmMpXFxuIFxcdFxcdHByX3dhcm4oXFxcImZhaWxlZCB0byBjb21taXQgbWVtb3J5IHJlZ2lvblxcXFxuXFxcIik7XFxuLVxcdGt2bV9zMzkwX2ZyZWVfbW11X2NhY2hlKG1jKTtcXG4gXFx0cmV0dXJuO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3ByaXYuYyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jXFxuaW5kZXggYWQwZGRjNDMzYTczYy4uYjFiYTI0YzM0NmVmYSAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva3ZtL3ByaXYuY1xcbisrKyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jXFxuQEAgLTI4OSw2ICsyODksNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9pc2tlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gc3RhdGljIGludCBoYW5kbGVfcnJiZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBnYWRkcjtcXG4rXFx0dW5pb24gc2tleSBza2V5O1xcbiBcXHRpbnQgcmVnMSwgcmVnMjtcXG4gXFx0aW50IHJjO1xcbiBcXG5AQCAtMzA3LDEyICszMDgsMTIgQEAgc3RhdGljIGludCBoYW5kbGVfcnJiZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdGdhZGRyID0ga3ZtX3MzOTBfbG9naWNhbF90b19lZmZlY3RpdmUodmNwdSwgZ2FkZHIpO1xcbiBcXHRnYWRkciA9IGt2bV9zMzkwX3JlYWxfdG9fYWJzKHZjcHUsIGdhZGRyKTtcXG4gXFx0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlbW11X2xvY2spXFxuLVxcdFxcdHJjID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodmNwdS1cXHUwMDNlYXJjaC5nbWFwLVxcdTAwM2Vhc2NlLCBncGFfdG9fZ2ZuKGdhZGRyKSk7XFxuK1xcdFxcdHJjID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodmNwdS1cXHUwMDNlYXJjaC5nbWFwLVxcdTAwM2Vhc2NlLCBncGFfdG9fZ2ZuKGdhZGRyKSwgXFx1MDAyNnNrZXkpO1xcbiBcXHRpZiAocmMgXFx1MDAzZSAwKVxcbiBcXHRcXHRyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIHJjKTtcXG4gXFx0aWYgKHJjIFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHJjO1xcbi1cXHRrdm1fczM5MF9zZXRfcHN3X2NjKHZjcHUsIHJjKTtcXG4rXFx0a3ZtX3MzOTBfc2V0X3Bzd19jYyh2Y3B1LCAoc2tleS5za2V5IFxcdTAwM2VcXHUwMDNlIDEpIFxcdTAwMjYgMyk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0xMjYwLDggKzEyNjEsOSBAQCBzdGF0aWMgaW50IGhhbmRsZV9lc3NhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0LyogUmV0cnkgdGhlIEVTU0EgaW5zdHJ1Y3Rpb24gKi9cXG4gXFx0XFx0a3ZtX3MzOTBfcmV0cnlfaW5zdHIodmNwdSk7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdHNjb3BlZF9ndWFyZChyZWFkX2xvY2ssIFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZW1tdV9sb2NrKVxcbi1cXHRcXHRcXHRpID0gX19kb19lc3NhKHZjcHUsIG9yYyk7XFxuK1xcdFxcdHNjb3BlZF9ndWFyZChtdXRleCwgXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlc2xvdHNfYXJjaF9sb2NrKVxcbitcXHRcXHRcXHRzY29wZWRfZ3VhcmQocmVhZF9sb2NrLCBcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VtbXVfbG9jaylcXG4rXFx0XFx0XFx0XFx0aSA9IF9fZG9fZXNzYSh2Y3B1LCBvcmMpO1xcbiBcXHRcXHRpZiAoaSBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdHJldHVybiBpO1xcbiBcXHRcXHQvKiBBY2NvdW50IGZvciB0aGUgcG9zc2libGUgZXh0cmEgY2JybCBlbnRyeSAqL1xcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3B2LmMgYi9hcmNoL3MzOTAva3ZtL3B2LmNcXG5pbmRleCAxYmVhY2M4NDFjYTg1Li5iMDJlMDE1OWQzY2QyIDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9rdm0vcHYuY1xcbisrKyBiL2FyY2gvczM5MC9rdm0vcHYuY1xcbkBAIC0yNDQsNiArMjQ0LDI0IEBAIHN0YXRpYyB2b2lkIGt2bV9zMzkwX2NsZWFyX3B2X3N0YXRlKHN0cnVjdCBrdm0gKmt2bSlcXG4gXFx0a3ZtLVxcdTAwM2VhcmNoLnB2LnN0b3JfdmFyID0gTlVMTDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQga3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGZyZWVfc3Rvcl9iYXNlKVxcbit7XFxuK1xcdGlmIChmcmVlX3N0b3JfYmFzZSlcXG4rXFx0XFx0ZnJlZV9wYWdlcyh2Y3B1LVxcdTAwM2VhcmNoLnB2LnN0b3JfYmFzZSwgZ2V0X29yZGVyKHV2X2luZm8uZ3Vlc3RfY3B1X3N0b3JfbGVuKSk7XFxuK1xcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzaWRhX2FkZHIodmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2spKTtcXG4rXFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZXB2X2hhbmRsZV9jcHUgPSAwO1xcbitcXHR2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jay1cXHUwMDNlcHZfaGFuZGxlX2NvbmZpZyA9IDA7XFxuK1xcdG1lbXNldChcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5wdiwgMCwgc2l6ZW9mKHZjcHUtXFx1MDAzZWFyY2gucHYpKTtcXG4rXFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZXNkZiA9IDA7XFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBzaWRhZCBmaWVsZCAoZm9yIHNkZiA9PSAyKSBpcyBub3cgdGhlIGdiZWEgZmllbGQgKGZvciBzZGYgPT0gMCkuXFxuK1xcdCAqIFVzZSB0aGUgcmVzZXQgdmFsdWUgb2YgZ2JlYSB0byBhdm9pZCBsZWFraW5nIHRoZSBrZXJuZWwgcG9pbnRlciBvZlxcbitcXHQgKiB0aGUganVzdCBmcmVlZCBzaWRhLlxcbitcXHQgKi9cXG4rXFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZWdiZWEgPSAxO1xcbitcXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfVExCX0ZMVVNILCB2Y3B1KTtcXG4rfVxcbitcXG4gaW50IGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXFxuIHtcXG4gXFx0aW50IGNjO1xcbkBAIC0yNTgsMjQgKzI3Niw5IEBAIGludCBrdm1fczM5MF9wdl9kZXN0cm95X2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKVxcbiBcXHRXQVJOX09OQ0UoY2MsIFxcXCJwcm90dmlydCBkZXN0cm95IGNwdSBmYWlsZWQgcmMgJXggcnJjICV4XFxcIiwgKnJjLCAqcnJjKTtcXG4gXFxuIFxcdC8qIEludGVuZGVkIG1lbW9yeSBsZWFrIGZvciBzb21ldGhpbmcgdGhhdCBzaG91bGQgbmV2ZXIgaGFwcGVuLiAqL1xcbi1cXHRpZiAoIWNjKVxcbi1cXHRcXHRmcmVlX3BhZ2VzKHZjcHUtXFx1MDAzZWFyY2gucHYuc3Rvcl9iYXNlLFxcbi1cXHRcXHRcXHQgICBnZXRfb3JkZXIodXZfaW5mby5ndWVzdF9jcHVfc3Rvcl9sZW4pKTtcXG4tXFxuLVxcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzaWRhX2FkZHIodmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2spKTtcXG4tXFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZXB2X2hhbmRsZV9jcHUgPSAwO1xcbi1cXHR2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jay1cXHUwMDNlcHZfaGFuZGxlX2NvbmZpZyA9IDA7XFxuLVxcdG1lbXNldChcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5wdiwgMCwgc2l6ZW9mKHZjcHUtXFx1MDAzZWFyY2gucHYpKTtcXG4tXFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZXNkZiA9IDA7XFxuLVxcdC8qXFxuLVxcdCAqIFRoZSBzaWRhZCBmaWVsZCAoZm9yIHNkZiA9PSAyKSBpcyBub3cgdGhlIGdiZWEgZmllbGQgKGZvciBzZGYgPT0gMCkuXFxuLVxcdCAqIFVzZSB0aGUgcmVzZXQgdmFsdWUgb2YgZ2JlYSB0byBhdm9pZCBsZWFraW5nIHRoZSBrZXJuZWwgcG9pbnRlciBvZlxcbi1cXHQgKiB0aGUganVzdCBmcmVlZCBzaWRhLlxcbi1cXHQgKi9cXG4tXFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZWdiZWEgPSAxO1xcbi1cXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfVExCX0ZMVVNILCB2Y3B1KTtcXG4rXFx0a3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUodmNwdSwgIWNjKTtcXG4gXFxuLVxcdHJldHVybiBjYyA/IEVJTyA6IDA7XFxuK1xcdHJldHVybiBjYyA/IC1FSU8gOiAwO1xcbiB9XFxuIFxcbiBpbnQga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKVxcbkBAIC0zMTksOSArMzIyLDcgQEAgaW50IGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYylcXG4gXFx0XFx0ICAgICB1dmNiLmhlYWRlci5ycmMpO1xcbiBcXG4gXFx0aWYgKGNjKSB7XFxuLVxcdFxcdHUxNiBkdW1teTtcXG4tXFxuLVxcdFxcdGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHZjcHUsIFxcdTAwMjZkdW1teSwgXFx1MDAyNmR1bW15KTtcXG4rXFx0XFx0a3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUodmNwdSwgdHJ1ZSk7XFxuIFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXHR9XFxuIFxcbkBAIC04MDksNyArODEwLDcgQEAgc3RhdGljIGludCB1bnBhY2tfb25lKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1NjQgdHdlYWssXFxuIFxcdFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRUFHQUlOKVxcbitcXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRUFHQUlOIFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRUlOVFIpXFxuIFxcdFxcdEtWTV9VVl9FVkVOVChrdm0sIDMsIFxcXCJQUk9UVklSVCBWTSBVTlBBQ0s6IGZhaWxlZCBhZGRyICVsbHggd2l0aCByYyAleCBycmMgJXhcXFwiLFxcbiBcXHRcXHRcXHQgICAgIHV2Y2IuZ2FkZHIsICpyYywgKnJyYyk7XFxuIFxcdHJldHVybiByZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjA5OjQ5LjY4NTcwNTAzNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQxMjM1MDkzNTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcmNoX3ZjcHVfY3JlYXRlXCIsXG4gICAgXCJrdm1fYXJjaF92Y3B1X2lvY3RsX3J1blwiLFxuICAgIFwia3ZtX2FyY2hfdmNwdV9pb2N0bFwiLFxuICAgIFwia3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bFwiLFxuICAgIFwia3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvblwiLFxuICAgIFwia3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25cIixcbiAgICBcImt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1XCIsXG4gICAgXCJrdm1fczM5MF9wdl9jcmVhdGVfY3B1XCIsXG4gICAgXCJoYW5kbGVfcnJiZVwiLFxuICAgIFwiaGFuZGxlX2Vzc2FcIixcbiAgICBcImt2bV9zMzkwX2tleW9wXCIsXG4gICAgXCJkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgczM5MCBLVk0gaW1wbGVtZW50YXRpb24sIGluY2x1ZGluZyBmaXhpbmcgcmFjZSBjb25kaXRpb25zIGR1cmluZyB2Q1BVIGNyZWF0aW9uL2luaXRpYWxpemF0aW9uLCBmaXhpbmcgbWVtb3J5IGxlYWtzLCBhbmQgdXBkYXRpbmcgbG9ja2luZyBtZWNoYW5pc21zICh1c2luZyBzbG90c19hcmNoX2xvY2spLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBvZiBLVk0gaW9jdGxzIGFuZCBtZW1vcnkgbWFuYWdlbWVudCwgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTQ5NzA2NDdjNGIzYzkyNDU2ZGUzY2RmMDAzNmZmODdiZGRiMjNjNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMgMTc6MDk6NDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5pbmRleCBlYWEzNGM1YmQzYzExLi5lZGY3NWI2YWQyMGNlIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtNDQwLDYgKzQ0MCw3IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcbiBcdGJvb2wgc2tleV9lbmFibGVkO1xuIFx0LyogSW5kaWNhdG9yIGlmIHRoZSBhY2Nlc3MgcmVnaXN0ZXJzIGhhdmUgYmVlbiBsb2FkZWQgZnJvbSBndWVzdCAqL1xuIFx0Ym9vbCBhY3JzX2xvYWRlZDtcbitcdGJvb2wgaW5pdGlhbGl6ZWQ7XG4gXHRzdHJ1Y3Qga3ZtX3MzOTBfcHZfdmNwdSBwdjtcbiBcdHVuaW9uIGRpYWczMThfaW5mbyBkaWFnMzE4X2luZm87XG4gXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYztcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2RhdC5jIGIvYXJjaC9zMzkwL2t2bS9kYXQuY1xuaW5kZXggZWQ0MjU5ZDE3NjI5NS4uM2YyZDZlODkwMmQ3NiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vZGF0LmNcbisrKyBiL2FyY2gvczM5MC9rdm0vZGF0LmNcbkBAIC03NTUsMTMgKzc1NSwxNSBAQCBpbnQgZGF0X2NvbmRfc2V0X3N0b3JhZ2Vfa2V5KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1tYywgdW5pb24gYXNjZSBhc2NlLCBnZlxuIFx0cmV0dXJuIHJjO1xuIH1cbiBcbi1pbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4pXG4raW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLCB1bmlvbiBza2V5ICpza2V5KVxuIHtcbiBcdHVuaW9uIHBnc3RlIHBnc3RlLCBvbGQ7XG4gXHR1bmlvbiBjcnN0ZSAqY3JzdGVwO1xuIFx0dW5pb24gcHRlICpwdGVwO1xuIFx0aW50IHJjO1xuIFxuK1x0c2tleS1cdTAwM2Vza2V5ID0gMDtcbitcbiBcdHJjID0gZGF0X2VudHJ5X3dhbGsoTlVMTCwgZ2ZuLCBhc2NlLCBEQVRfV0FMS19BTlksIFRBQkxFX1RZUEVfUEFHRV9UQUJMRSwgXHUwMDI2Y3JzdGVwLCBcdTAwMjZwdGVwKTtcbiBcdGlmIChyYylcbiBcdFx0cmV0dXJuIHJjO1xuQEAgLTc3MSwyMSArNzczLDIzIEBAIGludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbilcbiBcbiBcdFx0aWYgKCFjcnN0ZS5oLmZjIHx8ICFjcnN0ZS5zLmZjMS5wcilcbiBcdFx0XHRyZXR1cm4gMDtcbi1cdFx0cmV0dXJuIHBhZ2VfcmVzZXRfcmVmZXJlbmNlZChsYXJnZV9jcnN0ZV90b19waHlzKCpjcnN0ZXAsIGdmbikpO1xuK1x0XHRza2V5LVx1MDAzZXNrZXkgPSBwYWdlX3Jlc2V0X3JlZmVyZW5jZWQobGFyZ2VfY3JzdGVfdG9fcGh5cygqY3JzdGVwLCBnZm4pKSBcdTAwM2NcdTAwM2MgMTtcbitcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXHRvbGQgPSBwZ3N0ZV9nZXRfbG9jayhwdGVwKTtcbiBcdHBnc3RlID0gb2xkO1xuIFxuIFx0aWYgKCFwdGVwLVx1MDAzZWguaSkge1xuLVx0XHRyYyA9IHBhZ2VfcmVzZXRfcmVmZXJlbmNlZChwdGVfb3JpZ2luKCpwdGVwKSk7XG4tXHRcdHBnc3RlLmhyID0gcmMgXHUwMDNlXHUwMDNlIDE7XG4rXHRcdHNrZXktXHUwMDNlc2tleSA9IHBhZ2VfcmVzZXRfcmVmZXJlbmNlZChwdGVfb3JpZ2luKCpwdGVwKSkgXHUwMDNjXHUwMDNjIDE7XG4rXHRcdHBnc3RlLmhyID0gc2tleS1cdTAwM2VyO1xuIFx0fVxuLVx0cmMgfD0gKHBnc3RlLmdyIFx1MDAzY1x1MDAzYyAxKSB8IHBnc3RlLmdjO1xuK1x0c2tleS1cdTAwM2VyIHw9IHBnc3RlLmdyO1xuK1x0c2tleS1cdTAwM2VjIHw9IHBnc3RlLmdjO1xuIFx0cGdzdGUuZ3IgPSAwO1xuIFxuIFx0ZGF0X3VwZGF0ZV9wdGVwX3NkKG9sZCwgcGdzdGUsIHB0ZXApO1xuIFx0cGdzdGVfc2V0X3VubG9jayhwdGVwLCBwZ3N0ZSk7XG4tXHRyZXR1cm4gcmM7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGxvbmcgZGF0X3Jlc2V0X3NrZXlzX3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxuQEAgLTg0Niw2ICs4NTAsNyBAQCBzdGF0aWMgbG9uZyBfZGF0X3Nsb3RfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbFxuIFx0c3RydWN0IHNsb3RfcHJpdiAqcCA9IHdhbGstXHUwMDNlcHJpdjtcbiBcdHVuaW9uIGNyc3RlIGR1bW15ID0geyAudmFsID0gcC1cdTAwM2V0b2tlbiB9O1xuIFx0dW5pb24gcHRlIG5ld19wdGUsIHB0ZSA9IFJFQURfT05DRSgqcHRlcCk7XG4rXHR1bmlvbiBwZ3N0ZSBwZ3N0ZTtcbiBcbiBcdG5ld19wdGUgPSBfUFRFX1RPSyhkdW1teS50b2sudHlwZSwgZHVtbXkudG9rLnBhcik7XG4gXG5AQCAtODUzLDcgKzg1OCwxMSBAQCBzdGF0aWMgbG9uZyBfZGF0X3Nsb3RfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbFxuIFx0aWYgKHB0ZS52YWwgPT0gbmV3X3B0ZS52YWwpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0ZGF0X3B0ZXBfeGNoZyhwdGVwLCBuZXdfcHRlLCBnZm4sIHdhbGstXHUwMDNlYXNjZSwgZmFsc2UpO1xuK1x0cGdzdGUgPSBwZ3N0ZV9nZXRfbG9jayhwdGVwKTtcbitcdHBnc3RlID0gX19kYXRfcHRlcF94Y2hnKHB0ZXAsIHBnc3RlLCBuZXdfcHRlLCBnZm4sIHdhbGstXHUwMDNlYXNjZSwgZmFsc2UpO1xuK1x0cGdzdGUuY21tYV9kID0gMDtcbitcdHBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpO1xuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZGF0LmggYi9hcmNoL3MzOTAva3ZtL2RhdC5oXG5pbmRleCBmYWQ2MDUzMDVlMDVjLi4xNDFlZTdiOWYwMTkxIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9kYXQuaFxuKysrIGIvYXJjaC9zMzkwL2t2bS9kYXQuaFxuQEAgLTUzNyw3ICs1MzcsNyBAQCBpbnQgZGF0X3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgdW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZlxuIFx0XHRcdHVuaW9uIHNrZXkgc2tleSwgYm9vbCBucSk7XG4gaW50IGRhdF9jb25kX3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLFxuIFx0XHRcdCAgICAgdW5pb24gc2tleSBza2V5LCB1bmlvbiBza2V5ICpvbGRrZXksIGJvb2wgbnEsIGJvb2wgbXIsIGJvb2wgbWMpO1xuLWludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbik7XG4raW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLCB1bmlvbiBza2V5ICpza2V5KTtcbiBsb25nIGRhdF9yZXNldF9za2V5cyh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IHN0YXJ0KTtcbiBcbiB1bnNpZ25lZCBsb25nIGRhdF9nZXRfcHR2YWwoc3RydWN0IHBhZ2VfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgcHR2YWxfcGFyYW0gcGFyYW0pO1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jIGIvYXJjaC9zMzkwL2t2bS9mYXVsdGluLmNcbmluZGV4IGZlZTgwMDQ3YmQ5NGYuLjNjYzQ1ZjdmNWIyZDcgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uY1xuKysrIGIvYXJjaC9zMzkwL2t2bS9mYXVsdGluLmNcbkBAIC05MSw5ICs5MSw5IEBAIGludCBrdm1fczM5MF9mYXVsdGluX2dmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGd1ZXN0X2ZhXG4gXHRcdC8qIEFjY2VzcyBvdXRzaWRlIG1lbW9yeSwgYWRkcmVzc2luZyBleGNlcHRpb24uICovXG4gXHRcdGlmIChpc19ub3Nsb3RfcGZuKGYtXHUwMDNlcGZuKSlcbiBcdFx0XHRyZXR1cm4gUEdNX0FERFJFU1NJTkc7XG4tXHRcdC8qIFNpZ25hbCBwZW5kaW5nOiB0cnkgYWdhaW4uICovXG4tXHRcdGlmIChmLVx1MDAzZXBmbiA9PSBLVk1fUEZOX0VSUl9TSUdQRU5ESU5HKVxuLVx0XHRcdHJldHVybiAtRUFHQUlOO1xuK1x0XHQvKiBGYXRhbCBzaWduYWwgcGVuZGluZzogYmFpbCBvdXQuICovXG4rXHRcdGlmIChpc19zaWdwZW5kaW5nX3BmbihmLVx1MDAzZXBmbikpXG4rXHRcdFx0cmV0dXJuIC1FSU5UUjtcbiBcdFx0LyogQ2hlY2sgaWYgaXQncyByZWFkLW9ubHkgbWVtb3J5OyBkb24ndCB0cnkgdG8gYWN0dWFsbHkgaGFuZGxlIHRoYXQgY2FzZS4gKi9cbiBcdFx0aWYgKGYtXHUwMDNlcGZuID09IEtWTV9QRk5fRVJSX1JPX0ZBVUxUKVxuIFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1xuaW5kZXggOWUzZTZiMGQ3MmFkNi4uNmIzZjk3YTc1MTNiMyAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcbisrKyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcbkBAIC00NSwxMyArNDUsMTYgQEAgc3RhdGljIHN0cnVjdCBrdm1fczM5MF9naWIgKmdpYjtcbiBzdGF0aWMgaW50IHNjYV9leHRfY2FsbF9wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50ICpzcmNfaWQpXG4ge1xuIFx0c3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guc2NhO1xuLVx0dW5pb24gZXNjYV9zaWdwX2N0cmwgc2lncF9jdHJsID0gc2NhLVx1MDAzZWNwdVt2Y3B1LVx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcbitcdHVuaW9uIGVzY2Ffc2lncF9jdHJsIHNpZ3BfY3RybDtcbiBcbiBcdGlmICgha3ZtX3MzOTBfdGVzdF9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX0VDQUxMX1BFTkQpKVxuIFx0XHRyZXR1cm4gMDtcbitcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKVxuK1x0XHRyZXR1cm4gMDtcbiBcbiBcdEJVR19PTigha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpO1xuIFxuK1x0c2lncF9jdHJsID0gc2NhLVx1MDAzZWNwdVt2Y3B1LVx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcbiBcdGlmIChzcmNfaWQpXG4gXHRcdCpzcmNfaWQgPSBzaWdwX2N0cmwuc2NuO1xuIFxuQEAgLTYwLDEzICs2MywxNiBAQCBzdGF0aWMgaW50IHNjYV9leHRfY2FsbF9wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50ICpzcmNfaWQpXG4gXG4gc3RhdGljIGludCBzY2FfaW5qZWN0X2V4dF9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNyY19pZClcbiB7XG4tXHRzdHJ1Y3QgZXNjYV9ibG9jayAqc2NhID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5zY2E7XG4tXHR1bmlvbiBlc2NhX3NpZ3BfY3RybCAqc2lncF9jdHJsID0gXHUwMDI2c2NhLVx1MDAzZWNwdVt2Y3B1LVx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcbiBcdHVuaW9uIGVzY2Ffc2lncF9jdHJsIG9sZF92YWwsIG5ld192YWwgPSB7LnNjbiA9IHNyY19pZCwgLmMgPSAxfTtcbitcdHN0cnVjdCBlc2NhX2Jsb2NrICpzY2EgPSB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnNjYTtcbitcdHVuaW9uIGVzY2Ffc2lncF9jdHJsICpzaWdwX2N0cmw7XG4gXHRpbnQgZXhwZWN0LCByYztcbiBcbiBcdEJVR19PTigha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpO1xuK1x0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuK1x0c2lncF9jdHJsID0gXHUwMDI2c2NhLVx1MDAzZWNwdVt2Y3B1LVx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcbiBcdG9sZF92YWwgPSBSRUFEX09OQ0UoKnNpZ3BfY3RybCk7XG4gXHRvbGRfdmFsLmMgPSAwO1xuIFxuQEAgLTg0LDEwICs5MCwxMyBAQCBzdGF0aWMgaW50IHNjYV9pbmplY3RfZXh0X2NhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc3JjX2lkKVxuIHN0YXRpYyB2b2lkIHNjYV9jbGVhcl9leHRfY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guc2NhO1xuLVx0dW5pb24gZXNjYV9zaWdwX2N0cmwgKnNpZ3BfY3RybCA9IFx1MDAyNnNjYS1cdTAwM2VjcHVbdmNwdS1cdTAwM2V2Y3B1X2lkXS5zaWdwX2N0cmw7XG4rXHR1bmlvbiBlc2NhX3NpZ3BfY3RybCAqc2lncF9jdHJsO1xuIFxuLVx0aWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSlcbitcdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkgfHwgIXZjcHUtXHUwMDNlYXJjaC5pbml0aWFsaXplZCB8fCBrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKVxuIFx0XHRyZXR1cm47XG4rXG4rXHQvKiBJbml0aWFsaXplIGFmdGVyIHRoZSBhYm92ZSBjaGVjaywgdG8gcHJldmVudCBnb2luZyBvdXQgb2YgYm91bmRzICovXG4rXHRzaWdwX2N0cmwgPSBcdTAwMjZzY2EtXHUwMDNlY3B1W3ZjcHUtXHUwMDNldmNwdV9pZF0uc2lncF9jdHJsO1xuIFx0a3ZtX3MzOTBfY2xlYXJfY3B1ZmxhZ3ModmNwdSwgQ1BVU1RBVF9FQ0FMTF9QRU5EKTtcbiBcbiBcdFdSSVRFX09OQ0Uoc2lncF9jdHJsLVx1MDAzZXZhbHVlLCAwKTtcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbmluZGV4IDE1MGI1ZGQyMTcwZTIuLjUxOGE2OWM1NWU4NWMgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbisrKyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuQEAgLTU3MSw3ICs1NzEsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX2tleW9wKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3Qga3ZtICprdm0sIGludCBvcFxuIFx0c3dpdGNoIChvcCkge1xuIFx0Y2FzZSBLVk1fUzM5MF9LRVlPUF9TU0tFOlxuIFx0XHRyID0gZGF0X2NvbmRfc2V0X3N0b3JhZ2Vfa2V5KG1jLCBhc2NlLCBnZm4sIHNrZXksIFx1MDAyNnNrZXksIDAsIDAsIDApO1xuLVx0XHRpZiAociBcdTAwM2U9IDApXG4rXHRcdGlmIChyID09IDAgfHwgciA9PSAxKVxuIFx0XHRcdHJldHVybiBza2V5LnNrZXk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBLVk1fUzM5MF9LRVlPUF9JU0tFOlxuQEAgLTU4MCwxNCArNTgwLDE0IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfa2V5b3Aoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBrdm0gKmt2bSwgaW50IG9wXG4gXHRcdFx0cmV0dXJuIHNrZXkuc2tleTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEtWTV9TMzkwX0tFWU9QX1JSQkU6XG4tXHRcdHIgPSBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdChhc2NlLCBnZm4pO1xuLVx0XHRpZiAociBcdTAwM2UgMClcbi1cdFx0XHRyZXR1cm4gciBcdTAwM2NcdTAwM2MgMTtcbitcdFx0ciA9IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KGFzY2UsIGdmbiwgXHUwMDI2c2tleSk7XG4rXHRcdGlmICghcilcbitcdFx0XHRyZXR1cm4gc2tleS5za2V5O1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuLVx0cmV0dXJuIHI7XG4rXHRyZXR1cm4gciBcdTAwM2UgMCA/IC1FRkFVTFQgOiByO1xuIH1cbiBcbiAvKiBTZWN0aW9uOiBkZXZpY2UgcmVsYXRlZCAqL1xuQEAgLTEyMTksOCArMTIxOSw4IEBAIHN0YXRpYyB2b2lkIGt2bV9zMzkwX3N5bmNfcmVxdWVzdF9icm9hZGNhc3Qoc3RydWN0IGt2bSAqa3ZtLCBpbnQgcmVxKVxuIFxuIC8qXG4gICogTXVzdCBiZSBjYWxsZWQgd2l0aCBrdm0tXHUwMDNlc3JjdSBoZWxkIHRvIGF2b2lkIHJhY2VzIG9uIG1lbXNsb3RzLCBhbmQgd2l0aFxuLSAqIGt2bS1cdTAwM2VzbG90c19sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLCBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbigpLFxuLSAqIGFuZCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKCkuXG4rICoga3ZtLVx1MDAzZXNsb3RzX2FyY2hfbG9jayB0byBhdm9pZCByYWNlcyB3aXRoIG91cnNlbHZlcyxcbisgKiBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbigpLCBhbmQga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cygpLlxuICAqL1xuIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSlcbiB7XG5AQCAtMTI2NSw3ICsxMjY1LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKVxuIH1cbiBcbiAvKlxuLSAqIE11c3QgYmUgY2FsbGVkIHdpdGgga3ZtLVx1MDAzZXNsb3RzX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsXG4rICogTXVzdCBiZSBjYWxsZWQgd2l0aCBrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLFxuICAqIGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbigpIGFuZCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKCkuXG4gICovXG4gc3RhdGljIGludCBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXG5AQCAtMTMwMCw3ICsxMzAwLDkgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSxcbiB7XG4gXHRpbnQgcmVzID0gLUVOWElPO1xuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4rXHRndWFyZChzcmN1KShcdTAwMjZrdm0tXHUwMDNlc3JjdSk7XG4rXHRndWFyZChtdXRleCkoXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2FyY2hfbG9jayk7XG4rXG4gXHRzd2l0Y2ggKGF0dHItXHUwMDNlYXR0cikge1xuIFx0Y2FzZSBLVk1fUzM5MF9WTV9NSUdSQVRJT05fU1RBUlQ6XG4gXHRcdHJlcyA9IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihrdm0pO1xuQEAgLTEzMTEsNyArMTMxMyw2IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRkZWZhdWx0OlxuIFx0XHRicmVhaztcbiBcdH1cbi1cdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4gXG4gXHRyZXR1cm4gcmVzO1xuIH1cbkBAIC0yMjE0LDcgKzIyMTUsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX2dldF9za2V5cyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9za2V5cyAqYXJncylcbiBcdH1cbiBcbiBcdGt2ZnJlZShrZXlzKTtcbi1cdHJldHVybiByO1xuK1x0cmV0dXJuIHIgXHUwMDNjPSAwID8gciA6IC1FRkFVTFQ7XG4gfVxuIFxuIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X3NrZXlzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX3NrZXlzICphcmdzKVxuQEAgLTIyNzYsNyArMjI3Nyw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X3NrZXlzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX3NrZXlzICphcmdzKVxuIFx0a3ZtX3MzOTBfZnJlZV9tbXVfY2FjaGUobWMpO1xuIG91dDpcbiBcdGt2ZnJlZShrZXlzKTtcbi1cdHJldHVybiByO1xuK1x0cmV0dXJuIHIgXHUwMDNjPSAwID8gciA6IC1FRkFVTFQ7XG4gfVxuIFxuIC8qXG5AQCAtMjM4Niw3ICsyMzg3LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfY21tYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSxcbiBcbiBcdHNldF9iaXQoR01BUF9GTEFHX1VTRVNfQ01NLCBcdTAwMjZrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWZsYWdzKTtcbiBcbi1cdHJldHVybiByO1xuK1x0cmV0dXJuIHIgXHUwMDNjPSAwID8gciA6IC1FRkFVTFQ7XG4gfVxuIFxuIC8qKlxuQEAgLTI5MzQsNiArMjkzNSw5IEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdGNhc2UgS1ZNX1MzOTBfSU5URVJSVVBUOiB7XG4gXHRcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgczM5MGludDtcbiBcbitcdFx0ciA9IC1FSU5WQUw7XG4rXHRcdGlmIChrdm1faXNfdWNvbnRyb2woa3ZtKSlcbitcdFx0XHRicmVhaztcbiBcdFx0ciA9IC1FRkFVTFQ7XG4gXHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZzMzkwaW50LCBhcmdwLCBzaXplb2YoczM5MGludCkpKVxuIFx0XHRcdGJyZWFrO1xuQEAgLTI5OTgsOSArMzAwMiw4IEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdFx0ciA9IC1FRkFVTFQ7XG4gXHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZhcmdzLCBhcmdwLCBzaXplb2YoYXJncykpKVxuIFx0XHRcdGJyZWFrO1xuLVx0XHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbi1cdFx0ciA9IGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoa3ZtLCBcdTAwMjZhcmdzKTtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbitcdFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrKVxuK1x0XHRcdHIgPSBrdm1fczM5MF9nZXRfY21tYV9iaXRzKGt2bSwgXHUwMDI2YXJncyk7XG4gXHRcdGlmICghcikge1xuIFx0XHRcdHIgPSBjb3B5X3RvX3VzZXIoYXJncCwgXHUwMDI2YXJncywgc2l6ZW9mKGFyZ3MpKTtcbiBcdFx0XHRpZiAocilcbkBAIC0zMDE0LDkgKzMwMTcsOSBAQCBpbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gXHRcdHIgPSAtRUZBVUxUO1xuIFx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2YXJncywgYXJncCwgc2l6ZW9mKGFyZ3MpKSlcbiBcdFx0XHRicmVhaztcbi1cdFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4rXHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2FyY2hfbG9jayk7XG4gXHRcdHIgPSBrdm1fczM5MF9zZXRfY21tYV9iaXRzKGt2bSwgXHUwMDI2YXJncyk7XG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXHRjYXNlIEtWTV9TMzkwX1BWX0NPTU1BTkQ6IHtcbkBAIC0zMjQ3LDcgKzMyNTAsOCBAQCBzdGF0aWMgdm9pZCBrdm1fczM5MF9jcnlwdG9faW5pdChzdHJ1Y3Qga3ZtICprdm0pXG4gXG4gc3RhdGljIHZvaWQgc2NhX2Rpc3Bvc2Uoc3RydWN0IGt2bSAqa3ZtKVxuIHtcbi1cdGZyZWVfcGFnZXNfZXhhY3Qoa3ZtLVx1MDAzZWFyY2guc2NhLCBzaXplb2YoKmt2bS1cdTAwM2VhcmNoLnNjYSkpO1xuK1x0aWYgKGt2bS1cdTAwM2VhcmNoLnNjYSlcbitcdFx0ZnJlZV9wYWdlc19leGFjdChrdm0tXHUwMDNlYXJjaC5zY2EsIHNpemVvZigqa3ZtLVx1MDAzZWFyY2guc2NhKSk7XG4gXHRrdm0tXHUwMDNlYXJjaC5zY2EgPSBOVUxMO1xuIH1cbiBcbkBAIC0zNDYxLDcgKzM0NjUsNyBAQCBzdGF0aWMgdm9pZCBzY2FfZGVsX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCBlc2NhX2Jsb2NrICpzY2EgPSB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnNjYTtcbiBcbi1cdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpXG4rXHRpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpIHx8ICF2Y3B1LVx1MDAzZWFyY2guaW5pdGlhbGl6ZWQpXG4gXHRcdHJldHVybjtcbiBcbiBcdGNsZWFyX2JpdF9pbnYodmNwdS1cdTAwM2V2Y3B1X2lkLCAodW5zaWduZWQgbG9uZyAqKXNjYS1cdTAwM2VtY24pO1xuQEAgLTM0ODEsOCArMzQ4NSw4IEBAIHN0YXRpYyB2b2lkIHNjYV9hZGRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKVxuIFx0XHRyZXR1cm47XG4gXG4rXHRXUklURV9PTkNFKHNjYS1cdTAwM2VjcHVbdmNwdS1cdTAwM2V2Y3B1X2lkXS5zZGEsIHZpcnRfdG9fcGh5cyh2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrKSk7XG4gXHRzZXRfYml0X2ludih2Y3B1LVx1MDAzZXZjcHVfaWQsICh1bnNpZ25lZCBsb25nICopc2NhLVx1MDAzZW1jbik7XG4tXHRzY2EtXHUwMDNlY3B1W3ZjcHUtXHUwMDNldmNwdV9pZF0uc2RhID0gdmlydF90b19waHlzKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2spO1xuIH1cbiBcbiBzdGF0aWMgaW50IHNjYV9jYW5fYWRkX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQpXG5AQCAtMzYxMyw2ICszNjE3LDkgQEAgdm9pZCBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKHRlc3Rfa3ZtX2ZhY2lsaXR5KHZjcHUtXHUwMDNla3ZtLCA3NCkgfHwgdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC51c2VyX2luc3RyMCB8fFxuIFx0ICAgIHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gudXNlcl9vcGVyZXhlYylcbiBcdFx0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VpY3RsIHw9IElDVExfT1BFUkVYQztcbitcbitcdC8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKCkgYW5kIGt2bV9hcmNoX3ZjcHVfaW9jdGwoKSAqL1xuK1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmluaXRpYWxpemVkLCB0cnVlKTtcbiB9XG4gXG4gc3RhdGljIGJvb2wga3ZtX2hhc19wY2ttb19zdWJmdW5jKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBucilcbkBAIC0zNjc0LDcgKzM2ODEsOCBAQCBzdGF0aWMgdm9pZCBrdm1fczM5MF92Y3B1X2NyeXB0b19zZXR1cChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gdm9pZCBrdm1fczM5MF92Y3B1X3Vuc2V0dXBfY21tYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydCh2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWNicmxvKSk7XG4rXHRpZiAodmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VjYnJsbylcbitcdFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydCh2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWNicmxvKSk7XG4gXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWNicmxvID0gMDtcbiB9XG4gXG5AQCAtMzc5MiwyMSArMzgwMCwyMSBAQCBpbnQga3ZtX2FyY2hfdmNwdV9wcmVjcmVhdGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rREVGSU5FX0ZSRUUoc2llX3BhZ2UsIHN0cnVjdCBzaWVfcGFnZSAqLCBpZiAoX1QpIGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykoX1QpKSlcbitcbiBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHN0cnVjdCBzaWVfcGFnZSAqc2llX3BhZ2U7XG4rXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYyBfX2ZyZWUoa3ZtX3MzOTBfbW11X2NhY2hlKSA9IE5VTEw7XG4rXHRzdHJ1Y3Qgc2llX3BhZ2UgKnNpZV9wYWdlIF9fZnJlZShzaWVfcGFnZSkgPSBOVUxMO1xuIFx0aW50IHJjO1xuIFxuIFx0QlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3Qgc2llX3BhZ2UpICE9IDQwOTYpO1xuLVx0dmNwdS1cdTAwM2VhcmNoLm1jID0ga3ZtX3MzOTBfbmV3X21tdV9jYWNoZSgpO1xuLVx0aWYgKCF2Y3B1LVx1MDAzZWFyY2gubWMpXG4rXHRtYyA9IGt2bV9zMzkwX25ld19tbXVfY2FjaGUoKTtcbitcdGlmICghbWMpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0c2llX3BhZ2UgPSAoc3RydWN0IHNpZV9wYWdlICopIGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLVx0aWYgKCFzaWVfcGFnZSkge1xuLVx0XHRrdm1fczM5MF9mcmVlX21tdV9jYWNoZSh2Y3B1LVx1MDAzZWFyY2gubWMpO1xuLVx0XHR2Y3B1LVx1MDAzZWFyY2gubWMgPSBOVUxMO1xuK1x0aWYgKCFzaWVfcGFnZSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHR9XG4gXG4gXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrID0gXHUwMDI2c2llX3BhZ2UtXHUwMDNlc2llX2Jsb2NrO1xuIFx0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VpdGRiYSA9IHZpcnRfdG9fcGh5cyhcdTAwMjZzaWVfcGFnZS1cdTAwM2VpdGRiKTtcbkBAIC0zODQ4LDEwICszODU2LDkgQEAgaW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNla3ZtX3ZhbGlkX3JlZ3MgfD0gS1ZNX1NZTkNfRlBSUztcbiBcbiBcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKSB7XG4tXHRcdHJjID0gLUVOT01FTTtcbiBcdFx0dmNwdS1cdTAwM2VhcmNoLmdtYXAgPSBnbWFwX25ld19jaGlsZCh2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmdtYXAsIC0xVUwpO1xuIFx0XHRpZiAoIXZjcHUtXHUwMDNlYXJjaC5nbWFwKVxuLVx0XHRcdGdvdG8gb3V0X2ZyZWVfc2llX2Jsb2NrO1xuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFxuIFx0Vk1fRVZFTlQodmNwdS1cdTAwM2Vrdm0sIDMsIFwiY3JlYXRlIGNwdSAlZCBhdCAweCVwLCBzaWUgYmxvY2sgYXQgMHglcFwiLFxuQEAgLTM4NTksMjAgKzM4NjYsMTkgQEAgaW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHRyYWNlX2t2bV9zMzkwX2NyZWF0ZV92Y3B1KHZjcHUtXHUwMDNldmNwdV9pZCwgdmNwdSwgdmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jayk7XG4gXG4gXHRyYyA9IGt2bV9zMzkwX3ZjcHVfc2V0dXAodmNwdSk7XG4tXHRpZiAocmMpXG4tXHRcdGdvdG8gb3V0X3Vjb250cm9sX3VuaW5pdDtcbitcdGlmIChyYykge1xuK1x0XHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKSkge1xuK1x0XHRcdHNjb3BlZF9ndWFyZChzcGlubG9jaywgXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWNoaWxkcmVuX2xvY2spXG4rXHRcdFx0XHRnbWFwX3JlbW92ZV9jaGlsZCh2Y3B1LVx1MDAzZWFyY2guZ21hcCk7XG4rXHRcdFx0dmNwdS1cdTAwM2VhcmNoLmdtYXAgPSBnbWFwX3B1dCh2Y3B1LVx1MDAzZWFyY2guZ21hcCk7XG4rXHRcdH1cbitcdFx0cmV0dXJuIHJjO1xuK1x0fVxuIFxuK1x0dmNwdS1cdTAwM2VhcmNoLm1jID0gbm9fZnJlZV9wdHIobWMpO1xuK1x0c2llX3BhZ2UgPSBOVUxMO1xuIFx0a3ZtX3MzOTBfdXBkYXRlX3RvcG9sb2d5X2NoYW5nZV9yZXBvcnQodmNwdS1cdTAwM2Vrdm0sIDEpO1xuIFx0cmV0dXJuIDA7XG4tXG4tb3V0X3Vjb250cm9sX3VuaW5pdDpcbi1cdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKSB7XG4tXHRcdGdtYXBfcmVtb3ZlX2NoaWxkKHZjcHUtXHUwMDNlYXJjaC5nbWFwKTtcbi1cdFx0dmNwdS1cdTAwM2VhcmNoLmdtYXAgPSBnbWFwX3B1dCh2Y3B1LVx1MDAzZWFyY2guZ21hcCk7XG4tXHR9XG4tb3V0X2ZyZWVfc2llX2Jsb2NrOlxuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSh2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrKSk7XG4tXHRyZXR1cm4gcmM7XG4gfVxuIFxuIGludCBrdm1fYXJjaF92Y3B1X3J1bm5hYmxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbkBAIC01MDM5LDYgKzUwNDUsMTAgQEAgaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdCAgICBrdm1fcnVuLVx1MDAzZWt2bV9kaXJ0eV9yZWdzIFx1MDAyNiB+S1ZNX1NZTkNfUzM5MF9WQUxJRF9GSUVMRFMpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuK1x0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZSgpICovXG4rXHRpZiAoIXNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmluaXRpYWxpemVkKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHR2Y3B1X2xvYWQodmNwdSk7XG4gXG4gXHRpZiAoZ3Vlc3RkYmdfZXhpdF9wZW5kaW5nKHZjcHUpKSB7XG5AQCAtNTQ0Nyw2ICs1NDU3LDggQEAgbG9uZyBrdm1fYXJjaF92Y3B1X3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsXG4gXHRcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgczM5MGludDtcbiBcdFx0c3RydWN0IGt2bV9zMzkwX2lycSBzMzkwaXJxID0ge307XG4gXG4rXHRcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2czM5MGludCwgYXJncCwgc2l6ZW9mKHMzOTBpbnQpKSlcbiBcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdFx0aWYgKHMzOTBpbnRfdG9fczM5MGlycShcdTAwMjZzMzkwaW50LCBcdTAwMjZzMzkwaXJxKSlcbkBAIC01NTIzLDYgKzU1MzUsMTAgQEAgbG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuIFx0bG9uZyByO1xuIFx0dTE2IHJjLCBycmM7XG4gXG4rXHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4ga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKCkgKi9cbitcdGlmICghc21wX2xvYWRfYWNxdWlyZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaW5pdGlhbGl6ZWQpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdHZjcHVfbG9hZCh2Y3B1KTtcbiBcbiBcdHN3aXRjaCAoaW9jdGwpIHtcbkBAIC01Nzk0LDE0ICs1ODEwLDMwIEBAIGludCBrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBsb25nIGNtbWFfZF9jb3VudF9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2Fsaylcbit7XG4rXHR1bmlvbiBwZ3N0ZSBwZ3N0ZTtcbitcbitcdHBnc3RlID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7XG4rXHRpZiAocGdzdGUuY21tYV9kKSB7XG4rXHRcdHBnc3RlLmNtbWFfZCA9IDA7XG4rXHRcdGF0b21pYzY0X2RlYyh3YWxrLVx1MDAzZXByaXYpO1xuK1x0fVxuK1x0cGdzdGVfc2V0X3VubG9jayhwdGVwLCBwZ3N0ZSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdFx0XHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpvbGQsXG4gXHRcdFx0XHRjb25zdCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpuZXcsXG4gXHRcdFx0XHRlbnVtIGt2bV9tcl9jaGFuZ2UgY2hhbmdlKVxuIHtcbi1cdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jID0gTlVMTDtcbitcdGNvbnN0IHN0cnVjdCBkYXRfd2Fsa19vcHMgb3BzID0geyAucHRlX2VudHJ5ID0gY21tYV9kX2NvdW50X3B0ZSwgfTtcbitcdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jIF9fZnJlZShrdm1fczM5MF9tbXVfY2FjaGUpID0gTlVMTDtcbiBcdGludCByYyA9IDA7XG4gXG4rXHRndWFyZChtdXRleCkoXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2FyY2hfbG9jayk7XG4rXG4gXHRpZiAoY2hhbmdlID09IEtWTV9NUl9GTEFHU19PTkxZKVxuIFx0XHRyZXR1cm47XG4gXG5AQCAtNTgxMiw2ICs1ODQ0LDEyIEBAIHZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuIFx0fVxuIFxuIFx0c2NvcGVkX2d1YXJkKHdyaXRlX2xvY2ssIFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jaykge1xuK1x0XHRpZiAoa3ZtLVx1MDAzZWFyY2gubWlncmF0aW9uX21vZGUgXHUwMDI2XHUwMDI2IGt2bS1cdTAwM2VhcmNoLnVzZV9jbW1hIFx1MDAyNlx1MDAyNiBvbGQpIHtcbitcdFx0XHRfZGF0X3dhbGtfZ2ZuX3JhbmdlKG9sZC1cdTAwM2ViYXNlX2dmbiwgb2xkLVx1MDAzZWJhc2VfZ2ZuICsgb2xkLVx1MDAzZW5wYWdlcyxcbitcdFx0XHRcdFx0ICAgIGt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlYXNjZSwgXHUwMDI2b3BzLCBEQVRfV0FMS19JR05fSE9MRVMsXG4rXHRcdFx0XHRcdCAgICBcdTAwMjZrdm0tXHUwMDNlYXJjaC5jbW1hX2RpcnR5X3BhZ2VzKTtcbitcdFx0fVxuK1xuIFx0XHRzd2l0Y2ggKGNoYW5nZSkge1xuIFx0XHRjYXNlIEtWTV9NUl9ERUxFVEU6XG4gXHRcdFx0cmMgPSBkYXRfZGVsZXRlX3Nsb3QobWMsIGt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlYXNjZSwgb2xkLVx1MDAzZWJhc2VfZ2ZuLCBvbGQtXHUwMDNlbnBhZ2VzKTtcbkBAIC01ODMzLDcgKzU4NzEsNiBAQCB2b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbiBvdXQ6XG4gXHRpZiAocmMpXG4gXHRcdHByX3dhcm4oXCJmYWlsZWQgdG8gY29tbWl0IG1lbW9yeSByZWdpb25cXG5cIik7XG4tXHRrdm1fczM5MF9mcmVlX21tdV9jYWNoZShtYyk7XG4gXHRyZXR1cm47XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHJpdi5jIGIvYXJjaC9zMzkwL2t2bS9wcml2LmNcbmluZGV4IGFkMGRkYzQzM2E3M2MuLmIxYmEyNGMzNDZlZmEgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL3ByaXYuY1xuKysrIGIvYXJjaC9zMzkwL2t2bS9wcml2LmNcbkBAIC0yODksNiArMjg5LDcgQEAgc3RhdGljIGludCBoYW5kbGVfaXNrZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gc3RhdGljIGludCBoYW5kbGVfcnJiZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBnYWRkcjtcbitcdHVuaW9uIHNrZXkgc2tleTtcbiBcdGludCByZWcxLCByZWcyO1xuIFx0aW50IHJjO1xuIFxuQEAgLTMwNywxMiArMzA4LDEyIEBAIHN0YXRpYyBpbnQgaGFuZGxlX3JyYmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0Z2FkZHIgPSBrdm1fczM5MF9sb2dpY2FsX3RvX2VmZmVjdGl2ZSh2Y3B1LCBnYWRkcik7XG4gXHRnYWRkciA9IGt2bV9zMzkwX3JlYWxfdG9fYWJzKHZjcHUsIGdhZGRyKTtcbiBcdHNjb3BlZF9ndWFyZChyZWFkX2xvY2ssIFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZW1tdV9sb2NrKVxuLVx0XHRyYyA9IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHZjcHUtXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWFzY2UsIGdwYV90b19nZm4oZ2FkZHIpKTtcbitcdFx0cmMgPSBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh2Y3B1LVx1MDAzZWFyY2guZ21hcC1cdTAwM2Vhc2NlLCBncGFfdG9fZ2ZuKGdhZGRyKSwgXHUwMDI2c2tleSk7XG4gXHRpZiAocmMgXHUwMDNlIDApXG4gXHRcdHJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwgcmMpO1xuIFx0aWYgKHJjIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmM7XG4tXHRrdm1fczM5MF9zZXRfcHN3X2NjKHZjcHUsIHJjKTtcbitcdGt2bV9zMzkwX3NldF9wc3dfY2ModmNwdSwgKHNrZXkuc2tleSBcdTAwM2VcdTAwM2UgMSkgXHUwMDI2IDMpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTEyNjAsOCArMTI2MSw5IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2Vzc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHQvKiBSZXRyeSB0aGUgRVNTQSBpbnN0cnVjdGlvbiAqL1xuIFx0XHRrdm1fczM5MF9yZXRyeV9pbnN0cih2Y3B1KTtcbiBcdH0gZWxzZSB7XG4tXHRcdHNjb3BlZF9ndWFyZChyZWFkX2xvY2ssIFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZW1tdV9sb2NrKVxuLVx0XHRcdGkgPSBfX2RvX2Vzc2EodmNwdSwgb3JjKTtcbitcdFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2spXG4rXHRcdFx0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlbW11X2xvY2spXG4rXHRcdFx0XHRpID0gX19kb19lc3NhKHZjcHUsIG9yYyk7XG4gXHRcdGlmIChpIFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiBpO1xuIFx0XHQvKiBBY2NvdW50IGZvciB0aGUgcG9zc2libGUgZXh0cmEgY2JybCBlbnRyeSAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHYuYyBiL2FyY2gvczM5MC9rdm0vcHYuY1xuaW5kZXggMWJlYWNjODQxY2E4NS4uYjAyZTAxNTlkM2NkMiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vcHYuY1xuKysrIGIvYXJjaC9zMzkwL2t2bS9wdi5jXG5AQCAtMjQ0LDYgKzI0NCwyNCBAQCBzdGF0aWMgdm9pZCBrdm1fczM5MF9jbGVhcl9wdl9zdGF0ZShzdHJ1Y3Qga3ZtICprdm0pXG4gXHRrdm0tXHUwMDNlYXJjaC5wdi5zdG9yX3ZhciA9IE5VTEw7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGt2bV9zMzkwX3B2X2Rpc3Bvc2VfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmcmVlX3N0b3JfYmFzZSlcbit7XG4rXHRpZiAoZnJlZV9zdG9yX2Jhc2UpXG4rXHRcdGZyZWVfcGFnZXModmNwdS1cdTAwM2VhcmNoLnB2LnN0b3JfYmFzZSwgZ2V0X29yZGVyKHV2X2luZm8uZ3Vlc3RfY3B1X3N0b3JfbGVuKSk7XG4rXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2lkYV9hZGRyKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2spKTtcbitcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlcHZfaGFuZGxlX2NwdSA9IDA7XG4rXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZXB2X2hhbmRsZV9jb25maWcgPSAwO1xuK1x0bWVtc2V0KFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5wdiwgMCwgc2l6ZW9mKHZjcHUtXHUwMDNlYXJjaC5wdikpO1xuK1x0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VzZGYgPSAwO1xuK1x0LypcbitcdCAqIFRoZSBzaWRhZCBmaWVsZCAoZm9yIHNkZiA9PSAyKSBpcyBub3cgdGhlIGdiZWEgZmllbGQgKGZvciBzZGYgPT0gMCkuXG4rXHQgKiBVc2UgdGhlIHJlc2V0IHZhbHVlIG9mIGdiZWEgdG8gYXZvaWQgbGVha2luZyB0aGUga2VybmVsIHBvaW50ZXIgb2ZcbitcdCAqIHRoZSBqdXN0IGZyZWVkIHNpZGEuXG4rXHQgKi9cbitcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlZ2JlYSA9IDE7XG4rXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfVExCX0ZMVVNILCB2Y3B1KTtcbit9XG4rXG4gaW50IGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXG4ge1xuIFx0aW50IGNjO1xuQEAgLTI1OCwyNCArMjc2LDkgQEAgaW50IGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXG4gXHRXQVJOX09OQ0UoY2MsIFwicHJvdHZpcnQgZGVzdHJveSBjcHUgZmFpbGVkIHJjICV4IHJyYyAleFwiLCAqcmMsICpycmMpO1xuIFxuIFx0LyogSW50ZW5kZWQgbWVtb3J5IGxlYWsgZm9yIHNvbWV0aGluZyB0aGF0IHNob3VsZCBuZXZlciBoYXBwZW4uICovXG4tXHRpZiAoIWNjKVxuLVx0XHRmcmVlX3BhZ2VzKHZjcHUtXHUwMDNlYXJjaC5wdi5zdG9yX2Jhc2UsXG4tXHRcdFx0ICAgZ2V0X29yZGVyKHV2X2luZm8uZ3Vlc3RfY3B1X3N0b3JfbGVuKSk7XG4tXG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2lkYV9hZGRyKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2spKTtcbi1cdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlcHZfaGFuZGxlX2NwdSA9IDA7XG4tXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZXB2X2hhbmRsZV9jb25maWcgPSAwO1xuLVx0bWVtc2V0KFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5wdiwgMCwgc2l6ZW9mKHZjcHUtXHUwMDNlYXJjaC5wdikpO1xuLVx0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VzZGYgPSAwO1xuLVx0Lypcbi1cdCAqIFRoZSBzaWRhZCBmaWVsZCAoZm9yIHNkZiA9PSAyKSBpcyBub3cgdGhlIGdiZWEgZmllbGQgKGZvciBzZGYgPT0gMCkuXG4tXHQgKiBVc2UgdGhlIHJlc2V0IHZhbHVlIG9mIGdiZWEgdG8gYXZvaWQgbGVha2luZyB0aGUga2VybmVsIHBvaW50ZXIgb2Zcbi1cdCAqIHRoZSBqdXN0IGZyZWVkIHNpZGEuXG4tXHQgKi9cbi1cdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlZ2JlYSA9IDE7XG4tXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfVExCX0ZMVVNILCB2Y3B1KTtcbitcdGt2bV9zMzkwX3B2X2Rpc3Bvc2VfY3B1KHZjcHUsICFjYyk7XG4gXG4tXHRyZXR1cm4gY2MgPyBFSU8gOiAwO1xuK1x0cmV0dXJuIGNjID8gLUVJTyA6IDA7XG4gfVxuIFxuIGludCBrdm1fczM5MF9wdl9jcmVhdGVfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXG5AQCAtMzE5LDkgKzMyMiw3IEBAIGludCBrdm1fczM5MF9wdl9jcmVhdGVfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXG4gXHRcdCAgICAgdXZjYi5oZWFkZXIucnJjKTtcbiBcbiBcdGlmIChjYykge1xuLVx0XHR1MTYgZHVtbXk7XG4tXG4tXHRcdGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHZjcHUsIFx1MDAyNmR1bW15LCBcdTAwMjZkdW1teSk7XG4rXHRcdGt2bV9zMzkwX3B2X2Rpc3Bvc2VfY3B1KHZjcHUsIHRydWUpO1xuIFx0XHRyZXR1cm4gLUVJTztcbiBcdH1cbiBcbkBAIC04MDksNyArODEwLDcgQEAgc3RhdGljIGludCB1bnBhY2tfb25lKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1NjQgdHdlYWssXG4gXHRcdFx0cmV0dXJuIC1FQUdBSU47XG4gXHR9XG4gXG4tXHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVBR0FJTilcbitcdGlmIChyZXQgXHUwMDI2XHUwMDI2IHJldCAhPSAtRUFHQUlOIFx1MDAyNlx1MDAyNiByZXQgIT0gLUVJTlRSKVxuIFx0XHRLVk1fVVZfRVZFTlQoa3ZtLCAzLCBcIlBST1RWSVJUIFZNIFVOUEFDSzogZmFpbGVkIGFkZHIgJWxseCB3aXRoIHJjICV4IHJyYyAleFwiLFxuIFx0XHRcdCAgICAgdXZjYi5nYWRkciwgKnJjLCAqcnJjKTtcbiBcdHJldHVybiByZXQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowOTo0OS42ODU3MDY1NDZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzc0NDgxNTU1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYW4gczM5MCBLVk0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGZvciBzMzkwIEtWTSwgYW5kIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaXQgcXVpY2tseS4gTGV0J3Mgc2VlLi4uIGl0J3MgdG91Y2hpbmcgc2V2ZXJhbCBjb3JlIGFyZWFzOiBgYXJjaC9zMzkwL2t2bS9gLiAgVGhlIGtleSBjaGFuZ2VzIGp1bXAgb3V0IHJpZ2h0IGF3YXkuIFRoZXkndmUgYWRkZWQgYSBgYm9vbCBpbml0aWFsaXplZDtgIHRvIGBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaGAgaW4gYGt2bV9ob3N0LmhgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIHN1Z2dlc3RpbmcgdGhleSdyZSB0cmFja2luZyBWQ1BVIGluaXRpYWxpemF0aW9uIHN0YXRlLCBhbmQgcHJvYmFibHkgZml4aW5nIHNvbWUgcmFjZSBjb25kaXRpb25zLlxuXG5UaGVuLCB0aGVyZSdzIGEgbW9kaWZpY2F0aW9uIHRvIGBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdGAgaW4gYGRhdC5jYC4gVGhlIHNpZ25hdHVyZSBjaGFuZ2VkLCByZXR1cm5pbmcgdGhlIGBza2V5YCB2aWEgYSBwb2ludGVyLiAgVGhhdCdzIGEgcG90ZW50aWFsIGFyZWEgZm9yIHN1YnRsZSBidWdzIGlmIG5vdCBoYW5kbGVkIGNvcnJlY3RseSBieSBhbGwgY2FsbGVycy4gVGhlIGBmYXVsdGluLmNgIGNoYW5nZSwgaGFuZGxpbmcgYC1FSU5UUmAgZnJvbSBgaXNfc2lncGVuZGluZ19wZm4oKWAsIGlzIGEgZ29vZCBkZWZlbnNpdmUgbWVhc3VyZTsgYWRkcmVzc2luZyBzaWduYWwgaGFuZGxpbmcgaW4gZmF1bHRpbmcgcGF0aHMgaXMgYWx3YXlzIGEgd2luLlxuXG5Nb3ZpbmcgdG8gYGludGVycnVwdC5jYCwgdGhlIGNoZWNrcyBmb3IgYGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSlgIGluIGludGVycnVwdCBmdW5jdGlvbnMgbG9vayBsaWtlIGEgZ29vZCBzZWN1cml0eSBtZWFzdXJlLCBvbmx5IGFsbG93aW5nIHByaXZpbGVnZWQgb3BlcmF0aW9ucyBmcm9tIGFwcHJvcHJpYXRlIGNvbnRleHRzLlxuXG5ga3ZtLXMzOTAuY2AgaXMgd2hlcmUgdGhpbmdzIGdldCByZWFsbHkgaW50ZXJlc3RpbmcuIFRoZXJlIGFyZSB1cGRhdGVzIHRvIGBrdm1fczM5MF9rZXlvcGAgdG8gYWNjb21tb2RhdGUgdGhlIGBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdGAgY2hhbmdlLCB3aGljaCBpcyBleHBlY3RlZC4gVGhlIHVzZSBvZiBga3ZtLVx1MDAzZXNsb3RzX2FyY2hfbG9ja2AgaW5zdGVhZCBvZiBga3ZtLVx1MDAzZXNsb3RzX2xvY2tgIGluIGBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uYCBhbmQgYGt2bV9hcmNoX3ZtX2lvY3RsYCBpcyBhIGdvb2Qgc2lnbiB0aGF0IHRoZXkncmUgYWRkcmVzc2luZyBzb21lIGxvY2tpbmcgaXNzdWVzLCBlc3BlY2lhbGx5IHdpdGggdGhlIENNTUEgYml0cywgd2hpY2ggd291bGQgaGF2ZSBoYWQgdG8gZG8gd2l0aCB0aGUgZ3Vlc3QgcGh5c2ljYWwgdG8gaG9zdCBwaHlzaWNhbCB0cmFuc2xhdGlvbi4gVGhlIGFkZGl0aW9uIG9mIGNoZWNrcyBmb3IgdGhlIGBrdm0tXHUwMDNlYXJjaC5zY2FgIGJlZm9yZSBmcmVlaW5nIGFuZCB0aGUgVkNQVSdzIGluaXRpYWxpemF0aW9uIHN0YXRlIChgdmNwdS1cdTAwM2VhcmNoLmluaXRpYWxpemVkYCkgaW4gc2V2ZXJhbCBzcG90cyBzdWdnZXN0cyBhIGZvY3VzIG9uIHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIGF2b2lkaW5nIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMuIFRoZSB1c2Ugb2YgYHNtcF9zdG9yZV9yZWxlYXNlYCBhbmQgYHNtcF9sb2FkX2FjcXVpcmVgIHdpdGggdGhlIGluaXRpYWxpemVkIGZsYWcgaXMgYWJzb2x1dGVseSBuZWNlc3NhcnkgZm9yIGNvcnJlY3Qgc3luY2hyb25pemF0aW9uIG9uIGEgbXVsdGktY29yZSBtYWNoaW5lLCBhbmQgSSdtIGdsYWQgdG8gc2VlIHRoYXQuIEZpeGluZyB0aG9zZSBtZW1vcnkgbGVha3MgYW5kIGVycm9yIGhhbmRsaW5nIGlzc3VlcyBpbiBga3ZtX2FyY2hfdmNwdV9jcmVhdGVgIGlzIGltcG9ydGFudC4gSSBuZWVkIHRvIG5vdGUgdGhhdCBmdW5jdGlvbiBhbmQgYW5hbHl6ZSBpdC5cblxuVGhlIHVzZSBvZiBgc2xvdHNfYXJjaF9sb2NrYCBpbiBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gIGFsc28gcG9pbnRzIHRvIGxvY2tpbmcgaW1wcm92ZW1lbnRzLCBhbmQgQ01NQSBkaXJ0eSBwYWdlIHVwZGF0ZXMgYXJlIGEga2V5IHBhcnQgb2YgdGhpcy4gVGhlIGBwcml2LmNgIGFuZCBgcHYuY2AgY2hhbmdlcywgd2l0aCB0aGUgdXBkYXRlZCBgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXRgIGNhbGxzIGFuZCB0aGUgYHNsb3RzX2FyY2hfbG9ja2AgdXNhZ2UgaW4gYGhhbmRsZV9lc3NhYCBhcmUgc3RhbmRhcmQgYWRhcHRhdGlvbnMgdG8gdGhlIGNoYW5nZXMgaW4gdGhlIHJlc3Qgb2YgdGhlIGNvZGUuIFRoZSBzcGxpdHRpbmcgb2YgYGt2bV9zMzkwX3B2X2Rpc3Bvc2VfY3B1YCB3aXRoIHRoZSByZXNwZWN0aXZlIGNoYW5nZXMgaW4gYGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1YCBhbmQgYGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVgIGlzIGEgZ29vZCBzdGVwIHRvd2FyZHMgc2ltcGxpZnlpbmcgdGhlIENQVSByZXNvdXJjZSBtYW5hZ2VtZW50LlxuXG5Tbywgb3ZlcmFsbCwgdGhpcyBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBwYXRjaCBzZXJpZXMuIERlZmluaXRlbHkgd29ydGggYSB0aG9yb3VnaCBsb29rLiBJdCBhZGRyZXNzZXMgYSBmZXcgYnVncywgaW5jbHVkaW5nIHJhY2UgY29uZGl0aW9ucyByZWxhdGVkIHRvIFZDUFUgaW5pdGlhbGl6YXRpb24sIGxvY2tpbmcgcHJvYmxlbXMsIGFuZCBzb21lIG1lbW9yeSBsZWFrcy4gVGhhdCdzIGdvb2Qgc3R1ZmYuXG5cbk9rYXksIGxldCBtZSBsaXN0IHRoZSBmb2N1cyBzeW1ib2xzOlxuXG4qICAgYGt2bV9hcmNoX3ZjcHVfY3JlYXRlYCAtIFRoYXQgb25lIG5lZWRzIHNjcnV0aW55LlxuKiAgIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmBcbiogICBga3ZtX2FyY2hfdmNwdV9pb2N0bGBcbiogICBga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bGBcbiogICBga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbmBcbiogICBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gXG4qICAgYGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1YFxuKiAgIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YFxuKiAgIGBoYW5kbGVfcnJiZWBcbiogICBgaGFuZGxlX2Vzc2FgXG4qICAgYGt2bV9zMzkwX2tleW9wYFxuKiAgIGBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdGAgLSBLZWVwIGFuIGV5ZSBvbiB0aGUgYGRhdF9yZXNldF9yZWZlcmVuY2VfYml0YCBzaWduYXR1cmUgY2hhbmdlLCBhcyB3ZWxsIGFzIGV2ZXJ5IGxvY2F0aW9uIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQuXG5cbk5vdywgbGV0J3MgbWFrZSBzdXJlIHRoZSBLY29uZmlnIGlzIHNldCBjb3JyZWN0bHkuIHMzOTAgS1ZNIGRlcGVuZHMgb24gYENPTkZJR19LVk1gLCBvYnZpb3VzbHkuICBMZXQncyB1c2UgYGdyZXBwZXJgIGluIHRoZSBgYXJjaC9zMzkwL2t2bS9LY29uZmlnYCB0byBzZWVcblxuIiwiSW5wdXRUb2tlbnMiOjExODE3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MTA6MDMuNDMwNTI1MjQ2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTYzMjIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWc9MTc9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMTgtXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjE5OmNvbmZpZyBLVk1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMjAtXFx0ZGVmX3RyaXN0YXRlIHlcXG4tLVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDc6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIlVzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjEwOjAzLjU3NjE2NDQwNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NDkzMzE2NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgS1ZNIFMzOTAgVUNvbnRyb2wgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IHJlZmVyZW5jZXMgYGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSlgLiBUaGF0IGZ1bmN0aW9uIGNhbGwsIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIEtWTSBjb2RlYmFzZSwgc3Ryb25nbHkgaW1wbGllcyB0aGF0IHRoZSBgQ09ORklHX0tWTV9TMzkwX1VDT05UUk9MYCBjb25maWd1cmF0aW9uIG9wdGlvbiAqc2hvdWxkKiBiZSBlbmFibGVkIGZvciB0aGUgdGFyZ2V0IHBsYXRmb3JtLiBHaXZlbiB0aGlzLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBpbmRlZWQgc2V0IGFzIGV4cGVjdGVkLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlcy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhlIHByZXNlbmNlIGFuZCBzdGF0dXMgb2YgYEtWTV9TMzkwX1VDT05UUk9MYC4gSSdsbCBnbyBjaGVjayBgYXJjaC9zMzkwL2t2bS9LY29uZmlnYCB0byBpbnNwZWN0IHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoZSByZWxldmFudCBvcHRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjb25maWd1cmF0aW9uIGVsZW1lbnQgaXMgc2V0IGNvcnJlY3RseSwgYW5kIHRoZSBidWlsZCBpcyBwaWNraW5nIHRoaXMgb3B0aW9uIHVwIG9yIGNvbmZpZ3VyZWQgY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDAxNSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjEwOjA4LjIyNTQ5OTI3MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTA0NDc0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vS2NvbmZpZz0xOT1jb25maWcgS1ZNXFxuLS1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDYtXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjQ3OmNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTFxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cXHRib29sIFxcXCJVc2Vyc3BhY2UgY29udHJvbGxlZCB2aXJ0dWFsIG1hY2hpbmVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzoxMDowOC4yODQ1NDk5NzlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5Nzg1OTc5MzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBmb2N1cyBzeW1ib2xzLCB0aGlua2luZyB0aHJvdWdoIHRoaXMgYW5hbHlzaXM6XG5cbioqRm9jdXMgU3ltYm9sIFJldmlldyBcdTAwMjYgS1ZNIEludGVncmF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSB0YWtpbmcgYSBsb29rIGF0IGEgc2V0IG9mIGtleSBzeW1ib2xzIHJlbGF0ZWQgdG8gdGhlIGBLVk1gIGluZnJhc3RydWN0dXJlIOKAkyBkZWZpbml0ZWx5IGNlbnRyYWwgdG8gYW55IGRlZXAgZGl2ZSBpbnRvIHZpcnR1YWxpemF0aW9uIG9uIExpbnV4LiBUaGUgb2JqZWN0aXZlIGhlcmUgaXMgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2Ygd2hlcmUgdGhlIG1vc3QgY3JpdGljYWwgaW50ZXJhY3Rpb25zIGFuZCBwcm9jZXNzaW5nIG9jY3VyIHdpdGhpbiB0aGUgYEtWTWAgbGF5ZXIuXG5cbkkndmUgZ290IGEgY29tcHJlaGVuc2l2ZSBsaXN0IG9mIGZ1bmN0aW9ucyB0byBjb25zaWRlci4gVGhlc2UgZnVuY3Rpb25zIHJlcHJlc2VudCB0aGUgYmFja2JvbmUgb2YgYEtWTWAncyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgYXJjaGl0ZWN0dXJlIGFuZCBJL08uIEknbSBub3RpbmcgdGhlIGluaXRpYWwgbGlzdDpcblxuKiAgIGBrdm1fYXJjaF92Y3B1X2NyZWF0ZWA6IFRoaXMgaXMgY3J1Y2lhbCDigJMgdGhlIGNyZWF0aW9uIG9mIGEgdmlydHVhbCBDUFUgY29udGV4dC4gRXZlcnl0aGluZyBzcGlucyBvdXQgZnJvbSBoZXJlLlxuKiAgIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmA6IFRoaXMgaXMgdGhlIGhlYXJ0IG9mIHRoZSBWQ1BVJ3MgZXhlY3V0aW9uIGxvb3AsIHRoZSBnbHVlIGJldHdlZW4gdXNlcnNwYWNlIGFuZCB0aGUgZ3Vlc3QuXG4qICAgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgOiBUaGUgZ2VuZXJhbCBwdXJwb3NlIGBpb2N0bGAgaW50ZXJmYWNlIGZvciBWQ1BVcy5cbiogICBga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bGA6IFZhcmlhbnQgb2YgdGhlIGFib3ZlLCBvZnRlbiB1c2VkIHdoZW4gY3JpdGljYWwgc2VjdGlvbnMgZG9uJ3QgbmVlZCB0byBiZSBsb2NrZWQuXG4qICAgYGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25gOiBUaGlzIG9uZSBpcyB2ZXJ5IGludGVyZXN0aW5nLCBzaW5jZSBpdCByZWxhdGVzIHRvIFZNIG1pZ3JhdGlvbiwgc28gaXQncyBhIGdvb2QgaW5jbHVzaW9uLlxuKiAgIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmA6IFRoaXMgaXMgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgd2hpY2ggaXMgc29tZXRoaW5nIEkgbmVlZCB0byBldmFsdWF0ZS5cbiogICBga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHVgOiBBbmQgaXRzIGNvdW50ZXJwYXJ0OiB0aGUgZGVzdHJ1Y3Rpb24gb2YgdGhlIHZpcnR1YWwgQ1BVLlxuKiAgIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YDogQ3JlYXRpbmcgYSB2aXJ0dWFsIENQVSwgYnV0IGZvciBhIHNwZWNpZmljIGFyY2hpdGVjdHVyZS5cbiogICBgaGFuZGxlX3JyYmVgOiBMb29rcyBsaWtlIGEgY3J1Y2lhbCBoYW5kbGVyIGZvciBhIGNlcnRhaW4gdHlwZSBvZiBpbnN0cnVjdGlvbiBvciBoYXJkd2FyZSBldmVudC5cbiogICBgaGFuZGxlX2Vzc2FgOiBTaW1pbGFyIHRvIHRoZSBhYm92ZSwgdGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbC5cbiogICBga3ZtX3MzOTBfa2V5b3BgOiBUaGlzIGlzIHJlbGF0ZWQgdG8ga2V5IG9wZXJhdGlvbnMsIHByb2JhYmx5IHdpdGhpbiB0aGUgUzM5MCBhcmNoaXRlY3R1cmUuXG4qICAgYGRhdF9yZXNldF9yZWZlcmVuY2VfYml0YDogVGhpcyBpcyBpbXBvcnRhbnQsIGFzIGl0IGhlbHBzIHdpdGggYSBzcGVjaWZpYyBiaXQgbWFuaXB1bGF0aW9uLlxuXG5BbGwgb2YgdGhlc2UgYXJlIHNvbGlkIGNob2ljZXMuIFRoaXMgaXMgYSB2ZXJ5IHVzZWZ1bCBzZXQgb2YgZm9jdXMgc3ltYm9scyBmb3IgYSBmaXJzdCBwYXNzLiBJJ20gZ29pbmcgdG8gc2V0IHRoZXNlIHN5bWJvbHMgYXMgdGhlIGtleSBjb21wb25lbnRzIGZvciBteSBhbmFseXNpcyBhbmQgYmVnaW4gZnJvbSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQzMywiT3V0cHV0VG9rZW5zIjoyNjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MTA6MTguMDcwNTMyNTlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4MDE1MDA1LCJFcnJvciI6InRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBLVk1fUzM5MF9VQ09OVFJPTCIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9TMzkwX1VDT05UUk9MXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2FyY2hfdmNwdV9jcmVhdGVcIixcbiAgICBcImt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuXCIsXG4gICAgXCJrdm1fYXJjaF92Y3B1X2lvY3RsXCIsXG4gICAgXCJrdm1fYXJjaF92Y3B1X3VubG9ja2VkX2lvY3RsXCIsXG4gICAgXCJrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uXCIsXG4gICAgXCJrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvblwiLFxuICAgIFwia3ZtX3MzOTBfcHZfZGVzdHJveV9jcHVcIixcbiAgICBcImt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVcIixcbiAgICBcImhhbmRsZV9ycmJlXCIsXG4gICAgXCJoYW5kbGVfZXNzYVwiLFxuICAgIFwia3ZtX3MzOTBfa2V5b3BcIixcbiAgICBcImRhdF9yZXNldF9yZWZlcmVuY2VfYml0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBzMzkwIEtWTSBpbXBsZW1lbnRhdGlvbiwgaW5jbHVkaW5nIGZpeGluZyByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHZDUFUgY3JlYXRpb24vaW5pdGlhbGl6YXRpb24sIGZpeGluZyBtZW1vcnkgbGVha3MsIGFuZCB1cGRhdGluZyBsb2NraW5nIG1lY2hhbmlzbXMgKHVzaW5nIHNsb3RzX2FyY2hfbG9jaykuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIEtWTSBpb2N0bHMgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LCBtYWtpbmcgdGhlbSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcInRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBLVk1fUzM5MF9VQ09OVFJPTFwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzoxMDoxOC4xNTg1Njg2MTVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODMwODc3NTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgTWlzc2luZyBLZXJuZWwgRmVhdHVyZSoqXG5cblJpZ2h0LCBzbyBgS1ZNX1MzOTBfVUNPTlRST0xgIHNlZW1zIHRvIGJlIHVuZGVmaW5lZC4gVGhhdCdzIHVuZXhwZWN0ZWQuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgYGFyY2gvczM5MC9rdm0vS2NvbmZpZ2AgZmlsZSBhZ2Fpbi4gSSBwcm9iYWJseSBtaXNzZWQgc29tZXRoaW5nLCBvciBtYXliZSB0aGVyZSdzIGEgZGVwZW5kZW5jeSBJJ20gb3Zlcmxvb2tpbmcgdGhhdCdzIGNhdXNpbmcgaXQgbm90IHRvIGJlIGV4cG9zZWQuIEkgbmVlZCB0byBlbnN1cmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIEknbSB0cnlpbmcgdG8gdXNlLCBsaWtlbHkgcmVsYXRlZCB0byB1c2VyIGNvbnRyb2wgZmVhdHVyZXMgZm9yIEtWTSBvbiBzMzkweCwgaXMgYWN0dWFsbHkgZW5hYmxlZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBvcHRpb25zLiBBIHF1aWNrIHJlLWV4YW1pbmF0aW9uIG9mIHRoZSBLY29uZmlnIGZpbGUgc2hvdWxkIGdpdmUgbWUgdGhlIGFuc3dlci4gTWF5YmUgdGhlcmUncyBhIHByZXJlcXVpc2l0ZSBrZXJuZWwgZmxhZyB0aGF0IGlzbid0IHNldCwgb3IgcGVyaGFwcyBpdCdzIG1vdmVkIG9yIHJlbmFtZWQuIE5vIGJpZyBkZWFsLCBqdXN0IGEgbWlub3Igb3ZlcnNpZ2h0LiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0NjMsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbInNldC1yZXN1bHRzIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MTA6MjIuOTg5NDUwMDlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NTg1NzIxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJLVk1fUzM5MF9VQ09OVFJPTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9LY29uZmlnPTE5PWNvbmZpZyBLVk1cXG4tLVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDc6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIlVzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjEwOjIzLjI0NTMxNjc4NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTkyOTc4MTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlYnVnZ2luZyBhIEtlcm5lbCBDb25maWd1cmF0aW9uIElzc3VlKipcblxuT2theSwgc28gSSB0aG91Z2h0IEkgd2FzIG9udG8gc29tZXRoaW5nIHdpdGggdGhlIGBLVk1fUzM5MF9VQ09OVFJPTGAgY29uZmlndXJhdGlvbiBvcHRpb24uIFRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgd2FzIHNheWluZyBpdCBkaWRuJ3QgZXhpc3QsIHdoaWNoIHdhcyB0aHJvd2luZyBtZSBvZmYuIEJ1dCB3YWl0Li4uIEkndmUganVzdCByZW1lbWJlcmVkIHNlZWluZyBpdCwgcmlnaHQ/IFllcywgaXQncyBkZWZpbml0ZWx5IGluIGBhcmNoL3MzOTAva3ZtL0tjb25maWdgLlxuXG5UaGVuIHdoeSB3YXMgdGhlIHRvb2wgcmVwb3J0aW5nIGl0IGFzIG1pc3Npbmc/IEhtbSwgbWF5YmUgaXQncyBjcm9zcy1yZWZlcmVuY2luZyBhZ2FpbnN0IHRoZSB3cm9uZyBhcmNoaXRlY3R1cmU/IFBlcmhhcHMgdGhlIHRvb2wgaXMgZGVmYXVsdGluZyB0byBjaGVja2luZyB0aGUgYHg4NmAgdHJlZSBvciBzb21ldGhpbmcgc2ltaWxhcj8gVGhhdCB3b3VsZCBleHBsYWluIHRoZSBjb25mdXNpb24uIEJ1dCBubywgdGhlIHRvb2wgc2hvdWxkIGJlIGNoZWNraW5nICphbGwqIGBLY29uZmlnYCBmaWxlcyBnbG9iYWxseSwgbm90IGp1c3QgYSBzcGVjaWZpYyBhcmNoaXRlY3R1cmUuXG5cbkFscmlnaHQsIGxldCdzIHRha2UgYSBzdGVwIGJhY2sgYW5kIGRvdWJsZS1jaGVjayB0aGUgZXhhY3Qgc3ludGF4IG9mIHRoZSBvcHRpb24gbmFtZS4gSXMgYEtWTV9TMzkwX1VDT05UUk9MYCB0aGUgYWJzb2x1dGUgdHJ1dGg/IFllcywgYGNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTGAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IGZvcm0uXG5cbkknbSBzdGlsbCBtaXNzaW5nIHNvbWV0aGluZy4gTWF5YmUgdGhlIHRvb2wgaXMgbWlzdGFrZW5seSB0YXJnZXRpbmcgYGFyY2gveDg2L0tjb25maWdgPyBObywgaXQgc2hvdWxkbid0LiBJdCdzIHN1cHBvc2VkIHRvIGRvIGEgZ2xvYmFsIHNlYXJjaC5cblxuQWxyaWdodCwgSSdsbCB0cnkgdG8gc2ltcGxpZnkgdGhpbmdzLiBJJ2xsIGp1c3QgdXNlIHRoZSBiYXNpYyBvcHRpb24sIGBLVk1gLiBJZiB0aGUgdG9vbCBzdGlsbCBjb21wbGFpbnMsIHRoZW4gSSBrbm93IHNvbWV0aGluZyBpcyBmdW5kYW1lbnRhbGx5IHdyb25nLCBvciwgYXMgYSBsYXN0IHJlc29ydCwgbWF5YmUgSSBzaG91bGQgb21pdCB0aGUgbW9yZSBzcGVjaWZpYyBuYW1lLiBQZXJoYXBzIGp1c3QgdXNpbmcgYEtWTWAgd2lsbCBiZSBlbm91Z2ggZm9yIHRoZSB0b29sIHRvIHdvcmssIGFueXdheS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4NDMsIk91dHB1dFRva2VucyI6MjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjEwOjMwLjgzODI5ODc3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI0OTYyNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcmNoX3ZjcHVfY3JlYXRlXCIsXG4gICAgXCJrdm1fYXJjaF92Y3B1X2lvY3RsX3J1blwiLFxuICAgIFwia3ZtX2FyY2hfdmNwdV9pb2N0bFwiLFxuICAgIFwia3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bFwiLFxuICAgIFwia3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvblwiLFxuICAgIFwia3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25cIixcbiAgICBcImt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1XCIsXG4gICAgXCJrdm1fczM5MF9wdl9jcmVhdGVfY3B1XCIsXG4gICAgXCJoYW5kbGVfcnJiZVwiLFxuICAgIFwiaGFuZGxlX2Vzc2FcIixcbiAgICBcImt2bV9zMzkwX2tleW9wXCIsXG4gICAgXCJkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgczM5MCBLVk0gaW1wbGVtZW50YXRpb24sIGluY2x1ZGluZyBmaXhpbmcgcmFjZSBjb25kaXRpb25zIGR1cmluZyB2Q1BVIGNyZWF0aW9uL2luaXRpYWxpemF0aW9uLCBmaXhpbmcgbWVtb3J5IGxlYWtzLCBhbmQgdXBkYXRpbmcgbG9ja2luZyBtZWNoYW5pc21zICh1c2luZyBzbG90c19hcmNoX2xvY2spLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBvZiBLVk0gaW9jdGxzIGFuZCBtZW1vcnkgbWFuYWdlbWVudCwgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fYXJjaF92Y3B1X2NyZWF0ZVwiLFxuICAgIFwia3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5cIixcbiAgICBcImt2bV9hcmNoX3ZjcHVfaW9jdGxcIixcbiAgICBcImt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGxcIixcbiAgICBcImt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25cIixcbiAgICBcImt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uXCIsXG4gICAgXCJrdm1fczM5MF9wdl9kZXN0cm95X2NwdVwiLFxuICAgIFwia3ZtX3MzOTBfcHZfY3JlYXRlX2NwdVwiLFxuICAgIFwiaGFuZGxlX3JyYmVcIixcbiAgICBcImhhbmRsZV9lc3NhXCIsXG4gICAgXCJrdm1fczM5MF9rZXlvcFwiLFxuICAgIFwiZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHMzOTAgS1ZNIGltcGxlbWVudGF0aW9uLCBpbmNsdWRpbmcgZml4aW5nIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgdkNQVSBjcmVhdGlvbi9pbml0aWFsaXphdGlvbiwgZml4aW5nIG1lbW9yeSBsZWFrcywgYW5kIHVwZGF0aW5nIGxvY2tpbmcgbWVjaGFuaXNtcyAodXNpbmcgc2xvdHNfYXJjaF9sb2NrKS4gVGhlc2UgY2hhbmdlcyBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgS1ZNIGlvY3RscyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQsIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowqd5wd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-03 16:52:46 +0000 UTC FinishedAt: 2026-08-03 17:10:32 +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": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "d4c21645-b951-4982-b8f3-ed4eafef838f" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_arch_vcpu_create", "kvm_arch_vcpu_ioctl_run", "kvm_arch_vcpu_ioctl", "kvm_arch_vcpu_unlocked_ioctl", "kvm_s390_vm_set_migration", "kvm_arch_commit_memory_region", "kvm_s390_pv_destroy_cpu", "kvm_s390_pv_create_cpu", "handle_rrbe", "handle_essa", "kvm_s390_keyop", "dat_reset_reference_bit" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfY3JlYXRlJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfaW9jdGwmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bCYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1JiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3B2X2NyZWF0ZV9jcHUmIzM0OywKICAgICYjMzQ7aGFuZGxlX3JyYmUmIzM0OywKICAgICYjMzQ7aGFuZGxlX2Vzc2EmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfa2V5b3AmIzM0OywKICAgICYjMzQ7ZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBzMzkwIEtWTSBpbXBsZW1lbnRhdGlvbiwgaW5jbHVkaW5nIGZpeGluZyByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHZDUFUgY3JlYXRpb24vaW5pdGlhbGl6YXRpb24sIGZpeGluZyBtZW1vcnkgbGVha3MsIGFuZCB1cGRhdGluZyBsb2NraW5nIG1lY2hhbmlzbXMgKHVzaW5nIHNsb3RzX2FyY2hfbG9jaykuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIEtWTSBpb2N0bHMgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LCBtYWtpbmcgdGhlbSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTQ5NzA2NDdjNGIzYzkyNDU2ZGUzY2RmMDAzNmZmODdiZGRiMjNjNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMgMTc6MDk6NDggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggZWFhMzRjNWJkM2MxMS4uZWRmNzViNmFkMjBjZSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTQ0MCw2ICYjNDM7NDQwLDcgQEAgc3RydWN0IGt2bV92Y3B1X2FyY2gge1xuIFx0Ym9vbCBza2V5X2VuYWJsZWQ7XG4gXHQvKiBJbmRpY2F0b3IgaWYgdGhlIGFjY2VzcyByZWdpc3RlcnMgaGF2ZSBiZWVuIGxvYWRlZCBmcm9tIGd1ZXN0ICovXG4gXHRib29sIGFjcnNfbG9hZGVkO1xuJiM0MztcdGJvb2wgaW5pdGlhbGl6ZWQ7XG4gXHRzdHJ1Y3Qga3ZtX3MzOTBfcHZfdmNwdSBwdjtcbiBcdHVuaW9uIGRpYWczMThfaW5mbyBkaWFnMzE4X2luZm87XG4gXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYztcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2RhdC5jIGIvYXJjaC9zMzkwL2t2bS9kYXQuY1xuaW5kZXggZWQ0MjU5ZDE3NjI5NS4uM2YyZDZlODkwMmQ3NiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vZGF0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vZGF0LmNcbkBAIC03NTUsMTMgJiM0Mzs3NTUsMTUgQEAgaW50IGRhdF9jb25kX3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2ZcbiBcdHJldHVybiByYztcbiB9XG4gXG4taW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuKVxuJiM0MztpbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4sIHVuaW9uIHNrZXkgKnNrZXkpXG4ge1xuIFx0dW5pb24gcGdzdGUgcGdzdGUsIG9sZDtcbiBcdHVuaW9uIGNyc3RlICpjcnN0ZXA7XG4gXHR1bmlvbiBwdGUgKnB0ZXA7XG4gXHRpbnQgcmM7XG4gXG4mIzQzO1x0c2tleS1cdTAwM2Vza2V5ID0gMDtcbiYjNDM7XG4gXHRyYyA9IGRhdF9lbnRyeV93YWxrKE5VTEwsIGdmbiwgYXNjZSwgREFUX1dBTEtfQU5ZLCBUQUJMRV9UWVBFX1BBR0VfVEFCTEUsIFx1MDAyNmNyc3RlcCwgXHUwMDI2cHRlcCk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiByYztcbkBAIC03NzEsMjEgJiM0Mzs3NzMsMjMgQEAgaW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuKVxuIFxuIFx0XHRpZiAoIWNyc3RlLmguZmMgfHwgIWNyc3RlLnMuZmMxLnByKVxuIFx0XHRcdHJldHVybiAwO1xuLVx0XHRyZXR1cm4gcGFnZV9yZXNldF9yZWZlcmVuY2VkKGxhcmdlX2Nyc3RlX3RvX3BoeXMoKmNyc3RlcCwgZ2ZuKSk7XG4mIzQzO1x0XHRza2V5LVx1MDAzZXNrZXkgPSBwYWdlX3Jlc2V0X3JlZmVyZW5jZWQobGFyZ2VfY3JzdGVfdG9fcGh5cygqY3JzdGVwLCBnZm4pKSBcdTAwM2NcdTAwM2MgMTtcbiYjNDM7XHRcdHJldHVybiAwO1xuIFx0fVxuIFx0b2xkID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7XG4gXHRwZ3N0ZSA9IG9sZDtcbiBcbiBcdGlmICghcHRlcC1cdTAwM2VoLmkpIHtcbi1cdFx0cmMgPSBwYWdlX3Jlc2V0X3JlZmVyZW5jZWQocHRlX29yaWdpbigqcHRlcCkpO1xuLVx0XHRwZ3N0ZS5ociA9IHJjIFx1MDAzZVx1MDAzZSAxO1xuJiM0MztcdFx0c2tleS1cdTAwM2Vza2V5ID0gcGFnZV9yZXNldF9yZWZlcmVuY2VkKHB0ZV9vcmlnaW4oKnB0ZXApKSBcdTAwM2NcdTAwM2MgMTtcbiYjNDM7XHRcdHBnc3RlLmhyID0gc2tleS1cdTAwM2VyO1xuIFx0fVxuLVx0cmMgfD0gKHBnc3RlLmdyIFx1MDAzY1x1MDAzYyAxKSB8IHBnc3RlLmdjO1xuJiM0MztcdHNrZXktXHUwMDNlciB8PSBwZ3N0ZS5ncjtcbiYjNDM7XHRza2V5LVx1MDAzZWMgfD0gcGdzdGUuZ2M7XG4gXHRwZ3N0ZS5nciA9IDA7XG4gXG4gXHRkYXRfdXBkYXRlX3B0ZXBfc2Qob2xkLCBwZ3N0ZSwgcHRlcCk7XG4gXHRwZ3N0ZV9zZXRfdW5sb2NrKHB0ZXAsIHBnc3RlKTtcbi1cdHJldHVybiByYztcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGxvbmcgZGF0X3Jlc2V0X3NrZXlzX3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxuQEAgLTg0Niw2ICYjNDM7ODUwLDcgQEAgc3RhdGljIGxvbmcgX2RhdF9zbG90X3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxcbiBcdHN0cnVjdCBzbG90X3ByaXYgKnAgPSB3YWxrLVx1MDAzZXByaXY7XG4gXHR1bmlvbiBjcnN0ZSBkdW1teSA9IHsgLnZhbCA9IHAtXHUwMDNldG9rZW4gfTtcbiBcdHVuaW9uIHB0ZSBuZXdfcHRlLCBwdGUgPSBSRUFEX09OQ0UoKnB0ZXApO1xuJiM0MztcdHVuaW9uIHBnc3RlIHBnc3RlO1xuIFxuIFx0bmV3X3B0ZSA9IF9QVEVfVE9LKGR1bW15LnRvay50eXBlLCBkdW1teS50b2sucGFyKTtcbiBcbkBAIC04NTMsNyAmIzQzOzg1OCwxMSBAQCBzdGF0aWMgbG9uZyBfZGF0X3Nsb3RfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbFxuIFx0aWYgKHB0ZS52YWwgPT0gbmV3X3B0ZS52YWwpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0ZGF0X3B0ZXBfeGNoZyhwdGVwLCBuZXdfcHRlLCBnZm4sIHdhbGstXHUwMDNlYXNjZSwgZmFsc2UpO1xuJiM0MztcdHBnc3RlID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7XG4mIzQzO1x0cGdzdGUgPSBfX2RhdF9wdGVwX3hjaGcocHRlcCwgcGdzdGUsIG5ld19wdGUsIGdmbiwgd2Fsay1cdTAwM2Vhc2NlLCBmYWxzZSk7XG4mIzQzO1x0cGdzdGUuY21tYV9kID0gMDtcbiYjNDM7XHRwZ3N0ZV9zZXRfdW5sb2NrKHB0ZXAsIHBnc3RlKTtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9kYXQuaCBiL2FyY2gvczM5MC9rdm0vZGF0LmhcbmluZGV4IGZhZDYwNTMwNWUwNWMuLjE0MWVlN2I5ZjAxOTEgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2RhdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2RhdC5oXG5AQCAtNTM3LDcgJiM0Mzs1MzcsNyBAQCBpbnQgZGF0X3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgdW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZlxuIFx0XHRcdHVuaW9uIHNrZXkgc2tleSwgYm9vbCBucSk7XG4gaW50IGRhdF9jb25kX3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLFxuIFx0XHRcdCAgICAgdW5pb24gc2tleSBza2V5LCB1bmlvbiBza2V5ICpvbGRrZXksIGJvb2wgbnEsIGJvb2wgbXIsIGJvb2wgbWMpO1xuLWludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbik7XG4mIzQzO2ludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbiwgdW5pb24gc2tleSAqc2tleSk7XG4gbG9uZyBkYXRfcmVzZXRfc2tleXModW5pb24gYXNjZSBhc2NlLCBnZm5fdCBzdGFydCk7XG4gXG4gdW5zaWduZWQgbG9uZyBkYXRfZ2V0X3B0dmFsKHN0cnVjdCBwYWdlX3RhYmxlICp0YWJsZSwgc3RydWN0IHB0dmFsX3BhcmFtIHBhcmFtKTtcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYyBiL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jXG5pbmRleCBmZWU4MDA0N2JkOTRmLi4zY2M0NWY3ZjViMmQ3IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9mYXVsdGluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jXG5AQCAtOTEsOSAmIzQzOzkxLDkgQEAgaW50IGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgZ3Vlc3RfZmFcbiBcdFx0LyogQWNjZXNzIG91dHNpZGUgbWVtb3J5LCBhZGRyZXNzaW5nIGV4Y2VwdGlvbi4gKi9cbiBcdFx0aWYgKGlzX25vc2xvdF9wZm4oZi1cdTAwM2VwZm4pKVxuIFx0XHRcdHJldHVybiBQR01fQUREUkVTU0lORztcbi1cdFx0LyogU2lnbmFsIHBlbmRpbmc6IHRyeSBhZ2Fpbi4gKi9cbi1cdFx0aWYgKGYtXHUwMDNlcGZuID09IEtWTV9QRk5fRVJSX1NJR1BFTkRJTkcpXG4tXHRcdFx0cmV0dXJuIC1FQUdBSU47XG4mIzQzO1x0XHQvKiBGYXRhbCBzaWduYWwgcGVuZGluZzogYmFpbCBvdXQuICovXG4mIzQzO1x0XHRpZiAoaXNfc2lncGVuZGluZ19wZm4oZi1cdTAwM2VwZm4pKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlRSO1xuIFx0XHQvKiBDaGVjayBpZiBpdCYjMzk7cyByZWFkLW9ubHkgbWVtb3J5OyBkb24mIzM5O3QgdHJ5IHRvIGFjdHVhbGx5IGhhbmRsZSB0aGF0IGNhc2UuICovXG4gXHRcdGlmIChmLVx1MDAzZXBmbiA9PSBLVk1fUEZOX0VSUl9ST19GQVVMVClcbiBcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcbmluZGV4IDllM2U2YjBkNzJhZDYuLjZiM2Y5N2E3NTEzYjMgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXG5AQCAtNDUsMTMgJiM0Mzs0NSwxNiBAQCBzdGF0aWMgc3RydWN0IGt2bV9zMzkwX2dpYiAqZ2liO1xuIHN0YXRpYyBpbnQgc2NhX2V4dF9jYWxsX3BlbmRpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgKnNyY19pZClcbiB7XG4gXHRzdHJ1Y3QgZXNjYV9ibG9jayAqc2NhID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5zY2E7XG4tXHR1bmlvbiBlc2NhX3NpZ3BfY3RybCBzaWdwX2N0cmwgPSBzY2EtXHUwMDNlY3B1W3ZjcHUtXHUwMDNldmNwdV9pZF0uc2lncF9jdHJsO1xuJiM0MztcdHVuaW9uIGVzY2Ffc2lncF9jdHJsIHNpZ3BfY3RybDtcbiBcbiBcdGlmICgha3ZtX3MzOTBfdGVzdF9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX0VDQUxMX1BFTkQpKVxuIFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuIFxuIFx0QlVHX09OKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSk7XG4gXG4mIzQzO1x0c2lncF9jdHJsID0gc2NhLVx1MDAzZWNwdVt2Y3B1LVx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcbiBcdGlmIChzcmNfaWQpXG4gXHRcdCpzcmNfaWQgPSBzaWdwX2N0cmwuc2NuO1xuIFxuQEAgLTYwLDEzICYjNDM7NjMsMTYgQEAgc3RhdGljIGludCBzY2FfZXh0X2NhbGxfcGVuZGluZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCAqc3JjX2lkKVxuIFxuIHN0YXRpYyBpbnQgc2NhX2luamVjdF9leHRfY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzcmNfaWQpXG4ge1xuLVx0c3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guc2NhO1xuLVx0dW5pb24gZXNjYV9zaWdwX2N0cmwgKnNpZ3BfY3RybCA9IFx1MDAyNnNjYS1cdTAwM2VjcHVbdmNwdS1cdTAwM2V2Y3B1X2lkXS5zaWdwX2N0cmw7XG4gXHR1bmlvbiBlc2NhX3NpZ3BfY3RybCBvbGRfdmFsLCBuZXdfdmFsID0gey5zY24gPSBzcmNfaWQsIC5jID0gMX07XG4mIzQzO1x0c3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guc2NhO1xuJiM0MztcdHVuaW9uIGVzY2Ffc2lncF9jdHJsICpzaWdwX2N0cmw7XG4gXHRpbnQgZXhwZWN0LCByYztcbiBcbiBcdEJVR19PTigha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpO1xuJiM0MztcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4mIzQzO1x0c2lncF9jdHJsID0gXHUwMDI2c2NhLVx1MDAzZWNwdVt2Y3B1LVx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcbiBcdG9sZF92YWwgPSBSRUFEX09OQ0UoKnNpZ3BfY3RybCk7XG4gXHRvbGRfdmFsLmMgPSAwO1xuIFxuQEAgLTg0LDEwICYjNDM7OTAsMTMgQEAgc3RhdGljIGludCBzY2FfaW5qZWN0X2V4dF9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNyY19pZClcbiBzdGF0aWMgdm9pZCBzY2FfY2xlYXJfZXh0X2NhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCBlc2NhX2Jsb2NrICpzY2EgPSB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnNjYTtcbi1cdHVuaW9uIGVzY2Ffc2lncF9jdHJsICpzaWdwX2N0cmwgPSBcdTAwMjZzY2EtXHUwMDNlY3B1W3ZjcHUtXHUwMDNldmNwdV9pZF0uc2lncF9jdHJsO1xuJiM0MztcdHVuaW9uIGVzY2Ffc2lncF9jdHJsICpzaWdwX2N0cmw7XG4gXG4tXHRpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKVxuJiM0MztcdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkgfHwgIXZjcHUtXHUwMDNlYXJjaC5pbml0aWFsaXplZCB8fCBrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKVxuIFx0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdC8qIEluaXRpYWxpemUgYWZ0ZXIgdGhlIGFib3ZlIGNoZWNrLCB0byBwcmV2ZW50IGdvaW5nIG91dCBvZiBib3VuZHMgKi9cbiYjNDM7XHRzaWdwX2N0cmwgPSBcdTAwMjZzY2EtXHUwMDNlY3B1W3ZjcHUtXHUwMDNldmNwdV9pZF0uc2lncF9jdHJsO1xuIFx0a3ZtX3MzOTBfY2xlYXJfY3B1ZmxhZ3ModmNwdSwgQ1BVU1RBVF9FQ0FMTF9QRU5EKTtcbiBcbiBcdFdSSVRFX09OQ0Uoc2lncF9jdHJsLVx1MDAzZXZhbHVlLCAwKTtcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbmluZGV4IDE1MGI1ZGQyMTcwZTIuLjUxOGE2OWM1NWU4NWMgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuQEAgLTU3MSw3ICYjNDM7NTcxLDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9rZXlvcChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGt2bSAqa3ZtLCBpbnQgb3BcbiBcdHN3aXRjaCAob3ApIHtcbiBcdGNhc2UgS1ZNX1MzOTBfS0VZT1BfU1NLRTpcbiBcdFx0ciA9IGRhdF9jb25kX3NldF9zdG9yYWdlX2tleShtYywgYXNjZSwgZ2ZuLCBza2V5LCBcdTAwMjZza2V5LCAwLCAwLCAwKTtcbi1cdFx0aWYgKHIgXHUwMDNlPSAwKVxuJiM0MztcdFx0aWYgKHIgPT0gMCB8fCByID09IDEpXG4gXHRcdFx0cmV0dXJuIHNrZXkuc2tleTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEtWTV9TMzkwX0tFWU9QX0lTS0U6XG5AQCAtNTgwLDE0ICYjNDM7NTgwLDE0IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfa2V5b3Aoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBrdm0gKmt2bSwgaW50IG9wXG4gXHRcdFx0cmV0dXJuIHNrZXkuc2tleTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEtWTV9TMzkwX0tFWU9QX1JSQkU6XG4tXHRcdHIgPSBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdChhc2NlLCBnZm4pO1xuLVx0XHRpZiAociBcdTAwM2UgMClcbi1cdFx0XHRyZXR1cm4gciBcdTAwM2NcdTAwM2MgMTtcbiYjNDM7XHRcdHIgPSBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdChhc2NlLCBnZm4sIFx1MDAyNnNrZXkpO1xuJiM0MztcdFx0aWYgKCFyKVxuJiM0MztcdFx0XHRyZXR1cm4gc2tleS5za2V5O1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuLVx0cmV0dXJuIHI7XG4mIzQzO1x0cmV0dXJuIHIgXHUwMDNlIDAgPyAtRUZBVUxUIDogcjtcbiB9XG4gXG4gLyogU2VjdGlvbjogZGV2aWNlIHJlbGF0ZWQgKi9cbkBAIC0xMjE5LDggJiM0MzsxMjE5LDggQEAgc3RhdGljIHZvaWQga3ZtX3MzOTBfc3luY19yZXF1ZXN0X2Jyb2FkY2FzdChzdHJ1Y3Qga3ZtICprdm0sIGludCByZXEpXG4gXG4gLypcbiAgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGt2bS1cdTAwM2VzcmN1IGhlbGQgdG8gYXZvaWQgcmFjZXMgb24gbWVtc2xvdHMsIGFuZCB3aXRoXG4tICoga3ZtLVx1MDAzZXNsb3RzX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsIGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKCksXG4tICogYW5kIGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoKS5cbiYjNDM7ICoga3ZtLVx1MDAzZXNsb3RzX2FyY2hfbG9jayB0byBhdm9pZCByYWNlcyB3aXRoIG91cnNlbHZlcyxcbiYjNDM7ICoga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb24oKSwgYW5kIGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoKS5cbiAgKi9cbiBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuQEAgLTEyNjUsNyAmIzQzOzEyNjUsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXG4gfVxuIFxuIC8qXG4tICogTXVzdCBiZSBjYWxsZWQgd2l0aCBrdm0tXHUwMDNlc2xvdHNfbG9jayB0byBhdm9pZCByYWNlcyB3aXRoIG91cnNlbHZlcyxcbiYjNDM7ICogTXVzdCBiZSBjYWxsZWQgd2l0aCBrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLFxuICAqIGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbigpIGFuZCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKCkuXG4gICovXG4gc3RhdGljIGludCBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXG5AQCAtMTMwMCw3ICYjNDM7MTMwMCw5IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0sXG4ge1xuIFx0aW50IHJlcyA9IC1FTlhJTztcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuJiM0MztcdGd1YXJkKHNyY3UpKFx1MDAyNmt2bS1cdTAwM2VzcmN1KTtcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2FyY2hfbG9jayk7XG4mIzQzO1xuIFx0c3dpdGNoIChhdHRyLVx1MDAzZWF0dHIpIHtcbiBcdGNhc2UgS1ZNX1MzOTBfVk1fTUlHUkFUSU9OX1NUQVJUOlxuIFx0XHRyZXMgPSBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oa3ZtKTtcbkBAIC0xMzExLDcgJiM0MzsxMzEzLDYgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSxcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuIFx0fVxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiBcbiBcdHJldHVybiByZXM7XG4gfVxuQEAgLTIyMTQsNyAmIzQzOzIyMTUsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX2dldF9za2V5cyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9za2V5cyAqYXJncylcbiBcdH1cbiBcbiBcdGt2ZnJlZShrZXlzKTtcbi1cdHJldHVybiByO1xuJiM0MztcdHJldHVybiByIFx1MDAzYz0gMCA/IHIgOiAtRUZBVUxUO1xuIH1cbiBcbiBzdGF0aWMgaW50IGt2bV9zMzkwX3NldF9za2V5cyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9za2V5cyAqYXJncylcbkBAIC0yMjc2LDcgJiM0MzsyMjc3LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfc2tleXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfc2tleXMgKmFyZ3MpXG4gXHRrdm1fczM5MF9mcmVlX21tdV9jYWNoZShtYyk7XG4gb3V0OlxuIFx0a3ZmcmVlKGtleXMpO1xuLVx0cmV0dXJuIHI7XG4mIzQzO1x0cmV0dXJuIHIgXHUwMDNjPSAwID8gciA6IC1FRkFVTFQ7XG4gfVxuIFxuIC8qXG5AQCAtMjM4Niw3ICYjNDM7MjM4Nyw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X2NtbWFfYml0cyhzdHJ1Y3Qga3ZtICprdm0sXG4gXG4gXHRzZXRfYml0KEdNQVBfRkxBR19VU0VTX0NNTSwgXHUwMDI2a3ZtLVx1MDAzZWFyY2guZ21hcC1cdTAwM2VmbGFncyk7XG4gXG4tXHRyZXR1cm4gcjtcbiYjNDM7XHRyZXR1cm4gciBcdTAwM2M9IDAgPyByIDogLUVGQVVMVDtcbiB9XG4gXG4gLyoqXG5AQCAtMjkzNCw2ICYjNDM7MjkzNSw5IEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdGNhc2UgS1ZNX1MzOTBfSU5URVJSVVBUOiB7XG4gXHRcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgczM5MGludDtcbiBcbiYjNDM7XHRcdHIgPSAtRUlOVkFMO1xuJiM0MztcdFx0aWYgKGt2bV9pc191Y29udHJvbChrdm0pKVxuJiM0MztcdFx0XHRicmVhaztcbiBcdFx0ciA9IC1FRkFVTFQ7XG4gXHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZzMzkwaW50LCBhcmdwLCBzaXplb2YoczM5MGludCkpKVxuIFx0XHRcdGJyZWFrO1xuQEAgLTI5OTgsOSAmIzQzOzMwMDIsOCBAQCBpbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gXHRcdHIgPSAtRUZBVUxUO1xuIFx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2YXJncywgYXJncCwgc2l6ZW9mKGFyZ3MpKSlcbiBcdFx0XHRicmVhaztcbi1cdFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4tXHRcdHIgPSBrdm1fczM5MF9nZXRfY21tYV9iaXRzKGt2bSwgXHUwMDI2YXJncyk7XG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4mIzQzO1x0XHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNmt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2spXG4mIzQzO1x0XHRcdHIgPSBrdm1fczM5MF9nZXRfY21tYV9iaXRzKGt2bSwgXHUwMDI2YXJncyk7XG4gXHRcdGlmICghcikge1xuIFx0XHRcdHIgPSBjb3B5X3RvX3VzZXIoYXJncCwgXHUwMDI2YXJncywgc2l6ZW9mKGFyZ3MpKTtcbiBcdFx0XHRpZiAocilcbkBAIC0zMDE0LDkgJiM0MzszMDE3LDkgQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0XHRyID0gLUVGQVVMVDtcbiBcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmFyZ3MsIGFyZ3AsIHNpemVvZihhcmdzKSkpXG4gXHRcdFx0YnJlYWs7XG4tXHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuJiM0MztcdFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcbiBcdFx0ciA9IGt2bV9zMzkwX3NldF9jbW1hX2JpdHMoa3ZtLCBcdTAwMjZhcmdzKTtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXHRjYXNlIEtWTV9TMzkwX1BWX0NPTU1BTkQ6IHtcbkBAIC0zMjQ3LDcgJiM0MzszMjUwLDggQEAgc3RhdGljIHZvaWQga3ZtX3MzOTBfY3J5cHRvX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuIFxuIHN0YXRpYyB2b2lkIHNjYV9kaXNwb3NlKHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4tXHRmcmVlX3BhZ2VzX2V4YWN0KGt2bS1cdTAwM2VhcmNoLnNjYSwgc2l6ZW9mKCprdm0tXHUwMDNlYXJjaC5zY2EpKTtcbiYjNDM7XHRpZiAoa3ZtLVx1MDAzZWFyY2guc2NhKVxuJiM0MztcdFx0ZnJlZV9wYWdlc19leGFjdChrdm0tXHUwMDNlYXJjaC5zY2EsIHNpemVvZigqa3ZtLVx1MDAzZWFyY2guc2NhKSk7XG4gXHRrdm0tXHUwMDNlYXJjaC5zY2EgPSBOVUxMO1xuIH1cbiBcbkBAIC0zNDYxLDcgJiM0MzszNDY1LDcgQEAgc3RhdGljIHZvaWQgc2NhX2RlbF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRzdHJ1Y3QgZXNjYV9ibG9jayAqc2NhID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5zY2E7XG4gXG4tXHRpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKVxuJiM0MztcdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkgfHwgIXZjcHUtXHUwMDNlYXJjaC5pbml0aWFsaXplZClcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Y2xlYXJfYml0X2ludih2Y3B1LVx1MDAzZXZjcHVfaWQsICh1bnNpZ25lZCBsb25nICopc2NhLVx1MDAzZW1jbik7XG5AQCAtMzQ4MSw4ICYjNDM7MzQ4NSw4IEBAIHN0YXRpYyB2b2lkIHNjYV9hZGRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKVxuIFx0XHRyZXR1cm47XG4gXG4mIzQzO1x0V1JJVEVfT05DRShzY2EtXHUwMDNlY3B1W3ZjcHUtXHUwMDNldmNwdV9pZF0uc2RhLCB2aXJ0X3RvX3BoeXModmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jaykpO1xuIFx0c2V0X2JpdF9pbnYodmNwdS1cdTAwM2V2Y3B1X2lkLCAodW5zaWduZWQgbG9uZyAqKXNjYS1cdTAwM2VtY24pO1xuLVx0c2NhLVx1MDAzZWNwdVt2Y3B1LVx1MDAzZXZjcHVfaWRdLnNkYSA9IHZpcnRfdG9fcGh5cyh2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrKTtcbiB9XG4gXG4gc3RhdGljIGludCBzY2FfY2FuX2FkZF92Y3B1KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkKVxuQEAgLTM2MTMsNiAmIzQzOzM2MTcsOSBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAodGVzdF9rdm1fZmFjaWxpdHkodmNwdS1cdTAwM2Vrdm0sIDc0KSB8fCB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnVzZXJfaW5zdHIwIHx8XG4gXHQgICAgdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC51c2VyX29wZXJleGVjKVxuIFx0XHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWljdGwgfD0gSUNUTF9PUEVSRVhDO1xuJiM0MztcbiYjNDM7XHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bigpIGFuZCBrdm1fYXJjaF92Y3B1X2lvY3RsKCkgKi9cbiYjNDM7XHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaW5pdGlhbGl6ZWQsIHRydWUpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBrdm1faGFzX3Bja21vX3N1YmZ1bmMoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIG5yKVxuQEAgLTM2NzQsNyAmIzQzOzM2ODEsOCBAQCBzdGF0aWMgdm9pZCBrdm1fczM5MF92Y3B1X2NyeXB0b19zZXR1cChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gdm9pZCBrdm1fczM5MF92Y3B1X3Vuc2V0dXBfY21tYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydCh2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWNicmxvKSk7XG4mIzQzO1x0aWYgKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlY2JybG8pXG4mIzQzO1x0XHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcGh5c190b192aXJ0KHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlY2JybG8pKTtcbiBcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlY2JybG8gPSAwO1xuIH1cbiBcbkBAIC0zNzkyLDIxICYjNDM7MzgwMCwyMSBAQCBpbnQga3ZtX2FyY2hfdmNwdV9wcmVjcmVhdGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO0RFRklORV9GUkVFKHNpZV9wYWdlLCBzdHJ1Y3Qgc2llX3BhZ2UgKiwgaWYgKF9UKSBmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpKF9UKSkpXG4mIzQzO1xuIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0c3RydWN0IHNpZV9wYWdlICpzaWVfcGFnZTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYyBfX2ZyZWUoa3ZtX3MzOTBfbW11X2NhY2hlKSA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IHNpZV9wYWdlICpzaWVfcGFnZSBfX2ZyZWUoc2llX3BhZ2UpID0gTlVMTDtcbiBcdGludCByYztcbiBcbiBcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHNpZV9wYWdlKSAhPSA0MDk2KTtcbi1cdHZjcHUtXHUwMDNlYXJjaC5tYyA9IGt2bV9zMzkwX25ld19tbXVfY2FjaGUoKTtcbi1cdGlmICghdmNwdS1cdTAwM2VhcmNoLm1jKVxuJiM0MztcdG1jID0ga3ZtX3MzOTBfbmV3X21tdV9jYWNoZSgpO1xuJiM0MztcdGlmICghbWMpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0c2llX3BhZ2UgPSAoc3RydWN0IHNpZV9wYWdlICopIGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLVx0aWYgKCFzaWVfcGFnZSkge1xuLVx0XHRrdm1fczM5MF9mcmVlX21tdV9jYWNoZSh2Y3B1LVx1MDAzZWFyY2gubWMpO1xuLVx0XHR2Y3B1LVx1MDAzZWFyY2gubWMgPSBOVUxMO1xuJiM0MztcdGlmICghc2llX3BhZ2UpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuLVx0fVxuIFxuIFx0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jayA9IFx1MDAyNnNpZV9wYWdlLVx1MDAzZXNpZV9ibG9jaztcbiBcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlaXRkYmEgPSB2aXJ0X3RvX3BoeXMoXHUwMDI2c2llX3BhZ2UtXHUwMDNlaXRkYik7XG5AQCAtMzg0OCwxMCAmIzQzOzM4NTYsOSBAQCBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2Vrdm1fdmFsaWRfcmVncyB8PSBLVk1fU1lOQ19GUFJTO1xuIFxuIFx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpIHtcbi1cdFx0cmMgPSAtRU5PTUVNO1xuIFx0XHR2Y3B1LVx1MDAzZWFyY2guZ21hcCA9IGdtYXBfbmV3X2NoaWxkKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guZ21hcCwgLTFVTCk7XG4gXHRcdGlmICghdmNwdS1cdTAwM2VhcmNoLmdtYXApXG4tXHRcdFx0Z290byBvdXRfZnJlZV9zaWVfYmxvY2s7XG4mIzQzO1x0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFxuIFx0Vk1fRVZFTlQodmNwdS1cdTAwM2Vrdm0sIDMsIFwmIzM0O2NyZWF0ZSBjcHUgJWQgYXQgMHglcCwgc2llIGJsb2NrIGF0IDB4JXBcJiMzNDssXG5AQCAtMzg1OSwyMCAmIzQzOzM4NjYsMTkgQEAgaW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHRyYWNlX2t2bV9zMzkwX2NyZWF0ZV92Y3B1KHZjcHUtXHUwMDNldmNwdV9pZCwgdmNwdSwgdmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jayk7XG4gXG4gXHRyYyA9IGt2bV9zMzkwX3ZjcHVfc2V0dXAodmNwdSk7XG4tXHRpZiAocmMpXG4tXHRcdGdvdG8gb3V0X3Vjb250cm9sX3VuaW5pdDtcbiYjNDM7XHRpZiAocmMpIHtcbiYjNDM7XHRcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKSB7XG4mIzQzO1x0XHRcdHNjb3BlZF9ndWFyZChzcGlubG9jaywgXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWNoaWxkcmVuX2xvY2spXG4mIzQzO1x0XHRcdFx0Z21hcF9yZW1vdmVfY2hpbGQodmNwdS1cdTAwM2VhcmNoLmdtYXApO1xuJiM0MztcdFx0XHR2Y3B1LVx1MDAzZWFyY2guZ21hcCA9IGdtYXBfcHV0KHZjcHUtXHUwMDNlYXJjaC5nbWFwKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XHR9XG4gXG4mIzQzO1x0dmNwdS1cdTAwM2VhcmNoLm1jID0gbm9fZnJlZV9wdHIobWMpO1xuJiM0MztcdHNpZV9wYWdlID0gTlVMTDtcbiBcdGt2bV9zMzkwX3VwZGF0ZV90b3BvbG9neV9jaGFuZ2VfcmVwb3J0KHZjcHUtXHUwMDNla3ZtLCAxKTtcbiBcdHJldHVybiAwO1xuLVxuLW91dF91Y29udHJvbF91bmluaXQ6XG4tXHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKSkge1xuLVx0XHRnbWFwX3JlbW92ZV9jaGlsZCh2Y3B1LVx1MDAzZWFyY2guZ21hcCk7XG4tXHRcdHZjcHUtXHUwMDNlYXJjaC5nbWFwID0gZ21hcF9wdXQodmNwdS1cdTAwM2VhcmNoLmdtYXApO1xuLVx0fVxuLW91dF9mcmVlX3NpZV9ibG9jazpcbi1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykodmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jaykpO1xuLVx0cmV0dXJuIHJjO1xuIH1cbiBcbiBpbnQga3ZtX2FyY2hfdmNwdV9ydW5uYWJsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5AQCAtNTAzOSw2ICYjNDM7NTA0NSwxMCBAQCBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICAgIGt2bV9ydW4tXHUwMDNla3ZtX2RpcnR5X3JlZ3MgXHUwMDI2IH5LVk1fU1lOQ19TMzkwX1ZBTElEX0ZJRUxEUylcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4mIzQzO1x0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZSgpICovXG4mIzQzO1x0aWYgKCFzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pbml0aWFsaXplZCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHR2Y3B1X2xvYWQodmNwdSk7XG4gXG4gXHRpZiAoZ3Vlc3RkYmdfZXhpdF9wZW5kaW5nKHZjcHUpKSB7XG5AQCAtNTQ0Nyw2ICYjNDM7NTQ1Nyw4IEBAIGxvbmcga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLFxuIFx0XHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0IHMzOTBpbnQ7XG4gXHRcdHN0cnVjdCBrdm1fczM5MF9pcnEgczM5MGlycSA9IHt9O1xuIFxuJiM0MztcdFx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2czM5MGludCwgYXJncCwgc2l6ZW9mKHMzOTBpbnQpKSlcbiBcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdFx0aWYgKHMzOTBpbnRfdG9fczM5MGlycShcdTAwMjZzMzkwaW50LCBcdTAwMjZzMzkwaXJxKSlcbkBAIC01NTIzLDYgJiM0Mzs1NTM1LDEwIEBAIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbiBcdGxvbmcgcjtcbiBcdHUxNiByYywgcnJjO1xuIFxuJiM0MztcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUoKSAqL1xuJiM0MztcdGlmICghc21wX2xvYWRfYWNxdWlyZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaW5pdGlhbGl6ZWQpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuIFx0dmNwdV9sb2FkKHZjcHUpO1xuIFxuIFx0c3dpdGNoIChpb2N0bCkge1xuQEAgLTU3OTQsMTQgJiM0Mzs1ODEwLDMwIEBAIGludCBrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgbG9uZyBjbW1hX2RfY291bnRfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXG4mIzQzO3tcbiYjNDM7XHR1bmlvbiBwZ3N0ZSBwZ3N0ZTtcbiYjNDM7XG4mIzQzO1x0cGdzdGUgPSBwZ3N0ZV9nZXRfbG9jayhwdGVwKTtcbiYjNDM7XHRpZiAocGdzdGUuY21tYV9kKSB7XG4mIzQzO1x0XHRwZ3N0ZS5jbW1hX2QgPSAwO1xuJiM0MztcdFx0YXRvbWljNjRfZGVjKHdhbGstXHUwMDNlcHJpdik7XG4mIzQzO1x0fVxuJiM0MztcdHBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRcdFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqb2xkLFxuIFx0XHRcdFx0Y29uc3Qgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbmV3LFxuIFx0XHRcdFx0ZW51bSBrdm1fbXJfY2hhbmdlIGNoYW5nZSlcbiB7XG4tXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYyA9IE5VTEw7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGRhdF93YWxrX29wcyBvcHMgPSB7IC5wdGVfZW50cnkgPSBjbW1hX2RfY291bnRfcHRlLCB9O1xuJiM0MztcdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jIF9fZnJlZShrdm1fczM5MF9tbXVfY2FjaGUpID0gTlVMTDtcbiBcdGludCByYyA9IDA7XG4gXG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNmt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2spO1xuJiM0MztcbiBcdGlmIChjaGFuZ2UgPT0gS1ZNX01SX0ZMQUdTX09OTFkpXG4gXHRcdHJldHVybjtcbiBcbkBAIC01ODEyLDYgJiM0Mzs1ODQ0LDEyIEBAIHZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuIFx0fVxuIFxuIFx0c2NvcGVkX2d1YXJkKHdyaXRlX2xvY2ssIFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jaykge1xuJiM0MztcdFx0aWYgKGt2bS1cdTAwM2VhcmNoLm1pZ3JhdGlvbl9tb2RlIFx1MDAyNlx1MDAyNiBrdm0tXHUwMDNlYXJjaC51c2VfY21tYSBcdTAwMjZcdTAwMjYgb2xkKSB7XG4mIzQzO1x0XHRcdF9kYXRfd2Fsa19nZm5fcmFuZ2Uob2xkLVx1MDAzZWJhc2VfZ2ZuLCBvbGQtXHUwMDNlYmFzZV9nZm4gJiM0Mzsgb2xkLVx1MDAzZW5wYWdlcyxcbiYjNDM7XHRcdFx0XHRcdCAgICBrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWFzY2UsIFx1MDAyNm9wcywgREFUX1dBTEtfSUdOX0hPTEVTLFxuJiM0MztcdFx0XHRcdFx0ICAgIFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNtbWFfZGlydHlfcGFnZXMpO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0c3dpdGNoIChjaGFuZ2UpIHtcbiBcdFx0Y2FzZSBLVk1fTVJfREVMRVRFOlxuIFx0XHRcdHJjID0gZGF0X2RlbGV0ZV9zbG90KG1jLCBrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWFzY2UsIG9sZC1cdTAwM2ViYXNlX2dmbiwgb2xkLVx1MDAzZW5wYWdlcyk7XG5AQCAtNTgzMyw3ICYjNDM7NTg3MSw2IEBAIHZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuIG91dDpcbiBcdGlmIChyYylcbiBcdFx0cHJfd2FybihcJiMzNDtmYWlsZWQgdG8gY29tbWl0IG1lbW9yeSByZWdpb25cXG5cJiMzNDspO1xuLVx0a3ZtX3MzOTBfZnJlZV9tbXVfY2FjaGUobWMpO1xuIFx0cmV0dXJuO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3ByaXYuYyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jXG5pbmRleCBhZDBkZGM0MzNhNzNjLi5iMWJhMjRjMzQ2ZWZhIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9wcml2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jXG5AQCAtMjg5LDYgJiM0MzsyODksNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9pc2tlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBzdGF0aWMgaW50IGhhbmRsZV9ycmJlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGdhZGRyO1xuJiM0MztcdHVuaW9uIHNrZXkgc2tleTtcbiBcdGludCByZWcxLCByZWcyO1xuIFx0aW50IHJjO1xuIFxuQEAgLTMwNywxMiAmIzQzOzMwOCwxMiBAQCBzdGF0aWMgaW50IGhhbmRsZV9ycmJlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGdhZGRyID0ga3ZtX3MzOTBfbG9naWNhbF90b19lZmZlY3RpdmUodmNwdSwgZ2FkZHIpO1xuIFx0Z2FkZHIgPSBrdm1fczM5MF9yZWFsX3RvX2Ficyh2Y3B1LCBnYWRkcik7XG4gXHRzY29wZWRfZ3VhcmQocmVhZF9sb2NrLCBcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VtbXVfbG9jaylcbi1cdFx0cmMgPSBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh2Y3B1LVx1MDAzZWFyY2guZ21hcC1cdTAwM2Vhc2NlLCBncGFfdG9fZ2ZuKGdhZGRyKSk7XG4mIzQzO1x0XHRyYyA9IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHZjcHUtXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWFzY2UsIGdwYV90b19nZm4oZ2FkZHIpLCBcdTAwMjZza2V5KTtcbiBcdGlmIChyYyBcdTAwM2UgMClcbiBcdFx0cmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LCByYyk7XG4gXHRpZiAocmMgXHUwMDNjIDApXG4gXHRcdHJldHVybiByYztcbi1cdGt2bV9zMzkwX3NldF9wc3dfY2ModmNwdSwgcmMpO1xuJiM0MztcdGt2bV9zMzkwX3NldF9wc3dfY2ModmNwdSwgKHNrZXkuc2tleSBcdTAwM2VcdTAwM2UgMSkgXHUwMDI2IDMpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTEyNjAsOCAmIzQzOzEyNjEsOSBAQCBzdGF0aWMgaW50IGhhbmRsZV9lc3NhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0LyogUmV0cnkgdGhlIEVTU0EgaW5zdHJ1Y3Rpb24gKi9cbiBcdFx0a3ZtX3MzOTBfcmV0cnlfaW5zdHIodmNwdSk7XG4gXHR9IGVsc2Uge1xuLVx0XHRzY29wZWRfZ3VhcmQocmVhZF9sb2NrLCBcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VtbXVfbG9jaylcbi1cdFx0XHRpID0gX19kb19lc3NhKHZjcHUsIG9yYyk7XG4mIzQzO1x0XHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZXNsb3RzX2FyY2hfbG9jaylcbiYjNDM7XHRcdFx0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlbW11X2xvY2spXG4mIzQzO1x0XHRcdFx0aSA9IF9fZG9fZXNzYSh2Y3B1LCBvcmMpO1xuIFx0XHRpZiAoaSBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gaTtcbiBcdFx0LyogQWNjb3VudCBmb3IgdGhlIHBvc3NpYmxlIGV4dHJhIGNicmwgZW50cnkgKi9cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3B2LmMgYi9hcmNoL3MzOTAva3ZtL3B2LmNcbmluZGV4IDFiZWFjYzg0MWNhODUuLmIwMmUwMTU5ZDNjZDIgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL3B2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vcHYuY1xuQEAgLTI0NCw2ICYjNDM7MjQ0LDI0IEBAIHN0YXRpYyB2b2lkIGt2bV9zMzkwX2NsZWFyX3B2X3N0YXRlKHN0cnVjdCBrdm0gKmt2bSlcbiBcdGt2bS1cdTAwM2VhcmNoLnB2LnN0b3JfdmFyID0gTlVMTDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGt2bV9zMzkwX3B2X2Rpc3Bvc2VfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmcmVlX3N0b3JfYmFzZSlcbiYjNDM7e1xuJiM0MztcdGlmIChmcmVlX3N0b3JfYmFzZSlcbiYjNDM7XHRcdGZyZWVfcGFnZXModmNwdS1cdTAwM2VhcmNoLnB2LnN0b3JfYmFzZSwgZ2V0X29yZGVyKHV2X2luZm8uZ3Vlc3RfY3B1X3N0b3JfbGVuKSk7XG4mIzQzO1x0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNpZGFfYWRkcih2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrKSk7XG4mIzQzO1x0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2Vwdl9oYW5kbGVfY3B1ID0gMDtcbiYjNDM7XHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZXB2X2hhbmRsZV9jb25maWcgPSAwO1xuJiM0MztcdG1lbXNldChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gucHYsIDAsIHNpemVvZih2Y3B1LVx1MDAzZWFyY2gucHYpKTtcbiYjNDM7XHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZXNkZiA9IDA7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgc2lkYWQgZmllbGQgKGZvciBzZGYgPT0gMikgaXMgbm93IHRoZSBnYmVhIGZpZWxkIChmb3Igc2RmID09IDApLlxuJiM0MztcdCAqIFVzZSB0aGUgcmVzZXQgdmFsdWUgb2YgZ2JlYSB0byBhdm9pZCBsZWFraW5nIHRoZSBrZXJuZWwgcG9pbnRlciBvZlxuJiM0MztcdCAqIHRoZSBqdXN0IGZyZWVkIHNpZGEuXG4mIzQzO1x0ICovXG4mIzQzO1x0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VnYmVhID0gMTtcbiYjNDM7XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfVExCX0ZMVVNILCB2Y3B1KTtcbiYjNDM7fVxuJiM0MztcbiBpbnQga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYylcbiB7XG4gXHRpbnQgY2M7XG5AQCAtMjU4LDI0ICYjNDM7Mjc2LDkgQEAgaW50IGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXG4gXHRXQVJOX09OQ0UoY2MsIFwmIzM0O3Byb3R2aXJ0IGRlc3Ryb3kgY3B1IGZhaWxlZCByYyAleCBycmMgJXhcJiMzNDssICpyYywgKnJyYyk7XG4gXG4gXHQvKiBJbnRlbmRlZCBtZW1vcnkgbGVhayBmb3Igc29tZXRoaW5nIHRoYXQgc2hvdWxkIG5ldmVyIGhhcHBlbi4gKi9cbi1cdGlmICghY2MpXG4tXHRcdGZyZWVfcGFnZXModmNwdS1cdTAwM2VhcmNoLnB2LnN0b3JfYmFzZSxcbi1cdFx0XHQgICBnZXRfb3JkZXIodXZfaW5mby5ndWVzdF9jcHVfc3Rvcl9sZW4pKTtcbi1cbi1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzaWRhX2FkZHIodmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jaykpO1xuLVx0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2Vwdl9oYW5kbGVfY3B1ID0gMDtcbi1cdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlcHZfaGFuZGxlX2NvbmZpZyA9IDA7XG4tXHRtZW1zZXQoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnB2LCAwLCBzaXplb2YodmNwdS1cdTAwM2VhcmNoLnB2KSk7XG4tXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZXNkZiA9IDA7XG4tXHQvKlxuLVx0ICogVGhlIHNpZGFkIGZpZWxkIChmb3Igc2RmID09IDIpIGlzIG5vdyB0aGUgZ2JlYSBmaWVsZCAoZm9yIHNkZiA9PSAwKS5cbi1cdCAqIFVzZSB0aGUgcmVzZXQgdmFsdWUgb2YgZ2JlYSB0byBhdm9pZCBsZWFraW5nIHRoZSBrZXJuZWwgcG9pbnRlciBvZlxuLVx0ICogdGhlIGp1c3QgZnJlZWQgc2lkYS5cbi1cdCAqL1xuLVx0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VnYmVhID0gMTtcbi1cdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9UTEJfRkxVU0gsIHZjcHUpO1xuJiM0MztcdGt2bV9zMzkwX3B2X2Rpc3Bvc2VfY3B1KHZjcHUsICFjYyk7XG4gXG4tXHRyZXR1cm4gY2MgPyBFSU8gOiAwO1xuJiM0MztcdHJldHVybiBjYyA/IC1FSU8gOiAwO1xuIH1cbiBcbiBpbnQga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKVxuQEAgLTMxOSw5ICYjNDM7MzIyLDcgQEAgaW50IGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYylcbiBcdFx0ICAgICB1dmNiLmhlYWRlci5ycmMpO1xuIFxuIFx0aWYgKGNjKSB7XG4tXHRcdHUxNiBkdW1teTtcbi1cbi1cdFx0a3ZtX3MzOTBfcHZfZGVzdHJveV9jcHUodmNwdSwgXHUwMDI2ZHVtbXksIFx1MDAyNmR1bW15KTtcbiYjNDM7XHRcdGt2bV9zMzkwX3B2X2Rpc3Bvc2VfY3B1KHZjcHUsIHRydWUpO1xuIFx0XHRyZXR1cm4gLUVJTztcbiBcdH1cbiBcbkBAIC04MDksNyAmIzQzOzgxMCw3IEBAIHN0YXRpYyBpbnQgdW5wYWNrX29uZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgYWRkciwgdTY0IHR3ZWFrLFxuIFx0XHRcdHJldHVybiAtRUFHQUlOO1xuIFx0fVxuIFxuLVx0aWYgKHJldCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FQUdBSU4pXG4mIzQzO1x0aWYgKHJldCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FQUdBSU4gXHUwMDI2XHUwMDI2IHJldCAhPSAtRUlOVFIpXG4gXHRcdEtWTV9VVl9FVkVOVChrdm0sIDMsIFwmIzM0O1BST1RWSVJUIFZNIFVOUEFDSzogZmFpbGVkIGFkZHIgJWxseCB3aXRoIHJjICV4IHJyYyAleFwmIzM0OyxcbiBcdFx0XHQgICAgIHV2Y2IuZ2FkZHIsICpyYywgKnJyYyk7XG4gXHRyZXR1cm4gcmV0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fYXJjaF92Y3B1X2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF92Y3B1X2lvY3RsX3J1biYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF92Y3B1X2lvY3RsJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGwmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbiYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbiYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9wdl9kZXN0cm95X2NwdSYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9wdl9jcmVhdGVfY3B1JiMzNDssCiAgICAmIzM0O2hhbmRsZV9ycmJlJiMzNDssCiAgICAmIzM0O2hhbmRsZV9lc3NhJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2tleW9wJiMzNDssCiAgICAmIzM0O2RhdF9yZXNldF9yZWZlcmVuY2VfYml0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgczM5MCBLVk0gaW1wbGVtZW50YXRpb24sIGluY2x1ZGluZyBmaXhpbmcgcmFjZSBjb25kaXRpb25zIGR1cmluZyB2Q1BVIGNyZWF0aW9uL2luaXRpYWxpemF0aW9uLCBmaXhpbmcgbWVtb3J5IGxlYWtzLCBhbmQgdXBkYXRpbmcgbG9ja2luZyBtZWNoYW5pc21zICh1c2luZyBzbG90c19hcmNoX2xvY2spLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBvZiBLVk0gaW9jdGxzIGFuZCBtZW1vcnkgbWFuYWdlbWVudCwgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk0OTcwNjQ3YzRiM2M5MjQ1NmRlM2NkZjAwMzZmZjg3YmRkYjIzYzUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzIDE3OjA5OjQ4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCBlYWEzNGM1YmQzYzExLi5lZGY3NWI2YWQyMGNlIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtNDQwLDYgJiM0Mzs0NDAsNyBAQCBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7CiAJYm9vbCBza2V5X2VuYWJsZWQ7CiAJLyogSW5kaWNhdG9yIGlmIHRoZSBhY2Nlc3MgcmVnaXN0ZXJzIGhhdmUgYmVlbiBsb2FkZWQgZnJvbSBndWVzdCAqLwogCWJvb2wgYWNyc19sb2FkZWQ7CiYjNDM7CWJvb2wgaW5pdGlhbGl6ZWQ7CiAJc3RydWN0IGt2bV9zMzkwX3B2X3ZjcHUgcHY7CiAJdW5pb24gZGlhZzMxOF9pbmZvIGRpYWczMThfaW5mbzsKIAlzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYzsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZGF0LmMgYi9hcmNoL3MzOTAva3ZtL2RhdC5jCmluZGV4IGVkNDI1OWQxNzYyOTUuLjNmMmQ2ZTg5MDJkNzYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vZGF0LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9kYXQuYwpAQCAtNzU1LDEzICYjNDM7NzU1LDE1IEBAIGludCBkYXRfY29uZF9zZXRfc3RvcmFnZV9rZXkoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbW1jLCB1bmlvbiBhc2NlIGFzY2UsIGdmCiAJcmV0dXJuIHJjOwogfQogCi1pbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4pCiYjNDM7aW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLCB1bmlvbiBza2V5ICpza2V5KQogewogCXVuaW9uIHBnc3RlIHBnc3RlLCBvbGQ7CiAJdW5pb24gY3JzdGUgKmNyc3RlcDsKIAl1bmlvbiBwdGUgKnB0ZXA7CiAJaW50IHJjOwogCiYjNDM7CXNrZXktJmd0O3NrZXkgPSAwOwomIzQzOwogCXJjID0gZGF0X2VudHJ5X3dhbGsoTlVMTCwgZ2ZuLCBhc2NlLCBEQVRfV0FMS19BTlksIFRBQkxFX1RZUEVfUEFHRV9UQUJMRSwgJmFtcDtjcnN0ZXAsICZhbXA7cHRlcCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CkBAIC03NzEsMjEgJiM0Mzs3NzMsMjMgQEAgaW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuKQogCiAJCWlmICghY3JzdGUuaC5mYyB8fCAhY3JzdGUucy5mYzEucHIpCiAJCQlyZXR1cm4gMDsKLQkJcmV0dXJuIHBhZ2VfcmVzZXRfcmVmZXJlbmNlZChsYXJnZV9jcnN0ZV90b19waHlzKCpjcnN0ZXAsIGdmbikpOwomIzQzOwkJc2tleS0mZ3Q7c2tleSA9IHBhZ2VfcmVzZXRfcmVmZXJlbmNlZChsYXJnZV9jcnN0ZV90b19waHlzKCpjcnN0ZXAsIGdmbikpICZsdDsmbHQ7IDE7CiYjNDM7CQlyZXR1cm4gMDsKIAl9CiAJb2xkID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7CiAJcGdzdGUgPSBvbGQ7CiAKIAlpZiAoIXB0ZXAtJmd0O2guaSkgewotCQlyYyA9IHBhZ2VfcmVzZXRfcmVmZXJlbmNlZChwdGVfb3JpZ2luKCpwdGVwKSk7Ci0JCXBnc3RlLmhyID0gcmMgJmd0OyZndDsgMTsKJiM0MzsJCXNrZXktJmd0O3NrZXkgPSBwYWdlX3Jlc2V0X3JlZmVyZW5jZWQocHRlX29yaWdpbigqcHRlcCkpICZsdDsmbHQ7IDE7CiYjNDM7CQlwZ3N0ZS5ociA9IHNrZXktJmd0O3I7CiAJfQotCXJjIHw9IChwZ3N0ZS5nciAmbHQ7Jmx0OyAxKSB8IHBnc3RlLmdjOwomIzQzOwlza2V5LSZndDtyIHw9IHBnc3RlLmdyOwomIzQzOwlza2V5LSZndDtjIHw9IHBnc3RlLmdjOwogCXBnc3RlLmdyID0gMDsKIAogCWRhdF91cGRhdGVfcHRlcF9zZChvbGQsIHBnc3RlLCBwdGVwKTsKIAlwZ3N0ZV9zZXRfdW5sb2NrKHB0ZXAsIHBnc3RlKTsKLQlyZXR1cm4gcmM7CiYjNDM7CXJldHVybiAwOwogfQogCiBzdGF0aWMgbG9uZyBkYXRfcmVzZXRfc2tleXNfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspCkBAIC04NDYsNiAmIzQzOzg1MCw3IEBAIHN0YXRpYyBsb25nIF9kYXRfc2xvdF9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsCiAJc3RydWN0IHNsb3RfcHJpdiAqcCA9IHdhbGstJmd0O3ByaXY7CiAJdW5pb24gY3JzdGUgZHVtbXkgPSB7IC52YWwgPSBwLSZndDt0b2tlbiB9OwogCXVuaW9uIHB0ZSBuZXdfcHRlLCBwdGUgPSBSRUFEX09OQ0UoKnB0ZXApOwomIzQzOwl1bmlvbiBwZ3N0ZSBwZ3N0ZTsKIAogCW5ld19wdGUgPSBfUFRFX1RPSyhkdW1teS50b2sudHlwZSwgZHVtbXkudG9rLnBhcik7CiAKQEAgLTg1Myw3ICYjNDM7ODU4LDExIEBAIHN0YXRpYyBsb25nIF9kYXRfc2xvdF9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsCiAJaWYgKHB0ZS52YWwgPT0gbmV3X3B0ZS52YWwpCiAJCXJldHVybiAwOwogCi0JZGF0X3B0ZXBfeGNoZyhwdGVwLCBuZXdfcHRlLCBnZm4sIHdhbGstJmd0O2FzY2UsIGZhbHNlKTsKJiM0MzsJcGdzdGUgPSBwZ3N0ZV9nZXRfbG9jayhwdGVwKTsKJiM0MzsJcGdzdGUgPSBfX2RhdF9wdGVwX3hjaGcocHRlcCwgcGdzdGUsIG5ld19wdGUsIGdmbiwgd2Fsay0mZ3Q7YXNjZSwgZmFsc2UpOwomIzQzOwlwZ3N0ZS5jbW1hX2QgPSAwOwomIzQzOwlwZ3N0ZV9zZXRfdW5sb2NrKHB0ZXAsIHBnc3RlKTsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9kYXQuaCBiL2FyY2gvczM5MC9rdm0vZGF0LmgKaW5kZXggZmFkNjA1MzA1ZTA1Yy4uMTQxZWU3YjlmMDE5MSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9kYXQuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2RhdC5oCkBAIC01MzcsNyAmIzQzOzUzNyw3IEBAIGludCBkYXRfc2V0X3N0b3JhZ2Vfa2V5KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCB1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmCiAJCQl1bmlvbiBza2V5IHNrZXksIGJvb2wgbnEpOwogaW50IGRhdF9jb25kX3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLAogCQkJICAgICB1bmlvbiBza2V5IHNrZXksIHVuaW9uIHNrZXkgKm9sZGtleSwgYm9vbCBucSwgYm9vbCBtciwgYm9vbCBtYyk7Ci1pbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4pOwomIzQzO2ludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbiwgdW5pb24gc2tleSAqc2tleSk7CiBsb25nIGRhdF9yZXNldF9za2V5cyh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IHN0YXJ0KTsKIAogdW5zaWduZWQgbG9uZyBkYXRfZ2V0X3B0dmFsKHN0cnVjdCBwYWdlX3RhYmxlICp0YWJsZSwgc3RydWN0IHB0dmFsX3BhcmFtIHBhcmFtKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jIGIvYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMKaW5kZXggZmVlODAwNDdiZDk0Zi4uM2NjNDVmN2Y1YjJkNyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMKQEAgLTkxLDkgJiM0Mzs5MSw5IEBAIGludCBrdm1fczM5MF9mYXVsdGluX2dmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGd1ZXN0X2ZhCiAJCS8qIEFjY2VzcyBvdXRzaWRlIG1lbW9yeSwgYWRkcmVzc2luZyBleGNlcHRpb24uICovCiAJCWlmIChpc19ub3Nsb3RfcGZuKGYtJmd0O3BmbikpCiAJCQlyZXR1cm4gUEdNX0FERFJFU1NJTkc7Ci0JCS8qIFNpZ25hbCBwZW5kaW5nOiB0cnkgYWdhaW4uICovCi0JCWlmIChmLSZndDtwZm4gPT0gS1ZNX1BGTl9FUlJfU0lHUEVORElORykKLQkJCXJldHVybiAtRUFHQUlOOwomIzQzOwkJLyogRmF0YWwgc2lnbmFsIHBlbmRpbmc6IGJhaWwgb3V0LiAqLwomIzQzOwkJaWYgKGlzX3NpZ3BlbmRpbmdfcGZuKGYtJmd0O3BmbikpCiYjNDM7CQkJcmV0dXJuIC1FSU5UUjsKIAkJLyogQ2hlY2sgaWYgaXQmIzM5O3MgcmVhZC1vbmx5IG1lbW9yeTsgZG9uJiMzOTt0IHRyeSB0byBhY3R1YWxseSBoYW5kbGUgdGhhdCBjYXNlLiAqLwogCQlpZiAoZi0mZ3Q7cGZuID09IEtWTV9QRk5fRVJSX1JPX0ZBVUxUKQogCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMKaW5kZXggOWUzZTZiMGQ3MmFkNi4uNmIzZjk3YTc1MTNiMyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jCkBAIC00NSwxMyAmIzQzOzQ1LDE2IEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtX3MzOTBfZ2liICpnaWI7CiBzdGF0aWMgaW50IHNjYV9leHRfY2FsbF9wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50ICpzcmNfaWQpCiB7CiAJc3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5zY2E7Ci0JdW5pb24gZXNjYV9zaWdwX2N0cmwgc2lncF9jdHJsID0gc2NhLSZndDtjcHVbdmNwdS0mZ3Q7dmNwdV9pZF0uc2lncF9jdHJsOwomIzQzOwl1bmlvbiBlc2NhX3NpZ3BfY3RybCBzaWdwX2N0cmw7CiAKIAlpZiAoIWt2bV9zMzkwX3Rlc3RfY3B1ZmxhZ3ModmNwdSwgQ1BVU1RBVF9FQ0FMTF9QRU5EKSkKIAkJcmV0dXJuIDA7CiYjNDM7CWlmIChrdm1faXNfdWNvbnRyb2wodmNwdS0mZ3Q7a3ZtKSkKJiM0MzsJCXJldHVybiAwOwogCiAJQlVHX09OKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSk7CiAKJiM0MzsJc2lncF9jdHJsID0gc2NhLSZndDtjcHVbdmNwdS0mZ3Q7dmNwdV9pZF0uc2lncF9jdHJsOwogCWlmIChzcmNfaWQpCiAJCSpzcmNfaWQgPSBzaWdwX2N0cmwuc2NuOwogCkBAIC02MCwxMyAmIzQzOzYzLDE2IEBAIHN0YXRpYyBpbnQgc2NhX2V4dF9jYWxsX3BlbmRpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgKnNyY19pZCkKIAogc3RhdGljIGludCBzY2FfaW5qZWN0X2V4dF9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNyY19pZCkKIHsKLQlzdHJ1Y3QgZXNjYV9ibG9jayAqc2NhID0gdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnNjYTsKLQl1bmlvbiBlc2NhX3NpZ3BfY3RybCAqc2lncF9jdHJsID0gJmFtcDtzY2EtJmd0O2NwdVt2Y3B1LSZndDt2Y3B1X2lkXS5zaWdwX2N0cmw7CiAJdW5pb24gZXNjYV9zaWdwX2N0cmwgb2xkX3ZhbCwgbmV3X3ZhbCA9IHsuc2NuID0gc3JjX2lkLCAuYyA9IDF9OwomIzQzOwlzdHJ1Y3QgZXNjYV9ibG9jayAqc2NhID0gdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnNjYTsKJiM0MzsJdW5pb24gZXNjYV9zaWdwX2N0cmwgKnNpZ3BfY3RybDsKIAlpbnQgZXhwZWN0LCByYzsKIAogCUJVR19PTigha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpOwomIzQzOwlpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtJmd0O2t2bSkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKIAomIzQzOwlzaWdwX2N0cmwgPSAmYW1wO3NjYS0mZ3Q7Y3B1W3ZjcHUtJmd0O3ZjcHVfaWRdLnNpZ3BfY3RybDsKIAlvbGRfdmFsID0gUkVBRF9PTkNFKCpzaWdwX2N0cmwpOwogCW9sZF92YWwuYyA9IDA7CiAKQEAgLTg0LDEwICYjNDM7OTAsMTMgQEAgc3RhdGljIGludCBzY2FfaW5qZWN0X2V4dF9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNyY19pZCkKIHN0YXRpYyB2b2lkIHNjYV9jbGVhcl9leHRfY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5zY2E7Ci0JdW5pb24gZXNjYV9zaWdwX2N0cmwgKnNpZ3BfY3RybCA9ICZhbXA7c2NhLSZndDtjcHVbdmNwdS0mZ3Q7dmNwdV9pZF0uc2lncF9jdHJsOwomIzQzOwl1bmlvbiBlc2NhX3NpZ3BfY3RybCAqc2lncF9jdHJsOwogCi0JaWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSkKJiM0MzsJaWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSB8fCAhdmNwdS0mZ3Q7YXJjaC5pbml0aWFsaXplZCB8fCBrdm1faXNfdWNvbnRyb2wodmNwdS0mZ3Q7a3ZtKSkKIAkJcmV0dXJuOwomIzQzOwomIzQzOwkvKiBJbml0aWFsaXplIGFmdGVyIHRoZSBhYm92ZSBjaGVjaywgdG8gcHJldmVudCBnb2luZyBvdXQgb2YgYm91bmRzICovCiYjNDM7CXNpZ3BfY3RybCA9ICZhbXA7c2NhLSZndDtjcHVbdmNwdS0mZ3Q7dmNwdV9pZF0uc2lncF9jdHJsOwogCWt2bV9zMzkwX2NsZWFyX2NwdWZsYWdzKHZjcHUsIENQVVNUQVRfRUNBTExfUEVORCk7CiAKIAlXUklURV9PTkNFKHNpZ3BfY3RybC0mZ3Q7dmFsdWUsIDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCmluZGV4IDE1MGI1ZGQyMTcwZTIuLjUxOGE2OWM1NWU4NWMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKQEAgLTU3MSw3ICYjNDM7NTcxLDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9rZXlvcChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGt2bSAqa3ZtLCBpbnQgb3AKIAlzd2l0Y2ggKG9wKSB7CiAJY2FzZSBLVk1fUzM5MF9LRVlPUF9TU0tFOgogCQlyID0gZGF0X2NvbmRfc2V0X3N0b3JhZ2Vfa2V5KG1jLCBhc2NlLCBnZm4sIHNrZXksICZhbXA7c2tleSwgMCwgMCwgMCk7Ci0JCWlmIChyICZndDs9IDApCiYjNDM7CQlpZiAociA9PSAwIHx8IHIgPT0gMSkKIAkJCXJldHVybiBza2V5LnNrZXk7CiAJCWJyZWFrOwogCWNhc2UgS1ZNX1MzOTBfS0VZT1BfSVNLRToKQEAgLTU4MCwxNCAmIzQzOzU4MCwxNCBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX2tleW9wKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3Qga3ZtICprdm0sIGludCBvcAogCQkJcmV0dXJuIHNrZXkuc2tleTsKIAkJYnJlYWs7CiAJY2FzZSBLVk1fUzM5MF9LRVlPUF9SUkJFOgotCQlyID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQoYXNjZSwgZ2ZuKTsKLQkJaWYgKHIgJmd0OyAwKQotCQkJcmV0dXJuIHIgJmx0OyZsdDsgMTsKJiM0MzsJCXIgPSBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdChhc2NlLCBnZm4sICZhbXA7c2tleSk7CiYjNDM7CQlpZiAoIXIpCiYjNDM7CQkJcmV0dXJuIHNrZXkuc2tleTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXJldHVybiByOwomIzQzOwlyZXR1cm4gciAmZ3Q7IDAgPyAtRUZBVUxUIDogcjsKIH0KIAogLyogU2VjdGlvbjogZGV2aWNlIHJlbGF0ZWQgKi8KQEAgLTEyMTksOCAmIzQzOzEyMTksOCBAQCBzdGF0aWMgdm9pZCBrdm1fczM5MF9zeW5jX3JlcXVlc3RfYnJvYWRjYXN0KHN0cnVjdCBrdm0gKmt2bSwgaW50IHJlcSkKIAogLyoKICAqIE11c3QgYmUgY2FsbGVkIHdpdGgga3ZtLSZndDtzcmN1IGhlbGQgdG8gYXZvaWQgcmFjZXMgb24gbWVtc2xvdHMsIGFuZCB3aXRoCi0gKiBrdm0tJmd0O3Nsb3RzX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsIGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKCksCi0gKiBhbmQga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cygpLgomIzQzOyAqIGt2bS0mZ3Q7c2xvdHNfYXJjaF9sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLAomIzQzOyAqIGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKCksIGFuZCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKCkuCiAgKi8KIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSkKIHsKQEAgLTEyNjUsNyAmIzQzOzEyNjUsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pCiB9CiAKIC8qCi0gKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGt2bS0mZ3Q7c2xvdHNfbG9jayB0byBhdm9pZCByYWNlcyB3aXRoIG91cnNlbHZlcywKJiM0MzsgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGt2bS0mZ3Q7c2xvdHNfYXJjaF9sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLAogICoga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKCkgYW5kIGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoKS4KICAqLwogc3RhdGljIGludCBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pCkBAIC0xMzAwLDcgJiM0MzsxMzAwLDkgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSwKIHsKIAlpbnQgcmVzID0gLUVOWElPOwogCi0JbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7c2xvdHNfbG9jayk7CiYjNDM7CWd1YXJkKHNyY3UpKCZhbXA7a3ZtLSZndDtzcmN1KTsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7a3ZtLSZndDtzbG90c19hcmNoX2xvY2spOwomIzQzOwogCXN3aXRjaCAoYXR0ci0mZ3Q7YXR0cikgewogCWNhc2UgS1ZNX1MzOTBfVk1fTUlHUkFUSU9OX1NUQVJUOgogCQlyZXMgPSBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oa3ZtKTsKQEAgLTEzMTEsNyAmIzQzOzEzMTMsNiBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtLAogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KLQltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O3Nsb3RzX2xvY2spOwogCiAJcmV0dXJuIHJlczsKIH0KQEAgLTIyMTQsNyAmIzQzOzIyMTUsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX2dldF9za2V5cyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9za2V5cyAqYXJncykKIAl9CiAKIAlrdmZyZWUoa2V5cyk7Ci0JcmV0dXJuIHI7CiYjNDM7CXJldHVybiByICZsdDs9IDAgPyByIDogLUVGQVVMVDsKIH0KIAogc3RhdGljIGludCBrdm1fczM5MF9zZXRfc2tleXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfc2tleXMgKmFyZ3MpCkBAIC0yMjc2LDcgJiM0MzsyMjc3LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfc2tleXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfc2tleXMgKmFyZ3MpCiAJa3ZtX3MzOTBfZnJlZV9tbXVfY2FjaGUobWMpOwogb3V0OgogCWt2ZnJlZShrZXlzKTsKLQlyZXR1cm4gcjsKJiM0MzsJcmV0dXJuIHIgJmx0Oz0gMCA/IHIgOiAtRUZBVUxUOwogfQogCiAvKgpAQCAtMjM4Niw3ICYjNDM7MjM4Nyw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X2NtbWFfYml0cyhzdHJ1Y3Qga3ZtICprdm0sCiAKIAlzZXRfYml0KEdNQVBfRkxBR19VU0VTX0NNTSwgJmFtcDtrdm0tJmd0O2FyY2guZ21hcC0mZ3Q7ZmxhZ3MpOwogCi0JcmV0dXJuIHI7CiYjNDM7CXJldHVybiByICZsdDs9IDAgPyByIDogLUVGQVVMVDsKIH0KIAogLyoqCkBAIC0yOTM0LDYgJiM0MzsyOTM1LDkgQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKQogCWNhc2UgS1ZNX1MzOTBfSU5URVJSVVBUOiB7CiAJCXN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgczM5MGludDsKIAomIzQzOwkJciA9IC1FSU5WQUw7CiYjNDM7CQlpZiAoa3ZtX2lzX3Vjb250cm9sKGt2bSkpCiYjNDM7CQkJYnJlYWs7CiAJCXIgPSAtRUZBVUxUOwogCQlpZiAoY29weV9mcm9tX3VzZXIoJmFtcDtzMzkwaW50LCBhcmdwLCBzaXplb2YoczM5MGludCkpKQogCQkJYnJlYWs7CkBAIC0yOTk4LDkgJiM0MzszMDAyLDggQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKQogCQlyID0gLUVGQVVMVDsKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZhbXA7YXJncywgYXJncCwgc2l6ZW9mKGFyZ3MpKSkKIAkJCWJyZWFrOwotCQltdXRleF9sb2NrKCZhbXA7a3ZtLSZndDtzbG90c19sb2NrKTsKLQkJciA9IGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoa3ZtLCAmYW1wO2FyZ3MpOwotCQltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O3Nsb3RzX2xvY2spOwomIzQzOwkJc2NvcGVkX2d1YXJkKG11dGV4LCAmYW1wO2t2bS0mZ3Q7c2xvdHNfYXJjaF9sb2NrKQomIzQzOwkJCXIgPSBrdm1fczM5MF9nZXRfY21tYV9iaXRzKGt2bSwgJmFtcDthcmdzKTsKIAkJaWYgKCFyKSB7CiAJCQlyID0gY29weV90b191c2VyKGFyZ3AsICZhbXA7YXJncywgc2l6ZW9mKGFyZ3MpKTsKIAkJCWlmIChyKQpAQCAtMzAxNCw5ICYjNDM7MzAxNyw5IEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZykKIAkJciA9IC1FRkFVTFQ7CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmYW1wO2FyZ3MsIGFyZ3AsIHNpemVvZihhcmdzKSkpCiAJCQlicmVhazsKLQkJbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7c2xvdHNfbG9jayk7CiYjNDM7CQltdXRleF9sb2NrKCZhbXA7a3ZtLSZndDtzbG90c19hcmNoX2xvY2spOwogCQlyID0ga3ZtX3MzOTBfc2V0X2NtbWFfYml0cyhrdm0sICZhbXA7YXJncyk7Ci0JCW11dGV4X3VubG9jaygmYW1wO2t2bS0mZ3Q7c2xvdHNfbG9jayk7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O3Nsb3RzX2FyY2hfbG9jayk7CiAJCWJyZWFrOwogCX0KIAljYXNlIEtWTV9TMzkwX1BWX0NPTU1BTkQ6IHsKQEAgLTMyNDcsNyAmIzQzOzMyNTAsOCBAQCBzdGF0aWMgdm9pZCBrdm1fczM5MF9jcnlwdG9faW5pdChzdHJ1Y3Qga3ZtICprdm0pCiAKIHN0YXRpYyB2b2lkIHNjYV9kaXNwb3NlKHN0cnVjdCBrdm0gKmt2bSkKIHsKLQlmcmVlX3BhZ2VzX2V4YWN0KGt2bS0mZ3Q7YXJjaC5zY2EsIHNpemVvZigqa3ZtLSZndDthcmNoLnNjYSkpOwomIzQzOwlpZiAoa3ZtLSZndDthcmNoLnNjYSkKJiM0MzsJCWZyZWVfcGFnZXNfZXhhY3Qoa3ZtLSZndDthcmNoLnNjYSwgc2l6ZW9mKCprdm0tJmd0O2FyY2guc2NhKSk7CiAJa3ZtLSZndDthcmNoLnNjYSA9IE5VTEw7CiB9CiAKQEAgLTM0NjEsNyAmIzQzOzM0NjUsNyBAQCBzdGF0aWMgdm9pZCBzY2FfZGVsX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXN0cnVjdCBlc2NhX2Jsb2NrICpzY2EgPSB2Y3B1LSZndDtrdm0tJmd0O2FyY2guc2NhOwogCi0JaWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSkKJiM0MzsJaWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSB8fCAhdmNwdS0mZ3Q7YXJjaC5pbml0aWFsaXplZCkKIAkJcmV0dXJuOwogCiAJY2xlYXJfYml0X2ludih2Y3B1LSZndDt2Y3B1X2lkLCAodW5zaWduZWQgbG9uZyAqKXNjYS0mZ3Q7bWNuKTsKQEAgLTM0ODEsOCAmIzQzOzM0ODUsOCBAQCBzdGF0aWMgdm9pZCBzY2FfYWRkX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCWlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpCiAJCXJldHVybjsKIAomIzQzOwlXUklURV9PTkNFKHNjYS0mZ3Q7Y3B1W3ZjcHUtJmd0O3ZjcHVfaWRdLnNkYSwgdmlydF90b19waHlzKHZjcHUtJmd0O2FyY2guc2llX2Jsb2NrKSk7CiAJc2V0X2JpdF9pbnYodmNwdS0mZ3Q7dmNwdV9pZCwgKHVuc2lnbmVkIGxvbmcgKilzY2EtJmd0O21jbik7Ci0Jc2NhLSZndDtjcHVbdmNwdS0mZ3Q7dmNwdV9pZF0uc2RhID0gdmlydF90b19waHlzKHZjcHUtJmd0O2FyY2guc2llX2Jsb2NrKTsKIH0KIAogc3RhdGljIGludCBzY2FfY2FuX2FkZF92Y3B1KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkKQpAQCAtMzYxMyw2ICYjNDM7MzYxNyw5IEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpZiAodGVzdF9rdm1fZmFjaWxpdHkodmNwdS0mZ3Q7a3ZtLCA3NCkgfHwgdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnVzZXJfaW5zdHIwIHx8CiAJICAgIHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC51c2VyX29wZXJleGVjKQogCQl2Y3B1LSZndDthcmNoLnNpZV9ibG9jay0mZ3Q7aWN0bCB8PSBJQ1RMX09QRVJFWEM7CiYjNDM7CiYjNDM7CS8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKCkgYW5kIGt2bV9hcmNoX3ZjcHVfaW9jdGwoKSAqLwomIzQzOwlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO3ZjcHUtJmd0O2FyY2guaW5pdGlhbGl6ZWQsIHRydWUpOwogfQogCiBzdGF0aWMgYm9vbCBrdm1faGFzX3Bja21vX3N1YmZ1bmMoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIG5yKQpAQCAtMzY3NCw3ICYjNDM7MzY4MSw4IEBAIHN0YXRpYyB2b2lkIGt2bV9zMzkwX3ZjcHVfY3J5cHRvX3NldHVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogdm9pZCBrdm1fczM5MF92Y3B1X3Vuc2V0dXBfY21tYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydCh2Y3B1LSZndDthcmNoLnNpZV9ibG9jay0mZ3Q7Y2JybG8pKTsKJiM0MzsJaWYgKHZjcHUtJmd0O2FyY2guc2llX2Jsb2NrLSZndDtjYnJsbykKJiM0MzsJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwaHlzX3RvX3ZpcnQodmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O2NicmxvKSk7CiAJdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O2NicmxvID0gMDsKIH0KIApAQCAtMzc5MiwyMSAmIzQzOzM4MDAsMjEgQEAgaW50IGt2bV9hcmNoX3ZjcHVfcHJlY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkKQogCXJldHVybiAwOwogfQogCiYjNDM7REVGSU5FX0ZSRUUoc2llX3BhZ2UsIHN0cnVjdCBzaWVfcGFnZSAqLCBpZiAoX1QpIGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykoX1QpKSkKJiM0MzsKIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0Jc3RydWN0IHNpZV9wYWdlICpzaWVfcGFnZTsKJiM0MzsJc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMgX19mcmVlKGt2bV9zMzkwX21tdV9jYWNoZSkgPSBOVUxMOwomIzQzOwlzdHJ1Y3Qgc2llX3BhZ2UgKnNpZV9wYWdlIF9fZnJlZShzaWVfcGFnZSkgPSBOVUxMOwogCWludCByYzsKIAogCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHNpZV9wYWdlKSAhPSA0MDk2KTsKLQl2Y3B1LSZndDthcmNoLm1jID0ga3ZtX3MzOTBfbmV3X21tdV9jYWNoZSgpOwotCWlmICghdmNwdS0mZ3Q7YXJjaC5tYykKJiM0MzsJbWMgPSBrdm1fczM5MF9uZXdfbW11X2NhY2hlKCk7CiYjNDM7CWlmICghbWMpCiAJCXJldHVybiAtRU5PTUVNOwogCXNpZV9wYWdlID0gKHN0cnVjdCBzaWVfcGFnZSAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKLQlpZiAoIXNpZV9wYWdlKSB7Ci0JCWt2bV9zMzkwX2ZyZWVfbW11X2NhY2hlKHZjcHUtJmd0O2FyY2gubWMpOwotCQl2Y3B1LSZndDthcmNoLm1jID0gTlVMTDsKJiM0MzsJaWYgKCFzaWVfcGFnZSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCiAJdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2sgPSAmYW1wO3NpZV9wYWdlLSZndDtzaWVfYmxvY2s7CiAJdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O2l0ZGJhID0gdmlydF90b19waHlzKCZhbXA7c2llX3BhZ2UtJmd0O2l0ZGIpOwpAQCAtMzg0OCwxMCAmIzQzOzM4NTYsOSBAQCBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCQl2Y3B1LSZndDtydW4tJmd0O2t2bV92YWxpZF9yZWdzIHw9IEtWTV9TWU5DX0ZQUlM7CiAKIAlpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtJmd0O2t2bSkpIHsKLQkJcmMgPSAtRU5PTUVNOwogCQl2Y3B1LSZndDthcmNoLmdtYXAgPSBnbWFwX25ld19jaGlsZCh2Y3B1LSZndDtrdm0tJmd0O2FyY2guZ21hcCwgLTFVTCk7CiAJCWlmICghdmNwdS0mZ3Q7YXJjaC5nbWFwKQotCQkJZ290byBvdXRfZnJlZV9zaWVfYmxvY2s7CiYjNDM7CQkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJVk1fRVZFTlQodmNwdS0mZ3Q7a3ZtLCAzLCAmIzM0O2NyZWF0ZSBjcHUgJWQgYXQgMHglcCwgc2llIGJsb2NrIGF0IDB4JXAmIzM0OywKQEAgLTM4NTksMjAgJiM0MzszODY2LDE5IEBAIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJdHJhY2Vfa3ZtX3MzOTBfY3JlYXRlX3ZjcHUodmNwdS0mZ3Q7dmNwdV9pZCwgdmNwdSwgdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2spOwogCiAJcmMgPSBrdm1fczM5MF92Y3B1X3NldHVwKHZjcHUpOwotCWlmIChyYykKLQkJZ290byBvdXRfdWNvbnRyb2xfdW5pbml0OwomIzQzOwlpZiAocmMpIHsKJiM0MzsJCWlmIChrdm1faXNfdWNvbnRyb2wodmNwdS0mZ3Q7a3ZtKSkgewomIzQzOwkJCXNjb3BlZF9ndWFyZChzcGlubG9jaywgJmFtcDt2Y3B1LSZndDtrdm0tJmd0O2FyY2guZ21hcC0mZ3Q7Y2hpbGRyZW5fbG9jaykKJiM0MzsJCQkJZ21hcF9yZW1vdmVfY2hpbGQodmNwdS0mZ3Q7YXJjaC5nbWFwKTsKJiM0MzsJCQl2Y3B1LSZndDthcmNoLmdtYXAgPSBnbWFwX3B1dCh2Y3B1LSZndDthcmNoLmdtYXApOwomIzQzOwkJfQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwl9CiAKJiM0MzsJdmNwdS0mZ3Q7YXJjaC5tYyA9IG5vX2ZyZWVfcHRyKG1jKTsKJiM0MzsJc2llX3BhZ2UgPSBOVUxMOwogCWt2bV9zMzkwX3VwZGF0ZV90b3BvbG9neV9jaGFuZ2VfcmVwb3J0KHZjcHUtJmd0O2t2bSwgMSk7CiAJcmV0dXJuIDA7Ci0KLW91dF91Y29udHJvbF91bmluaXQ6Ci0JaWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LSZndDtrdm0pKSB7Ci0JCWdtYXBfcmVtb3ZlX2NoaWxkKHZjcHUtJmd0O2FyY2guZ21hcCk7Ci0JCXZjcHUtJmd0O2FyY2guZ21hcCA9IGdtYXBfcHV0KHZjcHUtJmd0O2FyY2guZ21hcCk7Ci0JfQotb3V0X2ZyZWVfc2llX2Jsb2NrOgotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykodmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2spKTsKLQlyZXR1cm4gcmM7CiB9CiAKIGludCBrdm1fYXJjaF92Y3B1X3J1bm5hYmxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTUwMzksNiAmIzQzOzUwNDUsMTAgQEAgaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkgICAga3ZtX3J1bi0mZ3Q7a3ZtX2RpcnR5X3JlZ3MgJmFtcDsgfktWTV9TWU5DX1MzOTBfVkFMSURfRklFTERTKQogCQlyZXR1cm4gLUVJTlZBTDsKIAomIzQzOwkvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4ga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKCkgKi8KJiM0MzsJaWYgKCFzbXBfbG9hZF9hY3F1aXJlKCZhbXA7dmNwdS0mZ3Q7YXJjaC5pbml0aWFsaXplZCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAl2Y3B1X2xvYWQodmNwdSk7CiAKIAlpZiAoZ3Vlc3RkYmdfZXhpdF9wZW5kaW5nKHZjcHUpKSB7CkBAIC01NDQ3LDYgJiM0Mzs1NDU3LDggQEAgbG9uZyBrdm1fYXJjaF92Y3B1X3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsCiAJCXN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgczM5MGludDsKIAkJc3RydWN0IGt2bV9zMzkwX2lycSBzMzkwaXJxID0ge307CiAKJiM0MzsJCWlmIChrdm1faXNfdWNvbnRyb2wodmNwdS0mZ3Q7a3ZtKSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZhbXA7czM5MGludCwgYXJncCwgc2l6ZW9mKHMzOTBpbnQpKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQlpZiAoczM5MGludF90b19zMzkwaXJxKCZhbXA7czM5MGludCwgJmFtcDtzMzkwaXJxKSkKQEAgLTU1MjMsNiAmIzQzOzU1MzUsMTAgQEAgbG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLAogCWxvbmcgcjsKIAl1MTYgcmMsIHJyYzsKIAomIzQzOwkvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4ga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKCkgKi8KJiM0MzsJaWYgKCFzbXBfbG9hZF9hY3F1aXJlKCZhbXA7dmNwdS0mZ3Q7YXJjaC5pbml0aWFsaXplZCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAl2Y3B1X2xvYWQodmNwdSk7CiAKIAlzd2l0Y2ggKGlvY3RsKSB7CkBAIC01Nzk0LDE0ICYjNDM7NTgxMCwzMCBAQCBpbnQga3ZtX2FyY2hfcHJlcGFyZV9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBsb25nIGNtbWFfZF9jb3VudF9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaykKJiM0Mzt7CiYjNDM7CXVuaW9uIHBnc3RlIHBnc3RlOwomIzQzOwomIzQzOwlwZ3N0ZSA9IHBnc3RlX2dldF9sb2NrKHB0ZXApOwomIzQzOwlpZiAocGdzdGUuY21tYV9kKSB7CiYjNDM7CQlwZ3N0ZS5jbW1hX2QgPSAwOwomIzQzOwkJYXRvbWljNjRfZGVjKHdhbGstJmd0O3ByaXYpOwomIzQzOwl9CiYjNDM7CXBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiB2b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwKIAkJCQlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpvbGQsCiAJCQkJY29uc3Qgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbmV3LAogCQkJCWVudW0ga3ZtX21yX2NoYW5nZSBjaGFuZ2UpCiB7Ci0Jc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMgPSBOVUxMOwomIzQzOwljb25zdCBzdHJ1Y3QgZGF0X3dhbGtfb3BzIG9wcyA9IHsgLnB0ZV9lbnRyeSA9IGNtbWFfZF9jb3VudF9wdGUsIH07CiYjNDM7CXN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jIF9fZnJlZShrdm1fczM5MF9tbXVfY2FjaGUpID0gTlVMTDsKIAlpbnQgcmMgPSAwOwogCiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO2t2bS0mZ3Q7c2xvdHNfYXJjaF9sb2NrKTsKJiM0MzsKIAlpZiAoY2hhbmdlID09IEtWTV9NUl9GTEFHU19PTkxZKQogCQlyZXR1cm47CiAKQEAgLTU4MTIsNiAmIzQzOzU4NDQsMTIgQEAgdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sCiAJfQogCiAJc2NvcGVkX2d1YXJkKHdyaXRlX2xvY2ssICZhbXA7a3ZtLSZndDttbXVfbG9jaykgewomIzQzOwkJaWYgKGt2bS0mZ3Q7YXJjaC5taWdyYXRpb25fbW9kZSAmYW1wOyZhbXA7IGt2bS0mZ3Q7YXJjaC51c2VfY21tYSAmYW1wOyZhbXA7IG9sZCkgewomIzQzOwkJCV9kYXRfd2Fsa19nZm5fcmFuZ2Uob2xkLSZndDtiYXNlX2dmbiwgb2xkLSZndDtiYXNlX2dmbiAmIzQzOyBvbGQtJmd0O25wYWdlcywKJiM0MzsJCQkJCSAgICBrdm0tJmd0O2FyY2guZ21hcC0mZ3Q7YXNjZSwgJmFtcDtvcHMsIERBVF9XQUxLX0lHTl9IT0xFUywKJiM0MzsJCQkJCSAgICAmYW1wO2t2bS0mZ3Q7YXJjaC5jbW1hX2RpcnR5X3BhZ2VzKTsKJiM0MzsJCX0KJiM0MzsKIAkJc3dpdGNoIChjaGFuZ2UpIHsKIAkJY2FzZSBLVk1fTVJfREVMRVRFOgogCQkJcmMgPSBkYXRfZGVsZXRlX3Nsb3QobWMsIGt2bS0mZ3Q7YXJjaC5nbWFwLSZndDthc2NlLCBvbGQtJmd0O2Jhc2VfZ2ZuLCBvbGQtJmd0O25wYWdlcyk7CkBAIC01ODMzLDcgJiM0Mzs1ODcxLDYgQEAgdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sCiBvdXQ6CiAJaWYgKHJjKQogCQlwcl93YXJuKCYjMzQ7ZmFpbGVkIHRvIGNvbW1pdCBtZW1vcnkgcmVnaW9uXG4mIzM0Oyk7Ci0Ja3ZtX3MzOTBfZnJlZV9tbXVfY2FjaGUobWMpOwogCXJldHVybjsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9wcml2LmMgYi9hcmNoL3MzOTAva3ZtL3ByaXYuYwppbmRleCBhZDBkZGM0MzNhNzNjLi5iMWJhMjRjMzQ2ZWZhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL3ByaXYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL3ByaXYuYwpAQCAtMjg5LDYgJiM0MzsyODksNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9pc2tlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHN0YXRpYyBpbnQgaGFuZGxlX3JyYmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXVuc2lnbmVkIGxvbmcgZ2FkZHI7CiYjNDM7CXVuaW9uIHNrZXkgc2tleTsKIAlpbnQgcmVnMSwgcmVnMjsKIAlpbnQgcmM7CiAKQEAgLTMwNywxMiAmIzQzOzMwOCwxMiBAQCBzdGF0aWMgaW50IGhhbmRsZV9ycmJlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlnYWRkciA9IGt2bV9zMzkwX2xvZ2ljYWxfdG9fZWZmZWN0aXZlKHZjcHUsIGdhZGRyKTsKIAlnYWRkciA9IGt2bV9zMzkwX3JlYWxfdG9fYWJzKHZjcHUsIGdhZGRyKTsKIAlzY29wZWRfZ3VhcmQocmVhZF9sb2NrLCAmYW1wO3ZjcHUtJmd0O2t2bS0mZ3Q7bW11X2xvY2spCi0JCXJjID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodmNwdS0mZ3Q7YXJjaC5nbWFwLSZndDthc2NlLCBncGFfdG9fZ2ZuKGdhZGRyKSk7CiYjNDM7CQlyYyA9IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHZjcHUtJmd0O2FyY2guZ21hcC0mZ3Q7YXNjZSwgZ3BhX3RvX2dmbihnYWRkciksICZhbXA7c2tleSk7CiAJaWYgKHJjICZndDsgMCkKIAkJcmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LCByYyk7CiAJaWYgKHJjICZsdDsgMCkKIAkJcmV0dXJuIHJjOwotCWt2bV9zMzkwX3NldF9wc3dfY2ModmNwdSwgcmMpOwomIzQzOwlrdm1fczM5MF9zZXRfcHN3X2NjKHZjcHUsIChza2V5LnNrZXkgJmd0OyZndDsgMSkgJmFtcDsgMyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyNjAsOCAmIzQzOzEyNjEsOSBAQCBzdGF0aWMgaW50IGhhbmRsZV9lc3NhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJLyogUmV0cnkgdGhlIEVTU0EgaW5zdHJ1Y3Rpb24gKi8KIAkJa3ZtX3MzOTBfcmV0cnlfaW5zdHIodmNwdSk7CiAJfSBlbHNlIHsKLQkJc2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgJmFtcDt2Y3B1LSZndDtrdm0tJmd0O21tdV9sb2NrKQotCQkJaSA9IF9fZG9fZXNzYSh2Y3B1LCBvcmMpOwomIzQzOwkJc2NvcGVkX2d1YXJkKG11dGV4LCAmYW1wO3ZjcHUtJmd0O2t2bS0mZ3Q7c2xvdHNfYXJjaF9sb2NrKQomIzQzOwkJCXNjb3BlZF9ndWFyZChyZWFkX2xvY2ssICZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDttbXVfbG9jaykKJiM0MzsJCQkJaSA9IF9fZG9fZXNzYSh2Y3B1LCBvcmMpOwogCQlpZiAoaSAmbHQ7IDApCiAJCQlyZXR1cm4gaTsKIAkJLyogQWNjb3VudCBmb3IgdGhlIHBvc3NpYmxlIGV4dHJhIGNicmwgZW50cnkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHYuYyBiL2FyY2gvczM5MC9rdm0vcHYuYwppbmRleCAxYmVhY2M4NDFjYTg1Li5iMDJlMDE1OWQzY2QyIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL3B2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9wdi5jCkBAIC0yNDQsNiAmIzQzOzI0NCwyNCBAQCBzdGF0aWMgdm9pZCBrdm1fczM5MF9jbGVhcl9wdl9zdGF0ZShzdHJ1Y3Qga3ZtICprdm0pCiAJa3ZtLSZndDthcmNoLnB2LnN0b3JfdmFyID0gTlVMTDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGt2bV9zMzkwX3B2X2Rpc3Bvc2VfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmcmVlX3N0b3JfYmFzZSkKJiM0Mzt7CiYjNDM7CWlmIChmcmVlX3N0b3JfYmFzZSkKJiM0MzsJCWZyZWVfcGFnZXModmNwdS0mZ3Q7YXJjaC5wdi5zdG9yX2Jhc2UsIGdldF9vcmRlcih1dl9pbmZvLmd1ZXN0X2NwdV9zdG9yX2xlbikpOwomIzQzOwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2lkYV9hZGRyKHZjcHUtJmd0O2FyY2guc2llX2Jsb2NrKSk7CiYjNDM7CXZjcHUtJmd0O2FyY2guc2llX2Jsb2NrLSZndDtwdl9oYW5kbGVfY3B1ID0gMDsKJiM0MzsJdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O3B2X2hhbmRsZV9jb25maWcgPSAwOwomIzQzOwltZW1zZXQoJmFtcDt2Y3B1LSZndDthcmNoLnB2LCAwLCBzaXplb2YodmNwdS0mZ3Q7YXJjaC5wdikpOwomIzQzOwl2Y3B1LSZndDthcmNoLnNpZV9ibG9jay0mZ3Q7c2RmID0gMDsKJiM0MzsJLyoKJiM0MzsJICogVGhlIHNpZGFkIGZpZWxkIChmb3Igc2RmID09IDIpIGlzIG5vdyB0aGUgZ2JlYSBmaWVsZCAoZm9yIHNkZiA9PSAwKS4KJiM0MzsJICogVXNlIHRoZSByZXNldCB2YWx1ZSBvZiBnYmVhIHRvIGF2b2lkIGxlYWtpbmcgdGhlIGtlcm5lbCBwb2ludGVyIG9mCiYjNDM7CSAqIHRoZSBqdXN0IGZyZWVkIHNpZGEuCiYjNDM7CSAqLwomIzQzOwl2Y3B1LSZndDthcmNoLnNpZV9ibG9jay0mZ3Q7Z2JlYSA9IDE7CiYjNDM7CWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9UTEJfRkxVU0gsIHZjcHUpOwomIzQzO30KJiM0MzsKIGludCBrdm1fczM5MF9wdl9kZXN0cm95X2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKQogewogCWludCBjYzsKQEAgLTI1OCwyNCAmIzQzOzI3Niw5IEBAIGludCBrdm1fczM5MF9wdl9kZXN0cm95X2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKQogCVdBUk5fT05DRShjYywgJiMzNDtwcm90dmlydCBkZXN0cm95IGNwdSBmYWlsZWQgcmMgJXggcnJjICV4JiMzNDssICpyYywgKnJyYyk7CiAKIAkvKiBJbnRlbmRlZCBtZW1vcnkgbGVhayBmb3Igc29tZXRoaW5nIHRoYXQgc2hvdWxkIG5ldmVyIGhhcHBlbi4gKi8KLQlpZiAoIWNjKQotCQlmcmVlX3BhZ2VzKHZjcHUtJmd0O2FyY2gucHYuc3Rvcl9iYXNlLAotCQkJICAgZ2V0X29yZGVyKHV2X2luZm8uZ3Vlc3RfY3B1X3N0b3JfbGVuKSk7Ci0KLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2lkYV9hZGRyKHZjcHUtJmd0O2FyY2guc2llX2Jsb2NrKSk7Ci0JdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O3B2X2hhbmRsZV9jcHUgPSAwOwotCXZjcHUtJmd0O2FyY2guc2llX2Jsb2NrLSZndDtwdl9oYW5kbGVfY29uZmlnID0gMDsKLQltZW1zZXQoJmFtcDt2Y3B1LSZndDthcmNoLnB2LCAwLCBzaXplb2YodmNwdS0mZ3Q7YXJjaC5wdikpOwotCXZjcHUtJmd0O2FyY2guc2llX2Jsb2NrLSZndDtzZGYgPSAwOwotCS8qCi0JICogVGhlIHNpZGFkIGZpZWxkIChmb3Igc2RmID09IDIpIGlzIG5vdyB0aGUgZ2JlYSBmaWVsZCAoZm9yIHNkZiA9PSAwKS4KLQkgKiBVc2UgdGhlIHJlc2V0IHZhbHVlIG9mIGdiZWEgdG8gYXZvaWQgbGVha2luZyB0aGUga2VybmVsIHBvaW50ZXIgb2YKLQkgKiB0aGUganVzdCBmcmVlZCBzaWRhLgotCSAqLwotCXZjcHUtJmd0O2FyY2guc2llX2Jsb2NrLSZndDtnYmVhID0gMTsKLQlrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfVExCX0ZMVVNILCB2Y3B1KTsKJiM0MzsJa3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUodmNwdSwgIWNjKTsKIAotCXJldHVybiBjYyA/IEVJTyA6IDA7CiYjNDM7CXJldHVybiBjYyA/IC1FSU8gOiAwOwogfQogCiBpbnQga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKQpAQCAtMzE5LDkgJiM0MzszMjIsNyBAQCBpbnQga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKQogCQkgICAgIHV2Y2IuaGVhZGVyLnJyYyk7CiAKIAlpZiAoY2MpIHsKLQkJdTE2IGR1bW15OwotCi0JCWt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHZjcHUsICZhbXA7ZHVtbXksICZhbXA7ZHVtbXkpOwomIzQzOwkJa3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUodmNwdSwgdHJ1ZSk7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtODA5LDcgJiM0Mzs4MTAsNyBAQCBzdGF0aWMgaW50IHVucGFja19vbmUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGFkZHIsIHU2NCB0d2VhaywKIAkJCXJldHVybiAtRUFHQUlOOwogCX0KIAotCWlmIChyZXQgJmFtcDsmYW1wOyByZXQgIT0gLUVBR0FJTikKJiM0MzsJaWYgKHJldCAmYW1wOyZhbXA7IHJldCAhPSAtRUFHQUlOICZhbXA7JmFtcDsgcmV0ICE9IC1FSU5UUikKIAkJS1ZNX1VWX0VWRU5UKGt2bSwgMywgJiMzNDtQUk9UVklSVCBWTSBVTlBBQ0s6IGZhaWxlZCBhZGRyICVsbHggd2l0aCByYyAleCBycmMgJXgmIzM0OywKIAkJCSAgICAgdXZjYi5nYWRkciwgKnJjLCAqcnJjKTsKIAlyZXR1cm4gcmV0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTgxNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDk3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYW4gczM5MCBLVk0gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggZm9yIHMzOTAgS1ZNLCBhbmQgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBpdCBxdWlja2x5LiBMZXQmIzM5O3Mgc2VlLi4uIGl0JiMzOTtzIHRvdWNoaW5nIHNldmVyYWwgY29yZSBhcmVhczogYGFyY2gvczM5MC9rdm0vYC4gIFRoZSBrZXkgY2hhbmdlcyBqdW1wIG91dCByaWdodCBhd2F5LiBUaGV5JiMzOTt2ZSBhZGRlZCBhIGBib29sIGluaXRpYWxpemVkO2AgdG8gYHN0cnVjdCBrdm1fdmNwdV9hcmNoYCBpbiBga3ZtX2hvc3QuaGAuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIHN1Z2dlc3RpbmcgdGhleSYjMzk7cmUgdHJhY2tpbmcgVkNQVSBpbml0aWFsaXphdGlvbiBzdGF0ZSwgYW5kIHByb2JhYmx5IGZpeGluZyBzb21lIHJhY2UgY29uZGl0aW9ucy4KClRoZW4sIHRoZXJlJiMzOTtzIGEgbW9kaWZpY2F0aW9uIHRvIGBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdGAgaW4gYGRhdC5jYC4gVGhlIHNpZ25hdHVyZSBjaGFuZ2VkLCByZXR1cm5pbmcgdGhlIGBza2V5YCB2aWEgYSBwb2ludGVyLiAgVGhhdCYjMzk7cyBhIHBvdGVudGlhbCBhcmVhIGZvciBzdWJ0bGUgYnVncyBpZiBub3QgaGFuZGxlZCBjb3JyZWN0bHkgYnkgYWxsIGNhbGxlcnMuIFRoZSBgZmF1bHRpbi5jYCBjaGFuZ2UsIGhhbmRsaW5nIGAtRUlOVFJgIGZyb20gYGlzX3NpZ3BlbmRpbmdfcGZuKClgLCBpcyBhIGdvb2QgZGVmZW5zaXZlIG1lYXN1cmU7IGFkZHJlc3Npbmcgc2lnbmFsIGhhbmRsaW5nIGluIGZhdWx0aW5nIHBhdGhzIGlzIGFsd2F5cyBhIHdpbi4KCk1vdmluZyB0byBgaW50ZXJydXB0LmNgLCB0aGUgY2hlY2tzIGZvciBga3ZtX2lzX3Vjb250cm9sKHZjcHUtJmd0O2t2bSlgIGluIGludGVycnVwdCBmdW5jdGlvbnMgbG9vayBsaWtlIGEgZ29vZCBzZWN1cml0eSBtZWFzdXJlLCBvbmx5IGFsbG93aW5nIHByaXZpbGVnZWQgb3BlcmF0aW9ucyBmcm9tIGFwcHJvcHJpYXRlIGNvbnRleHRzLgoKYGt2bS1zMzkwLmNgIGlzIHdoZXJlIHRoaW5ncyBnZXQgcmVhbGx5IGludGVyZXN0aW5nLiBUaGVyZSBhcmUgdXBkYXRlcyB0byBga3ZtX3MzOTBfa2V5b3BgIHRvIGFjY29tbW9kYXRlIHRoZSBgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXRgIGNoYW5nZSwgd2hpY2ggaXMgZXhwZWN0ZWQuIFRoZSB1c2Ugb2YgYGt2bS0mZ3Q7c2xvdHNfYXJjaF9sb2NrYCBpbnN0ZWFkIG9mIGBrdm0tJmd0O3Nsb3RzX2xvY2tgIGluIGBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uYCBhbmQgYGt2bV9hcmNoX3ZtX2lvY3RsYCBpcyBhIGdvb2Qgc2lnbiB0aGF0IHRoZXkmIzM5O3JlIGFkZHJlc3Npbmcgc29tZSBsb2NraW5nIGlzc3VlcywgZXNwZWNpYWxseSB3aXRoIHRoZSBDTU1BIGJpdHMsIHdoaWNoIHdvdWxkIGhhdmUgaGFkIHRvIGRvIHdpdGggdGhlIGd1ZXN0IHBoeXNpY2FsIHRvIGhvc3QgcGh5c2ljYWwgdHJhbnNsYXRpb24uIFRoZSBhZGRpdGlvbiBvZiBjaGVja3MgZm9yIHRoZSBga3ZtLSZndDthcmNoLnNjYWAgYmVmb3JlIGZyZWVpbmcgYW5kIHRoZSBWQ1BVJiMzOTtzIGluaXRpYWxpemF0aW9uIHN0YXRlIChgdmNwdS0mZ3Q7YXJjaC5pbml0aWFsaXplZGApIGluIHNldmVyYWwgc3BvdHMgc3VnZ2VzdHMgYSBmb2N1cyBvbiByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBhdm9pZGluZyB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLiBUaGUgdXNlIG9mIGBzbXBfc3RvcmVfcmVsZWFzZWAgYW5kIGBzbXBfbG9hZF9hY3F1aXJlYCB3aXRoIHRoZSBpbml0aWFsaXplZCBmbGFnIGlzIGFic29sdXRlbHkgbmVjZXNzYXJ5IGZvciBjb3JyZWN0IHN5bmNocm9uaXphdGlvbiBvbiBhIG11bHRpLWNvcmUgbWFjaGluZSwgYW5kIEkmIzM5O20gZ2xhZCB0byBzZWUgdGhhdC4gRml4aW5nIHRob3NlIG1lbW9yeSBsZWFrcyBhbmQgZXJyb3IgaGFuZGxpbmcgaXNzdWVzIGluIGBrdm1fYXJjaF92Y3B1X2NyZWF0ZWAgaXMgaW1wb3J0YW50LiBJIG5lZWQgdG8gbm90ZSB0aGF0IGZ1bmN0aW9uIGFuZCBhbmFseXplIGl0LgoKVGhlIHVzZSBvZiBgc2xvdHNfYXJjaF9sb2NrYCBpbiBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gIGFsc28gcG9pbnRzIHRvIGxvY2tpbmcgaW1wcm92ZW1lbnRzLCBhbmQgQ01NQSBkaXJ0eSBwYWdlIHVwZGF0ZXMgYXJlIGEga2V5IHBhcnQgb2YgdGhpcy4gVGhlIGBwcml2LmNgIGFuZCBgcHYuY2AgY2hhbmdlcywgd2l0aCB0aGUgdXBkYXRlZCBgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXRgIGNhbGxzIGFuZCB0aGUgYHNsb3RzX2FyY2hfbG9ja2AgdXNhZ2UgaW4gYGhhbmRsZV9lc3NhYCBhcmUgc3RhbmRhcmQgYWRhcHRhdGlvbnMgdG8gdGhlIGNoYW5nZXMgaW4gdGhlIHJlc3Qgb2YgdGhlIGNvZGUuIFRoZSBzcGxpdHRpbmcgb2YgYGt2bV9zMzkwX3B2X2Rpc3Bvc2VfY3B1YCB3aXRoIHRoZSByZXNwZWN0aXZlIGNoYW5nZXMgaW4gYGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1YCBhbmQgYGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVgIGlzIGEgZ29vZCBzdGVwIHRvd2FyZHMgc2ltcGxpZnlpbmcgdGhlIENQVSByZXNvdXJjZSBtYW5hZ2VtZW50LgoKU28sIG92ZXJhbGwsIHRoaXMgbG9va3MgbGlrZSBhIGZ1bmN0aW9uYWwgcGF0Y2ggc2VyaWVzLiBEZWZpbml0ZWx5IHdvcnRoIGEgdGhvcm91Z2ggbG9vay4gSXQgYWRkcmVzc2VzIGEgZmV3IGJ1Z3MsIGluY2x1ZGluZyByYWNlIGNvbmRpdGlvbnMgcmVsYXRlZCB0byBWQ1BVIGluaXRpYWxpemF0aW9uLCBsb2NraW5nIHByb2JsZW1zLCBhbmQgc29tZSBtZW1vcnkgbGVha3MuIFRoYXQmIzM5O3MgZ29vZCBzdHVmZi4KCk9rYXksIGxldCBtZSBsaXN0IHRoZSBmb2N1cyBzeW1ib2xzOgoKKiAgIGBrdm1fYXJjaF92Y3B1X2NyZWF0ZWAgLSBUaGF0IG9uZSBuZWVkcyBzY3J1dGlueS4KKiAgIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAKKiAgIGBrdm1fYXJjaF92Y3B1X2lvY3RsYAoqICAgYGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGxgCiogICBga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbmAKKiAgIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAKKiAgIGBrdm1fczM5MF9wdl9kZXN0cm95X2NwdWAKKiAgIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YAoqICAgYGhhbmRsZV9ycmJlYAoqICAgYGhhbmRsZV9lc3NhYAoqICAgYGt2bV9zMzkwX2tleW9wYAoqICAgYGRhdF9yZXNldF9yZWZlcmVuY2VfYml0YCAtIEtlZXAgYW4gZXllIG9uIHRoZSBgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXRgIHNpZ25hdHVyZSBjaGFuZ2UsIGFzIHdlbGwgYXMgZXZlcnkgbG9jYXRpb24gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC4KCk5vdywgbGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGUgS2NvbmZpZyBpcyBzZXQgY29ycmVjdGx5LiBzMzkwIEtWTSBkZXBlbmRzIG9uIGBDT05GSUdfS1ZNYCwgb2J2aW91c2x5LiAgTGV0JiMzOTtzIHVzZSBgZ3JlcHBlcmAgaW4gdGhlIGBhcmNoL3MzOTAva3ZtL0tjb25maWdgIHRvIHNlZQoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL0tjb25maWc9MTc9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0xOC1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzoxOTpjb25maWcgS1ZNXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMjAtXHRkZWZfdHJpc3RhdGUgeVxuLS1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7VXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDE1CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgS1ZNIFMzOTAgVUNvbnRyb2wgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgcmVmZXJlbmNlcyBga3ZtX2lzX3Vjb250cm9sKHZjcHUtJmd0O2t2bSlgLiBUaGF0IGZ1bmN0aW9uIGNhbGwsIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIEtWTSBjb2RlYmFzZSwgc3Ryb25nbHkgaW1wbGllcyB0aGF0IHRoZSBgQ09ORklHX0tWTV9TMzkwX1VDT05UUk9MYCBjb25maWd1cmF0aW9uIG9wdGlvbiAqc2hvdWxkKiBiZSBlbmFibGVkIGZvciB0aGUgdGFyZ2V0IHBsYXRmb3JtLiBHaXZlbiB0aGlzLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBpbmRlZWQgc2V0IGFzIGV4cGVjdGVkLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGUgcHJlc2VuY2UgYW5kIHN0YXR1cyBvZiBgS1ZNX1MzOTBfVUNPTlRST0xgLiBJJiMzOTtsbCBnbyBjaGVjayBgYXJjaC9zMzkwL2t2bS9LY29uZmlnYCB0byBpbnNwZWN0IHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoZSByZWxldmFudCBvcHRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjb25maWd1cmF0aW9uIGVsZW1lbnQgaXMgc2V0IGNvcnJlY3RseSwgYW5kIHRoZSBidWlsZCBpcyBwaWNraW5nIHRoaXMgb3B0aW9uIHVwIG9yIGNvbmZpZ3VyZWQgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL0tjb25maWc9MTk9Y29uZmlnIEtWTVxuLS1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7VXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDMzCgkJCQkJCQlvdXRwdXQ6IDI2MgoJCQkJCQkJdGhvdWdodHM6IDE5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGZvY3VzIHN5bWJvbHMsIHRoaW5raW5nIHRocm91Z2ggdGhpcyBhbmFseXNpczoKCioqRm9jdXMgU3ltYm9sIFJldmlldyAmYW1wOyBLVk0gSW50ZWdyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgYSBzZXQgb2Yga2V5IHN5bWJvbHMgcmVsYXRlZCB0byB0aGUgYEtWTWAgaW5mcmFzdHJ1Y3R1cmUg4oCTIGRlZmluaXRlbHkgY2VudHJhbCB0byBhbnkgZGVlcCBkaXZlIGludG8gdmlydHVhbGl6YXRpb24gb24gTGludXguIFRoZSBvYmplY3RpdmUgaGVyZSBpcyB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB3aGVyZSB0aGUgbW9zdCBjcml0aWNhbCBpbnRlcmFjdGlvbnMgYW5kIHByb2Nlc3Npbmcgb2NjdXIgd2l0aGluIHRoZSBgS1ZNYCBsYXllci4KCkkmIzM5O3ZlIGdvdCBhIGNvbXByZWhlbnNpdmUgbGlzdCBvZiBmdW5jdGlvbnMgdG8gY29uc2lkZXIuIFRoZXNlIGZ1bmN0aW9ucyByZXByZXNlbnQgdGhlIGJhY2tib25lIG9mIGBLVk1gJiMzOTtzIGludGVyYWN0aW9ucyB3aXRoIHRoZSBhcmNoaXRlY3R1cmUgYW5kIEkvTy4gSSYjMzk7bSBub3RpbmcgdGhlIGluaXRpYWwgbGlzdDoKCiogICBga3ZtX2FyY2hfdmNwdV9jcmVhdGVgOiBUaGlzIGlzIGNydWNpYWwg4oCTIHRoZSBjcmVhdGlvbiBvZiBhIHZpcnR1YWwgQ1BVIGNvbnRleHQuIEV2ZXJ5dGhpbmcgc3BpbnMgb3V0IGZyb20gaGVyZS4KKiAgIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmA6IFRoaXMgaXMgdGhlIGhlYXJ0IG9mIHRoZSBWQ1BVJiMzOTtzIGV4ZWN1dGlvbiBsb29wLCB0aGUgZ2x1ZSBiZXR3ZWVuIHVzZXJzcGFjZSBhbmQgdGhlIGd1ZXN0LgoqICAgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgOiBUaGUgZ2VuZXJhbCBwdXJwb3NlIGBpb2N0bGAgaW50ZXJmYWNlIGZvciBWQ1BVcy4KKiAgIGBrdm1fYXJjaF92Y3B1X3VubG9ja2VkX2lvY3RsYDogVmFyaWFudCBvZiB0aGUgYWJvdmUsIG9mdGVuIHVzZWQgd2hlbiBjcml0aWNhbCBzZWN0aW9ucyBkb24mIzM5O3QgbmVlZCB0byBiZSBsb2NrZWQuCiogICBga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbmA6IFRoaXMgb25lIGlzIHZlcnkgaW50ZXJlc3RpbmcsIHNpbmNlIGl0IHJlbGF0ZXMgdG8gVk0gbWlncmF0aW9uLCBzbyBpdCYjMzk7cyBhIGdvb2QgaW5jbHVzaW9uLgoqICAgYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYDogVGhpcyBpcyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGV2YWx1YXRlLgoqICAgYGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1YDogQW5kIGl0cyBjb3VudGVycGFydDogdGhlIGRlc3RydWN0aW9uIG9mIHRoZSB2aXJ0dWFsIENQVS4KKiAgIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YDogQ3JlYXRpbmcgYSB2aXJ0dWFsIENQVSwgYnV0IGZvciBhIHNwZWNpZmljIGFyY2hpdGVjdHVyZS4KKiAgIGBoYW5kbGVfcnJiZWA6IExvb2tzIGxpa2UgYSBjcnVjaWFsIGhhbmRsZXIgZm9yIGEgY2VydGFpbiB0eXBlIG9mIGluc3RydWN0aW9uIG9yIGhhcmR3YXJlIGV2ZW50LgoqICAgYGhhbmRsZV9lc3NhYDogU2ltaWxhciB0byB0aGUgYWJvdmUsIHRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWwuCiogICBga3ZtX3MzOTBfa2V5b3BgOiBUaGlzIGlzIHJlbGF0ZWQgdG8ga2V5IG9wZXJhdGlvbnMsIHByb2JhYmx5IHdpdGhpbiB0aGUgUzM5MCBhcmNoaXRlY3R1cmUuCiogICBgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXRgOiBUaGlzIGlzIGltcG9ydGFudCwgYXMgaXQgaGVscHMgd2l0aCBhIHNwZWNpZmljIGJpdCBtYW5pcHVsYXRpb24uCgpBbGwgb2YgdGhlc2UgYXJlIHNvbGlkIGNob2ljZXMuIFRoaXMgaXMgYSB2ZXJ5IHVzZWZ1bCBzZXQgb2YgZm9jdXMgc3ltYm9scyBmb3IgYSBmaXJzdCBwYXNzLiBJJiMzOTttIGdvaW5nIHRvIHNldCB0aGVzZSBzeW1ib2xzIGFzIHRoZSBrZXkgY29tcG9uZW50cyBmb3IgbXkgYW5hbHlzaXMgYW5kIGJlZ2luIGZyb20gaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+dGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IEtWTV9TMzkwX1VDT05UUk9MPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fUzM5MF9VQ09OVFJPTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfY3JlYXRlJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfaW9jdGwmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bCYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1JiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3B2X2NyZWF0ZV9jcHUmIzM0OywKICAgICYjMzQ7aGFuZGxlX3JyYmUmIzM0OywKICAgICYjMzQ7aGFuZGxlX2Vzc2EmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfa2V5b3AmIzM0OywKICAgICYjMzQ7ZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBzMzkwIEtWTSBpbXBsZW1lbnRhdGlvbiwgaW5jbHVkaW5nIGZpeGluZyByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHZDUFUgY3JlYXRpb24vaW5pdGlhbGl6YXRpb24sIGZpeGluZyBtZW1vcnkgbGVha3MsIGFuZCB1cGRhdGluZyBsb2NraW5nIG1lY2hhbmlzbXMgKHVzaW5nIHNsb3RzX2FyY2hfbG9jaykuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIEtWTSBpb2N0bHMgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LCBtYWtpbmcgdGhlbSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7dGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IEtWTV9TMzkwX1VDT05UUk9MJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDYzCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBhIE1pc3NpbmcgS2VybmVsIEZlYXR1cmUqKgoKUmlnaHQsIHNvIGBLVk1fUzM5MF9VQ09OVFJPTGAgc2VlbXMgdG8gYmUgdW5kZWZpbmVkLiBUaGF0JiMzOTtzIHVuZXhwZWN0ZWQuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgYGFyY2gvczM5MC9rdm0vS2NvbmZpZ2AgZmlsZSBhZ2Fpbi4gSSBwcm9iYWJseSBtaXNzZWQgc29tZXRoaW5nLCBvciBtYXliZSB0aGVyZSYjMzk7cyBhIGRlcGVuZGVuY3kgSSYjMzk7bSBvdmVybG9va2luZyB0aGF0JiMzOTtzIGNhdXNpbmcgaXQgbm90IHRvIGJlIGV4cG9zZWQuIEkgbmVlZCB0byBlbnN1cmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIEkmIzM5O20gdHJ5aW5nIHRvIHVzZSwgbGlrZWx5IHJlbGF0ZWQgdG8gdXNlciBjb250cm9sIGZlYXR1cmVzIGZvciBLVk0gb24gczM5MHgsIGlzIGFjdHVhbGx5IGVuYWJsZWQgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgb3B0aW9ucy4gQSBxdWljayByZS1leGFtaW5hdGlvbiBvZiB0aGUgS2NvbmZpZyBmaWxlIHNob3VsZCBnaXZlIG1lIHRoZSBhbnN3ZXIuIE1heWJlIHRoZXJlJiMzOTtzIGEgcHJlcmVxdWlzaXRlIGtlcm5lbCBmbGFnIHRoYXQgaXNuJiMzOTt0IHNldCwgb3IgcGVyaGFwcyBpdCYjMzk7cyBtb3ZlZCBvciByZW5hbWVkLiBObyBiaWcgZGVhbCwganVzdCBhIG1pbm9yIG92ZXJzaWdodC4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtLVk1fUzM5MF9VQ09OVFJPTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL0tjb25maWc9MTk9Y29uZmlnIEtWTVxuLS1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7VXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTg0MwoJCQkJCQkJb3V0cHV0OiAyNDkKCQkJCQkJCXRob3VnaHRzOiAxODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVidWdnaW5nIGEgS2VybmVsIENvbmZpZ3VyYXRpb24gSXNzdWUqKgoKT2theSwgc28gSSB0aG91Z2h0IEkgd2FzIG9udG8gc29tZXRoaW5nIHdpdGggdGhlIGBLVk1fUzM5MF9VQ09OVFJPTGAgY29uZmlndXJhdGlvbiBvcHRpb24uIFRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgd2FzIHNheWluZyBpdCBkaWRuJiMzOTt0IGV4aXN0LCB3aGljaCB3YXMgdGhyb3dpbmcgbWUgb2ZmLiBCdXQgd2FpdC4uLiBJJiMzOTt2ZSBqdXN0IHJlbWVtYmVyZWQgc2VlaW5nIGl0LCByaWdodD8gWWVzLCBpdCYjMzk7cyBkZWZpbml0ZWx5IGluIGBhcmNoL3MzOTAva3ZtL0tjb25maWdgLgoKVGhlbiB3aHkgd2FzIHRoZSB0b29sIHJlcG9ydGluZyBpdCBhcyBtaXNzaW5nPyBIbW0sIG1heWJlIGl0JiMzOTtzIGNyb3NzLXJlZmVyZW5jaW5nIGFnYWluc3QgdGhlIHdyb25nIGFyY2hpdGVjdHVyZT8gUGVyaGFwcyB0aGUgdG9vbCBpcyBkZWZhdWx0aW5nIHRvIGNoZWNraW5nIHRoZSBgeDg2YCB0cmVlIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBUaGF0IHdvdWxkIGV4cGxhaW4gdGhlIGNvbmZ1c2lvbi4gQnV0IG5vLCB0aGUgdG9vbCBzaG91bGQgYmUgY2hlY2tpbmcgKmFsbCogYEtjb25maWdgIGZpbGVzIGdsb2JhbGx5LCBub3QganVzdCBhIHNwZWNpZmljIGFyY2hpdGVjdHVyZS4KCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgc3RlcCBiYWNrIGFuZCBkb3VibGUtY2hlY2sgdGhlIGV4YWN0IHN5bnRheCBvZiB0aGUgb3B0aW9uIG5hbWUuIElzIGBLVk1fUzM5MF9VQ09OVFJPTGAgdGhlIGFic29sdXRlIHRydXRoPyBZZXMsIGBjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBmb3JtLgoKSSYjMzk7bSBzdGlsbCBtaXNzaW5nIHNvbWV0aGluZy4gTWF5YmUgdGhlIHRvb2wgaXMgbWlzdGFrZW5seSB0YXJnZXRpbmcgYGFyY2gveDg2L0tjb25maWdgPyBObywgaXQgc2hvdWxkbiYjMzk7dC4gSXQmIzM5O3Mgc3VwcG9zZWQgdG8gZG8gYSBnbG9iYWwgc2VhcmNoLgoKQWxyaWdodCwgSSYjMzk7bGwgdHJ5IHRvIHNpbXBsaWZ5IHRoaW5ncy4gSSYjMzk7bGwganVzdCB1c2UgdGhlIGJhc2ljIG9wdGlvbiwgYEtWTWAuIElmIHRoZSB0b29sIHN0aWxsIGNvbXBsYWlucywgdGhlbiBJIGtub3cgc29tZXRoaW5nIGlzIGZ1bmRhbWVudGFsbHkgd3JvbmcsIG9yLCBhcyBhIGxhc3QgcmVzb3J0LCBtYXliZSBJIHNob3VsZCBvbWl0IHRoZSBtb3JlIHNwZWNpZmljIG5hbWUuIFBlcmhhcHMganVzdCB1c2luZyBgS1ZNYCB3aWxsIGJlIGVub3VnaCBmb3IgdGhlIHRvb2wgdG8gd29yaywgYW55d2F5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2FyY2hfdmNwdV9jcmVhdGUmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4mIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfdmNwdV9pb2N0bCYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF92Y3B1X3VubG9ja2VkX2lvY3RsJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3ZtX3NldF9taWdyYXRpb24mIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24mIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfcHZfZGVzdHJveV9jcHUmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfcHZfY3JlYXRlX2NwdSYjMzQ7LAogICAgJiMzNDtoYW5kbGVfcnJiZSYjMzQ7LAogICAgJiMzNDtoYW5kbGVfZXNzYSYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9rZXlvcCYjMzQ7LAogICAgJiMzNDtkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHMzOTAgS1ZNIGltcGxlbWVudGF0aW9uLCBpbmNsdWRpbmcgZml4aW5nIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgdkNQVSBjcmVhdGlvbi9pbml0aWFsaXphdGlvbiwgZml4aW5nIG1lbW9yeSBsZWFrcywgYW5kIHVwZGF0aW5nIGxvY2tpbmcgbWVjaGFuaXNtcyAodXNpbmcgc2xvdHNfYXJjaF9sb2NrKS4gVGhlc2UgY2hhbmdlcyBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgS1ZNIGlvY3RscyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQsIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfY3JlYXRlJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfaW9jdGwmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bCYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1JiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3B2X2NyZWF0ZV9jcHUmIzM0OywKICAgICYjMzQ7aGFuZGxlX3JyYmUmIzM0OywKICAgICYjMzQ7aGFuZGxlX2Vzc2EmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfa2V5b3AmIzM0OywKICAgICYjMzQ7ZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBzMzkwIEtWTSBpbXBsZW1lbnRhdGlvbiwgaW5jbHVkaW5nIGZpeGluZyByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHZDUFUgY3JlYXRpb24vaW5pdGlhbGl6YXRpb24sIGZpeGluZyBtZW1vcnkgbGVha3MsIGFuZCB1cGRhdGluZyBsb2NraW5nIG1lY2hhbmlzbXMgKHVzaW5nIHNsb3RzX2FyY2hfbG9jaykuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIEtWTSBpb2N0bHMgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LCBtYWtpbmcgdGhlbSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MDk6NDkuMjYxNjg2MTYyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE2NTkxMjEyNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2FyY2hfdmNwdV9jcmVhdGVcIixcbiAgICBcImt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuXCIsXG4gICAgXCJrdm1fYXJjaF92Y3B1X2lvY3RsXCIsXG4gICAgXCJrdm1fYXJjaF92Y3B1X3VubG9ja2VkX2lvY3RsXCIsXG4gICAgXCJrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uXCIsXG4gICAgXCJrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvblwiLFxuICAgIFwia3ZtX3MzOTBfcHZfZGVzdHJveV9jcHVcIixcbiAgICBcImt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVcIixcbiAgICBcImhhbmRsZV9ycmJlXCIsXG4gICAgXCJoYW5kbGVfZXNzYVwiLFxuICAgIFwia3ZtX3MzOTBfa2V5b3BcIixcbiAgICBcImRhdF9yZXNldF9yZWZlcmVuY2VfYml0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBzMzkwIEtWTSBpbXBsZW1lbnRhdGlvbiwgaW5jbHVkaW5nIGZpeGluZyByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHZDUFUgY3JlYXRpb24vaW5pdGlhbGl6YXRpb24sIGZpeGluZyBtZW1vcnkgbGVha3MsIGFuZCB1cGRhdGluZyBsb2NraW5nIG1lY2hhbmlzbXMgKHVzaW5nIHNsb3RzX2FyY2hfbG9jaykuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIEtWTSBpb2N0bHMgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LCBtYWtpbmcgdGhlbSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowOTo0OS4yNjE2OTMxMTJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMzA1NTUxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDk0OTcwNjQ3YzRiM2M5MjQ1NmRlM2NkZjAwMzZmZjg3YmRkYjIzYzVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMyAxNzowOTo0OCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuaW5kZXggZWFhMzRjNWJkM2MxMS4uZWRmNzViNmFkMjBjZSAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuQEAgLTQ0MCw2ICs0NDAsNyBAQCBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7XFxuIFxcdGJvb2wgc2tleV9lbmFibGVkO1xcbiBcXHQvKiBJbmRpY2F0b3IgaWYgdGhlIGFjY2VzcyByZWdpc3RlcnMgaGF2ZSBiZWVuIGxvYWRlZCBmcm9tIGd1ZXN0ICovXFxuIFxcdGJvb2wgYWNyc19sb2FkZWQ7XFxuK1xcdGJvb2wgaW5pdGlhbGl6ZWQ7XFxuIFxcdHN0cnVjdCBrdm1fczM5MF9wdl92Y3B1IHB2O1xcbiBcXHR1bmlvbiBkaWFnMzE4X2luZm8gZGlhZzMxOF9pbmZvO1xcbiBcXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYztcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9kYXQuYyBiL2FyY2gvczM5MC9rdm0vZGF0LmNcXG5pbmRleCBlZDQyNTlkMTc2Mjk1Li4zZjJkNmU4OTAyZDc2IDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9rdm0vZGF0LmNcXG4rKysgYi9hcmNoL3MzOTAva3ZtL2RhdC5jXFxuQEAgLTc1NSwxMyArNzU1LDE1IEBAIGludCBkYXRfY29uZF9zZXRfc3RvcmFnZV9rZXkoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbW1jLCB1bmlvbiBhc2NlIGFzY2UsIGdmXFxuIFxcdHJldHVybiByYztcXG4gfVxcbiBcXG4taW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuKVxcbitpbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4sIHVuaW9uIHNrZXkgKnNrZXkpXFxuIHtcXG4gXFx0dW5pb24gcGdzdGUgcGdzdGUsIG9sZDtcXG4gXFx0dW5pb24gY3JzdGUgKmNyc3RlcDtcXG4gXFx0dW5pb24gcHRlICpwdGVwO1xcbiBcXHRpbnQgcmM7XFxuIFxcbitcXHRza2V5LVxcdTAwM2Vza2V5ID0gMDtcXG4rXFxuIFxcdHJjID0gZGF0X2VudHJ5X3dhbGsoTlVMTCwgZ2ZuLCBhc2NlLCBEQVRfV0FMS19BTlksIFRBQkxFX1RZUEVfUEFHRV9UQUJMRSwgXFx1MDAyNmNyc3RlcCwgXFx1MDAyNnB0ZXApO1xcbiBcXHRpZiAocmMpXFxuIFxcdFxcdHJldHVybiByYztcXG5AQCAtNzcxLDIxICs3NzMsMjMgQEAgaW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuKVxcbiBcXG4gXFx0XFx0aWYgKCFjcnN0ZS5oLmZjIHx8ICFjcnN0ZS5zLmZjMS5wcilcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuLVxcdFxcdHJldHVybiBwYWdlX3Jlc2V0X3JlZmVyZW5jZWQobGFyZ2VfY3JzdGVfdG9fcGh5cygqY3JzdGVwLCBnZm4pKTtcXG4rXFx0XFx0c2tleS1cXHUwMDNlc2tleSA9IHBhZ2VfcmVzZXRfcmVmZXJlbmNlZChsYXJnZV9jcnN0ZV90b19waHlzKCpjcnN0ZXAsIGdmbikpIFxcdTAwM2NcXHUwMDNjIDE7XFxuK1xcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuIFxcdG9sZCA9IHBnc3RlX2dldF9sb2NrKHB0ZXApO1xcbiBcXHRwZ3N0ZSA9IG9sZDtcXG4gXFxuIFxcdGlmICghcHRlcC1cXHUwMDNlaC5pKSB7XFxuLVxcdFxcdHJjID0gcGFnZV9yZXNldF9yZWZlcmVuY2VkKHB0ZV9vcmlnaW4oKnB0ZXApKTtcXG4tXFx0XFx0cGdzdGUuaHIgPSByYyBcXHUwMDNlXFx1MDAzZSAxO1xcbitcXHRcXHRza2V5LVxcdTAwM2Vza2V5ID0gcGFnZV9yZXNldF9yZWZlcmVuY2VkKHB0ZV9vcmlnaW4oKnB0ZXApKSBcXHUwMDNjXFx1MDAzYyAxO1xcbitcXHRcXHRwZ3N0ZS5ociA9IHNrZXktXFx1MDAzZXI7XFxuIFxcdH1cXG4tXFx0cmMgfD0gKHBnc3RlLmdyIFxcdTAwM2NcXHUwMDNjIDEpIHwgcGdzdGUuZ2M7XFxuK1xcdHNrZXktXFx1MDAzZXIgfD0gcGdzdGUuZ3I7XFxuK1xcdHNrZXktXFx1MDAzZWMgfD0gcGdzdGUuZ2M7XFxuIFxcdHBnc3RlLmdyID0gMDtcXG4gXFxuIFxcdGRhdF91cGRhdGVfcHRlcF9zZChvbGQsIHBnc3RlLCBwdGVwKTtcXG4gXFx0cGdzdGVfc2V0X3VubG9jayhwdGVwLCBwZ3N0ZSk7XFxuLVxcdHJldHVybiByYztcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0YXRpYyBsb25nIGRhdF9yZXNldF9za2V5c19wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaylcXG5AQCAtODQ2LDYgKzg1MCw3IEBAIHN0YXRpYyBsb25nIF9kYXRfc2xvdF9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsXFxuIFxcdHN0cnVjdCBzbG90X3ByaXYgKnAgPSB3YWxrLVxcdTAwM2Vwcml2O1xcbiBcXHR1bmlvbiBjcnN0ZSBkdW1teSA9IHsgLnZhbCA9IHAtXFx1MDAzZXRva2VuIH07XFxuIFxcdHVuaW9uIHB0ZSBuZXdfcHRlLCBwdGUgPSBSRUFEX09OQ0UoKnB0ZXApO1xcbitcXHR1bmlvbiBwZ3N0ZSBwZ3N0ZTtcXG4gXFxuIFxcdG5ld19wdGUgPSBfUFRFX1RPSyhkdW1teS50b2sudHlwZSwgZHVtbXkudG9rLnBhcik7XFxuIFxcbkBAIC04NTMsNyArODU4LDExIEBAIHN0YXRpYyBsb25nIF9kYXRfc2xvdF9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsXFxuIFxcdGlmIChwdGUudmFsID09IG5ld19wdGUudmFsKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdGRhdF9wdGVwX3hjaGcocHRlcCwgbmV3X3B0ZSwgZ2ZuLCB3YWxrLVxcdTAwM2Vhc2NlLCBmYWxzZSk7XFxuK1xcdHBnc3RlID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7XFxuK1xcdHBnc3RlID0gX19kYXRfcHRlcF94Y2hnKHB0ZXAsIHBnc3RlLCBuZXdfcHRlLCBnZm4sIHdhbGstXFx1MDAzZWFzY2UsIGZhbHNlKTtcXG4rXFx0cGdzdGUuY21tYV9kID0gMDtcXG4rXFx0cGdzdGVfc2V0X3VubG9jayhwdGVwLCBwZ3N0ZSk7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9kYXQuaCBiL2FyY2gvczM5MC9rdm0vZGF0LmhcXG5pbmRleCBmYWQ2MDUzMDVlMDVjLi4xNDFlZTdiOWYwMTkxIDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9rdm0vZGF0LmhcXG4rKysgYi9hcmNoL3MzOTAva3ZtL2RhdC5oXFxuQEAgLTUzNyw3ICs1MzcsNyBAQCBpbnQgZGF0X3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgdW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZlxcbiBcXHRcXHRcXHR1bmlvbiBza2V5IHNrZXksIGJvb2wgbnEpO1xcbiBpbnQgZGF0X2NvbmRfc2V0X3N0b3JhZ2Vfa2V5KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1tYywgdW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4sXFxuIFxcdFxcdFxcdCAgICAgdW5pb24gc2tleSBza2V5LCB1bmlvbiBza2V5ICpvbGRrZXksIGJvb2wgbnEsIGJvb2wgbXIsIGJvb2wgbWMpO1xcbi1pbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4pO1xcbitpbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4sIHVuaW9uIHNrZXkgKnNrZXkpO1xcbiBsb25nIGRhdF9yZXNldF9za2V5cyh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IHN0YXJ0KTtcXG4gXFxuIHVuc2lnbmVkIGxvbmcgZGF0X2dldF9wdHZhbChzdHJ1Y3QgcGFnZV90YWJsZSAqdGFibGUsIHN0cnVjdCBwdHZhbF9wYXJhbSBwYXJhbSk7XFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jIGIvYXJjaC9zMzkwL2t2bS9mYXVsdGluLmNcXG5pbmRleCBmZWU4MDA0N2JkOTRmLi4zY2M0NWY3ZjViMmQ3IDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jXFxuKysrIGIvYXJjaC9zMzkwL2t2bS9mYXVsdGluLmNcXG5AQCAtOTEsOSArOTEsOSBAQCBpbnQga3ZtX3MzOTBfZmF1bHRpbl9nZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBndWVzdF9mYVxcbiBcXHRcXHQvKiBBY2Nlc3Mgb3V0c2lkZSBtZW1vcnksIGFkZHJlc3NpbmcgZXhjZXB0aW9uLiAqL1xcbiBcXHRcXHRpZiAoaXNfbm9zbG90X3BmbihmLVxcdTAwM2VwZm4pKVxcbiBcXHRcXHRcXHRyZXR1cm4gUEdNX0FERFJFU1NJTkc7XFxuLVxcdFxcdC8qIFNpZ25hbCBwZW5kaW5nOiB0cnkgYWdhaW4uICovXFxuLVxcdFxcdGlmIChmLVxcdTAwM2VwZm4gPT0gS1ZNX1BGTl9FUlJfU0lHUEVORElORylcXG4tXFx0XFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuK1xcdFxcdC8qIEZhdGFsIHNpZ25hbCBwZW5kaW5nOiBiYWlsIG91dC4gKi9cXG4rXFx0XFx0aWYgKGlzX3NpZ3BlbmRpbmdfcGZuKGYtXFx1MDAzZXBmbikpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVFI7XFxuIFxcdFxcdC8qIENoZWNrIGlmIGl0J3MgcmVhZC1vbmx5IG1lbW9yeTsgZG9uJ3QgdHJ5IHRvIGFjdHVhbGx5IGhhbmRsZSB0aGF0IGNhc2UuICovXFxuIFxcdFxcdGlmIChmLVxcdTAwM2VwZm4gPT0gS1ZNX1BGTl9FUlJfUk9fRkFVTFQpXFxuIFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcXG5pbmRleCA5ZTNlNmIwZDcyYWQ2Li42YjNmOTdhNzUxM2IzIDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcXG4rKysgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXFxuQEAgLTQ1LDEzICs0NSwxNiBAQCBzdGF0aWMgc3RydWN0IGt2bV9zMzkwX2dpYiAqZ2liO1xcbiBzdGF0aWMgaW50IHNjYV9leHRfY2FsbF9wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50ICpzcmNfaWQpXFxuIHtcXG4gXFx0c3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5zY2E7XFxuLVxcdHVuaW9uIGVzY2Ffc2lncF9jdHJsIHNpZ3BfY3RybCA9IHNjYS1cXHUwMDNlY3B1W3ZjcHUtXFx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcXG4rXFx0dW5pb24gZXNjYV9zaWdwX2N0cmwgc2lncF9jdHJsO1xcbiBcXG4gXFx0aWYgKCFrdm1fczM5MF90ZXN0X2NwdWZsYWdzKHZjcHUsIENQVVNUQVRfRUNBTExfUEVORCkpXFxuIFxcdFxcdHJldHVybiAwO1xcbitcXHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSkpXFxuK1xcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0QlVHX09OKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSk7XFxuIFxcbitcXHRzaWdwX2N0cmwgPSBzY2EtXFx1MDAzZWNwdVt2Y3B1LVxcdTAwM2V2Y3B1X2lkXS5zaWdwX2N0cmw7XFxuIFxcdGlmIChzcmNfaWQpXFxuIFxcdFxcdCpzcmNfaWQgPSBzaWdwX2N0cmwuc2NuO1xcbiBcXG5AQCAtNjAsMTMgKzYzLDE2IEBAIHN0YXRpYyBpbnQgc2NhX2V4dF9jYWxsX3BlbmRpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgKnNyY19pZClcXG4gXFxuIHN0YXRpYyBpbnQgc2NhX2luamVjdF9leHRfY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzcmNfaWQpXFxuIHtcXG4tXFx0c3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5zY2E7XFxuLVxcdHVuaW9uIGVzY2Ffc2lncF9jdHJsICpzaWdwX2N0cmwgPSBcXHUwMDI2c2NhLVxcdTAwM2VjcHVbdmNwdS1cXHUwMDNldmNwdV9pZF0uc2lncF9jdHJsO1xcbiBcXHR1bmlvbiBlc2NhX3NpZ3BfY3RybCBvbGRfdmFsLCBuZXdfdmFsID0gey5zY24gPSBzcmNfaWQsIC5jID0gMX07XFxuK1xcdHN0cnVjdCBlc2NhX2Jsb2NrICpzY2EgPSB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guc2NhO1xcbitcXHR1bmlvbiBlc2NhX3NpZ3BfY3RybCAqc2lncF9jdHJsO1xcbiBcXHRpbnQgZXhwZWN0LCByYztcXG4gXFxuIFxcdEJVR19PTigha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpO1xcbitcXHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4rXFx0c2lncF9jdHJsID0gXFx1MDAyNnNjYS1cXHUwMDNlY3B1W3ZjcHUtXFx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcXG4gXFx0b2xkX3ZhbCA9IFJFQURfT05DRSgqc2lncF9jdHJsKTtcXG4gXFx0b2xkX3ZhbC5jID0gMDtcXG4gXFxuQEAgLTg0LDEwICs5MCwxMyBAQCBzdGF0aWMgaW50IHNjYV9pbmplY3RfZXh0X2NhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc3JjX2lkKVxcbiBzdGF0aWMgdm9pZCBzY2FfY2xlYXJfZXh0X2NhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdHN0cnVjdCBlc2NhX2Jsb2NrICpzY2EgPSB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guc2NhO1xcbi1cXHR1bmlvbiBlc2NhX3NpZ3BfY3RybCAqc2lncF9jdHJsID0gXFx1MDAyNnNjYS1cXHUwMDNlY3B1W3ZjcHUtXFx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcXG4rXFx0dW5pb24gZXNjYV9zaWdwX2N0cmwgKnNpZ3BfY3RybDtcXG4gXFxuLVxcdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpXFxuK1xcdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkgfHwgIXZjcHUtXFx1MDAzZWFyY2guaW5pdGlhbGl6ZWQgfHwga3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSkpXFxuIFxcdFxcdHJldHVybjtcXG4rXFxuK1xcdC8qIEluaXRpYWxpemUgYWZ0ZXIgdGhlIGFib3ZlIGNoZWNrLCB0byBwcmV2ZW50IGdvaW5nIG91dCBvZiBib3VuZHMgKi9cXG4rXFx0c2lncF9jdHJsID0gXFx1MDAyNnNjYS1cXHUwMDNlY3B1W3ZjcHUtXFx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcXG4gXFx0a3ZtX3MzOTBfY2xlYXJfY3B1ZmxhZ3ModmNwdSwgQ1BVU1RBVF9FQ0FMTF9QRU5EKTtcXG4gXFxuIFxcdFdSSVRFX09OQ0Uoc2lncF9jdHJsLVxcdTAwM2V2YWx1ZSwgMCk7XFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xcbmluZGV4IDE1MGI1ZGQyMTcwZTIuLjUxOGE2OWM1NWU4NWMgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXFxuKysrIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXFxuQEAgLTU3MSw3ICs1NzEsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX2tleW9wKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3Qga3ZtICprdm0sIGludCBvcFxcbiBcXHRzd2l0Y2ggKG9wKSB7XFxuIFxcdGNhc2UgS1ZNX1MzOTBfS0VZT1BfU1NLRTpcXG4gXFx0XFx0ciA9IGRhdF9jb25kX3NldF9zdG9yYWdlX2tleShtYywgYXNjZSwgZ2ZuLCBza2V5LCBcXHUwMDI2c2tleSwgMCwgMCwgMCk7XFxuLVxcdFxcdGlmIChyIFxcdTAwM2U9IDApXFxuK1xcdFxcdGlmIChyID09IDAgfHwgciA9PSAxKVxcbiBcXHRcXHRcXHRyZXR1cm4gc2tleS5za2V5O1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBLVk1fUzM5MF9LRVlPUF9JU0tFOlxcbkBAIC01ODAsMTQgKzU4MCwxNCBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX2tleW9wKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3Qga3ZtICprdm0sIGludCBvcFxcbiBcXHRcXHRcXHRyZXR1cm4gc2tleS5za2V5O1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBLVk1fUzM5MF9LRVlPUF9SUkJFOlxcbi1cXHRcXHRyID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQoYXNjZSwgZ2ZuKTtcXG4tXFx0XFx0aWYgKHIgXFx1MDAzZSAwKVxcbi1cXHRcXHRcXHRyZXR1cm4gciBcXHUwMDNjXFx1MDAzYyAxO1xcbitcXHRcXHRyID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQoYXNjZSwgZ2ZuLCBcXHUwMDI2c2tleSk7XFxuK1xcdFxcdGlmICghcilcXG4rXFx0XFx0XFx0cmV0dXJuIHNrZXkuc2tleTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuLVxcdHJldHVybiByO1xcbitcXHRyZXR1cm4gciBcXHUwMDNlIDAgPyAtRUZBVUxUIDogcjtcXG4gfVxcbiBcXG4gLyogU2VjdGlvbjogZGV2aWNlIHJlbGF0ZWQgKi9cXG5AQCAtMTIxOSw4ICsxMjE5LDggQEAgc3RhdGljIHZvaWQga3ZtX3MzOTBfc3luY19yZXF1ZXN0X2Jyb2FkY2FzdChzdHJ1Y3Qga3ZtICprdm0sIGludCByZXEpXFxuIFxcbiAvKlxcbiAgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGt2bS1cXHUwMDNlc3JjdSBoZWxkIHRvIGF2b2lkIHJhY2VzIG9uIG1lbXNsb3RzLCBhbmQgd2l0aFxcbi0gKiBrdm0tXFx1MDAzZXNsb3RzX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsIGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKCksXFxuLSAqIGFuZCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKCkuXFxuKyAqIGt2bS1cXHUwMDNlc2xvdHNfYXJjaF9sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLFxcbisgKiBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbigpLCBhbmQga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cygpLlxcbiAgKi9cXG4gc3RhdGljIGludCBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKVxcbiB7XFxuQEAgLTEyNjUsNyArMTI2NSw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSlcXG4gfVxcbiBcXG4gLypcXG4tICogTXVzdCBiZSBjYWxsZWQgd2l0aCBrdm0tXFx1MDAzZXNsb3RzX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsXFxuKyAqIE11c3QgYmUgY2FsbGVkIHdpdGgga3ZtLVxcdTAwM2VzbG90c19hcmNoX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsXFxuICAqIGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbigpIGFuZCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKCkuXFxuICAqL1xcbiBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSlcXG5AQCAtMTMwMCw3ICsxMzAwLDkgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4ge1xcbiBcXHRpbnQgcmVzID0gLUVOWElPO1xcbiBcXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG4rXFx0Z3VhcmQoc3JjdSkoXFx1MDAyNmt2bS1cXHUwMDNlc3JjdSk7XFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19hcmNoX2xvY2spO1xcbitcXG4gXFx0c3dpdGNoIChhdHRyLVxcdTAwM2VhdHRyKSB7XFxuIFxcdGNhc2UgS1ZNX1MzOTBfVk1fTUlHUkFUSU9OX1NUQVJUOlxcbiBcXHRcXHRyZXMgPSBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oa3ZtKTtcXG5AQCAtMTMxMSw3ICsxMzEzLDYgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbiBcXG4gXFx0cmV0dXJuIHJlcztcXG4gfVxcbkBAIC0yMjE0LDcgKzIyMTUsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX2dldF9za2V5cyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9za2V5cyAqYXJncylcXG4gXFx0fVxcbiBcXG4gXFx0a3ZmcmVlKGtleXMpO1xcbi1cXHRyZXR1cm4gcjtcXG4rXFx0cmV0dXJuIHIgXFx1MDAzYz0gMCA/IHIgOiAtRUZBVUxUO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGt2bV9zMzkwX3NldF9za2V5cyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9za2V5cyAqYXJncylcXG5AQCAtMjI3Niw3ICsyMjc3LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfc2tleXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfc2tleXMgKmFyZ3MpXFxuIFxcdGt2bV9zMzkwX2ZyZWVfbW11X2NhY2hlKG1jKTtcXG4gb3V0OlxcbiBcXHRrdmZyZWUoa2V5cyk7XFxuLVxcdHJldHVybiByO1xcbitcXHRyZXR1cm4gciBcXHUwMDNjPSAwID8gciA6IC1FRkFVTFQ7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTIzODYsNyArMjM4Nyw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X2NtbWFfYml0cyhzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcbiBcXHRzZXRfYml0KEdNQVBfRkxBR19VU0VTX0NNTSwgXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5nbWFwLVxcdTAwM2VmbGFncyk7XFxuIFxcbi1cXHRyZXR1cm4gcjtcXG4rXFx0cmV0dXJuIHIgXFx1MDAzYz0gMCA/IHIgOiAtRUZBVUxUO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMjkzNCw2ICsyOTM1LDkgQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbiBcXHRjYXNlIEtWTV9TMzkwX0lOVEVSUlVQVDoge1xcbiBcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0IHMzOTBpbnQ7XFxuIFxcbitcXHRcXHRyID0gLUVJTlZBTDtcXG4rXFx0XFx0aWYgKGt2bV9pc191Y29udHJvbChrdm0pKVxcbitcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0ciA9IC1FRkFVTFQ7XFxuIFxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2czM5MGludCwgYXJncCwgc2l6ZW9mKHMzOTBpbnQpKSlcXG4gXFx0XFx0XFx0YnJlYWs7XFxuQEAgLTI5OTgsOSArMzAwMiw4IEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG4gXFx0XFx0ciA9IC1FRkFVTFQ7XFxuIFxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2YXJncywgYXJncCwgc2l6ZW9mKGFyZ3MpKSlcXG4gXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuLVxcdFxcdHIgPSBrdm1fczM5MF9nZXRfY21tYV9iaXRzKGt2bSwgXFx1MDAyNmFyZ3MpO1xcbi1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuK1xcdFxcdHNjb3BlZF9ndWFyZChtdXRleCwgXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfYXJjaF9sb2NrKVxcbitcXHRcXHRcXHRyID0ga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cyhrdm0sIFxcdTAwMjZhcmdzKTtcXG4gXFx0XFx0aWYgKCFyKSB7XFxuIFxcdFxcdFxcdHIgPSBjb3B5X3RvX3VzZXIoYXJncCwgXFx1MDAyNmFyZ3MsIHNpemVvZihhcmdzKSk7XFxuIFxcdFxcdFxcdGlmIChyKVxcbkBAIC0zMDE0LDkgKzMwMTcsOSBAQCBpbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuIFxcdFxcdHIgPSAtRUZBVUxUO1xcbiBcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNmFyZ3MsIGFyZ3AsIHNpemVvZihhcmdzKSkpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbitcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2FyY2hfbG9jayk7XFxuIFxcdFxcdHIgPSBrdm1fczM5MF9zZXRfY21tYV9iaXRzKGt2bSwgXFx1MDAyNmFyZ3MpO1xcbi1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19hcmNoX2xvY2spO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcbiBcXHRjYXNlIEtWTV9TMzkwX1BWX0NPTU1BTkQ6IHtcXG5AQCAtMzI0Nyw3ICszMjUwLDggQEAgc3RhdGljIHZvaWQga3ZtX3MzOTBfY3J5cHRvX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxcbiBcXG4gc3RhdGljIHZvaWQgc2NhX2Rpc3Bvc2Uoc3RydWN0IGt2bSAqa3ZtKVxcbiB7XFxuLVxcdGZyZWVfcGFnZXNfZXhhY3Qoa3ZtLVxcdTAwM2VhcmNoLnNjYSwgc2l6ZW9mKCprdm0tXFx1MDAzZWFyY2guc2NhKSk7XFxuK1xcdGlmIChrdm0tXFx1MDAzZWFyY2guc2NhKVxcbitcXHRcXHRmcmVlX3BhZ2VzX2V4YWN0KGt2bS1cXHUwMDNlYXJjaC5zY2EsIHNpemVvZigqa3ZtLVxcdTAwM2VhcmNoLnNjYSkpO1xcbiBcXHRrdm0tXFx1MDAzZWFyY2guc2NhID0gTlVMTDtcXG4gfVxcbiBcXG5AQCAtMzQ2MSw3ICszNDY1LDcgQEAgc3RhdGljIHZvaWQgc2NhX2RlbF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbiBcXHRzdHJ1Y3QgZXNjYV9ibG9jayAqc2NhID0gdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLnNjYTtcXG4gXFxuLVxcdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpXFxuK1xcdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkgfHwgIXZjcHUtXFx1MDAzZWFyY2guaW5pdGlhbGl6ZWQpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGNsZWFyX2JpdF9pbnYodmNwdS1cXHUwMDNldmNwdV9pZCwgKHVuc2lnbmVkIGxvbmcgKilzY2EtXFx1MDAzZW1jbik7XFxuQEAgLTM0ODEsOCArMzQ4NSw4IEBAIHN0YXRpYyB2b2lkIHNjYV9hZGRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuK1xcdFdSSVRFX09OQ0Uoc2NhLVxcdTAwM2VjcHVbdmNwdS1cXHUwMDNldmNwdV9pZF0uc2RhLCB2aXJ0X3RvX3BoeXModmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2spKTtcXG4gXFx0c2V0X2JpdF9pbnYodmNwdS1cXHUwMDNldmNwdV9pZCwgKHVuc2lnbmVkIGxvbmcgKilzY2EtXFx1MDAzZW1jbik7XFxuLVxcdHNjYS1cXHUwMDNlY3B1W3ZjcHUtXFx1MDAzZXZjcHVfaWRdLnNkYSA9IHZpcnRfdG9fcGh5cyh2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jayk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgc2NhX2Nhbl9hZGRfdmNwdShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZClcXG5AQCAtMzYxMyw2ICszNjE3LDkgQEAgdm9pZCBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRpZiAodGVzdF9rdm1fZmFjaWxpdHkodmNwdS1cXHUwMDNla3ZtLCA3NCkgfHwgdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLnVzZXJfaW5zdHIwIHx8XFxuIFxcdCAgICB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gudXNlcl9vcGVyZXhlYylcXG4gXFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZWljdGwgfD0gSUNUTF9PUEVSRVhDO1xcbitcXG4rXFx0LyogUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4ga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oKSBhbmQga3ZtX2FyY2hfdmNwdV9pb2N0bCgpICovXFxuK1xcdHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmluaXRpYWxpemVkLCB0cnVlKTtcXG4gfVxcbiBcXG4gc3RhdGljIGJvb2wga3ZtX2hhc19wY2ttb19zdWJmdW5jKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBucilcXG5AQCAtMzY3NCw3ICszNjgxLDggQEAgc3RhdGljIHZvaWQga3ZtX3MzOTBfdmNwdV9jcnlwdG9fc2V0dXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXG4gdm9pZCBrdm1fczM5MF92Y3B1X3Vuc2V0dXBfY21tYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4tXFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydCh2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jay1cXHUwMDNlY2JybG8pKTtcXG4rXFx0aWYgKHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrLVxcdTAwM2VjYnJsbylcXG4rXFx0XFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydCh2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jay1cXHUwMDNlY2JybG8pKTtcXG4gXFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZWNicmxvID0gMDtcXG4gfVxcbiBcXG5AQCAtMzc5MiwyMSArMzgwMCwyMSBAQCBpbnQga3ZtX2FyY2hfdmNwdV9wcmVjcmVhdGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitERUZJTkVfRlJFRShzaWVfcGFnZSwgc3RydWN0IHNpZV9wYWdlICosIGlmIChfVCkgZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKShfVCkpKVxcbitcXG4gaW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbi1cXHRzdHJ1Y3Qgc2llX3BhZ2UgKnNpZV9wYWdlO1xcbitcXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYyBfX2ZyZWUoa3ZtX3MzOTBfbW11X2NhY2hlKSA9IE5VTEw7XFxuK1xcdHN0cnVjdCBzaWVfcGFnZSAqc2llX3BhZ2UgX19mcmVlKHNpZV9wYWdlKSA9IE5VTEw7XFxuIFxcdGludCByYztcXG4gXFxuIFxcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHNpZV9wYWdlKSAhPSA0MDk2KTtcXG4tXFx0dmNwdS1cXHUwMDNlYXJjaC5tYyA9IGt2bV9zMzkwX25ld19tbXVfY2FjaGUoKTtcXG4tXFx0aWYgKCF2Y3B1LVxcdTAwM2VhcmNoLm1jKVxcbitcXHRtYyA9IGt2bV9zMzkwX25ld19tbXVfY2FjaGUoKTtcXG4rXFx0aWYgKCFtYylcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdHNpZV9wYWdlID0gKHN0cnVjdCBzaWVfcGFnZSAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4tXFx0aWYgKCFzaWVfcGFnZSkge1xcbi1cXHRcXHRrdm1fczM5MF9mcmVlX21tdV9jYWNoZSh2Y3B1LVxcdTAwM2VhcmNoLm1jKTtcXG4tXFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5tYyA9IE5VTEw7XFxuK1xcdGlmICghc2llX3BhZ2UpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi1cXHR9XFxuIFxcbiBcXHR2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jayA9IFxcdTAwMjZzaWVfcGFnZS1cXHUwMDNlc2llX2Jsb2NrO1xcbiBcXHR2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jay1cXHUwMDNlaXRkYmEgPSB2aXJ0X3RvX3BoeXMoXFx1MDAyNnNpZV9wYWdlLVxcdTAwM2VpdGRiKTtcXG5AQCAtMzg0OCwxMCArMzg1Niw5IEBAIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdFxcdHZjcHUtXFx1MDAzZXJ1bi1cXHUwMDNla3ZtX3ZhbGlkX3JlZ3MgfD0gS1ZNX1NZTkNfRlBSUztcXG4gXFxuIFxcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cXHUwMDNla3ZtKSkge1xcbi1cXHRcXHRyYyA9IC1FTk9NRU07XFxuIFxcdFxcdHZjcHUtXFx1MDAzZWFyY2guZ21hcCA9IGdtYXBfbmV3X2NoaWxkKHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5nbWFwLCAtMVVMKTtcXG4gXFx0XFx0aWYgKCF2Y3B1LVxcdTAwM2VhcmNoLmdtYXApXFxuLVxcdFxcdFxcdGdvdG8gb3V0X2ZyZWVfc2llX2Jsb2NrO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0fVxcbiBcXG4gXFx0Vk1fRVZFTlQodmNwdS1cXHUwMDNla3ZtLCAzLCBcXFwiY3JlYXRlIGNwdSAlZCBhdCAweCVwLCBzaWUgYmxvY2sgYXQgMHglcFxcXCIsXFxuQEAgLTM4NTksMjAgKzM4NjYsMTkgQEAgaW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0dHJhY2Vfa3ZtX3MzOTBfY3JlYXRlX3ZjcHUodmNwdS1cXHUwMDNldmNwdV9pZCwgdmNwdSwgdmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2spO1xcbiBcXG4gXFx0cmMgPSBrdm1fczM5MF92Y3B1X3NldHVwKHZjcHUpO1xcbi1cXHRpZiAocmMpXFxuLVxcdFxcdGdvdG8gb3V0X3Vjb250cm9sX3VuaW5pdDtcXG4rXFx0aWYgKHJjKSB7XFxuK1xcdFxcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cXHUwMDNla3ZtKSkge1xcbitcXHRcXHRcXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2ssIFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guZ21hcC1cXHUwMDNlY2hpbGRyZW5fbG9jaylcXG4rXFx0XFx0XFx0XFx0Z21hcF9yZW1vdmVfY2hpbGQodmNwdS1cXHUwMDNlYXJjaC5nbWFwKTtcXG4rXFx0XFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5nbWFwID0gZ21hcF9wdXQodmNwdS1cXHUwMDNlYXJjaC5nbWFwKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcdH1cXG4gXFxuK1xcdHZjcHUtXFx1MDAzZWFyY2gubWMgPSBub19mcmVlX3B0cihtYyk7XFxuK1xcdHNpZV9wYWdlID0gTlVMTDtcXG4gXFx0a3ZtX3MzOTBfdXBkYXRlX3RvcG9sb2d5X2NoYW5nZV9yZXBvcnQodmNwdS1cXHUwMDNla3ZtLCAxKTtcXG4gXFx0cmV0dXJuIDA7XFxuLVxcbi1vdXRfdWNvbnRyb2xfdW5pbml0Olxcbi1cXHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSkpIHtcXG4tXFx0XFx0Z21hcF9yZW1vdmVfY2hpbGQodmNwdS1cXHUwMDNlYXJjaC5nbWFwKTtcXG4tXFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5nbWFwID0gZ21hcF9wdXQodmNwdS1cXHUwMDNlYXJjaC5nbWFwKTtcXG4tXFx0fVxcbi1vdXRfZnJlZV9zaWVfYmxvY2s6XFxuLVxcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykodmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2spKTtcXG4tXFx0cmV0dXJuIHJjO1xcbiB9XFxuIFxcbiBpbnQga3ZtX2FyY2hfdmNwdV9ydW5uYWJsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuQEAgLTUwMzksNiArNTA0NSwxMCBAQCBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHQgICAga3ZtX3J1bi1cXHUwMDNla3ZtX2RpcnR5X3JlZ3MgXFx1MDAyNiB+S1ZNX1NZTkNfUzM5MF9WQUxJRF9GSUVMRFMpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4rXFx0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZSgpICovXFxuK1xcdGlmICghc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5pbml0aWFsaXplZCkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0dmNwdV9sb2FkKHZjcHUpO1xcbiBcXG4gXFx0aWYgKGd1ZXN0ZGJnX2V4aXRfcGVuZGluZyh2Y3B1KSkge1xcbkBAIC01NDQ3LDYgKzU0NTcsOCBAQCBsb25nIGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCxcXG4gXFx0XFx0c3RydWN0IGt2bV9zMzkwX2ludGVycnVwdCBzMzkwaW50O1xcbiBcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfaXJxIHMzOTBpcnEgPSB7fTtcXG4gXFxuK1xcdFxcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cXHUwMDNla3ZtKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2czM5MGludCwgYXJncCwgc2l6ZW9mKHMzOTBpbnQpKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcdFxcdGlmIChzMzkwaW50X3RvX3MzOTBpcnEoXFx1MDAyNnMzOTBpbnQsIFxcdTAwMjZzMzkwaXJxKSlcXG5AQCAtNTUyMyw2ICs1NTM1LDEwIEBAIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcXG4gXFx0bG9uZyByO1xcbiBcXHR1MTYgcmMsIHJyYztcXG4gXFxuK1xcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUoKSAqL1xcbitcXHRpZiAoIXNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guaW5pdGlhbGl6ZWQpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuIFxcdHZjcHVfbG9hZCh2Y3B1KTtcXG4gXFxuIFxcdHN3aXRjaCAoaW9jdGwpIHtcXG5AQCAtNTc5NCwxNCArNTgxMCwzMCBAQCBpbnQga3ZtX2FyY2hfcHJlcGFyZV9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBsb25nIGNtbWFfZF9jb3VudF9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaylcXG4re1xcbitcXHR1bmlvbiBwZ3N0ZSBwZ3N0ZTtcXG4rXFxuK1xcdHBnc3RlID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7XFxuK1xcdGlmIChwZ3N0ZS5jbW1hX2QpIHtcXG4rXFx0XFx0cGdzdGUuY21tYV9kID0gMDtcXG4rXFx0XFx0YXRvbWljNjRfZGVjKHdhbGstXFx1MDAzZXByaXYpO1xcbitcXHR9XFxuK1xcdHBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm9sZCxcXG4gXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbmV3LFxcbiBcXHRcXHRcXHRcXHRlbnVtIGt2bV9tcl9jaGFuZ2UgY2hhbmdlKVxcbiB7XFxuLVxcdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jID0gTlVMTDtcXG4rXFx0Y29uc3Qgc3RydWN0IGRhdF93YWxrX29wcyBvcHMgPSB7IC5wdGVfZW50cnkgPSBjbW1hX2RfY291bnRfcHRlLCB9O1xcbitcXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYyBfX2ZyZWUoa3ZtX3MzOTBfbW11X2NhY2hlKSA9IE5VTEw7XFxuIFxcdGludCByYyA9IDA7XFxuIFxcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcXG4rXFxuIFxcdGlmIChjaGFuZ2UgPT0gS1ZNX01SX0ZMQUdTX09OTFkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuQEAgLTU4MTIsNiArNTg0NCwxMiBAQCB2b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0fVxcbiBcXG4gXFx0c2NvcGVkX2d1YXJkKHdyaXRlX2xvY2ssIFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9sb2NrKSB7XFxuK1xcdFxcdGlmIChrdm0tXFx1MDAzZWFyY2gubWlncmF0aW9uX21vZGUgXFx1MDAyNlxcdTAwMjYga3ZtLVxcdTAwM2VhcmNoLnVzZV9jbW1hIFxcdTAwMjZcXHUwMDI2IG9sZCkge1xcbitcXHRcXHRcXHRfZGF0X3dhbGtfZ2ZuX3JhbmdlKG9sZC1cXHUwMDNlYmFzZV9nZm4sIG9sZC1cXHUwMDNlYmFzZV9nZm4gKyBvbGQtXFx1MDAzZW5wYWdlcyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGt2bS1cXHUwMDNlYXJjaC5nbWFwLVxcdTAwM2Vhc2NlLCBcXHUwMDI2b3BzLCBEQVRfV0FMS19JR05fSE9MRVMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmNtbWFfZGlydHlfcGFnZXMpO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRzd2l0Y2ggKGNoYW5nZSkge1xcbiBcXHRcXHRjYXNlIEtWTV9NUl9ERUxFVEU6XFxuIFxcdFxcdFxcdHJjID0gZGF0X2RlbGV0ZV9zbG90KG1jLCBrdm0tXFx1MDAzZWFyY2guZ21hcC1cXHUwMDNlYXNjZSwgb2xkLVxcdTAwM2ViYXNlX2dmbiwgb2xkLVxcdTAwM2VucGFnZXMpO1xcbkBAIC01ODMzLDcgKzU4NzEsNiBAQCB2b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4gb3V0OlxcbiBcXHRpZiAocmMpXFxuIFxcdFxcdHByX3dhcm4oXFxcImZhaWxlZCB0byBjb21taXQgbWVtb3J5IHJlZ2lvblxcXFxuXFxcIik7XFxuLVxcdGt2bV9zMzkwX2ZyZWVfbW11X2NhY2hlKG1jKTtcXG4gXFx0cmV0dXJuO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3ByaXYuYyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jXFxuaW5kZXggYWQwZGRjNDMzYTczYy4uYjFiYTI0YzM0NmVmYSAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva3ZtL3ByaXYuY1xcbisrKyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jXFxuQEAgLTI4OSw2ICsyODksNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9pc2tlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gc3RhdGljIGludCBoYW5kbGVfcnJiZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBnYWRkcjtcXG4rXFx0dW5pb24gc2tleSBza2V5O1xcbiBcXHRpbnQgcmVnMSwgcmVnMjtcXG4gXFx0aW50IHJjO1xcbiBcXG5AQCAtMzA3LDEyICszMDgsMTIgQEAgc3RhdGljIGludCBoYW5kbGVfcnJiZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdGdhZGRyID0ga3ZtX3MzOTBfbG9naWNhbF90b19lZmZlY3RpdmUodmNwdSwgZ2FkZHIpO1xcbiBcXHRnYWRkciA9IGt2bV9zMzkwX3JlYWxfdG9fYWJzKHZjcHUsIGdhZGRyKTtcXG4gXFx0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlbW11X2xvY2spXFxuLVxcdFxcdHJjID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodmNwdS1cXHUwMDNlYXJjaC5nbWFwLVxcdTAwM2Vhc2NlLCBncGFfdG9fZ2ZuKGdhZGRyKSk7XFxuK1xcdFxcdHJjID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodmNwdS1cXHUwMDNlYXJjaC5nbWFwLVxcdTAwM2Vhc2NlLCBncGFfdG9fZ2ZuKGdhZGRyKSwgXFx1MDAyNnNrZXkpO1xcbiBcXHRpZiAocmMgXFx1MDAzZSAwKVxcbiBcXHRcXHRyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIHJjKTtcXG4gXFx0aWYgKHJjIFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHJjO1xcbi1cXHRrdm1fczM5MF9zZXRfcHN3X2NjKHZjcHUsIHJjKTtcXG4rXFx0a3ZtX3MzOTBfc2V0X3Bzd19jYyh2Y3B1LCAoc2tleS5za2V5IFxcdTAwM2VcXHUwMDNlIDEpIFxcdTAwMjYgMyk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0xMjYwLDggKzEyNjEsOSBAQCBzdGF0aWMgaW50IGhhbmRsZV9lc3NhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0LyogUmV0cnkgdGhlIEVTU0EgaW5zdHJ1Y3Rpb24gKi9cXG4gXFx0XFx0a3ZtX3MzOTBfcmV0cnlfaW5zdHIodmNwdSk7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdHNjb3BlZF9ndWFyZChyZWFkX2xvY2ssIFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZW1tdV9sb2NrKVxcbi1cXHRcXHRcXHRpID0gX19kb19lc3NhKHZjcHUsIG9yYyk7XFxuK1xcdFxcdHNjb3BlZF9ndWFyZChtdXRleCwgXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlc2xvdHNfYXJjaF9sb2NrKVxcbitcXHRcXHRcXHRzY29wZWRfZ3VhcmQocmVhZF9sb2NrLCBcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VtbXVfbG9jaylcXG4rXFx0XFx0XFx0XFx0aSA9IF9fZG9fZXNzYSh2Y3B1LCBvcmMpO1xcbiBcXHRcXHRpZiAoaSBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdHJldHVybiBpO1xcbiBcXHRcXHQvKiBBY2NvdW50IGZvciB0aGUgcG9zc2libGUgZXh0cmEgY2JybCBlbnRyeSAqL1xcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3B2LmMgYi9hcmNoL3MzOTAva3ZtL3B2LmNcXG5pbmRleCAxYmVhY2M4NDFjYTg1Li5iMDJlMDE1OWQzY2QyIDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9rdm0vcHYuY1xcbisrKyBiL2FyY2gvczM5MC9rdm0vcHYuY1xcbkBAIC0yNDQsNiArMjQ0LDI0IEBAIHN0YXRpYyB2b2lkIGt2bV9zMzkwX2NsZWFyX3B2X3N0YXRlKHN0cnVjdCBrdm0gKmt2bSlcXG4gXFx0a3ZtLVxcdTAwM2VhcmNoLnB2LnN0b3JfdmFyID0gTlVMTDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQga3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGZyZWVfc3Rvcl9iYXNlKVxcbit7XFxuK1xcdGlmIChmcmVlX3N0b3JfYmFzZSlcXG4rXFx0XFx0ZnJlZV9wYWdlcyh2Y3B1LVxcdTAwM2VhcmNoLnB2LnN0b3JfYmFzZSwgZ2V0X29yZGVyKHV2X2luZm8uZ3Vlc3RfY3B1X3N0b3JfbGVuKSk7XFxuK1xcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzaWRhX2FkZHIodmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2spKTtcXG4rXFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZXB2X2hhbmRsZV9jcHUgPSAwO1xcbitcXHR2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jay1cXHUwMDNlcHZfaGFuZGxlX2NvbmZpZyA9IDA7XFxuK1xcdG1lbXNldChcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5wdiwgMCwgc2l6ZW9mKHZjcHUtXFx1MDAzZWFyY2gucHYpKTtcXG4rXFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZXNkZiA9IDA7XFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBzaWRhZCBmaWVsZCAoZm9yIHNkZiA9PSAyKSBpcyBub3cgdGhlIGdiZWEgZmllbGQgKGZvciBzZGYgPT0gMCkuXFxuK1xcdCAqIFVzZSB0aGUgcmVzZXQgdmFsdWUgb2YgZ2JlYSB0byBhdm9pZCBsZWFraW5nIHRoZSBrZXJuZWwgcG9pbnRlciBvZlxcbitcXHQgKiB0aGUganVzdCBmcmVlZCBzaWRhLlxcbitcXHQgKi9cXG4rXFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZWdiZWEgPSAxO1xcbitcXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfVExCX0ZMVVNILCB2Y3B1KTtcXG4rfVxcbitcXG4gaW50IGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXFxuIHtcXG4gXFx0aW50IGNjO1xcbkBAIC0yNTgsMjQgKzI3Niw5IEBAIGludCBrdm1fczM5MF9wdl9kZXN0cm95X2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKVxcbiBcXHRXQVJOX09OQ0UoY2MsIFxcXCJwcm90dmlydCBkZXN0cm95IGNwdSBmYWlsZWQgcmMgJXggcnJjICV4XFxcIiwgKnJjLCAqcnJjKTtcXG4gXFxuIFxcdC8qIEludGVuZGVkIG1lbW9yeSBsZWFrIGZvciBzb21ldGhpbmcgdGhhdCBzaG91bGQgbmV2ZXIgaGFwcGVuLiAqL1xcbi1cXHRpZiAoIWNjKVxcbi1cXHRcXHRmcmVlX3BhZ2VzKHZjcHUtXFx1MDAzZWFyY2gucHYuc3Rvcl9iYXNlLFxcbi1cXHRcXHRcXHQgICBnZXRfb3JkZXIodXZfaW5mby5ndWVzdF9jcHVfc3Rvcl9sZW4pKTtcXG4tXFxuLVxcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzaWRhX2FkZHIodmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2spKTtcXG4tXFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZXB2X2hhbmRsZV9jcHUgPSAwO1xcbi1cXHR2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jay1cXHUwMDNlcHZfaGFuZGxlX2NvbmZpZyA9IDA7XFxuLVxcdG1lbXNldChcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5wdiwgMCwgc2l6ZW9mKHZjcHUtXFx1MDAzZWFyY2gucHYpKTtcXG4tXFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZXNkZiA9IDA7XFxuLVxcdC8qXFxuLVxcdCAqIFRoZSBzaWRhZCBmaWVsZCAoZm9yIHNkZiA9PSAyKSBpcyBub3cgdGhlIGdiZWEgZmllbGQgKGZvciBzZGYgPT0gMCkuXFxuLVxcdCAqIFVzZSB0aGUgcmVzZXQgdmFsdWUgb2YgZ2JlYSB0byBhdm9pZCBsZWFraW5nIHRoZSBrZXJuZWwgcG9pbnRlciBvZlxcbi1cXHQgKiB0aGUganVzdCBmcmVlZCBzaWRhLlxcbi1cXHQgKi9cXG4tXFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZWdiZWEgPSAxO1xcbi1cXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfVExCX0ZMVVNILCB2Y3B1KTtcXG4rXFx0a3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUodmNwdSwgIWNjKTtcXG4gXFxuLVxcdHJldHVybiBjYyA/IEVJTyA6IDA7XFxuK1xcdHJldHVybiBjYyA/IC1FSU8gOiAwO1xcbiB9XFxuIFxcbiBpbnQga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKVxcbkBAIC0zMTksOSArMzIyLDcgQEAgaW50IGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYylcXG4gXFx0XFx0ICAgICB1dmNiLmhlYWRlci5ycmMpO1xcbiBcXG4gXFx0aWYgKGNjKSB7XFxuLVxcdFxcdHUxNiBkdW1teTtcXG4tXFxuLVxcdFxcdGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHZjcHUsIFxcdTAwMjZkdW1teSwgXFx1MDAyNmR1bW15KTtcXG4rXFx0XFx0a3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUodmNwdSwgdHJ1ZSk7XFxuIFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXHR9XFxuIFxcbkBAIC04MDksNyArODEwLDcgQEAgc3RhdGljIGludCB1bnBhY2tfb25lKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1NjQgdHdlYWssXFxuIFxcdFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRUFHQUlOKVxcbitcXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRUFHQUlOIFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRUlOVFIpXFxuIFxcdFxcdEtWTV9VVl9FVkVOVChrdm0sIDMsIFxcXCJQUk9UVklSVCBWTSBVTlBBQ0s6IGZhaWxlZCBhZGRyICVsbHggd2l0aCByYyAleCBycmMgJXhcXFwiLFxcbiBcXHRcXHRcXHQgICAgIHV2Y2IuZ2FkZHIsICpyYywgKnJyYyk7XFxuIFxcdHJldHVybiByZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjA5OjQ5LjY4NTcwNTAzNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQxMjM1MDkzNTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcmNoX3ZjcHVfY3JlYXRlXCIsXG4gICAgXCJrdm1fYXJjaF92Y3B1X2lvY3RsX3J1blwiLFxuICAgIFwia3ZtX2FyY2hfdmNwdV9pb2N0bFwiLFxuICAgIFwia3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bFwiLFxuICAgIFwia3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvblwiLFxuICAgIFwia3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25cIixcbiAgICBcImt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1XCIsXG4gICAgXCJrdm1fczM5MF9wdl9jcmVhdGVfY3B1XCIsXG4gICAgXCJoYW5kbGVfcnJiZVwiLFxuICAgIFwiaGFuZGxlX2Vzc2FcIixcbiAgICBcImt2bV9zMzkwX2tleW9wXCIsXG4gICAgXCJkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgczM5MCBLVk0gaW1wbGVtZW50YXRpb24sIGluY2x1ZGluZyBmaXhpbmcgcmFjZSBjb25kaXRpb25zIGR1cmluZyB2Q1BVIGNyZWF0aW9uL2luaXRpYWxpemF0aW9uLCBmaXhpbmcgbWVtb3J5IGxlYWtzLCBhbmQgdXBkYXRpbmcgbG9ja2luZyBtZWNoYW5pc21zICh1c2luZyBzbG90c19hcmNoX2xvY2spLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBvZiBLVk0gaW9jdGxzIGFuZCBtZW1vcnkgbWFuYWdlbWVudCwgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTQ5NzA2NDdjNGIzYzkyNDU2ZGUzY2RmMDAzNmZmODdiZGRiMjNjNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMgMTc6MDk6NDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5pbmRleCBlYWEzNGM1YmQzYzExLi5lZGY3NWI2YWQyMGNlIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtNDQwLDYgKzQ0MCw3IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcbiBcdGJvb2wgc2tleV9lbmFibGVkO1xuIFx0LyogSW5kaWNhdG9yIGlmIHRoZSBhY2Nlc3MgcmVnaXN0ZXJzIGhhdmUgYmVlbiBsb2FkZWQgZnJvbSBndWVzdCAqL1xuIFx0Ym9vbCBhY3JzX2xvYWRlZDtcbitcdGJvb2wgaW5pdGlhbGl6ZWQ7XG4gXHRzdHJ1Y3Qga3ZtX3MzOTBfcHZfdmNwdSBwdjtcbiBcdHVuaW9uIGRpYWczMThfaW5mbyBkaWFnMzE4X2luZm87XG4gXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYztcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2RhdC5jIGIvYXJjaC9zMzkwL2t2bS9kYXQuY1xuaW5kZXggZWQ0MjU5ZDE3NjI5NS4uM2YyZDZlODkwMmQ3NiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vZGF0LmNcbisrKyBiL2FyY2gvczM5MC9rdm0vZGF0LmNcbkBAIC03NTUsMTMgKzc1NSwxNSBAQCBpbnQgZGF0X2NvbmRfc2V0X3N0b3JhZ2Vfa2V5KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1tYywgdW5pb24gYXNjZSBhc2NlLCBnZlxuIFx0cmV0dXJuIHJjO1xuIH1cbiBcbi1pbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4pXG4raW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLCB1bmlvbiBza2V5ICpza2V5KVxuIHtcbiBcdHVuaW9uIHBnc3RlIHBnc3RlLCBvbGQ7XG4gXHR1bmlvbiBjcnN0ZSAqY3JzdGVwO1xuIFx0dW5pb24gcHRlICpwdGVwO1xuIFx0aW50IHJjO1xuIFxuK1x0c2tleS1cdTAwM2Vza2V5ID0gMDtcbitcbiBcdHJjID0gZGF0X2VudHJ5X3dhbGsoTlVMTCwgZ2ZuLCBhc2NlLCBEQVRfV0FMS19BTlksIFRBQkxFX1RZUEVfUEFHRV9UQUJMRSwgXHUwMDI2Y3JzdGVwLCBcdTAwMjZwdGVwKTtcbiBcdGlmIChyYylcbiBcdFx0cmV0dXJuIHJjO1xuQEAgLTc3MSwyMSArNzczLDIzIEBAIGludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbilcbiBcbiBcdFx0aWYgKCFjcnN0ZS5oLmZjIHx8ICFjcnN0ZS5zLmZjMS5wcilcbiBcdFx0XHRyZXR1cm4gMDtcbi1cdFx0cmV0dXJuIHBhZ2VfcmVzZXRfcmVmZXJlbmNlZChsYXJnZV9jcnN0ZV90b19waHlzKCpjcnN0ZXAsIGdmbikpO1xuK1x0XHRza2V5LVx1MDAzZXNrZXkgPSBwYWdlX3Jlc2V0X3JlZmVyZW5jZWQobGFyZ2VfY3JzdGVfdG9fcGh5cygqY3JzdGVwLCBnZm4pKSBcdTAwM2NcdTAwM2MgMTtcbitcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXHRvbGQgPSBwZ3N0ZV9nZXRfbG9jayhwdGVwKTtcbiBcdHBnc3RlID0gb2xkO1xuIFxuIFx0aWYgKCFwdGVwLVx1MDAzZWguaSkge1xuLVx0XHRyYyA9IHBhZ2VfcmVzZXRfcmVmZXJlbmNlZChwdGVfb3JpZ2luKCpwdGVwKSk7XG4tXHRcdHBnc3RlLmhyID0gcmMgXHUwMDNlXHUwMDNlIDE7XG4rXHRcdHNrZXktXHUwMDNlc2tleSA9IHBhZ2VfcmVzZXRfcmVmZXJlbmNlZChwdGVfb3JpZ2luKCpwdGVwKSkgXHUwMDNjXHUwMDNjIDE7XG4rXHRcdHBnc3RlLmhyID0gc2tleS1cdTAwM2VyO1xuIFx0fVxuLVx0cmMgfD0gKHBnc3RlLmdyIFx1MDAzY1x1MDAzYyAxKSB8IHBnc3RlLmdjO1xuK1x0c2tleS1cdTAwM2VyIHw9IHBnc3RlLmdyO1xuK1x0c2tleS1cdTAwM2VjIHw9IHBnc3RlLmdjO1xuIFx0cGdzdGUuZ3IgPSAwO1xuIFxuIFx0ZGF0X3VwZGF0ZV9wdGVwX3NkKG9sZCwgcGdzdGUsIHB0ZXApO1xuIFx0cGdzdGVfc2V0X3VubG9jayhwdGVwLCBwZ3N0ZSk7XG4tXHRyZXR1cm4gcmM7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGxvbmcgZGF0X3Jlc2V0X3NrZXlzX3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxuQEAgLTg0Niw2ICs4NTAsNyBAQCBzdGF0aWMgbG9uZyBfZGF0X3Nsb3RfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbFxuIFx0c3RydWN0IHNsb3RfcHJpdiAqcCA9IHdhbGstXHUwMDNlcHJpdjtcbiBcdHVuaW9uIGNyc3RlIGR1bW15ID0geyAudmFsID0gcC1cdTAwM2V0b2tlbiB9O1xuIFx0dW5pb24gcHRlIG5ld19wdGUsIHB0ZSA9IFJFQURfT05DRSgqcHRlcCk7XG4rXHR1bmlvbiBwZ3N0ZSBwZ3N0ZTtcbiBcbiBcdG5ld19wdGUgPSBfUFRFX1RPSyhkdW1teS50b2sudHlwZSwgZHVtbXkudG9rLnBhcik7XG4gXG5AQCAtODUzLDcgKzg1OCwxMSBAQCBzdGF0aWMgbG9uZyBfZGF0X3Nsb3RfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbFxuIFx0aWYgKHB0ZS52YWwgPT0gbmV3X3B0ZS52YWwpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0ZGF0X3B0ZXBfeGNoZyhwdGVwLCBuZXdfcHRlLCBnZm4sIHdhbGstXHUwMDNlYXNjZSwgZmFsc2UpO1xuK1x0cGdzdGUgPSBwZ3N0ZV9nZXRfbG9jayhwdGVwKTtcbitcdHBnc3RlID0gX19kYXRfcHRlcF94Y2hnKHB0ZXAsIHBnc3RlLCBuZXdfcHRlLCBnZm4sIHdhbGstXHUwMDNlYXNjZSwgZmFsc2UpO1xuK1x0cGdzdGUuY21tYV9kID0gMDtcbitcdHBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpO1xuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZGF0LmggYi9hcmNoL3MzOTAva3ZtL2RhdC5oXG5pbmRleCBmYWQ2MDUzMDVlMDVjLi4xNDFlZTdiOWYwMTkxIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9kYXQuaFxuKysrIGIvYXJjaC9zMzkwL2t2bS9kYXQuaFxuQEAgLTUzNyw3ICs1MzcsNyBAQCBpbnQgZGF0X3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgdW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZlxuIFx0XHRcdHVuaW9uIHNrZXkgc2tleSwgYm9vbCBucSk7XG4gaW50IGRhdF9jb25kX3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLFxuIFx0XHRcdCAgICAgdW5pb24gc2tleSBza2V5LCB1bmlvbiBza2V5ICpvbGRrZXksIGJvb2wgbnEsIGJvb2wgbXIsIGJvb2wgbWMpO1xuLWludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbik7XG4raW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLCB1bmlvbiBza2V5ICpza2V5KTtcbiBsb25nIGRhdF9yZXNldF9za2V5cyh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IHN0YXJ0KTtcbiBcbiB1bnNpZ25lZCBsb25nIGRhdF9nZXRfcHR2YWwoc3RydWN0IHBhZ2VfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgcHR2YWxfcGFyYW0gcGFyYW0pO1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jIGIvYXJjaC9zMzkwL2t2bS9mYXVsdGluLmNcbmluZGV4IGZlZTgwMDQ3YmQ5NGYuLjNjYzQ1ZjdmNWIyZDcgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uY1xuKysrIGIvYXJjaC9zMzkwL2t2bS9mYXVsdGluLmNcbkBAIC05MSw5ICs5MSw5IEBAIGludCBrdm1fczM5MF9mYXVsdGluX2dmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGd1ZXN0X2ZhXG4gXHRcdC8qIEFjY2VzcyBvdXRzaWRlIG1lbW9yeSwgYWRkcmVzc2luZyBleGNlcHRpb24uICovXG4gXHRcdGlmIChpc19ub3Nsb3RfcGZuKGYtXHUwMDNlcGZuKSlcbiBcdFx0XHRyZXR1cm4gUEdNX0FERFJFU1NJTkc7XG4tXHRcdC8qIFNpZ25hbCBwZW5kaW5nOiB0cnkgYWdhaW4uICovXG4tXHRcdGlmIChmLVx1MDAzZXBmbiA9PSBLVk1fUEZOX0VSUl9TSUdQRU5ESU5HKVxuLVx0XHRcdHJldHVybiAtRUFHQUlOO1xuK1x0XHQvKiBGYXRhbCBzaWduYWwgcGVuZGluZzogYmFpbCBvdXQuICovXG4rXHRcdGlmIChpc19zaWdwZW5kaW5nX3BmbihmLVx1MDAzZXBmbikpXG4rXHRcdFx0cmV0dXJuIC1FSU5UUjtcbiBcdFx0LyogQ2hlY2sgaWYgaXQncyByZWFkLW9ubHkgbWVtb3J5OyBkb24ndCB0cnkgdG8gYWN0dWFsbHkgaGFuZGxlIHRoYXQgY2FzZS4gKi9cbiBcdFx0aWYgKGYtXHUwMDNlcGZuID09IEtWTV9QRk5fRVJSX1JPX0ZBVUxUKVxuIFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1xuaW5kZXggOWUzZTZiMGQ3MmFkNi4uNmIzZjk3YTc1MTNiMyAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcbisrKyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcbkBAIC00NSwxMyArNDUsMTYgQEAgc3RhdGljIHN0cnVjdCBrdm1fczM5MF9naWIgKmdpYjtcbiBzdGF0aWMgaW50IHNjYV9leHRfY2FsbF9wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50ICpzcmNfaWQpXG4ge1xuIFx0c3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guc2NhO1xuLVx0dW5pb24gZXNjYV9zaWdwX2N0cmwgc2lncF9jdHJsID0gc2NhLVx1MDAzZWNwdVt2Y3B1LVx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcbitcdHVuaW9uIGVzY2Ffc2lncF9jdHJsIHNpZ3BfY3RybDtcbiBcbiBcdGlmICgha3ZtX3MzOTBfdGVzdF9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX0VDQUxMX1BFTkQpKVxuIFx0XHRyZXR1cm4gMDtcbitcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKVxuK1x0XHRyZXR1cm4gMDtcbiBcbiBcdEJVR19PTigha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpO1xuIFxuK1x0c2lncF9jdHJsID0gc2NhLVx1MDAzZWNwdVt2Y3B1LVx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcbiBcdGlmIChzcmNfaWQpXG4gXHRcdCpzcmNfaWQgPSBzaWdwX2N0cmwuc2NuO1xuIFxuQEAgLTYwLDEzICs2MywxNiBAQCBzdGF0aWMgaW50IHNjYV9leHRfY2FsbF9wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50ICpzcmNfaWQpXG4gXG4gc3RhdGljIGludCBzY2FfaW5qZWN0X2V4dF9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNyY19pZClcbiB7XG4tXHRzdHJ1Y3QgZXNjYV9ibG9jayAqc2NhID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5zY2E7XG4tXHR1bmlvbiBlc2NhX3NpZ3BfY3RybCAqc2lncF9jdHJsID0gXHUwMDI2c2NhLVx1MDAzZWNwdVt2Y3B1LVx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcbiBcdHVuaW9uIGVzY2Ffc2lncF9jdHJsIG9sZF92YWwsIG5ld192YWwgPSB7LnNjbiA9IHNyY19pZCwgLmMgPSAxfTtcbitcdHN0cnVjdCBlc2NhX2Jsb2NrICpzY2EgPSB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnNjYTtcbitcdHVuaW9uIGVzY2Ffc2lncF9jdHJsICpzaWdwX2N0cmw7XG4gXHRpbnQgZXhwZWN0LCByYztcbiBcbiBcdEJVR19PTigha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpO1xuK1x0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuK1x0c2lncF9jdHJsID0gXHUwMDI2c2NhLVx1MDAzZWNwdVt2Y3B1LVx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcbiBcdG9sZF92YWwgPSBSRUFEX09OQ0UoKnNpZ3BfY3RybCk7XG4gXHRvbGRfdmFsLmMgPSAwO1xuIFxuQEAgLTg0LDEwICs5MCwxMyBAQCBzdGF0aWMgaW50IHNjYV9pbmplY3RfZXh0X2NhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc3JjX2lkKVxuIHN0YXRpYyB2b2lkIHNjYV9jbGVhcl9leHRfY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guc2NhO1xuLVx0dW5pb24gZXNjYV9zaWdwX2N0cmwgKnNpZ3BfY3RybCA9IFx1MDAyNnNjYS1cdTAwM2VjcHVbdmNwdS1cdTAwM2V2Y3B1X2lkXS5zaWdwX2N0cmw7XG4rXHR1bmlvbiBlc2NhX3NpZ3BfY3RybCAqc2lncF9jdHJsO1xuIFxuLVx0aWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSlcbitcdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkgfHwgIXZjcHUtXHUwMDNlYXJjaC5pbml0aWFsaXplZCB8fCBrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKVxuIFx0XHRyZXR1cm47XG4rXG4rXHQvKiBJbml0aWFsaXplIGFmdGVyIHRoZSBhYm92ZSBjaGVjaywgdG8gcHJldmVudCBnb2luZyBvdXQgb2YgYm91bmRzICovXG4rXHRzaWdwX2N0cmwgPSBcdTAwMjZzY2EtXHUwMDNlY3B1W3ZjcHUtXHUwMDNldmNwdV9pZF0uc2lncF9jdHJsO1xuIFx0a3ZtX3MzOTBfY2xlYXJfY3B1ZmxhZ3ModmNwdSwgQ1BVU1RBVF9FQ0FMTF9QRU5EKTtcbiBcbiBcdFdSSVRFX09OQ0Uoc2lncF9jdHJsLVx1MDAzZXZhbHVlLCAwKTtcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbmluZGV4IDE1MGI1ZGQyMTcwZTIuLjUxOGE2OWM1NWU4NWMgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbisrKyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuQEAgLTU3MSw3ICs1NzEsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX2tleW9wKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3Qga3ZtICprdm0sIGludCBvcFxuIFx0c3dpdGNoIChvcCkge1xuIFx0Y2FzZSBLVk1fUzM5MF9LRVlPUF9TU0tFOlxuIFx0XHRyID0gZGF0X2NvbmRfc2V0X3N0b3JhZ2Vfa2V5KG1jLCBhc2NlLCBnZm4sIHNrZXksIFx1MDAyNnNrZXksIDAsIDAsIDApO1xuLVx0XHRpZiAociBcdTAwM2U9IDApXG4rXHRcdGlmIChyID09IDAgfHwgciA9PSAxKVxuIFx0XHRcdHJldHVybiBza2V5LnNrZXk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBLVk1fUzM5MF9LRVlPUF9JU0tFOlxuQEAgLTU4MCwxNCArNTgwLDE0IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfa2V5b3Aoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBrdm0gKmt2bSwgaW50IG9wXG4gXHRcdFx0cmV0dXJuIHNrZXkuc2tleTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEtWTV9TMzkwX0tFWU9QX1JSQkU6XG4tXHRcdHIgPSBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdChhc2NlLCBnZm4pO1xuLVx0XHRpZiAociBcdTAwM2UgMClcbi1cdFx0XHRyZXR1cm4gciBcdTAwM2NcdTAwM2MgMTtcbitcdFx0ciA9IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KGFzY2UsIGdmbiwgXHUwMDI2c2tleSk7XG4rXHRcdGlmICghcilcbitcdFx0XHRyZXR1cm4gc2tleS5za2V5O1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuLVx0cmV0dXJuIHI7XG4rXHRyZXR1cm4gciBcdTAwM2UgMCA/IC1FRkFVTFQgOiByO1xuIH1cbiBcbiAvKiBTZWN0aW9uOiBkZXZpY2UgcmVsYXRlZCAqL1xuQEAgLTEyMTksOCArMTIxOSw4IEBAIHN0YXRpYyB2b2lkIGt2bV9zMzkwX3N5bmNfcmVxdWVzdF9icm9hZGNhc3Qoc3RydWN0IGt2bSAqa3ZtLCBpbnQgcmVxKVxuIFxuIC8qXG4gICogTXVzdCBiZSBjYWxsZWQgd2l0aCBrdm0tXHUwMDNlc3JjdSBoZWxkIHRvIGF2b2lkIHJhY2VzIG9uIG1lbXNsb3RzLCBhbmQgd2l0aFxuLSAqIGt2bS1cdTAwM2VzbG90c19sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLCBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbigpLFxuLSAqIGFuZCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKCkuXG4rICoga3ZtLVx1MDAzZXNsb3RzX2FyY2hfbG9jayB0byBhdm9pZCByYWNlcyB3aXRoIG91cnNlbHZlcyxcbisgKiBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbigpLCBhbmQga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cygpLlxuICAqL1xuIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSlcbiB7XG5AQCAtMTI2NSw3ICsxMjY1LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKVxuIH1cbiBcbiAvKlxuLSAqIE11c3QgYmUgY2FsbGVkIHdpdGgga3ZtLVx1MDAzZXNsb3RzX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsXG4rICogTXVzdCBiZSBjYWxsZWQgd2l0aCBrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLFxuICAqIGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbigpIGFuZCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKCkuXG4gICovXG4gc3RhdGljIGludCBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXG5AQCAtMTMwMCw3ICsxMzAwLDkgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSxcbiB7XG4gXHRpbnQgcmVzID0gLUVOWElPO1xuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4rXHRndWFyZChzcmN1KShcdTAwMjZrdm0tXHUwMDNlc3JjdSk7XG4rXHRndWFyZChtdXRleCkoXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2FyY2hfbG9jayk7XG4rXG4gXHRzd2l0Y2ggKGF0dHItXHUwMDNlYXR0cikge1xuIFx0Y2FzZSBLVk1fUzM5MF9WTV9NSUdSQVRJT05fU1RBUlQ6XG4gXHRcdHJlcyA9IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihrdm0pO1xuQEAgLTEzMTEsNyArMTMxMyw2IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRkZWZhdWx0OlxuIFx0XHRicmVhaztcbiBcdH1cbi1cdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4gXG4gXHRyZXR1cm4gcmVzO1xuIH1cbkBAIC0yMjE0LDcgKzIyMTUsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX2dldF9za2V5cyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9za2V5cyAqYXJncylcbiBcdH1cbiBcbiBcdGt2ZnJlZShrZXlzKTtcbi1cdHJldHVybiByO1xuK1x0cmV0dXJuIHIgXHUwMDNjPSAwID8gciA6IC1FRkFVTFQ7XG4gfVxuIFxuIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X3NrZXlzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX3NrZXlzICphcmdzKVxuQEAgLTIyNzYsNyArMjI3Nyw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X3NrZXlzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX3NrZXlzICphcmdzKVxuIFx0a3ZtX3MzOTBfZnJlZV9tbXVfY2FjaGUobWMpO1xuIG91dDpcbiBcdGt2ZnJlZShrZXlzKTtcbi1cdHJldHVybiByO1xuK1x0cmV0dXJuIHIgXHUwMDNjPSAwID8gciA6IC1FRkFVTFQ7XG4gfVxuIFxuIC8qXG5AQCAtMjM4Niw3ICsyMzg3LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfY21tYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSxcbiBcbiBcdHNldF9iaXQoR01BUF9GTEFHX1VTRVNfQ01NLCBcdTAwMjZrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWZsYWdzKTtcbiBcbi1cdHJldHVybiByO1xuK1x0cmV0dXJuIHIgXHUwMDNjPSAwID8gciA6IC1FRkFVTFQ7XG4gfVxuIFxuIC8qKlxuQEAgLTI5MzQsNiArMjkzNSw5IEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdGNhc2UgS1ZNX1MzOTBfSU5URVJSVVBUOiB7XG4gXHRcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgczM5MGludDtcbiBcbitcdFx0ciA9IC1FSU5WQUw7XG4rXHRcdGlmIChrdm1faXNfdWNvbnRyb2woa3ZtKSlcbitcdFx0XHRicmVhaztcbiBcdFx0ciA9IC1FRkFVTFQ7XG4gXHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZzMzkwaW50LCBhcmdwLCBzaXplb2YoczM5MGludCkpKVxuIFx0XHRcdGJyZWFrO1xuQEAgLTI5OTgsOSArMzAwMiw4IEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdFx0ciA9IC1FRkFVTFQ7XG4gXHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZhcmdzLCBhcmdwLCBzaXplb2YoYXJncykpKVxuIFx0XHRcdGJyZWFrO1xuLVx0XHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbi1cdFx0ciA9IGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoa3ZtLCBcdTAwMjZhcmdzKTtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbitcdFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrKVxuK1x0XHRcdHIgPSBrdm1fczM5MF9nZXRfY21tYV9iaXRzKGt2bSwgXHUwMDI2YXJncyk7XG4gXHRcdGlmICghcikge1xuIFx0XHRcdHIgPSBjb3B5X3RvX3VzZXIoYXJncCwgXHUwMDI2YXJncywgc2l6ZW9mKGFyZ3MpKTtcbiBcdFx0XHRpZiAocilcbkBAIC0zMDE0LDkgKzMwMTcsOSBAQCBpbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gXHRcdHIgPSAtRUZBVUxUO1xuIFx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2YXJncywgYXJncCwgc2l6ZW9mKGFyZ3MpKSlcbiBcdFx0XHRicmVhaztcbi1cdFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4rXHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2FyY2hfbG9jayk7XG4gXHRcdHIgPSBrdm1fczM5MF9zZXRfY21tYV9iaXRzKGt2bSwgXHUwMDI2YXJncyk7XG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXHRjYXNlIEtWTV9TMzkwX1BWX0NPTU1BTkQ6IHtcbkBAIC0zMjQ3LDcgKzMyNTAsOCBAQCBzdGF0aWMgdm9pZCBrdm1fczM5MF9jcnlwdG9faW5pdChzdHJ1Y3Qga3ZtICprdm0pXG4gXG4gc3RhdGljIHZvaWQgc2NhX2Rpc3Bvc2Uoc3RydWN0IGt2bSAqa3ZtKVxuIHtcbi1cdGZyZWVfcGFnZXNfZXhhY3Qoa3ZtLVx1MDAzZWFyY2guc2NhLCBzaXplb2YoKmt2bS1cdTAwM2VhcmNoLnNjYSkpO1xuK1x0aWYgKGt2bS1cdTAwM2VhcmNoLnNjYSlcbitcdFx0ZnJlZV9wYWdlc19leGFjdChrdm0tXHUwMDNlYXJjaC5zY2EsIHNpemVvZigqa3ZtLVx1MDAzZWFyY2guc2NhKSk7XG4gXHRrdm0tXHUwMDNlYXJjaC5zY2EgPSBOVUxMO1xuIH1cbiBcbkBAIC0zNDYxLDcgKzM0NjUsNyBAQCBzdGF0aWMgdm9pZCBzY2FfZGVsX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCBlc2NhX2Jsb2NrICpzY2EgPSB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnNjYTtcbiBcbi1cdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpXG4rXHRpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpIHx8ICF2Y3B1LVx1MDAzZWFyY2guaW5pdGlhbGl6ZWQpXG4gXHRcdHJldHVybjtcbiBcbiBcdGNsZWFyX2JpdF9pbnYodmNwdS1cdTAwM2V2Y3B1X2lkLCAodW5zaWduZWQgbG9uZyAqKXNjYS1cdTAwM2VtY24pO1xuQEAgLTM0ODEsOCArMzQ4NSw4IEBAIHN0YXRpYyB2b2lkIHNjYV9hZGRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKVxuIFx0XHRyZXR1cm47XG4gXG4rXHRXUklURV9PTkNFKHNjYS1cdTAwM2VjcHVbdmNwdS1cdTAwM2V2Y3B1X2lkXS5zZGEsIHZpcnRfdG9fcGh5cyh2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrKSk7XG4gXHRzZXRfYml0X2ludih2Y3B1LVx1MDAzZXZjcHVfaWQsICh1bnNpZ25lZCBsb25nICopc2NhLVx1MDAzZW1jbik7XG4tXHRzY2EtXHUwMDNlY3B1W3ZjcHUtXHUwMDNldmNwdV9pZF0uc2RhID0gdmlydF90b19waHlzKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2spO1xuIH1cbiBcbiBzdGF0aWMgaW50IHNjYV9jYW5fYWRkX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQpXG5AQCAtMzYxMyw2ICszNjE3LDkgQEAgdm9pZCBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKHRlc3Rfa3ZtX2ZhY2lsaXR5KHZjcHUtXHUwMDNla3ZtLCA3NCkgfHwgdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC51c2VyX2luc3RyMCB8fFxuIFx0ICAgIHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gudXNlcl9vcGVyZXhlYylcbiBcdFx0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VpY3RsIHw9IElDVExfT1BFUkVYQztcbitcbitcdC8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKCkgYW5kIGt2bV9hcmNoX3ZjcHVfaW9jdGwoKSAqL1xuK1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmluaXRpYWxpemVkLCB0cnVlKTtcbiB9XG4gXG4gc3RhdGljIGJvb2wga3ZtX2hhc19wY2ttb19zdWJmdW5jKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBucilcbkBAIC0zNjc0LDcgKzM2ODEsOCBAQCBzdGF0aWMgdm9pZCBrdm1fczM5MF92Y3B1X2NyeXB0b19zZXR1cChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gdm9pZCBrdm1fczM5MF92Y3B1X3Vuc2V0dXBfY21tYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydCh2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWNicmxvKSk7XG4rXHRpZiAodmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VjYnJsbylcbitcdFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydCh2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWNicmxvKSk7XG4gXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWNicmxvID0gMDtcbiB9XG4gXG5AQCAtMzc5MiwyMSArMzgwMCwyMSBAQCBpbnQga3ZtX2FyY2hfdmNwdV9wcmVjcmVhdGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rREVGSU5FX0ZSRUUoc2llX3BhZ2UsIHN0cnVjdCBzaWVfcGFnZSAqLCBpZiAoX1QpIGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykoX1QpKSlcbitcbiBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHN0cnVjdCBzaWVfcGFnZSAqc2llX3BhZ2U7XG4rXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYyBfX2ZyZWUoa3ZtX3MzOTBfbW11X2NhY2hlKSA9IE5VTEw7XG4rXHRzdHJ1Y3Qgc2llX3BhZ2UgKnNpZV9wYWdlIF9fZnJlZShzaWVfcGFnZSkgPSBOVUxMO1xuIFx0aW50IHJjO1xuIFxuIFx0QlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3Qgc2llX3BhZ2UpICE9IDQwOTYpO1xuLVx0dmNwdS1cdTAwM2VhcmNoLm1jID0ga3ZtX3MzOTBfbmV3X21tdV9jYWNoZSgpO1xuLVx0aWYgKCF2Y3B1LVx1MDAzZWFyY2gubWMpXG4rXHRtYyA9IGt2bV9zMzkwX25ld19tbXVfY2FjaGUoKTtcbitcdGlmICghbWMpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0c2llX3BhZ2UgPSAoc3RydWN0IHNpZV9wYWdlICopIGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLVx0aWYgKCFzaWVfcGFnZSkge1xuLVx0XHRrdm1fczM5MF9mcmVlX21tdV9jYWNoZSh2Y3B1LVx1MDAzZWFyY2gubWMpO1xuLVx0XHR2Y3B1LVx1MDAzZWFyY2gubWMgPSBOVUxMO1xuK1x0aWYgKCFzaWVfcGFnZSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHR9XG4gXG4gXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrID0gXHUwMDI2c2llX3BhZ2UtXHUwMDNlc2llX2Jsb2NrO1xuIFx0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VpdGRiYSA9IHZpcnRfdG9fcGh5cyhcdTAwMjZzaWVfcGFnZS1cdTAwM2VpdGRiKTtcbkBAIC0zODQ4LDEwICszODU2LDkgQEAgaW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNla3ZtX3ZhbGlkX3JlZ3MgfD0gS1ZNX1NZTkNfRlBSUztcbiBcbiBcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKSB7XG4tXHRcdHJjID0gLUVOT01FTTtcbiBcdFx0dmNwdS1cdTAwM2VhcmNoLmdtYXAgPSBnbWFwX25ld19jaGlsZCh2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmdtYXAsIC0xVUwpO1xuIFx0XHRpZiAoIXZjcHUtXHUwMDNlYXJjaC5nbWFwKVxuLVx0XHRcdGdvdG8gb3V0X2ZyZWVfc2llX2Jsb2NrO1xuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFxuIFx0Vk1fRVZFTlQodmNwdS1cdTAwM2Vrdm0sIDMsIFwiY3JlYXRlIGNwdSAlZCBhdCAweCVwLCBzaWUgYmxvY2sgYXQgMHglcFwiLFxuQEAgLTM4NTksMjAgKzM4NjYsMTkgQEAgaW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHRyYWNlX2t2bV9zMzkwX2NyZWF0ZV92Y3B1KHZjcHUtXHUwMDNldmNwdV9pZCwgdmNwdSwgdmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jayk7XG4gXG4gXHRyYyA9IGt2bV9zMzkwX3ZjcHVfc2V0dXAodmNwdSk7XG4tXHRpZiAocmMpXG4tXHRcdGdvdG8gb3V0X3Vjb250cm9sX3VuaW5pdDtcbitcdGlmIChyYykge1xuK1x0XHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKSkge1xuK1x0XHRcdHNjb3BlZF9ndWFyZChzcGlubG9jaywgXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWNoaWxkcmVuX2xvY2spXG4rXHRcdFx0XHRnbWFwX3JlbW92ZV9jaGlsZCh2Y3B1LVx1MDAzZWFyY2guZ21hcCk7XG4rXHRcdFx0dmNwdS1cdTAwM2VhcmNoLmdtYXAgPSBnbWFwX3B1dCh2Y3B1LVx1MDAzZWFyY2guZ21hcCk7XG4rXHRcdH1cbitcdFx0cmV0dXJuIHJjO1xuK1x0fVxuIFxuK1x0dmNwdS1cdTAwM2VhcmNoLm1jID0gbm9fZnJlZV9wdHIobWMpO1xuK1x0c2llX3BhZ2UgPSBOVUxMO1xuIFx0a3ZtX3MzOTBfdXBkYXRlX3RvcG9sb2d5X2NoYW5nZV9yZXBvcnQodmNwdS1cdTAwM2Vrdm0sIDEpO1xuIFx0cmV0dXJuIDA7XG4tXG4tb3V0X3Vjb250cm9sX3VuaW5pdDpcbi1cdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKSB7XG4tXHRcdGdtYXBfcmVtb3ZlX2NoaWxkKHZjcHUtXHUwMDNlYXJjaC5nbWFwKTtcbi1cdFx0dmNwdS1cdTAwM2VhcmNoLmdtYXAgPSBnbWFwX3B1dCh2Y3B1LVx1MDAzZWFyY2guZ21hcCk7XG4tXHR9XG4tb3V0X2ZyZWVfc2llX2Jsb2NrOlxuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSh2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrKSk7XG4tXHRyZXR1cm4gcmM7XG4gfVxuIFxuIGludCBrdm1fYXJjaF92Y3B1X3J1bm5hYmxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbkBAIC01MDM5LDYgKzUwNDUsMTAgQEAgaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdCAgICBrdm1fcnVuLVx1MDAzZWt2bV9kaXJ0eV9yZWdzIFx1MDAyNiB+S1ZNX1NZTkNfUzM5MF9WQUxJRF9GSUVMRFMpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuK1x0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZSgpICovXG4rXHRpZiAoIXNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmluaXRpYWxpemVkKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHR2Y3B1X2xvYWQodmNwdSk7XG4gXG4gXHRpZiAoZ3Vlc3RkYmdfZXhpdF9wZW5kaW5nKHZjcHUpKSB7XG5AQCAtNTQ0Nyw2ICs1NDU3LDggQEAgbG9uZyBrdm1fYXJjaF92Y3B1X3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsXG4gXHRcdHN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgczM5MGludDtcbiBcdFx0c3RydWN0IGt2bV9zMzkwX2lycSBzMzkwaXJxID0ge307XG4gXG4rXHRcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2czM5MGludCwgYXJncCwgc2l6ZW9mKHMzOTBpbnQpKSlcbiBcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdFx0aWYgKHMzOTBpbnRfdG9fczM5MGlycShcdTAwMjZzMzkwaW50LCBcdTAwMjZzMzkwaXJxKSlcbkBAIC01NTIzLDYgKzU1MzUsMTAgQEAgbG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuIFx0bG9uZyByO1xuIFx0dTE2IHJjLCBycmM7XG4gXG4rXHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4ga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKCkgKi9cbitcdGlmICghc21wX2xvYWRfYWNxdWlyZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaW5pdGlhbGl6ZWQpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdHZjcHVfbG9hZCh2Y3B1KTtcbiBcbiBcdHN3aXRjaCAoaW9jdGwpIHtcbkBAIC01Nzk0LDE0ICs1ODEwLDMwIEBAIGludCBrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBsb25nIGNtbWFfZF9jb3VudF9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2Fsaylcbit7XG4rXHR1bmlvbiBwZ3N0ZSBwZ3N0ZTtcbitcbitcdHBnc3RlID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7XG4rXHRpZiAocGdzdGUuY21tYV9kKSB7XG4rXHRcdHBnc3RlLmNtbWFfZCA9IDA7XG4rXHRcdGF0b21pYzY0X2RlYyh3YWxrLVx1MDAzZXByaXYpO1xuK1x0fVxuK1x0cGdzdGVfc2V0X3VubG9jayhwdGVwLCBwZ3N0ZSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdFx0XHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpvbGQsXG4gXHRcdFx0XHRjb25zdCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpuZXcsXG4gXHRcdFx0XHRlbnVtIGt2bV9tcl9jaGFuZ2UgY2hhbmdlKVxuIHtcbi1cdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jID0gTlVMTDtcbitcdGNvbnN0IHN0cnVjdCBkYXRfd2Fsa19vcHMgb3BzID0geyAucHRlX2VudHJ5ID0gY21tYV9kX2NvdW50X3B0ZSwgfTtcbitcdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jIF9fZnJlZShrdm1fczM5MF9tbXVfY2FjaGUpID0gTlVMTDtcbiBcdGludCByYyA9IDA7XG4gXG4rXHRndWFyZChtdXRleCkoXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2FyY2hfbG9jayk7XG4rXG4gXHRpZiAoY2hhbmdlID09IEtWTV9NUl9GTEFHU19PTkxZKVxuIFx0XHRyZXR1cm47XG4gXG5AQCAtNTgxMiw2ICs1ODQ0LDEyIEBAIHZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuIFx0fVxuIFxuIFx0c2NvcGVkX2d1YXJkKHdyaXRlX2xvY2ssIFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jaykge1xuK1x0XHRpZiAoa3ZtLVx1MDAzZWFyY2gubWlncmF0aW9uX21vZGUgXHUwMDI2XHUwMDI2IGt2bS1cdTAwM2VhcmNoLnVzZV9jbW1hIFx1MDAyNlx1MDAyNiBvbGQpIHtcbitcdFx0XHRfZGF0X3dhbGtfZ2ZuX3JhbmdlKG9sZC1cdTAwM2ViYXNlX2dmbiwgb2xkLVx1MDAzZWJhc2VfZ2ZuICsgb2xkLVx1MDAzZW5wYWdlcyxcbitcdFx0XHRcdFx0ICAgIGt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlYXNjZSwgXHUwMDI2b3BzLCBEQVRfV0FMS19JR05fSE9MRVMsXG4rXHRcdFx0XHRcdCAgICBcdTAwMjZrdm0tXHUwMDNlYXJjaC5jbW1hX2RpcnR5X3BhZ2VzKTtcbitcdFx0fVxuK1xuIFx0XHRzd2l0Y2ggKGNoYW5nZSkge1xuIFx0XHRjYXNlIEtWTV9NUl9ERUxFVEU6XG4gXHRcdFx0cmMgPSBkYXRfZGVsZXRlX3Nsb3QobWMsIGt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlYXNjZSwgb2xkLVx1MDAzZWJhc2VfZ2ZuLCBvbGQtXHUwMDNlbnBhZ2VzKTtcbkBAIC01ODMzLDcgKzU4NzEsNiBAQCB2b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbiBvdXQ6XG4gXHRpZiAocmMpXG4gXHRcdHByX3dhcm4oXCJmYWlsZWQgdG8gY29tbWl0IG1lbW9yeSByZWdpb25cXG5cIik7XG4tXHRrdm1fczM5MF9mcmVlX21tdV9jYWNoZShtYyk7XG4gXHRyZXR1cm47XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHJpdi5jIGIvYXJjaC9zMzkwL2t2bS9wcml2LmNcbmluZGV4IGFkMGRkYzQzM2E3M2MuLmIxYmEyNGMzNDZlZmEgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL3ByaXYuY1xuKysrIGIvYXJjaC9zMzkwL2t2bS9wcml2LmNcbkBAIC0yODksNiArMjg5LDcgQEAgc3RhdGljIGludCBoYW5kbGVfaXNrZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gc3RhdGljIGludCBoYW5kbGVfcnJiZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBnYWRkcjtcbitcdHVuaW9uIHNrZXkgc2tleTtcbiBcdGludCByZWcxLCByZWcyO1xuIFx0aW50IHJjO1xuIFxuQEAgLTMwNywxMiArMzA4LDEyIEBAIHN0YXRpYyBpbnQgaGFuZGxlX3JyYmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0Z2FkZHIgPSBrdm1fczM5MF9sb2dpY2FsX3RvX2VmZmVjdGl2ZSh2Y3B1LCBnYWRkcik7XG4gXHRnYWRkciA9IGt2bV9zMzkwX3JlYWxfdG9fYWJzKHZjcHUsIGdhZGRyKTtcbiBcdHNjb3BlZF9ndWFyZChyZWFkX2xvY2ssIFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZW1tdV9sb2NrKVxuLVx0XHRyYyA9IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHZjcHUtXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWFzY2UsIGdwYV90b19nZm4oZ2FkZHIpKTtcbitcdFx0cmMgPSBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh2Y3B1LVx1MDAzZWFyY2guZ21hcC1cdTAwM2Vhc2NlLCBncGFfdG9fZ2ZuKGdhZGRyKSwgXHUwMDI2c2tleSk7XG4gXHRpZiAocmMgXHUwMDNlIDApXG4gXHRcdHJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwgcmMpO1xuIFx0aWYgKHJjIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmM7XG4tXHRrdm1fczM5MF9zZXRfcHN3X2NjKHZjcHUsIHJjKTtcbitcdGt2bV9zMzkwX3NldF9wc3dfY2ModmNwdSwgKHNrZXkuc2tleSBcdTAwM2VcdTAwM2UgMSkgXHUwMDI2IDMpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTEyNjAsOCArMTI2MSw5IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2Vzc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHQvKiBSZXRyeSB0aGUgRVNTQSBpbnN0cnVjdGlvbiAqL1xuIFx0XHRrdm1fczM5MF9yZXRyeV9pbnN0cih2Y3B1KTtcbiBcdH0gZWxzZSB7XG4tXHRcdHNjb3BlZF9ndWFyZChyZWFkX2xvY2ssIFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZW1tdV9sb2NrKVxuLVx0XHRcdGkgPSBfX2RvX2Vzc2EodmNwdSwgb3JjKTtcbitcdFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2spXG4rXHRcdFx0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlbW11X2xvY2spXG4rXHRcdFx0XHRpID0gX19kb19lc3NhKHZjcHUsIG9yYyk7XG4gXHRcdGlmIChpIFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiBpO1xuIFx0XHQvKiBBY2NvdW50IGZvciB0aGUgcG9zc2libGUgZXh0cmEgY2JybCBlbnRyeSAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHYuYyBiL2FyY2gvczM5MC9rdm0vcHYuY1xuaW5kZXggMWJlYWNjODQxY2E4NS4uYjAyZTAxNTlkM2NkMiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vcHYuY1xuKysrIGIvYXJjaC9zMzkwL2t2bS9wdi5jXG5AQCAtMjQ0LDYgKzI0NCwyNCBAQCBzdGF0aWMgdm9pZCBrdm1fczM5MF9jbGVhcl9wdl9zdGF0ZShzdHJ1Y3Qga3ZtICprdm0pXG4gXHRrdm0tXHUwMDNlYXJjaC5wdi5zdG9yX3ZhciA9IE5VTEw7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGt2bV9zMzkwX3B2X2Rpc3Bvc2VfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmcmVlX3N0b3JfYmFzZSlcbit7XG4rXHRpZiAoZnJlZV9zdG9yX2Jhc2UpXG4rXHRcdGZyZWVfcGFnZXModmNwdS1cdTAwM2VhcmNoLnB2LnN0b3JfYmFzZSwgZ2V0X29yZGVyKHV2X2luZm8uZ3Vlc3RfY3B1X3N0b3JfbGVuKSk7XG4rXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2lkYV9hZGRyKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2spKTtcbitcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlcHZfaGFuZGxlX2NwdSA9IDA7XG4rXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZXB2X2hhbmRsZV9jb25maWcgPSAwO1xuK1x0bWVtc2V0KFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5wdiwgMCwgc2l6ZW9mKHZjcHUtXHUwMDNlYXJjaC5wdikpO1xuK1x0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VzZGYgPSAwO1xuK1x0LypcbitcdCAqIFRoZSBzaWRhZCBmaWVsZCAoZm9yIHNkZiA9PSAyKSBpcyBub3cgdGhlIGdiZWEgZmllbGQgKGZvciBzZGYgPT0gMCkuXG4rXHQgKiBVc2UgdGhlIHJlc2V0IHZhbHVlIG9mIGdiZWEgdG8gYXZvaWQgbGVha2luZyB0aGUga2VybmVsIHBvaW50ZXIgb2ZcbitcdCAqIHRoZSBqdXN0IGZyZWVkIHNpZGEuXG4rXHQgKi9cbitcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlZ2JlYSA9IDE7XG4rXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfVExCX0ZMVVNILCB2Y3B1KTtcbit9XG4rXG4gaW50IGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXG4ge1xuIFx0aW50IGNjO1xuQEAgLTI1OCwyNCArMjc2LDkgQEAgaW50IGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXG4gXHRXQVJOX09OQ0UoY2MsIFwicHJvdHZpcnQgZGVzdHJveSBjcHUgZmFpbGVkIHJjICV4IHJyYyAleFwiLCAqcmMsICpycmMpO1xuIFxuIFx0LyogSW50ZW5kZWQgbWVtb3J5IGxlYWsgZm9yIHNvbWV0aGluZyB0aGF0IHNob3VsZCBuZXZlciBoYXBwZW4uICovXG4tXHRpZiAoIWNjKVxuLVx0XHRmcmVlX3BhZ2VzKHZjcHUtXHUwMDNlYXJjaC5wdi5zdG9yX2Jhc2UsXG4tXHRcdFx0ICAgZ2V0X29yZGVyKHV2X2luZm8uZ3Vlc3RfY3B1X3N0b3JfbGVuKSk7XG4tXG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2lkYV9hZGRyKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2spKTtcbi1cdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlcHZfaGFuZGxlX2NwdSA9IDA7XG4tXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZXB2X2hhbmRsZV9jb25maWcgPSAwO1xuLVx0bWVtc2V0KFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5wdiwgMCwgc2l6ZW9mKHZjcHUtXHUwMDNlYXJjaC5wdikpO1xuLVx0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VzZGYgPSAwO1xuLVx0Lypcbi1cdCAqIFRoZSBzaWRhZCBmaWVsZCAoZm9yIHNkZiA9PSAyKSBpcyBub3cgdGhlIGdiZWEgZmllbGQgKGZvciBzZGYgPT0gMCkuXG4tXHQgKiBVc2UgdGhlIHJlc2V0IHZhbHVlIG9mIGdiZWEgdG8gYXZvaWQgbGVha2luZyB0aGUga2VybmVsIHBvaW50ZXIgb2Zcbi1cdCAqIHRoZSBqdXN0IGZyZWVkIHNpZGEuXG4tXHQgKi9cbi1cdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlZ2JlYSA9IDE7XG4tXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfVExCX0ZMVVNILCB2Y3B1KTtcbitcdGt2bV9zMzkwX3B2X2Rpc3Bvc2VfY3B1KHZjcHUsICFjYyk7XG4gXG4tXHRyZXR1cm4gY2MgPyBFSU8gOiAwO1xuK1x0cmV0dXJuIGNjID8gLUVJTyA6IDA7XG4gfVxuIFxuIGludCBrdm1fczM5MF9wdl9jcmVhdGVfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXG5AQCAtMzE5LDkgKzMyMiw3IEBAIGludCBrdm1fczM5MF9wdl9jcmVhdGVfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXG4gXHRcdCAgICAgdXZjYi5oZWFkZXIucnJjKTtcbiBcbiBcdGlmIChjYykge1xuLVx0XHR1MTYgZHVtbXk7XG4tXG4tXHRcdGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHZjcHUsIFx1MDAyNmR1bW15LCBcdTAwMjZkdW1teSk7XG4rXHRcdGt2bV9zMzkwX3B2X2Rpc3Bvc2VfY3B1KHZjcHUsIHRydWUpO1xuIFx0XHRyZXR1cm4gLUVJTztcbiBcdH1cbiBcbkBAIC04MDksNyArODEwLDcgQEAgc3RhdGljIGludCB1bnBhY2tfb25lKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1NjQgdHdlYWssXG4gXHRcdFx0cmV0dXJuIC1FQUdBSU47XG4gXHR9XG4gXG4tXHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVBR0FJTilcbitcdGlmIChyZXQgXHUwMDI2XHUwMDI2IHJldCAhPSAtRUFHQUlOIFx1MDAyNlx1MDAyNiByZXQgIT0gLUVJTlRSKVxuIFx0XHRLVk1fVVZfRVZFTlQoa3ZtLCAzLCBcIlBST1RWSVJUIFZNIFVOUEFDSzogZmFpbGVkIGFkZHIgJWxseCB3aXRoIHJjICV4IHJyYyAleFwiLFxuIFx0XHRcdCAgICAgdXZjYi5nYWRkciwgKnJjLCAqcnJjKTtcbiBcdHJldHVybiByZXQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowOTo0OS42ODU3MDY1NDZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzc0NDgxNTU1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYW4gczM5MCBLVk0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGZvciBzMzkwIEtWTSwgYW5kIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaXQgcXVpY2tseS4gTGV0J3Mgc2VlLi4uIGl0J3MgdG91Y2hpbmcgc2V2ZXJhbCBjb3JlIGFyZWFzOiBgYXJjaC9zMzkwL2t2bS9gLiAgVGhlIGtleSBjaGFuZ2VzIGp1bXAgb3V0IHJpZ2h0IGF3YXkuIFRoZXkndmUgYWRkZWQgYSBgYm9vbCBpbml0aWFsaXplZDtgIHRvIGBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaGAgaW4gYGt2bV9ob3N0LmhgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIHN1Z2dlc3RpbmcgdGhleSdyZSB0cmFja2luZyBWQ1BVIGluaXRpYWxpemF0aW9uIHN0YXRlLCBhbmQgcHJvYmFibHkgZml4aW5nIHNvbWUgcmFjZSBjb25kaXRpb25zLlxuXG5UaGVuLCB0aGVyZSdzIGEgbW9kaWZpY2F0aW9uIHRvIGBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdGAgaW4gYGRhdC5jYC4gVGhlIHNpZ25hdHVyZSBjaGFuZ2VkLCByZXR1cm5pbmcgdGhlIGBza2V5YCB2aWEgYSBwb2ludGVyLiAgVGhhdCdzIGEgcG90ZW50aWFsIGFyZWEgZm9yIHN1YnRsZSBidWdzIGlmIG5vdCBoYW5kbGVkIGNvcnJlY3RseSBieSBhbGwgY2FsbGVycy4gVGhlIGBmYXVsdGluLmNgIGNoYW5nZSwgaGFuZGxpbmcgYC1FSU5UUmAgZnJvbSBgaXNfc2lncGVuZGluZ19wZm4oKWAsIGlzIGEgZ29vZCBkZWZlbnNpdmUgbWVhc3VyZTsgYWRkcmVzc2luZyBzaWduYWwgaGFuZGxpbmcgaW4gZmF1bHRpbmcgcGF0aHMgaXMgYWx3YXlzIGEgd2luLlxuXG5Nb3ZpbmcgdG8gYGludGVycnVwdC5jYCwgdGhlIGNoZWNrcyBmb3IgYGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSlgIGluIGludGVycnVwdCBmdW5jdGlvbnMgbG9vayBsaWtlIGEgZ29vZCBzZWN1cml0eSBtZWFzdXJlLCBvbmx5IGFsbG93aW5nIHByaXZpbGVnZWQgb3BlcmF0aW9ucyBmcm9tIGFwcHJvcHJpYXRlIGNvbnRleHRzLlxuXG5ga3ZtLXMzOTAuY2AgaXMgd2hlcmUgdGhpbmdzIGdldCByZWFsbHkgaW50ZXJlc3RpbmcuIFRoZXJlIGFyZSB1cGRhdGVzIHRvIGBrdm1fczM5MF9rZXlvcGAgdG8gYWNjb21tb2RhdGUgdGhlIGBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdGAgY2hhbmdlLCB3aGljaCBpcyBleHBlY3RlZC4gVGhlIHVzZSBvZiBga3ZtLVx1MDAzZXNsb3RzX2FyY2hfbG9ja2AgaW5zdGVhZCBvZiBga3ZtLVx1MDAzZXNsb3RzX2xvY2tgIGluIGBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uYCBhbmQgYGt2bV9hcmNoX3ZtX2lvY3RsYCBpcyBhIGdvb2Qgc2lnbiB0aGF0IHRoZXkncmUgYWRkcmVzc2luZyBzb21lIGxvY2tpbmcgaXNzdWVzLCBlc3BlY2lhbGx5IHdpdGggdGhlIENNTUEgYml0cywgd2hpY2ggd291bGQgaGF2ZSBoYWQgdG8gZG8gd2l0aCB0aGUgZ3Vlc3QgcGh5c2ljYWwgdG8gaG9zdCBwaHlzaWNhbCB0cmFuc2xhdGlvbi4gVGhlIGFkZGl0aW9uIG9mIGNoZWNrcyBmb3IgdGhlIGBrdm0tXHUwMDNlYXJjaC5zY2FgIGJlZm9yZSBmcmVlaW5nIGFuZCB0aGUgVkNQVSdzIGluaXRpYWxpemF0aW9uIHN0YXRlIChgdmNwdS1cdTAwM2VhcmNoLmluaXRpYWxpemVkYCkgaW4gc2V2ZXJhbCBzcG90cyBzdWdnZXN0cyBhIGZvY3VzIG9uIHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIGF2b2lkaW5nIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMuIFRoZSB1c2Ugb2YgYHNtcF9zdG9yZV9yZWxlYXNlYCBhbmQgYHNtcF9sb2FkX2FjcXVpcmVgIHdpdGggdGhlIGluaXRpYWxpemVkIGZsYWcgaXMgYWJzb2x1dGVseSBuZWNlc3NhcnkgZm9yIGNvcnJlY3Qgc3luY2hyb25pemF0aW9uIG9uIGEgbXVsdGktY29yZSBtYWNoaW5lLCBhbmQgSSdtIGdsYWQgdG8gc2VlIHRoYXQuIEZpeGluZyB0aG9zZSBtZW1vcnkgbGVha3MgYW5kIGVycm9yIGhhbmRsaW5nIGlzc3VlcyBpbiBga3ZtX2FyY2hfdmNwdV9jcmVhdGVgIGlzIGltcG9ydGFudC4gSSBuZWVkIHRvIG5vdGUgdGhhdCBmdW5jdGlvbiBhbmQgYW5hbHl6ZSBpdC5cblxuVGhlIHVzZSBvZiBgc2xvdHNfYXJjaF9sb2NrYCBpbiBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gIGFsc28gcG9pbnRzIHRvIGxvY2tpbmcgaW1wcm92ZW1lbnRzLCBhbmQgQ01NQSBkaXJ0eSBwYWdlIHVwZGF0ZXMgYXJlIGEga2V5IHBhcnQgb2YgdGhpcy4gVGhlIGBwcml2LmNgIGFuZCBgcHYuY2AgY2hhbmdlcywgd2l0aCB0aGUgdXBkYXRlZCBgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXRgIGNhbGxzIGFuZCB0aGUgYHNsb3RzX2FyY2hfbG9ja2AgdXNhZ2UgaW4gYGhhbmRsZV9lc3NhYCBhcmUgc3RhbmRhcmQgYWRhcHRhdGlvbnMgdG8gdGhlIGNoYW5nZXMgaW4gdGhlIHJlc3Qgb2YgdGhlIGNvZGUuIFRoZSBzcGxpdHRpbmcgb2YgYGt2bV9zMzkwX3B2X2Rpc3Bvc2VfY3B1YCB3aXRoIHRoZSByZXNwZWN0aXZlIGNoYW5nZXMgaW4gYGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1YCBhbmQgYGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVgIGlzIGEgZ29vZCBzdGVwIHRvd2FyZHMgc2ltcGxpZnlpbmcgdGhlIENQVSByZXNvdXJjZSBtYW5hZ2VtZW50LlxuXG5Tbywgb3ZlcmFsbCwgdGhpcyBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBwYXRjaCBzZXJpZXMuIERlZmluaXRlbHkgd29ydGggYSB0aG9yb3VnaCBsb29rLiBJdCBhZGRyZXNzZXMgYSBmZXcgYnVncywgaW5jbHVkaW5nIHJhY2UgY29uZGl0aW9ucyByZWxhdGVkIHRvIFZDUFUgaW5pdGlhbGl6YXRpb24sIGxvY2tpbmcgcHJvYmxlbXMsIGFuZCBzb21lIG1lbW9yeSBsZWFrcy4gVGhhdCdzIGdvb2Qgc3R1ZmYuXG5cbk9rYXksIGxldCBtZSBsaXN0IHRoZSBmb2N1cyBzeW1ib2xzOlxuXG4qICAgYGt2bV9hcmNoX3ZjcHVfY3JlYXRlYCAtIFRoYXQgb25lIG5lZWRzIHNjcnV0aW55LlxuKiAgIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmBcbiogICBga3ZtX2FyY2hfdmNwdV9pb2N0bGBcbiogICBga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bGBcbiogICBga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbmBcbiogICBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gXG4qICAgYGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1YFxuKiAgIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YFxuKiAgIGBoYW5kbGVfcnJiZWBcbiogICBgaGFuZGxlX2Vzc2FgXG4qICAgYGt2bV9zMzkwX2tleW9wYFxuKiAgIGBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdGAgLSBLZWVwIGFuIGV5ZSBvbiB0aGUgYGRhdF9yZXNldF9yZWZlcmVuY2VfYml0YCBzaWduYXR1cmUgY2hhbmdlLCBhcyB3ZWxsIGFzIGV2ZXJ5IGxvY2F0aW9uIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQuXG5cbk5vdywgbGV0J3MgbWFrZSBzdXJlIHRoZSBLY29uZmlnIGlzIHNldCBjb3JyZWN0bHkuIHMzOTAgS1ZNIGRlcGVuZHMgb24gYENPTkZJR19LVk1gLCBvYnZpb3VzbHkuICBMZXQncyB1c2UgYGdyZXBwZXJgIGluIHRoZSBgYXJjaC9zMzkwL2t2bS9LY29uZmlnYCB0byBzZWVcblxuIiwiSW5wdXRUb2tlbnMiOjExODE3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MTA6MDMuNDMwNTI1MjQ2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTYzMjIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWc9MTc9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMTgtXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjE5OmNvbmZpZyBLVk1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMjAtXFx0ZGVmX3RyaXN0YXRlIHlcXG4tLVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDc6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIlVzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjEwOjAzLjU3NjE2NDQwNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NDkzMzE2NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgS1ZNIFMzOTAgVUNvbnRyb2wgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IHJlZmVyZW5jZXMgYGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSlgLiBUaGF0IGZ1bmN0aW9uIGNhbGwsIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIEtWTSBjb2RlYmFzZSwgc3Ryb25nbHkgaW1wbGllcyB0aGF0IHRoZSBgQ09ORklHX0tWTV9TMzkwX1VDT05UUk9MYCBjb25maWd1cmF0aW9uIG9wdGlvbiAqc2hvdWxkKiBiZSBlbmFibGVkIGZvciB0aGUgdGFyZ2V0IHBsYXRmb3JtLiBHaXZlbiB0aGlzLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBpbmRlZWQgc2V0IGFzIGV4cGVjdGVkLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlcy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhlIHByZXNlbmNlIGFuZCBzdGF0dXMgb2YgYEtWTV9TMzkwX1VDT05UUk9MYC4gSSdsbCBnbyBjaGVjayBgYXJjaC9zMzkwL2t2bS9LY29uZmlnYCB0byBpbnNwZWN0IHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoZSByZWxldmFudCBvcHRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjb25maWd1cmF0aW9uIGVsZW1lbnQgaXMgc2V0IGNvcnJlY3RseSwgYW5kIHRoZSBidWlsZCBpcyBwaWNraW5nIHRoaXMgb3B0aW9uIHVwIG9yIGNvbmZpZ3VyZWQgY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDAxNSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjEwOjA4LjIyNTQ5OTI3MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTA0NDc0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vS2NvbmZpZz0xOT1jb25maWcgS1ZNXFxuLS1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDYtXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjQ3OmNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTFxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cXHRib29sIFxcXCJVc2Vyc3BhY2UgY29udHJvbGxlZCB2aXJ0dWFsIG1hY2hpbmVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzoxMDowOC4yODQ1NDk5NzlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5Nzg1OTc5MzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBmb2N1cyBzeW1ib2xzLCB0aGlua2luZyB0aHJvdWdoIHRoaXMgYW5hbHlzaXM6XG5cbioqRm9jdXMgU3ltYm9sIFJldmlldyBcdTAwMjYgS1ZNIEludGVncmF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSB0YWtpbmcgYSBsb29rIGF0IGEgc2V0IG9mIGtleSBzeW1ib2xzIHJlbGF0ZWQgdG8gdGhlIGBLVk1gIGluZnJhc3RydWN0dXJlIOKAkyBkZWZpbml0ZWx5IGNlbnRyYWwgdG8gYW55IGRlZXAgZGl2ZSBpbnRvIHZpcnR1YWxpemF0aW9uIG9uIExpbnV4LiBUaGUgb2JqZWN0aXZlIGhlcmUgaXMgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2Ygd2hlcmUgdGhlIG1vc3QgY3JpdGljYWwgaW50ZXJhY3Rpb25zIGFuZCBwcm9jZXNzaW5nIG9jY3VyIHdpdGhpbiB0aGUgYEtWTWAgbGF5ZXIuXG5cbkkndmUgZ290IGEgY29tcHJlaGVuc2l2ZSBsaXN0IG9mIGZ1bmN0aW9ucyB0byBjb25zaWRlci4gVGhlc2UgZnVuY3Rpb25zIHJlcHJlc2VudCB0aGUgYmFja2JvbmUgb2YgYEtWTWAncyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgYXJjaGl0ZWN0dXJlIGFuZCBJL08uIEknbSBub3RpbmcgdGhlIGluaXRpYWwgbGlzdDpcblxuKiAgIGBrdm1fYXJjaF92Y3B1X2NyZWF0ZWA6IFRoaXMgaXMgY3J1Y2lhbCDigJMgdGhlIGNyZWF0aW9uIG9mIGEgdmlydHVhbCBDUFUgY29udGV4dC4gRXZlcnl0aGluZyBzcGlucyBvdXQgZnJvbSBoZXJlLlxuKiAgIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmA6IFRoaXMgaXMgdGhlIGhlYXJ0IG9mIHRoZSBWQ1BVJ3MgZXhlY3V0aW9uIGxvb3AsIHRoZSBnbHVlIGJldHdlZW4gdXNlcnNwYWNlIGFuZCB0aGUgZ3Vlc3QuXG4qICAgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgOiBUaGUgZ2VuZXJhbCBwdXJwb3NlIGBpb2N0bGAgaW50ZXJmYWNlIGZvciBWQ1BVcy5cbiogICBga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bGA6IFZhcmlhbnQgb2YgdGhlIGFib3ZlLCBvZnRlbiB1c2VkIHdoZW4gY3JpdGljYWwgc2VjdGlvbnMgZG9uJ3QgbmVlZCB0byBiZSBsb2NrZWQuXG4qICAgYGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25gOiBUaGlzIG9uZSBpcyB2ZXJ5IGludGVyZXN0aW5nLCBzaW5jZSBpdCByZWxhdGVzIHRvIFZNIG1pZ3JhdGlvbiwgc28gaXQncyBhIGdvb2QgaW5jbHVzaW9uLlxuKiAgIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmA6IFRoaXMgaXMgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgd2hpY2ggaXMgc29tZXRoaW5nIEkgbmVlZCB0byBldmFsdWF0ZS5cbiogICBga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHVgOiBBbmQgaXRzIGNvdW50ZXJwYXJ0OiB0aGUgZGVzdHJ1Y3Rpb24gb2YgdGhlIHZpcnR1YWwgQ1BVLlxuKiAgIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YDogQ3JlYXRpbmcgYSB2aXJ0dWFsIENQVSwgYnV0IGZvciBhIHNwZWNpZmljIGFyY2hpdGVjdHVyZS5cbiogICBgaGFuZGxlX3JyYmVgOiBMb29rcyBsaWtlIGEgY3J1Y2lhbCBoYW5kbGVyIGZvciBhIGNlcnRhaW4gdHlwZSBvZiBpbnN0cnVjdGlvbiBvciBoYXJkd2FyZSBldmVudC5cbiogICBgaGFuZGxlX2Vzc2FgOiBTaW1pbGFyIHRvIHRoZSBhYm92ZSwgdGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbC5cbiogICBga3ZtX3MzOTBfa2V5b3BgOiBUaGlzIGlzIHJlbGF0ZWQgdG8ga2V5IG9wZXJhdGlvbnMsIHByb2JhYmx5IHdpdGhpbiB0aGUgUzM5MCBhcmNoaXRlY3R1cmUuXG4qICAgYGRhdF9yZXNldF9yZWZlcmVuY2VfYml0YDogVGhpcyBpcyBpbXBvcnRhbnQsIGFzIGl0IGhlbHBzIHdpdGggYSBzcGVjaWZpYyBiaXQgbWFuaXB1bGF0aW9uLlxuXG5BbGwgb2YgdGhlc2UgYXJlIHNvbGlkIGNob2ljZXMuIFRoaXMgaXMgYSB2ZXJ5IHVzZWZ1bCBzZXQgb2YgZm9jdXMgc3ltYm9scyBmb3IgYSBmaXJzdCBwYXNzLiBJJ20gZ29pbmcgdG8gc2V0IHRoZXNlIHN5bWJvbHMgYXMgdGhlIGtleSBjb21wb25lbnRzIGZvciBteSBhbmFseXNpcyBhbmQgYmVnaW4gZnJvbSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQzMywiT3V0cHV0VG9rZW5zIjoyNjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MTA6MTguMDcwNTMyNTlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4MDE1MDA1LCJFcnJvciI6InRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBLVk1fUzM5MF9VQ09OVFJPTCIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9TMzkwX1VDT05UUk9MXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2FyY2hfdmNwdV9jcmVhdGVcIixcbiAgICBcImt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuXCIsXG4gICAgXCJrdm1fYXJjaF92Y3B1X2lvY3RsXCIsXG4gICAgXCJrdm1fYXJjaF92Y3B1X3VubG9ja2VkX2lvY3RsXCIsXG4gICAgXCJrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uXCIsXG4gICAgXCJrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvblwiLFxuICAgIFwia3ZtX3MzOTBfcHZfZGVzdHJveV9jcHVcIixcbiAgICBcImt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVcIixcbiAgICBcImhhbmRsZV9ycmJlXCIsXG4gICAgXCJoYW5kbGVfZXNzYVwiLFxuICAgIFwia3ZtX3MzOTBfa2V5b3BcIixcbiAgICBcImRhdF9yZXNldF9yZWZlcmVuY2VfYml0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBzMzkwIEtWTSBpbXBsZW1lbnRhdGlvbiwgaW5jbHVkaW5nIGZpeGluZyByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHZDUFUgY3JlYXRpb24vaW5pdGlhbGl6YXRpb24sIGZpeGluZyBtZW1vcnkgbGVha3MsIGFuZCB1cGRhdGluZyBsb2NraW5nIG1lY2hhbmlzbXMgKHVzaW5nIHNsb3RzX2FyY2hfbG9jaykuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIEtWTSBpb2N0bHMgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LCBtYWtpbmcgdGhlbSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcInRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBLVk1fUzM5MF9VQ09OVFJPTFwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzoxMDoxOC4xNTg1Njg2MTVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODMwODc3NTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgTWlzc2luZyBLZXJuZWwgRmVhdHVyZSoqXG5cblJpZ2h0LCBzbyBgS1ZNX1MzOTBfVUNPTlRST0xgIHNlZW1zIHRvIGJlIHVuZGVmaW5lZC4gVGhhdCdzIHVuZXhwZWN0ZWQuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgYGFyY2gvczM5MC9rdm0vS2NvbmZpZ2AgZmlsZSBhZ2Fpbi4gSSBwcm9iYWJseSBtaXNzZWQgc29tZXRoaW5nLCBvciBtYXliZSB0aGVyZSdzIGEgZGVwZW5kZW5jeSBJJ20gb3Zlcmxvb2tpbmcgdGhhdCdzIGNhdXNpbmcgaXQgbm90IHRvIGJlIGV4cG9zZWQuIEkgbmVlZCB0byBlbnN1cmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIEknbSB0cnlpbmcgdG8gdXNlLCBsaWtlbHkgcmVsYXRlZCB0byB1c2VyIGNvbnRyb2wgZmVhdHVyZXMgZm9yIEtWTSBvbiBzMzkweCwgaXMgYWN0dWFsbHkgZW5hYmxlZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBvcHRpb25zLiBBIHF1aWNrIHJlLWV4YW1pbmF0aW9uIG9mIHRoZSBLY29uZmlnIGZpbGUgc2hvdWxkIGdpdmUgbWUgdGhlIGFuc3dlci4gTWF5YmUgdGhlcmUncyBhIHByZXJlcXVpc2l0ZSBrZXJuZWwgZmxhZyB0aGF0IGlzbid0IHNldCwgb3IgcGVyaGFwcyBpdCdzIG1vdmVkIG9yIHJlbmFtZWQuIE5vIGJpZyBkZWFsLCBqdXN0IGEgbWlub3Igb3ZlcnNpZ2h0LiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0NjMsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbInNldC1yZXN1bHRzIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MTA6MjIuOTg5NDUwMDlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NTg1NzIxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJLVk1fUzM5MF9VQ09OVFJPTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9LY29uZmlnPTE5PWNvbmZpZyBLVk1cXG4tLVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDc6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIlVzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjEwOjIzLjI0NTMxNjc4NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTkyOTc4MTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlYnVnZ2luZyBhIEtlcm5lbCBDb25maWd1cmF0aW9uIElzc3VlKipcblxuT2theSwgc28gSSB0aG91Z2h0IEkgd2FzIG9udG8gc29tZXRoaW5nIHdpdGggdGhlIGBLVk1fUzM5MF9VQ09OVFJPTGAgY29uZmlndXJhdGlvbiBvcHRpb24uIFRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgd2FzIHNheWluZyBpdCBkaWRuJ3QgZXhpc3QsIHdoaWNoIHdhcyB0aHJvd2luZyBtZSBvZmYuIEJ1dCB3YWl0Li4uIEkndmUganVzdCByZW1lbWJlcmVkIHNlZWluZyBpdCwgcmlnaHQ/IFllcywgaXQncyBkZWZpbml0ZWx5IGluIGBhcmNoL3MzOTAva3ZtL0tjb25maWdgLlxuXG5UaGVuIHdoeSB3YXMgdGhlIHRvb2wgcmVwb3J0aW5nIGl0IGFzIG1pc3Npbmc/IEhtbSwgbWF5YmUgaXQncyBjcm9zcy1yZWZlcmVuY2luZyBhZ2FpbnN0IHRoZSB3cm9uZyBhcmNoaXRlY3R1cmU/IFBlcmhhcHMgdGhlIHRvb2wgaXMgZGVmYXVsdGluZyB0byBjaGVja2luZyB0aGUgYHg4NmAgdHJlZSBvciBzb21ldGhpbmcgc2ltaWxhcj8gVGhhdCB3b3VsZCBleHBsYWluIHRoZSBjb25mdXNpb24uIEJ1dCBubywgdGhlIHRvb2wgc2hvdWxkIGJlIGNoZWNraW5nICphbGwqIGBLY29uZmlnYCBmaWxlcyBnbG9iYWxseSwgbm90IGp1c3QgYSBzcGVjaWZpYyBhcmNoaXRlY3R1cmUuXG5cbkFscmlnaHQsIGxldCdzIHRha2UgYSBzdGVwIGJhY2sgYW5kIGRvdWJsZS1jaGVjayB0aGUgZXhhY3Qgc3ludGF4IG9mIHRoZSBvcHRpb24gbmFtZS4gSXMgYEtWTV9TMzkwX1VDT05UUk9MYCB0aGUgYWJzb2x1dGUgdHJ1dGg/IFllcywgYGNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTGAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IGZvcm0uXG5cbkknbSBzdGlsbCBtaXNzaW5nIHNvbWV0aGluZy4gTWF5YmUgdGhlIHRvb2wgaXMgbWlzdGFrZW5seSB0YXJnZXRpbmcgYGFyY2gveDg2L0tjb25maWdgPyBObywgaXQgc2hvdWxkbid0LiBJdCdzIHN1cHBvc2VkIHRvIGRvIGEgZ2xvYmFsIHNlYXJjaC5cblxuQWxyaWdodCwgSSdsbCB0cnkgdG8gc2ltcGxpZnkgdGhpbmdzLiBJJ2xsIGp1c3QgdXNlIHRoZSBiYXNpYyBvcHRpb24sIGBLVk1gLiBJZiB0aGUgdG9vbCBzdGlsbCBjb21wbGFpbnMsIHRoZW4gSSBrbm93IHNvbWV0aGluZyBpcyBmdW5kYW1lbnRhbGx5IHdyb25nLCBvciwgYXMgYSBsYXN0IHJlc29ydCwgbWF5YmUgSSBzaG91bGQgb21pdCB0aGUgbW9yZSBzcGVjaWZpYyBuYW1lLiBQZXJoYXBzIGp1c3QgdXNpbmcgYEtWTWAgd2lsbCBiZSBlbm91Z2ggZm9yIHRoZSB0b29sIHRvIHdvcmssIGFueXdheS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4NDMsIk91dHB1dFRva2VucyI6MjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjEwOjMwLjgzODI5ODc3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI0OTYyNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcmNoX3ZjcHVfY3JlYXRlXCIsXG4gICAgXCJrdm1fYXJjaF92Y3B1X2lvY3RsX3J1blwiLFxuICAgIFwia3ZtX2FyY2hfdmNwdV9pb2N0bFwiLFxuICAgIFwia3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bFwiLFxuICAgIFwia3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvblwiLFxuICAgIFwia3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25cIixcbiAgICBcImt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1XCIsXG4gICAgXCJrdm1fczM5MF9wdl9jcmVhdGVfY3B1XCIsXG4gICAgXCJoYW5kbGVfcnJiZVwiLFxuICAgIFwiaGFuZGxlX2Vzc2FcIixcbiAgICBcImt2bV9zMzkwX2tleW9wXCIsXG4gICAgXCJkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgczM5MCBLVk0gaW1wbGVtZW50YXRpb24sIGluY2x1ZGluZyBmaXhpbmcgcmFjZSBjb25kaXRpb25zIGR1cmluZyB2Q1BVIGNyZWF0aW9uL2luaXRpYWxpemF0aW9uLCBmaXhpbmcgbWVtb3J5IGxlYWtzLCBhbmQgdXBkYXRpbmcgbG9ja2luZyBtZWNoYW5pc21zICh1c2luZyBzbG90c19hcmNoX2xvY2spLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBvZiBLVk0gaW9jdGxzIGFuZCBtZW1vcnkgbWFuYWdlbWVudCwgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fYXJjaF92Y3B1X2NyZWF0ZVwiLFxuICAgIFwia3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5cIixcbiAgICBcImt2bV9hcmNoX3ZjcHVfaW9jdGxcIixcbiAgICBcImt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGxcIixcbiAgICBcImt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25cIixcbiAgICBcImt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uXCIsXG4gICAgXCJrdm1fczM5MF9wdl9kZXN0cm95X2NwdVwiLFxuICAgIFwia3ZtX3MzOTBfcHZfY3JlYXRlX2NwdVwiLFxuICAgIFwiaGFuZGxlX3JyYmVcIixcbiAgICBcImhhbmRsZV9lc3NhXCIsXG4gICAgXCJrdm1fczM5MF9rZXlvcFwiLFxuICAgIFwiZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHMzOTAgS1ZNIGltcGxlbWVudGF0aW9uLCBpbmNsdWRpbmcgZml4aW5nIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgdkNQVSBjcmVhdGlvbi9pbml0aWFsaXphdGlvbiwgZml4aW5nIG1lbW9yeSBsZWFrcywgYW5kIHVwZGF0aW5nIGxvY2tpbmcgbWVjaGFuaXNtcyAodXNpbmcgc2xvdHNfYXJjaF9sb2NrKS4gVGhlc2UgY2hhbmdlcyBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgS1ZNIGlvY3RscyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQsIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowqd5wd[1] Phase: Succeeded StartedAt: 2026-08-03 17:10:42 +0000 UTC FinishedAt: 2026-08-03 17:10:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqd5wd[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-03 17:10:42 +0000 UTC FinishedAt: 2026-08-03 17:10:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqd5wd[2] Phase: Succeeded StartedAt: 2026-08-03 17:10:42 +0000 UTC FinishedAt: 2026-08-03 17:55:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqd5wd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_vcpu_create","kvm_arch_vcpu_ioctl_run","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_s390_vm_set_migration","kvm_arch_commit_memory_region","kvm_s390_pv_destroy_cpu","kvm_s390_pv_create_cpu","handle_rrbe","handle_essa","kvm_s390_keyop","dat_reset_reference_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d4c21645-b951-4982-b8f3-ed4eafef838f","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-03 17:10:42 +0000 UTC FinishedAt: 2026-08-03 17:55:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_vcpu_create","kvm_arch_vcpu_ioctl_run","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_s390_vm_set_migration","kvm_arch_commit_memory_region","kvm_s390_pv_destroy_cpu","kvm_s390_pv_create_cpu","handle_rrbe","handle_essa","kvm_s390_keyop","dat_reset_reference_bit"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d4c21645-b951-4982-b8f3-ed4eafef838f","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-workflowqd5wd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_vcpu_create","kvm_arch_vcpu_ioctl_run","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_s390_vm_set_migration","kvm_arch_commit_memory_region","kvm_s390_pv_destroy_cpu","kvm_s390_pv_create_cpu","handle_rrbe","handle_essa","kvm_s390_keyop","dat_reset_reference_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d4c21645-b951-4982-b8f3-ed4eafef838f","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-03 17:10:42 +0000 UTC FinishedAt: 2026-08-03 17:10:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqd5wd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_vcpu_create","kvm_arch_vcpu_ioctl_run","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_s390_vm_set_migration","kvm_arch_commit_memory_region","kvm_s390_pv_destroy_cpu","kvm_s390_pv_create_cpu","handle_rrbe","handle_essa","kvm_s390_keyop","dat_reset_reference_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d4c21645-b951-4982-b8f3-ed4eafef838f","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-03 17:10:42 +0000 UTC FinishedAt: 2026-08-03 17:10:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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-workflowqd5wd/series-workflowqd5wd-convert-artifact-327164865/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqd5wd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_vcpu_create","kvm_arch_vcpu_ioctl_run","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_s390_vm_set_migration","kvm_arch_commit_memory_region","kvm_s390_pv_destroy_cpu","kvm_s390_pv_create_cpu","handle_rrbe","handle_essa","kvm_s390_keyop","dat_reset_reference_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d4c21645-b951-4982-b8f3-ed4eafef838f","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-03 17:10:52 +0000 UTC FinishedAt: 2026-08-03 17:27:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqd5wd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_vcpu_create","kvm_arch_vcpu_ioctl_run","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_s390_vm_set_migration","kvm_arch_commit_memory_region","kvm_s390_pv_destroy_cpu","kvm_s390_pv_create_cpu","handle_rrbe","handle_essa","kvm_s390_keyop","dat_reset_reference_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d4c21645-b951-4982-b8f3-ed4eafef838f","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-03 17:10:52 +0000 UTC FinishedAt: 2026-08-03 17:27:51 +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:*affebef8-4651-4a2c-afa4-6f46ad58bd45,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-workflowqd5wd/series-workflowqd5wd-convert-artifact-327164865/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": "4a88269a-cab6-4e01-9fb3-999ce587095a", "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-workflowqd5wd/series-workflowqd5wd-build-action-3448588783/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqd5wd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_vcpu_create","kvm_arch_vcpu_ioctl_run","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_s390_vm_set_migration","kvm_arch_commit_memory_region","kvm_s390_pv_destroy_cpu","kvm_s390_pv_create_cpu","handle_rrbe","handle_essa","kvm_s390_keyop","dat_reset_reference_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d4c21645-b951-4982-b8f3-ed4eafef838f","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-03 17:10:52 +0000 UTC FinishedAt: 2026-08-03 17:27:41 +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:*affebef8-4651-4a2c-afa4-6f46ad58bd45,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-workflowqd5wd/series-workflowqd5wd-convert-artifact-327164865/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": "4a88269a-cab6-4e01-9fb3-999ce587095a", "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-workflowqd5wd/series-workflowqd5wd-build-action-3448588783/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqd5wd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_vcpu_create","kvm_arch_vcpu_ioctl_run","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_s390_vm_set_migration","kvm_arch_commit_memory_region","kvm_s390_pv_destroy_cpu","kvm_s390_pv_create_cpu","handle_rrbe","handle_essa","kvm_s390_keyop","dat_reset_reference_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d4c21645-b951-4982-b8f3-ed4eafef838f","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-03 17:27:51 +0000 UTC FinishedAt: 2026-08-03 17:27:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqd5wd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_vcpu_create","kvm_arch_vcpu_ioctl_run","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_s390_vm_set_migration","kvm_arch_commit_memory_region","kvm_s390_pv_destroy_cpu","kvm_s390_pv_create_cpu","handle_rrbe","handle_essa","kvm_s390_keyop","dat_reset_reference_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d4c21645-b951-4982-b8f3-ed4eafef838f","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-03 17:27:51 +0000 UTC FinishedAt: 2026-08-03 17:27:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqd5wd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_vcpu_create","kvm_arch_vcpu_ioctl_run","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_s390_vm_set_migration","kvm_arch_commit_memory_region","kvm_s390_pv_destroy_cpu","kvm_s390_pv_create_cpu","handle_rrbe","handle_essa","kvm_s390_keyop","dat_reset_reference_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d4c21645-b951-4982-b8f3-ed4eafef838f","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-03 17:27:51 +0000 UTC FinishedAt: 2026-08-03 17:28:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqd5wd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_vcpu_create","kvm_arch_vcpu_ioctl_run","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_s390_vm_set_migration","kvm_arch_commit_memory_region","kvm_s390_pv_destroy_cpu","kvm_s390_pv_create_cpu","handle_rrbe","handle_essa","kvm_s390_keyop","dat_reset_reference_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d4c21645-b951-4982-b8f3-ed4eafef838f","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-03 17:27:51 +0000 UTC FinishedAt: 2026-08-03 17:27:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d4c21645-b951-4982-b8f3-ed4eafef838f","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-workflowqd5wd/series-workflowqd5wd-convert-artifact-832806548/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqd5wd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_vcpu_create","kvm_arch_vcpu_ioctl_run","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_s390_vm_set_migration","kvm_arch_commit_memory_region","kvm_s390_pv_destroy_cpu","kvm_s390_pv_create_cpu","handle_rrbe","handle_essa","kvm_s390_keyop","dat_reset_reference_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d4c21645-b951-4982-b8f3-ed4eafef838f","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-03 17:28:01 +0000 UTC FinishedAt: 2026-08-03 17:30:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqd5wd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_vcpu_create","kvm_arch_vcpu_ioctl_run","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_s390_vm_set_migration","kvm_arch_commit_memory_region","kvm_s390_pv_destroy_cpu","kvm_s390_pv_create_cpu","handle_rrbe","handle_essa","kvm_s390_keyop","dat_reset_reference_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d4c21645-b951-4982-b8f3-ed4eafef838f","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-03 17:28:01 +0000 UTC FinishedAt: 2026-08-03 17:29:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4a88269a-cab6-4e01-9fb3-999ce587095a,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-workflowqd5wd/series-workflowqd5wd-build-action-3448588783/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-workflowqd5wd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_vcpu_create","kvm_arch_vcpu_ioctl_run","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_s390_vm_set_migration","kvm_arch_commit_memory_region","kvm_s390_pv_destroy_cpu","kvm_s390_pv_create_cpu","handle_rrbe","handle_essa","kvm_s390_keyop","dat_reset_reference_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d4c21645-b951-4982-b8f3-ed4eafef838f","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-03 17:30:06 +0000 UTC FinishedAt: 2026-08-03 17:30:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqd5wd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_vcpu_create","kvm_arch_vcpu_ioctl_run","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_s390_vm_set_migration","kvm_arch_commit_memory_region","kvm_s390_pv_destroy_cpu","kvm_s390_pv_create_cpu","handle_rrbe","handle_essa","kvm_s390_keyop","dat_reset_reference_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d4c21645-b951-4982-b8f3-ed4eafef838f","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-03 17:30:06 +0000 UTC FinishedAt: 2026-08-03 17:30:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqd5wd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_vcpu_create","kvm_arch_vcpu_ioctl_run","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_s390_vm_set_migration","kvm_arch_commit_memory_region","kvm_s390_pv_destroy_cpu","kvm_s390_pv_create_cpu","handle_rrbe","handle_essa","kvm_s390_keyop","dat_reset_reference_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d4c21645-b951-4982-b8f3-ed4eafef838f","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-03 17:30:06 +0000 UTC FinishedAt: 2026-08-03 17:49:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqd5wd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_vcpu_create","kvm_arch_vcpu_ioctl_run","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_s390_vm_set_migration","kvm_arch_commit_memory_region","kvm_s390_pv_destroy_cpu","kvm_s390_pv_create_cpu","handle_rrbe","handle_essa","kvm_s390_keyop","dat_reset_reference_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d4c21645-b951-4982-b8f3-ed4eafef838f","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-03 17:30:06 +0000 UTC FinishedAt: 2026-08-03 17:49:31 +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:*affebef8-4651-4a2c-afa4-6f46ad58bd45,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-workflowqd5wd/series-workflowqd5wd-convert-artifact-832806548/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": "acd5953c-26c1-4c3c-a522-a8a7e2b64d1d", "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-workflowqd5wd/series-workflowqd5wd-build-action-2800486240/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqd5wd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_vcpu_create","kvm_arch_vcpu_ioctl_run","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_s390_vm_set_migration","kvm_arch_commit_memory_region","kvm_s390_pv_destroy_cpu","kvm_s390_pv_create_cpu","handle_rrbe","handle_essa","kvm_s390_keyop","dat_reset_reference_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d4c21645-b951-4982-b8f3-ed4eafef838f","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-03 17:30:06 +0000 UTC FinishedAt: 2026-08-03 17:49:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*affebef8-4651-4a2c-afa4-6f46ad58bd45,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-workflowqd5wd/series-workflowqd5wd-convert-artifact-832806548/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": "acd5953c-26c1-4c3c-a522-a8a7e2b64d1d", "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-workflowqd5wd/series-workflowqd5wd-build-action-2800486240/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqd5wd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_vcpu_create","kvm_arch_vcpu_ioctl_run","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_s390_vm_set_migration","kvm_arch_commit_memory_region","kvm_s390_pv_destroy_cpu","kvm_s390_pv_create_cpu","handle_rrbe","handle_essa","kvm_s390_keyop","dat_reset_reference_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d4c21645-b951-4982-b8f3-ed4eafef838f","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-03 17:49:31 +0000 UTC FinishedAt: 2026-08-03 17:49:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqd5wd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_vcpu_create","kvm_arch_vcpu_ioctl_run","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_s390_vm_set_migration","kvm_arch_commit_memory_region","kvm_s390_pv_destroy_cpu","kvm_s390_pv_create_cpu","handle_rrbe","handle_essa","kvm_s390_keyop","dat_reset_reference_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d4c21645-b951-4982-b8f3-ed4eafef838f","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-03 17:49:31 +0000 UTC FinishedAt: 2026-08-03 17:49:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqd5wd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_vcpu_create","kvm_arch_vcpu_ioctl_run","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_s390_vm_set_migration","kvm_arch_commit_memory_region","kvm_s390_pv_destroy_cpu","kvm_s390_pv_create_cpu","handle_rrbe","handle_essa","kvm_s390_keyop","dat_reset_reference_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d4c21645-b951-4982-b8f3-ed4eafef838f","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-03 17:49:31 +0000 UTC FinishedAt: 2026-08-03 17:51:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqd5wd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_vcpu_create","kvm_arch_vcpu_ioctl_run","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_s390_vm_set_migration","kvm_arch_commit_memory_region","kvm_s390_pv_destroy_cpu","kvm_s390_pv_create_cpu","handle_rrbe","handle_essa","kvm_s390_keyop","dat_reset_reference_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d4c21645-b951-4982-b8f3-ed4eafef838f","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-03 17:49:31 +0000 UTC FinishedAt: 2026-08-03 17:51:32 +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:*acd5953c-26c1-4c3c-a522-a8a7e2b64d1d,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-workflowqd5wd/series-workflowqd5wd-build-action-2800486240/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-workflowqd5wd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_vcpu_create","kvm_arch_vcpu_ioctl_run","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_s390_vm_set_migration","kvm_arch_commit_memory_region","kvm_s390_pv_destroy_cpu","kvm_s390_pv_create_cpu","handle_rrbe","handle_essa","kvm_s390_keyop","dat_reset_reference_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d4c21645-b951-4982-b8f3-ed4eafef838f","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-03 17:51:42 +0000 UTC FinishedAt: 2026-08-03 17:55:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqd5wd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_vcpu_create","kvm_arch_vcpu_ioctl_run","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_s390_vm_set_migration","kvm_arch_commit_memory_region","kvm_s390_pv_destroy_cpu","kvm_s390_pv_create_cpu","handle_rrbe","handle_essa","kvm_s390_keyop","dat_reset_reference_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d4c21645-b951-4982-b8f3-ed4eafef838f","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-03 17:51:42 +0000 UTC FinishedAt: 2026-08-03 17:55:06 +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":["kvm_arch_vcpu_create","kvm_arch_vcpu_ioctl_run","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_s390_vm_set_migration","kvm_arch_commit_memory_region","kvm_s390_pv_destroy_cpu","kvm_s390_pv_create_cpu","handle_rrbe","handle_essa","kvm_s390_keyop","dat_reset_reference_bit"],"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:*4a88269a-cab6-4e01-9fb3-999ce587095a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*acd5953c-26c1-4c3c-a522-a8a7e2b64d1d,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-workflowqd5wd/series-workflowqd5wd-build-action-3448588783/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-workflowqd5wd/series-workflowqd5wd-build-action-2800486240/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowqd5wd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_vcpu_create","kvm_arch_vcpu_ioctl_run","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_s390_vm_set_migration","kvm_arch_commit_memory_region","kvm_s390_pv_destroy_cpu","kvm_s390_pv_create_cpu","handle_rrbe","handle_essa","kvm_s390_keyop","dat_reset_reference_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d4c21645-b951-4982-b8f3-ed4eafef838f","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-03 17:51:42 +0000 UTC FinishedAt: 2026-08-03 17:52:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqd5wd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_vcpu_create","kvm_arch_vcpu_ioctl_run","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_s390_vm_set_migration","kvm_arch_commit_memory_region","kvm_s390_pv_destroy_cpu","kvm_s390_pv_create_cpu","handle_rrbe","handle_essa","kvm_s390_keyop","dat_reset_reference_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d4c21645-b951-4982-b8f3-ed4eafef838f","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-03 17:51:42 +0000 UTC FinishedAt: 2026-08-03 17:52:17 +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":["kvm_arch_vcpu_create","kvm_arch_vcpu_ioctl_run","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_s390_vm_set_migration","kvm_arch_commit_memory_region","kvm_s390_pv_destroy_cpu","kvm_s390_pv_create_cpu","handle_rrbe","handle_essa","kvm_s390_keyop","dat_reset_reference_bit"],"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-workflowqd5wd/series-workflowqd5wd-convert-artifact-2474607037/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqd5wd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_vcpu_create","kvm_arch_vcpu_ioctl_run","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_s390_vm_set_migration","kvm_arch_commit_memory_region","kvm_s390_pv_destroy_cpu","kvm_s390_pv_create_cpu","handle_rrbe","handle_essa","kvm_s390_keyop","dat_reset_reference_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d4c21645-b951-4982-b8f3-ed4eafef838f","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-03 17:51:42 +0000 UTC FinishedAt: 2026-08-03 17:51:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqd5wd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_vcpu_create","kvm_arch_vcpu_ioctl_run","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_s390_vm_set_migration","kvm_arch_commit_memory_region","kvm_s390_pv_destroy_cpu","kvm_s390_pv_create_cpu","handle_rrbe","handle_essa","kvm_s390_keyop","dat_reset_reference_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d4c21645-b951-4982-b8f3-ed4eafef838f","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-03 17:51:42 +0000 UTC FinishedAt: 2026-08-03 17:51:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqd5wd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_vcpu_create","kvm_arch_vcpu_ioctl_run","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_s390_vm_set_migration","kvm_arch_commit_memory_region","kvm_s390_pv_destroy_cpu","kvm_s390_pv_create_cpu","handle_rrbe","handle_essa","kvm_s390_keyop","dat_reset_reference_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d4c21645-b951-4982-b8f3-ed4eafef838f","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-03 17:51:42 +0000 UTC FinishedAt: 2026-08-03 17:51:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqd5wd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_vcpu_create","kvm_arch_vcpu_ioctl_run","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_s390_vm_set_migration","kvm_arch_commit_memory_region","kvm_s390_pv_destroy_cpu","kvm_s390_pv_create_cpu","handle_rrbe","handle_essa","kvm_s390_keyop","dat_reset_reference_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d4c21645-b951-4982-b8f3-ed4eafef838f","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-03 17:52:31 +0000 UTC FinishedAt: 2026-08-03 17:55:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqd5wd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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":["kvm_arch_vcpu_create","kvm_arch_vcpu_ioctl_run","kvm_arch_vcpu_ioctl","kvm_arch_vcpu_unlocked_ioctl","kvm_s390_vm_set_migration","kvm_arch_commit_memory_region","kvm_s390_pv_destroy_cpu","kvm_s390_pv_create_cpu","handle_rrbe","handle_essa","kvm_s390_keyop","dat_reset_reference_bit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d4c21645-b951-4982-b8f3-ed4eafef838f","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-03 17:52:31 +0000 UTC FinishedAt: 2026-08-03 17:54:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4a88269a-cab6-4e01-9fb3-999ce587095a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*acd5953c-26c1-4c3c-a522-a8a7e2b64d1d,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-workflowqd5wd/series-workflowqd5wd-build-action-3448588783/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-workflowqd5wd/series-workflowqd5wd-build-action-2800486240/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-workflowqd5wd/series-workflowqd5wd-convert-artifact-2474607037/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,}