Name: series-workflowkqp4n Phase: Succeeded StartedAt: 2026-06-25 22:47:44 +0000 UTC FinishedAt: 2026-06-26 02:46:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqp4n[0] Phase: Succeeded StartedAt: 2026-06-25 22:47:44 +0000 UTC FinishedAt: 2026-06-25 22:55:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqp4n[0].run-triage Phase: Succeeded StartedAt: 2026-06-25 22:47:44 +0000 UTC FinishedAt: 2026-06-25 22:55:34 +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": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM_HYPERV", "KVM_XEN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM_HYPERV", "KVM_XEN" ], "series_id": "6864cbe8-ce00-47d1-b4b1-abc7d1528d4e" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_vm_ioctl_create_vcpu", "kvm_hv_vcpu_init", "kvm_xen_hcall_vcpu_op", "kvm_hv_flush_tlb" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": { "findings": [ "60fac5d8-1296-4ec7-a8e3-40f561d007e9" ] } } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTV9IWVBFUlYmIzM0OywKICAgICYjMzQ7S1ZNX1hFTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV92bV9pb2N0bF9jcmVhdGVfdmNwdSYjMzQ7LAogICAgJiMzNDtrdm1faHZfdmNwdV9pbml0JiMzNDssCiAgICAmIzM0O2t2bV94ZW5faGNhbGxfdmNwdV9vcCYjMzQ7LAogICAgJiMzNDtrdm1faHZfZmx1c2hfdGxiJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHJhY2UgY29uZGl0aW9ucyBhbmQgdW5pbml0aWFsaXplZCBhY2Nlc3NlcyBpbiBLVk0mIzM5O3MgdkNQVSBjcmVhdGlvbiwgSHlwZXItViBlbXVsYXRpb24sIGFuZCBYZW4gZW11bGF0aW9uLiBJdCBtb2RpZmllcyBjb3JlIHZDUFUgaW5pdGlhbGl6YXRpb24gbG9naWMgYW5kIGh5cGVyY2FsbCBoYW5kbGVycywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIGd1ZXN0IHVzZXJzcGFjZSBhbmQgY2FuIGJlIHRyaWdnZXJlZCBjb25jdXJyZW50bHkuIEZ1enppbmcgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGVzZSBmaXhlcyBjb3JyZWN0bHkgaGFuZGxlIGNvbmN1cnJlbnQgdkNQVSBjcmVhdGlvbiBhbmQgaHlwZXJjYWxscyB3aXRob3V0IGludHJvZHVjaW5nIG5ldyByYWNlcyBvciByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDI4ODNmNTczMTMwYjUzYzJiNDg3ZWIxZjQ0NmI1YjRjYTc4M2RjOGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1biAyNSAyMjo1NDowMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMgYi9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmNcbmluZGV4IDFlZTBkMjNmODk0OTc0Li45ZDM4Y2I2NDQ2NjhkYSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9oeXBlcnYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL2h5cGVydi5jXG5AQCAtMjA2LDE0ICYjNDM7MjA2LDIwIEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtX3ZjcHUgKmdldF92Y3B1X2J5X3ZwaWR4KHN0cnVjdCBrdm0gKmt2bSwgdTMyIHZwaWR4KVxuIFxuIHN0YXRpYyBzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3luaWMgKnN5bmljX2dldChzdHJ1Y3Qga3ZtICprdm0sIHUzMiB2cGlkeClcbiB7XG4tXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3luaWMgKnN5bmljO1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdV9odiAqaHZfdmNwdTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4gXG4gXHR2Y3B1ID0gZ2V0X3ZjcHVfYnlfdnBpZHgoa3ZtLCB2cGlkeCk7XG4tXHRpZiAoIXZjcHUgfHwgIXRvX2h2X3ZjcHUodmNwdSkpXG4mIzQzO1x0aWYgKCF2Y3B1KVxuIFx0XHRyZXR1cm4gTlVMTDtcbi1cdHN5bmljID0gdG9faHZfc3luaWModmNwdSk7XG4tXHRyZXR1cm4gKHN5bmljLVx1MDAzZWFjdGl2ZSkgPyBzeW5pYyA6IE5VTEw7XG4mIzQzO1xuJiM0MztcdGh2X3ZjcHUgPSB0b19odl92Y3B1X3NhZmUodmNwdSk7XG4mIzQzO1x0aWYgKCFodl92Y3B1KVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdHN5bmljID0gXHUwMDI2aHZfdmNwdS1cdTAwM2VzeW5pYztcbiYjNDM7XHRyZXR1cm4gUkVBRF9PTkNFKHN5bmljLVx1MDAzZWFjdGl2ZSkgPyBzeW5pYyA6IE5VTEw7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGt2bV9odl9ub3RpZnlfYWNrZWRfc2ludChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBzaW50KVxuQEAgLTU5Myw4ICYjNDM7NTk5LDcgQEAgc3RhdGljIHZvaWQgc3RpbWVyX21hcmtfcGVuZGluZyhzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltZXIsXG4ge1xuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gaHZfc3RpbWVyX3RvX3ZjcHUoc3RpbWVyKTtcbiBcbi1cdHNldF9iaXQoc3RpbWVyLVx1MDAzZWluZGV4LFxuLVx0XHR0b19odl92Y3B1KHZjcHUpLVx1MDAzZXN0aW1lcl9wZW5kaW5nX2JpdG1hcCk7XG4mIzQzO1x0c2V0X2JpdChzdGltZXItXHUwMDNlaW5kZXgsIHZjcHUtXHUwMDNlYXJjaC5oeXBlcnYtXHUwMDNlc3RpbWVyX3BlbmRpbmdfYml0bWFwKTtcbiBcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9IVl9TVElNRVIsIHZjcHUpO1xuIFx0aWYgKHZjcHVfa2ljaylcbiBcdFx0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcbkBAIC02MDgsOCAmIzQzOzYxMyw3IEBAIHN0YXRpYyB2b2lkIHN0aW1lcl9jbGVhbnVwKHN0cnVjdCBrdm1fdmNwdV9odl9zdGltZXIgKnN0aW1lcilcbiBcdFx0XHRcdCAgICBzdGltZXItXHUwMDNlaW5kZXgpO1xuIFxuIFx0aHJ0aW1lcl9jYW5jZWwoXHUwMDI2c3RpbWVyLVx1MDAzZXRpbWVyKTtcbi1cdGNsZWFyX2JpdChzdGltZXItXHUwMDNlaW5kZXgsXG4tXHRcdCAgdG9faHZfdmNwdSh2Y3B1KS1cdTAwM2VzdGltZXJfcGVuZGluZ19iaXRtYXApO1xuJiM0MztcdGNsZWFyX2JpdChzdGltZXItXHUwMDNlaW5kZXgsIHZjcHUtXHUwMDNlYXJjaC5oeXBlcnYtXHUwMDNlc3RpbWVyX3BlbmRpbmdfYml0bWFwKTtcbiBcdHN0aW1lci1cdTAwM2Vtc2dfcGVuZGluZyA9IGZhbHNlO1xuIFx0c3RpbWVyLVx1MDAzZWV4cF90aW1lID0gMDtcbiB9XG5AQCAtOTcyLDcgJiM0Mzs5NzYsNiBAQCBpbnQga3ZtX2h2X3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAoIWh2X3ZjcHUpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0dmNwdS1cdTAwM2VhcmNoLmh5cGVydiA9IGh2X3ZjcHU7XG4gXHRodl92Y3B1LVx1MDAzZXZjcHUgPSB2Y3B1O1xuIFxuIFx0c3luaWNfaW5pdChcdTAwMjZodl92Y3B1LVx1MDAzZXN5bmljKTtcbkBAIC05ODgsNiAmIzQzOzk5MSwxNCBAQCBpbnQga3ZtX2h2X3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNmh2X3ZjcHUtXHUwMDNldGxiX2ZsdXNoX2ZpZm9baV0ud3JpdGVfbG9jayk7XG4gXHR9XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBFbnN1cmUgdGhlIHN0cnVjdHVyZSBpcyBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgaXQmIzM5O3MgdmlzaWJsZSB0b1xuJiM0MztcdCAqIG90aGVyIHRhc2tzLCBhcyBtdWNoIG9mIHRoZSBzdGF0ZSBjYW4gYmUgbGVnYWxseSBhY2Nlc3NlZCB3aXRob3V0XG4mIzQzO1x0ICogaG9sZGluZyB2Y3B1LVx1MDAzZW11dGV4LlxuJiM0MztcdCAqXG4mIzQzO1x0ICogUGFpcnMgd2l0aCB0aGUgc21wX2xvYWRfYWNxdWlyZSgpIGluIHRvX2h2X3ZjcHVfc2FmZSgpLlxuJiM0MztcdCAqL1xuJiM0MztcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5oeXBlcnYsIGh2X3ZjcHUpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTEwMDIsNyAmIzQzOzEwMTMsNyBAQCBpbnQga3ZtX2h2X2FjdGl2YXRlX3N5bmljKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBkb250X3plcm9fc3luaWNfcGFnZXMpXG4gXG4gXHRzeW5pYyA9IHRvX2h2X3N5bmljKHZjcHUpO1xuIFxuLVx0c3luaWMtXHUwMDNlYWN0aXZlID0gdHJ1ZTtcbiYjNDM7XHRXUklURV9PTkNFKHN5bmljLVx1MDAzZWFjdGl2ZSwgdHJ1ZSk7XG4gXHRzeW5pYy1cdTAwM2Vkb250X3plcm9fc3luaWNfcGFnZXMgPSBkb250X3plcm9fc3luaWNfcGFnZXM7XG4gXHRzeW5pYy1cdTAwM2Vjb250cm9sID0gSFZfU1lOSUNfQ09OVFJPTF9FTkFCTEU7XG4gXHRyZXR1cm4gMDtcbkBAIC0xOTM1LDE0ICYjNDM7MTk0NiwxNCBAQCBzdGF0aWMgaW50IGt2bV9odl9nZXRfdGxiX2ZsdXNoX2VudHJpZXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2h2X2hjYWxsICpoY1xuIFx0cmV0dXJuIGt2bV9odl9nZXRfaGNfZGF0YShrdm0sIGhjLCBoYy1cdTAwM2VyZXBfY250LCBoYy1cdTAwM2VyZXBfY250LCBlbnRyaWVzKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgaHZfdGxiX2ZsdXNoX2VucXVldWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLVx0XHRcdFx0IHN0cnVjdCBrdm1fdmNwdV9odl90bGJfZmx1c2hfZmlmbyAqdGxiX2ZsdXNoX2ZpZm8sXG4tXHRcdFx0XHQgdTY0ICplbnRyaWVzLCBpbnQgY291bnQpXG4mIzQzO3N0YXRpYyB2b2lkIGh2X3RsYl9mbHVzaF9lbnF1ZXVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0ICplbnRyaWVzLCBpbnQgY291bnQsXG4mIzQzO1x0XHRcdFx0IGJvb2wgaXNfZ3Vlc3RfbW9kZSlcbiB7XG4tXHRzdHJ1Y3Qga3ZtX3ZjcHVfaHYgKmh2X3ZjcHUgPSB0b19odl92Y3B1KHZjcHUpO1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdV9odl90bGJfZmx1c2hfZmlmbyAqdGxiX2ZsdXNoX2ZpZm87XG4gXHR1NjQgZmx1c2hfYWxsX2VudHJ5ID0gS1ZNX0hWX1RMQl9GTFVTSEFMTF9FTlRSWTtcbiBcbi1cdGlmICghaHZfdmNwdSlcbiYjNDM7XHR0bGJfZmx1c2hfZmlmbyA9IGt2bV9odl9nZXRfdGxiX2ZsdXNoX2ZpZm8odmNwdSwgaXNfZ3Vlc3RfbW9kZSk7XG4mIzQzO1x0aWYgKCF0bGJfZmx1c2hfZmlmbylcbiBcdFx0cmV0dXJuO1xuIFxuIFx0c3Bpbl9sb2NrKFx1MDAyNnRsYl9mbHVzaF9maWZvLVx1MDAzZXdyaXRlX2xvY2spO1xuQEAgLTE5NzAsMTUgJiM0MzsxOTgxLDE2IEBAIHN0YXRpYyB2b2lkIGh2X3RsYl9mbHVzaF9lbnF1ZXVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBpbnQga3ZtX2h2X3ZjcHVfZmx1c2hfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHVfaHZfdGxiX2ZsdXNoX2ZpZm8gKnRsYl9mbHVzaF9maWZvO1xuLVx0c3RydWN0IGt2bV92Y3B1X2h2ICpodl92Y3B1ID0gdG9faHZfdmNwdSh2Y3B1KTtcbiBcdHU2NCBlbnRyaWVzW0tWTV9IVl9UTEJfRkxVU0hfRklGT19TSVpFXTtcbiBcdGludCBpLCBqLCBjb3VudDtcbiBcdGd2YV90IGd2YTtcbiBcbi1cdGlmICghdGRwX2VuYWJsZWQgfHwgIWh2X3ZjcHUpXG4mIzQzO1x0aWYgKCF0ZHBfZW5hYmxlZClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHR0bGJfZmx1c2hfZmlmbyA9IGt2bV9odl9nZXRfdGxiX2ZsdXNoX2ZpZm8odmNwdSwgaXNfZ3Vlc3RfbW9kZSh2Y3B1KSk7XG4mIzQzO1x0aWYgKCF0bGJfZmx1c2hfZmlmbylcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0Y291bnQgPSBrZmlmb19vdXQoXHUwMDI2dGxiX2ZsdXNoX2ZpZm8tXHUwMDNlZW50cmllcywgZW50cmllcywgS1ZNX0hWX1RMQl9GTFVTSF9GSUZPX1NJWkUpO1xuIFxuQEAgLTIwMTcsNyAmIzQzOzIwMjksNiBAQCBzdGF0aWMgdTY0IGt2bV9odl9mbHVzaF90bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2h2X2hjYWxsICpoYylcbiBcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXHUwMDNla3ZtO1xuIFx0c3RydWN0IGh2X3RsYl9mbHVzaF9leCBmbHVzaF9leDtcbiBcdHN0cnVjdCBodl90bGJfZmx1c2ggZmx1c2g7XG4tXHRzdHJ1Y3Qga3ZtX3ZjcHVfaHZfdGxiX2ZsdXNoX2ZpZm8gKnRsYl9mbHVzaF9maWZvO1xuIFx0LypcbiBcdCAqIE5vcm1hbGx5LCB0aGVyZSBjYW4gYmUgbm8gbW9yZSB0aGFuICYjMzk7S1ZNX0hWX1RMQl9GTFVTSF9GSUZPX1NJWkUmIzM5O1xuIFx0ICogZW50cmllcyBvbiB0aGUgVExCIGZsdXNoIGZpZm8uIFRoZSBsYXN0IGVudHJ5LCBob3dldmVyLCBuZWVkcyB0byBiZVxuQEAgLTIxNDQsMTEgJiM0MzsyMTU1LDggQEAgc3RhdGljIHU2NCBrdm1faHZfZmx1c2hfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9odl9oY2FsbCAqaGMpXG4gXHQgKiBhbmFseXplIGl0IGhlcmUsIGZsdXNoIFRMQiByZWdhcmRsZXNzIG9mIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBzcGFjZS5cbiBcdCAqL1xuIFx0aWYgKGFsbF9jcHVzIFx1MDAyNlx1MDAyNiAhaXNfZ3Vlc3RfbW9kZSh2Y3B1KSkge1xuLVx0XHRrdm1fZm9yX2VhY2hfdmNwdShpLCB2LCBrdm0pIHtcbi1cdFx0XHR0bGJfZmx1c2hfZmlmbyA9IGt2bV9odl9nZXRfdGxiX2ZsdXNoX2ZpZm8odiwgZmFsc2UpO1xuLVx0XHRcdGh2X3RsYl9mbHVzaF9lbnF1ZXVlKHYsIHRsYl9mbHVzaF9maWZvLFxuLVx0XHRcdFx0XHQgICAgIHRsYl9mbHVzaF9lbnRyaWVzLCBoYy1cdTAwM2VyZXBfY250KTtcbi1cdFx0fVxuJiM0MztcdFx0a3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdiwga3ZtKVxuJiM0MztcdFx0XHRodl90bGJfZmx1c2hfZW5xdWV1ZSh2LCB0bGJfZmx1c2hfZW50cmllcywgaGMtXHUwMDNlcmVwX2NudCwgZmFsc2UpO1xuIFxuIFx0XHRrdm1fbWFrZV9hbGxfY3B1c19yZXF1ZXN0KGt2bSwgS1ZNX1JFUV9IVl9UTEJfRkxVU0gpO1xuIFx0fSBlbHNlIGlmICghaXNfZ3Vlc3RfbW9kZSh2Y3B1KSkge1xuQEAgLTIxNTgsOSAmIzQzOzIxNjYsNyBAQCBzdGF0aWMgdTY0IGt2bV9odl9mbHVzaF90bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2h2X2hjYWxsICpoYylcbiBcdFx0XHR2ID0ga3ZtX2dldF92Y3B1KGt2bSwgaSk7XG4gXHRcdFx0aWYgKCF2KVxuIFx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0dGxiX2ZsdXNoX2ZpZm8gPSBrdm1faHZfZ2V0X3RsYl9mbHVzaF9maWZvKHYsIGZhbHNlKTtcbi1cdFx0XHRodl90bGJfZmx1c2hfZW5xdWV1ZSh2LCB0bGJfZmx1c2hfZmlmbyxcbi1cdFx0XHRcdFx0ICAgICB0bGJfZmx1c2hfZW50cmllcywgaGMtXHUwMDNlcmVwX2NudCk7XG4mIzQzO1x0XHRcdGh2X3RsYl9mbHVzaF9lbnF1ZXVlKHYsIHRsYl9mbHVzaF9lbnRyaWVzLCBoYy1cdTAwM2VyZXBfY250LCBmYWxzZSk7XG4gXHRcdH1cbiBcbiBcdFx0a3ZtX21ha2VfdmNwdXNfcmVxdWVzdF9tYXNrKGt2bSwgS1ZNX1JFUV9IVl9UTEJfRkxVU0gsIHZjcHVfbWFzayk7XG5AQCAtMjE3MCw3ICYjNDM7MjE3Niw3IEBAIHN0YXRpYyB1NjQga3ZtX2h2X2ZsdXNoX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1faHZfaGNhbGwgKmhjKVxuIFx0XHRiaXRtYXBfemVybyh2Y3B1X21hc2ssIEtWTV9NQVhfVkNQVVMpO1xuIFxuIFx0XHRrdm1fZm9yX2VhY2hfdmNwdShpLCB2LCBrdm0pIHtcbi1cdFx0XHRodl92ID0gdG9faHZfdmNwdSh2KTtcbiYjNDM7XHRcdFx0aHZfdiA9IHRvX2h2X3ZjcHVfc2FmZSh2KTtcbiBcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIFRoZSBmb2xsb3dpbmcgY2hlY2sgcmFjZXMgd2l0aCBuZXN0ZWQgdkNQVXMgZW50ZXJpbmcvZXhpdGluZ1xuQEAgLTIxOTEsOSAmIzQzOzIxOTcsNyBAQCBzdGF0aWMgdTY0IGt2bV9odl9mbHVzaF90bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2h2X2hjYWxsICpoYylcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRcdF9fc2V0X2JpdChpLCB2Y3B1X21hc2spO1xuLVx0XHRcdHRsYl9mbHVzaF9maWZvID0ga3ZtX2h2X2dldF90bGJfZmx1c2hfZmlmbyh2LCB0cnVlKTtcbi1cdFx0XHRodl90bGJfZmx1c2hfZW5xdWV1ZSh2LCB0bGJfZmx1c2hfZmlmbyxcbi1cdFx0XHRcdFx0ICAgICB0bGJfZmx1c2hfZW50cmllcywgaGMtXHUwMDNlcmVwX2NudCk7XG4mIzQzO1x0XHRcdGh2X3RsYl9mbHVzaF9lbnF1ZXVlKHYsIHRsYl9mbHVzaF9lbnRyaWVzLCBoYy1cdTAwM2VyZXBfY250LCB0cnVlKTtcbiBcdFx0fVxuIFxuIFx0XHRrdm1fbWFrZV92Y3B1c19yZXF1ZXN0X21hc2soa3ZtLCBLVk1fUkVRX0hWX1RMQl9GTFVTSCwgdmNwdV9tYXNrKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmggYi9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmhcbmluZGV4IDFjOGY3YWFhYjA2M2QwLi4zN2EwYmNmMDNlMjgxNiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9oeXBlcnYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL2h5cGVydi5oXG5AQCAtNjIsOCAmIzQzOzYyLDIyIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV9odiAqdG9fa3ZtX2h2KHN0cnVjdCBrdm0gKmt2bSlcbiBcdHJldHVybiBcdTAwMjZrdm0tXHUwMDNlYXJjaC5oeXBlcnY7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1fdmNwdV9odiAqdG9faHZfdmNwdV9zYWZlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRW5zdXJlIHRoZSBIeXBlclYgc3RydWN0dXJlIGlzIGZ1bGx5IGluaXRpYWxpemVkIHdoZW4gYWNjZXNzaW5nIGl0XG4mIzQzO1x0ICogd2l0aG91dCBob2xkaW5nIHZjcHUtXHUwMDNlbXV0ZXggKG9yIHNvbWUgb3RoZXIgZ3VhcmFudGVlIHRoYXQgS1ZNIGNhbiYjMzk7dFxuJiM0MztcdCAqIGNvbmN1cnJlbnRseSBpbnN0YW50aWF0ZSB0aGUgc3RydWN0dXJlKS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFBhaXJzIHdpdGggdGhlIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4ga3ZtX2h2X3ZjcHVfaW5pdCgpLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldHVybiBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5oeXBlcnYpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV92Y3B1X2h2ICp0b19odl92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4mIzQzO1x0a3ZtX2xvY2tkZXBfYXNzZXJ0X3ZjcHVfaXNfbG9ja2VkX29yX3VucmVhY2hhYmxlKHZjcHUpO1xuJiM0MztcbiBcdHJldHVybiB2Y3B1LVx1MDAzZWFyY2guaHlwZXJ2O1xuIH1cbiBcbkBAIC04OCw3ICYjNDM7MTAyLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX2h2X3N5bmRiZyAqdG9faHZfc3luZGJnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBzdGF0aWMgaW5saW5lIHUzMiBrdm1faHZfZ2V0X3ZwaW5kZXgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHN0cnVjdCBrdm1fdmNwdV9odiAqaHZfdmNwdSA9IHRvX2h2X3ZjcHUodmNwdSk7XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1X2h2ICpodl92Y3B1ID0gdG9faHZfdmNwdV9zYWZlKHZjcHUpO1xuIFxuIFx0cmV0dXJuIGh2X3ZjcHUgPyBodl92Y3B1LVx1MDAzZXZwX2luZGV4IDogdmNwdS1cdTAwM2V2Y3B1X2lkeDtcbiB9XG5AQCAtMTQyLDcgJiM0MzsxNTYsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1fdmNwdSAqaHZfc3RpbWVyX3RvX3ZjcHUoc3RydWN0IGt2bV92Y3B1X2h2X3N0aW1lciAqc3RpbVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBrdm1faHZfaGFzX3N0aW1lcl9wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRzdHJ1Y3Qga3ZtX3ZjcHVfaHYgKmh2X3ZjcHUgPSB0b19odl92Y3B1KHZjcHUpO1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdV9odiAqaHZfdmNwdSA9IHRvX2h2X3ZjcHVfc2FmZSh2Y3B1KTtcbiBcbiBcdGlmICghaHZfdmNwdSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuQEAgLTE5OCwxMCAmIzQzOzIxMiwxMyBAQCBpbnQga3ZtX2dldF9odl9jcHVpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fY3B1aWQyICpjcHVpZCxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1fdmNwdV9odl90bGJfZmx1c2hfZmlmbyAqa3ZtX2h2X2dldF90bGJfZmx1c2hfZmlmbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRcdFx0XHRcdFx0XHRcdFx0ICAgYm9vbCBpc19ndWVzdF9tb2RlKVxuIHtcbi1cdHN0cnVjdCBrdm1fdmNwdV9odiAqaHZfdmNwdSA9IHRvX2h2X3ZjcHUodmNwdSk7XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1X2h2ICpodl92Y3B1ID0gdG9faHZfdmNwdV9zYWZlKHZjcHUpO1xuIFx0aW50IGkgPSBpc19ndWVzdF9tb2RlID8gSFZfTDJfVExCX0ZMVVNIX0ZJRk8gOlxuIFx0XHRcdFx0SFZfTDFfVExCX0ZMVVNIX0ZJRk87XG4gXG4mIzQzO1x0aWYgKCFodl92Y3B1KVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuIFx0cmV0dXJuIFx1MDAyNmh2X3ZjcHUtXHUwMDNldGxiX2ZsdXNoX2ZpZm9baV07XG4gfVxuIFxuQEAgLTIwOSwxMCAmIzQzOzIyNiwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX2h2X3ZjcHVfcHVyZ2VfZmx1c2hfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHVfaHZfdGxiX2ZsdXNoX2ZpZm8gKnRsYl9mbHVzaF9maWZvO1xuIFxuLVx0aWYgKCF0b19odl92Y3B1KHZjcHUpIHx8ICFrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX0hWX1RMQl9GTFVTSCwgdmNwdSkpXG4mIzQzO1x0aWYgKCFrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX0hWX1RMQl9GTFVTSCwgdmNwdSkpXG4gXHRcdHJldHVybjtcbiBcbiBcdHRsYl9mbHVzaF9maWZvID0ga3ZtX2h2X2dldF90bGJfZmx1c2hfZmlmbyh2Y3B1LCBpc19ndWVzdF9tb2RlKHZjcHUpKTtcbiYjNDM7XHRpZiAoIXRsYl9mbHVzaF9maWZvKVxuJiM0MztcdFx0cmV0dXJuO1xuIFxuIFx0a2ZpZm9fcmVzZXRfb3V0KFx1MDAyNnRsYl9mbHVzaF9maWZvLVx1MDAzZWVudHJpZXMpO1xuIH1cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaFxuaW5kZXggNmQ2Y2Q1OTA0ZGRmNjYuLmM2ZGU4NDhiZDljZWQ1IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaFxuQEAgLTU3LDE2ICYjNDM7NTcsMTQgQEAgYm9vbCBuZXN0ZWRfdm14X2NoZWNrX2lvX2JpdG1hcHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgcG9ydCxcbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCB2bWNzMTIgKmdldF92bWNzMTIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdGxvY2tkZXBfYXNzZXJ0X29uY2UobG9ja2RlcF9pc19oZWxkKFx1MDAyNnZjcHUtXHUwMDNlbXV0ZXgpIHx8XG4tXHRcdFx0ICAgICFyZWZjb3VudF9yZWFkKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZXVzZXJzX2NvdW50KSk7XG4mIzQzO1x0a3ZtX2xvY2tkZXBfYXNzZXJ0X3ZjcHVfaXNfbG9ja2VkX29yX3VucmVhY2hhYmxlKHZjcHUpO1xuIFxuIFx0cmV0dXJuIHRvX3ZteCh2Y3B1KS1cdTAwM2VuZXN0ZWQuY2FjaGVkX3ZtY3MxMjtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3Qgdm1jczEyICpnZXRfc2hhZG93X3ZtY3MxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0bG9ja2RlcF9hc3NlcnRfb25jZShsb2NrZGVwX2lzX2hlbGQoXHUwMDI2dmNwdS1cdTAwM2VtdXRleCkgfHxcbi1cdFx0XHQgICAgIXJlZmNvdW50X3JlYWQoXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNldXNlcnNfY291bnQpKTtcbiYjNDM7XHRrdm1fbG9ja2RlcF9hc3NlcnRfdmNwdV9pc19sb2NrZWRfb3JfdW5yZWFjaGFibGUodmNwdSk7XG4gXG4gXHRyZXR1cm4gdG9fdm14KHZjcHUpLVx1MDAzZW5lc3RlZC5jYWNoZWRfc2hhZG93X3ZtY3MxMjtcbiB9XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3hlbi5jIGIvYXJjaC94ODYva3ZtL3hlbi5jXG5pbmRleCA2OTRiMzFjMWZjYzlhZi4uZGIxMGYxMmQxMGNmOGIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0veGVuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ZW4uY1xuQEAgLTIyLDYgJiM0MzsyMiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjeGVuL2ludGVyZmFjZS92ZXJzaW9uLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N4ZW4vaW50ZXJmYWNlL2V2ZW50X2NoYW5uZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3hlbi9pbnRlcmZhY2Uvc2NoZWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N4ZW4veGVuLW9wcy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3hlbi9jcHVpZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3B2Y2xvY2suaFx1MDAzZVxuQEAgLTE2MTAsMTMgJiM0MzsxNjExLDE2IEBAIHN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfdmNwdV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsIGludCBjbWQsXG4gXHRpZiAoIWt2bV94ZW5fdGltZXJfZW5hYmxlZCh2Y3B1KSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuJiM0MztcdGlmICh2Y3B1LVx1MDAzZWFyY2gueGVuLnZjcHVfaWQgPT0gWEVOX1ZDUFVfSURfSU5WQUxJRClcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHZjcHUtXHUwMDNlYXJjaC54ZW4udmNwdV9pZCAhPSB2Y3B1X2lkKSB7XG4mIzQzO1x0XHQqciA9IC1FSU5WQUw7XG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0c3dpdGNoIChjbWQpIHtcbiBcdGNhc2UgVkNQVU9QX3NldF9zaW5nbGVzaG90X3RpbWVyOlxuLVx0XHRpZiAodmNwdS1cdTAwM2VhcmNoLnhlbi52Y3B1X2lkICE9IHZjcHVfaWQpIHtcbi1cdFx0XHQqciA9IC1FSU5WQUw7XG4tXHRcdFx0cmV0dXJuIHRydWU7XG4tXHRcdH1cbi1cbiBcdFx0LypcbiBcdFx0ICogVGhlIG9ubHkgZGlmZmVyZW5jZSBmb3IgMzItYml0IGNvbXBhdCBpcyB0aGUgNCBieXRlcyBvZlxuIFx0XHQgKiBwYWRkaW5nIGFmdGVyIHRoZSBpbnRlcmVzdGluZyBwYXJ0IG9mIHRoZSBzdHJ1Y3R1cmUuIFNvXG5AQCAtMTY0NCwxMCAmIzQzOzE2NDgsNiBAQCBzdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3ZjcHVfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLCBpbnQgY21kLFxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdGNhc2UgVkNQVU9QX3N0b3Bfc2luZ2xlc2hvdF90aW1lcjpcbi1cdFx0aWYgKHZjcHUtXHUwMDNlYXJjaC54ZW4udmNwdV9pZCAhPSB2Y3B1X2lkKSB7XG4tXHRcdFx0KnIgPSAtRUlOVkFMO1xuLVx0XHRcdHJldHVybiB0cnVlO1xuLVx0XHR9XG4gXHRcdGt2bV94ZW5fc3RvcF90aW1lcih2Y3B1KTtcbiBcdFx0KnIgPSAwO1xuIFx0XHRyZXR1cm4gdHJ1ZTtcbkBAIC0yMjk5LDcgJiM0MzsyMjk5LDcgQEAgc3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF9ldnRjaG5fc2VuZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBwYXJhbSwgdTY0ICpyKVxuIFxuIHZvaWQga3ZtX3hlbl9pbml0X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHZjcHUtXHUwMDNlYXJjaC54ZW4udmNwdV9pZCA9IHZjcHUtXHUwMDNldmNwdV9pZHg7XG4mIzQzO1x0dmNwdS1cdTAwM2VhcmNoLnhlbi52Y3B1X2lkID0gWEVOX1ZDUFVfSURfSU5WQUxJRDtcbiBcdHZjcHUtXHUwMDNlYXJjaC54ZW4ucG9sbF9ldnRjaG4gPSAwO1xuIFxuIFx0dGltZXJfc2V0dXAoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnhlbi5wb2xsX3RpbWVyLCBjYW5jZWxfZXZ0Y2huX3BvbGwsIDApO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuaW5kZXggYWI4Y2ZhZWM4MmQzMWUuLjBiZGZhMzY5OTM1MjdlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbkBAIC05ODksNiAmIzQzOzk4OSwxMyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1faW9fYnVzICprdm1fZ2V0X2J1cyhzdHJ1Y3Qga3ZtICprdm0sIGVudW0ga3ZtX2J1cyBpZHgpXG4gXHRcdFx0XHRcdCBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fbG9ja2RlcF9hc3NlcnRfdmNwdV9pc19sb2NrZWRfb3JfdW5yZWFjaGFibGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0Mzt7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfb25jZShsb2NrZGVwX2lzX2hlbGQoXHUwMDI2dmNwdS1cdTAwM2VtdXRleCkgfHxcbiYjNDM7XHRcdFx0ICAgIHZjcHUtXHUwMDNldmNwdV9pZHggXHUwMDNjIDAgfHxcbiYjNDM7XHRcdFx0ICAgICFyZWZjb3VudF9yZWFkKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZXVzZXJzX2NvdW50KSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX3ZjcHUgKmt2bV9nZXRfdmNwdShzdHJ1Y3Qga3ZtICprdm0sIGludCBpKVxuIHtcbiBcdGludCBudW1fdmNwdXMgPSBhdG9taWNfcmVhZChcdTAwMjZrdm0tXHUwMDNlb25saW5lX3ZjcHVzKTtcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uY1xuaW5kZXggZTQ0YzIwYzA0OTYxMGQuLjk4ZGE0Yzg4OWZmYzZjIDEwMDY0NFxuLS0tIGEvdmlydC9rdm0va3ZtX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0va3ZtX21haW4uY1xuQEAgLTQxODgsNiAmIzQzOzQxODgsOCBAQCBzdGF0aWMgaW50IGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgaWQpXG4gXHRcdGdvdG8gdmNwdV9kZWNyZW1lbnQ7XG4gXHR9XG4gXG4mIzQzO1x0dmNwdS1cdTAwM2V2Y3B1X2lkeCA9IC0xO1xuJiM0MztcbiBcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IGt2bV9ydW4pIFx1MDAzZSBQQUdFX1NJWkUpO1xuIFx0cGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfWkVSTyk7XG4gXHRpZiAoIXBhZ2UpIHtcbkBAIC00MjE2LDExICYjNDM7NDIxOCwxOCBAQCBzdGF0aWMgaW50IGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgaWQpXG4gXHRcdGdvdG8gdW5sb2NrX3ZjcHVfZGVzdHJveTtcbiBcdH1cbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFNldCB0aGUgdkNQVSYjMzk7cyBpbmRleCAqYmVmb3JlKiB0aGUgdkNQVSBpcyByZWFjaGFibGUgYnkgb3RoZXIgdGFza3MuXG4mIzQzO1x0ICogVW53aW5kIHRoZSBpbmRleCBiYWNrIHRvIC0xIG9uIGZhaWx1cmUgc28gdGhhdCBLVk0gY2FuIHVzZSB0aGUgaW5kZXhcbiYjNDM7XHQgKiB0byBkZXRlY3QgdGhhdCB0aGUgdkNQVSBpcyB1bnJlYWNoYWJsZSwgZS5nLiBmb3IgbG9ja2RlcCBhc3NlcnRzLlxuJiM0MztcdCAqL1xuIFx0dmNwdS1cdTAwM2V2Y3B1X2lkeCA9IGF0b21pY19yZWFkKFx1MDAyNmt2bS1cdTAwM2VvbmxpbmVfdmNwdXMpO1xuIFx0ciA9IHhhX2luc2VydChcdTAwMjZrdm0tXHUwMDNldmNwdV9hcnJheSwgdmNwdS1cdTAwM2V2Y3B1X2lkeCwgdmNwdSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdFdBUk5fT05fT05DRShyID09IC1FQlVTWSk7XG4tXHRpZiAocilcbiYjNDM7XHRpZiAocikge1xuJiM0MztcdFx0dmNwdS1cdTAwM2V2Y3B1X2lkeCA9IC0xO1xuIFx0XHRnb3RvIHVubG9ja192Y3B1X2Rlc3Ryb3k7XG4mIzQzO1x0fVxuIFxuIFx0LypcbiBcdCAqIE5vdyBpdCYjMzk7cyBhbGwgc2V0IHVwLCBsZXQgdXNlcnNwYWNlIHJlYWNoIGl0LiAgR3JhYiB0aGUgdkNQVSYjMzk7cyBtdXRleFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjU0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTV9IWVBFUlYmIzM0OywKICAgICYjMzQ7S1ZNX1hFTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV92bV9pb2N0bF9jcmVhdGVfdmNwdSYjMzQ7LAogICAgJiMzNDtrdm1faHZfdmNwdV9pbml0JiMzNDssCiAgICAmIzM0O2t2bV94ZW5faGNhbGxfdmNwdV9vcCYjMzQ7LAogICAgJiMzNDtrdm1faHZfZmx1c2hfdGxiJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHJhY2UgY29uZGl0aW9ucyBhbmQgdW5pbml0aWFsaXplZCBhY2Nlc3NlcyBpbiBLVk0mIzM5O3MgdkNQVSBjcmVhdGlvbiwgSHlwZXItViBlbXVsYXRpb24sIGFuZCBYZW4gZW11bGF0aW9uLiBJdCBtb2RpZmllcyBjb3JlIHZDUFUgaW5pdGlhbGl6YXRpb24gbG9naWMgYW5kIGh5cGVyY2FsbCBoYW5kbGVycywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIGd1ZXN0IHVzZXJzcGFjZSBhbmQgY2FuIGJlIHRyaWdnZXJlZCBjb25jdXJyZW50bHkuIEZ1enppbmcgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGVzZSBmaXhlcyBjb3JyZWN0bHkgaGFuZGxlIGNvbmN1cnJlbnQgdkNQVSBjcmVhdGlvbiBhbmQgaHlwZXJjYWxscyB3aXRob3V0IGludHJvZHVjaW5nIG5ldyByYWNlcyBvciByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjg4M2Y1NzMxMzBiNTNjMmI0ODdlYjFmNDQ2YjViNGNhNzgzZGM4ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVuIDI1IDIyOjU0OjAzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2h5cGVydi5jIGIvYXJjaC94ODYva3ZtL2h5cGVydi5jCmluZGV4IDFlZTBkMjNmODk0OTc0Li45ZDM4Y2I2NDQ2NjhkYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2h5cGVydi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9oeXBlcnYuYwpAQCAtMjA2LDE0ICYjNDM7MjA2LDIwIEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtX3ZjcHUgKmdldF92Y3B1X2J5X3ZwaWR4KHN0cnVjdCBrdm0gKmt2bSwgdTMyIHZwaWR4KQogCiBzdGF0aWMgc3RydWN0IGt2bV92Y3B1X2h2X3N5bmljICpzeW5pY19nZXQoc3RydWN0IGt2bSAqa3ZtLCB1MzIgdnBpZHgpCiB7Ci0Jc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwogCXN0cnVjdCBrdm1fdmNwdV9odl9zeW5pYyAqc3luaWM7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdV9odiAqaHZfdmNwdTsKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwogCiAJdmNwdSA9IGdldF92Y3B1X2J5X3ZwaWR4KGt2bSwgdnBpZHgpOwotCWlmICghdmNwdSB8fCAhdG9faHZfdmNwdSh2Y3B1KSkKJiM0MzsJaWYgKCF2Y3B1KQogCQlyZXR1cm4gTlVMTDsKLQlzeW5pYyA9IHRvX2h2X3N5bmljKHZjcHUpOwotCXJldHVybiAoc3luaWMtJmd0O2FjdGl2ZSkgPyBzeW5pYyA6IE5VTEw7CiYjNDM7CiYjNDM7CWh2X3ZjcHUgPSB0b19odl92Y3B1X3NhZmUodmNwdSk7CiYjNDM7CWlmICghaHZfdmNwdSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlzeW5pYyA9ICZhbXA7aHZfdmNwdS0mZ3Q7c3luaWM7CiYjNDM7CXJldHVybiBSRUFEX09OQ0Uoc3luaWMtJmd0O2FjdGl2ZSkgPyBzeW5pYyA6IE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkIGt2bV9odl9ub3RpZnlfYWNrZWRfc2ludChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBzaW50KQpAQCAtNTkzLDggJiM0Mzs1OTksNyBAQCBzdGF0aWMgdm9pZCBzdGltZXJfbWFya19wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdV9odl9zdGltZXIgKnN0aW1lciwKIHsKIAlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBodl9zdGltZXJfdG9fdmNwdShzdGltZXIpOwogCi0Jc2V0X2JpdChzdGltZXItJmd0O2luZGV4LAotCQl0b19odl92Y3B1KHZjcHUpLSZndDtzdGltZXJfcGVuZGluZ19iaXRtYXApOwomIzQzOwlzZXRfYml0KHN0aW1lci0mZ3Q7aW5kZXgsIHZjcHUtJmd0O2FyY2guaHlwZXJ2LSZndDtzdGltZXJfcGVuZGluZ19iaXRtYXApOwogCWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9IVl9TVElNRVIsIHZjcHUpOwogCWlmICh2Y3B1X2tpY2spCiAJCWt2bV92Y3B1X2tpY2sodmNwdSk7CkBAIC02MDgsOCAmIzQzOzYxMyw3IEBAIHN0YXRpYyB2b2lkIHN0aW1lcl9jbGVhbnVwKHN0cnVjdCBrdm1fdmNwdV9odl9zdGltZXIgKnN0aW1lcikKIAkJCQkgICAgc3RpbWVyLSZndDtpbmRleCk7CiAKIAlocnRpbWVyX2NhbmNlbCgmYW1wO3N0aW1lci0mZ3Q7dGltZXIpOwotCWNsZWFyX2JpdChzdGltZXItJmd0O2luZGV4LAotCQkgIHRvX2h2X3ZjcHUodmNwdSktJmd0O3N0aW1lcl9wZW5kaW5nX2JpdG1hcCk7CiYjNDM7CWNsZWFyX2JpdChzdGltZXItJmd0O2luZGV4LCB2Y3B1LSZndDthcmNoLmh5cGVydi0mZ3Q7c3RpbWVyX3BlbmRpbmdfYml0bWFwKTsKIAlzdGltZXItJmd0O21zZ19wZW5kaW5nID0gZmFsc2U7CiAJc3RpbWVyLSZndDtleHBfdGltZSA9IDA7CiB9CkBAIC05NzIsNyAmIzQzOzk3Niw2IEBAIGludCBrdm1faHZfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpZiAoIWh2X3ZjcHUpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JdmNwdS0mZ3Q7YXJjaC5oeXBlcnYgPSBodl92Y3B1OwogCWh2X3ZjcHUtJmd0O3ZjcHUgPSB2Y3B1OwogCiAJc3luaWNfaW5pdCgmYW1wO2h2X3ZjcHUtJmd0O3N5bmljKTsKQEAgLTk4OCw2ICYjNDM7OTkxLDE0IEBAIGludCBrdm1faHZfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJc3Bpbl9sb2NrX2luaXQoJmFtcDtodl92Y3B1LSZndDt0bGJfZmx1c2hfZmlmb1tpXS53cml0ZV9sb2NrKTsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogRW5zdXJlIHRoZSBzdHJ1Y3R1cmUgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGl0JiMzOTtzIHZpc2libGUgdG8KJiM0MzsJICogb3RoZXIgdGFza3MsIGFzIG11Y2ggb2YgdGhlIHN0YXRlIGNhbiBiZSBsZWdhbGx5IGFjY2Vzc2VkIHdpdGhvdXQKJiM0MzsJICogaG9sZGluZyB2Y3B1LSZndDttdXRleC4KJiM0MzsJICoKJiM0MzsJICogUGFpcnMgd2l0aCB0aGUgc21wX2xvYWRfYWNxdWlyZSgpIGluIHRvX2h2X3ZjcHVfc2FmZSgpLgomIzQzOwkgKi8KJiM0MzsJc21wX3N0b3JlX3JlbGVhc2UoJmFtcDt2Y3B1LSZndDthcmNoLmh5cGVydiwgaHZfdmNwdSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwMDIsNyAmIzQzOzEwMTMsNyBAQCBpbnQga3ZtX2h2X2FjdGl2YXRlX3N5bmljKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBkb250X3plcm9fc3luaWNfcGFnZXMpCiAKIAlzeW5pYyA9IHRvX2h2X3N5bmljKHZjcHUpOwogCi0Jc3luaWMtJmd0O2FjdGl2ZSA9IHRydWU7CiYjNDM7CVdSSVRFX09OQ0Uoc3luaWMtJmd0O2FjdGl2ZSwgdHJ1ZSk7CiAJc3luaWMtJmd0O2RvbnRfemVyb19zeW5pY19wYWdlcyA9IGRvbnRfemVyb19zeW5pY19wYWdlczsKIAlzeW5pYy0mZ3Q7Y29udHJvbCA9IEhWX1NZTklDX0NPTlRST0xfRU5BQkxFOwogCXJldHVybiAwOwpAQCAtMTkzNSwxNCAmIzQzOzE5NDYsMTQgQEAgc3RhdGljIGludCBrdm1faHZfZ2V0X3RsYl9mbHVzaF9lbnRyaWVzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9odl9oY2FsbCAqaGMKIAlyZXR1cm4ga3ZtX2h2X2dldF9oY19kYXRhKGt2bSwgaGMsIGhjLSZndDtyZXBfY250LCBoYy0mZ3Q7cmVwX2NudCwgZW50cmllcyk7CiB9CiAKLXN0YXRpYyB2b2lkIGh2X3RsYl9mbHVzaF9lbnF1ZXVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLQkJCQkgc3RydWN0IGt2bV92Y3B1X2h2X3RsYl9mbHVzaF9maWZvICp0bGJfZmx1c2hfZmlmbywKLQkJCQkgdTY0ICplbnRyaWVzLCBpbnQgY291bnQpCiYjNDM7c3RhdGljIHZvaWQgaHZfdGxiX2ZsdXNoX2VucXVldWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKmVudHJpZXMsIGludCBjb3VudCwKJiM0MzsJCQkJIGJvb2wgaXNfZ3Vlc3RfbW9kZSkKIHsKLQlzdHJ1Y3Qga3ZtX3ZjcHVfaHYgKmh2X3ZjcHUgPSB0b19odl92Y3B1KHZjcHUpOwomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHVfaHZfdGxiX2ZsdXNoX2ZpZm8gKnRsYl9mbHVzaF9maWZvOwogCXU2NCBmbHVzaF9hbGxfZW50cnkgPSBLVk1fSFZfVExCX0ZMVVNIQUxMX0VOVFJZOwogCi0JaWYgKCFodl92Y3B1KQomIzQzOwl0bGJfZmx1c2hfZmlmbyA9IGt2bV9odl9nZXRfdGxiX2ZsdXNoX2ZpZm8odmNwdSwgaXNfZ3Vlc3RfbW9kZSk7CiYjNDM7CWlmICghdGxiX2ZsdXNoX2ZpZm8pCiAJCXJldHVybjsKIAogCXNwaW5fbG9jaygmYW1wO3RsYl9mbHVzaF9maWZvLSZndDt3cml0ZV9sb2NrKTsKQEAgLTE5NzAsMTUgJiM0MzsxOTgxLDE2IEBAIHN0YXRpYyB2b2lkIGh2X3RsYl9mbHVzaF9lbnF1ZXVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIGludCBrdm1faHZfdmNwdV9mbHVzaF90bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXN0cnVjdCBrdm1fdmNwdV9odl90bGJfZmx1c2hfZmlmbyAqdGxiX2ZsdXNoX2ZpZm87Ci0Jc3RydWN0IGt2bV92Y3B1X2h2ICpodl92Y3B1ID0gdG9faHZfdmNwdSh2Y3B1KTsKIAl1NjQgZW50cmllc1tLVk1fSFZfVExCX0ZMVVNIX0ZJRk9fU0laRV07CiAJaW50IGksIGosIGNvdW50OwogCWd2YV90IGd2YTsKIAotCWlmICghdGRwX2VuYWJsZWQgfHwgIWh2X3ZjcHUpCiYjNDM7CWlmICghdGRwX2VuYWJsZWQpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJdGxiX2ZsdXNoX2ZpZm8gPSBrdm1faHZfZ2V0X3RsYl9mbHVzaF9maWZvKHZjcHUsIGlzX2d1ZXN0X21vZGUodmNwdSkpOwomIzQzOwlpZiAoIXRsYl9mbHVzaF9maWZvKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiAKIAljb3VudCA9IGtmaWZvX291dCgmYW1wO3RsYl9mbHVzaF9maWZvLSZndDtlbnRyaWVzLCBlbnRyaWVzLCBLVk1fSFZfVExCX0ZMVVNIX0ZJRk9fU0laRSk7CiAKQEAgLTIwMTcsNyAmIzQzOzIwMjksNiBAQCBzdGF0aWMgdTY0IGt2bV9odl9mbHVzaF90bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2h2X2hjYWxsICpoYykKIAlzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LSZndDtrdm07CiAJc3RydWN0IGh2X3RsYl9mbHVzaF9leCBmbHVzaF9leDsKIAlzdHJ1Y3QgaHZfdGxiX2ZsdXNoIGZsdXNoOwotCXN0cnVjdCBrdm1fdmNwdV9odl90bGJfZmx1c2hfZmlmbyAqdGxiX2ZsdXNoX2ZpZm87CiAJLyoKIAkgKiBOb3JtYWxseSwgdGhlcmUgY2FuIGJlIG5vIG1vcmUgdGhhbiAmIzM5O0tWTV9IVl9UTEJfRkxVU0hfRklGT19TSVpFJiMzOTsKIAkgKiBlbnRyaWVzIG9uIHRoZSBUTEIgZmx1c2ggZmlmby4gVGhlIGxhc3QgZW50cnksIGhvd2V2ZXIsIG5lZWRzIHRvIGJlCkBAIC0yMTQ0LDExICYjNDM7MjE1NSw4IEBAIHN0YXRpYyB1NjQga3ZtX2h2X2ZsdXNoX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1faHZfaGNhbGwgKmhjKQogCSAqIGFuYWx5emUgaXQgaGVyZSwgZmx1c2ggVExCIHJlZ2FyZGxlc3Mgb2YgdGhlIHNwZWNpZmllZCBhZGRyZXNzIHNwYWNlLgogCSAqLwogCWlmIChhbGxfY3B1cyAmYW1wOyZhbXA7ICFpc19ndWVzdF9tb2RlKHZjcHUpKSB7Ci0JCWt2bV9mb3JfZWFjaF92Y3B1KGksIHYsIGt2bSkgewotCQkJdGxiX2ZsdXNoX2ZpZm8gPSBrdm1faHZfZ2V0X3RsYl9mbHVzaF9maWZvKHYsIGZhbHNlKTsKLQkJCWh2X3RsYl9mbHVzaF9lbnF1ZXVlKHYsIHRsYl9mbHVzaF9maWZvLAotCQkJCQkgICAgIHRsYl9mbHVzaF9lbnRyaWVzLCBoYy0mZ3Q7cmVwX2NudCk7Ci0JCX0KJiM0MzsJCWt2bV9mb3JfZWFjaF92Y3B1KGksIHYsIGt2bSkKJiM0MzsJCQlodl90bGJfZmx1c2hfZW5xdWV1ZSh2LCB0bGJfZmx1c2hfZW50cmllcywgaGMtJmd0O3JlcF9jbnQsIGZhbHNlKTsKIAogCQlrdm1fbWFrZV9hbGxfY3B1c19yZXF1ZXN0KGt2bSwgS1ZNX1JFUV9IVl9UTEJfRkxVU0gpOwogCX0gZWxzZSBpZiAoIWlzX2d1ZXN0X21vZGUodmNwdSkpIHsKQEAgLTIxNTgsOSAmIzQzOzIxNjYsNyBAQCBzdGF0aWMgdTY0IGt2bV9odl9mbHVzaF90bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2h2X2hjYWxsICpoYykKIAkJCXYgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCBpKTsKIAkJCWlmICghdikKIAkJCQljb250aW51ZTsKLQkJCXRsYl9mbHVzaF9maWZvID0ga3ZtX2h2X2dldF90bGJfZmx1c2hfZmlmbyh2LCBmYWxzZSk7Ci0JCQlodl90bGJfZmx1c2hfZW5xdWV1ZSh2LCB0bGJfZmx1c2hfZmlmbywKLQkJCQkJICAgICB0bGJfZmx1c2hfZW50cmllcywgaGMtJmd0O3JlcF9jbnQpOwomIzQzOwkJCWh2X3RsYl9mbHVzaF9lbnF1ZXVlKHYsIHRsYl9mbHVzaF9lbnRyaWVzLCBoYy0mZ3Q7cmVwX2NudCwgZmFsc2UpOwogCQl9CiAKIAkJa3ZtX21ha2VfdmNwdXNfcmVxdWVzdF9tYXNrKGt2bSwgS1ZNX1JFUV9IVl9UTEJfRkxVU0gsIHZjcHVfbWFzayk7CkBAIC0yMTcwLDcgJiM0MzsyMTc2LDcgQEAgc3RhdGljIHU2NCBrdm1faHZfZmx1c2hfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9odl9oY2FsbCAqaGMpCiAJCWJpdG1hcF96ZXJvKHZjcHVfbWFzaywgS1ZNX01BWF9WQ1BVUyk7CiAKIAkJa3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdiwga3ZtKSB7Ci0JCQlodl92ID0gdG9faHZfdmNwdSh2KTsKJiM0MzsJCQlodl92ID0gdG9faHZfdmNwdV9zYWZlKHYpOwogCiAJCQkvKgogCQkJICogVGhlIGZvbGxvd2luZyBjaGVjayByYWNlcyB3aXRoIG5lc3RlZCB2Q1BVcyBlbnRlcmluZy9leGl0aW5nCkBAIC0yMTkxLDkgJiM0MzsyMTk3LDcgQEAgc3RhdGljIHU2NCBrdm1faHZfZmx1c2hfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9odl9oY2FsbCAqaGMpCiAJCQkJY29udGludWU7CiAKIAkJCV9fc2V0X2JpdChpLCB2Y3B1X21hc2spOwotCQkJdGxiX2ZsdXNoX2ZpZm8gPSBrdm1faHZfZ2V0X3RsYl9mbHVzaF9maWZvKHYsIHRydWUpOwotCQkJaHZfdGxiX2ZsdXNoX2VucXVldWUodiwgdGxiX2ZsdXNoX2ZpZm8sCi0JCQkJCSAgICAgdGxiX2ZsdXNoX2VudHJpZXMsIGhjLSZndDtyZXBfY250KTsKJiM0MzsJCQlodl90bGJfZmx1c2hfZW5xdWV1ZSh2LCB0bGJfZmx1c2hfZW50cmllcywgaGMtJmd0O3JlcF9jbnQsIHRydWUpOwogCQl9CiAKIAkJa3ZtX21ha2VfdmNwdXNfcmVxdWVzdF9tYXNrKGt2bSwgS1ZNX1JFUV9IVl9UTEJfRkxVU0gsIHZjcHVfbWFzayk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmggYi9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmgKaW5kZXggMWM4ZjdhYWFiMDYzZDAuLjM3YTBiY2YwM2UyODE2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL2h5cGVydi5oCkBAIC02Miw4ICYjNDM7NjIsMjIgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX2h2ICp0b19rdm1faHYoc3RydWN0IGt2bSAqa3ZtKQogCXJldHVybiAmYW1wO2t2bS0mZ3Q7YXJjaC5oeXBlcnY7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1fdmNwdV9odiAqdG9faHZfdmNwdV9zYWZlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIEVuc3VyZSB0aGUgSHlwZXJWIHN0cnVjdHVyZSBpcyBmdWxseSBpbml0aWFsaXplZCB3aGVuIGFjY2Vzc2luZyBpdAomIzQzOwkgKiB3aXRob3V0IGhvbGRpbmcgdmNwdS0mZ3Q7bXV0ZXggKG9yIHNvbWUgb3RoZXIgZ3VhcmFudGVlIHRoYXQgS1ZNIGNhbiYjMzk7dAomIzQzOwkgKiBjb25jdXJyZW50bHkgaW5zdGFudGlhdGUgdGhlIHN0cnVjdHVyZSkuCiYjNDM7CSAqCiYjNDM7CSAqIFBhaXJzIHdpdGggdGhlIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4ga3ZtX2h2X3ZjcHVfaW5pdCgpLgomIzQzOwkgKi8KJiM0MzsJcmV0dXJuIHNtcF9sb2FkX2FjcXVpcmUoJmFtcDt2Y3B1LSZndDthcmNoLmh5cGVydik7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX3ZjcHVfaHYgKnRvX2h2X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewomIzQzOwlrdm1fbG9ja2RlcF9hc3NlcnRfdmNwdV9pc19sb2NrZWRfb3JfdW5yZWFjaGFibGUodmNwdSk7CiYjNDM7CiAJcmV0dXJuIHZjcHUtJmd0O2FyY2guaHlwZXJ2OwogfQogCkBAIC04OCw3ICYjNDM7MTAyLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX2h2X3N5bmRiZyAqdG9faHZfc3luZGJnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogc3RhdGljIGlubGluZSB1MzIga3ZtX2h2X2dldF92cGluZGV4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlzdHJ1Y3Qga3ZtX3ZjcHVfaHYgKmh2X3ZjcHUgPSB0b19odl92Y3B1KHZjcHUpOwomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHVfaHYgKmh2X3ZjcHUgPSB0b19odl92Y3B1X3NhZmUodmNwdSk7CiAKIAlyZXR1cm4gaHZfdmNwdSA/IGh2X3ZjcHUtJmd0O3ZwX2luZGV4IDogdmNwdS0mZ3Q7dmNwdV9pZHg7CiB9CkBAIC0xNDIsNyAmIzQzOzE1Niw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV92Y3B1ICpodl9zdGltZXJfdG9fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBrdm1faHZfaGFzX3N0aW1lcl9wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlzdHJ1Y3Qga3ZtX3ZjcHVfaHYgKmh2X3ZjcHUgPSB0b19odl92Y3B1KHZjcHUpOwomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHVfaHYgKmh2X3ZjcHUgPSB0b19odl92Y3B1X3NhZmUodmNwdSk7CiAKIAlpZiAoIWh2X3ZjcHUpCiAJCXJldHVybiBmYWxzZTsKQEAgLTE5OCwxMCAmIzQzOzIxMiwxMyBAQCBpbnQga3ZtX2dldF9odl9jcHVpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fY3B1aWQyICpjcHVpZCwKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV92Y3B1X2h2X3RsYl9mbHVzaF9maWZvICprdm1faHZfZ2V0X3RsYl9mbHVzaF9maWZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCQkJCQkJCSAgIGJvb2wgaXNfZ3Vlc3RfbW9kZSkKIHsKLQlzdHJ1Y3Qga3ZtX3ZjcHVfaHYgKmh2X3ZjcHUgPSB0b19odl92Y3B1KHZjcHUpOwomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHVfaHYgKmh2X3ZjcHUgPSB0b19odl92Y3B1X3NhZmUodmNwdSk7CiAJaW50IGkgPSBpc19ndWVzdF9tb2RlID8gSFZfTDJfVExCX0ZMVVNIX0ZJRk8gOgogCQkJCUhWX0wxX1RMQl9GTFVTSF9GSUZPOwogCiYjNDM7CWlmICghaHZfdmNwdSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwogCXJldHVybiAmYW1wO2h2X3ZjcHUtJmd0O3RsYl9mbHVzaF9maWZvW2ldOwogfQogCkBAIC0yMDksMTAgJiM0MzsyMjYsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIGt2bV9odl92Y3B1X3B1cmdlX2ZsdXNoX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IGt2bV92Y3B1X2h2X3RsYl9mbHVzaF9maWZvICp0bGJfZmx1c2hfZmlmbzsKIAotCWlmICghdG9faHZfdmNwdSh2Y3B1KSB8fCAha3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9IVl9UTEJfRkxVU0gsIHZjcHUpKQomIzQzOwlpZiAoIWt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfSFZfVExCX0ZMVVNILCB2Y3B1KSkKIAkJcmV0dXJuOwogCiAJdGxiX2ZsdXNoX2ZpZm8gPSBrdm1faHZfZ2V0X3RsYl9mbHVzaF9maWZvKHZjcHUsIGlzX2d1ZXN0X21vZGUodmNwdSkpOwomIzQzOwlpZiAoIXRsYl9mbHVzaF9maWZvKQomIzQzOwkJcmV0dXJuOwogCiAJa2ZpZm9fcmVzZXRfb3V0KCZhbXA7dGxiX2ZsdXNoX2ZpZm8tJmd0O2VudHJpZXMpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaCBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmgKaW5kZXggNmQ2Y2Q1OTA0ZGRmNjYuLmM2ZGU4NDhiZDljZWQ1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmgKQEAgLTU3LDE2ICYjNDM7NTcsMTQgQEAgYm9vbCBuZXN0ZWRfdm14X2NoZWNrX2lvX2JpdG1hcHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgcG9ydCwKIAogc3RhdGljIGlubGluZSBzdHJ1Y3Qgdm1jczEyICpnZXRfdm1jczEyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlsb2NrZGVwX2Fzc2VydF9vbmNlKGxvY2tkZXBfaXNfaGVsZCgmYW1wO3ZjcHUtJmd0O211dGV4KSB8fAotCQkJICAgICFyZWZjb3VudF9yZWFkKCZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDt1c2Vyc19jb3VudCkpOwomIzQzOwlrdm1fbG9ja2RlcF9hc3NlcnRfdmNwdV9pc19sb2NrZWRfb3JfdW5yZWFjaGFibGUodmNwdSk7CiAKIAlyZXR1cm4gdG9fdm14KHZjcHUpLSZndDtuZXN0ZWQuY2FjaGVkX3ZtY3MxMjsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3Qgdm1jczEyICpnZXRfc2hhZG93X3ZtY3MxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JbG9ja2RlcF9hc3NlcnRfb25jZShsb2NrZGVwX2lzX2hlbGQoJmFtcDt2Y3B1LSZndDttdXRleCkgfHwKLQkJCSAgICAhcmVmY291bnRfcmVhZCgmYW1wO3ZjcHUtJmd0O2t2bS0mZ3Q7dXNlcnNfY291bnQpKTsKJiM0MzsJa3ZtX2xvY2tkZXBfYXNzZXJ0X3ZjcHVfaXNfbG9ja2VkX29yX3VucmVhY2hhYmxlKHZjcHUpOwogCiAJcmV0dXJuIHRvX3ZteCh2Y3B1KS0mZ3Q7bmVzdGVkLmNhY2hlZF9zaGFkb3dfdm1jczEyOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3hlbi5jIGIvYXJjaC94ODYva3ZtL3hlbi5jCmluZGV4IDY5NGIzMWMxZmNjOWFmLi5kYjEwZjEyZDEwY2Y4YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3hlbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ZW4uYwpAQCAtMjIsNiAmIzQzOzIyLDcgQEAKICNpbmNsdWRlICZsdDt4ZW4vaW50ZXJmYWNlL3ZlcnNpb24uaCZndDsKICNpbmNsdWRlICZsdDt4ZW4vaW50ZXJmYWNlL2V2ZW50X2NoYW5uZWwuaCZndDsKICNpbmNsdWRlICZsdDt4ZW4vaW50ZXJmYWNlL3NjaGVkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3hlbi94ZW4tb3BzLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDthc20veGVuL2NwdWlkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL3B2Y2xvY2suaCZndDsKQEAgLTE2MTAsMTMgJiM0MzsxNjExLDE2IEBAIHN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfdmNwdV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsIGludCBjbWQsCiAJaWYgKCFrdm1feGVuX3RpbWVyX2VuYWJsZWQodmNwdSkpCiAJCXJldHVybiBmYWxzZTsKIAomIzQzOwlpZiAodmNwdS0mZ3Q7YXJjaC54ZW4udmNwdV9pZCA9PSBYRU5fVkNQVV9JRF9JTlZBTElEKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAodmNwdS0mZ3Q7YXJjaC54ZW4udmNwdV9pZCAhPSB2Y3B1X2lkKSB7CiYjNDM7CQkqciA9IC1FSU5WQUw7CiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJfQomIzQzOwogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBWQ1BVT1Bfc2V0X3NpbmdsZXNob3RfdGltZXI6Ci0JCWlmICh2Y3B1LSZndDthcmNoLnhlbi52Y3B1X2lkICE9IHZjcHVfaWQpIHsKLQkJCSpyID0gLUVJTlZBTDsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0KIAkJLyoKIAkJICogVGhlIG9ubHkgZGlmZmVyZW5jZSBmb3IgMzItYml0IGNvbXBhdCBpcyB0aGUgNCBieXRlcyBvZgogCQkgKiBwYWRkaW5nIGFmdGVyIHRoZSBpbnRlcmVzdGluZyBwYXJ0IG9mIHRoZSBzdHJ1Y3R1cmUuIFNvCkBAIC0xNjQ0LDEwICYjNDM7MTY0OCw2IEBAIHN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfdmNwdV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsIGludCBjbWQsCiAJCXJldHVybiB0cnVlOwogCiAJY2FzZSBWQ1BVT1Bfc3RvcF9zaW5nbGVzaG90X3RpbWVyOgotCQlpZiAodmNwdS0mZ3Q7YXJjaC54ZW4udmNwdV9pZCAhPSB2Y3B1X2lkKSB7Ci0JCQkqciA9IC1FSU5WQUw7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQogCQlrdm1feGVuX3N0b3BfdGltZXIodmNwdSk7CiAJCSpyID0gMDsKIAkJcmV0dXJuIHRydWU7CkBAIC0yMjk5LDcgJiM0MzsyMjk5LDcgQEAgc3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF9ldnRjaG5fc2VuZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBwYXJhbSwgdTY0ICpyKQogCiB2b2lkIGt2bV94ZW5faW5pdF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQl2Y3B1LSZndDthcmNoLnhlbi52Y3B1X2lkID0gdmNwdS0mZ3Q7dmNwdV9pZHg7CiYjNDM7CXZjcHUtJmd0O2FyY2gueGVuLnZjcHVfaWQgPSBYRU5fVkNQVV9JRF9JTlZBTElEOwogCXZjcHUtJmd0O2FyY2gueGVuLnBvbGxfZXZ0Y2huID0gMDsKIAogCXRpbWVyX3NldHVwKCZhbXA7dmNwdS0mZ3Q7YXJjaC54ZW4ucG9sbF90aW1lciwgY2FuY2VsX2V2dGNobl9wb2xsLCAwKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAppbmRleCBhYjhjZmFlYzgyZDMxZS4uMGJkZmEzNjk5MzUyN2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKQEAgLTk4OSw2ICYjNDM7OTg5LDEzIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV9pb19idXMgKmt2bV9nZXRfYnVzKHN0cnVjdCBrdm0gKmt2bSwgZW51bSBrdm1fYnVzIGlkeCkKIAkJCQkJIGxvY2tkZXBfaXNfaGVsZCgmYW1wO2t2bS0mZ3Q7c2xvdHNfbG9jaykpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGt2bV9sb2NrZGVwX2Fzc2VydF92Y3B1X2lzX2xvY2tlZF9vcl91bnJlYWNoYWJsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlsb2NrZGVwX2Fzc2VydF9vbmNlKGxvY2tkZXBfaXNfaGVsZCgmYW1wO3ZjcHUtJmd0O211dGV4KSB8fAomIzQzOwkJCSAgICB2Y3B1LSZndDt2Y3B1X2lkeCAmbHQ7IDAgfHwKJiM0MzsJCQkgICAgIXJlZmNvdW50X3JlYWQoJmFtcDt2Y3B1LSZndDtrdm0tJmd0O3VzZXJzX2NvdW50KSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX3ZjcHUgKmt2bV9nZXRfdmNwdShzdHJ1Y3Qga3ZtICprdm0sIGludCBpKQogewogCWludCBudW1fdmNwdXMgPSBhdG9taWNfcmVhZCgmYW1wO2t2bS0mZ3Q7b25saW5lX3ZjcHVzKTsKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCmluZGV4IGU0NGMyMGMwNDk2MTBkLi45OGRhNGM4ODlmZmM2YyAxMDA2NDQKLS0tIGEvdmlydC9rdm0va3ZtX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCkBAIC00MTg4LDYgJiM0Mzs0MTg4LDggQEAgc3RhdGljIGludCBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGlkKQogCQlnb3RvIHZjcHVfZGVjcmVtZW50OwogCX0KIAomIzQzOwl2Y3B1LSZndDt2Y3B1X2lkeCA9IC0xOwomIzQzOwogCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IGt2bV9ydW4pICZndDsgUEFHRV9TSVpFKTsKIAlwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9aRVJPKTsKIAlpZiAoIXBhZ2UpIHsKQEAgLTQyMTYsMTEgJiM0Mzs0MjE4LDE4IEBAIHN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBpZCkKIAkJZ290byB1bmxvY2tfdmNwdV9kZXN0cm95OwogCX0KIAomIzQzOwkvKgomIzQzOwkgKiBTZXQgdGhlIHZDUFUmIzM5O3MgaW5kZXggKmJlZm9yZSogdGhlIHZDUFUgaXMgcmVhY2hhYmxlIGJ5IG90aGVyIHRhc2tzLgomIzQzOwkgKiBVbndpbmQgdGhlIGluZGV4IGJhY2sgdG8gLTEgb24gZmFpbHVyZSBzbyB0aGF0IEtWTSBjYW4gdXNlIHRoZSBpbmRleAomIzQzOwkgKiB0byBkZXRlY3QgdGhhdCB0aGUgdkNQVSBpcyB1bnJlYWNoYWJsZSwgZS5nLiBmb3IgbG9ja2RlcCBhc3NlcnRzLgomIzQzOwkgKi8KIAl2Y3B1LSZndDt2Y3B1X2lkeCA9IGF0b21pY19yZWFkKCZhbXA7a3ZtLSZndDtvbmxpbmVfdmNwdXMpOwogCXIgPSB4YV9pbnNlcnQoJmFtcDtrdm0tJmd0O3ZjcHVfYXJyYXksIHZjcHUtJmd0O3ZjcHVfaWR4LCB2Y3B1LCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCVdBUk5fT05fT05DRShyID09IC1FQlVTWSk7Ci0JaWYgKHIpCiYjNDM7CWlmIChyKSB7CiYjNDM7CQl2Y3B1LSZndDt2Y3B1X2lkeCA9IC0xOwogCQlnb3RvIHVubG9ja192Y3B1X2Rlc3Ryb3k7CiYjNDM7CX0KIAogCS8qCiAJICogTm93IGl0JiMzOTtzIGFsbCBzZXQgdXAsIGxldCB1c2Vyc3BhY2UgcmVhY2ggaXQuICBHcmFiIHRoZSB2Q1BVJiMzOTtzIG11dGV4CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2NzIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1MjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoIGZvciBLVk0gVmlydHVhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtUaGlzIGlzIHRvdWNoaW5nIHNvbWUgY3JpdGljYWwgdmlydHVhbGl6YXRpb24gaW5mcmFzdHJ1Y3R1cmUuJiMzNDsgSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhIGtlcm5lbCBwYXRjaCB0YXJnZXRpbmcgS1ZNLCBzcGVjaWZpY2FsbHkgdGhlIGVtdWxhdGlvbiBsYXllcnMgZm9yIEh5cGVyLVYgYW5kIFhlbiBvbiB4ODYgYXJjaGl0ZWN0dXJlcy4gSSYjMzk7bSBzZWVpbmcgY2hhbmdlcyBhY3Jvc3MgYSBmZXcgY29yZSBmaWxlcywgbmFtZWx5IGBoeXBlcnYuY2AgYW5kIGBoeXBlcnYuaGAgd2l0aGluIHRoZSBgYXJjaC94ODYva3ZtYCBkaXJlY3RvcnkuIFRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgYmVpbmcgbW9kaWZpZWQg4oCTIGBzeW5pY19nZXRgLCBgc3RpbWVyX21hcmtfcGVuZGluZ2AsIGBrdm1faHZfdmNwdV9pbml0YCBldGMuIC0gc3VnZ2VzdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGlzc3VlcyByZWxhdGVkIHRvIGludGVycnVwdCBoYW5kbGluZywgdGltZXIgbWFuYWdlbWVudCwgYW5kIHZDUFUgaW5pdGlhbGl6YXRpb24gd2l0aGluIHRoZSBIeXBlci1WIGVudmlyb25tZW50LgoKSSYjMzk7bSBhbHNvIHNlZWluZyBhbHRlcmF0aW9ucyBpbiBga3ZtX3hlbl9oY2FsbF92Y3B1X29wYCBhbmQgYGt2bV94ZW5faW5pdF92Y3B1YCB3aXRoaW4gYHhlbi5jYCwgd2hpY2ggY29uZmlybXMgdGhlIHNjb3BlIGV4dGVuZGluZyB0byBYZW4gZW11bGF0aW9uLiBUaGUgYG5lc3RlZC5oYCBmaWxlIGFuZCB0aGUgbW9kaWZpY2F0aW9ucyB0byBgZ2V0X3ZtY3MxMmAgYXJlIGFsc28gcHJlc2VudCwgd2hpY2ggbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gY2FwYWJpbGl0aWVzLiBBbmQsIGxvb2tpbmcgYXQgdGhlIGBrdm1faG9zdC5oYCBpbmNsdXNpb24gb2YgYGt2bV9sb2NrZGVwX2Fzc2VydF92Y3B1X2lzX2xvY2tlZF9vcl91bnJlYWNoYWJsZWAgc3VnZ2VzdHMgbG9jayBwcm90ZWN0aW9uIG1pZ2h0IGJlIGludm9sdmVkIHRvby4KCk15IGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcmFjZSBjb25kaXRpb24sIG9yIHBlcmhhcHMgc29tZSBwcm9ibGVtcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgdkNQVSBzdGF0ZSBpbiBIeXBlci1WIG9yIGluY29ycmVjdCBgdmNwdV9pZGAgaGFuZGxpbmcgaW4gWGVuLiBUaGF0IGp1bXAgdG8gIGB2Y3B1LSZndDt2Y3B1X2lkeCA9IC0xYCBpbiBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YCBhbmQgdGhlIHVzZSBvZiBgc21wX2xvYWRfYWNxdWlyZWAgaW4gYHRvX2h2X3ZjcHVfc2FmZWAgaGludHMgYXQgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWxhdGVkIHRvIGEgdkNQVSBpbmRleCBhc3NpZ25tZW50IGFuZCBtZW1vcnkgYWNjZXNzIG9yZGVyaW5nIGZvciBzeW5jaHJvbml6YXRpb24uIAoKVGhlIG5leHQgc3RlcCBpcyB0byBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uIHNldCB1cC4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgS1ZNIGlzIGVuYWJsZWQsIGFuZCB0aGF0IGVpdGhlciB0aGUgSHlwZXItViBhbmQgWGVuIGVtdWxhdGlvbiBzZXR0aW5ncyBhcmUgZW5hYmxlZC4gU28sIGBDT05GSUdfS1ZNYCwgYENPTkZJR19LVk1fSU5URUxgLCBgQ09ORklHX0tWTV9BTURgLCBhbmQgYENPTkZJR19LVk1fWEVOYCBtdXN0IGJlIHNldC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYGFyY2gveDg2L2t2bS9LY29uZmlnYCB0byBzZWUgdGhlIHNwZWNpZmljcyBmb3IgSHlwZXItViBhbmQgWGVuIGNvbmZpZ3VyYXRpb25zLiBUaGlzIGlzIGEgc29saWQsIGZ1bmN0aW9uYWwgY2hhbmdlIGFuZCBJJiMzOTtsbCBuZWVkIHRvIHJldmlldyB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX1hFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTE5Mz1jb25maWcgS1ZNX0hZUEVSVlxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4NzQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBIeXBlcnZpc29yIEludGVyYWN0aW9ucyoqCgpIbW0sIHRoaW5raW5nIGFib3V0IHRoaXMgcHJvYmxlbSwgbXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBjaGVjayBpZiBgS1ZNX1hFTmAgYW5kIGBLVk1fSFlQRVJWYCBhcmUgaW52b2x2ZWQgaW4gdGhpcy4gV2FpdCBhIG1pbnV0ZeKApiBJJiMzOTttIGdldHRpbmcgYWhlYWQgb2YgbXlzZWxmLCBJIHRob3VnaHQgYEtWTV9IWVBFUlZgIHdhc24mIzM5O3QgYWN0dWFsbHkgYSBwcm9wZXIgY29uZmlnIG9wdGlvbiBpbiB0aGlzIGNvbnRleHQuIE9rYXksIHF1aWNrIHNhbml0eSBjaGVja+KApiBZZXAsIGl0IGxvb2tzIGxpa2UgaXQgKmlzKiBhIGNvbmZpZy4gTm93IEkgbmVlZCB0byBzZWUgZXhhY3RseSB3aGF0IHRoYXQgY29uZmlnIGVudGFpbHMuIFRpbWUgdG8gZGVsdmUgaW50byB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0hZUEVSViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTE4Mj1jb25maWcgS1ZNX1NNTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5Mzpjb25maWcgS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTk3CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0cyBpbiBLVk06IEh5cGVyLVYgYW5kIFhlbioqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYEtWTV9YRU5gIGFuZCBgS1ZNX0hZUEVSVmAgaW4gdGhlIEtWTSBjb25maWdzIOKAkyB0aGF0JiMzOTtzIHRoZSBhcmVhIEkgd2FudCB0byBmb2N1cyBvbiBmb3IgZnV6emluZy4gVGltZSB0byBodW50IGRvd24gc29tZSBrZXkgZnVuY3Rpb25zLgoKRmlyc3QsIEkmIzM5O3ZlIGdvdCBgYXJjaC94ODYva3ZtL2h5cGVydi5jYC4gTGV0JiMzOTtzIHNlZTogSSYjMzk7dmUgaWRlbnRpZmllZCBga3ZtX2h2X3ZjcHVfaW5pdGAsIGBrdm1faHZfYWN0aXZhdGVfc3luaWNgLCBga3ZtX2h2X3ZjcHVfZmx1c2hfdGxiYCwgYW5kIGBrdm1faHZfZmx1c2hfdGxiYCBhcyBwb3RlbnRpYWwgY2FuZGlkYXRlcy4gVGhlbiwgb3ZlciBpbiBgYXJjaC94ODYva3ZtL3hlbi5jYCwgSSYjMzk7dmUgZ290IGBrdm1feGVuX2hjYWxsX3ZjcHVfb3BgIGFuZCBga3ZtX3hlbl9pbml0X3ZjcHVgLiBGaW5hbGx5LCBJJiMzOTttIGNoZWNraW5nIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCDigJMgYW5kIGBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHVgIGxvb2tzIGxpa2UgaXQgbWlnaHQgYmUgaW50ZXJlc3RpbmcgdG9vLgoKTm93LCBhIHF1aWNrIGFzc2Vzc21lbnQgb2YgdGhlc2UgcGF0aHMuIEkmIzM5O20gZ29pbmcgdG8gZGV0ZXJtaW5lIGlmIHRoZXkmIzM5O3JlIGNvbnNpZGVyZWQgaG90IHBhdGhzLiBMb29raW5nIGF0IGBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHVgIOKAkyBub3QgYSBoaWdoLWZyZXF1ZW5jeSBjYWxsLiBga3ZtX2h2X3ZjcHVfaW5pdGAgaXMgYWxzbyBub3QgYSBob3QgcGF0aC4gYGt2bV94ZW5faGNhbGxfdmNwdV9vcGAgaXMgYSBoeXBlcmNhbGwsIHNvIHRoYXQgb25lIGlzIGRlZmluaXRlbHkgYSBnb29kIHRhcmdldCBzaW5jZSBpdCBtaWdodCBiZSBjYWxsZWQgcHJldHR5IG9mdGVuLiBTaW1pbGFybHksIGBrdm1faHZfZmx1c2hfdGxiYCBpcyBhbHNvIGEgaHlwZXJjYWxsLgoKU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBga3ZtX2h2X2ZsdXNoX3RsYmAgYW5kIGBrdm1faHZfdmNwdV9mbHVzaF90bGJgLCB0aGV5JiMzOTtyZSBkZWZpbml0ZWx5IHdvcnRoIGV4cGxvcmluZyBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9odl9mbHVzaF90bGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaHlwZXJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL2h5cGVydi5jPTE5ODE9aW50IGt2bV9odl92Y3B1X2ZsdXNoX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTIwMjMtXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6MjAyNDpzdGF0aWMgdTY0IGt2bV9odl9mbHVzaF90bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2h2X2hjYWxsICpoYylcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0yMDI1LXtcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMjA3OS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoyMDgwOlx0XHR0cmFjZV9rdm1faHZfZmx1c2hfdGxiKGZsdXNoLnByb2Nlc3Nvcl9tYXNrLFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTIwODEtXHRcdFx0XHQgICAgICAgZmx1c2guYWRkcmVzc19zcGFjZSwgZmx1c2guZmxhZ3MsXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTIxMDktXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6MjExMDpcdFx0dHJhY2Vfa3ZtX2h2X2ZsdXNoX3RsYl9leChmbHVzaF9leC5odl92cF9zZXQudmFsaWRfYmFua19tYXNrLFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTIxMTEtXHRcdFx0XHRcdCAgZmx1c2hfZXguaHZfdnBfc2V0LmZvcm1hdCxcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMjE4NS1cdFx0XHQgKiBydW5uaW5nIG9uIHRoZSBzYW1lIEwxIHZDUFUgZnJvbSB0aGUgbW9tZW50IG9mIHRoZSByZXF1ZXN0IHVudGlsXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6MjE4NjpcdFx0XHQgKiBrdm1faHZfZmx1c2hfdGxiKCkgcmV0dXJucy4gVExCIGlzIGZ1bGx5IGZsdXNoZWQgaW4gYWxsIG90aGVyXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMjE4Ny1cdFx0XHQgKiBjYXNlcywgZS5nLiB3aGVuIHRoZSB0YXJnZXQgTDIgdkNQVSBtaWdyYXRlcyB0byBhIGRpZmZlcmVudCBMMVxuLS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYz0yNTM4PWludCBrdm1faHZfaHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMjYzMS1cdFx0fVxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjI2MzI6XHRcdHJldCA9IGt2bV9odl9mbHVzaF90bGIodmNwdSwgXHUwMDI2aGMpO1xuYXJjaC94ODYva3ZtL2h5cGVydi5jLTI2MzMtXHRcdGJyZWFrO1xuLS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0yNjQ0LVx0XHR9XG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6MjY0NTpcdFx0cmV0ID0ga3ZtX2h2X2ZsdXNoX3RsYih2Y3B1LCBcdTAwMjZoYyk7XG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMjY0Ni1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjI6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2NDMKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSHlwZXJjYWxsIEltcGxlbWVudGF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIHNlZWluZyBhIGNvbm5lY3Rpb24gaGVyZSBiZXR3ZWVuIGhvdyB0aGUgS1ZNIGh5cGVydmlzb3IgaW50ZXJhY3RzIHdpdGggaGFyZHdhcmUgdmlydHVhbGl6YXRpb24gYW5kIGhvdyBpdCBtaWdodCBiZSBlbXVsYXRpbmcgb3IgaW50ZXJhY3Rpbmcgd2l0aCBYZW4uIFNwZWNpZmljYWxseSwgYGt2bV9odl9mbHVzaF90bGJgIGlzIGJlaW5nIGludm9rZWQgdGhyb3VnaCBga3ZtX2h2X2h5cGVyY2FsbGAsIHdoaWNoIG1ha2VzIHNlbnNlOyBUTEIgZmx1c2hlcyBhcmUgZnVuZGFtZW50YWwgdG8gbWFuYWdpbmcgdmlydHVhbCBtZW1vcnkgd2l0aGluIGEgaGFyZHdhcmUtYXNzaXN0ZWQgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnQuIFRoZW4sIG92ZXIgb24gdGhlIFhlbiBzaWRlIG9mIHRoaW5ncywgSSYjMzk7bSBub3RpbmcgdGhhdCBga3ZtX3hlbl9oY2FsbF92Y3B1X29wYCBpcyBjYWxsZWQgZnJvbSBga3ZtX3hlbl9oeXBlcmNhbGxgLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHdhbnQgdG8gZGlnIGludG8gdGhhdCBga3ZtX3hlbl9oY2FsbF92Y3B1X29wYCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3Mgb2YgWGVuIGh5cGVyY2FsbCBoYW5kbGluZyBpbiB0aGlzIHNwZWNpZmljIEtWTSBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG9wZXJhdGlvbnMgYXJlIGludm9sdmVkIGluIGBrdm1feGVuX2hjYWxsX3ZjcHVfb3BgIGFuZCBob3cgaXQgbWlnaHQgYmUgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgS1ZNIGluZnJhc3RydWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1feGVuX2hjYWxsX3ZjcHVfb3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veGVuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3hlbi5jPTE2MDA9c3RydWN0IGNvbXBhdF92Y3B1X3NldF9zaW5nbGVzaG90X3RpbWVyIHtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTYwNC1cbmFyY2gveDg2L2t2bS94ZW4uYzoxNjA1OnN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfdmNwdV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsIGludCBjbWQsXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTYwNi1cdFx0XHRcdCAgaW50IHZjcHVfaWQsIHU2NCBwYXJhbSwgdTY0ICpyKVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYz0xNjc0PWludCBrdm1feGVuX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTE3MzYtXHRjYXNlIF9fSFlQRVJWSVNPUl92Y3B1X29wOlxuYXJjaC94ODYva3ZtL3hlbi5jOjE3Mzc6XHRcdGhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX3ZjcHVfb3AodmNwdSwgbG9uZ21vZGUsIHBhcmFtc1swXSwgcGFyYW1zWzFdLFxuYXJjaC94ODYva3ZtL3hlbi5jLTE3MzgtXHRcdFx0XHRcdFx0cGFyYW1zWzJdLCBcdTAwMjZyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjI6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyNjcKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBmcmFtZWQgYXMgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOgoKKip2Q1BVIEluaXRpYWxpemF0aW9uIFBhdGhzOiBBIFF1aWNrIFJldmlldyoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHZDUFUgY3JlYXRpb24gd2l0aGluIHRoZSBLVk0gZnJhbWV3b3JrLiBJdCBsb29rcyBsaWtlIGBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHVgIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIOKAkyB0aGUgZW50cnkgcG9pbnQgZm9yIGJyaW5naW5nIGEgdmlydHVhbCBDUFUgaW50byBleGlzdGVuY2UuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gY2hlY2sgaG93IGh5cGVydiBpbml0aWFsaXplcyBhIHZDUFUsIGFuZCBJIHNlZSB0aGF0IGl0IGNhbGxzIGBrdm1faHZfdmNwdV9pbml0YC4gU2ltaWxhcmx5LCB4ZW4gdXNlcyBga3ZtX3hlbl9pbml0X3ZjcHVgLgoKR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgaHlwZXJ2IGNhbGxzLCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBrdm1faHZfdmNwdV9pbml0YCBhbmQgZ2V0IGEgc2Vuc2UgZm9yIGhvdyB0aGF0IGluaXRpYWxpemF0aW9uIGlzIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9odl92Y3B1X2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaHlwZXJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL2h5cGVydi5jPTk1OT1zdGF0aWMgdm9pZCBzdGltZXJfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltZXIsIGludCB0aW1lcl9pbmRleClcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtOTY2LVxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjk2NzppbnQga3ZtX2h2X3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtOTY4LXtcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9MTAwNT1pbnQga3ZtX2h2X2FjdGl2YXRlX3N5bmljKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBkb250X3plcm9fc3luaWNfcGFnZXMpXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTEwMDktXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6MTAxMDpcdHIgPSBrdm1faHZfdmNwdV9pbml0KHZjcHUpO1xuYXJjaC94ODYva3ZtL2h5cGVydi5jLTEwMTEtXHRpZiAocilcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9MTc2Mz1pbnQga3ZtX2h2X3NldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zciwgdTY0IGRhdGEsIGJvb2wgaG9zdClcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMTc2OS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoxNzcwOlx0aWYgKGt2bV9odl92Y3B1X2luaXQodmNwdSkpXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMTc3MS1cdFx0cmV0dXJuIDE7XG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTE3ODQ9aW50IGt2bV9odl9nZXRfbXNyX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IsIHU2NCAqcGRhdGEsIGJvb2wgaG9zdClcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMTc5MC1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoxNzkxOlx0aWYgKGt2bV9odl92Y3B1X2luaXQodmNwdSkpXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMTc5Mi1cdFx0cmV0dXJuIDE7XG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTIzNjE9aW50IGt2bV9odl9zZXRfZW5mb3JjZV9jcHVpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZW5mb3JjZSlcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMjM2Ny1cdFx0aWYgKGVuZm9yY2UpIHtcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoyMzY4Olx0XHRcdHJldCA9IGt2bV9odl92Y3B1X2luaXQodmNwdSk7XG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMjM2OS1cdFx0XHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjI1MwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gS1ZNIFZpcnR1YWwgQ1BVIEluaXRpYWxpemF0aW9uKioKCkFscmlnaHQsIHNvIGBrdm1faHZfdmNwdV9pbml0YCBpcyB0aGUga2V5IGZ1bmN0aW9uIHRyaWdnZXJlZCB3aGVuIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggTW9kZWwgU3BlY2lmaWMgUmVnaXN0ZXIgKE1TUikgYWNjZXNzIG9yIHRoZSBlbmZvcmNlbWVudCBvZiBDUFUgSWRlbnRpZmljYXRpb24gKENQVUlEKSBpbnN0cnVjdGlvbnMuIE15IGZvY3VzIGhlcmUgaXMgb24gdW5kZXJzdGFuZGluZyBob3cgdGhlIHZpcnR1YWwgQ1BVIGlzIGluaXRpYWxpemVkIHdpdGhpbiB0aGUgS1ZNIGh5cGVydmlzb3IgY29udGV4dC4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBYZW4gaHlwZXJ2aXNvciBpcyBpbnRlcmFjdGluZyB3aXRoIHRoZXNlIGluaXRpYWxpemF0aW9uczsgSSYjMzk7bGwgY2hlY2sgYGt2bV94ZW5faW5pdF92Y3B1YC4gRnJvbSBteSB1bmRlcnN0YW5kaW5nLCB0aGlzIHdpbGwgZ2l2ZSBtZSB0aGUgaW5zaWdodHMgSSBuZWVkIHRvIHNlZSBpZiBhbnkgWGVuLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIG9yIGFkYXB0YXRpb25zIGFyZSBoYXBwZW5pbmcgYXQgdGhpcyBjcml0aWNhbCBzdGFnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjI6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3hlbl9pbml0X3ZjcHUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veGVuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3hlbi5jPTIyNjU9c3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF9ldnRjaG5fc2VuZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBwYXJhbSwgdTY0ICpyKVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy0yMjk5LVxuYXJjaC94ODYva3ZtL3hlbi5jOjIzMDA6dm9pZCBrdm1feGVuX2luaXRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0veGVuLmMtMjMwMS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjMyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBxdWVzdGlvbjoKCioqVHJhY2luZyB0aGUgRXhlY3V0aW9uIFBhdGggb2YgYGt2bV94ZW5faW5pdF92Y3B1YCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBga3ZtX3hlbl9pbml0X3ZjcHVgIGlzIGFjdHVhbGx5IGJlaW5nIGNhbGxlZC4gVGhhdCYjMzk7cyB0aGUgY29yZSBxdWVzdGlvbiBoZXJlLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHJ1bm5pbmcgYSBxdWljayBzZWFyY2gsIGJ1dCBJIGtub3cgdGhpcyBpc24mIzM5O3QgYWx3YXlzIGZvb2xwcm9vZiwgZXNwZWNpYWxseSBpbiBhIGNvZGViYXNlIGxpa2UgWGVuL0tWTSB3aGVyZSB0aGluZ3MgY2FuIGJlIGR5bmFtaWNhbGx5IGxpbmtlZCBvciBoYXZlIGluZGlyZWN0IGNhbGxzLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHVzaW5nIGBncmVwYCBvciBgY3Njb3BlYCBpbml0aWFsbHksIHByb2JhYmx5IHdpdGhpbiB0aGUgcmVsZXZhbnQgS1ZNIGFuZCBYZW4gc291cmNlIGRpcmVjdG9yaWVzLgoKQnV0IHdhaXQsIGV2ZW4gYSB0ZXh0IHNlYXJjaCBtaWdodCBub3QgZ2V0IG1lIHRoZSBmdWxsIHBpY3R1cmUuIEkgbmVlZCB0byBjb25zaWRlciB0aGF0IGl0IG1pZ2h0IGJlIGNhbGxlZCBpbmRpcmVjdGx5IHRocm91Z2ggYSBmdW5jdGlvbiBwb2ludGVyIG9yIHZpYSBzb21lIHNvcnQgb2YgbWFjcm8uIFNvLCBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBzY2FuIHRoZSBjb2RlLCBsb29raW5nIGZvciBhbnkgY2x1ZXMgYWJvdXQgaG93IHZpcnR1YWwgQ1BVcyBhcmUgaW5pdGlhbGl6ZWQgd2l0aGluIHRoZSBYZW4vS1ZNIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtWTSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZXMsIGVzcGVjaWFsbHkgdGhvc2UgaW52b2x2aW5nIHRoZSB2Q1BVIGNyZWF0aW9uIGFuZCBzZXR1cC4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgZmxvdyBpbiBga3ZtX3ZjcHVfY3JlYXRlYCBvciBzaW1pbGFyIGZ1bmN0aW9ucywgYXMgd2VsbCBhcyBYZW4mIzM5O3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSwgaWYgdGhlcmUgaXMgYW4gaW50ZXJhY3Rpb24gYXQgdGhhdCB0aW1lLgoKSSBhbHNvIGtub3cgdGhhdCBYZW4gYW5kIEtWTSBpbnRlcmFjdCBhdCB2YXJpb3VzIGxldmVscywgc28gSSBuZWVkIHRvIGNvbnNpZGVyIGJvdGggdGhlIEtWTSBhbmQgWGVuIHNpZGVzIG9mIHRoaW5ncy4gSSYjMzk7bGwgcHJvYmFibHkgaGF2ZSB0byByZXZpZXcgdGhlIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlLCBpZiBhcHByb3ByaWF0ZSBmb3IgdGhpcyBmdW5jdGlvbiwgc2luY2UgdGhhdCYjMzk7cyBhIGNvbW1vbiBpbnRlZ3JhdGlvbiBwb2ludC4gSXMgaXQgY2FsbGVkIGR1cmluZyBkb21haW4gY3JlYXRpb24sIHZDUFUgc3RhcnQtdXAsIG9yIHNvbWV0aGluZyBtb3JlIG51YW5jZWQ/IFJpZ2h0LCBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IFhlbiBoYW5kbGVzIGd1ZXN0IHZpcnR1YWxpemF0aW9uLgoKU28sIEkmIzM5O2xsIHN0YXJ0IHdpdGggdGhlIG9idmlvdXMgdGV4dHVhbCBzZWFyY2ggYW5kIHRoZW4gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBjYWxsIHN0YWNrcyBhbmQgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2VzIHRvIHNlZSB3aGVyZSBga3ZtX3hlbl9pbml0X3ZjcHVgIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIHZpcnR1YWwgQ1BVIG1hbmFnZW1lbnQuIEkga25vdyBpdCYjMzk7cyBwcm9iYWJseSBpbnZvbHZlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB2Q1BVJiMzOTtzIGxpZmVjeWNsZSwgYnV0IHBpbnBvaW50aW5nICpleGFjdGx5KiB3aGVuIGFuZCAqaG93KiBpcyB0aGUgcmVhbCBnb2FsIGhlcmUuIE9rYXksIGxldCYjMzk7cyBzdGFydCB3aXRoIHRob3NlIHNlYXJjaGVzLi4uIGFuZCBjcm9zcy1yZWZlcmVuY2Ugd2l0aCB0aGUgcmVsZXZhbnQga2VybmVsIGRvY3VtZW50YXRpb24gaWYgSSBuZWVkIHRvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1feGVuX2luaXRfdmNwdSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jPTkyODM9aW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTM1My1cbmFyY2gveDg2L2t2bS94ODYuYzo5MzU0Olx0a3ZtX3hlbl9pbml0X3ZjcHUodmNwdSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtOTM1NS1cdHZjcHVfbG9hZCh2Y3B1KTtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmM9MjI2NT1zdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX2V2dGNobl9zZW5kKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHBhcmFtLCB1NjQgKnIpXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTIyOTktXG5hcmNoL3g4Ni9rdm0veGVuLmM6MjMwMDp2b2lkIGt2bV94ZW5faW5pdF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS94ZW4uYy0yMzAxLXtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmg9MzE9dm9pZCBrdm1feGVuX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bSAqa3ZtKTtcbmFyY2gveDg2L2t2bS94ZW4uaDozMjp2b2lkIGt2bV94ZW5faW5pdF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0veGVuLmgtMzMtdm9pZCBrdm1feGVuX2Rlc3Ryb3lfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS94ZW4uaD0xMjI9c3RhdGljIGlubGluZSB2b2lkIGt2bV94ZW5fZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5oLTEyNS1cbmFyY2gveDg2L2t2bS94ZW4uaDoxMjY6c3RhdGljIGlubGluZSB2b2lkIGt2bV94ZW5faW5pdF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS94ZW4uaC0xMjcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzY2MgoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyBWQ1BVIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgVkNQVSBjcmVhdGlvbiBwcm9jZXNzIHdpdGhpbiB0aGUgS1ZNL1hlbiBpbnRlZ3JhdGlvbi4gSXQgc2VlbXMgdGhhdCB0aGUgYGt2bV94ZW5faW5pdF92Y3B1YCBmdW5jdGlvbiBpcyB0aGUgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBYZW4tc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24sIGFuZCBpdCYjMzk7cyBjYWxsZWQgZHVyaW5nIGBrdm1fYXJjaF92Y3B1X2NyZWF0ZWAuIFRoYXQgbWFrZXMgc2Vuc2UuCgpOb3csIHRvIGdldCBhIGJldHRlciBoaWdoLWxldmVsIHBpY3R1cmUgb2YgaG93IHRoaXMgaW5pdGlhbGl6YXRpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIEtWTSBWQ1BVIGNyZWF0aW9uIHByb2Nlc3MsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YCBmdW5jdGlvbiBpbiBgdmlydC9rdm0va3ZtX21haW4uY2AuIFRoaXMgc2hvdWxkIGdpdmUgbWUgc29tZSBjb250ZXh0IGFib3V0IGhvdyB0aGUgVkNQVSBpcyBhY3R1YWxseSByZXF1ZXN0ZWQgYW5kIGNvbmZpZ3VyZWQgYXQgdGhlIGh5cGVydmlzb3IgbGV2ZWwsIGJlZm9yZSB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGlzIGtpY2tlZCBvZmYuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBiYXNlIHRvIHVuZGVyc3RhbmQgdGhlIGVudGlyZSB3b3JrZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjI6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jPTM5NjA9dm9pZCBrdm1fdmNwdV9vbl9zcGluKHN0cnVjdCBrdm1fdmNwdSAqbWUsIGJvb2wgeWllbGRfdG9fa2VybmVsX21vZGUpXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0zOTcwLVxudmlydC9rdm0va3ZtX21haW4uYzozOTcxOlx0LyogUGFpcnMgd2l0aCB0aGUgc21wX3dtYigpIGluIGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdSgpLiAqL1xudmlydC9rdm0va3ZtX21haW4uYy0zOTcyLVx0c21wX3JtYigpO1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9NDEzMT1zdGF0aWMgdm9pZCBrdm1fY3JlYXRlX3ZjcHVfZGVidWdmcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy00MTUxLSAqL1xudmlydC9rdm0va3ZtX21haW4uYzo0MTUyOnN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBpZClcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDE1My17XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz00Mzg4PXN0YXRpYyBpbnQga3ZtX3dhaXRfZm9yX3ZjcHVfb25saW5lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ0MDAtXHQgKiBBY3F1aXJlIGFuZCByZWxlYXNlIHRoZSB2Q1BVJiMzOTtzIG11dGV4IHRvIHdhaXQgZm9yIHZDUFUgY3JlYXRpb24gdG9cbnZpcnQva3ZtL2t2bV9tYWluLmM6NDQwMTpcdCAqIGNvbXBsZXRlIChrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHUoKSBob2xkcyB0aGUgbXV0ZXggdW50aWwgdGhlIHZDUFVcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDQwMi1cdCAqIGlzIGZ1bGx5IG9ubGluZSkuXG4tLVxudmlydC9rdm0va3ZtX21haW4uYz01MTU3PXN0YXRpYyBsb25nIGt2bV92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUxNjctXHRjYXNlIEtWTV9DUkVBVEVfVkNQVTpcbnZpcnQva3ZtL2t2bV9tYWluLmM6NTE2ODpcdFx0ciA9IGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdShrdm0sIGFyZyk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUxNjktXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDUwNQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDU4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNIFZDUFUgSW5pdGlhbGl6YXRpb24gYW5kIFN5bmNocm9uaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIHJldmlld2luZyB0aGlzIHBhdGNoIGFuZCBJJiMzOTttIHNlZWluZyBhIGZldyBrZXkgYXJlYXMgb2YgaW1wcm92ZW1lbnQgY29uY2VybmluZyBLVk0mIzM5O3MgVkNQVSBpbml0aWFsaXphdGlvbiBhbmQgc3luY2hyb25pemF0aW9uLiBUaGUgbWFpbiB0YWtlYXdheSBoZXJlIGlzIHRoYXQgdGhlc2UgYXJlIGFsbCBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCBhcHBlYXIgdG8gYWRkcmVzcyByYWNlIGNvbmRpdGlvbnMgYW5kIHBvdGVudGlhbCBhY2Nlc3MgdmlvbGF0aW9ucyB0byB1bmluaXRpYWxpemVkIGRhdGEuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBub3RpbmcgdGhlIHdheSB0aGUgcGF0Y2ggaGFuZGxlcyB0aGUgYEtWTV9DUkVBVEVfVkNQVWAgaW9jdGwgaGFuZGxlciwgYGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdWAuIEl0IHNlZW1zIHRoZSBkZXNpZ24gbm93IGluY2x1ZGVzIGFuIGVhcmx5IHNldHRpbmcgb2YgYHZjcHUtJmd0O3ZjcHVfaWR4ID0gLTFgIHdpdGhpbiB0aGUgYGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdWAgZnVuY3Rpb24gYW5kIHJlc2V0dGluZyBpdCB0byAtMSBvbiBmYWlsdXJlLiBUaGlzIHN0cmlrZXMgbWUgYXMgYSBkZWxpYmVyYXRlIHN0cmF0ZWd5IHRvIHByZXZlbnQgb3RoZXIgdGFza3MgZnJvbSBpbmFkdmVydGVudGx5IGFjY2Vzc2luZyBhIHBhcnRpYWxseSBpbml0aWFsaXplZCB2Q1BVLiBJdCBhbHNvIGxvb2tzIGxpa2UgYSBjbGV2ZXIgd2F5IHRvIGVuc3VyZSBLVk0gY2FuIHJlbGlhYmx5IGRldGVjdCBhbiB1bnJlYWNoYWJsZSB2Q1BVLiBHb29kLCBwcm9hY3RpdmUgZGVzaWduLgoKQmV5b25kIHRoYXQsIHRoZSBjaGFuZ2VzIHRvIGB0b19odl92Y3B1X3NhZmVgIGFyZSBpbnRlcmVzdGluZy4gVXNpbmcgYHNtcF9sb2FkX2FjcXVpcmVgIGFuZCB0aGUgbW9kaWZpY2F0aW9uIHRvIGBrdm1faHZfdmNwdV9pbml0YCB0byB1c2UgYHNtcF9zdG9yZV9yZWxlYXNlYCBjbGVhcmx5IGluZGljYXRlcyBhbiBlZmZvcnQgdG8gc2VyaWFsaXplIGFjY2VzcyB0byB0aGUgYHZjcHUtJmd0O2FyY2guaHlwZXJ2YCBkYXRhIHN0cnVjdHVyZSBhbmQgYXZvaWQgdGhhdCByYWNlIGNvbmRpdGlvbi4gSXQmIzM5O3MgdGhlIHN0YW5kYXJkIG1lbW9yeSBiYXJyaWVyIHN5bmNocm9uaXphdGlvbiBwYXR0ZXJuIHRvIGhhbmRsZSBtZW1vcnkgb3JkZXJpbmcuCgpUaGVyZSYjMzk7cyBhbHNvIGEgbW9kaWZpY2F0aW9uIHRvIGBrdm1feGVuX2hjYWxsX3ZjcHVfb3BgLCB3aGljaCBub3cgaW5jbHVkZXMgY2hlY2tzIGZvciBgdmNwdS0mZ3Q7YXJjaC54ZW4udmNwdV9pZCA9PSBYRU5fVkNQVV9JRF9JTlZBTElEYCBhbmQgYHZjcHUtJmd0O2FyY2gueGVuLnZjcHVfaWQgIT0gdmNwdV9pZGAuIFRoaXMgaXMgYWJvdXQgZ3VhcmRpbmcgYWdhaW5zdCB1c2luZyB0aGUgYHZjcHVfaWRgIGJlZm9yZSBpdCYjMzk7cyBiZWVuIGluaXRpYWxpemVkIHByb3Blcmx5LiBTb2xpZC4KCkZpbmFsbHksIHRoZSBjaGFuZ2UgdG8gYGt2bV9odl9mbHVzaF90bGJgIGxvb2tzIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIHNoaWZ0IHRvIHBhc3NpbmcgYGlzX2d1ZXN0X21vZGVgIHRvIGBodl90bGJfZmx1c2hfZW5xdWV1ZWAgaW5zdGVhZCBvZiBkaXJlY3RseSBjYWxsaW5nIGBrdm1faHZfZ2V0X3RsYl9mbHVzaF9maWZvYCBpcyBhIG1pbm9yLCB5ZXQgbGlrZWx5IGltcG9ydGFudCwgcmVmYWN0b3JpbmcgdGhhdCBJIHNob3VsZCB1bmRlcnN0YW5kIGF0IGEgbG93IGxldmVsIHRvIG1ha2Ugc3VyZSB0aGUgYmVoYXZpb3IgaXMgY29uc2lzdGVudC4KCk92ZXJhbGwsIHRoaXMgcGF0Y2ggc2VlbXMgcHJldHR5IHNvbGlkIGFuZCBzaG91bGQgaW1wcm92ZSByb2J1c3RuZXNzIGFuZCByZWxpYWJpbGl0eS4gQ29uc2lkZXJpbmcgdGhlIG5hdHVyZSBvZiB0aGVzZSBjaGFuZ2VzIOKAkyBmb2N1c2luZyBvbiBpbml0aWFsaXphdGlvbiBhbmQgZGF0YSBhY2Nlc3Mg4oCTIHRoZXNlIGFyZSBkZWZpbml0ZWx5IGFyZWFzIHJpcGUgZm9yIGZ1enppbmcuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgY29yZSBzeW1ib2xzIHRoYXQgd291bGQgbWFrZSB0aGUgYmVzdCBmdXp6IHRhcmdldHMuIEZyb20gbXkgaW5pdGlhbCBhc3Nlc3NtZW50LCBJIGFtIGdvaW5nIHRvIGZvY3VzIG9uOiBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YCwgYGt2bV9odl92Y3B1X2luaXRgLCBga3ZtX3hlbl9oY2FsbF92Y3B1X29wYCwgYGt2bV9odl9mbHVzaF90bGJgLCBhbmQgYGt2bV9odl92Y3B1X2ZsdXNoX3RsYmAuCgpHaXZlbiB0aGUgcG90ZW50aWFsIGZvciBndWVzdC10cmlnZ2VyZWQgYWN0aW9ucywgdGhlIGxhdHRlciB0aHJlZSAoYGt2bV9odl92Y3B1X2luaXRgLCBga3ZtX3hlbl9oY2FsbF92Y3B1X29wYCwgYW5kIGBrdm1faHZfZmx1c2hfdGxiYCkgYXJlIGV4Y2VsbGVudCB0YXJnZXRzIGJlY2F1c2UgdGhleSBhcmUgcmVsYXRlZCB0byBoeXBlcmNhbGxzIGFuZCBNU1IgYWNjZXNzLiBUaGUgVkNQVSBjcmVhdGlvbiBwYXRoLCByZXByZXNlbnRlZCBieSBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YCwgaXMgbW9yZSBhIHNsb3dlciBwYXRoIGJ1dCB0aGUgY29yZSBvZiB0aGUgcGF0Y2guIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaWYgdGhlIHBhdGggb2YgYGt2bV9odl92Y3B1X2ZsdXNoX3RsYmAgb2ZmZXJzIG1vcmUgb3Bwb3J0dW5pdGllcyBmb3IgbW9yZSB0YXJnZXRlZCB0ZXN0aW5nLiBMZXQmIzM5O3MgZGlnIGRlZXBlciBpbnRvIHRoYXQgb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1faHZfdmNwdV9mbHVzaF90bGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaHlwZXJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL2h5cGVydi5jPTE5NDk9c3RhdGljIHZvaWQgaHZfdGxiX2ZsdXNoX2VucXVldWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKmVudHJpZXMsIGludCBjb3VudCxcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMTk4MC1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoxOTgxOmludCBrdm1faHZfdmNwdV9mbHVzaF90bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTE5ODIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjAyNQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqVHJhY2luZyB0aGUgVExCIEZsdXNoIGluIEtWTSoqCgpBbHJpZ2h0LCBzbyB0aGUgY29yZSBxdWVzdGlvbiBidXp6aW5nIGluIG15IGhlYWQgaXM6IHdoZXJlIGV4YWN0bHkgZG9lcyBga3ZtX2h2X3ZjcHVfZmx1c2hfdGxiYCBnZXQgaW52b2tlZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNhbGwgc2l0ZXMgdG8gcmVhbGx5IGdyYXNwIGl0cyByb2xlIGluIEtWTSYjMzk7cyBoeXBlcnZpc29yIG9wZXJhdGlvbnMsIGVzcGVjaWFsbHkgY29uY2VybmluZyBUTEIgY29oZXJlbmN5LiBLbm93aW5nIHRoZSBwb2ludHMgb2YgaW52b2NhdGlvbiB3aWxsIHRlbGwgbWUgdW5kZXIgd2hhdCBjb25kaXRpb25zIHRoZSBoeXBlcnZpc29yIGRlZW1zIGEgVExCIGZsdXNoIG5lY2Vzc2FyeS4gSXMgaXQgdHJpZ2dlcmVkIGJ5IGd1ZXN0IHdyaXRlcywgZ3Vlc3QgcGFnZSB0YWJsZSBtb2RpZmljYXRpb25zLCBvciBleHRlcm5hbCBldmVudHM/CgpJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgdXBzdHJlYW0gY2FsbGVycyB0byBzdGFydCBmb3JtaW5nIGEgY2xlYXIgcGljdHVyZS4gSSB3aWxsIHVzZSB0aGUgY29kZSBiYXNlIGFuZCBhIGdvb2QgZ3JlcHBpbmcgc3RyYXRlZ3kgKG9yIHByZWZlcmFibHkgbXkgSURFKSB0byBmaW5kIHdoZXJlIGBrdm1faHZfdmNwdV9mbHVzaF90bGJgIGlzIGNhbGxlZCBpbiB0aGUgc291cmNlIHRyZWUuIEtub3dpbmcgdGhlIGNhbGwgaGllcmFyY2h5IHdpbGwgYmUgY3J1Y2lhbCB0byBhc3Nlc3NpbmcgaXRzIGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2UgYW5kLCBjcml0aWNhbGx5LCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMuIFVuZGVyc3RhbmRpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgY29udGV4dCB3aWxsIHByb3ZpZGUgaGludHMgcmVnYXJkaW5nIHRoZSBpbnRlbnQgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBzcGVjaWZpYyBUTEIgZmx1c2hpbmcgb3BlcmF0aW9uLgoKRnVydGhlcm1vcmUsIEkgaGF2ZSB0byBrZWVwIHRoZSBpbXBhY3Qgb24gdGhlIGd1ZXN0IGluIG1pbmQuIFdoYXQgaXMgdGhlIGltcGFjdCBvbiBwZXJmb3JtYW5jZSBmb3IgYSBndWVzdCB2Q1BVPyBJcyB0aGUgY29zdCBvZiBmbHVzaGluZyB0aGUgVExCIGhpZ2g/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiwgb3Igc3BlY2lmaWMgQ1BVIGZlYXR1cmVzIGxpa2UgZXh0ZW5kZWQgcGFnZSB0YWJsZXMgKEVQVCk/IEFyZSB0aGVyZSBhbnkgb3B0aW1pemF0aW9ucyBpbiBwbGFjZSB0byBtaW5pbWl6ZSB0aGUgZmx1c2ggc2NvcGU/IFRoZXNlIGZvbGxvdy11cCBxdWVzdGlvbnMgd2lsbCBkZWZpbmUgbXkgbmV4dCByZXNlYXJjaCBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1faHZfdmNwdV9mbHVzaF90bGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9oeXBlcnYuYz0xOTQ5PXN0YXRpYyB2b2lkIGh2X3RsYl9mbHVzaF9lbnF1ZXVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0ICplbnRyaWVzLCBpbnQgY291bnQsXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTE5ODAtXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6MTk4MTppbnQga3ZtX2h2X3ZjcHVfZmx1c2hfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0xOTgyLXtcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2Lmg9Mjc1PXN0YXRpYyBpbmxpbmUgdm9pZCBrdm1faHZfbmVzdGVkX3RyYW5zdGlvbl90bGJfZmx1c2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuaC0yODctXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2Lmg6Mjg4OmludCBrdm1faHZfdmNwdV9mbHVzaF90bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbmFyY2gveDg2L2t2bS9oeXBlcnYuaC0yODktI2Vsc2UgLyogQ09ORklHX0tWTV9IWVBFUlYgKi9cbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9ODAwMT1zdGF0aWMgaW50IHZjcHVfZW50ZXJfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy04MDY0LVx0XHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9IVl9UTEJfRkxVU0gsIHZjcHUpIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL3g4Ni5jOjgwNjU6XHRcdCAgICBrdm1faHZfdmNwdV9mbHVzaF90bGIodmNwdSkpXG5hcmNoL3g4Ni9rdm0veDg2LmMtODA2Ni1cdFx0XHRrdm1fdmNwdV9mbHVzaF90bGJfZ3Vlc3QodmNwdSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2ODU3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFByaW9yaXRpemF0aW9uIG9mIEtWTSBGdXp6aW5nIFRhcmdldHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIEtWTSBmdW5jdGlvbnMgYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoaWNoIG9uZXMgYXJlIHByaW1lIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcsIGdpdmVuIHRoYXQgdGhleSYjMzk7cmUgYWxsIHBvdGVudGlhbCBlbnRyeSBwb2ludHMuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyBga3ZtX2h2X3ZjcHVfZmx1c2hfdGxiYC4gSSBrbm93IHRoYXQmIzM5O3MgY2FsbGVkIHdpdGhpbiBgdmNwdV9lbnRlcl9ndWVzdGAsIGFuZCB0aGF0JiMzOTtzIGEgKmhvdCBwYXRoKi4gV2UgbmVlZCB0byBiZSB2ZXJ5IGNhcmVmdWwgYWJvdXQgYWRkaW5nIHRoaW5ncyB0byBgRm9jdXNTeW1ib2xzYCB0aGF0IGltcGFjdCBwZXJmb3JtYW5jZSB0aGVyZS4gU28sIEkmIzM5O20gZ29pbmcgdG8gc2V0IHRoYXQgYXNpZGUgZm9yIG5vdy4KCk5vdywgYGt2bV9odl9mbHVzaF90bGJgIGlzIGRpZmZlcmVudC4gSXQmIzM5O3MgY2FsbGVkIGZyb20gYGt2bV9odl9oeXBlcmNhbGxgLCB3aGljaCwgd2hpbGUgZnJlcXVlbnRseSBjYWxsZWQsIGlzbiYjMzk7dCB0aGUgc2FtZSBraW5kIG9mIGNvcmUgbG9vcCBsaWtlIGB2Y3B1X2VudGVyX2d1ZXN0YC4gSXQmIzM5O3MgYSBoeXBlcmNhbGwgaGFuZGxlciwgYW5kIGh5cGVyY2FsbHMgYXJlIGV4Y2VsbGVudCBmdXp6aW5nIHRhcmdldHMgYmVjYXVzZSBvZiB0aGVpciBzcGVjaWZpYyBpbnB1dHMuIFRoaXMgbG9va3MgcHJvbWlzaW5nLgoKVGhlbiB0aGVyZSYjMzk7cyBga3ZtX3hlbl9oY2FsbF92Y3B1X29wYC4gQW5vdGhlciBoeXBlcmNhbGwgaGFuZGxlciwgc28gaXQgYWxzbyBzZWVtcyBsaWtlIGEgZ3JlYXQgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJJiMzOTtsbCBtYWtlIGEgbm90ZSBvZiB0aGlzLgoKYGt2bV9odl92Y3B1X2luaXRgIGlzIGNhbGxlZCBvbiBzcGVjaWZpYyBNU1IgYWNjZXNzZXMsIGFuZCB0aGF0IHNvdW5kcyBsaWtlIGEgZ29vZCB0YXJnZXQgYXMgd2VsbC4gTVNSIGFjY2Vzc2VzLCBsaWtlIGh5cGVyY2FsbHMsIGNhbiBiZSBxdWl0ZSBudWFuY2VkIGFuZCBhcmUgcmlwZSBmb3IgZnV6emluZy4KCkFuZCBmaW5hbGx5LCBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YC4gQW4gaW9jdGwgaGFuZGxlciBpcyBhbm90aGVyIGdvb2QgY2hvaWNlLCBpdCYjMzk7cyBhbiBJL08gcGF0aC4gVGhhdCBnaXZlcyB1cyBtb3JlIGFjY2VzcyBwb2ludHMgYW5kIGRpZmZlcmVudCBleGVjdXRpb24gY29udGV4dHMuCgpOb3csIGJlZm9yZSBJIGNvbW1pdCB0byBhbnl0aGluZywgSSB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IHdlIGhhdmUgYENPTkZJR19LVk1gLCBgQ09ORklHX0tWTV9IWVBFUlZgLCBhbmQgYENPTkZJR19LVk1fWEVOYCBlbmFibGVkLCB3aGljaCB3b3VsZCBjb25maXJtIHRoZXNlIGZlYXR1cmVzIGFyZSBhY3RpdmUgYW5kIGF2YWlsYWJsZSBmb3IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjI6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9YRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOTM9Y29uZmlnIEtWTV9IWVBFUlZcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjI6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2NzkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgS1ZNIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIGBLVk1fSFlQRVJWYCBhbmQgYEtWTV9YRU5gIGFyZSB0aGUgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHdlJiMzOTtyZSBmb2N1c2luZyBvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgSSYjMzk7dmUgZ290IHRoZSBjb3JyZWN0IGNvbmZpZyBpZGVudGlmaWVycy4gTm8gbmVlZCB0byBiZWxhYm9yIHRoZSBvYnZpb3VzLCBqdXN0IGEgcXVpY2sgY2hlY2sgdG8gbWFrZSBzdXJlIHRob3NlIGFyZSBpbmRlZWQgdGhlIHJlbGV2YW50IGNvbmZpZ3MuCgpUaGUgbmV4dCB0aGluZyBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nIGlzIGFib3V0IGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgZWl0aGVyIG9mIHRoZXNlIGNvbmZpZ3VyYXRpb25zIHJlbGllcyBvbiBhbnkgb3RoZXIga2VybmVsIGZlYXR1cmVzIG9yIG1vZHVsZXMuIEFyZSB0aGV5IHNlbGYtY29udGFpbmVkLCBvciBhcmUgdGhleSBidWlsdCBvbiB0b3Agb2Ygc29tZSB1bmRlcmx5aW5nIGluZnJhc3RydWN0dXJlPyBBIGRlcGVuZGVuY3kgYW5hbHlzaXMgaXMgY3J1Y2lhbCBoZXJlLiBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgd2lsbCBpbmZvcm0gaG93IGNsZWFubHkgdGhleSBpbnRlZ3JhdGUsIGFuZCBob3cgdG8gYXBwcm9hY2ggYW55IHBvdGVudGlhbCBjb25mbGljdHMgb3IgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgZmVhdHVyZXMuIExldCYjMzk7cyBkaWcgaW50byB0aGF0IGFuZCBzZWUgd2hhdCB3ZSB1bmNvdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0hZUEVSViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTE4Mj1jb25maWcgS1ZNX1NNTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5Mzpjb25maWcgS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjI6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgwNTcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBLY29uZmlnIGZvciBgS1ZNX0hZUEVSVmAqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmb3IgYEtWTV9IWVBFUlZgLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gdW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGFuZCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBvcHRpb24uIEkgd2FudCB0byBzZWUgaG93IGl0JiMzOTtzIGludGVncmF0ZWQgd2l0aGluIHRoZSBsYXJnZXIgS1ZNIGVjb3N5c3RlbS4KCkkmIzM5O20gbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6CgoqICAgKipEZXBlbmRlbmNpZXM6KiogV2hhdCBvdGhlciBLY29uZmlnIHN5bWJvbHMgZG9lcyBgS1ZNX0hZUEVSVmAgZGVwZW5kIG9uPyBBcmUgdGhlcmUgYW55IHVwc3RyZWFtL2Rvd25zdHJlYW0gZGVwZW5kZW5jaWVzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBlbmFibGluZyB0aGlzIG9wdGlvbiBpbXBsaWNpdGx5IHB1bGxzIGluIG9yIGFmZmVjdHMgb3RoZXIgZmVhdHVyZXMuIEkmIzM5O2xsIG5lZWQgdG8gYXNzZXNzIHRoZSBwb3RlbnRpYWwgZm9yIGNvbmZsaWN0cywgdG9vLgoqICAgKipUcmlnZ2VyczoqKiBXaGF0IGRvZXMgaXQgZW5hYmxlPyBEb2VzIGl0IGJyaW5nIGluIGFueSBuZXcgZHJpdmVycywgbW9kdWxlcywgb3IgZmVhdHVyZXM/IElmIHNvLCB3aGF0IGFyZSB0aGVpciByZWxhdGlvbnNoaXBzIHRvIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGFuZCB0aGVpciBpbXBsaWNhdGlvbnMgb24gdGhlIGh5cGVydmlzb3ImIzM5O3MgcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5PwoqICAgKipEZWZhdWx0IFN0YXRlIGFuZCBQcm9tcHQ6KiogSXMgaXQgYSB0cmlzdGF0ZSwgYSBib29sPyBXaGF0IGFyZSBpdHMgZGVmYXVsdCB2YWx1ZSBhbmQgcHJvbXB0IHN0cmluZz8gRG9lcyBpdCBpbmZsdWVuY2Ugb3RoZXIgdmlydHVhbGl6YXRpb24gZmVhdHVyZXM/CiogICAqKkhlbHAgVGV4dDoqKiBUaGUgaGVscCB0ZXh0IHdpbGwgYmUgY3JpdGljYWwgaGVyZS4gSXQgc2hvdWxkIGdpdmUgbWUgYSBjb25jaXNlIGRlc2NyaXB0aW9uIG9mIHdoYXQgdGhlIGBLVk1fSFlQRVJWYCBzdXBwb3J0IGFjdHVhbGx5IGRvZXMsIGFuZCB0aGUgc2NlbmFyaW9zIHdoZXJlIEkmIzM5O2QgZW5hYmxlIGl0LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBoaW50cyBhYm91dCB0aGUgdGFyZ2V0IGhhcmR3YXJlIGFuZCBvcGVyYXRpbmcgc3lzdGVtcy4KKiAgICoqQXJjaGl0ZWN0dXJhbCBDb25zaWRlcmF0aW9uczoqKiBBcmUgdGhlcmUgYW55IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjaGVja3Mgb3IgZGVwZW5kZW5jaWVzPyBEb2VzIHRoaXMgb3B0aW9uIG9ubHkgbWFrZSBzZW5zZSBvbiBjZXJ0YWluIENQVSBhcmNoaXRlY3R1cmVzIG9yIHNwZWNpZmljIGhhcmR3YXJlIGZlYXR1cmVzPyBJJiMzOTtsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGFueSBgI2lmZGVmYCBzdGF0ZW1lbnRzIHRoYXQgbWlnaHQgaW5mbHVlbmNlIGl0cyBiZWhhdmlvci4KCkkgd2FudCB0byBxdWlja2x5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgb2Ygc2VsZWN0aW5nIGBLVk1fSFlQRVJWYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaXRzIHJvbGUgaW4gdGhlIHZpcnR1YWwgZW52aXJvbm1lbnQuIEFueSBoaWRkZW4gZ290Y2hhcyBvciBzdWJ0bGUgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgdmlydHVhbGl6YXRpb24gZmVhdHVyZXMgYXJlIGV4YWN0bHkgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE5MDpcdFxuIDE5MTpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuIDE5MjpcdFxuIDE5MzpcdGNvbmZpZyBLVk1fSFlQRVJWXG4gMTk0Olx0XHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblwmIzM0O1xuIDE5NTpcdFx0ZGVwZW5kcyBvbiBLVk1fWDg2XG4gMTk2Olx0XHRkZWZhdWx0IHlcbiAxOTc6XHRcdGhlbHBcbiAxOTg6XHRcdCAgUHJvdmlkZXMgS1ZNIHN1cHBvcnQgZm9yIGVtdWxhdGluZyBNaWNyb3NvZnQgSHlwZXItVi4gIFRoaXMgYWxsb3dzIEtWTVxuIDE5OTpcdFx0ICB0byBleHBvc2UgYSBzdWJzZXQgb2YgdGhlIHBhcmF2aXJ0dWFsaXplZCBpbnRlcmZhY2VzIGRlZmluZWQgaW4gdGhlXG4gMjAwOlx0XHQgIEh5cGVyLVYgSHlwZXJ2aXNvciBUb3AtTGV2ZWwgRnVuY3Rpb25hbCBTcGVjaWZpY2F0aW9uIChUTEZTKTpcbiAyMDE6XHRcdCAgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvdmlydHVhbGl6YXRpb24vaHlwZXItdi1vbi13aW5kb3dzL3JlZmVyZW5jZS90bGZzXG4gMjAyOlx0XHQgIFRoZXNlIGludGVyZmFjZXMgYXJlIHJlcXVpcmVkIGZvciB0aGUgY29ycmVjdCBhbmQgcGVyZm9ybWFudCBmdW5jdGlvbmluZ1xuIDIwMzpcdFx0ICBvZiBXaW5kb3dzIGFuZCBIeXBlci1WIGd1ZXN0cyBvbiBLVk0uXG4gMjA0Olx0XG4gMjA1Olx0XHQgIElmIHVuc3VyZSwgc2F5IFwmIzM0O1lcJiMzNDsuXG4gMjA2Olx0XG4gMjA3Olx0Y29uZmlnIEtWTV9YRU5cbiAyMDg6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcJiMzNDtcbiAyMDk6XHRcdGRlcGVuZHMgb24gS1ZNX1g4NlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODg1MQoJCQkJCQkJb3V0cHV0OiAxNzYKCQkJCQkJCXRob3VnaHRzOiA4NDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgS1ZNIFBhdGNoIEZ1enppbmcgVGFyZ2V0cyoqCgpPa2F5LCBzbyBJJiMzOTttIGhvbWluZyBpbiBvbiB0aGUgYmVzdCBjb25maWd1cmF0aW9ucyBmb3IgZnV6emluZyB0aGlzIEtWTSBwYXRjaC4gIGBLVk1fSFlQRVJWYCBhbmQgYEtWTV9YRU5gIGFyZSBkZWZpbml0ZWx5IHRoZSBjb3JlIGNvbmZpZ3VyYXRpb25zIHRvIHRhcmdldC4gIEkmIzM5O3ZlIGRvdWJsZS1jaGVja2VkIHRoYXQgYEtWTV9YODZgIGlzbiYjMzk7dCBleHBsaWNpdGx5IG5lY2Vzc2FyeSwgYXMgYEtWTV9IWVBFUlZgIGhhbmRsZXMgdGhlIGRlcGVuZGVuY3kuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGZvY3VzIHN5bWJvbHMuIEkmIzM5O3ZlIGNvbXBpbGVkIGEgbGlzdDoKLSAgIGBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHVgCi0gICBga3ZtX2h2X3ZjcHVfaW5pdGAKLSAgIGBrdm1feGVuX2hjYWxsX3ZjcHVfb3BgCi0gICBga3ZtX2h2X2ZsdXNoX3RsYmAKCkkgbWV0aWN1bG91c2x5IGNoZWNrZWQgdGhlIHN0YXRpYyBuYXR1cmUgb2YgZWFjaC4gYGt2bV9odl9mbHVzaF90bGJgLCBga3ZtX3hlbl9oY2FsbF92Y3B1X29wYCwgYW5kIGBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHVgIGFyZSBpbmRlZWQgc3RhdGljLCBhbmQgdGhhdCYjMzk7cyBwZXJmZWN0bHkgZmluZTsgc3l6a2FsbGVyIGNhbiBoYW5kbGUgdGhlbS4gIGBrdm1faHZfdmNwdV9pbml0YCBpcyBub3Qgc3RhdGljLiAgVGhlc2UgZnVuY3Rpb25zIGFyZSBhbGwga2V5IGJlY2F1c2UgdGhleSByZXByZXNlbnQgdGhlIGNvcmUgb2YgdGhlIHBhdGNoJiMzOTtzIGNoYW5nZXM6IHZDUFUgY3JlYXRpb24sIEh5cGVyLVYgZW11bGF0aW9uLCBhbmQgWGVuIGVtdWxhdGlvbi4KCkkgcmVhbGl6ZWQgdGhpcyBwYXRjaCBhbHNvIHRvdWNoZXMgYHN5bmljX2dldGAsIGBzdGltZXJfbWFya19wZW5kaW5nYCwgYW5kIGBzdGltZXJfY2xlYW51cGAuIFRoZXNlIGFyZSBzbWFsbGVyLCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIG5vdGUgdGhhdCB0aG9zZSBhcmUgc21hbGwgaGVscGVyIGZ1bmN0aW9ucy4KClRoZSByZWFzb25pbmcgZm9yIGZ1enppbmcgaXMgc291bmQuIFRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyByYWNlIGNvbmRpdGlvbnMgYW5kIHVuaW5pdGlhbGl6ZWQgYWNjZXNzZXMgd2l0aGluIEtWTSYjMzk7cyB2Q1BVIGNyZWF0aW9uLCBoeXBlcmNhbGwgaGFuZGxlcnMgZm9yIGJvdGggSHlwZXItViBhbmQgWGVuIGVtdWxhdGlvbi4gVGhlIGNoYW5nZXMgaW52b2x2ZSBtb2RpZnlpbmcgdkNQVSBpbml0aWFsaXphdGlvbiBhbmQgaHlwZXJjYWxsIGxvZ2ljLCBhbGwgYXJlYXMgdGhhdCBhcmUgcG90ZW50aWFsbHkgcmVhY2hhYmxlIGZyb20gZ3Vlc3QgdXNlcnNwYWNlIGFuZCBzdXNjZXB0aWJsZSB0byBjb25jdXJyZW50IGV4ZWN1dGlvbi4gRnV6emluZyB0aGVzZSBjb21wb25lbnRzIGlzIGNydWNpYWwgdG8gY29uZmlybSB0aGUgZml4IGlzIGVmZmVjdGl2ZSwgd2l0aG91dCBpbnRyb2R1Y2luZyByZWdyZXNzaW9ucy4KClRoZXJlZm9yZSwgdGhlIGNyaXRpY2FsIGNvbmZpZ3VyYXRpb25zIGFyZSBgS1ZNX0hZUEVSVmAgYW5kIGBLVk1fWEVOYC4gVGhlIGlkZW50aWZpZWQgZm9jdXMgc3ltYm9scyBwcm92aWRlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdGVzdGluZyBhbmQgaWRlbnRpZnlpbmcgZnVydGhlciBmb2N1cyBzeW1ib2xzLiBJJiMzOTttIHJlYWR5IHRvIHNldCB0aGVzZSByZXN1bHRzIGFuZCBwcm9jZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNX0hZUEVSViYjMzQ7LAogICAgJiMzNDtLVk1fWEVOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1JiMzNDssCiAgICAmIzM0O2t2bV9odl92Y3B1X2luaXQmIzM0OywKICAgICYjMzQ7a3ZtX3hlbl9oY2FsbF92Y3B1X29wJiMzNDssCiAgICAmIzM0O2t2bV9odl9mbHVzaF90bGImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcmFjZSBjb25kaXRpb25zIGFuZCB1bmluaXRpYWxpemVkIGFjY2Vzc2VzIGluIEtWTSYjMzk7cyB2Q1BVIGNyZWF0aW9uLCBIeXBlci1WIGVtdWxhdGlvbiwgYW5kIFhlbiBlbXVsYXRpb24uIEl0IG1vZGlmaWVzIGNvcmUgdkNQVSBpbml0aWFsaXphdGlvbiBsb2dpYyBhbmQgaHlwZXJjYWxsIGhhbmRsZXJzLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gZ3Vlc3QgdXNlcnNwYWNlIGFuZCBjYW4gYmUgdHJpZ2dlcmVkIGNvbmN1cnJlbnRseS4gRnV6emluZyBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoZXNlIGZpeGVzIGNvcnJlY3RseSBoYW5kbGUgY29uY3VycmVudCB2Q1BVIGNyZWF0aW9uIGFuZCBoeXBlcmNhbGxzIHdpdGhvdXQgaW50cm9kdWNpbmcgbmV3IHJhY2VzIG9yIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk1fSFlQRVJWJiMzNDssCiAgICAmIzM0O0tWTV9YRU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHUmIzM0OywKICAgICYjMzQ7a3ZtX2h2X3ZjcHVfaW5pdCYjMzQ7LAogICAgJiMzNDtrdm1feGVuX2hjYWxsX3ZjcHVfb3AmIzM0OywKICAgICYjMzQ7a3ZtX2h2X2ZsdXNoX3RsYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyByYWNlIGNvbmRpdGlvbnMgYW5kIHVuaW5pdGlhbGl6ZWQgYWNjZXNzZXMgaW4gS1ZNJiMzOTtzIHZDUFUgY3JlYXRpb24sIEh5cGVyLVYgZW11bGF0aW9uLCBhbmQgWGVuIGVtdWxhdGlvbi4gSXQgbW9kaWZpZXMgY29yZSB2Q1BVIGluaXRpYWxpemF0aW9uIGxvZ2ljIGFuZCBoeXBlcmNhbGwgaGFuZGxlcnMsIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSBndWVzdCB1c2Vyc3BhY2UgYW5kIGNhbiBiZSB0cmlnZ2VyZWQgY29uY3VycmVudGx5LiBGdXp6aW5nIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlc2UgZml4ZXMgY29ycmVjdGx5IGhhbmRsZSBjb25jdXJyZW50IHZDUFUgY3JlYXRpb24gYW5kIGh5cGVyY2FsbHMgd2l0aG91dCBpbnRyb2R1Y2luZyBuZXcgcmFjZXMgb3IgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjo1NDowNS40MTA3NzQ5NDdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Njc3MTE0NDY4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1fSFlQRVJWXCIsXG4gICAgXCJLVk1fWEVOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1XCIsXG4gICAgXCJrdm1faHZfdmNwdV9pbml0XCIsXG4gICAgXCJrdm1feGVuX2hjYWxsX3ZjcHVfb3BcIixcbiAgICBcImt2bV9odl9mbHVzaF90bGJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyByYWNlIGNvbmRpdGlvbnMgYW5kIHVuaW5pdGlhbGl6ZWQgYWNjZXNzZXMgaW4gS1ZNJ3MgdkNQVSBjcmVhdGlvbiwgSHlwZXItViBlbXVsYXRpb24sIGFuZCBYZW4gZW11bGF0aW9uLiBJdCBtb2RpZmllcyBjb3JlIHZDUFUgaW5pdGlhbGl6YXRpb24gbG9naWMgYW5kIGh5cGVyY2FsbCBoYW5kbGVycywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIGd1ZXN0IHVzZXJzcGFjZSBhbmQgY2FuIGJlIHRyaWdnZXJlZCBjb25jdXJyZW50bHkuIEZ1enppbmcgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGVzZSBmaXhlcyBjb3JyZWN0bHkgaGFuZGxlIGNvbmN1cnJlbnQgdkNQVSBjcmVhdGlvbiBhbmQgaHlwZXJjYWxscyB3aXRob3V0IGludHJvZHVjaW5nIG5ldyByYWNlcyBvciByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjI6NTQ6MDUuNDEwNzc5OTQ3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDgxMjI0NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyODgzZjU3MzEzMGI1M2MyYjQ4N2ViMWY0NDZiNWI0Y2E3ODNkYzhmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVuIDI1IDIyOjU0OjAzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9oeXBlcnYuYyBiL2FyY2gveDg2L2t2bS9oeXBlcnYuY1xcbmluZGV4IDFlZTBkMjNmODk0OTc0Li45ZDM4Y2I2NDQ2NjhkYSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmNcXG5AQCAtMjA2LDE0ICsyMDYsMjAgQEAgc3RhdGljIHN0cnVjdCBrdm1fdmNwdSAqZ2V0X3ZjcHVfYnlfdnBpZHgoc3RydWN0IGt2bSAqa3ZtLCB1MzIgdnBpZHgpXFxuIFxcbiBzdGF0aWMgc3RydWN0IGt2bV92Y3B1X2h2X3N5bmljICpzeW5pY19nZXQoc3RydWN0IGt2bSAqa3ZtLCB1MzIgdnBpZHgpXFxuIHtcXG4tXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xcbiBcXHRzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3luaWMgKnN5bmljO1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHVfaHYgKmh2X3ZjcHU7XFxuK1xcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcXG4gXFxuIFxcdHZjcHUgPSBnZXRfdmNwdV9ieV92cGlkeChrdm0sIHZwaWR4KTtcXG4tXFx0aWYgKCF2Y3B1IHx8ICF0b19odl92Y3B1KHZjcHUpKVxcbitcXHRpZiAoIXZjcHUpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbi1cXHRzeW5pYyA9IHRvX2h2X3N5bmljKHZjcHUpO1xcbi1cXHRyZXR1cm4gKHN5bmljLVxcdTAwM2VhY3RpdmUpID8gc3luaWMgOiBOVUxMO1xcbitcXG4rXFx0aHZfdmNwdSA9IHRvX2h2X3ZjcHVfc2FmZSh2Y3B1KTtcXG4rXFx0aWYgKCFodl92Y3B1KVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdHN5bmljID0gXFx1MDAyNmh2X3ZjcHUtXFx1MDAzZXN5bmljO1xcbitcXHRyZXR1cm4gUkVBRF9PTkNFKHN5bmljLVxcdTAwM2VhY3RpdmUpID8gc3luaWMgOiBOVUxMO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBrdm1faHZfbm90aWZ5X2Fja2VkX3NpbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgc2ludClcXG5AQCAtNTkzLDggKzU5OSw3IEBAIHN0YXRpYyB2b2lkIHN0aW1lcl9tYXJrX3BlbmRpbmcoc3RydWN0IGt2bV92Y3B1X2h2X3N0aW1lciAqc3RpbWVyLFxcbiB7XFxuIFxcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGh2X3N0aW1lcl90b192Y3B1KHN0aW1lcik7XFxuIFxcbi1cXHRzZXRfYml0KHN0aW1lci1cXHUwMDNlaW5kZXgsXFxuLVxcdFxcdHRvX2h2X3ZjcHUodmNwdSktXFx1MDAzZXN0aW1lcl9wZW5kaW5nX2JpdG1hcCk7XFxuK1xcdHNldF9iaXQoc3RpbWVyLVxcdTAwM2VpbmRleCwgdmNwdS1cXHUwMDNlYXJjaC5oeXBlcnYtXFx1MDAzZXN0aW1lcl9wZW5kaW5nX2JpdG1hcCk7XFxuIFxcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9IVl9TVElNRVIsIHZjcHUpO1xcbiBcXHRpZiAodmNwdV9raWNrKVxcbiBcXHRcXHRrdm1fdmNwdV9raWNrKHZjcHUpO1xcbkBAIC02MDgsOCArNjEzLDcgQEAgc3RhdGljIHZvaWQgc3RpbWVyX2NsZWFudXAoc3RydWN0IGt2bV92Y3B1X2h2X3N0aW1lciAqc3RpbWVyKVxcbiBcXHRcXHRcXHRcXHQgICAgc3RpbWVyLVxcdTAwM2VpbmRleCk7XFxuIFxcbiBcXHRocnRpbWVyX2NhbmNlbChcXHUwMDI2c3RpbWVyLVxcdTAwM2V0aW1lcik7XFxuLVxcdGNsZWFyX2JpdChzdGltZXItXFx1MDAzZWluZGV4LFxcbi1cXHRcXHQgIHRvX2h2X3ZjcHUodmNwdSktXFx1MDAzZXN0aW1lcl9wZW5kaW5nX2JpdG1hcCk7XFxuK1xcdGNsZWFyX2JpdChzdGltZXItXFx1MDAzZWluZGV4LCB2Y3B1LVxcdTAwM2VhcmNoLmh5cGVydi1cXHUwMDNlc3RpbWVyX3BlbmRpbmdfYml0bWFwKTtcXG4gXFx0c3RpbWVyLVxcdTAwM2Vtc2dfcGVuZGluZyA9IGZhbHNlO1xcbiBcXHRzdGltZXItXFx1MDAzZWV4cF90aW1lID0gMDtcXG4gfVxcbkBAIC05NzIsNyArOTc2LDYgQEAgaW50IGt2bV9odl92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRpZiAoIWh2X3ZjcHUpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4tXFx0dmNwdS1cXHUwMDNlYXJjaC5oeXBlcnYgPSBodl92Y3B1O1xcbiBcXHRodl92Y3B1LVxcdTAwM2V2Y3B1ID0gdmNwdTtcXG4gXFxuIFxcdHN5bmljX2luaXQoXFx1MDAyNmh2X3ZjcHUtXFx1MDAzZXN5bmljKTtcXG5AQCAtOTg4LDYgKzk5MSwxNCBAQCBpbnQga3ZtX2h2X3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZodl92Y3B1LVxcdTAwM2V0bGJfZmx1c2hfZmlmb1tpXS53cml0ZV9sb2NrKTtcXG4gXFx0fVxcbiBcXG4rXFx0LypcXG4rXFx0ICogRW5zdXJlIHRoZSBzdHJ1Y3R1cmUgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGl0J3MgdmlzaWJsZSB0b1xcbitcXHQgKiBvdGhlciB0YXNrcywgYXMgbXVjaCBvZiB0aGUgc3RhdGUgY2FuIGJlIGxlZ2FsbHkgYWNjZXNzZWQgd2l0aG91dFxcbitcXHQgKiBob2xkaW5nIHZjcHUtXFx1MDAzZW11dGV4LlxcbitcXHQgKlxcbitcXHQgKiBQYWlycyB3aXRoIHRoZSBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gdG9faHZfdmNwdV9zYWZlKCkuXFxuK1xcdCAqL1xcbitcXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5oeXBlcnYsIGh2X3ZjcHUpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtMTAwMiw3ICsxMDEzLDcgQEAgaW50IGt2bV9odl9hY3RpdmF0ZV9zeW5pYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZG9udF96ZXJvX3N5bmljX3BhZ2VzKVxcbiBcXG4gXFx0c3luaWMgPSB0b19odl9zeW5pYyh2Y3B1KTtcXG4gXFxuLVxcdHN5bmljLVxcdTAwM2VhY3RpdmUgPSB0cnVlO1xcbitcXHRXUklURV9PTkNFKHN5bmljLVxcdTAwM2VhY3RpdmUsIHRydWUpO1xcbiBcXHRzeW5pYy1cXHUwMDNlZG9udF96ZXJvX3N5bmljX3BhZ2VzID0gZG9udF96ZXJvX3N5bmljX3BhZ2VzO1xcbiBcXHRzeW5pYy1cXHUwMDNlY29udHJvbCA9IEhWX1NZTklDX0NPTlRST0xfRU5BQkxFO1xcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMTkzNSwxNCArMTk0NiwxNCBAQCBzdGF0aWMgaW50IGt2bV9odl9nZXRfdGxiX2ZsdXNoX2VudHJpZXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2h2X2hjYWxsICpoY1xcbiBcXHRyZXR1cm4ga3ZtX2h2X2dldF9oY19kYXRhKGt2bSwgaGMsIGhjLVxcdTAwM2VyZXBfY250LCBoYy1cXHUwMDNlcmVwX2NudCwgZW50cmllcyk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGh2X3RsYl9mbHVzaF9lbnF1ZXVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tXFx0XFx0XFx0XFx0IHN0cnVjdCBrdm1fdmNwdV9odl90bGJfZmx1c2hfZmlmbyAqdGxiX2ZsdXNoX2ZpZm8sXFxuLVxcdFxcdFxcdFxcdCB1NjQgKmVudHJpZXMsIGludCBjb3VudClcXG4rc3RhdGljIHZvaWQgaHZfdGxiX2ZsdXNoX2VucXVldWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKmVudHJpZXMsIGludCBjb3VudCxcXG4rXFx0XFx0XFx0XFx0IGJvb2wgaXNfZ3Vlc3RfbW9kZSlcXG4ge1xcbi1cXHRzdHJ1Y3Qga3ZtX3ZjcHVfaHYgKmh2X3ZjcHUgPSB0b19odl92Y3B1KHZjcHUpO1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHVfaHZfdGxiX2ZsdXNoX2ZpZm8gKnRsYl9mbHVzaF9maWZvO1xcbiBcXHR1NjQgZmx1c2hfYWxsX2VudHJ5ID0gS1ZNX0hWX1RMQl9GTFVTSEFMTF9FTlRSWTtcXG4gXFxuLVxcdGlmICghaHZfdmNwdSlcXG4rXFx0dGxiX2ZsdXNoX2ZpZm8gPSBrdm1faHZfZ2V0X3RsYl9mbHVzaF9maWZvKHZjcHUsIGlzX2d1ZXN0X21vZGUpO1xcbitcXHRpZiAoIXRsYl9mbHVzaF9maWZvKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRzcGluX2xvY2soXFx1MDAyNnRsYl9mbHVzaF9maWZvLVxcdTAwM2V3cml0ZV9sb2NrKTtcXG5AQCAtMTk3MCwxNSArMTk4MSwxNiBAQCBzdGF0aWMgdm9pZCBodl90bGJfZmx1c2hfZW5xdWV1ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIGludCBrdm1faHZfdmNwdV9mbHVzaF90bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdHN0cnVjdCBrdm1fdmNwdV9odl90bGJfZmx1c2hfZmlmbyAqdGxiX2ZsdXNoX2ZpZm87XFxuLVxcdHN0cnVjdCBrdm1fdmNwdV9odiAqaHZfdmNwdSA9IHRvX2h2X3ZjcHUodmNwdSk7XFxuIFxcdHU2NCBlbnRyaWVzW0tWTV9IVl9UTEJfRkxVU0hfRklGT19TSVpFXTtcXG4gXFx0aW50IGksIGosIGNvdW50O1xcbiBcXHRndmFfdCBndmE7XFxuIFxcbi1cXHRpZiAoIXRkcF9lbmFibGVkIHx8ICFodl92Y3B1KVxcbitcXHRpZiAoIXRkcF9lbmFibGVkKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdHRsYl9mbHVzaF9maWZvID0ga3ZtX2h2X2dldF90bGJfZmx1c2hfZmlmbyh2Y3B1LCBpc19ndWVzdF9tb2RlKHZjcHUpKTtcXG4rXFx0aWYgKCF0bGJfZmx1c2hfZmlmbylcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbiBcXHRjb3VudCA9IGtmaWZvX291dChcXHUwMDI2dGxiX2ZsdXNoX2ZpZm8tXFx1MDAzZWVudHJpZXMsIGVudHJpZXMsIEtWTV9IVl9UTEJfRkxVU0hfRklGT19TSVpFKTtcXG4gXFxuQEAgLTIwMTcsNyArMjAyOSw2IEBAIHN0YXRpYyB1NjQga3ZtX2h2X2ZsdXNoX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1faHZfaGNhbGwgKmhjKVxcbiBcXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVxcdTAwM2Vrdm07XFxuIFxcdHN0cnVjdCBodl90bGJfZmx1c2hfZXggZmx1c2hfZXg7XFxuIFxcdHN0cnVjdCBodl90bGJfZmx1c2ggZmx1c2g7XFxuLVxcdHN0cnVjdCBrdm1fdmNwdV9odl90bGJfZmx1c2hfZmlmbyAqdGxiX2ZsdXNoX2ZpZm87XFxuIFxcdC8qXFxuIFxcdCAqIE5vcm1hbGx5LCB0aGVyZSBjYW4gYmUgbm8gbW9yZSB0aGFuICdLVk1fSFZfVExCX0ZMVVNIX0ZJRk9fU0laRSdcXG4gXFx0ICogZW50cmllcyBvbiB0aGUgVExCIGZsdXNoIGZpZm8uIFRoZSBsYXN0IGVudHJ5LCBob3dldmVyLCBuZWVkcyB0byBiZVxcbkBAIC0yMTQ0LDExICsyMTU1LDggQEAgc3RhdGljIHU2NCBrdm1faHZfZmx1c2hfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9odl9oY2FsbCAqaGMpXFxuIFxcdCAqIGFuYWx5emUgaXQgaGVyZSwgZmx1c2ggVExCIHJlZ2FyZGxlc3Mgb2YgdGhlIHNwZWNpZmllZCBhZGRyZXNzIHNwYWNlLlxcbiBcXHQgKi9cXG4gXFx0aWYgKGFsbF9jcHVzIFxcdTAwMjZcXHUwMDI2ICFpc19ndWVzdF9tb2RlKHZjcHUpKSB7XFxuLVxcdFxcdGt2bV9mb3JfZWFjaF92Y3B1KGksIHYsIGt2bSkge1xcbi1cXHRcXHRcXHR0bGJfZmx1c2hfZmlmbyA9IGt2bV9odl9nZXRfdGxiX2ZsdXNoX2ZpZm8odiwgZmFsc2UpO1xcbi1cXHRcXHRcXHRodl90bGJfZmx1c2hfZW5xdWV1ZSh2LCB0bGJfZmx1c2hfZmlmbyxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICB0bGJfZmx1c2hfZW50cmllcywgaGMtXFx1MDAzZXJlcF9jbnQpO1xcbi1cXHRcXHR9XFxuK1xcdFxcdGt2bV9mb3JfZWFjaF92Y3B1KGksIHYsIGt2bSlcXG4rXFx0XFx0XFx0aHZfdGxiX2ZsdXNoX2VucXVldWUodiwgdGxiX2ZsdXNoX2VudHJpZXMsIGhjLVxcdTAwM2VyZXBfY250LCBmYWxzZSk7XFxuIFxcbiBcXHRcXHRrdm1fbWFrZV9hbGxfY3B1c19yZXF1ZXN0KGt2bSwgS1ZNX1JFUV9IVl9UTEJfRkxVU0gpO1xcbiBcXHR9IGVsc2UgaWYgKCFpc19ndWVzdF9tb2RlKHZjcHUpKSB7XFxuQEAgLTIxNTgsOSArMjE2Niw3IEBAIHN0YXRpYyB1NjQga3ZtX2h2X2ZsdXNoX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1faHZfaGNhbGwgKmhjKVxcbiBcXHRcXHRcXHR2ID0ga3ZtX2dldF92Y3B1KGt2bSwgaSk7XFxuIFxcdFxcdFxcdGlmICghdilcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdFxcdHRsYl9mbHVzaF9maWZvID0ga3ZtX2h2X2dldF90bGJfZmx1c2hfZmlmbyh2LCBmYWxzZSk7XFxuLVxcdFxcdFxcdGh2X3RsYl9mbHVzaF9lbnF1ZXVlKHYsIHRsYl9mbHVzaF9maWZvLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIHRsYl9mbHVzaF9lbnRyaWVzLCBoYy1cXHUwMDNlcmVwX2NudCk7XFxuK1xcdFxcdFxcdGh2X3RsYl9mbHVzaF9lbnF1ZXVlKHYsIHRsYl9mbHVzaF9lbnRyaWVzLCBoYy1cXHUwMDNlcmVwX2NudCwgZmFsc2UpO1xcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRrdm1fbWFrZV92Y3B1c19yZXF1ZXN0X21hc2soa3ZtLCBLVk1fUkVRX0hWX1RMQl9GTFVTSCwgdmNwdV9tYXNrKTtcXG5AQCAtMjE3MCw3ICsyMTc2LDcgQEAgc3RhdGljIHU2NCBrdm1faHZfZmx1c2hfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9odl9oY2FsbCAqaGMpXFxuIFxcdFxcdGJpdG1hcF96ZXJvKHZjcHVfbWFzaywgS1ZNX01BWF9WQ1BVUyk7XFxuIFxcbiBcXHRcXHRrdm1fZm9yX2VhY2hfdmNwdShpLCB2LCBrdm0pIHtcXG4tXFx0XFx0XFx0aHZfdiA9IHRvX2h2X3ZjcHUodik7XFxuK1xcdFxcdFxcdGh2X3YgPSB0b19odl92Y3B1X3NhZmUodik7XFxuIFxcbiBcXHRcXHRcXHQvKlxcbiBcXHRcXHRcXHQgKiBUaGUgZm9sbG93aW5nIGNoZWNrIHJhY2VzIHdpdGggbmVzdGVkIHZDUFVzIGVudGVyaW5nL2V4aXRpbmdcXG5AQCAtMjE5MSw5ICsyMTk3LDcgQEAgc3RhdGljIHU2NCBrdm1faHZfZmx1c2hfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9odl9oY2FsbCAqaGMpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0XFx0X19zZXRfYml0KGksIHZjcHVfbWFzayk7XFxuLVxcdFxcdFxcdHRsYl9mbHVzaF9maWZvID0ga3ZtX2h2X2dldF90bGJfZmx1c2hfZmlmbyh2LCB0cnVlKTtcXG4tXFx0XFx0XFx0aHZfdGxiX2ZsdXNoX2VucXVldWUodiwgdGxiX2ZsdXNoX2ZpZm8sXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgdGxiX2ZsdXNoX2VudHJpZXMsIGhjLVxcdTAwM2VyZXBfY250KTtcXG4rXFx0XFx0XFx0aHZfdGxiX2ZsdXNoX2VucXVldWUodiwgdGxiX2ZsdXNoX2VudHJpZXMsIGhjLVxcdTAwM2VyZXBfY250LCB0cnVlKTtcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0a3ZtX21ha2VfdmNwdXNfcmVxdWVzdF9tYXNrKGt2bSwgS1ZNX1JFUV9IVl9UTEJfRkxVU0gsIHZjcHVfbWFzayk7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9oeXBlcnYuaCBiL2FyY2gveDg2L2t2bS9oeXBlcnYuaFxcbmluZGV4IDFjOGY3YWFhYjA2M2QwLi4zN2EwYmNmMDNlMjgxNiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmhcXG5AQCAtNjIsOCArNjIsMjIgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX2h2ICp0b19rdm1faHYoc3RydWN0IGt2bSAqa3ZtKVxcbiBcXHRyZXR1cm4gXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5oeXBlcnY7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV92Y3B1X2h2ICp0b19odl92Y3B1X3NhZmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIEVuc3VyZSB0aGUgSHlwZXJWIHN0cnVjdHVyZSBpcyBmdWxseSBpbml0aWFsaXplZCB3aGVuIGFjY2Vzc2luZyBpdFxcbitcXHQgKiB3aXRob3V0IGhvbGRpbmcgdmNwdS1cXHUwMDNlbXV0ZXggKG9yIHNvbWUgb3RoZXIgZ3VhcmFudGVlIHRoYXQgS1ZNIGNhbid0XFxuK1xcdCAqIGNvbmN1cnJlbnRseSBpbnN0YW50aWF0ZSB0aGUgc3RydWN0dXJlKS5cXG4rXFx0ICpcXG4rXFx0ICogUGFpcnMgd2l0aCB0aGUgc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBrdm1faHZfdmNwdV9pbml0KCkuXFxuK1xcdCAqL1xcbitcXHRyZXR1cm4gc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5oeXBlcnYpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1fdmNwdV9odiAqdG9faHZfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4rXFx0a3ZtX2xvY2tkZXBfYXNzZXJ0X3ZjcHVfaXNfbG9ja2VkX29yX3VucmVhY2hhYmxlKHZjcHUpO1xcbitcXG4gXFx0cmV0dXJuIHZjcHUtXFx1MDAzZWFyY2guaHlwZXJ2O1xcbiB9XFxuIFxcbkBAIC04OCw3ICsxMDIsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1faHZfc3luZGJnICp0b19odl9zeW5kYmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXG4gc3RhdGljIGlubGluZSB1MzIga3ZtX2h2X2dldF92cGluZGV4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbi1cXHRzdHJ1Y3Qga3ZtX3ZjcHVfaHYgKmh2X3ZjcHUgPSB0b19odl92Y3B1KHZjcHUpO1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHVfaHYgKmh2X3ZjcHUgPSB0b19odl92Y3B1X3NhZmUodmNwdSk7XFxuIFxcbiBcXHRyZXR1cm4gaHZfdmNwdSA/IGh2X3ZjcHUtXFx1MDAzZXZwX2luZGV4IDogdmNwdS1cXHUwMDNldmNwdV9pZHg7XFxuIH1cXG5AQCAtMTQyLDcgKzE1Niw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV92Y3B1ICpodl9zdGltZXJfdG9fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltXFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wga3ZtX2h2X2hhc19zdGltZXJfcGVuZGluZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4tXFx0c3RydWN0IGt2bV92Y3B1X2h2ICpodl92Y3B1ID0gdG9faHZfdmNwdSh2Y3B1KTtcXG4rXFx0c3RydWN0IGt2bV92Y3B1X2h2ICpodl92Y3B1ID0gdG9faHZfdmNwdV9zYWZlKHZjcHUpO1xcbiBcXG4gXFx0aWYgKCFodl92Y3B1KVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuQEAgLTE5OCwxMCArMjEyLDEzIEBAIGludCBrdm1fZ2V0X2h2X2NwdWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9jcHVpZDIgKmNwdWlkLFxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1fdmNwdV9odl90bGJfZmx1c2hfZmlmbyAqa3ZtX2h2X2dldF90bGJfZmx1c2hfZmlmbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGJvb2wgaXNfZ3Vlc3RfbW9kZSlcXG4ge1xcbi1cXHRzdHJ1Y3Qga3ZtX3ZjcHVfaHYgKmh2X3ZjcHUgPSB0b19odl92Y3B1KHZjcHUpO1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHVfaHYgKmh2X3ZjcHUgPSB0b19odl92Y3B1X3NhZmUodmNwdSk7XFxuIFxcdGludCBpID0gaXNfZ3Vlc3RfbW9kZSA/IEhWX0wyX1RMQl9GTFVTSF9GSUZPIDpcXG4gXFx0XFx0XFx0XFx0SFZfTDFfVExCX0ZMVVNIX0ZJRk87XFxuIFxcbitcXHRpZiAoIWh2X3ZjcHUpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4gXFx0cmV0dXJuIFxcdTAwMjZodl92Y3B1LVxcdTAwM2V0bGJfZmx1c2hfZmlmb1tpXTtcXG4gfVxcbiBcXG5AQCAtMjA5LDEwICsyMjYsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIGt2bV9odl92Y3B1X3B1cmdlX2ZsdXNoX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0c3RydWN0IGt2bV92Y3B1X2h2X3RsYl9mbHVzaF9maWZvICp0bGJfZmx1c2hfZmlmbztcXG4gXFxuLVxcdGlmICghdG9faHZfdmNwdSh2Y3B1KSB8fCAha3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9IVl9UTEJfRkxVU0gsIHZjcHUpKVxcbitcXHRpZiAoIWt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfSFZfVExCX0ZMVVNILCB2Y3B1KSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0dGxiX2ZsdXNoX2ZpZm8gPSBrdm1faHZfZ2V0X3RsYl9mbHVzaF9maWZvKHZjcHUsIGlzX2d1ZXN0X21vZGUodmNwdSkpO1xcbitcXHRpZiAoIXRsYl9mbHVzaF9maWZvKVxcbitcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRrZmlmb19yZXNldF9vdXQoXFx1MDAyNnRsYl9mbHVzaF9maWZvLVxcdTAwM2VlbnRyaWVzKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaFxcbmluZGV4IDZkNmNkNTkwNGRkZjY2Li5jNmRlODQ4YmQ5Y2VkNSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaFxcbkBAIC01NywxNiArNTcsMTQgQEAgYm9vbCBuZXN0ZWRfdm14X2NoZWNrX2lvX2JpdG1hcHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgcG9ydCxcXG4gXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHZtY3MxMiAqZ2V0X3ZtY3MxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4tXFx0bG9ja2RlcF9hc3NlcnRfb25jZShsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNnZjcHUtXFx1MDAzZW11dGV4KSB8fFxcbi1cXHRcXHRcXHQgICAgIXJlZmNvdW50X3JlYWQoXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNldXNlcnNfY291bnQpKTtcXG4rXFx0a3ZtX2xvY2tkZXBfYXNzZXJ0X3ZjcHVfaXNfbG9ja2VkX29yX3VucmVhY2hhYmxlKHZjcHUpO1xcbiBcXG4gXFx0cmV0dXJuIHRvX3ZteCh2Y3B1KS1cXHUwMDNlbmVzdGVkLmNhY2hlZF92bWNzMTI7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHZtY3MxMiAqZ2V0X3NoYWRvd192bWNzMTIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuLVxcdGxvY2tkZXBfYXNzZXJ0X29uY2UobG9ja2RlcF9pc19oZWxkKFxcdTAwMjZ2Y3B1LVxcdTAwM2VtdXRleCkgfHxcXG4tXFx0XFx0XFx0ICAgICFyZWZjb3VudF9yZWFkKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZXVzZXJzX2NvdW50KSk7XFxuK1xcdGt2bV9sb2NrZGVwX2Fzc2VydF92Y3B1X2lzX2xvY2tlZF9vcl91bnJlYWNoYWJsZSh2Y3B1KTtcXG4gXFxuIFxcdHJldHVybiB0b192bXgodmNwdSktXFx1MDAzZW5lc3RlZC5jYWNoZWRfc2hhZG93X3ZtY3MxMjtcXG4gfVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veGVuLmMgYi9hcmNoL3g4Ni9rdm0veGVuLmNcXG5pbmRleCA2OTRiMzFjMWZjYzlhZi4uZGIxMGYxMmQxMGNmOGIgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3hlbi5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3hlbi5jXFxuQEAgLTIyLDYgKzIyLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3hlbi9pbnRlcmZhY2UvdmVyc2lvbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjeGVuL2ludGVyZmFjZS9ldmVudF9jaGFubmVsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2N4ZW4vaW50ZXJmYWNlL3NjaGVkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N4ZW4veGVuLW9wcy5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS94ZW4vY3B1aWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9wdmNsb2NrLmhcXHUwMDNlXFxuQEAgLTE2MTAsMTMgKzE2MTEsMTYgQEAgc3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF92Y3B1X29wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSwgaW50IGNtZCxcXG4gXFx0aWYgKCFrdm1feGVuX3RpbWVyX2VuYWJsZWQodmNwdSkpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuK1xcdGlmICh2Y3B1LVxcdTAwM2VhcmNoLnhlbi52Y3B1X2lkID09IFhFTl9WQ1BVX0lEX0lOVkFMSUQpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmICh2Y3B1LVxcdTAwM2VhcmNoLnhlbi52Y3B1X2lkICE9IHZjcHVfaWQpIHtcXG4rXFx0XFx0KnIgPSAtRUlOVkFMO1xcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0fVxcbitcXG4gXFx0c3dpdGNoIChjbWQpIHtcXG4gXFx0Y2FzZSBWQ1BVT1Bfc2V0X3NpbmdsZXNob3RfdGltZXI6XFxuLVxcdFxcdGlmICh2Y3B1LVxcdTAwM2VhcmNoLnhlbi52Y3B1X2lkICE9IHZjcHVfaWQpIHtcXG4tXFx0XFx0XFx0KnIgPSAtRUlOVkFMO1xcbi1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tXFx0XFx0fVxcbi1cXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogVGhlIG9ubHkgZGlmZmVyZW5jZSBmb3IgMzItYml0IGNvbXBhdCBpcyB0aGUgNCBieXRlcyBvZlxcbiBcXHRcXHQgKiBwYWRkaW5nIGFmdGVyIHRoZSBpbnRlcmVzdGluZyBwYXJ0IG9mIHRoZSBzdHJ1Y3R1cmUuIFNvXFxuQEAgLTE2NDQsMTAgKzE2NDgsNiBAQCBzdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3ZjcHVfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLCBpbnQgY21kLFxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuIFxcdGNhc2UgVkNQVU9QX3N0b3Bfc2luZ2xlc2hvdF90aW1lcjpcXG4tXFx0XFx0aWYgKHZjcHUtXFx1MDAzZWFyY2gueGVuLnZjcHVfaWQgIT0gdmNwdV9pZCkge1xcbi1cXHRcXHRcXHQqciA9IC1FSU5WQUw7XFxuLVxcdFxcdFxcdHJldHVybiB0cnVlO1xcbi1cXHRcXHR9XFxuIFxcdFxcdGt2bV94ZW5fc3RvcF90aW1lcih2Y3B1KTtcXG4gXFx0XFx0KnIgPSAwO1xcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG5AQCAtMjI5OSw3ICsyMjk5LDcgQEAgc3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF9ldnRjaG5fc2VuZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBwYXJhbSwgdTY0ICpyKVxcbiBcXG4gdm9pZCBrdm1feGVuX2luaXRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4tXFx0dmNwdS1cXHUwMDNlYXJjaC54ZW4udmNwdV9pZCA9IHZjcHUtXFx1MDAzZXZjcHVfaWR4O1xcbitcXHR2Y3B1LVxcdTAwM2VhcmNoLnhlbi52Y3B1X2lkID0gWEVOX1ZDUFVfSURfSU5WQUxJRDtcXG4gXFx0dmNwdS1cXHUwMDNlYXJjaC54ZW4ucG9sbF9ldnRjaG4gPSAwO1xcbiBcXG4gXFx0dGltZXJfc2V0dXAoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gueGVuLnBvbGxfdGltZXIsIGNhbmNlbF9ldnRjaG5fcG9sbCwgMCk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxcbmluZGV4IGFiOGNmYWVjODJkMzFlLi4wYmRmYTM2OTkzNTI3ZSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcXG5AQCAtOTg5LDYgKzk4OSwxMyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1faW9fYnVzICprdm1fZ2V0X2J1cyhzdHJ1Y3Qga3ZtICprdm0sIGVudW0ga3ZtX2J1cyBpZHgpXFxuIFxcdFxcdFxcdFxcdFxcdCBsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfbG9jaykpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQga3ZtX2xvY2tkZXBfYXNzZXJ0X3ZjcHVfaXNfbG9ja2VkX29yX3VucmVhY2hhYmxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4re1xcbitcXHRsb2NrZGVwX2Fzc2VydF9vbmNlKGxvY2tkZXBfaXNfaGVsZChcXHUwMDI2dmNwdS1cXHUwMDNlbXV0ZXgpIHx8XFxuK1xcdFxcdFxcdCAgICB2Y3B1LVxcdTAwM2V2Y3B1X2lkeCBcXHUwMDNjIDAgfHxcXG4rXFx0XFx0XFx0ICAgICFyZWZjb3VudF9yZWFkKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZXVzZXJzX2NvdW50KSk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV92Y3B1ICprdm1fZ2V0X3ZjcHUoc3RydWN0IGt2bSAqa3ZtLCBpbnQgaSlcXG4ge1xcbiBcXHRpbnQgbnVtX3ZjcHVzID0gYXRvbWljX3JlYWQoXFx1MDAyNmt2bS1cXHUwMDNlb25saW5lX3ZjcHVzKTtcXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcXG5pbmRleCBlNDRjMjBjMDQ5NjEwZC4uOThkYTRjODg5ZmZjNmMgMTAwNjQ0XFxuLS0tIGEvdmlydC9rdm0va3ZtX21haW4uY1xcbisrKyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcXG5AQCAtNDE4OCw2ICs0MTg4LDggQEAgc3RhdGljIGludCBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGlkKVxcbiBcXHRcXHRnb3RvIHZjcHVfZGVjcmVtZW50O1xcbiBcXHR9XFxuIFxcbitcXHR2Y3B1LVxcdTAwM2V2Y3B1X2lkeCA9IC0xO1xcbitcXG4gXFx0QlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3Qga3ZtX3J1bikgXFx1MDAzZSBQQUdFX1NJWkUpO1xcbiBcXHRwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9aRVJPKTtcXG4gXFx0aWYgKCFwYWdlKSB7XFxuQEAgLTQyMTYsMTEgKzQyMTgsMTggQEAgc3RhdGljIGludCBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGlkKVxcbiBcXHRcXHRnb3RvIHVubG9ja192Y3B1X2Rlc3Ryb3k7XFxuIFxcdH1cXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFNldCB0aGUgdkNQVSdzIGluZGV4ICpiZWZvcmUqIHRoZSB2Q1BVIGlzIHJlYWNoYWJsZSBieSBvdGhlciB0YXNrcy5cXG4rXFx0ICogVW53aW5kIHRoZSBpbmRleCBiYWNrIHRvIC0xIG9uIGZhaWx1cmUgc28gdGhhdCBLVk0gY2FuIHVzZSB0aGUgaW5kZXhcXG4rXFx0ICogdG8gZGV0ZWN0IHRoYXQgdGhlIHZDUFUgaXMgdW5yZWFjaGFibGUsIGUuZy4gZm9yIGxvY2tkZXAgYXNzZXJ0cy5cXG4rXFx0ICovXFxuIFxcdHZjcHUtXFx1MDAzZXZjcHVfaWR4ID0gYXRvbWljX3JlYWQoXFx1MDAyNmt2bS1cXHUwMDNlb25saW5lX3ZjcHVzKTtcXG4gXFx0ciA9IHhhX2luc2VydChcXHUwMDI2a3ZtLVxcdTAwM2V2Y3B1X2FycmF5LCB2Y3B1LVxcdTAwM2V2Y3B1X2lkeCwgdmNwdSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gXFx0V0FSTl9PTl9PTkNFKHIgPT0gLUVCVVNZKTtcXG4tXFx0aWYgKHIpXFxuK1xcdGlmIChyKSB7XFxuK1xcdFxcdHZjcHUtXFx1MDAzZXZjcHVfaWR4ID0gLTE7XFxuIFxcdFxcdGdvdG8gdW5sb2NrX3ZjcHVfZGVzdHJveTtcXG4rXFx0fVxcbiBcXG4gXFx0LypcXG4gXFx0ICogTm93IGl0J3MgYWxsIHNldCB1cCwgbGV0IHVzZXJzcGFjZSByZWFjaCBpdC4gIEdyYWIgdGhlIHZDUFUncyBtdXRleFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjo1NDowNi4wNTk4NDUxMTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2MTIyMDYwMjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTV9IWVBFUlZcIixcbiAgICBcIktWTV9YRU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHVcIixcbiAgICBcImt2bV9odl92Y3B1X2luaXRcIixcbiAgICBcImt2bV94ZW5faGNhbGxfdmNwdV9vcFwiLFxuICAgIFwia3ZtX2h2X2ZsdXNoX3RsYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHJhY2UgY29uZGl0aW9ucyBhbmQgdW5pbml0aWFsaXplZCBhY2Nlc3NlcyBpbiBLVk0ncyB2Q1BVIGNyZWF0aW9uLCBIeXBlci1WIGVtdWxhdGlvbiwgYW5kIFhlbiBlbXVsYXRpb24uIEl0IG1vZGlmaWVzIGNvcmUgdkNQVSBpbml0aWFsaXphdGlvbiBsb2dpYyBhbmQgaHlwZXJjYWxsIGhhbmRsZXJzLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gZ3Vlc3QgdXNlcnNwYWNlIGFuZCBjYW4gYmUgdHJpZ2dlcmVkIGNvbmN1cnJlbnRseS4gRnV6emluZyBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoZXNlIGZpeGVzIGNvcnJlY3RseSBoYW5kbGUgY29uY3VycmVudCB2Q1BVIGNyZWF0aW9uIGFuZCBoeXBlcmNhbGxzIHdpdGhvdXQgaW50cm9kdWNpbmcgbmV3IHJhY2VzIG9yIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI4ODNmNTczMTMwYjUzYzJiNDg3ZWIxZjQ0NmI1YjRjYTc4M2RjOGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1biAyNSAyMjo1NDowMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9oeXBlcnYuYyBiL2FyY2gveDg2L2t2bS9oeXBlcnYuY1xuaW5kZXggMWVlMGQyM2Y4OTQ5NzQuLjlkMzhjYjY0NDY2OGRhIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL2h5cGVydi5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmNcbkBAIC0yMDYsMTQgKzIwNiwyMCBAQCBzdGF0aWMgc3RydWN0IGt2bV92Y3B1ICpnZXRfdmNwdV9ieV92cGlkeChzdHJ1Y3Qga3ZtICprdm0sIHUzMiB2cGlkeClcbiBcbiBzdGF0aWMgc3RydWN0IGt2bV92Y3B1X2h2X3N5bmljICpzeW5pY19nZXQoc3RydWN0IGt2bSAqa3ZtLCB1MzIgdnBpZHgpXG4ge1xuLVx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuIFx0c3RydWN0IGt2bV92Y3B1X2h2X3N5bmljICpzeW5pYztcbitcdHN0cnVjdCBrdm1fdmNwdV9odiAqaHZfdmNwdTtcbitcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiBcbiBcdHZjcHUgPSBnZXRfdmNwdV9ieV92cGlkeChrdm0sIHZwaWR4KTtcbi1cdGlmICghdmNwdSB8fCAhdG9faHZfdmNwdSh2Y3B1KSlcbitcdGlmICghdmNwdSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4tXHRzeW5pYyA9IHRvX2h2X3N5bmljKHZjcHUpO1xuLVx0cmV0dXJuIChzeW5pYy1cdTAwM2VhY3RpdmUpID8gc3luaWMgOiBOVUxMO1xuK1xuK1x0aHZfdmNwdSA9IHRvX2h2X3ZjcHVfc2FmZSh2Y3B1KTtcbitcdGlmICghaHZfdmNwdSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRzeW5pYyA9IFx1MDAyNmh2X3ZjcHUtXHUwMDNlc3luaWM7XG4rXHRyZXR1cm4gUkVBRF9PTkNFKHN5bmljLVx1MDAzZWFjdGl2ZSkgPyBzeW5pYyA6IE5VTEw7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGt2bV9odl9ub3RpZnlfYWNrZWRfc2ludChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBzaW50KVxuQEAgLTU5Myw4ICs1OTksNyBAQCBzdGF0aWMgdm9pZCBzdGltZXJfbWFya19wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdV9odl9zdGltZXIgKnN0aW1lcixcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBodl9zdGltZXJfdG9fdmNwdShzdGltZXIpO1xuIFxuLVx0c2V0X2JpdChzdGltZXItXHUwMDNlaW5kZXgsXG4tXHRcdHRvX2h2X3ZjcHUodmNwdSktXHUwMDNlc3RpbWVyX3BlbmRpbmdfYml0bWFwKTtcbitcdHNldF9iaXQoc3RpbWVyLVx1MDAzZWluZGV4LCB2Y3B1LVx1MDAzZWFyY2guaHlwZXJ2LVx1MDAzZXN0aW1lcl9wZW5kaW5nX2JpdG1hcCk7XG4gXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfSFZfU1RJTUVSLCB2Y3B1KTtcbiBcdGlmICh2Y3B1X2tpY2spXG4gXHRcdGt2bV92Y3B1X2tpY2sodmNwdSk7XG5AQCAtNjA4LDggKzYxMyw3IEBAIHN0YXRpYyB2b2lkIHN0aW1lcl9jbGVhbnVwKHN0cnVjdCBrdm1fdmNwdV9odl9zdGltZXIgKnN0aW1lcilcbiBcdFx0XHRcdCAgICBzdGltZXItXHUwMDNlaW5kZXgpO1xuIFxuIFx0aHJ0aW1lcl9jYW5jZWwoXHUwMDI2c3RpbWVyLVx1MDAzZXRpbWVyKTtcbi1cdGNsZWFyX2JpdChzdGltZXItXHUwMDNlaW5kZXgsXG4tXHRcdCAgdG9faHZfdmNwdSh2Y3B1KS1cdTAwM2VzdGltZXJfcGVuZGluZ19iaXRtYXApO1xuK1x0Y2xlYXJfYml0KHN0aW1lci1cdTAwM2VpbmRleCwgdmNwdS1cdTAwM2VhcmNoLmh5cGVydi1cdTAwM2VzdGltZXJfcGVuZGluZ19iaXRtYXApO1xuIFx0c3RpbWVyLVx1MDAzZW1zZ19wZW5kaW5nID0gZmFsc2U7XG4gXHRzdGltZXItXHUwMDNlZXhwX3RpbWUgPSAwO1xuIH1cbkBAIC05NzIsNyArOTc2LDYgQEAgaW50IGt2bV9odl92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKCFodl92Y3B1KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdHZjcHUtXHUwMDNlYXJjaC5oeXBlcnYgPSBodl92Y3B1O1xuIFx0aHZfdmNwdS1cdTAwM2V2Y3B1ID0gdmNwdTtcbiBcbiBcdHN5bmljX2luaXQoXHUwMDI2aHZfdmNwdS1cdTAwM2VzeW5pYyk7XG5AQCAtOTg4LDYgKzk5MSwxNCBAQCBpbnQga3ZtX2h2X3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNmh2X3ZjcHUtXHUwMDNldGxiX2ZsdXNoX2ZpZm9baV0ud3JpdGVfbG9jayk7XG4gXHR9XG4gXG4rXHQvKlxuK1x0ICogRW5zdXJlIHRoZSBzdHJ1Y3R1cmUgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGl0J3MgdmlzaWJsZSB0b1xuK1x0ICogb3RoZXIgdGFza3MsIGFzIG11Y2ggb2YgdGhlIHN0YXRlIGNhbiBiZSBsZWdhbGx5IGFjY2Vzc2VkIHdpdGhvdXRcbitcdCAqIGhvbGRpbmcgdmNwdS1cdTAwM2VtdXRleC5cbitcdCAqXG4rXHQgKiBQYWlycyB3aXRoIHRoZSBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gdG9faHZfdmNwdV9zYWZlKCkuXG4rXHQgKi9cbitcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5oeXBlcnYsIGh2X3ZjcHUpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTEwMDIsNyArMTAxMyw3IEBAIGludCBrdm1faHZfYWN0aXZhdGVfc3luaWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGRvbnRfemVyb19zeW5pY19wYWdlcylcbiBcbiBcdHN5bmljID0gdG9faHZfc3luaWModmNwdSk7XG4gXG4tXHRzeW5pYy1cdTAwM2VhY3RpdmUgPSB0cnVlO1xuK1x0V1JJVEVfT05DRShzeW5pYy1cdTAwM2VhY3RpdmUsIHRydWUpO1xuIFx0c3luaWMtXHUwMDNlZG9udF96ZXJvX3N5bmljX3BhZ2VzID0gZG9udF96ZXJvX3N5bmljX3BhZ2VzO1xuIFx0c3luaWMtXHUwMDNlY29udHJvbCA9IEhWX1NZTklDX0NPTlRST0xfRU5BQkxFO1xuIFx0cmV0dXJuIDA7XG5AQCAtMTkzNSwxNCArMTk0NiwxNCBAQCBzdGF0aWMgaW50IGt2bV9odl9nZXRfdGxiX2ZsdXNoX2VudHJpZXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2h2X2hjYWxsICpoY1xuIFx0cmV0dXJuIGt2bV9odl9nZXRfaGNfZGF0YShrdm0sIGhjLCBoYy1cdTAwM2VyZXBfY250LCBoYy1cdTAwM2VyZXBfY250LCBlbnRyaWVzKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgaHZfdGxiX2ZsdXNoX2VucXVldWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLVx0XHRcdFx0IHN0cnVjdCBrdm1fdmNwdV9odl90bGJfZmx1c2hfZmlmbyAqdGxiX2ZsdXNoX2ZpZm8sXG4tXHRcdFx0XHQgdTY0ICplbnRyaWVzLCBpbnQgY291bnQpXG4rc3RhdGljIHZvaWQgaHZfdGxiX2ZsdXNoX2VucXVldWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKmVudHJpZXMsIGludCBjb3VudCxcbitcdFx0XHRcdCBib29sIGlzX2d1ZXN0X21vZGUpXG4ge1xuLVx0c3RydWN0IGt2bV92Y3B1X2h2ICpodl92Y3B1ID0gdG9faHZfdmNwdSh2Y3B1KTtcbitcdHN0cnVjdCBrdm1fdmNwdV9odl90bGJfZmx1c2hfZmlmbyAqdGxiX2ZsdXNoX2ZpZm87XG4gXHR1NjQgZmx1c2hfYWxsX2VudHJ5ID0gS1ZNX0hWX1RMQl9GTFVTSEFMTF9FTlRSWTtcbiBcbi1cdGlmICghaHZfdmNwdSlcbitcdHRsYl9mbHVzaF9maWZvID0ga3ZtX2h2X2dldF90bGJfZmx1c2hfZmlmbyh2Y3B1LCBpc19ndWVzdF9tb2RlKTtcbitcdGlmICghdGxiX2ZsdXNoX2ZpZm8pXG4gXHRcdHJldHVybjtcbiBcbiBcdHNwaW5fbG9jayhcdTAwMjZ0bGJfZmx1c2hfZmlmby1cdTAwM2V3cml0ZV9sb2NrKTtcbkBAIC0xOTcwLDE1ICsxOTgxLDE2IEBAIHN0YXRpYyB2b2lkIGh2X3RsYl9mbHVzaF9lbnF1ZXVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBpbnQga3ZtX2h2X3ZjcHVfZmx1c2hfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHVfaHZfdGxiX2ZsdXNoX2ZpZm8gKnRsYl9mbHVzaF9maWZvO1xuLVx0c3RydWN0IGt2bV92Y3B1X2h2ICpodl92Y3B1ID0gdG9faHZfdmNwdSh2Y3B1KTtcbiBcdHU2NCBlbnRyaWVzW0tWTV9IVl9UTEJfRkxVU0hfRklGT19TSVpFXTtcbiBcdGludCBpLCBqLCBjb3VudDtcbiBcdGd2YV90IGd2YTtcbiBcbi1cdGlmICghdGRwX2VuYWJsZWQgfHwgIWh2X3ZjcHUpXG4rXHRpZiAoIXRkcF9lbmFibGVkKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdHRsYl9mbHVzaF9maWZvID0ga3ZtX2h2X2dldF90bGJfZmx1c2hfZmlmbyh2Y3B1LCBpc19ndWVzdF9tb2RlKHZjcHUpKTtcbitcdGlmICghdGxiX2ZsdXNoX2ZpZm8pXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0Y291bnQgPSBrZmlmb19vdXQoXHUwMDI2dGxiX2ZsdXNoX2ZpZm8tXHUwMDNlZW50cmllcywgZW50cmllcywgS1ZNX0hWX1RMQl9GTFVTSF9GSUZPX1NJWkUpO1xuIFxuQEAgLTIwMTcsNyArMjAyOSw2IEBAIHN0YXRpYyB1NjQga3ZtX2h2X2ZsdXNoX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1faHZfaGNhbGwgKmhjKVxuIFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cdTAwM2Vrdm07XG4gXHRzdHJ1Y3QgaHZfdGxiX2ZsdXNoX2V4IGZsdXNoX2V4O1xuIFx0c3RydWN0IGh2X3RsYl9mbHVzaCBmbHVzaDtcbi1cdHN0cnVjdCBrdm1fdmNwdV9odl90bGJfZmx1c2hfZmlmbyAqdGxiX2ZsdXNoX2ZpZm87XG4gXHQvKlxuIFx0ICogTm9ybWFsbHksIHRoZXJlIGNhbiBiZSBubyBtb3JlIHRoYW4gJ0tWTV9IVl9UTEJfRkxVU0hfRklGT19TSVpFJ1xuIFx0ICogZW50cmllcyBvbiB0aGUgVExCIGZsdXNoIGZpZm8uIFRoZSBsYXN0IGVudHJ5LCBob3dldmVyLCBuZWVkcyB0byBiZVxuQEAgLTIxNDQsMTEgKzIxNTUsOCBAQCBzdGF0aWMgdTY0IGt2bV9odl9mbHVzaF90bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2h2X2hjYWxsICpoYylcbiBcdCAqIGFuYWx5emUgaXQgaGVyZSwgZmx1c2ggVExCIHJlZ2FyZGxlc3Mgb2YgdGhlIHNwZWNpZmllZCBhZGRyZXNzIHNwYWNlLlxuIFx0ICovXG4gXHRpZiAoYWxsX2NwdXMgXHUwMDI2XHUwMDI2ICFpc19ndWVzdF9tb2RlKHZjcHUpKSB7XG4tXHRcdGt2bV9mb3JfZWFjaF92Y3B1KGksIHYsIGt2bSkge1xuLVx0XHRcdHRsYl9mbHVzaF9maWZvID0ga3ZtX2h2X2dldF90bGJfZmx1c2hfZmlmbyh2LCBmYWxzZSk7XG4tXHRcdFx0aHZfdGxiX2ZsdXNoX2VucXVldWUodiwgdGxiX2ZsdXNoX2ZpZm8sXG4tXHRcdFx0XHRcdCAgICAgdGxiX2ZsdXNoX2VudHJpZXMsIGhjLVx1MDAzZXJlcF9jbnQpO1xuLVx0XHR9XG4rXHRcdGt2bV9mb3JfZWFjaF92Y3B1KGksIHYsIGt2bSlcbitcdFx0XHRodl90bGJfZmx1c2hfZW5xdWV1ZSh2LCB0bGJfZmx1c2hfZW50cmllcywgaGMtXHUwMDNlcmVwX2NudCwgZmFsc2UpO1xuIFxuIFx0XHRrdm1fbWFrZV9hbGxfY3B1c19yZXF1ZXN0KGt2bSwgS1ZNX1JFUV9IVl9UTEJfRkxVU0gpO1xuIFx0fSBlbHNlIGlmICghaXNfZ3Vlc3RfbW9kZSh2Y3B1KSkge1xuQEAgLTIxNTgsOSArMjE2Niw3IEBAIHN0YXRpYyB1NjQga3ZtX2h2X2ZsdXNoX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1faHZfaGNhbGwgKmhjKVxuIFx0XHRcdHYgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCBpKTtcbiBcdFx0XHRpZiAoIXYpXG4gXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHR0bGJfZmx1c2hfZmlmbyA9IGt2bV9odl9nZXRfdGxiX2ZsdXNoX2ZpZm8odiwgZmFsc2UpO1xuLVx0XHRcdGh2X3RsYl9mbHVzaF9lbnF1ZXVlKHYsIHRsYl9mbHVzaF9maWZvLFxuLVx0XHRcdFx0XHQgICAgIHRsYl9mbHVzaF9lbnRyaWVzLCBoYy1cdTAwM2VyZXBfY250KTtcbitcdFx0XHRodl90bGJfZmx1c2hfZW5xdWV1ZSh2LCB0bGJfZmx1c2hfZW50cmllcywgaGMtXHUwMDNlcmVwX2NudCwgZmFsc2UpO1xuIFx0XHR9XG4gXG4gXHRcdGt2bV9tYWtlX3ZjcHVzX3JlcXVlc3RfbWFzayhrdm0sIEtWTV9SRVFfSFZfVExCX0ZMVVNILCB2Y3B1X21hc2spO1xuQEAgLTIxNzAsNyArMjE3Niw3IEBAIHN0YXRpYyB1NjQga3ZtX2h2X2ZsdXNoX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1faHZfaGNhbGwgKmhjKVxuIFx0XHRiaXRtYXBfemVybyh2Y3B1X21hc2ssIEtWTV9NQVhfVkNQVVMpO1xuIFxuIFx0XHRrdm1fZm9yX2VhY2hfdmNwdShpLCB2LCBrdm0pIHtcbi1cdFx0XHRodl92ID0gdG9faHZfdmNwdSh2KTtcbitcdFx0XHRodl92ID0gdG9faHZfdmNwdV9zYWZlKHYpO1xuIFxuIFx0XHRcdC8qXG4gXHRcdFx0ICogVGhlIGZvbGxvd2luZyBjaGVjayByYWNlcyB3aXRoIG5lc3RlZCB2Q1BVcyBlbnRlcmluZy9leGl0aW5nXG5AQCAtMjE5MSw5ICsyMTk3LDcgQEAgc3RhdGljIHU2NCBrdm1faHZfZmx1c2hfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9odl9oY2FsbCAqaGMpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0XHRfX3NldF9iaXQoaSwgdmNwdV9tYXNrKTtcbi1cdFx0XHR0bGJfZmx1c2hfZmlmbyA9IGt2bV9odl9nZXRfdGxiX2ZsdXNoX2ZpZm8odiwgdHJ1ZSk7XG4tXHRcdFx0aHZfdGxiX2ZsdXNoX2VucXVldWUodiwgdGxiX2ZsdXNoX2ZpZm8sXG4tXHRcdFx0XHRcdCAgICAgdGxiX2ZsdXNoX2VudHJpZXMsIGhjLVx1MDAzZXJlcF9jbnQpO1xuK1x0XHRcdGh2X3RsYl9mbHVzaF9lbnF1ZXVlKHYsIHRsYl9mbHVzaF9lbnRyaWVzLCBoYy1cdTAwM2VyZXBfY250LCB0cnVlKTtcbiBcdFx0fVxuIFxuIFx0XHRrdm1fbWFrZV92Y3B1c19yZXF1ZXN0X21hc2soa3ZtLCBLVk1fUkVRX0hWX1RMQl9GTFVTSCwgdmNwdV9tYXNrKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmggYi9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmhcbmluZGV4IDFjOGY3YWFhYjA2M2QwLi4zN2EwYmNmMDNlMjgxNiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9oeXBlcnYuaFxuKysrIGIvYXJjaC94ODYva3ZtL2h5cGVydi5oXG5AQCAtNjIsOCArNjIsMjIgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX2h2ICp0b19rdm1faHYoc3RydWN0IGt2bSAqa3ZtKVxuIFx0cmV0dXJuIFx1MDAyNmt2bS1cdTAwM2VhcmNoLmh5cGVydjtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX3ZjcHVfaHYgKnRvX2h2X3ZjcHVfc2FmZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0LypcbitcdCAqIEVuc3VyZSB0aGUgSHlwZXJWIHN0cnVjdHVyZSBpcyBmdWxseSBpbml0aWFsaXplZCB3aGVuIGFjY2Vzc2luZyBpdFxuK1x0ICogd2l0aG91dCBob2xkaW5nIHZjcHUtXHUwMDNlbXV0ZXggKG9yIHNvbWUgb3RoZXIgZ3VhcmFudGVlIHRoYXQgS1ZNIGNhbid0XG4rXHQgKiBjb25jdXJyZW50bHkgaW5zdGFudGlhdGUgdGhlIHN0cnVjdHVyZSkuXG4rXHQgKlxuK1x0ICogUGFpcnMgd2l0aCB0aGUgc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBrdm1faHZfdmNwdV9pbml0KCkuXG4rXHQgKi9cbitcdHJldHVybiBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5oeXBlcnYpO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1fdmNwdV9odiAqdG9faHZfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuK1x0a3ZtX2xvY2tkZXBfYXNzZXJ0X3ZjcHVfaXNfbG9ja2VkX29yX3VucmVhY2hhYmxlKHZjcHUpO1xuK1xuIFx0cmV0dXJuIHZjcHUtXHUwMDNlYXJjaC5oeXBlcnY7XG4gfVxuIFxuQEAgLTg4LDcgKzEwMiw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV9odl9zeW5kYmcgKnRvX2h2X3N5bmRiZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gc3RhdGljIGlubGluZSB1MzIga3ZtX2h2X2dldF92cGluZGV4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRzdHJ1Y3Qga3ZtX3ZjcHVfaHYgKmh2X3ZjcHUgPSB0b19odl92Y3B1KHZjcHUpO1xuK1x0c3RydWN0IGt2bV92Y3B1X2h2ICpodl92Y3B1ID0gdG9faHZfdmNwdV9zYWZlKHZjcHUpO1xuIFxuIFx0cmV0dXJuIGh2X3ZjcHUgPyBodl92Y3B1LVx1MDAzZXZwX2luZGV4IDogdmNwdS1cdTAwM2V2Y3B1X2lkeDtcbiB9XG5AQCAtMTQyLDcgKzE1Niw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV92Y3B1ICpodl9zdGltZXJfdG9fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltXG4gXG4gc3RhdGljIGlubGluZSBib29sIGt2bV9odl9oYXNfc3RpbWVyX3BlbmRpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHN0cnVjdCBrdm1fdmNwdV9odiAqaHZfdmNwdSA9IHRvX2h2X3ZjcHUodmNwdSk7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHVfaHYgKmh2X3ZjcHUgPSB0b19odl92Y3B1X3NhZmUodmNwdSk7XG4gXG4gXHRpZiAoIWh2X3ZjcHUpXG4gXHRcdHJldHVybiBmYWxzZTtcbkBAIC0xOTgsMTAgKzIxMiwxMyBAQCBpbnQga3ZtX2dldF9odl9jcHVpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fY3B1aWQyICpjcHVpZCxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1fdmNwdV9odl90bGJfZmx1c2hfZmlmbyAqa3ZtX2h2X2dldF90bGJfZmx1c2hfZmlmbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRcdFx0XHRcdFx0XHRcdFx0ICAgYm9vbCBpc19ndWVzdF9tb2RlKVxuIHtcbi1cdHN0cnVjdCBrdm1fdmNwdV9odiAqaHZfdmNwdSA9IHRvX2h2X3ZjcHUodmNwdSk7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHVfaHYgKmh2X3ZjcHUgPSB0b19odl92Y3B1X3NhZmUodmNwdSk7XG4gXHRpbnQgaSA9IGlzX2d1ZXN0X21vZGUgPyBIVl9MMl9UTEJfRkxVU0hfRklGTyA6XG4gXHRcdFx0XHRIVl9MMV9UTEJfRkxVU0hfRklGTztcbiBcbitcdGlmICghaHZfdmNwdSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4gXHRyZXR1cm4gXHUwMDI2aHZfdmNwdS1cdTAwM2V0bGJfZmx1c2hfZmlmb1tpXTtcbiB9XG4gXG5AQCAtMjA5LDEwICsyMjYsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIGt2bV9odl92Y3B1X3B1cmdlX2ZsdXNoX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IGt2bV92Y3B1X2h2X3RsYl9mbHVzaF9maWZvICp0bGJfZmx1c2hfZmlmbztcbiBcbi1cdGlmICghdG9faHZfdmNwdSh2Y3B1KSB8fCAha3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9IVl9UTEJfRkxVU0gsIHZjcHUpKVxuK1x0aWYgKCFrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX0hWX1RMQl9GTFVTSCwgdmNwdSkpXG4gXHRcdHJldHVybjtcbiBcbiBcdHRsYl9mbHVzaF9maWZvID0ga3ZtX2h2X2dldF90bGJfZmx1c2hfZmlmbyh2Y3B1LCBpc19ndWVzdF9tb2RlKHZjcHUpKTtcbitcdGlmICghdGxiX2ZsdXNoX2ZpZm8pXG4rXHRcdHJldHVybjtcbiBcbiBcdGtmaWZvX3Jlc2V0X291dChcdTAwMjZ0bGJfZmx1c2hfZmlmby1cdTAwM2VlbnRyaWVzKTtcbiB9XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaCBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmhcbmluZGV4IDZkNmNkNTkwNGRkZjY2Li5jNmRlODQ4YmQ5Y2VkNSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmhcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmhcbkBAIC01NywxNiArNTcsMTQgQEAgYm9vbCBuZXN0ZWRfdm14X2NoZWNrX2lvX2JpdG1hcHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgcG9ydCxcbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCB2bWNzMTIgKmdldF92bWNzMTIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdGxvY2tkZXBfYXNzZXJ0X29uY2UobG9ja2RlcF9pc19oZWxkKFx1MDAyNnZjcHUtXHUwMDNlbXV0ZXgpIHx8XG4tXHRcdFx0ICAgICFyZWZjb3VudF9yZWFkKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZXVzZXJzX2NvdW50KSk7XG4rXHRrdm1fbG9ja2RlcF9hc3NlcnRfdmNwdV9pc19sb2NrZWRfb3JfdW5yZWFjaGFibGUodmNwdSk7XG4gXG4gXHRyZXR1cm4gdG9fdm14KHZjcHUpLVx1MDAzZW5lc3RlZC5jYWNoZWRfdm1jczEyO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCB2bWNzMTIgKmdldF9zaGFkb3dfdm1jczEyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRsb2NrZGVwX2Fzc2VydF9vbmNlKGxvY2tkZXBfaXNfaGVsZChcdTAwMjZ2Y3B1LVx1MDAzZW11dGV4KSB8fFxuLVx0XHRcdCAgICAhcmVmY291bnRfcmVhZChcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2V1c2Vyc19jb3VudCkpO1xuK1x0a3ZtX2xvY2tkZXBfYXNzZXJ0X3ZjcHVfaXNfbG9ja2VkX29yX3VucmVhY2hhYmxlKHZjcHUpO1xuIFxuIFx0cmV0dXJuIHRvX3ZteCh2Y3B1KS1cdTAwM2VuZXN0ZWQuY2FjaGVkX3NoYWRvd192bWNzMTI7XG4gfVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ZW4uYyBiL2FyY2gveDg2L2t2bS94ZW4uY1xuaW5kZXggNjk0YjMxYzFmY2M5YWYuLmRiMTBmMTJkMTBjZjhiIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3hlbi5jXG4rKysgYi9hcmNoL3g4Ni9rdm0veGVuLmNcbkBAIC0yMiw2ICsyMiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjeGVuL2ludGVyZmFjZS92ZXJzaW9uLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N4ZW4vaW50ZXJmYWNlL2V2ZW50X2NoYW5uZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3hlbi9pbnRlcmZhY2Uvc2NoZWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3hlbi94ZW4tb3BzLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20veGVuL2NwdWlkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcHZjbG9jay5oXHUwMDNlXG5AQCAtMTYxMCwxMyArMTYxMSwxNiBAQCBzdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3ZjcHVfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLCBpbnQgY21kLFxuIFx0aWYgKCFrdm1feGVuX3RpbWVyX2VuYWJsZWQodmNwdSkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbitcdGlmICh2Y3B1LVx1MDAzZWFyY2gueGVuLnZjcHVfaWQgPT0gWEVOX1ZDUFVfSURfSU5WQUxJRClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKHZjcHUtXHUwMDNlYXJjaC54ZW4udmNwdV9pZCAhPSB2Y3B1X2lkKSB7XG4rXHRcdCpyID0gLUVJTlZBTDtcbitcdFx0cmV0dXJuIHRydWU7XG4rXHR9XG4rXG4gXHRzd2l0Y2ggKGNtZCkge1xuIFx0Y2FzZSBWQ1BVT1Bfc2V0X3NpbmdsZXNob3RfdGltZXI6XG4tXHRcdGlmICh2Y3B1LVx1MDAzZWFyY2gueGVuLnZjcHVfaWQgIT0gdmNwdV9pZCkge1xuLVx0XHRcdCpyID0gLUVJTlZBTDtcbi1cdFx0XHRyZXR1cm4gdHJ1ZTtcbi1cdFx0fVxuLVxuIFx0XHQvKlxuIFx0XHQgKiBUaGUgb25seSBkaWZmZXJlbmNlIGZvciAzMi1iaXQgY29tcGF0IGlzIHRoZSA0IGJ5dGVzIG9mXG4gXHRcdCAqIHBhZGRpbmcgYWZ0ZXIgdGhlIGludGVyZXN0aW5nIHBhcnQgb2YgdGhlIHN0cnVjdHVyZS4gU29cbkBAIC0xNjQ0LDEwICsxNjQ4LDYgQEAgc3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF92Y3B1X29wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSwgaW50IGNtZCxcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHRjYXNlIFZDUFVPUF9zdG9wX3NpbmdsZXNob3RfdGltZXI6XG4tXHRcdGlmICh2Y3B1LVx1MDAzZWFyY2gueGVuLnZjcHVfaWQgIT0gdmNwdV9pZCkge1xuLVx0XHRcdCpyID0gLUVJTlZBTDtcbi1cdFx0XHRyZXR1cm4gdHJ1ZTtcbi1cdFx0fVxuIFx0XHRrdm1feGVuX3N0b3BfdGltZXIodmNwdSk7XG4gXHRcdCpyID0gMDtcbiBcdFx0cmV0dXJuIHRydWU7XG5AQCAtMjI5OSw3ICsyMjk5LDcgQEAgc3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF9ldnRjaG5fc2VuZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBwYXJhbSwgdTY0ICpyKVxuIFxuIHZvaWQga3ZtX3hlbl9pbml0X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHZjcHUtXHUwMDNlYXJjaC54ZW4udmNwdV9pZCA9IHZjcHUtXHUwMDNldmNwdV9pZHg7XG4rXHR2Y3B1LVx1MDAzZWFyY2gueGVuLnZjcHVfaWQgPSBYRU5fVkNQVV9JRF9JTlZBTElEO1xuIFx0dmNwdS1cdTAwM2VhcmNoLnhlbi5wb2xsX2V2dGNobiA9IDA7XG4gXG4gXHR0aW1lcl9zZXR1cChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gueGVuLnBvbGxfdGltZXIsIGNhbmNlbF9ldnRjaG5fcG9sbCwgMCk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5pbmRleCBhYjhjZmFlYzgyZDMxZS4uMGJkZmEzNjk5MzUyN2UgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbisrKyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuQEAgLTk4OSw2ICs5ODksMTMgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX2lvX2J1cyAqa3ZtX2dldF9idXMoc3RydWN0IGt2bSAqa3ZtLCBlbnVtIGt2bV9idXMgaWR4KVxuIFx0XHRcdFx0XHQgbG9ja2RlcF9pc19oZWxkKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKSk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fbG9ja2RlcF9hc3NlcnRfdmNwdV9pc19sb2NrZWRfb3JfdW5yZWFjaGFibGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdGxvY2tkZXBfYXNzZXJ0X29uY2UobG9ja2RlcF9pc19oZWxkKFx1MDAyNnZjcHUtXHUwMDNlbXV0ZXgpIHx8XG4rXHRcdFx0ICAgIHZjcHUtXHUwMDNldmNwdV9pZHggXHUwMDNjIDAgfHxcbitcdFx0XHQgICAgIXJlZmNvdW50X3JlYWQoXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNldXNlcnNfY291bnQpKTtcbit9XG4rXG4gc3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX3ZjcHUgKmt2bV9nZXRfdmNwdShzdHJ1Y3Qga3ZtICprdm0sIGludCBpKVxuIHtcbiBcdGludCBudW1fdmNwdXMgPSBhdG9taWNfcmVhZChcdTAwMjZrdm0tXHUwMDNlb25saW5lX3ZjcHVzKTtcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uY1xuaW5kZXggZTQ0YzIwYzA0OTYxMGQuLjk4ZGE0Yzg4OWZmYzZjIDEwMDY0NFxuLS0tIGEvdmlydC9rdm0va3ZtX21haW4uY1xuKysrIGIvdmlydC9rdm0va3ZtX21haW4uY1xuQEAgLTQxODgsNiArNDE4OCw4IEBAIHN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBpZClcbiBcdFx0Z290byB2Y3B1X2RlY3JlbWVudDtcbiBcdH1cbiBcbitcdHZjcHUtXHUwMDNldmNwdV9pZHggPSAtMTtcbitcbiBcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IGt2bV9ydW4pIFx1MDAzZSBQQUdFX1NJWkUpO1xuIFx0cGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfWkVSTyk7XG4gXHRpZiAoIXBhZ2UpIHtcbkBAIC00MjE2LDExICs0MjE4LDE4IEBAIHN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBpZClcbiBcdFx0Z290byB1bmxvY2tfdmNwdV9kZXN0cm95O1xuIFx0fVxuIFxuK1x0LypcbitcdCAqIFNldCB0aGUgdkNQVSdzIGluZGV4ICpiZWZvcmUqIHRoZSB2Q1BVIGlzIHJlYWNoYWJsZSBieSBvdGhlciB0YXNrcy5cbitcdCAqIFVud2luZCB0aGUgaW5kZXggYmFjayB0byAtMSBvbiBmYWlsdXJlIHNvIHRoYXQgS1ZNIGNhbiB1c2UgdGhlIGluZGV4XG4rXHQgKiB0byBkZXRlY3QgdGhhdCB0aGUgdkNQVSBpcyB1bnJlYWNoYWJsZSwgZS5nLiBmb3IgbG9ja2RlcCBhc3NlcnRzLlxuK1x0ICovXG4gXHR2Y3B1LVx1MDAzZXZjcHVfaWR4ID0gYXRvbWljX3JlYWQoXHUwMDI2a3ZtLVx1MDAzZW9ubGluZV92Y3B1cyk7XG4gXHRyID0geGFfaW5zZXJ0KFx1MDAyNmt2bS1cdTAwM2V2Y3B1X2FycmF5LCB2Y3B1LVx1MDAzZXZjcHVfaWR4LCB2Y3B1LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0V0FSTl9PTl9PTkNFKHIgPT0gLUVCVVNZKTtcbi1cdGlmIChyKVxuK1x0aWYgKHIpIHtcbitcdFx0dmNwdS1cdTAwM2V2Y3B1X2lkeCA9IC0xO1xuIFx0XHRnb3RvIHVubG9ja192Y3B1X2Rlc3Ryb3k7XG4rXHR9XG4gXG4gXHQvKlxuIFx0ICogTm93IGl0J3MgYWxsIHNldCB1cCwgbGV0IHVzZXJzcGFjZSByZWFjaCBpdC4gIEdyYWIgdGhlIHZDUFUncyBtdXRleFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjI6NTQ6MDYuMDU5ODQ3NTgxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzY5NzczNzA3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2ggZm9yIEtWTSBWaXJ0dWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgXCJUaGlzIGlzIHRvdWNoaW5nIHNvbWUgY3JpdGljYWwgdmlydHVhbGl6YXRpb24gaW5mcmFzdHJ1Y3R1cmUuXCIgSXQgbG9va3MgbGlrZSBpdCdzIGEga2VybmVsIHBhdGNoIHRhcmdldGluZyBLVk0sIHNwZWNpZmljYWxseSB0aGUgZW11bGF0aW9uIGxheWVycyBmb3IgSHlwZXItViBhbmQgWGVuIG9uIHg4NiBhcmNoaXRlY3R1cmVzLiBJJ20gc2VlaW5nIGNoYW5nZXMgYWNyb3NzIGEgZmV3IGNvcmUgZmlsZXMsIG5hbWVseSBgaHlwZXJ2LmNgIGFuZCBgaHlwZXJ2LmhgIHdpdGhpbiB0aGUgYGFyY2gveDg2L2t2bWAgZGlyZWN0b3J5LiBUaGUgc3BlY2lmaWMgZnVuY3Rpb25zIGJlaW5nIG1vZGlmaWVkIOKAkyBgc3luaWNfZ2V0YCwgYHN0aW1lcl9tYXJrX3BlbmRpbmdgLCBga3ZtX2h2X3ZjcHVfaW5pdGAgZXRjLiAtIHN1Z2dlc3Qgd2UncmUgZGVhbGluZyB3aXRoIGlzc3VlcyByZWxhdGVkIHRvIGludGVycnVwdCBoYW5kbGluZywgdGltZXIgbWFuYWdlbWVudCwgYW5kIHZDUFUgaW5pdGlhbGl6YXRpb24gd2l0aGluIHRoZSBIeXBlci1WIGVudmlyb25tZW50LlxuXG5JJ20gYWxzbyBzZWVpbmcgYWx0ZXJhdGlvbnMgaW4gYGt2bV94ZW5faGNhbGxfdmNwdV9vcGAgYW5kIGBrdm1feGVuX2luaXRfdmNwdWAgd2l0aGluIGB4ZW4uY2AsIHdoaWNoIGNvbmZpcm1zIHRoZSBzY29wZSBleHRlbmRpbmcgdG8gWGVuIGVtdWxhdGlvbi4gVGhlIGBuZXN0ZWQuaGAgZmlsZSBhbmQgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYGdldF92bWNzMTJgIGFyZSBhbHNvIHByZXNlbnQsIHdoaWNoIG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gY2FwYWJpbGl0aWVzLiBBbmQsIGxvb2tpbmcgYXQgdGhlIGBrdm1faG9zdC5oYCBpbmNsdXNpb24gb2YgYGt2bV9sb2NrZGVwX2Fzc2VydF92Y3B1X2lzX2xvY2tlZF9vcl91bnJlYWNoYWJsZWAgc3VnZ2VzdHMgbG9jayBwcm90ZWN0aW9uIG1pZ2h0IGJlIGludm9sdmVkIHRvby5cblxuTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSByYWNlIGNvbmRpdGlvbiwgb3IgcGVyaGFwcyBzb21lIHByb2JsZW1zIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCB2Q1BVIHN0YXRlIGluIEh5cGVyLVYgb3IgaW5jb3JyZWN0IGB2Y3B1X2lkYCBoYW5kbGluZyBpbiBYZW4uIFRoYXQganVtcCB0byAgYHZjcHUtXHUwMDNldmNwdV9pZHggPSAtMWAgaW4gYGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdWAgYW5kIHRoZSB1c2Ugb2YgYHNtcF9sb2FkX2FjcXVpcmVgIGluIGB0b19odl92Y3B1X3NhZmVgIGhpbnRzIGF0IGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVsYXRlZCB0byBhIHZDUFUgaW5kZXggYXNzaWdubWVudCBhbmQgbWVtb3J5IGFjY2VzcyBvcmRlcmluZyBmb3Igc3luY2hyb25pemF0aW9uLiBcblxuVGhlIG5leHQgc3RlcCBpcyB0byBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uIHNldCB1cC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBLVk0gaXMgZW5hYmxlZCwgYW5kIHRoYXQgZWl0aGVyIHRoZSBIeXBlci1WIGFuZCBYZW4gZW11bGF0aW9uIHNldHRpbmdzIGFyZSBlbmFibGVkLiBTbywgYENPTkZJR19LVk1gLCBgQ09ORklHX0tWTV9JTlRFTGAsIGBDT05GSUdfS1ZNX0FNRGAsIGFuZCBgQ09ORklHX0tWTV9YRU5gIG11c3QgYmUgc2V0LiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgdG8gc2VlIHRoZSBzcGVjaWZpY3MgZm9yIEh5cGVyLVYgYW5kIFhlbiBjb25maWd1cmF0aW9ucy4gVGhpcyBpcyBhIHNvbGlkLCBmdW5jdGlvbmFsIGNoYW5nZSBhbmQgSSdsbCBuZWVkIHRvIHJldmlldyB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY3MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIyOjU0OjEzLjc1NzU4NzkxM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDk0MTQ0NTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9YRU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTkzPWNvbmZpZyBLVk1fSFlQRVJWXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA3OmNvbmZpZyBLVk1fWEVOXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjo1NDoxNC4xMDcwMDc4MTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTgxMTc1NjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBIeXBlcnZpc29yIEludGVyYWN0aW9ucyoqXG5cbkhtbSwgdGhpbmtpbmcgYWJvdXQgdGhpcyBwcm9ibGVtLCBteSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNoZWNrIGlmIGBLVk1fWEVOYCBhbmQgYEtWTV9IWVBFUlZgIGFyZSBpbnZvbHZlZCBpbiB0aGlzLiBXYWl0IGEgbWludXRl4oCmIEknbSBnZXR0aW5nIGFoZWFkIG9mIG15c2VsZiwgSSB0aG91Z2h0IGBLVk1fSFlQRVJWYCB3YXNuJ3QgYWN0dWFsbHkgYSBwcm9wZXIgY29uZmlnIG9wdGlvbiBpbiB0aGlzIGNvbnRleHQuIE9rYXksIHF1aWNrIHNhbml0eSBjaGVja+KApiBZZXAsIGl0IGxvb2tzIGxpa2UgaXQgKmlzKiBhIGNvbmZpZy4gTm93IEkgbmVlZCB0byBzZWUgZXhhY3RseSB3aGF0IHRoYXQgY29uZmlnIGVudGFpbHMuIFRpbWUgdG8gZGVsdmUgaW50byB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg3NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIyOjU0OjE3LjA4ODE4NTcyMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODYxNDU1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0hZUEVSVlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xODI9Y29uZmlnIEtWTV9TTU1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxOTM6Y29uZmlnIEtWTV9IWVBFUlZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTQtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjo1NDoxNy4xNjY4MDYxMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MDIzMTYwOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXRzIGluIEtWTTogSHlwZXItViBhbmQgWGVuKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYEtWTV9YRU5gIGFuZCBgS1ZNX0hZUEVSVmAgaW4gdGhlIEtWTSBjb25maWdzIOKAkyB0aGF0J3MgdGhlIGFyZWEgSSB3YW50IHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nLiBUaW1lIHRvIGh1bnQgZG93biBzb21lIGtleSBmdW5jdGlvbnMuXG5cbkZpcnN0LCBJJ3ZlIGdvdCBgYXJjaC94ODYva3ZtL2h5cGVydi5jYC4gTGV0J3Mgc2VlOiBJJ3ZlIGlkZW50aWZpZWQgYGt2bV9odl92Y3B1X2luaXRgLCBga3ZtX2h2X2FjdGl2YXRlX3N5bmljYCwgYGt2bV9odl92Y3B1X2ZsdXNoX3RsYmAsIGFuZCBga3ZtX2h2X2ZsdXNoX3RsYmAgYXMgcG90ZW50aWFsIGNhbmRpZGF0ZXMuIFRoZW4sIG92ZXIgaW4gYGFyY2gveDg2L2t2bS94ZW4uY2AsIEkndmUgZ290IGBrdm1feGVuX2hjYWxsX3ZjcHVfb3BgIGFuZCBga3ZtX3hlbl9pbml0X3ZjcHVgLiBGaW5hbGx5LCBJJ20gY2hlY2tpbmcgYHZpcnQva3ZtL2t2bV9tYWluLmNgIOKAkyBhbmQgYGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdWAgbG9va3MgbGlrZSBpdCBtaWdodCBiZSBpbnRlcmVzdGluZyB0b28uXG5cbk5vdywgYSBxdWljayBhc3Nlc3NtZW50IG9mIHRoZXNlIHBhdGhzLiBJJ20gZ29pbmcgdG8gZGV0ZXJtaW5lIGlmIHRoZXkncmUgY29uc2lkZXJlZCBob3QgcGF0aHMuIExvb2tpbmcgYXQgYGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdWAg4oCTIG5vdCBhIGhpZ2gtZnJlcXVlbmN5IGNhbGwuIGBrdm1faHZfdmNwdV9pbml0YCBpcyBhbHNvIG5vdCBhIGhvdCBwYXRoLiBga3ZtX3hlbl9oY2FsbF92Y3B1X29wYCBpcyBhIGh5cGVyY2FsbCwgc28gdGhhdCBvbmUgaXMgZGVmaW5pdGVseSBhIGdvb2QgdGFyZ2V0IHNpbmNlIGl0IG1pZ2h0IGJlIGNhbGxlZCBwcmV0dHkgb2Z0ZW4uIFNpbWlsYXJseSwgYGt2bV9odl9mbHVzaF90bGJgIGlzIGFsc28gYSBoeXBlcmNhbGwuXG5cblNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBga3ZtX2h2X2ZsdXNoX3RsYmAgYW5kIGBrdm1faHZfdmNwdV9mbHVzaF90bGJgLCB0aGV5J3JlIGRlZmluaXRlbHkgd29ydGggZXhwbG9yaW5nIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxOTcsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjI6NTQ6MjIuNTY5MTI1MTU5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5NTAyNDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9odl9mbHVzaF90bGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL2h5cGVydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9oeXBlcnYuYz0xOTgxPWludCBrdm1faHZfdmNwdV9mbHVzaF90bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTIwMjMtXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjIwMjQ6c3RhdGljIHU2NCBrdm1faHZfZmx1c2hfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9odl9oY2FsbCAqaGMpXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTIwMjUte1xcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTIwNzktXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjIwODA6XFx0XFx0dHJhY2Vfa3ZtX2h2X2ZsdXNoX3RsYihmbHVzaC5wcm9jZXNzb3JfbWFzayxcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMjA4MS1cXHRcXHRcXHRcXHQgICAgICAgZmx1c2guYWRkcmVzc19zcGFjZSwgZmx1c2guZmxhZ3MsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMjEwOS1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6MjExMDpcXHRcXHR0cmFjZV9rdm1faHZfZmx1c2hfdGxiX2V4KGZsdXNoX2V4Lmh2X3ZwX3NldC52YWxpZF9iYW5rX21hc2ssXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTIxMTEtXFx0XFx0XFx0XFx0XFx0ICBmbHVzaF9leC5odl92cF9zZXQuZm9ybWF0LFxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTIxODUtXFx0XFx0XFx0ICogcnVubmluZyBvbiB0aGUgc2FtZSBMMSB2Q1BVIGZyb20gdGhlIG1vbWVudCBvZiB0aGUgcmVxdWVzdCB1bnRpbFxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoyMTg2OlxcdFxcdFxcdCAqIGt2bV9odl9mbHVzaF90bGIoKSByZXR1cm5zLiBUTEIgaXMgZnVsbHkgZmx1c2hlZCBpbiBhbGwgb3RoZXJcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMjE4Ny1cXHRcXHRcXHQgKiBjYXNlcywgZS5nLiB3aGVuIHRoZSB0YXJnZXQgTDIgdkNQVSBtaWdyYXRlcyB0byBhIGRpZmZlcmVudCBMMVxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTI1Mzg9aW50IGt2bV9odl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTI2MzEtXFx0XFx0fVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoyNjMyOlxcdFxcdHJldCA9IGt2bV9odl9mbHVzaF90bGIodmNwdSwgXFx1MDAyNmhjKTtcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMjYzMy1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0yNjQ0LVxcdFxcdH1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6MjY0NTpcXHRcXHRyZXQgPSBrdm1faHZfZmx1c2hfdGxiKHZjcHUsIFxcdTAwMjZoYyk7XFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTI2NDYtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIyOjU0OjIyLjY0ODYzNDAzN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMDg2Mjk1ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEh5cGVyY2FsbCBJbXBsZW1lbnRhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gc2VlaW5nIGEgY29ubmVjdGlvbiBoZXJlIGJldHdlZW4gaG93IHRoZSBLVk0gaHlwZXJ2aXNvciBpbnRlcmFjdHMgd2l0aCBoYXJkd2FyZSB2aXJ0dWFsaXphdGlvbiBhbmQgaG93IGl0IG1pZ2h0IGJlIGVtdWxhdGluZyBvciBpbnRlcmFjdGluZyB3aXRoIFhlbi4gU3BlY2lmaWNhbGx5LCBga3ZtX2h2X2ZsdXNoX3RsYmAgaXMgYmVpbmcgaW52b2tlZCB0aHJvdWdoIGBrdm1faHZfaHlwZXJjYWxsYCwgd2hpY2ggbWFrZXMgc2Vuc2U7IFRMQiBmbHVzaGVzIGFyZSBmdW5kYW1lbnRhbCB0byBtYW5hZ2luZyB2aXJ0dWFsIG1lbW9yeSB3aXRoaW4gYSBoYXJkd2FyZS1hc3Npc3RlZCB2aXJ0dWFsaXphdGlvbiBlbnZpcm9ubWVudC4gVGhlbiwgb3ZlciBvbiB0aGUgWGVuIHNpZGUgb2YgdGhpbmdzLCBJJ20gbm90aW5nIHRoYXQgYGt2bV94ZW5faGNhbGxfdmNwdV9vcGAgaXMgY2FsbGVkIGZyb20gYGt2bV94ZW5faHlwZXJjYWxsYC4gVGhhdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB3YW50IHRvIGRpZyBpbnRvIHRoYXQgYGt2bV94ZW5faGNhbGxfdmNwdV9vcGAgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzIG9mIFhlbiBoeXBlcmNhbGwgaGFuZGxpbmcgaW4gdGhpcyBzcGVjaWZpYyBLVk0gY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvcGVyYXRpb25zIGFyZSBpbnZvbHZlZCBpbiBga3ZtX3hlbl9oY2FsbF92Y3B1X29wYCBhbmQgaG93IGl0IG1pZ2h0IGJlIGludGVyYWN0aW5nIHdpdGggdGhlIEtWTSBpbmZyYXN0cnVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2NDMsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjo1NDoyNS44NTcyNjY5ODlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjkzMTQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1feGVuX2hjYWxsX3ZjcHVfb3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3hlbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS94ZW4uYz0xNjAwPXN0cnVjdCBjb21wYXRfdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTYwNC1cXG5hcmNoL3g4Ni9rdm0veGVuLmM6MTYwNTpzdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3ZjcHVfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLCBpbnQgY21kLFxcbmFyY2gveDg2L2t2bS94ZW4uYy0xNjA2LVxcdFxcdFxcdFxcdCAgaW50IHZjcHVfaWQsIHU2NCBwYXJhbSwgdTY0ICpyKVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jPTE2NzQ9aW50IGt2bV94ZW5faHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy0xNzM2LVxcdGNhc2UgX19IWVBFUlZJU09SX3ZjcHVfb3A6XFxuYXJjaC94ODYva3ZtL3hlbi5jOjE3Mzc6XFx0XFx0aGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfdmNwdV9vcCh2Y3B1LCBsb25nbW9kZSwgcGFyYW1zWzBdLCBwYXJhbXNbMV0sXFxuYXJjaC94ODYva3ZtL3hlbi5jLTE3MzgtXFx0XFx0XFx0XFx0XFx0XFx0cGFyYW1zWzJdLCBcXHUwMDI2cik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIyOjU0OjI1Ljk5NDIwNzI3NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzE4MjUyNzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgZnJhbWVkIGFzIG15IGludGVybmFsIHRob3VnaHQgcHJvY2VzczpcblxuKip2Q1BVIEluaXRpYWxpemF0aW9uIFBhdGhzOiBBIFF1aWNrIFJldmlldyoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB2Q1BVIGNyZWF0aW9uIHdpdGhpbiB0aGUgS1ZNIGZyYW1ld29yay4gSXQgbG9va3MgbGlrZSBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YCBpcyB0aGUgY29yZSBmdW5jdGlvbiDigJMgdGhlIGVudHJ5IHBvaW50IGZvciBicmluZ2luZyBhIHZpcnR1YWwgQ1BVIGludG8gZXhpc3RlbmNlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGNoZWNrIGhvdyBoeXBlcnYgaW5pdGlhbGl6ZXMgYSB2Q1BVLCBhbmQgSSBzZWUgdGhhdCBpdCBjYWxscyBga3ZtX2h2X3ZjcHVfaW5pdGAuIFNpbWlsYXJseSwgeGVuIHVzZXMgYGt2bV94ZW5faW5pdF92Y3B1YC5cblxuR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgaHlwZXJ2IGNhbGxzLCBsZXQncyBkaXZlIGludG8gYGt2bV9odl92Y3B1X2luaXRgIGFuZCBnZXQgYSBzZW5zZSBmb3IgaG93IHRoYXQgaW5pdGlhbGl6YXRpb24gaXMgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyNjcsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjo1NDoyOS4zMTI0NjIzNTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2OTQ4NzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9odl92Y3B1X2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL2h5cGVydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9oeXBlcnYuYz05NTk9c3RhdGljIHZvaWQgc3RpbWVyX2luaXQoc3RydWN0IGt2bV92Y3B1X2h2X3N0aW1lciAqc3RpbWVyLCBpbnQgdGltZXJfaW5kZXgpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtOTY2LVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzo5Njc6aW50IGt2bV9odl92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy05Njgte1xcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTEwMDU9aW50IGt2bV9odl9hY3RpdmF0ZV9zeW5pYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZG9udF96ZXJvX3N5bmljX3BhZ2VzKVxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTEwMDktXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjEwMTA6XFx0ciA9IGt2bV9odl92Y3B1X2luaXQodmNwdSk7XFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTEwMTEtXFx0aWYgKHIpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9MTc2Mz1pbnQga3ZtX2h2X3NldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zciwgdTY0IGRhdGEsIGJvb2wgaG9zdClcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0xNzY5LVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoxNzcwOlxcdGlmIChrdm1faHZfdmNwdV9pbml0KHZjcHUpKVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0xNzcxLVxcdFxcdHJldHVybiAxO1xcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTE3ODQ9aW50IGt2bV9odl9nZXRfbXNyX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IsIHU2NCAqcGRhdGEsIGJvb2wgaG9zdClcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0xNzkwLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoxNzkxOlxcdGlmIChrdm1faHZfdmNwdV9pbml0KHZjcHUpKVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0xNzkyLVxcdFxcdHJldHVybiAxO1xcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTIzNjE9aW50IGt2bV9odl9zZXRfZW5mb3JjZV9jcHVpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZW5mb3JjZSlcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0yMzY3LVxcdFxcdGlmIChlbmZvcmNlKSB7XFxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjIzNjg6XFx0XFx0XFx0cmV0ID0ga3ZtX2h2X3ZjcHVfaW5pdCh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMjM2OS1cXHRcXHRcXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjo1NDoyOS4zOTk0MTk2MDNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgyMDQ1NDkxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBLVk0gVmlydHVhbCBDUFUgSW5pdGlhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBga3ZtX2h2X3ZjcHVfaW5pdGAgaXMgdGhlIGtleSBmdW5jdGlvbiB0cmlnZ2VyZWQgd2hlbiB3ZSdyZSBkZWFsaW5nIHdpdGggTW9kZWwgU3BlY2lmaWMgUmVnaXN0ZXIgKE1TUikgYWNjZXNzIG9yIHRoZSBlbmZvcmNlbWVudCBvZiBDUFUgSWRlbnRpZmljYXRpb24gKENQVUlEKSBpbnN0cnVjdGlvbnMuIE15IGZvY3VzIGhlcmUgaXMgb24gdW5kZXJzdGFuZGluZyBob3cgdGhlIHZpcnR1YWwgQ1BVIGlzIGluaXRpYWxpemVkIHdpdGhpbiB0aGUgS1ZNIGh5cGVydmlzb3IgY29udGV4dC5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIFhlbiBoeXBlcnZpc29yIGlzIGludGVyYWN0aW5nIHdpdGggdGhlc2UgaW5pdGlhbGl6YXRpb25zOyBJJ2xsIGNoZWNrIGBrdm1feGVuX2luaXRfdmNwdWAuIEZyb20gbXkgdW5kZXJzdGFuZGluZywgdGhpcyB3aWxsIGdpdmUgbWUgdGhlIGluc2lnaHRzIEkgbmVlZCB0byBzZWUgaWYgYW55IFhlbi1zcGVjaWZpYyBjb25maWd1cmF0aW9ucyBvciBhZGFwdGF0aW9ucyBhcmUgaGFwcGVuaW5nIGF0IHRoaXMgY3JpdGljYWwgc3RhZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjUzLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjI6NTQ6MzQuMjE5ODc2ODQ1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA2Njk0NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3hlbl9pbml0X3ZjcHVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3hlbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS94ZW4uYz0yMjY1PXN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfZXZ0Y2huX3NlbmQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcGFyYW0sIHU2NCAqcilcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy0yMjk5LVxcbmFyY2gveDg2L2t2bS94ZW4uYzoyMzAwOnZvaWQga3ZtX3hlbl9pbml0X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS94ZW4uYy0yMzAxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjI6NTQ6MzQuMzIwNTU0MzEzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4MzE1NDQxMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIHF1ZXN0aW9uOlxuXG4qKlRyYWNpbmcgdGhlIEV4ZWN1dGlvbiBQYXRoIG9mIGBrdm1feGVuX2luaXRfdmNwdWAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBga3ZtX3hlbl9pbml0X3ZjcHVgIGlzIGFjdHVhbGx5IGJlaW5nIGNhbGxlZC4gVGhhdCdzIHRoZSBjb3JlIHF1ZXN0aW9uIGhlcmUuIEknbSBnb2luZyB0byBzdGFydCBieSBydW5uaW5nIGEgcXVpY2sgc2VhcmNoLCBidXQgSSBrbm93IHRoaXMgaXNuJ3QgYWx3YXlzIGZvb2xwcm9vZiwgZXNwZWNpYWxseSBpbiBhIGNvZGViYXNlIGxpa2UgWGVuL0tWTSB3aGVyZSB0aGluZ3MgY2FuIGJlIGR5bmFtaWNhbGx5IGxpbmtlZCBvciBoYXZlIGluZGlyZWN0IGNhbGxzLiBJJ20gdGhpbmtpbmcgYWJvdXQgdXNpbmcgYGdyZXBgIG9yIGBjc2NvcGVgIGluaXRpYWxseSwgcHJvYmFibHkgd2l0aGluIHRoZSByZWxldmFudCBLVk0gYW5kIFhlbiBzb3VyY2UgZGlyZWN0b3JpZXMuXG5cbkJ1dCB3YWl0LCBldmVuIGEgdGV4dCBzZWFyY2ggbWlnaHQgbm90IGdldCBtZSB0aGUgZnVsbCBwaWN0dXJlLiBJIG5lZWQgdG8gY29uc2lkZXIgdGhhdCBpdCBtaWdodCBiZSBjYWxsZWQgaW5kaXJlY3RseSB0aHJvdWdoIGEgZnVuY3Rpb24gcG9pbnRlciBvciB2aWEgc29tZSBzb3J0IG9mIG1hY3JvLiBTbywgSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGFzIEkgc2NhbiB0aGUgY29kZSwgbG9va2luZyBmb3IgYW55IGNsdWVzIGFib3V0IGhvdyB2aXJ0dWFsIENQVXMgYXJlIGluaXRpYWxpemVkIHdpdGhpbiB0aGUgWGVuL0tWTSBjb250ZXh0LiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtWTSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZXMsIGVzcGVjaWFsbHkgdGhvc2UgaW52b2x2aW5nIHRoZSB2Q1BVIGNyZWF0aW9uIGFuZCBzZXR1cC4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBmbG93IGluIGBrdm1fdmNwdV9jcmVhdGVgIG9yIHNpbWlsYXIgZnVuY3Rpb25zLCBhcyB3ZWxsIGFzIFhlbidzIGludGVyYWN0aW9uIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUsIGlmIHRoZXJlIGlzIGFuIGludGVyYWN0aW9uIGF0IHRoYXQgdGltZS5cblxuSSBhbHNvIGtub3cgdGhhdCBYZW4gYW5kIEtWTSBpbnRlcmFjdCBhdCB2YXJpb3VzIGxldmVscywgc28gSSBuZWVkIHRvIGNvbnNpZGVyIGJvdGggdGhlIEtWTSBhbmQgWGVuIHNpZGVzIG9mIHRoaW5ncy4gSSdsbCBwcm9iYWJseSBoYXZlIHRvIHJldmlldyB0aGUgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2UsIGlmIGFwcHJvcHJpYXRlIGZvciB0aGlzIGZ1bmN0aW9uLCBzaW5jZSB0aGF0J3MgYSBjb21tb24gaW50ZWdyYXRpb24gcG9pbnQuIElzIGl0IGNhbGxlZCBkdXJpbmcgZG9tYWluIGNyZWF0aW9uLCB2Q1BVIHN0YXJ0LXVwLCBvciBzb21ldGhpbmcgbW9yZSBudWFuY2VkPyBSaWdodCwgSSBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyBYZW4gaGFuZGxlcyBndWVzdCB2aXJ0dWFsaXphdGlvbi5cblxuU28sIEknbGwgc3RhcnQgd2l0aCB0aGUgb2J2aW91cyB0ZXh0dWFsIHNlYXJjaCBhbmQgdGhlbiBzdGFydCBkaWdnaW5nIGludG8gdGhlIGNhbGwgc3RhY2tzIGFuZCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZXMgdG8gc2VlIHdoZXJlIGBrdm1feGVuX2luaXRfdmNwdWAgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgdmlydHVhbCBDUFUgbWFuYWdlbWVudC4gSSBrbm93IGl0J3MgcHJvYmFibHkgaW52b2x2ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgdkNQVSdzIGxpZmVjeWNsZSwgYnV0IHBpbnBvaW50aW5nICpleGFjdGx5KiB3aGVuIGFuZCAqaG93KiBpcyB0aGUgcmVhbCBnb2FsIGhlcmUuIE9rYXksIGxldCdzIHN0YXJ0IHdpdGggdGhvc2Ugc2VhcmNoZXMuLi4gYW5kIGNyb3NzLXJlZmVyZW5jZSB3aXRoIHRoZSByZWxldmFudCBrZXJuZWwgZG9jdW1lbnRhdGlvbiBpZiBJIG5lZWQgdG8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjMyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjI6NTQ6NDAuMTUyMTAyOTcxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTc5MzY2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1feGVuX2luaXRfdmNwdVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS94ODYuYz05MjgzPWludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTM1My1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6OTM1NDpcXHRrdm1feGVuX2luaXRfdmNwdSh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTM1NS1cXHR2Y3B1X2xvYWQodmNwdSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM9MjI2NT1zdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX2V2dGNobl9zZW5kKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHBhcmFtLCB1NjQgKnIpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtMjI5OS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM6MjMwMDp2b2lkIGt2bV94ZW5faW5pdF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0veGVuLmMtMjMwMS17XFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmg9MzE9dm9pZCBrdm1feGVuX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bSAqa3ZtKTtcXG5hcmNoL3g4Ni9rdm0veGVuLmg6MzI6dm9pZCBrdm1feGVuX2luaXRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gveDg2L2t2bS94ZW4uaC0zMy12b2lkIGt2bV94ZW5fZGVzdHJveV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmg9MTIyPXN0YXRpYyBpbmxpbmUgdm9pZCBrdm1feGVuX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5oLTEyNS1cXG5hcmNoL3g4Ni9rdm0veGVuLmg6MTI2OnN0YXRpYyBpbmxpbmUgdm9pZCBrdm1feGVuX2luaXRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3hlbi5oLTEyNy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIyOjU0OjQwLjIzMzkwMjU1OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDM2MTY2OTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgVkNQVSBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIHRoZSBWQ1BVIGNyZWF0aW9uIHByb2Nlc3Mgd2l0aGluIHRoZSBLVk0vWGVuIGludGVncmF0aW9uLiBJdCBzZWVtcyB0aGF0IHRoZSBga3ZtX3hlbl9pbml0X3ZjcHVgIGZ1bmN0aW9uIGlzIHRoZSBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIFhlbi1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiwgYW5kIGl0J3MgY2FsbGVkIGR1cmluZyBga3ZtX2FyY2hfdmNwdV9jcmVhdGVgLiBUaGF0IG1ha2VzIHNlbnNlLlxuXG5Ob3csIHRvIGdldCBhIGJldHRlciBoaWdoLWxldmVsIHBpY3R1cmUgb2YgaG93IHRoaXMgaW5pdGlhbGl6YXRpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIEtWTSBWQ1BVIGNyZWF0aW9uIHByb2Nlc3MsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YCBmdW5jdGlvbiBpbiBgdmlydC9rdm0va3ZtX21haW4uY2AuIFRoaXMgc2hvdWxkIGdpdmUgbWUgc29tZSBjb250ZXh0IGFib3V0IGhvdyB0aGUgVkNQVSBpcyBhY3R1YWxseSByZXF1ZXN0ZWQgYW5kIGNvbmZpZ3VyZWQgYXQgdGhlIGh5cGVydmlzb3IgbGV2ZWwsIGJlZm9yZSB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGlzIGtpY2tlZCBvZmYuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBiYXNlIHRvIHVuZGVyc3RhbmQgdGhlIGVudGlyZSB3b3JrZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2NjIsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjo1NDo0My4yNzAwNzI1MDVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTQxMTcxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwidmlydC9rdm0va3ZtX21haW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jPTM5NjA9dm9pZCBrdm1fdmNwdV9vbl9zcGluKHN0cnVjdCBrdm1fdmNwdSAqbWUsIGJvb2wgeWllbGRfdG9fa2VybmVsX21vZGUpXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTM5NzAtXFxudmlydC9rdm0va3ZtX21haW4uYzozOTcxOlxcdC8qIFBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpbiBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHUoKS4gKi9cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTM5NzItXFx0c21wX3JtYigpO1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz00MTMxPXN0YXRpYyB2b2lkIGt2bV9jcmVhdGVfdmNwdV9kZWJ1Z2ZzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDE1MS0gKi9cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjQxNTI6c3RhdGljIGludCBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGlkKVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDE1My17XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTQzODg9c3RhdGljIGludCBrdm1fd2FpdF9mb3JfdmNwdV9vbmxpbmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy00NDAwLVxcdCAqIEFjcXVpcmUgYW5kIHJlbGVhc2UgdGhlIHZDUFUncyBtdXRleCB0byB3YWl0IGZvciB2Q1BVIGNyZWF0aW9uIHRvXFxudmlydC9rdm0va3ZtX21haW4uYzo0NDAxOlxcdCAqIGNvbXBsZXRlIChrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHUoKSBob2xkcyB0aGUgbXV0ZXggdW50aWwgdGhlIHZDUFVcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ0MDItXFx0ICogaXMgZnVsbHkgb25saW5lKS5cXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9NTE1Nz1zdGF0aWMgbG9uZyBrdm1fdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUxNjctXFx0Y2FzZSBLVk1fQ1JFQVRFX1ZDUFU6XFxudmlydC9rdm0va3ZtX21haW4uYzo1MTY4OlxcdFxcdHIgPSBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHUoa3ZtLCBhcmcpO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTE2OS1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjI6NTQ6NDMuNDAxNDkwMjgyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5NTEwNDc5MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTSBWQ1BVIEluaXRpYWxpemF0aW9uIGFuZCBTeW5jaHJvbml6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gcmV2aWV3aW5nIHRoaXMgcGF0Y2ggYW5kIEknbSBzZWVpbmcgYSBmZXcga2V5IGFyZWFzIG9mIGltcHJvdmVtZW50IGNvbmNlcm5pbmcgS1ZNJ3MgVkNQVSBpbml0aWFsaXphdGlvbiBhbmQgc3luY2hyb25pemF0aW9uLiBUaGUgbWFpbiB0YWtlYXdheSBoZXJlIGlzIHRoYXQgdGhlc2UgYXJlIGFsbCBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCBhcHBlYXIgdG8gYWRkcmVzcyByYWNlIGNvbmRpdGlvbnMgYW5kIHBvdGVudGlhbCBhY2Nlc3MgdmlvbGF0aW9ucyB0byB1bmluaXRpYWxpemVkIGRhdGEuIFNwZWNpZmljYWxseSwgSSdtIG5vdGluZyB0aGUgd2F5IHRoZSBwYXRjaCBoYW5kbGVzIHRoZSBgS1ZNX0NSRUFURV9WQ1BVYCBpb2N0bCBoYW5kbGVyLCBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YC4gSXQgc2VlbXMgdGhlIGRlc2lnbiBub3cgaW5jbHVkZXMgYW4gZWFybHkgc2V0dGluZyBvZiBgdmNwdS1cdTAwM2V2Y3B1X2lkeCA9IC0xYCB3aXRoaW4gdGhlIGBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHVgIGZ1bmN0aW9uIGFuZCByZXNldHRpbmcgaXQgdG8gLTEgb24gZmFpbHVyZS4gVGhpcyBzdHJpa2VzIG1lIGFzIGEgZGVsaWJlcmF0ZSBzdHJhdGVneSB0byBwcmV2ZW50IG90aGVyIHRhc2tzIGZyb20gaW5hZHZlcnRlbnRseSBhY2Nlc3NpbmcgYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgdkNQVS4gSXQgYWxzbyBsb29rcyBsaWtlIGEgY2xldmVyIHdheSB0byBlbnN1cmUgS1ZNIGNhbiByZWxpYWJseSBkZXRlY3QgYW4gdW5yZWFjaGFibGUgdkNQVS4gR29vZCwgcHJvYWN0aXZlIGRlc2lnbi5cblxuQmV5b25kIHRoYXQsIHRoZSBjaGFuZ2VzIHRvIGB0b19odl92Y3B1X3NhZmVgIGFyZSBpbnRlcmVzdGluZy4gVXNpbmcgYHNtcF9sb2FkX2FjcXVpcmVgIGFuZCB0aGUgbW9kaWZpY2F0aW9uIHRvIGBrdm1faHZfdmNwdV9pbml0YCB0byB1c2UgYHNtcF9zdG9yZV9yZWxlYXNlYCBjbGVhcmx5IGluZGljYXRlcyBhbiBlZmZvcnQgdG8gc2VyaWFsaXplIGFjY2VzcyB0byB0aGUgYHZjcHUtXHUwMDNlYXJjaC5oeXBlcnZgIGRhdGEgc3RydWN0dXJlIGFuZCBhdm9pZCB0aGF0IHJhY2UgY29uZGl0aW9uLiBJdCdzIHRoZSBzdGFuZGFyZCBtZW1vcnkgYmFycmllciBzeW5jaHJvbml6YXRpb24gcGF0dGVybiB0byBoYW5kbGUgbWVtb3J5IG9yZGVyaW5nLlxuXG5UaGVyZSdzIGFsc28gYSBtb2RpZmljYXRpb24gdG8gYGt2bV94ZW5faGNhbGxfdmNwdV9vcGAsIHdoaWNoIG5vdyBpbmNsdWRlcyBjaGVja3MgZm9yIGB2Y3B1LVx1MDAzZWFyY2gueGVuLnZjcHVfaWQgPT0gWEVOX1ZDUFVfSURfSU5WQUxJRGAgYW5kIGB2Y3B1LVx1MDAzZWFyY2gueGVuLnZjcHVfaWQgIT0gdmNwdV9pZGAuIFRoaXMgaXMgYWJvdXQgZ3VhcmRpbmcgYWdhaW5zdCB1c2luZyB0aGUgYHZjcHVfaWRgIGJlZm9yZSBpdCdzIGJlZW4gaW5pdGlhbGl6ZWQgcHJvcGVybHkuIFNvbGlkLlxuXG5GaW5hbGx5LCB0aGUgY2hhbmdlIHRvIGBrdm1faHZfZmx1c2hfdGxiYCBsb29rcyBzdHJhaWdodGZvcndhcmQuIFRoZSBzaGlmdCB0byBwYXNzaW5nIGBpc19ndWVzdF9tb2RlYCB0byBgaHZfdGxiX2ZsdXNoX2VucXVldWVgIGluc3RlYWQgb2YgZGlyZWN0bHkgY2FsbGluZyBga3ZtX2h2X2dldF90bGJfZmx1c2hfZmlmb2AgaXMgYSBtaW5vciwgeWV0IGxpa2VseSBpbXBvcnRhbnQsIHJlZmFjdG9yaW5nIHRoYXQgSSBzaG91bGQgdW5kZXJzdGFuZCBhdCBhIGxvdyBsZXZlbCB0byBtYWtlIHN1cmUgdGhlIGJlaGF2aW9yIGlzIGNvbnNpc3RlbnQuXG5cbk92ZXJhbGwsIHRoaXMgcGF0Y2ggc2VlbXMgcHJldHR5IHNvbGlkIGFuZCBzaG91bGQgaW1wcm92ZSByb2J1c3RuZXNzIGFuZCByZWxpYWJpbGl0eS4gQ29uc2lkZXJpbmcgdGhlIG5hdHVyZSBvZiB0aGVzZSBjaGFuZ2VzIOKAkyBmb2N1c2luZyBvbiBpbml0aWFsaXphdGlvbiBhbmQgZGF0YSBhY2Nlc3Mg4oCTIHRoZXNlIGFyZSBkZWZpbml0ZWx5IGFyZWFzIHJpcGUgZm9yIGZ1enppbmcuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgY29yZSBzeW1ib2xzIHRoYXQgd291bGQgbWFrZSB0aGUgYmVzdCBmdXp6IHRhcmdldHMuIEZyb20gbXkgaW5pdGlhbCBhc3Nlc3NtZW50LCBJIGFtIGdvaW5nIHRvIGZvY3VzIG9uOiBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YCwgYGt2bV9odl92Y3B1X2luaXRgLCBga3ZtX3hlbl9oY2FsbF92Y3B1X29wYCwgYGt2bV9odl9mbHVzaF90bGJgLCBhbmQgYGt2bV9odl92Y3B1X2ZsdXNoX3RsYmAuXG5cbkdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIGd1ZXN0LXRyaWdnZXJlZCBhY3Rpb25zLCB0aGUgbGF0dGVyIHRocmVlIChga3ZtX2h2X3ZjcHVfaW5pdGAsIGBrdm1feGVuX2hjYWxsX3ZjcHVfb3BgLCBhbmQgYGt2bV9odl9mbHVzaF90bGJgKSBhcmUgZXhjZWxsZW50IHRhcmdldHMgYmVjYXVzZSB0aGV5IGFyZSByZWxhdGVkIHRvIGh5cGVyY2FsbHMgYW5kIE1TUiBhY2Nlc3MuIFRoZSBWQ1BVIGNyZWF0aW9uIHBhdGgsIHJlcHJlc2VudGVkIGJ5IGBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHVgLCBpcyBtb3JlIGEgc2xvd2VyIHBhdGggYnV0IHRoZSBjb3JlIG9mIHRoZSBwYXRjaC4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZSBwYXRoIG9mIGBrdm1faHZfdmNwdV9mbHVzaF90bGJgIG9mZmVycyBtb3JlIG9wcG9ydHVuaXRpZXMgZm9yIG1vcmUgdGFyZ2V0ZWQgdGVzdGluZy4gTGV0J3MgZGlnIGRlZXBlciBpbnRvIHRoYXQgb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDUwNSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjo1NDo1My4zNTI1NDM5NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU3NTIxNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2h2X3ZjcHVfZmx1c2hfdGxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9oeXBlcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9MTk0OT1zdGF0aWMgdm9pZCBodl90bGJfZmx1c2hfZW5xdWV1ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqZW50cmllcywgaW50IGNvdW50LFxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTE5ODAtXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjE5ODE6aW50IGt2bV9odl92Y3B1X2ZsdXNoX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTE5ODIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjo1NDo1My40MjgzMDI0MzhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3NzA0NTE2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipUcmFjaW5nIHRoZSBUTEIgRmx1c2ggaW4gS1ZNKipcblxuQWxyaWdodCwgc28gdGhlIGNvcmUgcXVlc3Rpb24gYnV6emluZyBpbiBteSBoZWFkIGlzOiB3aGVyZSBleGFjdGx5IGRvZXMgYGt2bV9odl92Y3B1X2ZsdXNoX3RsYmAgZ2V0IGludm9rZWQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjYWxsIHNpdGVzIHRvIHJlYWxseSBncmFzcCBpdHMgcm9sZSBpbiBLVk0ncyBoeXBlcnZpc29yIG9wZXJhdGlvbnMsIGVzcGVjaWFsbHkgY29uY2VybmluZyBUTEIgY29oZXJlbmN5LiBLbm93aW5nIHRoZSBwb2ludHMgb2YgaW52b2NhdGlvbiB3aWxsIHRlbGwgbWUgdW5kZXIgd2hhdCBjb25kaXRpb25zIHRoZSBoeXBlcnZpc29yIGRlZW1zIGEgVExCIGZsdXNoIG5lY2Vzc2FyeS4gSXMgaXQgdHJpZ2dlcmVkIGJ5IGd1ZXN0IHdyaXRlcywgZ3Vlc3QgcGFnZSB0YWJsZSBtb2RpZmljYXRpb25zLCBvciBleHRlcm5hbCBldmVudHM/XG5cbkkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSB1cHN0cmVhbSBjYWxsZXJzIHRvIHN0YXJ0IGZvcm1pbmcgYSBjbGVhciBwaWN0dXJlLiBJIHdpbGwgdXNlIHRoZSBjb2RlIGJhc2UgYW5kIGEgZ29vZCBncmVwcGluZyBzdHJhdGVneSAob3IgcHJlZmVyYWJseSBteSBJREUpIHRvIGZpbmQgd2hlcmUgYGt2bV9odl92Y3B1X2ZsdXNoX3RsYmAgaXMgY2FsbGVkIGluIHRoZSBzb3VyY2UgdHJlZS4gS25vd2luZyB0aGUgY2FsbCBoaWVyYXJjaHkgd2lsbCBiZSBjcnVjaWFsIHRvIGFzc2Vzc2luZyBpdHMgaW1wbGljYXRpb25zIGZvciBwZXJmb3JtYW5jZSBhbmQsIGNyaXRpY2FsbHksIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3Igc3luY2hyb25pemF0aW9uIGlzc3Vlcy4gVW5kZXJzdGFuZGluZyB0aGUgc3Vycm91bmRpbmcgY29kZSBjb250ZXh0IHdpbGwgcHJvdmlkZSBoaW50cyByZWdhcmRpbmcgdGhlIGludGVudCBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiB0aGlzIHNwZWNpZmljIFRMQiBmbHVzaGluZyBvcGVyYXRpb24uXG5cbkZ1cnRoZXJtb3JlLCBJIGhhdmUgdG8ga2VlcCB0aGUgaW1wYWN0IG9uIHRoZSBndWVzdCBpbiBtaW5kLiBXaGF0IGlzIHRoZSBpbXBhY3Qgb24gcGVyZm9ybWFuY2UgZm9yIGEgZ3Vlc3QgdkNQVT8gSXMgdGhlIGNvc3Qgb2YgZmx1c2hpbmcgdGhlIFRMQiBoaWdoPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBuZXN0ZWQgdmlydHVhbGl6YXRpb24sIG9yIHNwZWNpZmljIENQVSBmZWF0dXJlcyBsaWtlIGV4dGVuZGVkIHBhZ2UgdGFibGVzIChFUFQpPyBBcmUgdGhlcmUgYW55IG9wdGltaXphdGlvbnMgaW4gcGxhY2UgdG8gbWluaW1pemUgdGhlIGZsdXNoIHNjb3BlPyBUaGVzZSBmb2xsb3ctdXAgcXVlc3Rpb25zIHdpbGwgZGVmaW5lIG15IG5leHQgcmVzZWFyY2ggcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwMjUsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjo1NDo1Ny4xMDUzNDk5MzhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1NTc1MDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9odl92Y3B1X2ZsdXNoX3RsYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9oeXBlcnYuYz0xOTQ5PXN0YXRpYyB2b2lkIGh2X3RsYl9mbHVzaF9lbnF1ZXVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0ICplbnRyaWVzLCBpbnQgY291bnQsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMTk4MC1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6MTk4MTppbnQga3ZtX2h2X3ZjcHVfZmx1c2hfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMTk4Mi17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2Lmg9Mjc1PXN0YXRpYyBpbmxpbmUgdm9pZCBrdm1faHZfbmVzdGVkX3RyYW5zdGlvbl90bGJfZmx1c2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5oLTI4Ny1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2Lmg6Mjg4OmludCBrdm1faHZfdmNwdV9mbHVzaF90bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmgtMjg5LSNlbHNlIC8qIENPTkZJR19LVk1fSFlQRVJWICovXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9ODAwMT1zdGF0aWMgaW50IHZjcHVfZW50ZXJfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTgwNjQtXFx0XFx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfSFZfVExCX0ZMVVNILCB2Y3B1KSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L2t2bS94ODYuYzo4MDY1OlxcdFxcdCAgICBrdm1faHZfdmNwdV9mbHVzaF90bGIodmNwdSkpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTgwNjYtXFx0XFx0XFx0a3ZtX3ZjcHVfZmx1c2hfdGxiX2d1ZXN0KHZjcHUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjo1NDo1Ny4yMDA5MzAzNzZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE3OTA5MjE3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBQcmlvcml0aXphdGlvbiBvZiBLVk0gRnV6emluZyBUYXJnZXRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgS1ZNIGZ1bmN0aW9ucyBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb25lcyBhcmUgcHJpbWUgY2FuZGlkYXRlcyBmb3IgZnV6emluZywgZ2l2ZW4gdGhhdCB0aGV5J3JlIGFsbCBwb3RlbnRpYWwgZW50cnkgcG9pbnRzLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgYGt2bV9odl92Y3B1X2ZsdXNoX3RsYmAuIEkga25vdyB0aGF0J3MgY2FsbGVkIHdpdGhpbiBgdmNwdV9lbnRlcl9ndWVzdGAsIGFuZCB0aGF0J3MgYSAqaG90IHBhdGgqLiBXZSBuZWVkIHRvIGJlIHZlcnkgY2FyZWZ1bCBhYm91dCBhZGRpbmcgdGhpbmdzIHRvIGBGb2N1c1N5bWJvbHNgIHRoYXQgaW1wYWN0IHBlcmZvcm1hbmNlIHRoZXJlLiBTbywgSSdtIGdvaW5nIHRvIHNldCB0aGF0IGFzaWRlIGZvciBub3cuXG5cbk5vdywgYGt2bV9odl9mbHVzaF90bGJgIGlzIGRpZmZlcmVudC4gSXQncyBjYWxsZWQgZnJvbSBga3ZtX2h2X2h5cGVyY2FsbGAsIHdoaWNoLCB3aGlsZSBmcmVxdWVudGx5IGNhbGxlZCwgaXNuJ3QgdGhlIHNhbWUga2luZCBvZiBjb3JlIGxvb3AgbGlrZSBgdmNwdV9lbnRlcl9ndWVzdGAuIEl0J3MgYSBoeXBlcmNhbGwgaGFuZGxlciwgYW5kIGh5cGVyY2FsbHMgYXJlIGV4Y2VsbGVudCBmdXp6aW5nIHRhcmdldHMgYmVjYXVzZSBvZiB0aGVpciBzcGVjaWZpYyBpbnB1dHMuIFRoaXMgbG9va3MgcHJvbWlzaW5nLlxuXG5UaGVuIHRoZXJlJ3MgYGt2bV94ZW5faGNhbGxfdmNwdV9vcGAuIEFub3RoZXIgaHlwZXJjYWxsIGhhbmRsZXIsIHNvIGl0IGFsc28gc2VlbXMgbGlrZSBhIGdyZWF0IGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gSSdsbCBtYWtlIGEgbm90ZSBvZiB0aGlzLlxuXG5ga3ZtX2h2X3ZjcHVfaW5pdGAgaXMgY2FsbGVkIG9uIHNwZWNpZmljIE1TUiBhY2Nlc3NlcywgYW5kIHRoYXQgc291bmRzIGxpa2UgYSBnb29kIHRhcmdldCBhcyB3ZWxsLiBNU1IgYWNjZXNzZXMsIGxpa2UgaHlwZXJjYWxscywgY2FuIGJlIHF1aXRlIG51YW5jZWQgYW5kIGFyZSByaXBlIGZvciBmdXp6aW5nLlxuXG5BbmQgZmluYWxseSwgYGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdWAuIEFuIGlvY3RsIGhhbmRsZXIgaXMgYW5vdGhlciBnb29kIGNob2ljZSwgaXQncyBhbiBJL08gcGF0aC4gVGhhdCBnaXZlcyB1cyBtb3JlIGFjY2VzcyBwb2ludHMgYW5kIGRpZmZlcmVudCBleGVjdXRpb24gY29udGV4dHMuXG5cbk5vdywgYmVmb3JlIEkgY29tbWl0IHRvIGFueXRoaW5nLCBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEknbGwgbmVlZCB0byB2ZXJpZnkgdGhhdCB3ZSBoYXZlIGBDT05GSUdfS1ZNYCwgYENPTkZJR19LVk1fSFlQRVJWYCwgYW5kIGBDT05GSUdfS1ZNX1hFTmAgZW5hYmxlZCwgd2hpY2ggd291bGQgY29uZmlybSB0aGVzZSBmZWF0dXJlcyBhcmUgYWN0aXZlIGFuZCBhdmFpbGFibGUgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODU3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIyOjU1OjAyLjM4MDAyNzYxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTM4NjkwODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9YRU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTkzPWNvbmZpZyBLVk1fSFlQRVJWXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA3OmNvbmZpZyBLVk1fWEVOXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjo1NTowMi41OTM5MDI1NDRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI0Mjg4NDg1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIEtWTSBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHNvIGBLVk1fSFlQRVJWYCBhbmQgYEtWTV9YRU5gIGFyZSB0aGUgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHdlJ3JlIGZvY3VzaW5nIG9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdCBJJ3ZlIGdvdCB0aGUgY29ycmVjdCBjb25maWcgaWRlbnRpZmllcnMuIE5vIG5lZWQgdG8gYmVsYWJvciB0aGUgb2J2aW91cywganVzdCBhIHF1aWNrIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aG9zZSBhcmUgaW5kZWVkIHRoZSByZWxldmFudCBjb25maWdzLlxuXG5UaGUgbmV4dCB0aGluZyBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgaXMgYWJvdXQgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBlaXRoZXIgb2YgdGhlc2UgY29uZmlndXJhdGlvbnMgcmVsaWVzIG9uIGFueSBvdGhlciBrZXJuZWwgZmVhdHVyZXMgb3IgbW9kdWxlcy4gQXJlIHRoZXkgc2VsZi1jb250YWluZWQsIG9yIGFyZSB0aGV5IGJ1aWx0IG9uIHRvcCBvZiBzb21lIHVuZGVybHlpbmcgaW5mcmFzdHJ1Y3R1cmU/IEEgZGVwZW5kZW5jeSBhbmFseXNpcyBpcyBjcnVjaWFsIGhlcmUuIFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyB3aWxsIGluZm9ybSBob3cgY2xlYW5seSB0aGV5IGludGVncmF0ZSwgYW5kIGhvdyB0byBhcHByb2FjaCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBmZWF0dXJlcy4gTGV0J3MgZGlnIGludG8gdGhhdCBhbmQgc2VlIHdoYXQgd2UgdW5jb3Zlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2NzksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjo1NTowNy44MzY3OTA3NTdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3NjI3OTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fSFlQRVJWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTE4Mj1jb25maWcgS1ZNX1NNTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTkyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5Mzpjb25maWcgS1ZNX0hZUEVSVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIyOjU1OjA3LjkzNDQyNDgxNFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDY5ODU0NzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBLY29uZmlnIGZvciBgS1ZNX0hZUEVSVmAqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIEtjb25maWcgZm9yIGBLVk1fSFlQRVJWYC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyBhbmQgaW1wbGljYXRpb25zIG9mIHRoaXMgb3B0aW9uLiBJIHdhbnQgdG8gc2VlIGhvdyBpdCdzIGludGVncmF0ZWQgd2l0aGluIHRoZSBsYXJnZXIgS1ZNIGVjb3N5c3RlbS5cblxuSSdtIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOlxuXG4qICAgKipEZXBlbmRlbmNpZXM6KiogV2hhdCBvdGhlciBLY29uZmlnIHN5bWJvbHMgZG9lcyBgS1ZNX0hZUEVSVmAgZGVwZW5kIG9uPyBBcmUgdGhlcmUgYW55IHVwc3RyZWFtL2Rvd25zdHJlYW0gZGVwZW5kZW5jaWVzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBlbmFibGluZyB0aGlzIG9wdGlvbiBpbXBsaWNpdGx5IHB1bGxzIGluIG9yIGFmZmVjdHMgb3RoZXIgZmVhdHVyZXMuIEknbGwgbmVlZCB0byBhc3Nlc3MgdGhlIHBvdGVudGlhbCBmb3IgY29uZmxpY3RzLCB0b28uXG4qICAgKipUcmlnZ2VyczoqKiBXaGF0IGRvZXMgaXQgZW5hYmxlPyBEb2VzIGl0IGJyaW5nIGluIGFueSBuZXcgZHJpdmVycywgbW9kdWxlcywgb3IgZmVhdHVyZXM/IElmIHNvLCB3aGF0IGFyZSB0aGVpciByZWxhdGlvbnNoaXBzIHRvIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGFuZCB0aGVpciBpbXBsaWNhdGlvbnMgb24gdGhlIGh5cGVydmlzb3IncyBwZXJmb3JtYW5jZSBhbmQgc2VjdXJpdHk/XG4qICAgKipEZWZhdWx0IFN0YXRlIGFuZCBQcm9tcHQ6KiogSXMgaXQgYSB0cmlzdGF0ZSwgYSBib29sPyBXaGF0IGFyZSBpdHMgZGVmYXVsdCB2YWx1ZSBhbmQgcHJvbXB0IHN0cmluZz8gRG9lcyBpdCBpbmZsdWVuY2Ugb3RoZXIgdmlydHVhbGl6YXRpb24gZmVhdHVyZXM/XG4qICAgKipIZWxwIFRleHQ6KiogVGhlIGhlbHAgdGV4dCB3aWxsIGJlIGNyaXRpY2FsIGhlcmUuIEl0IHNob3VsZCBnaXZlIG1lIGEgY29uY2lzZSBkZXNjcmlwdGlvbiBvZiB3aGF0IHRoZSBgS1ZNX0hZUEVSVmAgc3VwcG9ydCBhY3R1YWxseSBkb2VzLCBhbmQgdGhlIHNjZW5hcmlvcyB3aGVyZSBJJ2QgZW5hYmxlIGl0LiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGhpbnRzIGFib3V0IHRoZSB0YXJnZXQgaGFyZHdhcmUgYW5kIG9wZXJhdGluZyBzeXN0ZW1zLlxuKiAgICoqQXJjaGl0ZWN0dXJhbCBDb25zaWRlcmF0aW9uczoqKiBBcmUgdGhlcmUgYW55IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjaGVja3Mgb3IgZGVwZW5kZW5jaWVzPyBEb2VzIHRoaXMgb3B0aW9uIG9ubHkgbWFrZSBzZW5zZSBvbiBjZXJ0YWluIENQVSBhcmNoaXRlY3R1cmVzIG9yIHNwZWNpZmljIGhhcmR3YXJlIGZlYXR1cmVzPyBJJ2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgYW55IGAjaWZkZWZgIHN0YXRlbWVudHMgdGhhdCBtaWdodCBpbmZsdWVuY2UgaXRzIGJlaGF2aW9yLlxuXG5JIHdhbnQgdG8gcXVpY2tseSBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIHNlbGVjdGluZyBgS1ZNX0hZUEVSVmAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGl0cyByb2xlIGluIHRoZSB2aXJ0dWFsIGVudmlyb25tZW50LiBBbnkgaGlkZGVuIGdvdGNoYXMgb3Igc3VidGxlIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHZpcnR1YWxpemF0aW9uIGZlYXR1cmVzIGFyZSBleGFjdGx5IHdoYXQgSSdtIGxvb2tpbmcgZm9yLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwNTcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjo1NToxMi4wMDQyODYyMTVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTkwOlxcdFxcbiAxOTE6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAxOTI6XFx0XFxuIDE5MzpcXHRjb25maWcgS1ZNX0hZUEVSVlxcbiAxOTQ6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXFxcIlxcbiAxOTU6XFx0XFx0ZGVwZW5kcyBvbiBLVk1fWDg2XFxuIDE5NjpcXHRcXHRkZWZhdWx0IHlcXG4gMTk3OlxcdFxcdGhlbHBcXG4gMTk4OlxcdFxcdCAgUHJvdmlkZXMgS1ZNIHN1cHBvcnQgZm9yIGVtdWxhdGluZyBNaWNyb3NvZnQgSHlwZXItVi4gIFRoaXMgYWxsb3dzIEtWTVxcbiAxOTk6XFx0XFx0ICB0byBleHBvc2UgYSBzdWJzZXQgb2YgdGhlIHBhcmF2aXJ0dWFsaXplZCBpbnRlcmZhY2VzIGRlZmluZWQgaW4gdGhlXFxuIDIwMDpcXHRcXHQgIEh5cGVyLVYgSHlwZXJ2aXNvciBUb3AtTGV2ZWwgRnVuY3Rpb25hbCBTcGVjaWZpY2F0aW9uIChUTEZTKTpcXG4gMjAxOlxcdFxcdCAgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvdmlydHVhbGl6YXRpb24vaHlwZXItdi1vbi13aW5kb3dzL3JlZmVyZW5jZS90bGZzXFxuIDIwMjpcXHRcXHQgIFRoZXNlIGludGVyZmFjZXMgYXJlIHJlcXVpcmVkIGZvciB0aGUgY29ycmVjdCBhbmQgcGVyZm9ybWFudCBmdW5jdGlvbmluZ1xcbiAyMDM6XFx0XFx0ICBvZiBXaW5kb3dzIGFuZCBIeXBlci1WIGd1ZXN0cyBvbiBLVk0uXFxuIDIwNDpcXHRcXG4gMjA1OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgXFxcIllcXFwiLlxcbiAyMDY6XFx0XFxuIDIwNzpcXHRjb25maWcgS1ZNX1hFTlxcbiAyMDg6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcXFwiXFxuIDIwOTpcXHRcXHRkZXBlbmRzIG9uIEtWTV9YODZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjI6NTU6MTIuMDA0Mzg0MzY1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMDExNDcyNjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEtWTSBQYXRjaCBGdXp6aW5nIFRhcmdldHMqKlxuXG5Pa2F5LCBzbyBJJ20gaG9taW5nIGluIG9uIHRoZSBiZXN0IGNvbmZpZ3VyYXRpb25zIGZvciBmdXp6aW5nIHRoaXMgS1ZNIHBhdGNoLiAgYEtWTV9IWVBFUlZgIGFuZCBgS1ZNX1hFTmAgYXJlIGRlZmluaXRlbHkgdGhlIGNvcmUgY29uZmlndXJhdGlvbnMgdG8gdGFyZ2V0LiAgSSd2ZSBkb3VibGUtY2hlY2tlZCB0aGF0IGBLVk1fWDg2YCBpc24ndCBleHBsaWNpdGx5IG5lY2Vzc2FyeSwgYXMgYEtWTV9IWVBFUlZgIGhhbmRsZXMgdGhlIGRlcGVuZGVuY3kuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBmb2N1cyBzeW1ib2xzLiBJJ3ZlIGNvbXBpbGVkIGEgbGlzdDpcbi0gICBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YFxuLSAgIGBrdm1faHZfdmNwdV9pbml0YFxuLSAgIGBrdm1feGVuX2hjYWxsX3ZjcHVfb3BgXG4tICAgYGt2bV9odl9mbHVzaF90bGJgXG5cbkkgbWV0aWN1bG91c2x5IGNoZWNrZWQgdGhlIHN0YXRpYyBuYXR1cmUgb2YgZWFjaC4gYGt2bV9odl9mbHVzaF90bGJgLCBga3ZtX3hlbl9oY2FsbF92Y3B1X29wYCwgYW5kIGBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHVgIGFyZSBpbmRlZWQgc3RhdGljLCBhbmQgdGhhdCdzIHBlcmZlY3RseSBmaW5lOyBzeXprYWxsZXIgY2FuIGhhbmRsZSB0aGVtLiAgYGt2bV9odl92Y3B1X2luaXRgIGlzIG5vdCBzdGF0aWMuICBUaGVzZSBmdW5jdGlvbnMgYXJlIGFsbCBrZXkgYmVjYXVzZSB0aGV5IHJlcHJlc2VudCB0aGUgY29yZSBvZiB0aGUgcGF0Y2gncyBjaGFuZ2VzOiB2Q1BVIGNyZWF0aW9uLCBIeXBlci1WIGVtdWxhdGlvbiwgYW5kIFhlbiBlbXVsYXRpb24uXG5cbkkgcmVhbGl6ZWQgdGhpcyBwYXRjaCBhbHNvIHRvdWNoZXMgYHN5bmljX2dldGAsIGBzdGltZXJfbWFya19wZW5kaW5nYCwgYW5kIGBzdGltZXJfY2xlYW51cGAuIFRoZXNlIGFyZSBzbWFsbGVyLCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gSSdsbCBtYWtlIHN1cmUgdG8gbm90ZSB0aGF0IHRob3NlIGFyZSBzbWFsbCBoZWxwZXIgZnVuY3Rpb25zLlxuXG5UaGUgcmVhc29uaW5nIGZvciBmdXp6aW5nIGlzIHNvdW5kLiBUaGlzIHBhdGNoIHNwZWNpZmljYWxseSBhZGRyZXNzZXMgcmFjZSBjb25kaXRpb25zIGFuZCB1bmluaXRpYWxpemVkIGFjY2Vzc2VzIHdpdGhpbiBLVk0ncyB2Q1BVIGNyZWF0aW9uLCBoeXBlcmNhbGwgaGFuZGxlcnMgZm9yIGJvdGggSHlwZXItViBhbmQgWGVuIGVtdWxhdGlvbi4gVGhlIGNoYW5nZXMgaW52b2x2ZSBtb2RpZnlpbmcgdkNQVSBpbml0aWFsaXphdGlvbiBhbmQgaHlwZXJjYWxsIGxvZ2ljLCBhbGwgYXJlYXMgdGhhdCBhcmUgcG90ZW50aWFsbHkgcmVhY2hhYmxlIGZyb20gZ3Vlc3QgdXNlcnNwYWNlIGFuZCBzdXNjZXB0aWJsZSB0byBjb25jdXJyZW50IGV4ZWN1dGlvbi4gRnV6emluZyB0aGVzZSBjb21wb25lbnRzIGlzIGNydWNpYWwgdG8gY29uZmlybSB0aGUgZml4IGlzIGVmZmVjdGl2ZSwgd2l0aG91dCBpbnRyb2R1Y2luZyByZWdyZXNzaW9ucy5cblxuVGhlcmVmb3JlLCB0aGUgY3JpdGljYWwgY29uZmlndXJhdGlvbnMgYXJlIGBLVk1fSFlQRVJWYCBhbmQgYEtWTV9YRU5gLiBUaGUgaWRlbnRpZmllZCBmb2N1cyBzeW1ib2xzIHByb3ZpZGUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB0ZXN0aW5nIGFuZCBpZGVudGlmeWluZyBmdXJ0aGVyIGZvY3VzIHN5bWJvbHMuIEknbSByZWFkeSB0byBzZXQgdGhlc2UgcmVzdWx0cyBhbmQgcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg4NTEsIk91dHB1dFRva2VucyI6MTc2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjI6NTU6MjIuMDE1ODU4OTEyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2MDM4NjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1fSFlQRVJWXCIsXG4gICAgXCJLVk1fWEVOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1XCIsXG4gICAgXCJrdm1faHZfdmNwdV9pbml0XCIsXG4gICAgXCJrdm1feGVuX2hjYWxsX3ZjcHVfb3BcIixcbiAgICBcImt2bV9odl9mbHVzaF90bGJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyByYWNlIGNvbmRpdGlvbnMgYW5kIHVuaW5pdGlhbGl6ZWQgYWNjZXNzZXMgaW4gS1ZNJ3MgdkNQVSBjcmVhdGlvbiwgSHlwZXItViBlbXVsYXRpb24sIGFuZCBYZW4gZW11bGF0aW9uLiBJdCBtb2RpZmllcyBjb3JlIHZDUFUgaW5pdGlhbGl6YXRpb24gbG9naWMgYW5kIGh5cGVyY2FsbCBoYW5kbGVycywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIGd1ZXN0IHVzZXJzcGFjZSBhbmQgY2FuIGJlIHRyaWdnZXJlZCBjb25jdXJyZW50bHkuIEZ1enppbmcgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGVzZSBmaXhlcyBjb3JyZWN0bHkgaGFuZGxlIGNvbmN1cnJlbnQgdkNQVSBjcmVhdGlvbiBhbmQgaHlwZXJjYWxscyB3aXRob3V0IGludHJvZHVjaW5nIG5ldyByYWNlcyBvciByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1fSFlQRVJWXCIsXG4gICAgXCJLVk1fWEVOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1XCIsXG4gICAgXCJrdm1faHZfdmNwdV9pbml0XCIsXG4gICAgXCJrdm1feGVuX2hjYWxsX3ZjcHVfb3BcIixcbiAgICBcImt2bV9odl9mbHVzaF90bGJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyByYWNlIGNvbmRpdGlvbnMgYW5kIHVuaW5pdGlhbGl6ZWQgYWNjZXNzZXMgaW4gS1ZNJ3MgdkNQVSBjcmVhdGlvbiwgSHlwZXItViBlbXVsYXRpb24sIGFuZCBYZW4gZW11bGF0aW9uLiBJdCBtb2RpZmllcyBjb3JlIHZDUFUgaW5pdGlhbGl6YXRpb24gbG9naWMgYW5kIGh5cGVyY2FsbCBoYW5kbGVycywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIGd1ZXN0IHVzZXJzcGFjZSBhbmQgY2FuIGJlIHRyaWdnZXJlZCBjb25jdXJyZW50bHkuIEZ1enppbmcgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGVzZSBmaXhlcyBjb3JyZWN0bHkgaGFuZGxlIGNvbmN1cnJlbnQgdkNQVSBjcmVhdGlvbiBhbmQgaHlwZXJjYWxscyB3aXRob3V0IGludHJvZHVjaW5nIG5ldyByYWNlcyBvciByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkqp4n[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-25 22:47:44 +0000 UTC FinishedAt: 2026-06-25 22:55:24 +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": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM_HYPERV", "KVM_XEN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM_HYPERV", "KVM_XEN" ], "series_id": "6864cbe8-ce00-47d1-b4b1-abc7d1528d4e" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_vm_ioctl_create_vcpu", "kvm_hv_vcpu_init", "kvm_xen_hcall_vcpu_op", "kvm_hv_flush_tlb" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": { "findings": [ "60fac5d8-1296-4ec7-a8e3-40f561d007e9" ] } } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTV9IWVBFUlYmIzM0OywKICAgICYjMzQ7S1ZNX1hFTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV92bV9pb2N0bF9jcmVhdGVfdmNwdSYjMzQ7LAogICAgJiMzNDtrdm1faHZfdmNwdV9pbml0JiMzNDssCiAgICAmIzM0O2t2bV94ZW5faGNhbGxfdmNwdV9vcCYjMzQ7LAogICAgJiMzNDtrdm1faHZfZmx1c2hfdGxiJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHJhY2UgY29uZGl0aW9ucyBhbmQgdW5pbml0aWFsaXplZCBhY2Nlc3NlcyBpbiBLVk0mIzM5O3MgdkNQVSBjcmVhdGlvbiwgSHlwZXItViBlbXVsYXRpb24sIGFuZCBYZW4gZW11bGF0aW9uLiBJdCBtb2RpZmllcyBjb3JlIHZDUFUgaW5pdGlhbGl6YXRpb24gbG9naWMgYW5kIGh5cGVyY2FsbCBoYW5kbGVycywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIGd1ZXN0IHVzZXJzcGFjZSBhbmQgY2FuIGJlIHRyaWdnZXJlZCBjb25jdXJyZW50bHkuIEZ1enppbmcgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGVzZSBmaXhlcyBjb3JyZWN0bHkgaGFuZGxlIGNvbmN1cnJlbnQgdkNQVSBjcmVhdGlvbiBhbmQgaHlwZXJjYWxscyB3aXRob3V0IGludHJvZHVjaW5nIG5ldyByYWNlcyBvciByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDI4ODNmNTczMTMwYjUzYzJiNDg3ZWIxZjQ0NmI1YjRjYTc4M2RjOGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1biAyNSAyMjo1NDowMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMgYi9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmNcbmluZGV4IDFlZTBkMjNmODk0OTc0Li45ZDM4Y2I2NDQ2NjhkYSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9oeXBlcnYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL2h5cGVydi5jXG5AQCAtMjA2LDE0ICYjNDM7MjA2LDIwIEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtX3ZjcHUgKmdldF92Y3B1X2J5X3ZwaWR4KHN0cnVjdCBrdm0gKmt2bSwgdTMyIHZwaWR4KVxuIFxuIHN0YXRpYyBzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3luaWMgKnN5bmljX2dldChzdHJ1Y3Qga3ZtICprdm0sIHUzMiB2cGlkeClcbiB7XG4tXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3luaWMgKnN5bmljO1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdV9odiAqaHZfdmNwdTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4gXG4gXHR2Y3B1ID0gZ2V0X3ZjcHVfYnlfdnBpZHgoa3ZtLCB2cGlkeCk7XG4tXHRpZiAoIXZjcHUgfHwgIXRvX2h2X3ZjcHUodmNwdSkpXG4mIzQzO1x0aWYgKCF2Y3B1KVxuIFx0XHRyZXR1cm4gTlVMTDtcbi1cdHN5bmljID0gdG9faHZfc3luaWModmNwdSk7XG4tXHRyZXR1cm4gKHN5bmljLVx1MDAzZWFjdGl2ZSkgPyBzeW5pYyA6IE5VTEw7XG4mIzQzO1xuJiM0MztcdGh2X3ZjcHUgPSB0b19odl92Y3B1X3NhZmUodmNwdSk7XG4mIzQzO1x0aWYgKCFodl92Y3B1KVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdHN5bmljID0gXHUwMDI2aHZfdmNwdS1cdTAwM2VzeW5pYztcbiYjNDM7XHRyZXR1cm4gUkVBRF9PTkNFKHN5bmljLVx1MDAzZWFjdGl2ZSkgPyBzeW5pYyA6IE5VTEw7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGt2bV9odl9ub3RpZnlfYWNrZWRfc2ludChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBzaW50KVxuQEAgLTU5Myw4ICYjNDM7NTk5LDcgQEAgc3RhdGljIHZvaWQgc3RpbWVyX21hcmtfcGVuZGluZyhzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltZXIsXG4ge1xuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gaHZfc3RpbWVyX3RvX3ZjcHUoc3RpbWVyKTtcbiBcbi1cdHNldF9iaXQoc3RpbWVyLVx1MDAzZWluZGV4LFxuLVx0XHR0b19odl92Y3B1KHZjcHUpLVx1MDAzZXN0aW1lcl9wZW5kaW5nX2JpdG1hcCk7XG4mIzQzO1x0c2V0X2JpdChzdGltZXItXHUwMDNlaW5kZXgsIHZjcHUtXHUwMDNlYXJjaC5oeXBlcnYtXHUwMDNlc3RpbWVyX3BlbmRpbmdfYml0bWFwKTtcbiBcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9IVl9TVElNRVIsIHZjcHUpO1xuIFx0aWYgKHZjcHVfa2ljaylcbiBcdFx0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcbkBAIC02MDgsOCAmIzQzOzYxMyw3IEBAIHN0YXRpYyB2b2lkIHN0aW1lcl9jbGVhbnVwKHN0cnVjdCBrdm1fdmNwdV9odl9zdGltZXIgKnN0aW1lcilcbiBcdFx0XHRcdCAgICBzdGltZXItXHUwMDNlaW5kZXgpO1xuIFxuIFx0aHJ0aW1lcl9jYW5jZWwoXHUwMDI2c3RpbWVyLVx1MDAzZXRpbWVyKTtcbi1cdGNsZWFyX2JpdChzdGltZXItXHUwMDNlaW5kZXgsXG4tXHRcdCAgdG9faHZfdmNwdSh2Y3B1KS1cdTAwM2VzdGltZXJfcGVuZGluZ19iaXRtYXApO1xuJiM0MztcdGNsZWFyX2JpdChzdGltZXItXHUwMDNlaW5kZXgsIHZjcHUtXHUwMDNlYXJjaC5oeXBlcnYtXHUwMDNlc3RpbWVyX3BlbmRpbmdfYml0bWFwKTtcbiBcdHN0aW1lci1cdTAwM2Vtc2dfcGVuZGluZyA9IGZhbHNlO1xuIFx0c3RpbWVyLVx1MDAzZWV4cF90aW1lID0gMDtcbiB9XG5AQCAtOTcyLDcgJiM0Mzs5NzYsNiBAQCBpbnQga3ZtX2h2X3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAoIWh2X3ZjcHUpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0dmNwdS1cdTAwM2VhcmNoLmh5cGVydiA9IGh2X3ZjcHU7XG4gXHRodl92Y3B1LVx1MDAzZXZjcHUgPSB2Y3B1O1xuIFxuIFx0c3luaWNfaW5pdChcdTAwMjZodl92Y3B1LVx1MDAzZXN5bmljKTtcbkBAIC05ODgsNiAmIzQzOzk5MSwxNCBAQCBpbnQga3ZtX2h2X3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNmh2X3ZjcHUtXHUwMDNldGxiX2ZsdXNoX2ZpZm9baV0ud3JpdGVfbG9jayk7XG4gXHR9XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBFbnN1cmUgdGhlIHN0cnVjdHVyZSBpcyBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgaXQmIzM5O3MgdmlzaWJsZSB0b1xuJiM0MztcdCAqIG90aGVyIHRhc2tzLCBhcyBtdWNoIG9mIHRoZSBzdGF0ZSBjYW4gYmUgbGVnYWxseSBhY2Nlc3NlZCB3aXRob3V0XG4mIzQzO1x0ICogaG9sZGluZyB2Y3B1LVx1MDAzZW11dGV4LlxuJiM0MztcdCAqXG4mIzQzO1x0ICogUGFpcnMgd2l0aCB0aGUgc21wX2xvYWRfYWNxdWlyZSgpIGluIHRvX2h2X3ZjcHVfc2FmZSgpLlxuJiM0MztcdCAqL1xuJiM0MztcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5oeXBlcnYsIGh2X3ZjcHUpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTEwMDIsNyAmIzQzOzEwMTMsNyBAQCBpbnQga3ZtX2h2X2FjdGl2YXRlX3N5bmljKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBkb250X3plcm9fc3luaWNfcGFnZXMpXG4gXG4gXHRzeW5pYyA9IHRvX2h2X3N5bmljKHZjcHUpO1xuIFxuLVx0c3luaWMtXHUwMDNlYWN0aXZlID0gdHJ1ZTtcbiYjNDM7XHRXUklURV9PTkNFKHN5bmljLVx1MDAzZWFjdGl2ZSwgdHJ1ZSk7XG4gXHRzeW5pYy1cdTAwM2Vkb250X3plcm9fc3luaWNfcGFnZXMgPSBkb250X3plcm9fc3luaWNfcGFnZXM7XG4gXHRzeW5pYy1cdTAwM2Vjb250cm9sID0gSFZfU1lOSUNfQ09OVFJPTF9FTkFCTEU7XG4gXHRyZXR1cm4gMDtcbkBAIC0xOTM1LDE0ICYjNDM7MTk0NiwxNCBAQCBzdGF0aWMgaW50IGt2bV9odl9nZXRfdGxiX2ZsdXNoX2VudHJpZXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2h2X2hjYWxsICpoY1xuIFx0cmV0dXJuIGt2bV9odl9nZXRfaGNfZGF0YShrdm0sIGhjLCBoYy1cdTAwM2VyZXBfY250LCBoYy1cdTAwM2VyZXBfY250LCBlbnRyaWVzKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgaHZfdGxiX2ZsdXNoX2VucXVldWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLVx0XHRcdFx0IHN0cnVjdCBrdm1fdmNwdV9odl90bGJfZmx1c2hfZmlmbyAqdGxiX2ZsdXNoX2ZpZm8sXG4tXHRcdFx0XHQgdTY0ICplbnRyaWVzLCBpbnQgY291bnQpXG4mIzQzO3N0YXRpYyB2b2lkIGh2X3RsYl9mbHVzaF9lbnF1ZXVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0ICplbnRyaWVzLCBpbnQgY291bnQsXG4mIzQzO1x0XHRcdFx0IGJvb2wgaXNfZ3Vlc3RfbW9kZSlcbiB7XG4tXHRzdHJ1Y3Qga3ZtX3ZjcHVfaHYgKmh2X3ZjcHUgPSB0b19odl92Y3B1KHZjcHUpO1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdV9odl90bGJfZmx1c2hfZmlmbyAqdGxiX2ZsdXNoX2ZpZm87XG4gXHR1NjQgZmx1c2hfYWxsX2VudHJ5ID0gS1ZNX0hWX1RMQl9GTFVTSEFMTF9FTlRSWTtcbiBcbi1cdGlmICghaHZfdmNwdSlcbiYjNDM7XHR0bGJfZmx1c2hfZmlmbyA9IGt2bV9odl9nZXRfdGxiX2ZsdXNoX2ZpZm8odmNwdSwgaXNfZ3Vlc3RfbW9kZSk7XG4mIzQzO1x0aWYgKCF0bGJfZmx1c2hfZmlmbylcbiBcdFx0cmV0dXJuO1xuIFxuIFx0c3Bpbl9sb2NrKFx1MDAyNnRsYl9mbHVzaF9maWZvLVx1MDAzZXdyaXRlX2xvY2spO1xuQEAgLTE5NzAsMTUgJiM0MzsxOTgxLDE2IEBAIHN0YXRpYyB2b2lkIGh2X3RsYl9mbHVzaF9lbnF1ZXVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBpbnQga3ZtX2h2X3ZjcHVfZmx1c2hfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHVfaHZfdGxiX2ZsdXNoX2ZpZm8gKnRsYl9mbHVzaF9maWZvO1xuLVx0c3RydWN0IGt2bV92Y3B1X2h2ICpodl92Y3B1ID0gdG9faHZfdmNwdSh2Y3B1KTtcbiBcdHU2NCBlbnRyaWVzW0tWTV9IVl9UTEJfRkxVU0hfRklGT19TSVpFXTtcbiBcdGludCBpLCBqLCBjb3VudDtcbiBcdGd2YV90IGd2YTtcbiBcbi1cdGlmICghdGRwX2VuYWJsZWQgfHwgIWh2X3ZjcHUpXG4mIzQzO1x0aWYgKCF0ZHBfZW5hYmxlZClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHR0bGJfZmx1c2hfZmlmbyA9IGt2bV9odl9nZXRfdGxiX2ZsdXNoX2ZpZm8odmNwdSwgaXNfZ3Vlc3RfbW9kZSh2Y3B1KSk7XG4mIzQzO1x0aWYgKCF0bGJfZmx1c2hfZmlmbylcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0Y291bnQgPSBrZmlmb19vdXQoXHUwMDI2dGxiX2ZsdXNoX2ZpZm8tXHUwMDNlZW50cmllcywgZW50cmllcywgS1ZNX0hWX1RMQl9GTFVTSF9GSUZPX1NJWkUpO1xuIFxuQEAgLTIwMTcsNyAmIzQzOzIwMjksNiBAQCBzdGF0aWMgdTY0IGt2bV9odl9mbHVzaF90bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2h2X2hjYWxsICpoYylcbiBcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXHUwMDNla3ZtO1xuIFx0c3RydWN0IGh2X3RsYl9mbHVzaF9leCBmbHVzaF9leDtcbiBcdHN0cnVjdCBodl90bGJfZmx1c2ggZmx1c2g7XG4tXHRzdHJ1Y3Qga3ZtX3ZjcHVfaHZfdGxiX2ZsdXNoX2ZpZm8gKnRsYl9mbHVzaF9maWZvO1xuIFx0LypcbiBcdCAqIE5vcm1hbGx5LCB0aGVyZSBjYW4gYmUgbm8gbW9yZSB0aGFuICYjMzk7S1ZNX0hWX1RMQl9GTFVTSF9GSUZPX1NJWkUmIzM5O1xuIFx0ICogZW50cmllcyBvbiB0aGUgVExCIGZsdXNoIGZpZm8uIFRoZSBsYXN0IGVudHJ5LCBob3dldmVyLCBuZWVkcyB0byBiZVxuQEAgLTIxNDQsMTEgJiM0MzsyMTU1LDggQEAgc3RhdGljIHU2NCBrdm1faHZfZmx1c2hfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9odl9oY2FsbCAqaGMpXG4gXHQgKiBhbmFseXplIGl0IGhlcmUsIGZsdXNoIFRMQiByZWdhcmRsZXNzIG9mIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBzcGFjZS5cbiBcdCAqL1xuIFx0aWYgKGFsbF9jcHVzIFx1MDAyNlx1MDAyNiAhaXNfZ3Vlc3RfbW9kZSh2Y3B1KSkge1xuLVx0XHRrdm1fZm9yX2VhY2hfdmNwdShpLCB2LCBrdm0pIHtcbi1cdFx0XHR0bGJfZmx1c2hfZmlmbyA9IGt2bV9odl9nZXRfdGxiX2ZsdXNoX2ZpZm8odiwgZmFsc2UpO1xuLVx0XHRcdGh2X3RsYl9mbHVzaF9lbnF1ZXVlKHYsIHRsYl9mbHVzaF9maWZvLFxuLVx0XHRcdFx0XHQgICAgIHRsYl9mbHVzaF9lbnRyaWVzLCBoYy1cdTAwM2VyZXBfY250KTtcbi1cdFx0fVxuJiM0MztcdFx0a3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdiwga3ZtKVxuJiM0MztcdFx0XHRodl90bGJfZmx1c2hfZW5xdWV1ZSh2LCB0bGJfZmx1c2hfZW50cmllcywgaGMtXHUwMDNlcmVwX2NudCwgZmFsc2UpO1xuIFxuIFx0XHRrdm1fbWFrZV9hbGxfY3B1c19yZXF1ZXN0KGt2bSwgS1ZNX1JFUV9IVl9UTEJfRkxVU0gpO1xuIFx0fSBlbHNlIGlmICghaXNfZ3Vlc3RfbW9kZSh2Y3B1KSkge1xuQEAgLTIxNTgsOSAmIzQzOzIxNjYsNyBAQCBzdGF0aWMgdTY0IGt2bV9odl9mbHVzaF90bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2h2X2hjYWxsICpoYylcbiBcdFx0XHR2ID0ga3ZtX2dldF92Y3B1KGt2bSwgaSk7XG4gXHRcdFx0aWYgKCF2KVxuIFx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0dGxiX2ZsdXNoX2ZpZm8gPSBrdm1faHZfZ2V0X3RsYl9mbHVzaF9maWZvKHYsIGZhbHNlKTtcbi1cdFx0XHRodl90bGJfZmx1c2hfZW5xdWV1ZSh2LCB0bGJfZmx1c2hfZmlmbyxcbi1cdFx0XHRcdFx0ICAgICB0bGJfZmx1c2hfZW50cmllcywgaGMtXHUwMDNlcmVwX2NudCk7XG4mIzQzO1x0XHRcdGh2X3RsYl9mbHVzaF9lbnF1ZXVlKHYsIHRsYl9mbHVzaF9lbnRyaWVzLCBoYy1cdTAwM2VyZXBfY250LCBmYWxzZSk7XG4gXHRcdH1cbiBcbiBcdFx0a3ZtX21ha2VfdmNwdXNfcmVxdWVzdF9tYXNrKGt2bSwgS1ZNX1JFUV9IVl9UTEJfRkxVU0gsIHZjcHVfbWFzayk7XG5AQCAtMjE3MCw3ICYjNDM7MjE3Niw3IEBAIHN0YXRpYyB1NjQga3ZtX2h2X2ZsdXNoX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1faHZfaGNhbGwgKmhjKVxuIFx0XHRiaXRtYXBfemVybyh2Y3B1X21hc2ssIEtWTV9NQVhfVkNQVVMpO1xuIFxuIFx0XHRrdm1fZm9yX2VhY2hfdmNwdShpLCB2LCBrdm0pIHtcbi1cdFx0XHRodl92ID0gdG9faHZfdmNwdSh2KTtcbiYjNDM7XHRcdFx0aHZfdiA9IHRvX2h2X3ZjcHVfc2FmZSh2KTtcbiBcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIFRoZSBmb2xsb3dpbmcgY2hlY2sgcmFjZXMgd2l0aCBuZXN0ZWQgdkNQVXMgZW50ZXJpbmcvZXhpdGluZ1xuQEAgLTIxOTEsOSAmIzQzOzIxOTcsNyBAQCBzdGF0aWMgdTY0IGt2bV9odl9mbHVzaF90bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2h2X2hjYWxsICpoYylcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRcdF9fc2V0X2JpdChpLCB2Y3B1X21hc2spO1xuLVx0XHRcdHRsYl9mbHVzaF9maWZvID0ga3ZtX2h2X2dldF90bGJfZmx1c2hfZmlmbyh2LCB0cnVlKTtcbi1cdFx0XHRodl90bGJfZmx1c2hfZW5xdWV1ZSh2LCB0bGJfZmx1c2hfZmlmbyxcbi1cdFx0XHRcdFx0ICAgICB0bGJfZmx1c2hfZW50cmllcywgaGMtXHUwMDNlcmVwX2NudCk7XG4mIzQzO1x0XHRcdGh2X3RsYl9mbHVzaF9lbnF1ZXVlKHYsIHRsYl9mbHVzaF9lbnRyaWVzLCBoYy1cdTAwM2VyZXBfY250LCB0cnVlKTtcbiBcdFx0fVxuIFxuIFx0XHRrdm1fbWFrZV92Y3B1c19yZXF1ZXN0X21hc2soa3ZtLCBLVk1fUkVRX0hWX1RMQl9GTFVTSCwgdmNwdV9tYXNrKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmggYi9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmhcbmluZGV4IDFjOGY3YWFhYjA2M2QwLi4zN2EwYmNmMDNlMjgxNiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9oeXBlcnYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL2h5cGVydi5oXG5AQCAtNjIsOCAmIzQzOzYyLDIyIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV9odiAqdG9fa3ZtX2h2KHN0cnVjdCBrdm0gKmt2bSlcbiBcdHJldHVybiBcdTAwMjZrdm0tXHUwMDNlYXJjaC5oeXBlcnY7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1fdmNwdV9odiAqdG9faHZfdmNwdV9zYWZlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRW5zdXJlIHRoZSBIeXBlclYgc3RydWN0dXJlIGlzIGZ1bGx5IGluaXRpYWxpemVkIHdoZW4gYWNjZXNzaW5nIGl0XG4mIzQzO1x0ICogd2l0aG91dCBob2xkaW5nIHZjcHUtXHUwMDNlbXV0ZXggKG9yIHNvbWUgb3RoZXIgZ3VhcmFudGVlIHRoYXQgS1ZNIGNhbiYjMzk7dFxuJiM0MztcdCAqIGNvbmN1cnJlbnRseSBpbnN0YW50aWF0ZSB0aGUgc3RydWN0dXJlKS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFBhaXJzIHdpdGggdGhlIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4ga3ZtX2h2X3ZjcHVfaW5pdCgpLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldHVybiBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5oeXBlcnYpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV92Y3B1X2h2ICp0b19odl92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4mIzQzO1x0a3ZtX2xvY2tkZXBfYXNzZXJ0X3ZjcHVfaXNfbG9ja2VkX29yX3VucmVhY2hhYmxlKHZjcHUpO1xuJiM0MztcbiBcdHJldHVybiB2Y3B1LVx1MDAzZWFyY2guaHlwZXJ2O1xuIH1cbiBcbkBAIC04OCw3ICYjNDM7MTAyLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX2h2X3N5bmRiZyAqdG9faHZfc3luZGJnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBzdGF0aWMgaW5saW5lIHUzMiBrdm1faHZfZ2V0X3ZwaW5kZXgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHN0cnVjdCBrdm1fdmNwdV9odiAqaHZfdmNwdSA9IHRvX2h2X3ZjcHUodmNwdSk7XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1X2h2ICpodl92Y3B1ID0gdG9faHZfdmNwdV9zYWZlKHZjcHUpO1xuIFxuIFx0cmV0dXJuIGh2X3ZjcHUgPyBodl92Y3B1LVx1MDAzZXZwX2luZGV4IDogdmNwdS1cdTAwM2V2Y3B1X2lkeDtcbiB9XG5AQCAtMTQyLDcgJiM0MzsxNTYsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1fdmNwdSAqaHZfc3RpbWVyX3RvX3ZjcHUoc3RydWN0IGt2bV92Y3B1X2h2X3N0aW1lciAqc3RpbVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBrdm1faHZfaGFzX3N0aW1lcl9wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRzdHJ1Y3Qga3ZtX3ZjcHVfaHYgKmh2X3ZjcHUgPSB0b19odl92Y3B1KHZjcHUpO1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdV9odiAqaHZfdmNwdSA9IHRvX2h2X3ZjcHVfc2FmZSh2Y3B1KTtcbiBcbiBcdGlmICghaHZfdmNwdSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuQEAgLTE5OCwxMCAmIzQzOzIxMiwxMyBAQCBpbnQga3ZtX2dldF9odl9jcHVpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fY3B1aWQyICpjcHVpZCxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1fdmNwdV9odl90bGJfZmx1c2hfZmlmbyAqa3ZtX2h2X2dldF90bGJfZmx1c2hfZmlmbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRcdFx0XHRcdFx0XHRcdFx0ICAgYm9vbCBpc19ndWVzdF9tb2RlKVxuIHtcbi1cdHN0cnVjdCBrdm1fdmNwdV9odiAqaHZfdmNwdSA9IHRvX2h2X3ZjcHUodmNwdSk7XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1X2h2ICpodl92Y3B1ID0gdG9faHZfdmNwdV9zYWZlKHZjcHUpO1xuIFx0aW50IGkgPSBpc19ndWVzdF9tb2RlID8gSFZfTDJfVExCX0ZMVVNIX0ZJRk8gOlxuIFx0XHRcdFx0SFZfTDFfVExCX0ZMVVNIX0ZJRk87XG4gXG4mIzQzO1x0aWYgKCFodl92Y3B1KVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuIFx0cmV0dXJuIFx1MDAyNmh2X3ZjcHUtXHUwMDNldGxiX2ZsdXNoX2ZpZm9baV07XG4gfVxuIFxuQEAgLTIwOSwxMCAmIzQzOzIyNiwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX2h2X3ZjcHVfcHVyZ2VfZmx1c2hfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHVfaHZfdGxiX2ZsdXNoX2ZpZm8gKnRsYl9mbHVzaF9maWZvO1xuIFxuLVx0aWYgKCF0b19odl92Y3B1KHZjcHUpIHx8ICFrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX0hWX1RMQl9GTFVTSCwgdmNwdSkpXG4mIzQzO1x0aWYgKCFrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX0hWX1RMQl9GTFVTSCwgdmNwdSkpXG4gXHRcdHJldHVybjtcbiBcbiBcdHRsYl9mbHVzaF9maWZvID0ga3ZtX2h2X2dldF90bGJfZmx1c2hfZmlmbyh2Y3B1LCBpc19ndWVzdF9tb2RlKHZjcHUpKTtcbiYjNDM7XHRpZiAoIXRsYl9mbHVzaF9maWZvKVxuJiM0MztcdFx0cmV0dXJuO1xuIFxuIFx0a2ZpZm9fcmVzZXRfb3V0KFx1MDAyNnRsYl9mbHVzaF9maWZvLVx1MDAzZWVudHJpZXMpO1xuIH1cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaFxuaW5kZXggNmQ2Y2Q1OTA0ZGRmNjYuLmM2ZGU4NDhiZDljZWQ1IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaFxuQEAgLTU3LDE2ICYjNDM7NTcsMTQgQEAgYm9vbCBuZXN0ZWRfdm14X2NoZWNrX2lvX2JpdG1hcHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgcG9ydCxcbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCB2bWNzMTIgKmdldF92bWNzMTIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdGxvY2tkZXBfYXNzZXJ0X29uY2UobG9ja2RlcF9pc19oZWxkKFx1MDAyNnZjcHUtXHUwMDNlbXV0ZXgpIHx8XG4tXHRcdFx0ICAgICFyZWZjb3VudF9yZWFkKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZXVzZXJzX2NvdW50KSk7XG4mIzQzO1x0a3ZtX2xvY2tkZXBfYXNzZXJ0X3ZjcHVfaXNfbG9ja2VkX29yX3VucmVhY2hhYmxlKHZjcHUpO1xuIFxuIFx0cmV0dXJuIHRvX3ZteCh2Y3B1KS1cdTAwM2VuZXN0ZWQuY2FjaGVkX3ZtY3MxMjtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3Qgdm1jczEyICpnZXRfc2hhZG93X3ZtY3MxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0bG9ja2RlcF9hc3NlcnRfb25jZShsb2NrZGVwX2lzX2hlbGQoXHUwMDI2dmNwdS1cdTAwM2VtdXRleCkgfHxcbi1cdFx0XHQgICAgIXJlZmNvdW50X3JlYWQoXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNldXNlcnNfY291bnQpKTtcbiYjNDM7XHRrdm1fbG9ja2RlcF9hc3NlcnRfdmNwdV9pc19sb2NrZWRfb3JfdW5yZWFjaGFibGUodmNwdSk7XG4gXG4gXHRyZXR1cm4gdG9fdm14KHZjcHUpLVx1MDAzZW5lc3RlZC5jYWNoZWRfc2hhZG93X3ZtY3MxMjtcbiB9XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3hlbi5jIGIvYXJjaC94ODYva3ZtL3hlbi5jXG5pbmRleCA2OTRiMzFjMWZjYzlhZi4uZGIxMGYxMmQxMGNmOGIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0veGVuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ZW4uY1xuQEAgLTIyLDYgJiM0MzsyMiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjeGVuL2ludGVyZmFjZS92ZXJzaW9uLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N4ZW4vaW50ZXJmYWNlL2V2ZW50X2NoYW5uZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3hlbi9pbnRlcmZhY2Uvc2NoZWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N4ZW4veGVuLW9wcy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3hlbi9jcHVpZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3B2Y2xvY2suaFx1MDAzZVxuQEAgLTE2MTAsMTMgJiM0MzsxNjExLDE2IEBAIHN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfdmNwdV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsIGludCBjbWQsXG4gXHRpZiAoIWt2bV94ZW5fdGltZXJfZW5hYmxlZCh2Y3B1KSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuJiM0MztcdGlmICh2Y3B1LVx1MDAzZWFyY2gueGVuLnZjcHVfaWQgPT0gWEVOX1ZDUFVfSURfSU5WQUxJRClcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHZjcHUtXHUwMDNlYXJjaC54ZW4udmNwdV9pZCAhPSB2Y3B1X2lkKSB7XG4mIzQzO1x0XHQqciA9IC1FSU5WQUw7XG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0c3dpdGNoIChjbWQpIHtcbiBcdGNhc2UgVkNQVU9QX3NldF9zaW5nbGVzaG90X3RpbWVyOlxuLVx0XHRpZiAodmNwdS1cdTAwM2VhcmNoLnhlbi52Y3B1X2lkICE9IHZjcHVfaWQpIHtcbi1cdFx0XHQqciA9IC1FSU5WQUw7XG4tXHRcdFx0cmV0dXJuIHRydWU7XG4tXHRcdH1cbi1cbiBcdFx0LypcbiBcdFx0ICogVGhlIG9ubHkgZGlmZmVyZW5jZSBmb3IgMzItYml0IGNvbXBhdCBpcyB0aGUgNCBieXRlcyBvZlxuIFx0XHQgKiBwYWRkaW5nIGFmdGVyIHRoZSBpbnRlcmVzdGluZyBwYXJ0IG9mIHRoZSBzdHJ1Y3R1cmUuIFNvXG5AQCAtMTY0NCwxMCAmIzQzOzE2NDgsNiBAQCBzdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3ZjcHVfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLCBpbnQgY21kLFxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdGNhc2UgVkNQVU9QX3N0b3Bfc2luZ2xlc2hvdF90aW1lcjpcbi1cdFx0aWYgKHZjcHUtXHUwMDNlYXJjaC54ZW4udmNwdV9pZCAhPSB2Y3B1X2lkKSB7XG4tXHRcdFx0KnIgPSAtRUlOVkFMO1xuLVx0XHRcdHJldHVybiB0cnVlO1xuLVx0XHR9XG4gXHRcdGt2bV94ZW5fc3RvcF90aW1lcih2Y3B1KTtcbiBcdFx0KnIgPSAwO1xuIFx0XHRyZXR1cm4gdHJ1ZTtcbkBAIC0yMjk5LDcgJiM0MzsyMjk5LDcgQEAgc3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF9ldnRjaG5fc2VuZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBwYXJhbSwgdTY0ICpyKVxuIFxuIHZvaWQga3ZtX3hlbl9pbml0X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHZjcHUtXHUwMDNlYXJjaC54ZW4udmNwdV9pZCA9IHZjcHUtXHUwMDNldmNwdV9pZHg7XG4mIzQzO1x0dmNwdS1cdTAwM2VhcmNoLnhlbi52Y3B1X2lkID0gWEVOX1ZDUFVfSURfSU5WQUxJRDtcbiBcdHZjcHUtXHUwMDNlYXJjaC54ZW4ucG9sbF9ldnRjaG4gPSAwO1xuIFxuIFx0dGltZXJfc2V0dXAoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnhlbi5wb2xsX3RpbWVyLCBjYW5jZWxfZXZ0Y2huX3BvbGwsIDApO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuaW5kZXggYWI4Y2ZhZWM4MmQzMWUuLjBiZGZhMzY5OTM1MjdlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbkBAIC05ODksNiAmIzQzOzk4OSwxMyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1faW9fYnVzICprdm1fZ2V0X2J1cyhzdHJ1Y3Qga3ZtICprdm0sIGVudW0ga3ZtX2J1cyBpZHgpXG4gXHRcdFx0XHRcdCBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fbG9ja2RlcF9hc3NlcnRfdmNwdV9pc19sb2NrZWRfb3JfdW5yZWFjaGFibGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0Mzt7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfb25jZShsb2NrZGVwX2lzX2hlbGQoXHUwMDI2dmNwdS1cdTAwM2VtdXRleCkgfHxcbiYjNDM7XHRcdFx0ICAgIHZjcHUtXHUwMDNldmNwdV9pZHggXHUwMDNjIDAgfHxcbiYjNDM7XHRcdFx0ICAgICFyZWZjb3VudF9yZWFkKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZXVzZXJzX2NvdW50KSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX3ZjcHUgKmt2bV9nZXRfdmNwdShzdHJ1Y3Qga3ZtICprdm0sIGludCBpKVxuIHtcbiBcdGludCBudW1fdmNwdXMgPSBhdG9taWNfcmVhZChcdTAwMjZrdm0tXHUwMDNlb25saW5lX3ZjcHVzKTtcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uY1xuaW5kZXggZTQ0YzIwYzA0OTYxMGQuLjk4ZGE0Yzg4OWZmYzZjIDEwMDY0NFxuLS0tIGEvdmlydC9rdm0va3ZtX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0va3ZtX21haW4uY1xuQEAgLTQxODgsNiAmIzQzOzQxODgsOCBAQCBzdGF0aWMgaW50IGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgaWQpXG4gXHRcdGdvdG8gdmNwdV9kZWNyZW1lbnQ7XG4gXHR9XG4gXG4mIzQzO1x0dmNwdS1cdTAwM2V2Y3B1X2lkeCA9IC0xO1xuJiM0MztcbiBcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IGt2bV9ydW4pIFx1MDAzZSBQQUdFX1NJWkUpO1xuIFx0cGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfWkVSTyk7XG4gXHRpZiAoIXBhZ2UpIHtcbkBAIC00MjE2LDExICYjNDM7NDIxOCwxOCBAQCBzdGF0aWMgaW50IGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgaWQpXG4gXHRcdGdvdG8gdW5sb2NrX3ZjcHVfZGVzdHJveTtcbiBcdH1cbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFNldCB0aGUgdkNQVSYjMzk7cyBpbmRleCAqYmVmb3JlKiB0aGUgdkNQVSBpcyByZWFjaGFibGUgYnkgb3RoZXIgdGFza3MuXG4mIzQzO1x0ICogVW53aW5kIHRoZSBpbmRleCBiYWNrIHRvIC0xIG9uIGZhaWx1cmUgc28gdGhhdCBLVk0gY2FuIHVzZSB0aGUgaW5kZXhcbiYjNDM7XHQgKiB0byBkZXRlY3QgdGhhdCB0aGUgdkNQVSBpcyB1bnJlYWNoYWJsZSwgZS5nLiBmb3IgbG9ja2RlcCBhc3NlcnRzLlxuJiM0MztcdCAqL1xuIFx0dmNwdS1cdTAwM2V2Y3B1X2lkeCA9IGF0b21pY19yZWFkKFx1MDAyNmt2bS1cdTAwM2VvbmxpbmVfdmNwdXMpO1xuIFx0ciA9IHhhX2luc2VydChcdTAwMjZrdm0tXHUwMDNldmNwdV9hcnJheSwgdmNwdS1cdTAwM2V2Y3B1X2lkeCwgdmNwdSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdFdBUk5fT05fT05DRShyID09IC1FQlVTWSk7XG4tXHRpZiAocilcbiYjNDM7XHRpZiAocikge1xuJiM0MztcdFx0dmNwdS1cdTAwM2V2Y3B1X2lkeCA9IC0xO1xuIFx0XHRnb3RvIHVubG9ja192Y3B1X2Rlc3Ryb3k7XG4mIzQzO1x0fVxuIFxuIFx0LypcbiBcdCAqIE5vdyBpdCYjMzk7cyBhbGwgc2V0IHVwLCBsZXQgdXNlcnNwYWNlIHJlYWNoIGl0LiAgR3JhYiB0aGUgdkNQVSYjMzk7cyBtdXRleFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjU0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTV9IWVBFUlYmIzM0OywKICAgICYjMzQ7S1ZNX1hFTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV92bV9pb2N0bF9jcmVhdGVfdmNwdSYjMzQ7LAogICAgJiMzNDtrdm1faHZfdmNwdV9pbml0JiMzNDssCiAgICAmIzM0O2t2bV94ZW5faGNhbGxfdmNwdV9vcCYjMzQ7LAogICAgJiMzNDtrdm1faHZfZmx1c2hfdGxiJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHJhY2UgY29uZGl0aW9ucyBhbmQgdW5pbml0aWFsaXplZCBhY2Nlc3NlcyBpbiBLVk0mIzM5O3MgdkNQVSBjcmVhdGlvbiwgSHlwZXItViBlbXVsYXRpb24sIGFuZCBYZW4gZW11bGF0aW9uLiBJdCBtb2RpZmllcyBjb3JlIHZDUFUgaW5pdGlhbGl6YXRpb24gbG9naWMgYW5kIGh5cGVyY2FsbCBoYW5kbGVycywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIGd1ZXN0IHVzZXJzcGFjZSBhbmQgY2FuIGJlIHRyaWdnZXJlZCBjb25jdXJyZW50bHkuIEZ1enppbmcgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGVzZSBmaXhlcyBjb3JyZWN0bHkgaGFuZGxlIGNvbmN1cnJlbnQgdkNQVSBjcmVhdGlvbiBhbmQgaHlwZXJjYWxscyB3aXRob3V0IGludHJvZHVjaW5nIG5ldyByYWNlcyBvciByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjg4M2Y1NzMxMzBiNTNjMmI0ODdlYjFmNDQ2YjViNGNhNzgzZGM4ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVuIDI1IDIyOjU0OjAzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2h5cGVydi5jIGIvYXJjaC94ODYva3ZtL2h5cGVydi5jCmluZGV4IDFlZTBkMjNmODk0OTc0Li45ZDM4Y2I2NDQ2NjhkYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2h5cGVydi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9oeXBlcnYuYwpAQCAtMjA2LDE0ICYjNDM7MjA2LDIwIEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtX3ZjcHUgKmdldF92Y3B1X2J5X3ZwaWR4KHN0cnVjdCBrdm0gKmt2bSwgdTMyIHZwaWR4KQogCiBzdGF0aWMgc3RydWN0IGt2bV92Y3B1X2h2X3N5bmljICpzeW5pY19nZXQoc3RydWN0IGt2bSAqa3ZtLCB1MzIgdnBpZHgpCiB7Ci0Jc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwogCXN0cnVjdCBrdm1fdmNwdV9odl9zeW5pYyAqc3luaWM7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdV9odiAqaHZfdmNwdTsKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwogCiAJdmNwdSA9IGdldF92Y3B1X2J5X3ZwaWR4KGt2bSwgdnBpZHgpOwotCWlmICghdmNwdSB8fCAhdG9faHZfdmNwdSh2Y3B1KSkKJiM0MzsJaWYgKCF2Y3B1KQogCQlyZXR1cm4gTlVMTDsKLQlzeW5pYyA9IHRvX2h2X3N5bmljKHZjcHUpOwotCXJldHVybiAoc3luaWMtJmd0O2FjdGl2ZSkgPyBzeW5pYyA6IE5VTEw7CiYjNDM7CiYjNDM7CWh2X3ZjcHUgPSB0b19odl92Y3B1X3NhZmUodmNwdSk7CiYjNDM7CWlmICghaHZfdmNwdSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlzeW5pYyA9ICZhbXA7aHZfdmNwdS0mZ3Q7c3luaWM7CiYjNDM7CXJldHVybiBSRUFEX09OQ0Uoc3luaWMtJmd0O2FjdGl2ZSkgPyBzeW5pYyA6IE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkIGt2bV9odl9ub3RpZnlfYWNrZWRfc2ludChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBzaW50KQpAQCAtNTkzLDggJiM0Mzs1OTksNyBAQCBzdGF0aWMgdm9pZCBzdGltZXJfbWFya19wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdV9odl9zdGltZXIgKnN0aW1lciwKIHsKIAlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBodl9zdGltZXJfdG9fdmNwdShzdGltZXIpOwogCi0Jc2V0X2JpdChzdGltZXItJmd0O2luZGV4LAotCQl0b19odl92Y3B1KHZjcHUpLSZndDtzdGltZXJfcGVuZGluZ19iaXRtYXApOwomIzQzOwlzZXRfYml0KHN0aW1lci0mZ3Q7aW5kZXgsIHZjcHUtJmd0O2FyY2guaHlwZXJ2LSZndDtzdGltZXJfcGVuZGluZ19iaXRtYXApOwogCWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9IVl9TVElNRVIsIHZjcHUpOwogCWlmICh2Y3B1X2tpY2spCiAJCWt2bV92Y3B1X2tpY2sodmNwdSk7CkBAIC02MDgsOCAmIzQzOzYxMyw3IEBAIHN0YXRpYyB2b2lkIHN0aW1lcl9jbGVhbnVwKHN0cnVjdCBrdm1fdmNwdV9odl9zdGltZXIgKnN0aW1lcikKIAkJCQkgICAgc3RpbWVyLSZndDtpbmRleCk7CiAKIAlocnRpbWVyX2NhbmNlbCgmYW1wO3N0aW1lci0mZ3Q7dGltZXIpOwotCWNsZWFyX2JpdChzdGltZXItJmd0O2luZGV4LAotCQkgIHRvX2h2X3ZjcHUodmNwdSktJmd0O3N0aW1lcl9wZW5kaW5nX2JpdG1hcCk7CiYjNDM7CWNsZWFyX2JpdChzdGltZXItJmd0O2luZGV4LCB2Y3B1LSZndDthcmNoLmh5cGVydi0mZ3Q7c3RpbWVyX3BlbmRpbmdfYml0bWFwKTsKIAlzdGltZXItJmd0O21zZ19wZW5kaW5nID0gZmFsc2U7CiAJc3RpbWVyLSZndDtleHBfdGltZSA9IDA7CiB9CkBAIC05NzIsNyAmIzQzOzk3Niw2IEBAIGludCBrdm1faHZfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpZiAoIWh2X3ZjcHUpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JdmNwdS0mZ3Q7YXJjaC5oeXBlcnYgPSBodl92Y3B1OwogCWh2X3ZjcHUtJmd0O3ZjcHUgPSB2Y3B1OwogCiAJc3luaWNfaW5pdCgmYW1wO2h2X3ZjcHUtJmd0O3N5bmljKTsKQEAgLTk4OCw2ICYjNDM7OTkxLDE0IEBAIGludCBrdm1faHZfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJc3Bpbl9sb2NrX2luaXQoJmFtcDtodl92Y3B1LSZndDt0bGJfZmx1c2hfZmlmb1tpXS53cml0ZV9sb2NrKTsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogRW5zdXJlIHRoZSBzdHJ1Y3R1cmUgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGl0JiMzOTtzIHZpc2libGUgdG8KJiM0MzsJICogb3RoZXIgdGFza3MsIGFzIG11Y2ggb2YgdGhlIHN0YXRlIGNhbiBiZSBsZWdhbGx5IGFjY2Vzc2VkIHdpdGhvdXQKJiM0MzsJICogaG9sZGluZyB2Y3B1LSZndDttdXRleC4KJiM0MzsJICoKJiM0MzsJICogUGFpcnMgd2l0aCB0aGUgc21wX2xvYWRfYWNxdWlyZSgpIGluIHRvX2h2X3ZjcHVfc2FmZSgpLgomIzQzOwkgKi8KJiM0MzsJc21wX3N0b3JlX3JlbGVhc2UoJmFtcDt2Y3B1LSZndDthcmNoLmh5cGVydiwgaHZfdmNwdSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwMDIsNyAmIzQzOzEwMTMsNyBAQCBpbnQga3ZtX2h2X2FjdGl2YXRlX3N5bmljKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBkb250X3plcm9fc3luaWNfcGFnZXMpCiAKIAlzeW5pYyA9IHRvX2h2X3N5bmljKHZjcHUpOwogCi0Jc3luaWMtJmd0O2FjdGl2ZSA9IHRydWU7CiYjNDM7CVdSSVRFX09OQ0Uoc3luaWMtJmd0O2FjdGl2ZSwgdHJ1ZSk7CiAJc3luaWMtJmd0O2RvbnRfemVyb19zeW5pY19wYWdlcyA9IGRvbnRfemVyb19zeW5pY19wYWdlczsKIAlzeW5pYy0mZ3Q7Y29udHJvbCA9IEhWX1NZTklDX0NPTlRST0xfRU5BQkxFOwogCXJldHVybiAwOwpAQCAtMTkzNSwxNCAmIzQzOzE5NDYsMTQgQEAgc3RhdGljIGludCBrdm1faHZfZ2V0X3RsYl9mbHVzaF9lbnRyaWVzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9odl9oY2FsbCAqaGMKIAlyZXR1cm4ga3ZtX2h2X2dldF9oY19kYXRhKGt2bSwgaGMsIGhjLSZndDtyZXBfY250LCBoYy0mZ3Q7cmVwX2NudCwgZW50cmllcyk7CiB9CiAKLXN0YXRpYyB2b2lkIGh2X3RsYl9mbHVzaF9lbnF1ZXVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLQkJCQkgc3RydWN0IGt2bV92Y3B1X2h2X3RsYl9mbHVzaF9maWZvICp0bGJfZmx1c2hfZmlmbywKLQkJCQkgdTY0ICplbnRyaWVzLCBpbnQgY291bnQpCiYjNDM7c3RhdGljIHZvaWQgaHZfdGxiX2ZsdXNoX2VucXVldWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKmVudHJpZXMsIGludCBjb3VudCwKJiM0MzsJCQkJIGJvb2wgaXNfZ3Vlc3RfbW9kZSkKIHsKLQlzdHJ1Y3Qga3ZtX3ZjcHVfaHYgKmh2X3ZjcHUgPSB0b19odl92Y3B1KHZjcHUpOwomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHVfaHZfdGxiX2ZsdXNoX2ZpZm8gKnRsYl9mbHVzaF9maWZvOwogCXU2NCBmbHVzaF9hbGxfZW50cnkgPSBLVk1fSFZfVExCX0ZMVVNIQUxMX0VOVFJZOwogCi0JaWYgKCFodl92Y3B1KQomIzQzOwl0bGJfZmx1c2hfZmlmbyA9IGt2bV9odl9nZXRfdGxiX2ZsdXNoX2ZpZm8odmNwdSwgaXNfZ3Vlc3RfbW9kZSk7CiYjNDM7CWlmICghdGxiX2ZsdXNoX2ZpZm8pCiAJCXJldHVybjsKIAogCXNwaW5fbG9jaygmYW1wO3RsYl9mbHVzaF9maWZvLSZndDt3cml0ZV9sb2NrKTsKQEAgLTE5NzAsMTUgJiM0MzsxOTgxLDE2IEBAIHN0YXRpYyB2b2lkIGh2X3RsYl9mbHVzaF9lbnF1ZXVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIGludCBrdm1faHZfdmNwdV9mbHVzaF90bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXN0cnVjdCBrdm1fdmNwdV9odl90bGJfZmx1c2hfZmlmbyAqdGxiX2ZsdXNoX2ZpZm87Ci0Jc3RydWN0IGt2bV92Y3B1X2h2ICpodl92Y3B1ID0gdG9faHZfdmNwdSh2Y3B1KTsKIAl1NjQgZW50cmllc1tLVk1fSFZfVExCX0ZMVVNIX0ZJRk9fU0laRV07CiAJaW50IGksIGosIGNvdW50OwogCWd2YV90IGd2YTsKIAotCWlmICghdGRwX2VuYWJsZWQgfHwgIWh2X3ZjcHUpCiYjNDM7CWlmICghdGRwX2VuYWJsZWQpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJdGxiX2ZsdXNoX2ZpZm8gPSBrdm1faHZfZ2V0X3RsYl9mbHVzaF9maWZvKHZjcHUsIGlzX2d1ZXN0X21vZGUodmNwdSkpOwomIzQzOwlpZiAoIXRsYl9mbHVzaF9maWZvKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiAKIAljb3VudCA9IGtmaWZvX291dCgmYW1wO3RsYl9mbHVzaF9maWZvLSZndDtlbnRyaWVzLCBlbnRyaWVzLCBLVk1fSFZfVExCX0ZMVVNIX0ZJRk9fU0laRSk7CiAKQEAgLTIwMTcsNyAmIzQzOzIwMjksNiBAQCBzdGF0aWMgdTY0IGt2bV9odl9mbHVzaF90bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2h2X2hjYWxsICpoYykKIAlzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LSZndDtrdm07CiAJc3RydWN0IGh2X3RsYl9mbHVzaF9leCBmbHVzaF9leDsKIAlzdHJ1Y3QgaHZfdGxiX2ZsdXNoIGZsdXNoOwotCXN0cnVjdCBrdm1fdmNwdV9odl90bGJfZmx1c2hfZmlmbyAqdGxiX2ZsdXNoX2ZpZm87CiAJLyoKIAkgKiBOb3JtYWxseSwgdGhlcmUgY2FuIGJlIG5vIG1vcmUgdGhhbiAmIzM5O0tWTV9IVl9UTEJfRkxVU0hfRklGT19TSVpFJiMzOTsKIAkgKiBlbnRyaWVzIG9uIHRoZSBUTEIgZmx1c2ggZmlmby4gVGhlIGxhc3QgZW50cnksIGhvd2V2ZXIsIG5lZWRzIHRvIGJlCkBAIC0yMTQ0LDExICYjNDM7MjE1NSw4IEBAIHN0YXRpYyB1NjQga3ZtX2h2X2ZsdXNoX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1faHZfaGNhbGwgKmhjKQogCSAqIGFuYWx5emUgaXQgaGVyZSwgZmx1c2ggVExCIHJlZ2FyZGxlc3Mgb2YgdGhlIHNwZWNpZmllZCBhZGRyZXNzIHNwYWNlLgogCSAqLwogCWlmIChhbGxfY3B1cyAmYW1wOyZhbXA7ICFpc19ndWVzdF9tb2RlKHZjcHUpKSB7Ci0JCWt2bV9mb3JfZWFjaF92Y3B1KGksIHYsIGt2bSkgewotCQkJdGxiX2ZsdXNoX2ZpZm8gPSBrdm1faHZfZ2V0X3RsYl9mbHVzaF9maWZvKHYsIGZhbHNlKTsKLQkJCWh2X3RsYl9mbHVzaF9lbnF1ZXVlKHYsIHRsYl9mbHVzaF9maWZvLAotCQkJCQkgICAgIHRsYl9mbHVzaF9lbnRyaWVzLCBoYy0mZ3Q7cmVwX2NudCk7Ci0JCX0KJiM0MzsJCWt2bV9mb3JfZWFjaF92Y3B1KGksIHYsIGt2bSkKJiM0MzsJCQlodl90bGJfZmx1c2hfZW5xdWV1ZSh2LCB0bGJfZmx1c2hfZW50cmllcywgaGMtJmd0O3JlcF9jbnQsIGZhbHNlKTsKIAogCQlrdm1fbWFrZV9hbGxfY3B1c19yZXF1ZXN0KGt2bSwgS1ZNX1JFUV9IVl9UTEJfRkxVU0gpOwogCX0gZWxzZSBpZiAoIWlzX2d1ZXN0X21vZGUodmNwdSkpIHsKQEAgLTIxNTgsOSAmIzQzOzIxNjYsNyBAQCBzdGF0aWMgdTY0IGt2bV9odl9mbHVzaF90bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2h2X2hjYWxsICpoYykKIAkJCXYgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCBpKTsKIAkJCWlmICghdikKIAkJCQljb250aW51ZTsKLQkJCXRsYl9mbHVzaF9maWZvID0ga3ZtX2h2X2dldF90bGJfZmx1c2hfZmlmbyh2LCBmYWxzZSk7Ci0JCQlodl90bGJfZmx1c2hfZW5xdWV1ZSh2LCB0bGJfZmx1c2hfZmlmbywKLQkJCQkJICAgICB0bGJfZmx1c2hfZW50cmllcywgaGMtJmd0O3JlcF9jbnQpOwomIzQzOwkJCWh2X3RsYl9mbHVzaF9lbnF1ZXVlKHYsIHRsYl9mbHVzaF9lbnRyaWVzLCBoYy0mZ3Q7cmVwX2NudCwgZmFsc2UpOwogCQl9CiAKIAkJa3ZtX21ha2VfdmNwdXNfcmVxdWVzdF9tYXNrKGt2bSwgS1ZNX1JFUV9IVl9UTEJfRkxVU0gsIHZjcHVfbWFzayk7CkBAIC0yMTcwLDcgJiM0MzsyMTc2LDcgQEAgc3RhdGljIHU2NCBrdm1faHZfZmx1c2hfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9odl9oY2FsbCAqaGMpCiAJCWJpdG1hcF96ZXJvKHZjcHVfbWFzaywgS1ZNX01BWF9WQ1BVUyk7CiAKIAkJa3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdiwga3ZtKSB7Ci0JCQlodl92ID0gdG9faHZfdmNwdSh2KTsKJiM0MzsJCQlodl92ID0gdG9faHZfdmNwdV9zYWZlKHYpOwogCiAJCQkvKgogCQkJICogVGhlIGZvbGxvd2luZyBjaGVjayByYWNlcyB3aXRoIG5lc3RlZCB2Q1BVcyBlbnRlcmluZy9leGl0aW5nCkBAIC0yMTkxLDkgJiM0MzsyMTk3LDcgQEAgc3RhdGljIHU2NCBrdm1faHZfZmx1c2hfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9odl9oY2FsbCAqaGMpCiAJCQkJY29udGludWU7CiAKIAkJCV9fc2V0X2JpdChpLCB2Y3B1X21hc2spOwotCQkJdGxiX2ZsdXNoX2ZpZm8gPSBrdm1faHZfZ2V0X3RsYl9mbHVzaF9maWZvKHYsIHRydWUpOwotCQkJaHZfdGxiX2ZsdXNoX2VucXVldWUodiwgdGxiX2ZsdXNoX2ZpZm8sCi0JCQkJCSAgICAgdGxiX2ZsdXNoX2VudHJpZXMsIGhjLSZndDtyZXBfY250KTsKJiM0MzsJCQlodl90bGJfZmx1c2hfZW5xdWV1ZSh2LCB0bGJfZmx1c2hfZW50cmllcywgaGMtJmd0O3JlcF9jbnQsIHRydWUpOwogCQl9CiAKIAkJa3ZtX21ha2VfdmNwdXNfcmVxdWVzdF9tYXNrKGt2bSwgS1ZNX1JFUV9IVl9UTEJfRkxVU0gsIHZjcHVfbWFzayk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmggYi9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmgKaW5kZXggMWM4ZjdhYWFiMDYzZDAuLjM3YTBiY2YwM2UyODE2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL2h5cGVydi5oCkBAIC02Miw4ICYjNDM7NjIsMjIgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX2h2ICp0b19rdm1faHYoc3RydWN0IGt2bSAqa3ZtKQogCXJldHVybiAmYW1wO2t2bS0mZ3Q7YXJjaC5oeXBlcnY7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1fdmNwdV9odiAqdG9faHZfdmNwdV9zYWZlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIEVuc3VyZSB0aGUgSHlwZXJWIHN0cnVjdHVyZSBpcyBmdWxseSBpbml0aWFsaXplZCB3aGVuIGFjY2Vzc2luZyBpdAomIzQzOwkgKiB3aXRob3V0IGhvbGRpbmcgdmNwdS0mZ3Q7bXV0ZXggKG9yIHNvbWUgb3RoZXIgZ3VhcmFudGVlIHRoYXQgS1ZNIGNhbiYjMzk7dAomIzQzOwkgKiBjb25jdXJyZW50bHkgaW5zdGFudGlhdGUgdGhlIHN0cnVjdHVyZSkuCiYjNDM7CSAqCiYjNDM7CSAqIFBhaXJzIHdpdGggdGhlIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4ga3ZtX2h2X3ZjcHVfaW5pdCgpLgomIzQzOwkgKi8KJiM0MzsJcmV0dXJuIHNtcF9sb2FkX2FjcXVpcmUoJmFtcDt2Y3B1LSZndDthcmNoLmh5cGVydik7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX3ZjcHVfaHYgKnRvX2h2X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewomIzQzOwlrdm1fbG9ja2RlcF9hc3NlcnRfdmNwdV9pc19sb2NrZWRfb3JfdW5yZWFjaGFibGUodmNwdSk7CiYjNDM7CiAJcmV0dXJuIHZjcHUtJmd0O2FyY2guaHlwZXJ2OwogfQogCkBAIC04OCw3ICYjNDM7MTAyLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX2h2X3N5bmRiZyAqdG9faHZfc3luZGJnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogc3RhdGljIGlubGluZSB1MzIga3ZtX2h2X2dldF92cGluZGV4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlzdHJ1Y3Qga3ZtX3ZjcHVfaHYgKmh2X3ZjcHUgPSB0b19odl92Y3B1KHZjcHUpOwomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHVfaHYgKmh2X3ZjcHUgPSB0b19odl92Y3B1X3NhZmUodmNwdSk7CiAKIAlyZXR1cm4gaHZfdmNwdSA/IGh2X3ZjcHUtJmd0O3ZwX2luZGV4IDogdmNwdS0mZ3Q7dmNwdV9pZHg7CiB9CkBAIC0xNDIsNyAmIzQzOzE1Niw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV92Y3B1ICpodl9zdGltZXJfdG9fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBrdm1faHZfaGFzX3N0aW1lcl9wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlzdHJ1Y3Qga3ZtX3ZjcHVfaHYgKmh2X3ZjcHUgPSB0b19odl92Y3B1KHZjcHUpOwomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHVfaHYgKmh2X3ZjcHUgPSB0b19odl92Y3B1X3NhZmUodmNwdSk7CiAKIAlpZiAoIWh2X3ZjcHUpCiAJCXJldHVybiBmYWxzZTsKQEAgLTE5OCwxMCAmIzQzOzIxMiwxMyBAQCBpbnQga3ZtX2dldF9odl9jcHVpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fY3B1aWQyICpjcHVpZCwKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV92Y3B1X2h2X3RsYl9mbHVzaF9maWZvICprdm1faHZfZ2V0X3RsYl9mbHVzaF9maWZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCQkJCQkJCSAgIGJvb2wgaXNfZ3Vlc3RfbW9kZSkKIHsKLQlzdHJ1Y3Qga3ZtX3ZjcHVfaHYgKmh2X3ZjcHUgPSB0b19odl92Y3B1KHZjcHUpOwomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHVfaHYgKmh2X3ZjcHUgPSB0b19odl92Y3B1X3NhZmUodmNwdSk7CiAJaW50IGkgPSBpc19ndWVzdF9tb2RlID8gSFZfTDJfVExCX0ZMVVNIX0ZJRk8gOgogCQkJCUhWX0wxX1RMQl9GTFVTSF9GSUZPOwogCiYjNDM7CWlmICghaHZfdmNwdSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwogCXJldHVybiAmYW1wO2h2X3ZjcHUtJmd0O3RsYl9mbHVzaF9maWZvW2ldOwogfQogCkBAIC0yMDksMTAgJiM0MzsyMjYsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIGt2bV9odl92Y3B1X3B1cmdlX2ZsdXNoX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IGt2bV92Y3B1X2h2X3RsYl9mbHVzaF9maWZvICp0bGJfZmx1c2hfZmlmbzsKIAotCWlmICghdG9faHZfdmNwdSh2Y3B1KSB8fCAha3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9IVl9UTEJfRkxVU0gsIHZjcHUpKQomIzQzOwlpZiAoIWt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfSFZfVExCX0ZMVVNILCB2Y3B1KSkKIAkJcmV0dXJuOwogCiAJdGxiX2ZsdXNoX2ZpZm8gPSBrdm1faHZfZ2V0X3RsYl9mbHVzaF9maWZvKHZjcHUsIGlzX2d1ZXN0X21vZGUodmNwdSkpOwomIzQzOwlpZiAoIXRsYl9mbHVzaF9maWZvKQomIzQzOwkJcmV0dXJuOwogCiAJa2ZpZm9fcmVzZXRfb3V0KCZhbXA7dGxiX2ZsdXNoX2ZpZm8tJmd0O2VudHJpZXMpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaCBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmgKaW5kZXggNmQ2Y2Q1OTA0ZGRmNjYuLmM2ZGU4NDhiZDljZWQ1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmgKQEAgLTU3LDE2ICYjNDM7NTcsMTQgQEAgYm9vbCBuZXN0ZWRfdm14X2NoZWNrX2lvX2JpdG1hcHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgcG9ydCwKIAogc3RhdGljIGlubGluZSBzdHJ1Y3Qgdm1jczEyICpnZXRfdm1jczEyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlsb2NrZGVwX2Fzc2VydF9vbmNlKGxvY2tkZXBfaXNfaGVsZCgmYW1wO3ZjcHUtJmd0O211dGV4KSB8fAotCQkJICAgICFyZWZjb3VudF9yZWFkKCZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDt1c2Vyc19jb3VudCkpOwomIzQzOwlrdm1fbG9ja2RlcF9hc3NlcnRfdmNwdV9pc19sb2NrZWRfb3JfdW5yZWFjaGFibGUodmNwdSk7CiAKIAlyZXR1cm4gdG9fdm14KHZjcHUpLSZndDtuZXN0ZWQuY2FjaGVkX3ZtY3MxMjsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3Qgdm1jczEyICpnZXRfc2hhZG93X3ZtY3MxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JbG9ja2RlcF9hc3NlcnRfb25jZShsb2NrZGVwX2lzX2hlbGQoJmFtcDt2Y3B1LSZndDttdXRleCkgfHwKLQkJCSAgICAhcmVmY291bnRfcmVhZCgmYW1wO3ZjcHUtJmd0O2t2bS0mZ3Q7dXNlcnNfY291bnQpKTsKJiM0MzsJa3ZtX2xvY2tkZXBfYXNzZXJ0X3ZjcHVfaXNfbG9ja2VkX29yX3VucmVhY2hhYmxlKHZjcHUpOwogCiAJcmV0dXJuIHRvX3ZteCh2Y3B1KS0mZ3Q7bmVzdGVkLmNhY2hlZF9zaGFkb3dfdm1jczEyOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3hlbi5jIGIvYXJjaC94ODYva3ZtL3hlbi5jCmluZGV4IDY5NGIzMWMxZmNjOWFmLi5kYjEwZjEyZDEwY2Y4YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3hlbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ZW4uYwpAQCAtMjIsNiAmIzQzOzIyLDcgQEAKICNpbmNsdWRlICZsdDt4ZW4vaW50ZXJmYWNlL3ZlcnNpb24uaCZndDsKICNpbmNsdWRlICZsdDt4ZW4vaW50ZXJmYWNlL2V2ZW50X2NoYW5uZWwuaCZndDsKICNpbmNsdWRlICZsdDt4ZW4vaW50ZXJmYWNlL3NjaGVkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3hlbi94ZW4tb3BzLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDthc20veGVuL2NwdWlkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL3B2Y2xvY2suaCZndDsKQEAgLTE2MTAsMTMgJiM0MzsxNjExLDE2IEBAIHN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfdmNwdV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsIGludCBjbWQsCiAJaWYgKCFrdm1feGVuX3RpbWVyX2VuYWJsZWQodmNwdSkpCiAJCXJldHVybiBmYWxzZTsKIAomIzQzOwlpZiAodmNwdS0mZ3Q7YXJjaC54ZW4udmNwdV9pZCA9PSBYRU5fVkNQVV9JRF9JTlZBTElEKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAodmNwdS0mZ3Q7YXJjaC54ZW4udmNwdV9pZCAhPSB2Y3B1X2lkKSB7CiYjNDM7CQkqciA9IC1FSU5WQUw7CiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJfQomIzQzOwogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBWQ1BVT1Bfc2V0X3NpbmdsZXNob3RfdGltZXI6Ci0JCWlmICh2Y3B1LSZndDthcmNoLnhlbi52Y3B1X2lkICE9IHZjcHVfaWQpIHsKLQkJCSpyID0gLUVJTlZBTDsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0KIAkJLyoKIAkJICogVGhlIG9ubHkgZGlmZmVyZW5jZSBmb3IgMzItYml0IGNvbXBhdCBpcyB0aGUgNCBieXRlcyBvZgogCQkgKiBwYWRkaW5nIGFmdGVyIHRoZSBpbnRlcmVzdGluZyBwYXJ0IG9mIHRoZSBzdHJ1Y3R1cmUuIFNvCkBAIC0xNjQ0LDEwICYjNDM7MTY0OCw2IEBAIHN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfdmNwdV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsIGludCBjbWQsCiAJCXJldHVybiB0cnVlOwogCiAJY2FzZSBWQ1BVT1Bfc3RvcF9zaW5nbGVzaG90X3RpbWVyOgotCQlpZiAodmNwdS0mZ3Q7YXJjaC54ZW4udmNwdV9pZCAhPSB2Y3B1X2lkKSB7Ci0JCQkqciA9IC1FSU5WQUw7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQogCQlrdm1feGVuX3N0b3BfdGltZXIodmNwdSk7CiAJCSpyID0gMDsKIAkJcmV0dXJuIHRydWU7CkBAIC0yMjk5LDcgJiM0MzsyMjk5LDcgQEAgc3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF9ldnRjaG5fc2VuZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBwYXJhbSwgdTY0ICpyKQogCiB2b2lkIGt2bV94ZW5faW5pdF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQl2Y3B1LSZndDthcmNoLnhlbi52Y3B1X2lkID0gdmNwdS0mZ3Q7dmNwdV9pZHg7CiYjNDM7CXZjcHUtJmd0O2FyY2gueGVuLnZjcHVfaWQgPSBYRU5fVkNQVV9JRF9JTlZBTElEOwogCXZjcHUtJmd0O2FyY2gueGVuLnBvbGxfZXZ0Y2huID0gMDsKIAogCXRpbWVyX3NldHVwKCZhbXA7dmNwdS0mZ3Q7YXJjaC54ZW4ucG9sbF90aW1lciwgY2FuY2VsX2V2dGNobl9wb2xsLCAwKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAppbmRleCBhYjhjZmFlYzgyZDMxZS4uMGJkZmEzNjk5MzUyN2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKQEAgLTk4OSw2ICYjNDM7OTg5LDEzIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV9pb19idXMgKmt2bV9nZXRfYnVzKHN0cnVjdCBrdm0gKmt2bSwgZW51bSBrdm1fYnVzIGlkeCkKIAkJCQkJIGxvY2tkZXBfaXNfaGVsZCgmYW1wO2t2bS0mZ3Q7c2xvdHNfbG9jaykpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGt2bV9sb2NrZGVwX2Fzc2VydF92Y3B1X2lzX2xvY2tlZF9vcl91bnJlYWNoYWJsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlsb2NrZGVwX2Fzc2VydF9vbmNlKGxvY2tkZXBfaXNfaGVsZCgmYW1wO3ZjcHUtJmd0O211dGV4KSB8fAomIzQzOwkJCSAgICB2Y3B1LSZndDt2Y3B1X2lkeCAmbHQ7IDAgfHwKJiM0MzsJCQkgICAgIXJlZmNvdW50X3JlYWQoJmFtcDt2Y3B1LSZndDtrdm0tJmd0O3VzZXJzX2NvdW50KSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX3ZjcHUgKmt2bV9nZXRfdmNwdShzdHJ1Y3Qga3ZtICprdm0sIGludCBpKQogewogCWludCBudW1fdmNwdXMgPSBhdG9taWNfcmVhZCgmYW1wO2t2bS0mZ3Q7b25saW5lX3ZjcHVzKTsKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCmluZGV4IGU0NGMyMGMwNDk2MTBkLi45OGRhNGM4ODlmZmM2YyAxMDA2NDQKLS0tIGEvdmlydC9rdm0va3ZtX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCkBAIC00MTg4LDYgJiM0Mzs0MTg4LDggQEAgc3RhdGljIGludCBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGlkKQogCQlnb3RvIHZjcHVfZGVjcmVtZW50OwogCX0KIAomIzQzOwl2Y3B1LSZndDt2Y3B1X2lkeCA9IC0xOwomIzQzOwogCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IGt2bV9ydW4pICZndDsgUEFHRV9TSVpFKTsKIAlwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9aRVJPKTsKIAlpZiAoIXBhZ2UpIHsKQEAgLTQyMTYsMTEgJiM0Mzs0MjE4LDE4IEBAIHN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBpZCkKIAkJZ290byB1bmxvY2tfdmNwdV9kZXN0cm95OwogCX0KIAomIzQzOwkvKgomIzQzOwkgKiBTZXQgdGhlIHZDUFUmIzM5O3MgaW5kZXggKmJlZm9yZSogdGhlIHZDUFUgaXMgcmVhY2hhYmxlIGJ5IG90aGVyIHRhc2tzLgomIzQzOwkgKiBVbndpbmQgdGhlIGluZGV4IGJhY2sgdG8gLTEgb24gZmFpbHVyZSBzbyB0aGF0IEtWTSBjYW4gdXNlIHRoZSBpbmRleAomIzQzOwkgKiB0byBkZXRlY3QgdGhhdCB0aGUgdkNQVSBpcyB1bnJlYWNoYWJsZSwgZS5nLiBmb3IgbG9ja2RlcCBhc3NlcnRzLgomIzQzOwkgKi8KIAl2Y3B1LSZndDt2Y3B1X2lkeCA9IGF0b21pY19yZWFkKCZhbXA7a3ZtLSZndDtvbmxpbmVfdmNwdXMpOwogCXIgPSB4YV9pbnNlcnQoJmFtcDtrdm0tJmd0O3ZjcHVfYXJyYXksIHZjcHUtJmd0O3ZjcHVfaWR4LCB2Y3B1LCBHRlBfS0VSTkVMX0FDQ09VTlQpOwogCVdBUk5fT05fT05DRShyID09IC1FQlVTWSk7Ci0JaWYgKHIpCiYjNDM7CWlmIChyKSB7CiYjNDM7CQl2Y3B1LSZndDt2Y3B1X2lkeCA9IC0xOwogCQlnb3RvIHVubG9ja192Y3B1X2Rlc3Ryb3k7CiYjNDM7CX0KIAogCS8qCiAJICogTm93IGl0JiMzOTtzIGFsbCBzZXQgdXAsIGxldCB1c2Vyc3BhY2UgcmVhY2ggaXQuICBHcmFiIHRoZSB2Q1BVJiMzOTtzIG11dGV4CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2NzIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1MjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoIGZvciBLVk0gVmlydHVhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtUaGlzIGlzIHRvdWNoaW5nIHNvbWUgY3JpdGljYWwgdmlydHVhbGl6YXRpb24gaW5mcmFzdHJ1Y3R1cmUuJiMzNDsgSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhIGtlcm5lbCBwYXRjaCB0YXJnZXRpbmcgS1ZNLCBzcGVjaWZpY2FsbHkgdGhlIGVtdWxhdGlvbiBsYXllcnMgZm9yIEh5cGVyLVYgYW5kIFhlbiBvbiB4ODYgYXJjaGl0ZWN0dXJlcy4gSSYjMzk7bSBzZWVpbmcgY2hhbmdlcyBhY3Jvc3MgYSBmZXcgY29yZSBmaWxlcywgbmFtZWx5IGBoeXBlcnYuY2AgYW5kIGBoeXBlcnYuaGAgd2l0aGluIHRoZSBgYXJjaC94ODYva3ZtYCBkaXJlY3RvcnkuIFRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgYmVpbmcgbW9kaWZpZWQg4oCTIGBzeW5pY19nZXRgLCBgc3RpbWVyX21hcmtfcGVuZGluZ2AsIGBrdm1faHZfdmNwdV9pbml0YCBldGMuIC0gc3VnZ2VzdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGlzc3VlcyByZWxhdGVkIHRvIGludGVycnVwdCBoYW5kbGluZywgdGltZXIgbWFuYWdlbWVudCwgYW5kIHZDUFUgaW5pdGlhbGl6YXRpb24gd2l0aGluIHRoZSBIeXBlci1WIGVudmlyb25tZW50LgoKSSYjMzk7bSBhbHNvIHNlZWluZyBhbHRlcmF0aW9ucyBpbiBga3ZtX3hlbl9oY2FsbF92Y3B1X29wYCBhbmQgYGt2bV94ZW5faW5pdF92Y3B1YCB3aXRoaW4gYHhlbi5jYCwgd2hpY2ggY29uZmlybXMgdGhlIHNjb3BlIGV4dGVuZGluZyB0byBYZW4gZW11bGF0aW9uLiBUaGUgYG5lc3RlZC5oYCBmaWxlIGFuZCB0aGUgbW9kaWZpY2F0aW9ucyB0byBgZ2V0X3ZtY3MxMmAgYXJlIGFsc28gcHJlc2VudCwgd2hpY2ggbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gY2FwYWJpbGl0aWVzLiBBbmQsIGxvb2tpbmcgYXQgdGhlIGBrdm1faG9zdC5oYCBpbmNsdXNpb24gb2YgYGt2bV9sb2NrZGVwX2Fzc2VydF92Y3B1X2lzX2xvY2tlZF9vcl91bnJlYWNoYWJsZWAgc3VnZ2VzdHMgbG9jayBwcm90ZWN0aW9uIG1pZ2h0IGJlIGludm9sdmVkIHRvby4KCk15IGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcmFjZSBjb25kaXRpb24sIG9yIHBlcmhhcHMgc29tZSBwcm9ibGVtcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgdkNQVSBzdGF0ZSBpbiBIeXBlci1WIG9yIGluY29ycmVjdCBgdmNwdV9pZGAgaGFuZGxpbmcgaW4gWGVuLiBUaGF0IGp1bXAgdG8gIGB2Y3B1LSZndDt2Y3B1X2lkeCA9IC0xYCBpbiBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YCBhbmQgdGhlIHVzZSBvZiBgc21wX2xvYWRfYWNxdWlyZWAgaW4gYHRvX2h2X3ZjcHVfc2FmZWAgaGludHMgYXQgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWxhdGVkIHRvIGEgdkNQVSBpbmRleCBhc3NpZ25tZW50IGFuZCBtZW1vcnkgYWNjZXNzIG9yZGVyaW5nIGZvciBzeW5jaHJvbml6YXRpb24uIAoKVGhlIG5leHQgc3RlcCBpcyB0byBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uIHNldCB1cC4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgS1ZNIGlzIGVuYWJsZWQsIGFuZCB0aGF0IGVpdGhlciB0aGUgSHlwZXItViBhbmQgWGVuIGVtdWxhdGlvbiBzZXR0aW5ncyBhcmUgZW5hYmxlZC4gU28sIGBDT05GSUdfS1ZNYCwgYENPTkZJR19LVk1fSU5URUxgLCBgQ09ORklHX0tWTV9BTURgLCBhbmQgYENPTkZJR19LVk1fWEVOYCBtdXN0IGJlIHNldC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYGFyY2gveDg2L2t2bS9LY29uZmlnYCB0byBzZWUgdGhlIHNwZWNpZmljcyBmb3IgSHlwZXItViBhbmQgWGVuIGNvbmZpZ3VyYXRpb25zLiBUaGlzIGlzIGEgc29saWQsIGZ1bmN0aW9uYWwgY2hhbmdlIGFuZCBJJiMzOTtsbCBuZWVkIHRvIHJldmlldyB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX1hFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTE5Mz1jb25maWcgS1ZNX0hZUEVSVlxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4NzQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBIeXBlcnZpc29yIEludGVyYWN0aW9ucyoqCgpIbW0sIHRoaW5raW5nIGFib3V0IHRoaXMgcHJvYmxlbSwgbXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBjaGVjayBpZiBgS1ZNX1hFTmAgYW5kIGBLVk1fSFlQRVJWYCBhcmUgaW52b2x2ZWQgaW4gdGhpcy4gV2FpdCBhIG1pbnV0ZeKApiBJJiMzOTttIGdldHRpbmcgYWhlYWQgb2YgbXlzZWxmLCBJIHRob3VnaHQgYEtWTV9IWVBFUlZgIHdhc24mIzM5O3QgYWN0dWFsbHkgYSBwcm9wZXIgY29uZmlnIG9wdGlvbiBpbiB0aGlzIGNvbnRleHQuIE9rYXksIHF1aWNrIHNhbml0eSBjaGVja+KApiBZZXAsIGl0IGxvb2tzIGxpa2UgaXQgKmlzKiBhIGNvbmZpZy4gTm93IEkgbmVlZCB0byBzZWUgZXhhY3RseSB3aGF0IHRoYXQgY29uZmlnIGVudGFpbHMuIFRpbWUgdG8gZGVsdmUgaW50byB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0hZUEVSViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTE4Mj1jb25maWcgS1ZNX1NNTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5Mzpjb25maWcgS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTk3CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0cyBpbiBLVk06IEh5cGVyLVYgYW5kIFhlbioqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYEtWTV9YRU5gIGFuZCBgS1ZNX0hZUEVSVmAgaW4gdGhlIEtWTSBjb25maWdzIOKAkyB0aGF0JiMzOTtzIHRoZSBhcmVhIEkgd2FudCB0byBmb2N1cyBvbiBmb3IgZnV6emluZy4gVGltZSB0byBodW50IGRvd24gc29tZSBrZXkgZnVuY3Rpb25zLgoKRmlyc3QsIEkmIzM5O3ZlIGdvdCBgYXJjaC94ODYva3ZtL2h5cGVydi5jYC4gTGV0JiMzOTtzIHNlZTogSSYjMzk7dmUgaWRlbnRpZmllZCBga3ZtX2h2X3ZjcHVfaW5pdGAsIGBrdm1faHZfYWN0aXZhdGVfc3luaWNgLCBga3ZtX2h2X3ZjcHVfZmx1c2hfdGxiYCwgYW5kIGBrdm1faHZfZmx1c2hfdGxiYCBhcyBwb3RlbnRpYWwgY2FuZGlkYXRlcy4gVGhlbiwgb3ZlciBpbiBgYXJjaC94ODYva3ZtL3hlbi5jYCwgSSYjMzk7dmUgZ290IGBrdm1feGVuX2hjYWxsX3ZjcHVfb3BgIGFuZCBga3ZtX3hlbl9pbml0X3ZjcHVgLiBGaW5hbGx5LCBJJiMzOTttIGNoZWNraW5nIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCDigJMgYW5kIGBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHVgIGxvb2tzIGxpa2UgaXQgbWlnaHQgYmUgaW50ZXJlc3RpbmcgdG9vLgoKTm93LCBhIHF1aWNrIGFzc2Vzc21lbnQgb2YgdGhlc2UgcGF0aHMuIEkmIzM5O20gZ29pbmcgdG8gZGV0ZXJtaW5lIGlmIHRoZXkmIzM5O3JlIGNvbnNpZGVyZWQgaG90IHBhdGhzLiBMb29raW5nIGF0IGBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHVgIOKAkyBub3QgYSBoaWdoLWZyZXF1ZW5jeSBjYWxsLiBga3ZtX2h2X3ZjcHVfaW5pdGAgaXMgYWxzbyBub3QgYSBob3QgcGF0aC4gYGt2bV94ZW5faGNhbGxfdmNwdV9vcGAgaXMgYSBoeXBlcmNhbGwsIHNvIHRoYXQgb25lIGlzIGRlZmluaXRlbHkgYSBnb29kIHRhcmdldCBzaW5jZSBpdCBtaWdodCBiZSBjYWxsZWQgcHJldHR5IG9mdGVuLiBTaW1pbGFybHksIGBrdm1faHZfZmx1c2hfdGxiYCBpcyBhbHNvIGEgaHlwZXJjYWxsLgoKU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBga3ZtX2h2X2ZsdXNoX3RsYmAgYW5kIGBrdm1faHZfdmNwdV9mbHVzaF90bGJgLCB0aGV5JiMzOTtyZSBkZWZpbml0ZWx5IHdvcnRoIGV4cGxvcmluZyBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9odl9mbHVzaF90bGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaHlwZXJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL2h5cGVydi5jPTE5ODE9aW50IGt2bV9odl92Y3B1X2ZsdXNoX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTIwMjMtXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6MjAyNDpzdGF0aWMgdTY0IGt2bV9odl9mbHVzaF90bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2h2X2hjYWxsICpoYylcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0yMDI1LXtcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMjA3OS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoyMDgwOlx0XHR0cmFjZV9rdm1faHZfZmx1c2hfdGxiKGZsdXNoLnByb2Nlc3Nvcl9tYXNrLFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTIwODEtXHRcdFx0XHQgICAgICAgZmx1c2guYWRkcmVzc19zcGFjZSwgZmx1c2guZmxhZ3MsXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTIxMDktXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6MjExMDpcdFx0dHJhY2Vfa3ZtX2h2X2ZsdXNoX3RsYl9leChmbHVzaF9leC5odl92cF9zZXQudmFsaWRfYmFua19tYXNrLFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTIxMTEtXHRcdFx0XHRcdCAgZmx1c2hfZXguaHZfdnBfc2V0LmZvcm1hdCxcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMjE4NS1cdFx0XHQgKiBydW5uaW5nIG9uIHRoZSBzYW1lIEwxIHZDUFUgZnJvbSB0aGUgbW9tZW50IG9mIHRoZSByZXF1ZXN0IHVudGlsXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6MjE4NjpcdFx0XHQgKiBrdm1faHZfZmx1c2hfdGxiKCkgcmV0dXJucy4gVExCIGlzIGZ1bGx5IGZsdXNoZWQgaW4gYWxsIG90aGVyXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMjE4Ny1cdFx0XHQgKiBjYXNlcywgZS5nLiB3aGVuIHRoZSB0YXJnZXQgTDIgdkNQVSBtaWdyYXRlcyB0byBhIGRpZmZlcmVudCBMMVxuLS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYz0yNTM4PWludCBrdm1faHZfaHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMjYzMS1cdFx0fVxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjI2MzI6XHRcdHJldCA9IGt2bV9odl9mbHVzaF90bGIodmNwdSwgXHUwMDI2aGMpO1xuYXJjaC94ODYva3ZtL2h5cGVydi5jLTI2MzMtXHRcdGJyZWFrO1xuLS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0yNjQ0LVx0XHR9XG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6MjY0NTpcdFx0cmV0ID0ga3ZtX2h2X2ZsdXNoX3RsYih2Y3B1LCBcdTAwMjZoYyk7XG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMjY0Ni1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjI6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2NDMKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSHlwZXJjYWxsIEltcGxlbWVudGF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIHNlZWluZyBhIGNvbm5lY3Rpb24gaGVyZSBiZXR3ZWVuIGhvdyB0aGUgS1ZNIGh5cGVydmlzb3IgaW50ZXJhY3RzIHdpdGggaGFyZHdhcmUgdmlydHVhbGl6YXRpb24gYW5kIGhvdyBpdCBtaWdodCBiZSBlbXVsYXRpbmcgb3IgaW50ZXJhY3Rpbmcgd2l0aCBYZW4uIFNwZWNpZmljYWxseSwgYGt2bV9odl9mbHVzaF90bGJgIGlzIGJlaW5nIGludm9rZWQgdGhyb3VnaCBga3ZtX2h2X2h5cGVyY2FsbGAsIHdoaWNoIG1ha2VzIHNlbnNlOyBUTEIgZmx1c2hlcyBhcmUgZnVuZGFtZW50YWwgdG8gbWFuYWdpbmcgdmlydHVhbCBtZW1vcnkgd2l0aGluIGEgaGFyZHdhcmUtYXNzaXN0ZWQgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnQuIFRoZW4sIG92ZXIgb24gdGhlIFhlbiBzaWRlIG9mIHRoaW5ncywgSSYjMzk7bSBub3RpbmcgdGhhdCBga3ZtX3hlbl9oY2FsbF92Y3B1X29wYCBpcyBjYWxsZWQgZnJvbSBga3ZtX3hlbl9oeXBlcmNhbGxgLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHdhbnQgdG8gZGlnIGludG8gdGhhdCBga3ZtX3hlbl9oY2FsbF92Y3B1X29wYCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3Mgb2YgWGVuIGh5cGVyY2FsbCBoYW5kbGluZyBpbiB0aGlzIHNwZWNpZmljIEtWTSBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG9wZXJhdGlvbnMgYXJlIGludm9sdmVkIGluIGBrdm1feGVuX2hjYWxsX3ZjcHVfb3BgIGFuZCBob3cgaXQgbWlnaHQgYmUgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgS1ZNIGluZnJhc3RydWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1feGVuX2hjYWxsX3ZjcHVfb3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veGVuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3hlbi5jPTE2MDA9c3RydWN0IGNvbXBhdF92Y3B1X3NldF9zaW5nbGVzaG90X3RpbWVyIHtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTYwNC1cbmFyY2gveDg2L2t2bS94ZW4uYzoxNjA1OnN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfdmNwdV9vcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbG9uZ21vZGUsIGludCBjbWQsXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTYwNi1cdFx0XHRcdCAgaW50IHZjcHVfaWQsIHU2NCBwYXJhbSwgdTY0ICpyKVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYz0xNjc0PWludCBrdm1feGVuX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTE3MzYtXHRjYXNlIF9fSFlQRVJWSVNPUl92Y3B1X29wOlxuYXJjaC94ODYva3ZtL3hlbi5jOjE3Mzc6XHRcdGhhbmRsZWQgPSBrdm1feGVuX2hjYWxsX3ZjcHVfb3AodmNwdSwgbG9uZ21vZGUsIHBhcmFtc1swXSwgcGFyYW1zWzFdLFxuYXJjaC94ODYva3ZtL3hlbi5jLTE3MzgtXHRcdFx0XHRcdFx0cGFyYW1zWzJdLCBcdTAwMjZyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjI6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyNjcKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBmcmFtZWQgYXMgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOgoKKip2Q1BVIEluaXRpYWxpemF0aW9uIFBhdGhzOiBBIFF1aWNrIFJldmlldyoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHZDUFUgY3JlYXRpb24gd2l0aGluIHRoZSBLVk0gZnJhbWV3b3JrLiBJdCBsb29rcyBsaWtlIGBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHVgIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIOKAkyB0aGUgZW50cnkgcG9pbnQgZm9yIGJyaW5naW5nIGEgdmlydHVhbCBDUFUgaW50byBleGlzdGVuY2UuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gY2hlY2sgaG93IGh5cGVydiBpbml0aWFsaXplcyBhIHZDUFUsIGFuZCBJIHNlZSB0aGF0IGl0IGNhbGxzIGBrdm1faHZfdmNwdV9pbml0YC4gU2ltaWxhcmx5LCB4ZW4gdXNlcyBga3ZtX3hlbl9pbml0X3ZjcHVgLgoKR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgaHlwZXJ2IGNhbGxzLCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBrdm1faHZfdmNwdV9pbml0YCBhbmQgZ2V0IGEgc2Vuc2UgZm9yIGhvdyB0aGF0IGluaXRpYWxpemF0aW9uIGlzIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9odl92Y3B1X2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaHlwZXJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL2h5cGVydi5jPTk1OT1zdGF0aWMgdm9pZCBzdGltZXJfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltZXIsIGludCB0aW1lcl9pbmRleClcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtOTY2LVxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjk2NzppbnQga3ZtX2h2X3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtOTY4LXtcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9MTAwNT1pbnQga3ZtX2h2X2FjdGl2YXRlX3N5bmljKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBkb250X3plcm9fc3luaWNfcGFnZXMpXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTEwMDktXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6MTAxMDpcdHIgPSBrdm1faHZfdmNwdV9pbml0KHZjcHUpO1xuYXJjaC94ODYva3ZtL2h5cGVydi5jLTEwMTEtXHRpZiAocilcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9MTc2Mz1pbnQga3ZtX2h2X3NldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zciwgdTY0IGRhdGEsIGJvb2wgaG9zdClcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMTc2OS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoxNzcwOlx0aWYgKGt2bV9odl92Y3B1X2luaXQodmNwdSkpXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMTc3MS1cdFx0cmV0dXJuIDE7XG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTE3ODQ9aW50IGt2bV9odl9nZXRfbXNyX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IsIHU2NCAqcGRhdGEsIGJvb2wgaG9zdClcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMTc5MC1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoxNzkxOlx0aWYgKGt2bV9odl92Y3B1X2luaXQodmNwdSkpXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMTc5Mi1cdFx0cmV0dXJuIDE7XG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTIzNjE9aW50IGt2bV9odl9zZXRfZW5mb3JjZV9jcHVpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZW5mb3JjZSlcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMjM2Ny1cdFx0aWYgKGVuZm9yY2UpIHtcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoyMzY4Olx0XHRcdHJldCA9IGt2bV9odl92Y3B1X2luaXQodmNwdSk7XG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMjM2OS1cdFx0XHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjI1MwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gS1ZNIFZpcnR1YWwgQ1BVIEluaXRpYWxpemF0aW9uKioKCkFscmlnaHQsIHNvIGBrdm1faHZfdmNwdV9pbml0YCBpcyB0aGUga2V5IGZ1bmN0aW9uIHRyaWdnZXJlZCB3aGVuIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggTW9kZWwgU3BlY2lmaWMgUmVnaXN0ZXIgKE1TUikgYWNjZXNzIG9yIHRoZSBlbmZvcmNlbWVudCBvZiBDUFUgSWRlbnRpZmljYXRpb24gKENQVUlEKSBpbnN0cnVjdGlvbnMuIE15IGZvY3VzIGhlcmUgaXMgb24gdW5kZXJzdGFuZGluZyBob3cgdGhlIHZpcnR1YWwgQ1BVIGlzIGluaXRpYWxpemVkIHdpdGhpbiB0aGUgS1ZNIGh5cGVydmlzb3IgY29udGV4dC4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBYZW4gaHlwZXJ2aXNvciBpcyBpbnRlcmFjdGluZyB3aXRoIHRoZXNlIGluaXRpYWxpemF0aW9uczsgSSYjMzk7bGwgY2hlY2sgYGt2bV94ZW5faW5pdF92Y3B1YC4gRnJvbSBteSB1bmRlcnN0YW5kaW5nLCB0aGlzIHdpbGwgZ2l2ZSBtZSB0aGUgaW5zaWdodHMgSSBuZWVkIHRvIHNlZSBpZiBhbnkgWGVuLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIG9yIGFkYXB0YXRpb25zIGFyZSBoYXBwZW5pbmcgYXQgdGhpcyBjcml0aWNhbCBzdGFnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjI6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3hlbl9pbml0X3ZjcHUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veGVuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3hlbi5jPTIyNjU9c3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF9ldnRjaG5fc2VuZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBwYXJhbSwgdTY0ICpyKVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy0yMjk5LVxuYXJjaC94ODYva3ZtL3hlbi5jOjIzMDA6dm9pZCBrdm1feGVuX2luaXRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0veGVuLmMtMjMwMS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjMyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBxdWVzdGlvbjoKCioqVHJhY2luZyB0aGUgRXhlY3V0aW9uIFBhdGggb2YgYGt2bV94ZW5faW5pdF92Y3B1YCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBga3ZtX3hlbl9pbml0X3ZjcHVgIGlzIGFjdHVhbGx5IGJlaW5nIGNhbGxlZC4gVGhhdCYjMzk7cyB0aGUgY29yZSBxdWVzdGlvbiBoZXJlLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHJ1bm5pbmcgYSBxdWljayBzZWFyY2gsIGJ1dCBJIGtub3cgdGhpcyBpc24mIzM5O3QgYWx3YXlzIGZvb2xwcm9vZiwgZXNwZWNpYWxseSBpbiBhIGNvZGViYXNlIGxpa2UgWGVuL0tWTSB3aGVyZSB0aGluZ3MgY2FuIGJlIGR5bmFtaWNhbGx5IGxpbmtlZCBvciBoYXZlIGluZGlyZWN0IGNhbGxzLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHVzaW5nIGBncmVwYCBvciBgY3Njb3BlYCBpbml0aWFsbHksIHByb2JhYmx5IHdpdGhpbiB0aGUgcmVsZXZhbnQgS1ZNIGFuZCBYZW4gc291cmNlIGRpcmVjdG9yaWVzLgoKQnV0IHdhaXQsIGV2ZW4gYSB0ZXh0IHNlYXJjaCBtaWdodCBub3QgZ2V0IG1lIHRoZSBmdWxsIHBpY3R1cmUuIEkgbmVlZCB0byBjb25zaWRlciB0aGF0IGl0IG1pZ2h0IGJlIGNhbGxlZCBpbmRpcmVjdGx5IHRocm91Z2ggYSBmdW5jdGlvbiBwb2ludGVyIG9yIHZpYSBzb21lIHNvcnQgb2YgbWFjcm8uIFNvLCBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBzY2FuIHRoZSBjb2RlLCBsb29raW5nIGZvciBhbnkgY2x1ZXMgYWJvdXQgaG93IHZpcnR1YWwgQ1BVcyBhcmUgaW5pdGlhbGl6ZWQgd2l0aGluIHRoZSBYZW4vS1ZNIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtWTSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZXMsIGVzcGVjaWFsbHkgdGhvc2UgaW52b2x2aW5nIHRoZSB2Q1BVIGNyZWF0aW9uIGFuZCBzZXR1cC4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgZmxvdyBpbiBga3ZtX3ZjcHVfY3JlYXRlYCBvciBzaW1pbGFyIGZ1bmN0aW9ucywgYXMgd2VsbCBhcyBYZW4mIzM5O3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSwgaWYgdGhlcmUgaXMgYW4gaW50ZXJhY3Rpb24gYXQgdGhhdCB0aW1lLgoKSSBhbHNvIGtub3cgdGhhdCBYZW4gYW5kIEtWTSBpbnRlcmFjdCBhdCB2YXJpb3VzIGxldmVscywgc28gSSBuZWVkIHRvIGNvbnNpZGVyIGJvdGggdGhlIEtWTSBhbmQgWGVuIHNpZGVzIG9mIHRoaW5ncy4gSSYjMzk7bGwgcHJvYmFibHkgaGF2ZSB0byByZXZpZXcgdGhlIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlLCBpZiBhcHByb3ByaWF0ZSBmb3IgdGhpcyBmdW5jdGlvbiwgc2luY2UgdGhhdCYjMzk7cyBhIGNvbW1vbiBpbnRlZ3JhdGlvbiBwb2ludC4gSXMgaXQgY2FsbGVkIGR1cmluZyBkb21haW4gY3JlYXRpb24sIHZDUFUgc3RhcnQtdXAsIG9yIHNvbWV0aGluZyBtb3JlIG51YW5jZWQ/IFJpZ2h0LCBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IFhlbiBoYW5kbGVzIGd1ZXN0IHZpcnR1YWxpemF0aW9uLgoKU28sIEkmIzM5O2xsIHN0YXJ0IHdpdGggdGhlIG9idmlvdXMgdGV4dHVhbCBzZWFyY2ggYW5kIHRoZW4gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBjYWxsIHN0YWNrcyBhbmQgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2VzIHRvIHNlZSB3aGVyZSBga3ZtX3hlbl9pbml0X3ZjcHVgIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIHZpcnR1YWwgQ1BVIG1hbmFnZW1lbnQuIEkga25vdyBpdCYjMzk7cyBwcm9iYWJseSBpbnZvbHZlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB2Q1BVJiMzOTtzIGxpZmVjeWNsZSwgYnV0IHBpbnBvaW50aW5nICpleGFjdGx5KiB3aGVuIGFuZCAqaG93KiBpcyB0aGUgcmVhbCBnb2FsIGhlcmUuIE9rYXksIGxldCYjMzk7cyBzdGFydCB3aXRoIHRob3NlIHNlYXJjaGVzLi4uIGFuZCBjcm9zcy1yZWZlcmVuY2Ugd2l0aCB0aGUgcmVsZXZhbnQga2VybmVsIGRvY3VtZW50YXRpb24gaWYgSSBuZWVkIHRvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1feGVuX2luaXRfdmNwdSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jPTkyODM9aW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTM1My1cbmFyY2gveDg2L2t2bS94ODYuYzo5MzU0Olx0a3ZtX3hlbl9pbml0X3ZjcHUodmNwdSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtOTM1NS1cdHZjcHVfbG9hZCh2Y3B1KTtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmM9MjI2NT1zdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX2V2dGNobl9zZW5kKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHBhcmFtLCB1NjQgKnIpXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTIyOTktXG5hcmNoL3g4Ni9rdm0veGVuLmM6MjMwMDp2b2lkIGt2bV94ZW5faW5pdF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS94ZW4uYy0yMzAxLXtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmg9MzE9dm9pZCBrdm1feGVuX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bSAqa3ZtKTtcbmFyY2gveDg2L2t2bS94ZW4uaDozMjp2b2lkIGt2bV94ZW5faW5pdF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0veGVuLmgtMzMtdm9pZCBrdm1feGVuX2Rlc3Ryb3lfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS94ZW4uaD0xMjI9c3RhdGljIGlubGluZSB2b2lkIGt2bV94ZW5fZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5oLTEyNS1cbmFyY2gveDg2L2t2bS94ZW4uaDoxMjY6c3RhdGljIGlubGluZSB2b2lkIGt2bV94ZW5faW5pdF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS94ZW4uaC0xMjcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzY2MgoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyBWQ1BVIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgVkNQVSBjcmVhdGlvbiBwcm9jZXNzIHdpdGhpbiB0aGUgS1ZNL1hlbiBpbnRlZ3JhdGlvbi4gSXQgc2VlbXMgdGhhdCB0aGUgYGt2bV94ZW5faW5pdF92Y3B1YCBmdW5jdGlvbiBpcyB0aGUgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBYZW4tc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24sIGFuZCBpdCYjMzk7cyBjYWxsZWQgZHVyaW5nIGBrdm1fYXJjaF92Y3B1X2NyZWF0ZWAuIFRoYXQgbWFrZXMgc2Vuc2UuCgpOb3csIHRvIGdldCBhIGJldHRlciBoaWdoLWxldmVsIHBpY3R1cmUgb2YgaG93IHRoaXMgaW5pdGlhbGl6YXRpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIEtWTSBWQ1BVIGNyZWF0aW9uIHByb2Nlc3MsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YCBmdW5jdGlvbiBpbiBgdmlydC9rdm0va3ZtX21haW4uY2AuIFRoaXMgc2hvdWxkIGdpdmUgbWUgc29tZSBjb250ZXh0IGFib3V0IGhvdyB0aGUgVkNQVSBpcyBhY3R1YWxseSByZXF1ZXN0ZWQgYW5kIGNvbmZpZ3VyZWQgYXQgdGhlIGh5cGVydmlzb3IgbGV2ZWwsIGJlZm9yZSB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGlzIGtpY2tlZCBvZmYuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBiYXNlIHRvIHVuZGVyc3RhbmQgdGhlIGVudGlyZSB3b3JrZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjI6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jPTM5NjA9dm9pZCBrdm1fdmNwdV9vbl9zcGluKHN0cnVjdCBrdm1fdmNwdSAqbWUsIGJvb2wgeWllbGRfdG9fa2VybmVsX21vZGUpXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0zOTcwLVxudmlydC9rdm0va3ZtX21haW4uYzozOTcxOlx0LyogUGFpcnMgd2l0aCB0aGUgc21wX3dtYigpIGluIGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdSgpLiAqL1xudmlydC9rdm0va3ZtX21haW4uYy0zOTcyLVx0c21wX3JtYigpO1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9NDEzMT1zdGF0aWMgdm9pZCBrdm1fY3JlYXRlX3ZjcHVfZGVidWdmcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy00MTUxLSAqL1xudmlydC9rdm0va3ZtX21haW4uYzo0MTUyOnN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBpZClcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDE1My17XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz00Mzg4PXN0YXRpYyBpbnQga3ZtX3dhaXRfZm9yX3ZjcHVfb25saW5lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ0MDAtXHQgKiBBY3F1aXJlIGFuZCByZWxlYXNlIHRoZSB2Q1BVJiMzOTtzIG11dGV4IHRvIHdhaXQgZm9yIHZDUFUgY3JlYXRpb24gdG9cbnZpcnQva3ZtL2t2bV9tYWluLmM6NDQwMTpcdCAqIGNvbXBsZXRlIChrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHUoKSBob2xkcyB0aGUgbXV0ZXggdW50aWwgdGhlIHZDUFVcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDQwMi1cdCAqIGlzIGZ1bGx5IG9ubGluZSkuXG4tLVxudmlydC9rdm0va3ZtX21haW4uYz01MTU3PXN0YXRpYyBsb25nIGt2bV92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUxNjctXHRjYXNlIEtWTV9DUkVBVEVfVkNQVTpcbnZpcnQva3ZtL2t2bV9tYWluLmM6NTE2ODpcdFx0ciA9IGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdShrdm0sIGFyZyk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUxNjktXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDUwNQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDU4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNIFZDUFUgSW5pdGlhbGl6YXRpb24gYW5kIFN5bmNocm9uaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIHJldmlld2luZyB0aGlzIHBhdGNoIGFuZCBJJiMzOTttIHNlZWluZyBhIGZldyBrZXkgYXJlYXMgb2YgaW1wcm92ZW1lbnQgY29uY2VybmluZyBLVk0mIzM5O3MgVkNQVSBpbml0aWFsaXphdGlvbiBhbmQgc3luY2hyb25pemF0aW9uLiBUaGUgbWFpbiB0YWtlYXdheSBoZXJlIGlzIHRoYXQgdGhlc2UgYXJlIGFsbCBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCBhcHBlYXIgdG8gYWRkcmVzcyByYWNlIGNvbmRpdGlvbnMgYW5kIHBvdGVudGlhbCBhY2Nlc3MgdmlvbGF0aW9ucyB0byB1bmluaXRpYWxpemVkIGRhdGEuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBub3RpbmcgdGhlIHdheSB0aGUgcGF0Y2ggaGFuZGxlcyB0aGUgYEtWTV9DUkVBVEVfVkNQVWAgaW9jdGwgaGFuZGxlciwgYGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdWAuIEl0IHNlZW1zIHRoZSBkZXNpZ24gbm93IGluY2x1ZGVzIGFuIGVhcmx5IHNldHRpbmcgb2YgYHZjcHUtJmd0O3ZjcHVfaWR4ID0gLTFgIHdpdGhpbiB0aGUgYGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdWAgZnVuY3Rpb24gYW5kIHJlc2V0dGluZyBpdCB0byAtMSBvbiBmYWlsdXJlLiBUaGlzIHN0cmlrZXMgbWUgYXMgYSBkZWxpYmVyYXRlIHN0cmF0ZWd5IHRvIHByZXZlbnQgb3RoZXIgdGFza3MgZnJvbSBpbmFkdmVydGVudGx5IGFjY2Vzc2luZyBhIHBhcnRpYWxseSBpbml0aWFsaXplZCB2Q1BVLiBJdCBhbHNvIGxvb2tzIGxpa2UgYSBjbGV2ZXIgd2F5IHRvIGVuc3VyZSBLVk0gY2FuIHJlbGlhYmx5IGRldGVjdCBhbiB1bnJlYWNoYWJsZSB2Q1BVLiBHb29kLCBwcm9hY3RpdmUgZGVzaWduLgoKQmV5b25kIHRoYXQsIHRoZSBjaGFuZ2VzIHRvIGB0b19odl92Y3B1X3NhZmVgIGFyZSBpbnRlcmVzdGluZy4gVXNpbmcgYHNtcF9sb2FkX2FjcXVpcmVgIGFuZCB0aGUgbW9kaWZpY2F0aW9uIHRvIGBrdm1faHZfdmNwdV9pbml0YCB0byB1c2UgYHNtcF9zdG9yZV9yZWxlYXNlYCBjbGVhcmx5IGluZGljYXRlcyBhbiBlZmZvcnQgdG8gc2VyaWFsaXplIGFjY2VzcyB0byB0aGUgYHZjcHUtJmd0O2FyY2guaHlwZXJ2YCBkYXRhIHN0cnVjdHVyZSBhbmQgYXZvaWQgdGhhdCByYWNlIGNvbmRpdGlvbi4gSXQmIzM5O3MgdGhlIHN0YW5kYXJkIG1lbW9yeSBiYXJyaWVyIHN5bmNocm9uaXphdGlvbiBwYXR0ZXJuIHRvIGhhbmRsZSBtZW1vcnkgb3JkZXJpbmcuCgpUaGVyZSYjMzk7cyBhbHNvIGEgbW9kaWZpY2F0aW9uIHRvIGBrdm1feGVuX2hjYWxsX3ZjcHVfb3BgLCB3aGljaCBub3cgaW5jbHVkZXMgY2hlY2tzIGZvciBgdmNwdS0mZ3Q7YXJjaC54ZW4udmNwdV9pZCA9PSBYRU5fVkNQVV9JRF9JTlZBTElEYCBhbmQgYHZjcHUtJmd0O2FyY2gueGVuLnZjcHVfaWQgIT0gdmNwdV9pZGAuIFRoaXMgaXMgYWJvdXQgZ3VhcmRpbmcgYWdhaW5zdCB1c2luZyB0aGUgYHZjcHVfaWRgIGJlZm9yZSBpdCYjMzk7cyBiZWVuIGluaXRpYWxpemVkIHByb3Blcmx5LiBTb2xpZC4KCkZpbmFsbHksIHRoZSBjaGFuZ2UgdG8gYGt2bV9odl9mbHVzaF90bGJgIGxvb2tzIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIHNoaWZ0IHRvIHBhc3NpbmcgYGlzX2d1ZXN0X21vZGVgIHRvIGBodl90bGJfZmx1c2hfZW5xdWV1ZWAgaW5zdGVhZCBvZiBkaXJlY3RseSBjYWxsaW5nIGBrdm1faHZfZ2V0X3RsYl9mbHVzaF9maWZvYCBpcyBhIG1pbm9yLCB5ZXQgbGlrZWx5IGltcG9ydGFudCwgcmVmYWN0b3JpbmcgdGhhdCBJIHNob3VsZCB1bmRlcnN0YW5kIGF0IGEgbG93IGxldmVsIHRvIG1ha2Ugc3VyZSB0aGUgYmVoYXZpb3IgaXMgY29uc2lzdGVudC4KCk92ZXJhbGwsIHRoaXMgcGF0Y2ggc2VlbXMgcHJldHR5IHNvbGlkIGFuZCBzaG91bGQgaW1wcm92ZSByb2J1c3RuZXNzIGFuZCByZWxpYWJpbGl0eS4gQ29uc2lkZXJpbmcgdGhlIG5hdHVyZSBvZiB0aGVzZSBjaGFuZ2VzIOKAkyBmb2N1c2luZyBvbiBpbml0aWFsaXphdGlvbiBhbmQgZGF0YSBhY2Nlc3Mg4oCTIHRoZXNlIGFyZSBkZWZpbml0ZWx5IGFyZWFzIHJpcGUgZm9yIGZ1enppbmcuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgY29yZSBzeW1ib2xzIHRoYXQgd291bGQgbWFrZSB0aGUgYmVzdCBmdXp6IHRhcmdldHMuIEZyb20gbXkgaW5pdGlhbCBhc3Nlc3NtZW50LCBJIGFtIGdvaW5nIHRvIGZvY3VzIG9uOiBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YCwgYGt2bV9odl92Y3B1X2luaXRgLCBga3ZtX3hlbl9oY2FsbF92Y3B1X29wYCwgYGt2bV9odl9mbHVzaF90bGJgLCBhbmQgYGt2bV9odl92Y3B1X2ZsdXNoX3RsYmAuCgpHaXZlbiB0aGUgcG90ZW50aWFsIGZvciBndWVzdC10cmlnZ2VyZWQgYWN0aW9ucywgdGhlIGxhdHRlciB0aHJlZSAoYGt2bV9odl92Y3B1X2luaXRgLCBga3ZtX3hlbl9oY2FsbF92Y3B1X29wYCwgYW5kIGBrdm1faHZfZmx1c2hfdGxiYCkgYXJlIGV4Y2VsbGVudCB0YXJnZXRzIGJlY2F1c2UgdGhleSBhcmUgcmVsYXRlZCB0byBoeXBlcmNhbGxzIGFuZCBNU1IgYWNjZXNzLiBUaGUgVkNQVSBjcmVhdGlvbiBwYXRoLCByZXByZXNlbnRlZCBieSBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YCwgaXMgbW9yZSBhIHNsb3dlciBwYXRoIGJ1dCB0aGUgY29yZSBvZiB0aGUgcGF0Y2guIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaWYgdGhlIHBhdGggb2YgYGt2bV9odl92Y3B1X2ZsdXNoX3RsYmAgb2ZmZXJzIG1vcmUgb3Bwb3J0dW5pdGllcyBmb3IgbW9yZSB0YXJnZXRlZCB0ZXN0aW5nLiBMZXQmIzM5O3MgZGlnIGRlZXBlciBpbnRvIHRoYXQgb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1faHZfdmNwdV9mbHVzaF90bGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaHlwZXJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL2h5cGVydi5jPTE5NDk9c3RhdGljIHZvaWQgaHZfdGxiX2ZsdXNoX2VucXVldWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKmVudHJpZXMsIGludCBjb3VudCxcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMTk4MC1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoxOTgxOmludCBrdm1faHZfdmNwdV9mbHVzaF90bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTE5ODIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjAyNQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqVHJhY2luZyB0aGUgVExCIEZsdXNoIGluIEtWTSoqCgpBbHJpZ2h0LCBzbyB0aGUgY29yZSBxdWVzdGlvbiBidXp6aW5nIGluIG15IGhlYWQgaXM6IHdoZXJlIGV4YWN0bHkgZG9lcyBga3ZtX2h2X3ZjcHVfZmx1c2hfdGxiYCBnZXQgaW52b2tlZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNhbGwgc2l0ZXMgdG8gcmVhbGx5IGdyYXNwIGl0cyByb2xlIGluIEtWTSYjMzk7cyBoeXBlcnZpc29yIG9wZXJhdGlvbnMsIGVzcGVjaWFsbHkgY29uY2VybmluZyBUTEIgY29oZXJlbmN5LiBLbm93aW5nIHRoZSBwb2ludHMgb2YgaW52b2NhdGlvbiB3aWxsIHRlbGwgbWUgdW5kZXIgd2hhdCBjb25kaXRpb25zIHRoZSBoeXBlcnZpc29yIGRlZW1zIGEgVExCIGZsdXNoIG5lY2Vzc2FyeS4gSXMgaXQgdHJpZ2dlcmVkIGJ5IGd1ZXN0IHdyaXRlcywgZ3Vlc3QgcGFnZSB0YWJsZSBtb2RpZmljYXRpb25zLCBvciBleHRlcm5hbCBldmVudHM/CgpJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgdXBzdHJlYW0gY2FsbGVycyB0byBzdGFydCBmb3JtaW5nIGEgY2xlYXIgcGljdHVyZS4gSSB3aWxsIHVzZSB0aGUgY29kZSBiYXNlIGFuZCBhIGdvb2QgZ3JlcHBpbmcgc3RyYXRlZ3kgKG9yIHByZWZlcmFibHkgbXkgSURFKSB0byBmaW5kIHdoZXJlIGBrdm1faHZfdmNwdV9mbHVzaF90bGJgIGlzIGNhbGxlZCBpbiB0aGUgc291cmNlIHRyZWUuIEtub3dpbmcgdGhlIGNhbGwgaGllcmFyY2h5IHdpbGwgYmUgY3J1Y2lhbCB0byBhc3Nlc3NpbmcgaXRzIGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2UgYW5kLCBjcml0aWNhbGx5LCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMuIFVuZGVyc3RhbmRpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgY29udGV4dCB3aWxsIHByb3ZpZGUgaGludHMgcmVnYXJkaW5nIHRoZSBpbnRlbnQgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBzcGVjaWZpYyBUTEIgZmx1c2hpbmcgb3BlcmF0aW9uLgoKRnVydGhlcm1vcmUsIEkgaGF2ZSB0byBrZWVwIHRoZSBpbXBhY3Qgb24gdGhlIGd1ZXN0IGluIG1pbmQuIFdoYXQgaXMgdGhlIGltcGFjdCBvbiBwZXJmb3JtYW5jZSBmb3IgYSBndWVzdCB2Q1BVPyBJcyB0aGUgY29zdCBvZiBmbHVzaGluZyB0aGUgVExCIGhpZ2g/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiwgb3Igc3BlY2lmaWMgQ1BVIGZlYXR1cmVzIGxpa2UgZXh0ZW5kZWQgcGFnZSB0YWJsZXMgKEVQVCk/IEFyZSB0aGVyZSBhbnkgb3B0aW1pemF0aW9ucyBpbiBwbGFjZSB0byBtaW5pbWl6ZSB0aGUgZmx1c2ggc2NvcGU/IFRoZXNlIGZvbGxvdy11cCBxdWVzdGlvbnMgd2lsbCBkZWZpbmUgbXkgbmV4dCByZXNlYXJjaCBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1faHZfdmNwdV9mbHVzaF90bGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9oeXBlcnYuYz0xOTQ5PXN0YXRpYyB2b2lkIGh2X3RsYl9mbHVzaF9lbnF1ZXVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0ICplbnRyaWVzLCBpbnQgY291bnQsXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTE5ODAtXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6MTk4MTppbnQga3ZtX2h2X3ZjcHVfZmx1c2hfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0xOTgyLXtcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2Lmg9Mjc1PXN0YXRpYyBpbmxpbmUgdm9pZCBrdm1faHZfbmVzdGVkX3RyYW5zdGlvbl90bGJfZmx1c2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuaC0yODctXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2Lmg6Mjg4OmludCBrdm1faHZfdmNwdV9mbHVzaF90bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbmFyY2gveDg2L2t2bS9oeXBlcnYuaC0yODktI2Vsc2UgLyogQ09ORklHX0tWTV9IWVBFUlYgKi9cbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9ODAwMT1zdGF0aWMgaW50IHZjcHVfZW50ZXJfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy04MDY0LVx0XHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9IVl9UTEJfRkxVU0gsIHZjcHUpIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL3g4Ni5jOjgwNjU6XHRcdCAgICBrdm1faHZfdmNwdV9mbHVzaF90bGIodmNwdSkpXG5hcmNoL3g4Ni9rdm0veDg2LmMtODA2Ni1cdFx0XHRrdm1fdmNwdV9mbHVzaF90bGJfZ3Vlc3QodmNwdSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2ODU3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFByaW9yaXRpemF0aW9uIG9mIEtWTSBGdXp6aW5nIFRhcmdldHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIEtWTSBmdW5jdGlvbnMgYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoaWNoIG9uZXMgYXJlIHByaW1lIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcsIGdpdmVuIHRoYXQgdGhleSYjMzk7cmUgYWxsIHBvdGVudGlhbCBlbnRyeSBwb2ludHMuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyBga3ZtX2h2X3ZjcHVfZmx1c2hfdGxiYC4gSSBrbm93IHRoYXQmIzM5O3MgY2FsbGVkIHdpdGhpbiBgdmNwdV9lbnRlcl9ndWVzdGAsIGFuZCB0aGF0JiMzOTtzIGEgKmhvdCBwYXRoKi4gV2UgbmVlZCB0byBiZSB2ZXJ5IGNhcmVmdWwgYWJvdXQgYWRkaW5nIHRoaW5ncyB0byBgRm9jdXNTeW1ib2xzYCB0aGF0IGltcGFjdCBwZXJmb3JtYW5jZSB0aGVyZS4gU28sIEkmIzM5O20gZ29pbmcgdG8gc2V0IHRoYXQgYXNpZGUgZm9yIG5vdy4KCk5vdywgYGt2bV9odl9mbHVzaF90bGJgIGlzIGRpZmZlcmVudC4gSXQmIzM5O3MgY2FsbGVkIGZyb20gYGt2bV9odl9oeXBlcmNhbGxgLCB3aGljaCwgd2hpbGUgZnJlcXVlbnRseSBjYWxsZWQsIGlzbiYjMzk7dCB0aGUgc2FtZSBraW5kIG9mIGNvcmUgbG9vcCBsaWtlIGB2Y3B1X2VudGVyX2d1ZXN0YC4gSXQmIzM5O3MgYSBoeXBlcmNhbGwgaGFuZGxlciwgYW5kIGh5cGVyY2FsbHMgYXJlIGV4Y2VsbGVudCBmdXp6aW5nIHRhcmdldHMgYmVjYXVzZSBvZiB0aGVpciBzcGVjaWZpYyBpbnB1dHMuIFRoaXMgbG9va3MgcHJvbWlzaW5nLgoKVGhlbiB0aGVyZSYjMzk7cyBga3ZtX3hlbl9oY2FsbF92Y3B1X29wYC4gQW5vdGhlciBoeXBlcmNhbGwgaGFuZGxlciwgc28gaXQgYWxzbyBzZWVtcyBsaWtlIGEgZ3JlYXQgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJJiMzOTtsbCBtYWtlIGEgbm90ZSBvZiB0aGlzLgoKYGt2bV9odl92Y3B1X2luaXRgIGlzIGNhbGxlZCBvbiBzcGVjaWZpYyBNU1IgYWNjZXNzZXMsIGFuZCB0aGF0IHNvdW5kcyBsaWtlIGEgZ29vZCB0YXJnZXQgYXMgd2VsbC4gTVNSIGFjY2Vzc2VzLCBsaWtlIGh5cGVyY2FsbHMsIGNhbiBiZSBxdWl0ZSBudWFuY2VkIGFuZCBhcmUgcmlwZSBmb3IgZnV6emluZy4KCkFuZCBmaW5hbGx5LCBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YC4gQW4gaW9jdGwgaGFuZGxlciBpcyBhbm90aGVyIGdvb2QgY2hvaWNlLCBpdCYjMzk7cyBhbiBJL08gcGF0aC4gVGhhdCBnaXZlcyB1cyBtb3JlIGFjY2VzcyBwb2ludHMgYW5kIGRpZmZlcmVudCBleGVjdXRpb24gY29udGV4dHMuCgpOb3csIGJlZm9yZSBJIGNvbW1pdCB0byBhbnl0aGluZywgSSB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IHdlIGhhdmUgYENPTkZJR19LVk1gLCBgQ09ORklHX0tWTV9IWVBFUlZgLCBhbmQgYENPTkZJR19LVk1fWEVOYCBlbmFibGVkLCB3aGljaCB3b3VsZCBjb25maXJtIHRoZXNlIGZlYXR1cmVzIGFyZSBhY3RpdmUgYW5kIGF2YWlsYWJsZSBmb3IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjI6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9YRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOTM9Y29uZmlnIEtWTV9IWVBFUlZcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjI6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2NzkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgS1ZNIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIGBLVk1fSFlQRVJWYCBhbmQgYEtWTV9YRU5gIGFyZSB0aGUgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHdlJiMzOTtyZSBmb2N1c2luZyBvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgSSYjMzk7dmUgZ290IHRoZSBjb3JyZWN0IGNvbmZpZyBpZGVudGlmaWVycy4gTm8gbmVlZCB0byBiZWxhYm9yIHRoZSBvYnZpb3VzLCBqdXN0IGEgcXVpY2sgY2hlY2sgdG8gbWFrZSBzdXJlIHRob3NlIGFyZSBpbmRlZWQgdGhlIHJlbGV2YW50IGNvbmZpZ3MuCgpUaGUgbmV4dCB0aGluZyBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nIGlzIGFib3V0IGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgZWl0aGVyIG9mIHRoZXNlIGNvbmZpZ3VyYXRpb25zIHJlbGllcyBvbiBhbnkgb3RoZXIga2VybmVsIGZlYXR1cmVzIG9yIG1vZHVsZXMuIEFyZSB0aGV5IHNlbGYtY29udGFpbmVkLCBvciBhcmUgdGhleSBidWlsdCBvbiB0b3Agb2Ygc29tZSB1bmRlcmx5aW5nIGluZnJhc3RydWN0dXJlPyBBIGRlcGVuZGVuY3kgYW5hbHlzaXMgaXMgY3J1Y2lhbCBoZXJlLiBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgd2lsbCBpbmZvcm0gaG93IGNsZWFubHkgdGhleSBpbnRlZ3JhdGUsIGFuZCBob3cgdG8gYXBwcm9hY2ggYW55IHBvdGVudGlhbCBjb25mbGljdHMgb3IgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgZmVhdHVyZXMuIExldCYjMzk7cyBkaWcgaW50byB0aGF0IGFuZCBzZWUgd2hhdCB3ZSB1bmNvdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0hZUEVSViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTE4Mj1jb25maWcgS1ZNX1NNTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5Mzpjb25maWcgS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjI6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgwNTcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBLY29uZmlnIGZvciBgS1ZNX0hZUEVSVmAqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmb3IgYEtWTV9IWVBFUlZgLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gdW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGFuZCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBvcHRpb24uIEkgd2FudCB0byBzZWUgaG93IGl0JiMzOTtzIGludGVncmF0ZWQgd2l0aGluIHRoZSBsYXJnZXIgS1ZNIGVjb3N5c3RlbS4KCkkmIzM5O20gbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6CgoqICAgKipEZXBlbmRlbmNpZXM6KiogV2hhdCBvdGhlciBLY29uZmlnIHN5bWJvbHMgZG9lcyBgS1ZNX0hZUEVSVmAgZGVwZW5kIG9uPyBBcmUgdGhlcmUgYW55IHVwc3RyZWFtL2Rvd25zdHJlYW0gZGVwZW5kZW5jaWVzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBlbmFibGluZyB0aGlzIG9wdGlvbiBpbXBsaWNpdGx5IHB1bGxzIGluIG9yIGFmZmVjdHMgb3RoZXIgZmVhdHVyZXMuIEkmIzM5O2xsIG5lZWQgdG8gYXNzZXNzIHRoZSBwb3RlbnRpYWwgZm9yIGNvbmZsaWN0cywgdG9vLgoqICAgKipUcmlnZ2VyczoqKiBXaGF0IGRvZXMgaXQgZW5hYmxlPyBEb2VzIGl0IGJyaW5nIGluIGFueSBuZXcgZHJpdmVycywgbW9kdWxlcywgb3IgZmVhdHVyZXM/IElmIHNvLCB3aGF0IGFyZSB0aGVpciByZWxhdGlvbnNoaXBzIHRvIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGFuZCB0aGVpciBpbXBsaWNhdGlvbnMgb24gdGhlIGh5cGVydmlzb3ImIzM5O3MgcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5PwoqICAgKipEZWZhdWx0IFN0YXRlIGFuZCBQcm9tcHQ6KiogSXMgaXQgYSB0cmlzdGF0ZSwgYSBib29sPyBXaGF0IGFyZSBpdHMgZGVmYXVsdCB2YWx1ZSBhbmQgcHJvbXB0IHN0cmluZz8gRG9lcyBpdCBpbmZsdWVuY2Ugb3RoZXIgdmlydHVhbGl6YXRpb24gZmVhdHVyZXM/CiogICAqKkhlbHAgVGV4dDoqKiBUaGUgaGVscCB0ZXh0IHdpbGwgYmUgY3JpdGljYWwgaGVyZS4gSXQgc2hvdWxkIGdpdmUgbWUgYSBjb25jaXNlIGRlc2NyaXB0aW9uIG9mIHdoYXQgdGhlIGBLVk1fSFlQRVJWYCBzdXBwb3J0IGFjdHVhbGx5IGRvZXMsIGFuZCB0aGUgc2NlbmFyaW9zIHdoZXJlIEkmIzM5O2QgZW5hYmxlIGl0LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBoaW50cyBhYm91dCB0aGUgdGFyZ2V0IGhhcmR3YXJlIGFuZCBvcGVyYXRpbmcgc3lzdGVtcy4KKiAgICoqQXJjaGl0ZWN0dXJhbCBDb25zaWRlcmF0aW9uczoqKiBBcmUgdGhlcmUgYW55IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjaGVja3Mgb3IgZGVwZW5kZW5jaWVzPyBEb2VzIHRoaXMgb3B0aW9uIG9ubHkgbWFrZSBzZW5zZSBvbiBjZXJ0YWluIENQVSBhcmNoaXRlY3R1cmVzIG9yIHNwZWNpZmljIGhhcmR3YXJlIGZlYXR1cmVzPyBJJiMzOTtsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGFueSBgI2lmZGVmYCBzdGF0ZW1lbnRzIHRoYXQgbWlnaHQgaW5mbHVlbmNlIGl0cyBiZWhhdmlvci4KCkkgd2FudCB0byBxdWlja2x5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgb2Ygc2VsZWN0aW5nIGBLVk1fSFlQRVJWYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaXRzIHJvbGUgaW4gdGhlIHZpcnR1YWwgZW52aXJvbm1lbnQuIEFueSBoaWRkZW4gZ290Y2hhcyBvciBzdWJ0bGUgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgdmlydHVhbGl6YXRpb24gZmVhdHVyZXMgYXJlIGV4YWN0bHkgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIyOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE5MDpcdFxuIDE5MTpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuIDE5MjpcdFxuIDE5MzpcdGNvbmZpZyBLVk1fSFlQRVJWXG4gMTk0Olx0XHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblwmIzM0O1xuIDE5NTpcdFx0ZGVwZW5kcyBvbiBLVk1fWDg2XG4gMTk2Olx0XHRkZWZhdWx0IHlcbiAxOTc6XHRcdGhlbHBcbiAxOTg6XHRcdCAgUHJvdmlkZXMgS1ZNIHN1cHBvcnQgZm9yIGVtdWxhdGluZyBNaWNyb3NvZnQgSHlwZXItVi4gIFRoaXMgYWxsb3dzIEtWTVxuIDE5OTpcdFx0ICB0byBleHBvc2UgYSBzdWJzZXQgb2YgdGhlIHBhcmF2aXJ0dWFsaXplZCBpbnRlcmZhY2VzIGRlZmluZWQgaW4gdGhlXG4gMjAwOlx0XHQgIEh5cGVyLVYgSHlwZXJ2aXNvciBUb3AtTGV2ZWwgRnVuY3Rpb25hbCBTcGVjaWZpY2F0aW9uIChUTEZTKTpcbiAyMDE6XHRcdCAgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvdmlydHVhbGl6YXRpb24vaHlwZXItdi1vbi13aW5kb3dzL3JlZmVyZW5jZS90bGZzXG4gMjAyOlx0XHQgIFRoZXNlIGludGVyZmFjZXMgYXJlIHJlcXVpcmVkIGZvciB0aGUgY29ycmVjdCBhbmQgcGVyZm9ybWFudCBmdW5jdGlvbmluZ1xuIDIwMzpcdFx0ICBvZiBXaW5kb3dzIGFuZCBIeXBlci1WIGd1ZXN0cyBvbiBLVk0uXG4gMjA0Olx0XG4gMjA1Olx0XHQgIElmIHVuc3VyZSwgc2F5IFwmIzM0O1lcJiMzNDsuXG4gMjA2Olx0XG4gMjA3Olx0Y29uZmlnIEtWTV9YRU5cbiAyMDg6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcJiMzNDtcbiAyMDk6XHRcdGRlcGVuZHMgb24gS1ZNX1g4NlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODg1MQoJCQkJCQkJb3V0cHV0OiAxNzYKCQkJCQkJCXRob3VnaHRzOiA4NDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgS1ZNIFBhdGNoIEZ1enppbmcgVGFyZ2V0cyoqCgpPa2F5LCBzbyBJJiMzOTttIGhvbWluZyBpbiBvbiB0aGUgYmVzdCBjb25maWd1cmF0aW9ucyBmb3IgZnV6emluZyB0aGlzIEtWTSBwYXRjaC4gIGBLVk1fSFlQRVJWYCBhbmQgYEtWTV9YRU5gIGFyZSBkZWZpbml0ZWx5IHRoZSBjb3JlIGNvbmZpZ3VyYXRpb25zIHRvIHRhcmdldC4gIEkmIzM5O3ZlIGRvdWJsZS1jaGVja2VkIHRoYXQgYEtWTV9YODZgIGlzbiYjMzk7dCBleHBsaWNpdGx5IG5lY2Vzc2FyeSwgYXMgYEtWTV9IWVBFUlZgIGhhbmRsZXMgdGhlIGRlcGVuZGVuY3kuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGZvY3VzIHN5bWJvbHMuIEkmIzM5O3ZlIGNvbXBpbGVkIGEgbGlzdDoKLSAgIGBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHVgCi0gICBga3ZtX2h2X3ZjcHVfaW5pdGAKLSAgIGBrdm1feGVuX2hjYWxsX3ZjcHVfb3BgCi0gICBga3ZtX2h2X2ZsdXNoX3RsYmAKCkkgbWV0aWN1bG91c2x5IGNoZWNrZWQgdGhlIHN0YXRpYyBuYXR1cmUgb2YgZWFjaC4gYGt2bV9odl9mbHVzaF90bGJgLCBga3ZtX3hlbl9oY2FsbF92Y3B1X29wYCwgYW5kIGBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHVgIGFyZSBpbmRlZWQgc3RhdGljLCBhbmQgdGhhdCYjMzk7cyBwZXJmZWN0bHkgZmluZTsgc3l6a2FsbGVyIGNhbiBoYW5kbGUgdGhlbS4gIGBrdm1faHZfdmNwdV9pbml0YCBpcyBub3Qgc3RhdGljLiAgVGhlc2UgZnVuY3Rpb25zIGFyZSBhbGwga2V5IGJlY2F1c2UgdGhleSByZXByZXNlbnQgdGhlIGNvcmUgb2YgdGhlIHBhdGNoJiMzOTtzIGNoYW5nZXM6IHZDUFUgY3JlYXRpb24sIEh5cGVyLVYgZW11bGF0aW9uLCBhbmQgWGVuIGVtdWxhdGlvbi4KCkkgcmVhbGl6ZWQgdGhpcyBwYXRjaCBhbHNvIHRvdWNoZXMgYHN5bmljX2dldGAsIGBzdGltZXJfbWFya19wZW5kaW5nYCwgYW5kIGBzdGltZXJfY2xlYW51cGAuIFRoZXNlIGFyZSBzbWFsbGVyLCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIG5vdGUgdGhhdCB0aG9zZSBhcmUgc21hbGwgaGVscGVyIGZ1bmN0aW9ucy4KClRoZSByZWFzb25pbmcgZm9yIGZ1enppbmcgaXMgc291bmQuIFRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyByYWNlIGNvbmRpdGlvbnMgYW5kIHVuaW5pdGlhbGl6ZWQgYWNjZXNzZXMgd2l0aGluIEtWTSYjMzk7cyB2Q1BVIGNyZWF0aW9uLCBoeXBlcmNhbGwgaGFuZGxlcnMgZm9yIGJvdGggSHlwZXItViBhbmQgWGVuIGVtdWxhdGlvbi4gVGhlIGNoYW5nZXMgaW52b2x2ZSBtb2RpZnlpbmcgdkNQVSBpbml0aWFsaXphdGlvbiBhbmQgaHlwZXJjYWxsIGxvZ2ljLCBhbGwgYXJlYXMgdGhhdCBhcmUgcG90ZW50aWFsbHkgcmVhY2hhYmxlIGZyb20gZ3Vlc3QgdXNlcnNwYWNlIGFuZCBzdXNjZXB0aWJsZSB0byBjb25jdXJyZW50IGV4ZWN1dGlvbi4gRnV6emluZyB0aGVzZSBjb21wb25lbnRzIGlzIGNydWNpYWwgdG8gY29uZmlybSB0aGUgZml4IGlzIGVmZmVjdGl2ZSwgd2l0aG91dCBpbnRyb2R1Y2luZyByZWdyZXNzaW9ucy4KClRoZXJlZm9yZSwgdGhlIGNyaXRpY2FsIGNvbmZpZ3VyYXRpb25zIGFyZSBgS1ZNX0hZUEVSVmAgYW5kIGBLVk1fWEVOYC4gVGhlIGlkZW50aWZpZWQgZm9jdXMgc3ltYm9scyBwcm92aWRlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdGVzdGluZyBhbmQgaWRlbnRpZnlpbmcgZnVydGhlciBmb2N1cyBzeW1ib2xzLiBJJiMzOTttIHJlYWR5IHRvIHNldCB0aGVzZSByZXN1bHRzIGFuZCBwcm9jZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMjo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNX0hZUEVSViYjMzQ7LAogICAgJiMzNDtLVk1fWEVOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1JiMzNDssCiAgICAmIzM0O2t2bV9odl92Y3B1X2luaXQmIzM0OywKICAgICYjMzQ7a3ZtX3hlbl9oY2FsbF92Y3B1X29wJiMzNDssCiAgICAmIzM0O2t2bV9odl9mbHVzaF90bGImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcmFjZSBjb25kaXRpb25zIGFuZCB1bmluaXRpYWxpemVkIGFjY2Vzc2VzIGluIEtWTSYjMzk7cyB2Q1BVIGNyZWF0aW9uLCBIeXBlci1WIGVtdWxhdGlvbiwgYW5kIFhlbiBlbXVsYXRpb24uIEl0IG1vZGlmaWVzIGNvcmUgdkNQVSBpbml0aWFsaXphdGlvbiBsb2dpYyBhbmQgaHlwZXJjYWxsIGhhbmRsZXJzLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gZ3Vlc3QgdXNlcnNwYWNlIGFuZCBjYW4gYmUgdHJpZ2dlcmVkIGNvbmN1cnJlbnRseS4gRnV6emluZyBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoZXNlIGZpeGVzIGNvcnJlY3RseSBoYW5kbGUgY29uY3VycmVudCB2Q1BVIGNyZWF0aW9uIGFuZCBoeXBlcmNhbGxzIHdpdGhvdXQgaW50cm9kdWNpbmcgbmV3IHJhY2VzIG9yIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk1fSFlQRVJWJiMzNDssCiAgICAmIzM0O0tWTV9YRU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHUmIzM0OywKICAgICYjMzQ7a3ZtX2h2X3ZjcHVfaW5pdCYjMzQ7LAogICAgJiMzNDtrdm1feGVuX2hjYWxsX3ZjcHVfb3AmIzM0OywKICAgICYjMzQ7a3ZtX2h2X2ZsdXNoX3RsYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyByYWNlIGNvbmRpdGlvbnMgYW5kIHVuaW5pdGlhbGl6ZWQgYWNjZXNzZXMgaW4gS1ZNJiMzOTtzIHZDUFUgY3JlYXRpb24sIEh5cGVyLVYgZW11bGF0aW9uLCBhbmQgWGVuIGVtdWxhdGlvbi4gSXQgbW9kaWZpZXMgY29yZSB2Q1BVIGluaXRpYWxpemF0aW9uIGxvZ2ljIGFuZCBoeXBlcmNhbGwgaGFuZGxlcnMsIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSBndWVzdCB1c2Vyc3BhY2UgYW5kIGNhbiBiZSB0cmlnZ2VyZWQgY29uY3VycmVudGx5LiBGdXp6aW5nIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlc2UgZml4ZXMgY29ycmVjdGx5IGhhbmRsZSBjb25jdXJyZW50IHZDUFUgY3JlYXRpb24gYW5kIGh5cGVyY2FsbHMgd2l0aG91dCBpbnRyb2R1Y2luZyBuZXcgcmFjZXMgb3IgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjo1NDowNS40MTA3NzQ5NDdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Njc3MTE0NDY4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1fSFlQRVJWXCIsXG4gICAgXCJLVk1fWEVOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1XCIsXG4gICAgXCJrdm1faHZfdmNwdV9pbml0XCIsXG4gICAgXCJrdm1feGVuX2hjYWxsX3ZjcHVfb3BcIixcbiAgICBcImt2bV9odl9mbHVzaF90bGJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyByYWNlIGNvbmRpdGlvbnMgYW5kIHVuaW5pdGlhbGl6ZWQgYWNjZXNzZXMgaW4gS1ZNJ3MgdkNQVSBjcmVhdGlvbiwgSHlwZXItViBlbXVsYXRpb24sIGFuZCBYZW4gZW11bGF0aW9uLiBJdCBtb2RpZmllcyBjb3JlIHZDUFUgaW5pdGlhbGl6YXRpb24gbG9naWMgYW5kIGh5cGVyY2FsbCBoYW5kbGVycywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIGd1ZXN0IHVzZXJzcGFjZSBhbmQgY2FuIGJlIHRyaWdnZXJlZCBjb25jdXJyZW50bHkuIEZ1enppbmcgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGVzZSBmaXhlcyBjb3JyZWN0bHkgaGFuZGxlIGNvbmN1cnJlbnQgdkNQVSBjcmVhdGlvbiBhbmQgaHlwZXJjYWxscyB3aXRob3V0IGludHJvZHVjaW5nIG5ldyByYWNlcyBvciByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjI6NTQ6MDUuNDEwNzc5OTQ3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDgxMjI0NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyODgzZjU3MzEzMGI1M2MyYjQ4N2ViMWY0NDZiNWI0Y2E3ODNkYzhmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVuIDI1IDIyOjU0OjAzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9oeXBlcnYuYyBiL2FyY2gveDg2L2t2bS9oeXBlcnYuY1xcbmluZGV4IDFlZTBkMjNmODk0OTc0Li45ZDM4Y2I2NDQ2NjhkYSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmNcXG5AQCAtMjA2LDE0ICsyMDYsMjAgQEAgc3RhdGljIHN0cnVjdCBrdm1fdmNwdSAqZ2V0X3ZjcHVfYnlfdnBpZHgoc3RydWN0IGt2bSAqa3ZtLCB1MzIgdnBpZHgpXFxuIFxcbiBzdGF0aWMgc3RydWN0IGt2bV92Y3B1X2h2X3N5bmljICpzeW5pY19nZXQoc3RydWN0IGt2bSAqa3ZtLCB1MzIgdnBpZHgpXFxuIHtcXG4tXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xcbiBcXHRzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3luaWMgKnN5bmljO1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHVfaHYgKmh2X3ZjcHU7XFxuK1xcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcXG4gXFxuIFxcdHZjcHUgPSBnZXRfdmNwdV9ieV92cGlkeChrdm0sIHZwaWR4KTtcXG4tXFx0aWYgKCF2Y3B1IHx8ICF0b19odl92Y3B1KHZjcHUpKVxcbitcXHRpZiAoIXZjcHUpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbi1cXHRzeW5pYyA9IHRvX2h2X3N5bmljKHZjcHUpO1xcbi1cXHRyZXR1cm4gKHN5bmljLVxcdTAwM2VhY3RpdmUpID8gc3luaWMgOiBOVUxMO1xcbitcXG4rXFx0aHZfdmNwdSA9IHRvX2h2X3ZjcHVfc2FmZSh2Y3B1KTtcXG4rXFx0aWYgKCFodl92Y3B1KVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdHN5bmljID0gXFx1MDAyNmh2X3ZjcHUtXFx1MDAzZXN5bmljO1xcbitcXHRyZXR1cm4gUkVBRF9PTkNFKHN5bmljLVxcdTAwM2VhY3RpdmUpID8gc3luaWMgOiBOVUxMO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBrdm1faHZfbm90aWZ5X2Fja2VkX3NpbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgc2ludClcXG5AQCAtNTkzLDggKzU5OSw3IEBAIHN0YXRpYyB2b2lkIHN0aW1lcl9tYXJrX3BlbmRpbmcoc3RydWN0IGt2bV92Y3B1X2h2X3N0aW1lciAqc3RpbWVyLFxcbiB7XFxuIFxcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGh2X3N0aW1lcl90b192Y3B1KHN0aW1lcik7XFxuIFxcbi1cXHRzZXRfYml0KHN0aW1lci1cXHUwMDNlaW5kZXgsXFxuLVxcdFxcdHRvX2h2X3ZjcHUodmNwdSktXFx1MDAzZXN0aW1lcl9wZW5kaW5nX2JpdG1hcCk7XFxuK1xcdHNldF9iaXQoc3RpbWVyLVxcdTAwM2VpbmRleCwgdmNwdS1cXHUwMDNlYXJjaC5oeXBlcnYtXFx1MDAzZXN0aW1lcl9wZW5kaW5nX2JpdG1hcCk7XFxuIFxcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9IVl9TVElNRVIsIHZjcHUpO1xcbiBcXHRpZiAodmNwdV9raWNrKVxcbiBcXHRcXHRrdm1fdmNwdV9raWNrKHZjcHUpO1xcbkBAIC02MDgsOCArNjEzLDcgQEAgc3RhdGljIHZvaWQgc3RpbWVyX2NsZWFudXAoc3RydWN0IGt2bV92Y3B1X2h2X3N0aW1lciAqc3RpbWVyKVxcbiBcXHRcXHRcXHRcXHQgICAgc3RpbWVyLVxcdTAwM2VpbmRleCk7XFxuIFxcbiBcXHRocnRpbWVyX2NhbmNlbChcXHUwMDI2c3RpbWVyLVxcdTAwM2V0aW1lcik7XFxuLVxcdGNsZWFyX2JpdChzdGltZXItXFx1MDAzZWluZGV4LFxcbi1cXHRcXHQgIHRvX2h2X3ZjcHUodmNwdSktXFx1MDAzZXN0aW1lcl9wZW5kaW5nX2JpdG1hcCk7XFxuK1xcdGNsZWFyX2JpdChzdGltZXItXFx1MDAzZWluZGV4LCB2Y3B1LVxcdTAwM2VhcmNoLmh5cGVydi1cXHUwMDNlc3RpbWVyX3BlbmRpbmdfYml0bWFwKTtcXG4gXFx0c3RpbWVyLVxcdTAwM2Vtc2dfcGVuZGluZyA9IGZhbHNlO1xcbiBcXHRzdGltZXItXFx1MDAzZWV4cF90aW1lID0gMDtcXG4gfVxcbkBAIC05NzIsNyArOTc2LDYgQEAgaW50IGt2bV9odl92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRpZiAoIWh2X3ZjcHUpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4tXFx0dmNwdS1cXHUwMDNlYXJjaC5oeXBlcnYgPSBodl92Y3B1O1xcbiBcXHRodl92Y3B1LVxcdTAwM2V2Y3B1ID0gdmNwdTtcXG4gXFxuIFxcdHN5bmljX2luaXQoXFx1MDAyNmh2X3ZjcHUtXFx1MDAzZXN5bmljKTtcXG5AQCAtOTg4LDYgKzk5MSwxNCBAQCBpbnQga3ZtX2h2X3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZodl92Y3B1LVxcdTAwM2V0bGJfZmx1c2hfZmlmb1tpXS53cml0ZV9sb2NrKTtcXG4gXFx0fVxcbiBcXG4rXFx0LypcXG4rXFx0ICogRW5zdXJlIHRoZSBzdHJ1Y3R1cmUgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGl0J3MgdmlzaWJsZSB0b1xcbitcXHQgKiBvdGhlciB0YXNrcywgYXMgbXVjaCBvZiB0aGUgc3RhdGUgY2FuIGJlIGxlZ2FsbHkgYWNjZXNzZWQgd2l0aG91dFxcbitcXHQgKiBob2xkaW5nIHZjcHUtXFx1MDAzZW11dGV4LlxcbitcXHQgKlxcbitcXHQgKiBQYWlycyB3aXRoIHRoZSBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gdG9faHZfdmNwdV9zYWZlKCkuXFxuK1xcdCAqL1xcbitcXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5oeXBlcnYsIGh2X3ZjcHUpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtMTAwMiw3ICsxMDEzLDcgQEAgaW50IGt2bV9odl9hY3RpdmF0ZV9zeW5pYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZG9udF96ZXJvX3N5bmljX3BhZ2VzKVxcbiBcXG4gXFx0c3luaWMgPSB0b19odl9zeW5pYyh2Y3B1KTtcXG4gXFxuLVxcdHN5bmljLVxcdTAwM2VhY3RpdmUgPSB0cnVlO1xcbitcXHRXUklURV9PTkNFKHN5bmljLVxcdTAwM2VhY3RpdmUsIHRydWUpO1xcbiBcXHRzeW5pYy1cXHUwMDNlZG9udF96ZXJvX3N5bmljX3BhZ2VzID0gZG9udF96ZXJvX3N5bmljX3BhZ2VzO1xcbiBcXHRzeW5pYy1cXHUwMDNlY29udHJvbCA9IEhWX1NZTklDX0NPTlRST0xfRU5BQkxFO1xcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMTkzNSwxNCArMTk0NiwxNCBAQCBzdGF0aWMgaW50IGt2bV9odl9nZXRfdGxiX2ZsdXNoX2VudHJpZXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2h2X2hjYWxsICpoY1xcbiBcXHRyZXR1cm4ga3ZtX2h2X2dldF9oY19kYXRhKGt2bSwgaGMsIGhjLVxcdTAwM2VyZXBfY250LCBoYy1cXHUwMDNlcmVwX2NudCwgZW50cmllcyk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGh2X3RsYl9mbHVzaF9lbnF1ZXVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tXFx0XFx0XFx0XFx0IHN0cnVjdCBrdm1fdmNwdV9odl90bGJfZmx1c2hfZmlmbyAqdGxiX2ZsdXNoX2ZpZm8sXFxuLVxcdFxcdFxcdFxcdCB1NjQgKmVudHJpZXMsIGludCBjb3VudClcXG4rc3RhdGljIHZvaWQgaHZfdGxiX2ZsdXNoX2VucXVldWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKmVudHJpZXMsIGludCBjb3VudCxcXG4rXFx0XFx0XFx0XFx0IGJvb2wgaXNfZ3Vlc3RfbW9kZSlcXG4ge1xcbi1cXHRzdHJ1Y3Qga3ZtX3ZjcHVfaHYgKmh2X3ZjcHUgPSB0b19odl92Y3B1KHZjcHUpO1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHVfaHZfdGxiX2ZsdXNoX2ZpZm8gKnRsYl9mbHVzaF9maWZvO1xcbiBcXHR1NjQgZmx1c2hfYWxsX2VudHJ5ID0gS1ZNX0hWX1RMQl9GTFVTSEFMTF9FTlRSWTtcXG4gXFxuLVxcdGlmICghaHZfdmNwdSlcXG4rXFx0dGxiX2ZsdXNoX2ZpZm8gPSBrdm1faHZfZ2V0X3RsYl9mbHVzaF9maWZvKHZjcHUsIGlzX2d1ZXN0X21vZGUpO1xcbitcXHRpZiAoIXRsYl9mbHVzaF9maWZvKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRzcGluX2xvY2soXFx1MDAyNnRsYl9mbHVzaF9maWZvLVxcdTAwM2V3cml0ZV9sb2NrKTtcXG5AQCAtMTk3MCwxNSArMTk4MSwxNiBAQCBzdGF0aWMgdm9pZCBodl90bGJfZmx1c2hfZW5xdWV1ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIGludCBrdm1faHZfdmNwdV9mbHVzaF90bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdHN0cnVjdCBrdm1fdmNwdV9odl90bGJfZmx1c2hfZmlmbyAqdGxiX2ZsdXNoX2ZpZm87XFxuLVxcdHN0cnVjdCBrdm1fdmNwdV9odiAqaHZfdmNwdSA9IHRvX2h2X3ZjcHUodmNwdSk7XFxuIFxcdHU2NCBlbnRyaWVzW0tWTV9IVl9UTEJfRkxVU0hfRklGT19TSVpFXTtcXG4gXFx0aW50IGksIGosIGNvdW50O1xcbiBcXHRndmFfdCBndmE7XFxuIFxcbi1cXHRpZiAoIXRkcF9lbmFibGVkIHx8ICFodl92Y3B1KVxcbitcXHRpZiAoIXRkcF9lbmFibGVkKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdHRsYl9mbHVzaF9maWZvID0ga3ZtX2h2X2dldF90bGJfZmx1c2hfZmlmbyh2Y3B1LCBpc19ndWVzdF9tb2RlKHZjcHUpKTtcXG4rXFx0aWYgKCF0bGJfZmx1c2hfZmlmbylcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbiBcXHRjb3VudCA9IGtmaWZvX291dChcXHUwMDI2dGxiX2ZsdXNoX2ZpZm8tXFx1MDAzZWVudHJpZXMsIGVudHJpZXMsIEtWTV9IVl9UTEJfRkxVU0hfRklGT19TSVpFKTtcXG4gXFxuQEAgLTIwMTcsNyArMjAyOSw2IEBAIHN0YXRpYyB1NjQga3ZtX2h2X2ZsdXNoX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1faHZfaGNhbGwgKmhjKVxcbiBcXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVxcdTAwM2Vrdm07XFxuIFxcdHN0cnVjdCBodl90bGJfZmx1c2hfZXggZmx1c2hfZXg7XFxuIFxcdHN0cnVjdCBodl90bGJfZmx1c2ggZmx1c2g7XFxuLVxcdHN0cnVjdCBrdm1fdmNwdV9odl90bGJfZmx1c2hfZmlmbyAqdGxiX2ZsdXNoX2ZpZm87XFxuIFxcdC8qXFxuIFxcdCAqIE5vcm1hbGx5LCB0aGVyZSBjYW4gYmUgbm8gbW9yZSB0aGFuICdLVk1fSFZfVExCX0ZMVVNIX0ZJRk9fU0laRSdcXG4gXFx0ICogZW50cmllcyBvbiB0aGUgVExCIGZsdXNoIGZpZm8uIFRoZSBsYXN0IGVudHJ5LCBob3dldmVyLCBuZWVkcyB0byBiZVxcbkBAIC0yMTQ0LDExICsyMTU1LDggQEAgc3RhdGljIHU2NCBrdm1faHZfZmx1c2hfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9odl9oY2FsbCAqaGMpXFxuIFxcdCAqIGFuYWx5emUgaXQgaGVyZSwgZmx1c2ggVExCIHJlZ2FyZGxlc3Mgb2YgdGhlIHNwZWNpZmllZCBhZGRyZXNzIHNwYWNlLlxcbiBcXHQgKi9cXG4gXFx0aWYgKGFsbF9jcHVzIFxcdTAwMjZcXHUwMDI2ICFpc19ndWVzdF9tb2RlKHZjcHUpKSB7XFxuLVxcdFxcdGt2bV9mb3JfZWFjaF92Y3B1KGksIHYsIGt2bSkge1xcbi1cXHRcXHRcXHR0bGJfZmx1c2hfZmlmbyA9IGt2bV9odl9nZXRfdGxiX2ZsdXNoX2ZpZm8odiwgZmFsc2UpO1xcbi1cXHRcXHRcXHRodl90bGJfZmx1c2hfZW5xdWV1ZSh2LCB0bGJfZmx1c2hfZmlmbyxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICB0bGJfZmx1c2hfZW50cmllcywgaGMtXFx1MDAzZXJlcF9jbnQpO1xcbi1cXHRcXHR9XFxuK1xcdFxcdGt2bV9mb3JfZWFjaF92Y3B1KGksIHYsIGt2bSlcXG4rXFx0XFx0XFx0aHZfdGxiX2ZsdXNoX2VucXVldWUodiwgdGxiX2ZsdXNoX2VudHJpZXMsIGhjLVxcdTAwM2VyZXBfY250LCBmYWxzZSk7XFxuIFxcbiBcXHRcXHRrdm1fbWFrZV9hbGxfY3B1c19yZXF1ZXN0KGt2bSwgS1ZNX1JFUV9IVl9UTEJfRkxVU0gpO1xcbiBcXHR9IGVsc2UgaWYgKCFpc19ndWVzdF9tb2RlKHZjcHUpKSB7XFxuQEAgLTIxNTgsOSArMjE2Niw3IEBAIHN0YXRpYyB1NjQga3ZtX2h2X2ZsdXNoX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1faHZfaGNhbGwgKmhjKVxcbiBcXHRcXHRcXHR2ID0ga3ZtX2dldF92Y3B1KGt2bSwgaSk7XFxuIFxcdFxcdFxcdGlmICghdilcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdFxcdHRsYl9mbHVzaF9maWZvID0ga3ZtX2h2X2dldF90bGJfZmx1c2hfZmlmbyh2LCBmYWxzZSk7XFxuLVxcdFxcdFxcdGh2X3RsYl9mbHVzaF9lbnF1ZXVlKHYsIHRsYl9mbHVzaF9maWZvLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIHRsYl9mbHVzaF9lbnRyaWVzLCBoYy1cXHUwMDNlcmVwX2NudCk7XFxuK1xcdFxcdFxcdGh2X3RsYl9mbHVzaF9lbnF1ZXVlKHYsIHRsYl9mbHVzaF9lbnRyaWVzLCBoYy1cXHUwMDNlcmVwX2NudCwgZmFsc2UpO1xcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRrdm1fbWFrZV92Y3B1c19yZXF1ZXN0X21hc2soa3ZtLCBLVk1fUkVRX0hWX1RMQl9GTFVTSCwgdmNwdV9tYXNrKTtcXG5AQCAtMjE3MCw3ICsyMTc2LDcgQEAgc3RhdGljIHU2NCBrdm1faHZfZmx1c2hfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9odl9oY2FsbCAqaGMpXFxuIFxcdFxcdGJpdG1hcF96ZXJvKHZjcHVfbWFzaywgS1ZNX01BWF9WQ1BVUyk7XFxuIFxcbiBcXHRcXHRrdm1fZm9yX2VhY2hfdmNwdShpLCB2LCBrdm0pIHtcXG4tXFx0XFx0XFx0aHZfdiA9IHRvX2h2X3ZjcHUodik7XFxuK1xcdFxcdFxcdGh2X3YgPSB0b19odl92Y3B1X3NhZmUodik7XFxuIFxcbiBcXHRcXHRcXHQvKlxcbiBcXHRcXHRcXHQgKiBUaGUgZm9sbG93aW5nIGNoZWNrIHJhY2VzIHdpdGggbmVzdGVkIHZDUFVzIGVudGVyaW5nL2V4aXRpbmdcXG5AQCAtMjE5MSw5ICsyMTk3LDcgQEAgc3RhdGljIHU2NCBrdm1faHZfZmx1c2hfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9odl9oY2FsbCAqaGMpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0XFx0X19zZXRfYml0KGksIHZjcHVfbWFzayk7XFxuLVxcdFxcdFxcdHRsYl9mbHVzaF9maWZvID0ga3ZtX2h2X2dldF90bGJfZmx1c2hfZmlmbyh2LCB0cnVlKTtcXG4tXFx0XFx0XFx0aHZfdGxiX2ZsdXNoX2VucXVldWUodiwgdGxiX2ZsdXNoX2ZpZm8sXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgdGxiX2ZsdXNoX2VudHJpZXMsIGhjLVxcdTAwM2VyZXBfY250KTtcXG4rXFx0XFx0XFx0aHZfdGxiX2ZsdXNoX2VucXVldWUodiwgdGxiX2ZsdXNoX2VudHJpZXMsIGhjLVxcdTAwM2VyZXBfY250LCB0cnVlKTtcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0a3ZtX21ha2VfdmNwdXNfcmVxdWVzdF9tYXNrKGt2bSwgS1ZNX1JFUV9IVl9UTEJfRkxVU0gsIHZjcHVfbWFzayk7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9oeXBlcnYuaCBiL2FyY2gveDg2L2t2bS9oeXBlcnYuaFxcbmluZGV4IDFjOGY3YWFhYjA2M2QwLi4zN2EwYmNmMDNlMjgxNiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmhcXG5AQCAtNjIsOCArNjIsMjIgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX2h2ICp0b19rdm1faHYoc3RydWN0IGt2bSAqa3ZtKVxcbiBcXHRyZXR1cm4gXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5oeXBlcnY7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV92Y3B1X2h2ICp0b19odl92Y3B1X3NhZmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIEVuc3VyZSB0aGUgSHlwZXJWIHN0cnVjdHVyZSBpcyBmdWxseSBpbml0aWFsaXplZCB3aGVuIGFjY2Vzc2luZyBpdFxcbitcXHQgKiB3aXRob3V0IGhvbGRpbmcgdmNwdS1cXHUwMDNlbXV0ZXggKG9yIHNvbWUgb3RoZXIgZ3VhcmFudGVlIHRoYXQgS1ZNIGNhbid0XFxuK1xcdCAqIGNvbmN1cnJlbnRseSBpbnN0YW50aWF0ZSB0aGUgc3RydWN0dXJlKS5cXG4rXFx0ICpcXG4rXFx0ICogUGFpcnMgd2l0aCB0aGUgc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBrdm1faHZfdmNwdV9pbml0KCkuXFxuK1xcdCAqL1xcbitcXHRyZXR1cm4gc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5oeXBlcnYpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1fdmNwdV9odiAqdG9faHZfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4rXFx0a3ZtX2xvY2tkZXBfYXNzZXJ0X3ZjcHVfaXNfbG9ja2VkX29yX3VucmVhY2hhYmxlKHZjcHUpO1xcbitcXG4gXFx0cmV0dXJuIHZjcHUtXFx1MDAzZWFyY2guaHlwZXJ2O1xcbiB9XFxuIFxcbkBAIC04OCw3ICsxMDIsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1faHZfc3luZGJnICp0b19odl9zeW5kYmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXG4gc3RhdGljIGlubGluZSB1MzIga3ZtX2h2X2dldF92cGluZGV4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbi1cXHRzdHJ1Y3Qga3ZtX3ZjcHVfaHYgKmh2X3ZjcHUgPSB0b19odl92Y3B1KHZjcHUpO1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHVfaHYgKmh2X3ZjcHUgPSB0b19odl92Y3B1X3NhZmUodmNwdSk7XFxuIFxcbiBcXHRyZXR1cm4gaHZfdmNwdSA/IGh2X3ZjcHUtXFx1MDAzZXZwX2luZGV4IDogdmNwdS1cXHUwMDNldmNwdV9pZHg7XFxuIH1cXG5AQCAtMTQyLDcgKzE1Niw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV92Y3B1ICpodl9zdGltZXJfdG9fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltXFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wga3ZtX2h2X2hhc19zdGltZXJfcGVuZGluZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4tXFx0c3RydWN0IGt2bV92Y3B1X2h2ICpodl92Y3B1ID0gdG9faHZfdmNwdSh2Y3B1KTtcXG4rXFx0c3RydWN0IGt2bV92Y3B1X2h2ICpodl92Y3B1ID0gdG9faHZfdmNwdV9zYWZlKHZjcHUpO1xcbiBcXG4gXFx0aWYgKCFodl92Y3B1KVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuQEAgLTE5OCwxMCArMjEyLDEzIEBAIGludCBrdm1fZ2V0X2h2X2NwdWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9jcHVpZDIgKmNwdWlkLFxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1fdmNwdV9odl90bGJfZmx1c2hfZmlmbyAqa3ZtX2h2X2dldF90bGJfZmx1c2hfZmlmbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGJvb2wgaXNfZ3Vlc3RfbW9kZSlcXG4ge1xcbi1cXHRzdHJ1Y3Qga3ZtX3ZjcHVfaHYgKmh2X3ZjcHUgPSB0b19odl92Y3B1KHZjcHUpO1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHVfaHYgKmh2X3ZjcHUgPSB0b19odl92Y3B1X3NhZmUodmNwdSk7XFxuIFxcdGludCBpID0gaXNfZ3Vlc3RfbW9kZSA/IEhWX0wyX1RMQl9GTFVTSF9GSUZPIDpcXG4gXFx0XFx0XFx0XFx0SFZfTDFfVExCX0ZMVVNIX0ZJRk87XFxuIFxcbitcXHRpZiAoIWh2X3ZjcHUpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4gXFx0cmV0dXJuIFxcdTAwMjZodl92Y3B1LVxcdTAwM2V0bGJfZmx1c2hfZmlmb1tpXTtcXG4gfVxcbiBcXG5AQCAtMjA5LDEwICsyMjYsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIGt2bV9odl92Y3B1X3B1cmdlX2ZsdXNoX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0c3RydWN0IGt2bV92Y3B1X2h2X3RsYl9mbHVzaF9maWZvICp0bGJfZmx1c2hfZmlmbztcXG4gXFxuLVxcdGlmICghdG9faHZfdmNwdSh2Y3B1KSB8fCAha3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9IVl9UTEJfRkxVU0gsIHZjcHUpKVxcbitcXHRpZiAoIWt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfSFZfVExCX0ZMVVNILCB2Y3B1KSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0dGxiX2ZsdXNoX2ZpZm8gPSBrdm1faHZfZ2V0X3RsYl9mbHVzaF9maWZvKHZjcHUsIGlzX2d1ZXN0X21vZGUodmNwdSkpO1xcbitcXHRpZiAoIXRsYl9mbHVzaF9maWZvKVxcbitcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRrZmlmb19yZXNldF9vdXQoXFx1MDAyNnRsYl9mbHVzaF9maWZvLVxcdTAwM2VlbnRyaWVzKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaFxcbmluZGV4IDZkNmNkNTkwNGRkZjY2Li5jNmRlODQ4YmQ5Y2VkNSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaFxcbkBAIC01NywxNiArNTcsMTQgQEAgYm9vbCBuZXN0ZWRfdm14X2NoZWNrX2lvX2JpdG1hcHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgcG9ydCxcXG4gXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHZtY3MxMiAqZ2V0X3ZtY3MxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4tXFx0bG9ja2RlcF9hc3NlcnRfb25jZShsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNnZjcHUtXFx1MDAzZW11dGV4KSB8fFxcbi1cXHRcXHRcXHQgICAgIXJlZmNvdW50X3JlYWQoXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNldXNlcnNfY291bnQpKTtcXG4rXFx0a3ZtX2xvY2tkZXBfYXNzZXJ0X3ZjcHVfaXNfbG9ja2VkX29yX3VucmVhY2hhYmxlKHZjcHUpO1xcbiBcXG4gXFx0cmV0dXJuIHRvX3ZteCh2Y3B1KS1cXHUwMDNlbmVzdGVkLmNhY2hlZF92bWNzMTI7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHZtY3MxMiAqZ2V0X3NoYWRvd192bWNzMTIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuLVxcdGxvY2tkZXBfYXNzZXJ0X29uY2UobG9ja2RlcF9pc19oZWxkKFxcdTAwMjZ2Y3B1LVxcdTAwM2VtdXRleCkgfHxcXG4tXFx0XFx0XFx0ICAgICFyZWZjb3VudF9yZWFkKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZXVzZXJzX2NvdW50KSk7XFxuK1xcdGt2bV9sb2NrZGVwX2Fzc2VydF92Y3B1X2lzX2xvY2tlZF9vcl91bnJlYWNoYWJsZSh2Y3B1KTtcXG4gXFxuIFxcdHJldHVybiB0b192bXgodmNwdSktXFx1MDAzZW5lc3RlZC5jYWNoZWRfc2hhZG93X3ZtY3MxMjtcXG4gfVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veGVuLmMgYi9hcmNoL3g4Ni9rdm0veGVuLmNcXG5pbmRleCA2OTRiMzFjMWZjYzlhZi4uZGIxMGYxMmQxMGNmOGIgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3hlbi5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3hlbi5jXFxuQEAgLTIyLDYgKzIyLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3hlbi9pbnRlcmZhY2UvdmVyc2lvbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjeGVuL2ludGVyZmFjZS9ldmVudF9jaGFubmVsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2N4ZW4vaW50ZXJmYWNlL3NjaGVkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N4ZW4veGVuLW9wcy5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS94ZW4vY3B1aWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9wdmNsb2NrLmhcXHUwMDNlXFxuQEAgLTE2MTAsMTMgKzE2MTEsMTYgQEAgc3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF92Y3B1X29wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSwgaW50IGNtZCxcXG4gXFx0aWYgKCFrdm1feGVuX3RpbWVyX2VuYWJsZWQodmNwdSkpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuK1xcdGlmICh2Y3B1LVxcdTAwM2VhcmNoLnhlbi52Y3B1X2lkID09IFhFTl9WQ1BVX0lEX0lOVkFMSUQpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmICh2Y3B1LVxcdTAwM2VhcmNoLnhlbi52Y3B1X2lkICE9IHZjcHVfaWQpIHtcXG4rXFx0XFx0KnIgPSAtRUlOVkFMO1xcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0fVxcbitcXG4gXFx0c3dpdGNoIChjbWQpIHtcXG4gXFx0Y2FzZSBWQ1BVT1Bfc2V0X3NpbmdsZXNob3RfdGltZXI6XFxuLVxcdFxcdGlmICh2Y3B1LVxcdTAwM2VhcmNoLnhlbi52Y3B1X2lkICE9IHZjcHVfaWQpIHtcXG4tXFx0XFx0XFx0KnIgPSAtRUlOVkFMO1xcbi1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tXFx0XFx0fVxcbi1cXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogVGhlIG9ubHkgZGlmZmVyZW5jZSBmb3IgMzItYml0IGNvbXBhdCBpcyB0aGUgNCBieXRlcyBvZlxcbiBcXHRcXHQgKiBwYWRkaW5nIGFmdGVyIHRoZSBpbnRlcmVzdGluZyBwYXJ0IG9mIHRoZSBzdHJ1Y3R1cmUuIFNvXFxuQEAgLTE2NDQsMTAgKzE2NDgsNiBAQCBzdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3ZjcHVfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLCBpbnQgY21kLFxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuIFxcdGNhc2UgVkNQVU9QX3N0b3Bfc2luZ2xlc2hvdF90aW1lcjpcXG4tXFx0XFx0aWYgKHZjcHUtXFx1MDAzZWFyY2gueGVuLnZjcHVfaWQgIT0gdmNwdV9pZCkge1xcbi1cXHRcXHRcXHQqciA9IC1FSU5WQUw7XFxuLVxcdFxcdFxcdHJldHVybiB0cnVlO1xcbi1cXHRcXHR9XFxuIFxcdFxcdGt2bV94ZW5fc3RvcF90aW1lcih2Y3B1KTtcXG4gXFx0XFx0KnIgPSAwO1xcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG5AQCAtMjI5OSw3ICsyMjk5LDcgQEAgc3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF9ldnRjaG5fc2VuZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBwYXJhbSwgdTY0ICpyKVxcbiBcXG4gdm9pZCBrdm1feGVuX2luaXRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4tXFx0dmNwdS1cXHUwMDNlYXJjaC54ZW4udmNwdV9pZCA9IHZjcHUtXFx1MDAzZXZjcHVfaWR4O1xcbitcXHR2Y3B1LVxcdTAwM2VhcmNoLnhlbi52Y3B1X2lkID0gWEVOX1ZDUFVfSURfSU5WQUxJRDtcXG4gXFx0dmNwdS1cXHUwMDNlYXJjaC54ZW4ucG9sbF9ldnRjaG4gPSAwO1xcbiBcXG4gXFx0dGltZXJfc2V0dXAoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gueGVuLnBvbGxfdGltZXIsIGNhbmNlbF9ldnRjaG5fcG9sbCwgMCk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxcbmluZGV4IGFiOGNmYWVjODJkMzFlLi4wYmRmYTM2OTkzNTI3ZSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcXG5AQCAtOTg5LDYgKzk4OSwxMyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1faW9fYnVzICprdm1fZ2V0X2J1cyhzdHJ1Y3Qga3ZtICprdm0sIGVudW0ga3ZtX2J1cyBpZHgpXFxuIFxcdFxcdFxcdFxcdFxcdCBsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfbG9jaykpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQga3ZtX2xvY2tkZXBfYXNzZXJ0X3ZjcHVfaXNfbG9ja2VkX29yX3VucmVhY2hhYmxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4re1xcbitcXHRsb2NrZGVwX2Fzc2VydF9vbmNlKGxvY2tkZXBfaXNfaGVsZChcXHUwMDI2dmNwdS1cXHUwMDNlbXV0ZXgpIHx8XFxuK1xcdFxcdFxcdCAgICB2Y3B1LVxcdTAwM2V2Y3B1X2lkeCBcXHUwMDNjIDAgfHxcXG4rXFx0XFx0XFx0ICAgICFyZWZjb3VudF9yZWFkKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZXVzZXJzX2NvdW50KSk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV92Y3B1ICprdm1fZ2V0X3ZjcHUoc3RydWN0IGt2bSAqa3ZtLCBpbnQgaSlcXG4ge1xcbiBcXHRpbnQgbnVtX3ZjcHVzID0gYXRvbWljX3JlYWQoXFx1MDAyNmt2bS1cXHUwMDNlb25saW5lX3ZjcHVzKTtcXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcXG5pbmRleCBlNDRjMjBjMDQ5NjEwZC4uOThkYTRjODg5ZmZjNmMgMTAwNjQ0XFxuLS0tIGEvdmlydC9rdm0va3ZtX21haW4uY1xcbisrKyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcXG5AQCAtNDE4OCw2ICs0MTg4LDggQEAgc3RhdGljIGludCBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGlkKVxcbiBcXHRcXHRnb3RvIHZjcHVfZGVjcmVtZW50O1xcbiBcXHR9XFxuIFxcbitcXHR2Y3B1LVxcdTAwM2V2Y3B1X2lkeCA9IC0xO1xcbitcXG4gXFx0QlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3Qga3ZtX3J1bikgXFx1MDAzZSBQQUdFX1NJWkUpO1xcbiBcXHRwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9aRVJPKTtcXG4gXFx0aWYgKCFwYWdlKSB7XFxuQEAgLTQyMTYsMTEgKzQyMTgsMTggQEAgc3RhdGljIGludCBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGlkKVxcbiBcXHRcXHRnb3RvIHVubG9ja192Y3B1X2Rlc3Ryb3k7XFxuIFxcdH1cXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFNldCB0aGUgdkNQVSdzIGluZGV4ICpiZWZvcmUqIHRoZSB2Q1BVIGlzIHJlYWNoYWJsZSBieSBvdGhlciB0YXNrcy5cXG4rXFx0ICogVW53aW5kIHRoZSBpbmRleCBiYWNrIHRvIC0xIG9uIGZhaWx1cmUgc28gdGhhdCBLVk0gY2FuIHVzZSB0aGUgaW5kZXhcXG4rXFx0ICogdG8gZGV0ZWN0IHRoYXQgdGhlIHZDUFUgaXMgdW5yZWFjaGFibGUsIGUuZy4gZm9yIGxvY2tkZXAgYXNzZXJ0cy5cXG4rXFx0ICovXFxuIFxcdHZjcHUtXFx1MDAzZXZjcHVfaWR4ID0gYXRvbWljX3JlYWQoXFx1MDAyNmt2bS1cXHUwMDNlb25saW5lX3ZjcHVzKTtcXG4gXFx0ciA9IHhhX2luc2VydChcXHUwMDI2a3ZtLVxcdTAwM2V2Y3B1X2FycmF5LCB2Y3B1LVxcdTAwM2V2Y3B1X2lkeCwgdmNwdSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gXFx0V0FSTl9PTl9PTkNFKHIgPT0gLUVCVVNZKTtcXG4tXFx0aWYgKHIpXFxuK1xcdGlmIChyKSB7XFxuK1xcdFxcdHZjcHUtXFx1MDAzZXZjcHVfaWR4ID0gLTE7XFxuIFxcdFxcdGdvdG8gdW5sb2NrX3ZjcHVfZGVzdHJveTtcXG4rXFx0fVxcbiBcXG4gXFx0LypcXG4gXFx0ICogTm93IGl0J3MgYWxsIHNldCB1cCwgbGV0IHVzZXJzcGFjZSByZWFjaCBpdC4gIEdyYWIgdGhlIHZDUFUncyBtdXRleFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjo1NDowNi4wNTk4NDUxMTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2MTIyMDYwMjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTV9IWVBFUlZcIixcbiAgICBcIktWTV9YRU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHVcIixcbiAgICBcImt2bV9odl92Y3B1X2luaXRcIixcbiAgICBcImt2bV94ZW5faGNhbGxfdmNwdV9vcFwiLFxuICAgIFwia3ZtX2h2X2ZsdXNoX3RsYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHJhY2UgY29uZGl0aW9ucyBhbmQgdW5pbml0aWFsaXplZCBhY2Nlc3NlcyBpbiBLVk0ncyB2Q1BVIGNyZWF0aW9uLCBIeXBlci1WIGVtdWxhdGlvbiwgYW5kIFhlbiBlbXVsYXRpb24uIEl0IG1vZGlmaWVzIGNvcmUgdkNQVSBpbml0aWFsaXphdGlvbiBsb2dpYyBhbmQgaHlwZXJjYWxsIGhhbmRsZXJzLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gZ3Vlc3QgdXNlcnNwYWNlIGFuZCBjYW4gYmUgdHJpZ2dlcmVkIGNvbmN1cnJlbnRseS4gRnV6emluZyBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoZXNlIGZpeGVzIGNvcnJlY3RseSBoYW5kbGUgY29uY3VycmVudCB2Q1BVIGNyZWF0aW9uIGFuZCBoeXBlcmNhbGxzIHdpdGhvdXQgaW50cm9kdWNpbmcgbmV3IHJhY2VzIG9yIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI4ODNmNTczMTMwYjUzYzJiNDg3ZWIxZjQ0NmI1YjRjYTc4M2RjOGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1biAyNSAyMjo1NDowMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9oeXBlcnYuYyBiL2FyY2gveDg2L2t2bS9oeXBlcnYuY1xuaW5kZXggMWVlMGQyM2Y4OTQ5NzQuLjlkMzhjYjY0NDY2OGRhIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL2h5cGVydi5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmNcbkBAIC0yMDYsMTQgKzIwNiwyMCBAQCBzdGF0aWMgc3RydWN0IGt2bV92Y3B1ICpnZXRfdmNwdV9ieV92cGlkeChzdHJ1Y3Qga3ZtICprdm0sIHUzMiB2cGlkeClcbiBcbiBzdGF0aWMgc3RydWN0IGt2bV92Y3B1X2h2X3N5bmljICpzeW5pY19nZXQoc3RydWN0IGt2bSAqa3ZtLCB1MzIgdnBpZHgpXG4ge1xuLVx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuIFx0c3RydWN0IGt2bV92Y3B1X2h2X3N5bmljICpzeW5pYztcbitcdHN0cnVjdCBrdm1fdmNwdV9odiAqaHZfdmNwdTtcbitcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiBcbiBcdHZjcHUgPSBnZXRfdmNwdV9ieV92cGlkeChrdm0sIHZwaWR4KTtcbi1cdGlmICghdmNwdSB8fCAhdG9faHZfdmNwdSh2Y3B1KSlcbitcdGlmICghdmNwdSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4tXHRzeW5pYyA9IHRvX2h2X3N5bmljKHZjcHUpO1xuLVx0cmV0dXJuIChzeW5pYy1cdTAwM2VhY3RpdmUpID8gc3luaWMgOiBOVUxMO1xuK1xuK1x0aHZfdmNwdSA9IHRvX2h2X3ZjcHVfc2FmZSh2Y3B1KTtcbitcdGlmICghaHZfdmNwdSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRzeW5pYyA9IFx1MDAyNmh2X3ZjcHUtXHUwMDNlc3luaWM7XG4rXHRyZXR1cm4gUkVBRF9PTkNFKHN5bmljLVx1MDAzZWFjdGl2ZSkgPyBzeW5pYyA6IE5VTEw7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGt2bV9odl9ub3RpZnlfYWNrZWRfc2ludChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBzaW50KVxuQEAgLTU5Myw4ICs1OTksNyBAQCBzdGF0aWMgdm9pZCBzdGltZXJfbWFya19wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdV9odl9zdGltZXIgKnN0aW1lcixcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBodl9zdGltZXJfdG9fdmNwdShzdGltZXIpO1xuIFxuLVx0c2V0X2JpdChzdGltZXItXHUwMDNlaW5kZXgsXG4tXHRcdHRvX2h2X3ZjcHUodmNwdSktXHUwMDNlc3RpbWVyX3BlbmRpbmdfYml0bWFwKTtcbitcdHNldF9iaXQoc3RpbWVyLVx1MDAzZWluZGV4LCB2Y3B1LVx1MDAzZWFyY2guaHlwZXJ2LVx1MDAzZXN0aW1lcl9wZW5kaW5nX2JpdG1hcCk7XG4gXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfSFZfU1RJTUVSLCB2Y3B1KTtcbiBcdGlmICh2Y3B1X2tpY2spXG4gXHRcdGt2bV92Y3B1X2tpY2sodmNwdSk7XG5AQCAtNjA4LDggKzYxMyw3IEBAIHN0YXRpYyB2b2lkIHN0aW1lcl9jbGVhbnVwKHN0cnVjdCBrdm1fdmNwdV9odl9zdGltZXIgKnN0aW1lcilcbiBcdFx0XHRcdCAgICBzdGltZXItXHUwMDNlaW5kZXgpO1xuIFxuIFx0aHJ0aW1lcl9jYW5jZWwoXHUwMDI2c3RpbWVyLVx1MDAzZXRpbWVyKTtcbi1cdGNsZWFyX2JpdChzdGltZXItXHUwMDNlaW5kZXgsXG4tXHRcdCAgdG9faHZfdmNwdSh2Y3B1KS1cdTAwM2VzdGltZXJfcGVuZGluZ19iaXRtYXApO1xuK1x0Y2xlYXJfYml0KHN0aW1lci1cdTAwM2VpbmRleCwgdmNwdS1cdTAwM2VhcmNoLmh5cGVydi1cdTAwM2VzdGltZXJfcGVuZGluZ19iaXRtYXApO1xuIFx0c3RpbWVyLVx1MDAzZW1zZ19wZW5kaW5nID0gZmFsc2U7XG4gXHRzdGltZXItXHUwMDNlZXhwX3RpbWUgPSAwO1xuIH1cbkBAIC05NzIsNyArOTc2LDYgQEAgaW50IGt2bV9odl92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKCFodl92Y3B1KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdHZjcHUtXHUwMDNlYXJjaC5oeXBlcnYgPSBodl92Y3B1O1xuIFx0aHZfdmNwdS1cdTAwM2V2Y3B1ID0gdmNwdTtcbiBcbiBcdHN5bmljX2luaXQoXHUwMDI2aHZfdmNwdS1cdTAwM2VzeW5pYyk7XG5AQCAtOTg4LDYgKzk5MSwxNCBAQCBpbnQga3ZtX2h2X3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNmh2X3ZjcHUtXHUwMDNldGxiX2ZsdXNoX2ZpZm9baV0ud3JpdGVfbG9jayk7XG4gXHR9XG4gXG4rXHQvKlxuK1x0ICogRW5zdXJlIHRoZSBzdHJ1Y3R1cmUgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGl0J3MgdmlzaWJsZSB0b1xuK1x0ICogb3RoZXIgdGFza3MsIGFzIG11Y2ggb2YgdGhlIHN0YXRlIGNhbiBiZSBsZWdhbGx5IGFjY2Vzc2VkIHdpdGhvdXRcbitcdCAqIGhvbGRpbmcgdmNwdS1cdTAwM2VtdXRleC5cbitcdCAqXG4rXHQgKiBQYWlycyB3aXRoIHRoZSBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gdG9faHZfdmNwdV9zYWZlKCkuXG4rXHQgKi9cbitcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5oeXBlcnYsIGh2X3ZjcHUpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTEwMDIsNyArMTAxMyw3IEBAIGludCBrdm1faHZfYWN0aXZhdGVfc3luaWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGRvbnRfemVyb19zeW5pY19wYWdlcylcbiBcbiBcdHN5bmljID0gdG9faHZfc3luaWModmNwdSk7XG4gXG4tXHRzeW5pYy1cdTAwM2VhY3RpdmUgPSB0cnVlO1xuK1x0V1JJVEVfT05DRShzeW5pYy1cdTAwM2VhY3RpdmUsIHRydWUpO1xuIFx0c3luaWMtXHUwMDNlZG9udF96ZXJvX3N5bmljX3BhZ2VzID0gZG9udF96ZXJvX3N5bmljX3BhZ2VzO1xuIFx0c3luaWMtXHUwMDNlY29udHJvbCA9IEhWX1NZTklDX0NPTlRST0xfRU5BQkxFO1xuIFx0cmV0dXJuIDA7XG5AQCAtMTkzNSwxNCArMTk0NiwxNCBAQCBzdGF0aWMgaW50IGt2bV9odl9nZXRfdGxiX2ZsdXNoX2VudHJpZXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2h2X2hjYWxsICpoY1xuIFx0cmV0dXJuIGt2bV9odl9nZXRfaGNfZGF0YShrdm0sIGhjLCBoYy1cdTAwM2VyZXBfY250LCBoYy1cdTAwM2VyZXBfY250LCBlbnRyaWVzKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgaHZfdGxiX2ZsdXNoX2VucXVldWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLVx0XHRcdFx0IHN0cnVjdCBrdm1fdmNwdV9odl90bGJfZmx1c2hfZmlmbyAqdGxiX2ZsdXNoX2ZpZm8sXG4tXHRcdFx0XHQgdTY0ICplbnRyaWVzLCBpbnQgY291bnQpXG4rc3RhdGljIHZvaWQgaHZfdGxiX2ZsdXNoX2VucXVldWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKmVudHJpZXMsIGludCBjb3VudCxcbitcdFx0XHRcdCBib29sIGlzX2d1ZXN0X21vZGUpXG4ge1xuLVx0c3RydWN0IGt2bV92Y3B1X2h2ICpodl92Y3B1ID0gdG9faHZfdmNwdSh2Y3B1KTtcbitcdHN0cnVjdCBrdm1fdmNwdV9odl90bGJfZmx1c2hfZmlmbyAqdGxiX2ZsdXNoX2ZpZm87XG4gXHR1NjQgZmx1c2hfYWxsX2VudHJ5ID0gS1ZNX0hWX1RMQl9GTFVTSEFMTF9FTlRSWTtcbiBcbi1cdGlmICghaHZfdmNwdSlcbitcdHRsYl9mbHVzaF9maWZvID0ga3ZtX2h2X2dldF90bGJfZmx1c2hfZmlmbyh2Y3B1LCBpc19ndWVzdF9tb2RlKTtcbitcdGlmICghdGxiX2ZsdXNoX2ZpZm8pXG4gXHRcdHJldHVybjtcbiBcbiBcdHNwaW5fbG9jayhcdTAwMjZ0bGJfZmx1c2hfZmlmby1cdTAwM2V3cml0ZV9sb2NrKTtcbkBAIC0xOTcwLDE1ICsxOTgxLDE2IEBAIHN0YXRpYyB2b2lkIGh2X3RsYl9mbHVzaF9lbnF1ZXVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBpbnQga3ZtX2h2X3ZjcHVfZmx1c2hfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHVfaHZfdGxiX2ZsdXNoX2ZpZm8gKnRsYl9mbHVzaF9maWZvO1xuLVx0c3RydWN0IGt2bV92Y3B1X2h2ICpodl92Y3B1ID0gdG9faHZfdmNwdSh2Y3B1KTtcbiBcdHU2NCBlbnRyaWVzW0tWTV9IVl9UTEJfRkxVU0hfRklGT19TSVpFXTtcbiBcdGludCBpLCBqLCBjb3VudDtcbiBcdGd2YV90IGd2YTtcbiBcbi1cdGlmICghdGRwX2VuYWJsZWQgfHwgIWh2X3ZjcHUpXG4rXHRpZiAoIXRkcF9lbmFibGVkKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdHRsYl9mbHVzaF9maWZvID0ga3ZtX2h2X2dldF90bGJfZmx1c2hfZmlmbyh2Y3B1LCBpc19ndWVzdF9tb2RlKHZjcHUpKTtcbitcdGlmICghdGxiX2ZsdXNoX2ZpZm8pXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0Y291bnQgPSBrZmlmb19vdXQoXHUwMDI2dGxiX2ZsdXNoX2ZpZm8tXHUwMDNlZW50cmllcywgZW50cmllcywgS1ZNX0hWX1RMQl9GTFVTSF9GSUZPX1NJWkUpO1xuIFxuQEAgLTIwMTcsNyArMjAyOSw2IEBAIHN0YXRpYyB1NjQga3ZtX2h2X2ZsdXNoX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1faHZfaGNhbGwgKmhjKVxuIFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cdTAwM2Vrdm07XG4gXHRzdHJ1Y3QgaHZfdGxiX2ZsdXNoX2V4IGZsdXNoX2V4O1xuIFx0c3RydWN0IGh2X3RsYl9mbHVzaCBmbHVzaDtcbi1cdHN0cnVjdCBrdm1fdmNwdV9odl90bGJfZmx1c2hfZmlmbyAqdGxiX2ZsdXNoX2ZpZm87XG4gXHQvKlxuIFx0ICogTm9ybWFsbHksIHRoZXJlIGNhbiBiZSBubyBtb3JlIHRoYW4gJ0tWTV9IVl9UTEJfRkxVU0hfRklGT19TSVpFJ1xuIFx0ICogZW50cmllcyBvbiB0aGUgVExCIGZsdXNoIGZpZm8uIFRoZSBsYXN0IGVudHJ5LCBob3dldmVyLCBuZWVkcyB0byBiZVxuQEAgLTIxNDQsMTEgKzIxNTUsOCBAQCBzdGF0aWMgdTY0IGt2bV9odl9mbHVzaF90bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2h2X2hjYWxsICpoYylcbiBcdCAqIGFuYWx5emUgaXQgaGVyZSwgZmx1c2ggVExCIHJlZ2FyZGxlc3Mgb2YgdGhlIHNwZWNpZmllZCBhZGRyZXNzIHNwYWNlLlxuIFx0ICovXG4gXHRpZiAoYWxsX2NwdXMgXHUwMDI2XHUwMDI2ICFpc19ndWVzdF9tb2RlKHZjcHUpKSB7XG4tXHRcdGt2bV9mb3JfZWFjaF92Y3B1KGksIHYsIGt2bSkge1xuLVx0XHRcdHRsYl9mbHVzaF9maWZvID0ga3ZtX2h2X2dldF90bGJfZmx1c2hfZmlmbyh2LCBmYWxzZSk7XG4tXHRcdFx0aHZfdGxiX2ZsdXNoX2VucXVldWUodiwgdGxiX2ZsdXNoX2ZpZm8sXG4tXHRcdFx0XHRcdCAgICAgdGxiX2ZsdXNoX2VudHJpZXMsIGhjLVx1MDAzZXJlcF9jbnQpO1xuLVx0XHR9XG4rXHRcdGt2bV9mb3JfZWFjaF92Y3B1KGksIHYsIGt2bSlcbitcdFx0XHRodl90bGJfZmx1c2hfZW5xdWV1ZSh2LCB0bGJfZmx1c2hfZW50cmllcywgaGMtXHUwMDNlcmVwX2NudCwgZmFsc2UpO1xuIFxuIFx0XHRrdm1fbWFrZV9hbGxfY3B1c19yZXF1ZXN0KGt2bSwgS1ZNX1JFUV9IVl9UTEJfRkxVU0gpO1xuIFx0fSBlbHNlIGlmICghaXNfZ3Vlc3RfbW9kZSh2Y3B1KSkge1xuQEAgLTIxNTgsOSArMjE2Niw3IEBAIHN0YXRpYyB1NjQga3ZtX2h2X2ZsdXNoX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1faHZfaGNhbGwgKmhjKVxuIFx0XHRcdHYgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCBpKTtcbiBcdFx0XHRpZiAoIXYpXG4gXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHR0bGJfZmx1c2hfZmlmbyA9IGt2bV9odl9nZXRfdGxiX2ZsdXNoX2ZpZm8odiwgZmFsc2UpO1xuLVx0XHRcdGh2X3RsYl9mbHVzaF9lbnF1ZXVlKHYsIHRsYl9mbHVzaF9maWZvLFxuLVx0XHRcdFx0XHQgICAgIHRsYl9mbHVzaF9lbnRyaWVzLCBoYy1cdTAwM2VyZXBfY250KTtcbitcdFx0XHRodl90bGJfZmx1c2hfZW5xdWV1ZSh2LCB0bGJfZmx1c2hfZW50cmllcywgaGMtXHUwMDNlcmVwX2NudCwgZmFsc2UpO1xuIFx0XHR9XG4gXG4gXHRcdGt2bV9tYWtlX3ZjcHVzX3JlcXVlc3RfbWFzayhrdm0sIEtWTV9SRVFfSFZfVExCX0ZMVVNILCB2Y3B1X21hc2spO1xuQEAgLTIxNzAsNyArMjE3Niw3IEBAIHN0YXRpYyB1NjQga3ZtX2h2X2ZsdXNoX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1faHZfaGNhbGwgKmhjKVxuIFx0XHRiaXRtYXBfemVybyh2Y3B1X21hc2ssIEtWTV9NQVhfVkNQVVMpO1xuIFxuIFx0XHRrdm1fZm9yX2VhY2hfdmNwdShpLCB2LCBrdm0pIHtcbi1cdFx0XHRodl92ID0gdG9faHZfdmNwdSh2KTtcbitcdFx0XHRodl92ID0gdG9faHZfdmNwdV9zYWZlKHYpO1xuIFxuIFx0XHRcdC8qXG4gXHRcdFx0ICogVGhlIGZvbGxvd2luZyBjaGVjayByYWNlcyB3aXRoIG5lc3RlZCB2Q1BVcyBlbnRlcmluZy9leGl0aW5nXG5AQCAtMjE5MSw5ICsyMTk3LDcgQEAgc3RhdGljIHU2NCBrdm1faHZfZmx1c2hfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9odl9oY2FsbCAqaGMpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0XHRfX3NldF9iaXQoaSwgdmNwdV9tYXNrKTtcbi1cdFx0XHR0bGJfZmx1c2hfZmlmbyA9IGt2bV9odl9nZXRfdGxiX2ZsdXNoX2ZpZm8odiwgdHJ1ZSk7XG4tXHRcdFx0aHZfdGxiX2ZsdXNoX2VucXVldWUodiwgdGxiX2ZsdXNoX2ZpZm8sXG4tXHRcdFx0XHRcdCAgICAgdGxiX2ZsdXNoX2VudHJpZXMsIGhjLVx1MDAzZXJlcF9jbnQpO1xuK1x0XHRcdGh2X3RsYl9mbHVzaF9lbnF1ZXVlKHYsIHRsYl9mbHVzaF9lbnRyaWVzLCBoYy1cdTAwM2VyZXBfY250LCB0cnVlKTtcbiBcdFx0fVxuIFxuIFx0XHRrdm1fbWFrZV92Y3B1c19yZXF1ZXN0X21hc2soa3ZtLCBLVk1fUkVRX0hWX1RMQl9GTFVTSCwgdmNwdV9tYXNrKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmggYi9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmhcbmluZGV4IDFjOGY3YWFhYjA2M2QwLi4zN2EwYmNmMDNlMjgxNiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9oeXBlcnYuaFxuKysrIGIvYXJjaC94ODYva3ZtL2h5cGVydi5oXG5AQCAtNjIsOCArNjIsMjIgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX2h2ICp0b19rdm1faHYoc3RydWN0IGt2bSAqa3ZtKVxuIFx0cmV0dXJuIFx1MDAyNmt2bS1cdTAwM2VhcmNoLmh5cGVydjtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX3ZjcHVfaHYgKnRvX2h2X3ZjcHVfc2FmZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0LypcbitcdCAqIEVuc3VyZSB0aGUgSHlwZXJWIHN0cnVjdHVyZSBpcyBmdWxseSBpbml0aWFsaXplZCB3aGVuIGFjY2Vzc2luZyBpdFxuK1x0ICogd2l0aG91dCBob2xkaW5nIHZjcHUtXHUwMDNlbXV0ZXggKG9yIHNvbWUgb3RoZXIgZ3VhcmFudGVlIHRoYXQgS1ZNIGNhbid0XG4rXHQgKiBjb25jdXJyZW50bHkgaW5zdGFudGlhdGUgdGhlIHN0cnVjdHVyZSkuXG4rXHQgKlxuK1x0ICogUGFpcnMgd2l0aCB0aGUgc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBrdm1faHZfdmNwdV9pbml0KCkuXG4rXHQgKi9cbitcdHJldHVybiBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5oeXBlcnYpO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1fdmNwdV9odiAqdG9faHZfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuK1x0a3ZtX2xvY2tkZXBfYXNzZXJ0X3ZjcHVfaXNfbG9ja2VkX29yX3VucmVhY2hhYmxlKHZjcHUpO1xuK1xuIFx0cmV0dXJuIHZjcHUtXHUwMDNlYXJjaC5oeXBlcnY7XG4gfVxuIFxuQEAgLTg4LDcgKzEwMiw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV9odl9zeW5kYmcgKnRvX2h2X3N5bmRiZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gc3RhdGljIGlubGluZSB1MzIga3ZtX2h2X2dldF92cGluZGV4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRzdHJ1Y3Qga3ZtX3ZjcHVfaHYgKmh2X3ZjcHUgPSB0b19odl92Y3B1KHZjcHUpO1xuK1x0c3RydWN0IGt2bV92Y3B1X2h2ICpodl92Y3B1ID0gdG9faHZfdmNwdV9zYWZlKHZjcHUpO1xuIFxuIFx0cmV0dXJuIGh2X3ZjcHUgPyBodl92Y3B1LVx1MDAzZXZwX2luZGV4IDogdmNwdS1cdTAwM2V2Y3B1X2lkeDtcbiB9XG5AQCAtMTQyLDcgKzE1Niw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV92Y3B1ICpodl9zdGltZXJfdG9fdmNwdShzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltXG4gXG4gc3RhdGljIGlubGluZSBib29sIGt2bV9odl9oYXNfc3RpbWVyX3BlbmRpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHN0cnVjdCBrdm1fdmNwdV9odiAqaHZfdmNwdSA9IHRvX2h2X3ZjcHUodmNwdSk7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHVfaHYgKmh2X3ZjcHUgPSB0b19odl92Y3B1X3NhZmUodmNwdSk7XG4gXG4gXHRpZiAoIWh2X3ZjcHUpXG4gXHRcdHJldHVybiBmYWxzZTtcbkBAIC0xOTgsMTAgKzIxMiwxMyBAQCBpbnQga3ZtX2dldF9odl9jcHVpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fY3B1aWQyICpjcHVpZCxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1fdmNwdV9odl90bGJfZmx1c2hfZmlmbyAqa3ZtX2h2X2dldF90bGJfZmx1c2hfZmlmbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRcdFx0XHRcdFx0XHRcdFx0ICAgYm9vbCBpc19ndWVzdF9tb2RlKVxuIHtcbi1cdHN0cnVjdCBrdm1fdmNwdV9odiAqaHZfdmNwdSA9IHRvX2h2X3ZjcHUodmNwdSk7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHVfaHYgKmh2X3ZjcHUgPSB0b19odl92Y3B1X3NhZmUodmNwdSk7XG4gXHRpbnQgaSA9IGlzX2d1ZXN0X21vZGUgPyBIVl9MMl9UTEJfRkxVU0hfRklGTyA6XG4gXHRcdFx0XHRIVl9MMV9UTEJfRkxVU0hfRklGTztcbiBcbitcdGlmICghaHZfdmNwdSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4gXHRyZXR1cm4gXHUwMDI2aHZfdmNwdS1cdTAwM2V0bGJfZmx1c2hfZmlmb1tpXTtcbiB9XG4gXG5AQCAtMjA5LDEwICsyMjYsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIGt2bV9odl92Y3B1X3B1cmdlX2ZsdXNoX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IGt2bV92Y3B1X2h2X3RsYl9mbHVzaF9maWZvICp0bGJfZmx1c2hfZmlmbztcbiBcbi1cdGlmICghdG9faHZfdmNwdSh2Y3B1KSB8fCAha3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9IVl9UTEJfRkxVU0gsIHZjcHUpKVxuK1x0aWYgKCFrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX0hWX1RMQl9GTFVTSCwgdmNwdSkpXG4gXHRcdHJldHVybjtcbiBcbiBcdHRsYl9mbHVzaF9maWZvID0ga3ZtX2h2X2dldF90bGJfZmx1c2hfZmlmbyh2Y3B1LCBpc19ndWVzdF9tb2RlKHZjcHUpKTtcbitcdGlmICghdGxiX2ZsdXNoX2ZpZm8pXG4rXHRcdHJldHVybjtcbiBcbiBcdGtmaWZvX3Jlc2V0X291dChcdTAwMjZ0bGJfZmx1c2hfZmlmby1cdTAwM2VlbnRyaWVzKTtcbiB9XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaCBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmhcbmluZGV4IDZkNmNkNTkwNGRkZjY2Li5jNmRlODQ4YmQ5Y2VkNSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmhcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmhcbkBAIC01NywxNiArNTcsMTQgQEAgYm9vbCBuZXN0ZWRfdm14X2NoZWNrX2lvX2JpdG1hcHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgcG9ydCxcbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCB2bWNzMTIgKmdldF92bWNzMTIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdGxvY2tkZXBfYXNzZXJ0X29uY2UobG9ja2RlcF9pc19oZWxkKFx1MDAyNnZjcHUtXHUwMDNlbXV0ZXgpIHx8XG4tXHRcdFx0ICAgICFyZWZjb3VudF9yZWFkKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZXVzZXJzX2NvdW50KSk7XG4rXHRrdm1fbG9ja2RlcF9hc3NlcnRfdmNwdV9pc19sb2NrZWRfb3JfdW5yZWFjaGFibGUodmNwdSk7XG4gXG4gXHRyZXR1cm4gdG9fdm14KHZjcHUpLVx1MDAzZW5lc3RlZC5jYWNoZWRfdm1jczEyO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCB2bWNzMTIgKmdldF9zaGFkb3dfdm1jczEyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRsb2NrZGVwX2Fzc2VydF9vbmNlKGxvY2tkZXBfaXNfaGVsZChcdTAwMjZ2Y3B1LVx1MDAzZW11dGV4KSB8fFxuLVx0XHRcdCAgICAhcmVmY291bnRfcmVhZChcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2V1c2Vyc19jb3VudCkpO1xuK1x0a3ZtX2xvY2tkZXBfYXNzZXJ0X3ZjcHVfaXNfbG9ja2VkX29yX3VucmVhY2hhYmxlKHZjcHUpO1xuIFxuIFx0cmV0dXJuIHRvX3ZteCh2Y3B1KS1cdTAwM2VuZXN0ZWQuY2FjaGVkX3NoYWRvd192bWNzMTI7XG4gfVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ZW4uYyBiL2FyY2gveDg2L2t2bS94ZW4uY1xuaW5kZXggNjk0YjMxYzFmY2M5YWYuLmRiMTBmMTJkMTBjZjhiIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3hlbi5jXG4rKysgYi9hcmNoL3g4Ni9rdm0veGVuLmNcbkBAIC0yMiw2ICsyMiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjeGVuL2ludGVyZmFjZS92ZXJzaW9uLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N4ZW4vaW50ZXJmYWNlL2V2ZW50X2NoYW5uZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3hlbi9pbnRlcmZhY2Uvc2NoZWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3hlbi94ZW4tb3BzLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20veGVuL2NwdWlkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcHZjbG9jay5oXHUwMDNlXG5AQCAtMTYxMCwxMyArMTYxMSwxNiBAQCBzdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3ZjcHVfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLCBpbnQgY21kLFxuIFx0aWYgKCFrdm1feGVuX3RpbWVyX2VuYWJsZWQodmNwdSkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbitcdGlmICh2Y3B1LVx1MDAzZWFyY2gueGVuLnZjcHVfaWQgPT0gWEVOX1ZDUFVfSURfSU5WQUxJRClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKHZjcHUtXHUwMDNlYXJjaC54ZW4udmNwdV9pZCAhPSB2Y3B1X2lkKSB7XG4rXHRcdCpyID0gLUVJTlZBTDtcbitcdFx0cmV0dXJuIHRydWU7XG4rXHR9XG4rXG4gXHRzd2l0Y2ggKGNtZCkge1xuIFx0Y2FzZSBWQ1BVT1Bfc2V0X3NpbmdsZXNob3RfdGltZXI6XG4tXHRcdGlmICh2Y3B1LVx1MDAzZWFyY2gueGVuLnZjcHVfaWQgIT0gdmNwdV9pZCkge1xuLVx0XHRcdCpyID0gLUVJTlZBTDtcbi1cdFx0XHRyZXR1cm4gdHJ1ZTtcbi1cdFx0fVxuLVxuIFx0XHQvKlxuIFx0XHQgKiBUaGUgb25seSBkaWZmZXJlbmNlIGZvciAzMi1iaXQgY29tcGF0IGlzIHRoZSA0IGJ5dGVzIG9mXG4gXHRcdCAqIHBhZGRpbmcgYWZ0ZXIgdGhlIGludGVyZXN0aW5nIHBhcnQgb2YgdGhlIHN0cnVjdHVyZS4gU29cbkBAIC0xNjQ0LDEwICsxNjQ4LDYgQEAgc3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF92Y3B1X29wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBsb25nbW9kZSwgaW50IGNtZCxcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHRjYXNlIFZDUFVPUF9zdG9wX3NpbmdsZXNob3RfdGltZXI6XG4tXHRcdGlmICh2Y3B1LVx1MDAzZWFyY2gueGVuLnZjcHVfaWQgIT0gdmNwdV9pZCkge1xuLVx0XHRcdCpyID0gLUVJTlZBTDtcbi1cdFx0XHRyZXR1cm4gdHJ1ZTtcbi1cdFx0fVxuIFx0XHRrdm1feGVuX3N0b3BfdGltZXIodmNwdSk7XG4gXHRcdCpyID0gMDtcbiBcdFx0cmV0dXJuIHRydWU7XG5AQCAtMjI5OSw3ICsyMjk5LDcgQEAgc3RhdGljIGJvb2wga3ZtX3hlbl9oY2FsbF9ldnRjaG5fc2VuZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBwYXJhbSwgdTY0ICpyKVxuIFxuIHZvaWQga3ZtX3hlbl9pbml0X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHZjcHUtXHUwMDNlYXJjaC54ZW4udmNwdV9pZCA9IHZjcHUtXHUwMDNldmNwdV9pZHg7XG4rXHR2Y3B1LVx1MDAzZWFyY2gueGVuLnZjcHVfaWQgPSBYRU5fVkNQVV9JRF9JTlZBTElEO1xuIFx0dmNwdS1cdTAwM2VhcmNoLnhlbi5wb2xsX2V2dGNobiA9IDA7XG4gXG4gXHR0aW1lcl9zZXR1cChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gueGVuLnBvbGxfdGltZXIsIGNhbmNlbF9ldnRjaG5fcG9sbCwgMCk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5pbmRleCBhYjhjZmFlYzgyZDMxZS4uMGJkZmEzNjk5MzUyN2UgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbisrKyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuQEAgLTk4OSw2ICs5ODksMTMgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX2lvX2J1cyAqa3ZtX2dldF9idXMoc3RydWN0IGt2bSAqa3ZtLCBlbnVtIGt2bV9idXMgaWR4KVxuIFx0XHRcdFx0XHQgbG9ja2RlcF9pc19oZWxkKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKSk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fbG9ja2RlcF9hc3NlcnRfdmNwdV9pc19sb2NrZWRfb3JfdW5yZWFjaGFibGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdGxvY2tkZXBfYXNzZXJ0X29uY2UobG9ja2RlcF9pc19oZWxkKFx1MDAyNnZjcHUtXHUwMDNlbXV0ZXgpIHx8XG4rXHRcdFx0ICAgIHZjcHUtXHUwMDNldmNwdV9pZHggXHUwMDNjIDAgfHxcbitcdFx0XHQgICAgIXJlZmNvdW50X3JlYWQoXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNldXNlcnNfY291bnQpKTtcbit9XG4rXG4gc3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX3ZjcHUgKmt2bV9nZXRfdmNwdShzdHJ1Y3Qga3ZtICprdm0sIGludCBpKVxuIHtcbiBcdGludCBudW1fdmNwdXMgPSBhdG9taWNfcmVhZChcdTAwMjZrdm0tXHUwMDNlb25saW5lX3ZjcHVzKTtcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uY1xuaW5kZXggZTQ0YzIwYzA0OTYxMGQuLjk4ZGE0Yzg4OWZmYzZjIDEwMDY0NFxuLS0tIGEvdmlydC9rdm0va3ZtX21haW4uY1xuKysrIGIvdmlydC9rdm0va3ZtX21haW4uY1xuQEAgLTQxODgsNiArNDE4OCw4IEBAIHN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBpZClcbiBcdFx0Z290byB2Y3B1X2RlY3JlbWVudDtcbiBcdH1cbiBcbitcdHZjcHUtXHUwMDNldmNwdV9pZHggPSAtMTtcbitcbiBcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IGt2bV9ydW4pIFx1MDAzZSBQQUdFX1NJWkUpO1xuIFx0cGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfWkVSTyk7XG4gXHRpZiAoIXBhZ2UpIHtcbkBAIC00MjE2LDExICs0MjE4LDE4IEBAIHN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBpZClcbiBcdFx0Z290byB1bmxvY2tfdmNwdV9kZXN0cm95O1xuIFx0fVxuIFxuK1x0LypcbitcdCAqIFNldCB0aGUgdkNQVSdzIGluZGV4ICpiZWZvcmUqIHRoZSB2Q1BVIGlzIHJlYWNoYWJsZSBieSBvdGhlciB0YXNrcy5cbitcdCAqIFVud2luZCB0aGUgaW5kZXggYmFjayB0byAtMSBvbiBmYWlsdXJlIHNvIHRoYXQgS1ZNIGNhbiB1c2UgdGhlIGluZGV4XG4rXHQgKiB0byBkZXRlY3QgdGhhdCB0aGUgdkNQVSBpcyB1bnJlYWNoYWJsZSwgZS5nLiBmb3IgbG9ja2RlcCBhc3NlcnRzLlxuK1x0ICovXG4gXHR2Y3B1LVx1MDAzZXZjcHVfaWR4ID0gYXRvbWljX3JlYWQoXHUwMDI2a3ZtLVx1MDAzZW9ubGluZV92Y3B1cyk7XG4gXHRyID0geGFfaW5zZXJ0KFx1MDAyNmt2bS1cdTAwM2V2Y3B1X2FycmF5LCB2Y3B1LVx1MDAzZXZjcHVfaWR4LCB2Y3B1LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0V0FSTl9PTl9PTkNFKHIgPT0gLUVCVVNZKTtcbi1cdGlmIChyKVxuK1x0aWYgKHIpIHtcbitcdFx0dmNwdS1cdTAwM2V2Y3B1X2lkeCA9IC0xO1xuIFx0XHRnb3RvIHVubG9ja192Y3B1X2Rlc3Ryb3k7XG4rXHR9XG4gXG4gXHQvKlxuIFx0ICogTm93IGl0J3MgYWxsIHNldCB1cCwgbGV0IHVzZXJzcGFjZSByZWFjaCBpdC4gIEdyYWIgdGhlIHZDUFUncyBtdXRleFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjI6NTQ6MDYuMDU5ODQ3NTgxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzY5NzczNzA3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2ggZm9yIEtWTSBWaXJ0dWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgXCJUaGlzIGlzIHRvdWNoaW5nIHNvbWUgY3JpdGljYWwgdmlydHVhbGl6YXRpb24gaW5mcmFzdHJ1Y3R1cmUuXCIgSXQgbG9va3MgbGlrZSBpdCdzIGEga2VybmVsIHBhdGNoIHRhcmdldGluZyBLVk0sIHNwZWNpZmljYWxseSB0aGUgZW11bGF0aW9uIGxheWVycyBmb3IgSHlwZXItViBhbmQgWGVuIG9uIHg4NiBhcmNoaXRlY3R1cmVzLiBJJ20gc2VlaW5nIGNoYW5nZXMgYWNyb3NzIGEgZmV3IGNvcmUgZmlsZXMsIG5hbWVseSBgaHlwZXJ2LmNgIGFuZCBgaHlwZXJ2LmhgIHdpdGhpbiB0aGUgYGFyY2gveDg2L2t2bWAgZGlyZWN0b3J5LiBUaGUgc3BlY2lmaWMgZnVuY3Rpb25zIGJlaW5nIG1vZGlmaWVkIOKAkyBgc3luaWNfZ2V0YCwgYHN0aW1lcl9tYXJrX3BlbmRpbmdgLCBga3ZtX2h2X3ZjcHVfaW5pdGAgZXRjLiAtIHN1Z2dlc3Qgd2UncmUgZGVhbGluZyB3aXRoIGlzc3VlcyByZWxhdGVkIHRvIGludGVycnVwdCBoYW5kbGluZywgdGltZXIgbWFuYWdlbWVudCwgYW5kIHZDUFUgaW5pdGlhbGl6YXRpb24gd2l0aGluIHRoZSBIeXBlci1WIGVudmlyb25tZW50LlxuXG5JJ20gYWxzbyBzZWVpbmcgYWx0ZXJhdGlvbnMgaW4gYGt2bV94ZW5faGNhbGxfdmNwdV9vcGAgYW5kIGBrdm1feGVuX2luaXRfdmNwdWAgd2l0aGluIGB4ZW4uY2AsIHdoaWNoIGNvbmZpcm1zIHRoZSBzY29wZSBleHRlbmRpbmcgdG8gWGVuIGVtdWxhdGlvbi4gVGhlIGBuZXN0ZWQuaGAgZmlsZSBhbmQgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYGdldF92bWNzMTJgIGFyZSBhbHNvIHByZXNlbnQsIHdoaWNoIG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gY2FwYWJpbGl0aWVzLiBBbmQsIGxvb2tpbmcgYXQgdGhlIGBrdm1faG9zdC5oYCBpbmNsdXNpb24gb2YgYGt2bV9sb2NrZGVwX2Fzc2VydF92Y3B1X2lzX2xvY2tlZF9vcl91bnJlYWNoYWJsZWAgc3VnZ2VzdHMgbG9jayBwcm90ZWN0aW9uIG1pZ2h0IGJlIGludm9sdmVkIHRvby5cblxuTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSByYWNlIGNvbmRpdGlvbiwgb3IgcGVyaGFwcyBzb21lIHByb2JsZW1zIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCB2Q1BVIHN0YXRlIGluIEh5cGVyLVYgb3IgaW5jb3JyZWN0IGB2Y3B1X2lkYCBoYW5kbGluZyBpbiBYZW4uIFRoYXQganVtcCB0byAgYHZjcHUtXHUwMDNldmNwdV9pZHggPSAtMWAgaW4gYGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdWAgYW5kIHRoZSB1c2Ugb2YgYHNtcF9sb2FkX2FjcXVpcmVgIGluIGB0b19odl92Y3B1X3NhZmVgIGhpbnRzIGF0IGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVsYXRlZCB0byBhIHZDUFUgaW5kZXggYXNzaWdubWVudCBhbmQgbWVtb3J5IGFjY2VzcyBvcmRlcmluZyBmb3Igc3luY2hyb25pemF0aW9uLiBcblxuVGhlIG5leHQgc3RlcCBpcyB0byBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uIHNldCB1cC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBLVk0gaXMgZW5hYmxlZCwgYW5kIHRoYXQgZWl0aGVyIHRoZSBIeXBlci1WIGFuZCBYZW4gZW11bGF0aW9uIHNldHRpbmdzIGFyZSBlbmFibGVkLiBTbywgYENPTkZJR19LVk1gLCBgQ09ORklHX0tWTV9JTlRFTGAsIGBDT05GSUdfS1ZNX0FNRGAsIGFuZCBgQ09ORklHX0tWTV9YRU5gIG11c3QgYmUgc2V0LiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgdG8gc2VlIHRoZSBzcGVjaWZpY3MgZm9yIEh5cGVyLVYgYW5kIFhlbiBjb25maWd1cmF0aW9ucy4gVGhpcyBpcyBhIHNvbGlkLCBmdW5jdGlvbmFsIGNoYW5nZSBhbmQgSSdsbCBuZWVkIHRvIHJldmlldyB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY3MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIyOjU0OjEzLjc1NzU4NzkxM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDk0MTQ0NTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9YRU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTkzPWNvbmZpZyBLVk1fSFlQRVJWXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA3OmNvbmZpZyBLVk1fWEVOXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjo1NDoxNC4xMDcwMDc4MTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTgxMTc1NjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBIeXBlcnZpc29yIEludGVyYWN0aW9ucyoqXG5cbkhtbSwgdGhpbmtpbmcgYWJvdXQgdGhpcyBwcm9ibGVtLCBteSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNoZWNrIGlmIGBLVk1fWEVOYCBhbmQgYEtWTV9IWVBFUlZgIGFyZSBpbnZvbHZlZCBpbiB0aGlzLiBXYWl0IGEgbWludXRl4oCmIEknbSBnZXR0aW5nIGFoZWFkIG9mIG15c2VsZiwgSSB0aG91Z2h0IGBLVk1fSFlQRVJWYCB3YXNuJ3QgYWN0dWFsbHkgYSBwcm9wZXIgY29uZmlnIG9wdGlvbiBpbiB0aGlzIGNvbnRleHQuIE9rYXksIHF1aWNrIHNhbml0eSBjaGVja+KApiBZZXAsIGl0IGxvb2tzIGxpa2UgaXQgKmlzKiBhIGNvbmZpZy4gTm93IEkgbmVlZCB0byBzZWUgZXhhY3RseSB3aGF0IHRoYXQgY29uZmlnIGVudGFpbHMuIFRpbWUgdG8gZGVsdmUgaW50byB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg3NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIyOjU0OjE3LjA4ODE4NTcyMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODYxNDU1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0hZUEVSVlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xODI9Y29uZmlnIEtWTV9TTU1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxOTM6Y29uZmlnIEtWTV9IWVBFUlZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTQtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjo1NDoxNy4xNjY4MDYxMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MDIzMTYwOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXRzIGluIEtWTTogSHlwZXItViBhbmQgWGVuKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYEtWTV9YRU5gIGFuZCBgS1ZNX0hZUEVSVmAgaW4gdGhlIEtWTSBjb25maWdzIOKAkyB0aGF0J3MgdGhlIGFyZWEgSSB3YW50IHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nLiBUaW1lIHRvIGh1bnQgZG93biBzb21lIGtleSBmdW5jdGlvbnMuXG5cbkZpcnN0LCBJJ3ZlIGdvdCBgYXJjaC94ODYva3ZtL2h5cGVydi5jYC4gTGV0J3Mgc2VlOiBJJ3ZlIGlkZW50aWZpZWQgYGt2bV9odl92Y3B1X2luaXRgLCBga3ZtX2h2X2FjdGl2YXRlX3N5bmljYCwgYGt2bV9odl92Y3B1X2ZsdXNoX3RsYmAsIGFuZCBga3ZtX2h2X2ZsdXNoX3RsYmAgYXMgcG90ZW50aWFsIGNhbmRpZGF0ZXMuIFRoZW4sIG92ZXIgaW4gYGFyY2gveDg2L2t2bS94ZW4uY2AsIEkndmUgZ290IGBrdm1feGVuX2hjYWxsX3ZjcHVfb3BgIGFuZCBga3ZtX3hlbl9pbml0X3ZjcHVgLiBGaW5hbGx5LCBJJ20gY2hlY2tpbmcgYHZpcnQva3ZtL2t2bV9tYWluLmNgIOKAkyBhbmQgYGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdWAgbG9va3MgbGlrZSBpdCBtaWdodCBiZSBpbnRlcmVzdGluZyB0b28uXG5cbk5vdywgYSBxdWljayBhc3Nlc3NtZW50IG9mIHRoZXNlIHBhdGhzLiBJJ20gZ29pbmcgdG8gZGV0ZXJtaW5lIGlmIHRoZXkncmUgY29uc2lkZXJlZCBob3QgcGF0aHMuIExvb2tpbmcgYXQgYGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdWAg4oCTIG5vdCBhIGhpZ2gtZnJlcXVlbmN5IGNhbGwuIGBrdm1faHZfdmNwdV9pbml0YCBpcyBhbHNvIG5vdCBhIGhvdCBwYXRoLiBga3ZtX3hlbl9oY2FsbF92Y3B1X29wYCBpcyBhIGh5cGVyY2FsbCwgc28gdGhhdCBvbmUgaXMgZGVmaW5pdGVseSBhIGdvb2QgdGFyZ2V0IHNpbmNlIGl0IG1pZ2h0IGJlIGNhbGxlZCBwcmV0dHkgb2Z0ZW4uIFNpbWlsYXJseSwgYGt2bV9odl9mbHVzaF90bGJgIGlzIGFsc28gYSBoeXBlcmNhbGwuXG5cblNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBga3ZtX2h2X2ZsdXNoX3RsYmAgYW5kIGBrdm1faHZfdmNwdV9mbHVzaF90bGJgLCB0aGV5J3JlIGRlZmluaXRlbHkgd29ydGggZXhwbG9yaW5nIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxOTcsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjI6NTQ6MjIuNTY5MTI1MTU5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5NTAyNDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9odl9mbHVzaF90bGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL2h5cGVydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9oeXBlcnYuYz0xOTgxPWludCBrdm1faHZfdmNwdV9mbHVzaF90bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTIwMjMtXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjIwMjQ6c3RhdGljIHU2NCBrdm1faHZfZmx1c2hfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9odl9oY2FsbCAqaGMpXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTIwMjUte1xcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTIwNzktXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjIwODA6XFx0XFx0dHJhY2Vfa3ZtX2h2X2ZsdXNoX3RsYihmbHVzaC5wcm9jZXNzb3JfbWFzayxcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMjA4MS1cXHRcXHRcXHRcXHQgICAgICAgZmx1c2guYWRkcmVzc19zcGFjZSwgZmx1c2guZmxhZ3MsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMjEwOS1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6MjExMDpcXHRcXHR0cmFjZV9rdm1faHZfZmx1c2hfdGxiX2V4KGZsdXNoX2V4Lmh2X3ZwX3NldC52YWxpZF9iYW5rX21hc2ssXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTIxMTEtXFx0XFx0XFx0XFx0XFx0ICBmbHVzaF9leC5odl92cF9zZXQuZm9ybWF0LFxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTIxODUtXFx0XFx0XFx0ICogcnVubmluZyBvbiB0aGUgc2FtZSBMMSB2Q1BVIGZyb20gdGhlIG1vbWVudCBvZiB0aGUgcmVxdWVzdCB1bnRpbFxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoyMTg2OlxcdFxcdFxcdCAqIGt2bV9odl9mbHVzaF90bGIoKSByZXR1cm5zLiBUTEIgaXMgZnVsbHkgZmx1c2hlZCBpbiBhbGwgb3RoZXJcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMjE4Ny1cXHRcXHRcXHQgKiBjYXNlcywgZS5nLiB3aGVuIHRoZSB0YXJnZXQgTDIgdkNQVSBtaWdyYXRlcyB0byBhIGRpZmZlcmVudCBMMVxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTI1Mzg9aW50IGt2bV9odl9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTI2MzEtXFx0XFx0fVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoyNjMyOlxcdFxcdHJldCA9IGt2bV9odl9mbHVzaF90bGIodmNwdSwgXFx1MDAyNmhjKTtcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMjYzMy1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0yNjQ0LVxcdFxcdH1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6MjY0NTpcXHRcXHRyZXQgPSBrdm1faHZfZmx1c2hfdGxiKHZjcHUsIFxcdTAwMjZoYyk7XFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTI2NDYtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIyOjU0OjIyLjY0ODYzNDAzN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMDg2Mjk1ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEh5cGVyY2FsbCBJbXBsZW1lbnRhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gc2VlaW5nIGEgY29ubmVjdGlvbiBoZXJlIGJldHdlZW4gaG93IHRoZSBLVk0gaHlwZXJ2aXNvciBpbnRlcmFjdHMgd2l0aCBoYXJkd2FyZSB2aXJ0dWFsaXphdGlvbiBhbmQgaG93IGl0IG1pZ2h0IGJlIGVtdWxhdGluZyBvciBpbnRlcmFjdGluZyB3aXRoIFhlbi4gU3BlY2lmaWNhbGx5LCBga3ZtX2h2X2ZsdXNoX3RsYmAgaXMgYmVpbmcgaW52b2tlZCB0aHJvdWdoIGBrdm1faHZfaHlwZXJjYWxsYCwgd2hpY2ggbWFrZXMgc2Vuc2U7IFRMQiBmbHVzaGVzIGFyZSBmdW5kYW1lbnRhbCB0byBtYW5hZ2luZyB2aXJ0dWFsIG1lbW9yeSB3aXRoaW4gYSBoYXJkd2FyZS1hc3Npc3RlZCB2aXJ0dWFsaXphdGlvbiBlbnZpcm9ubWVudC4gVGhlbiwgb3ZlciBvbiB0aGUgWGVuIHNpZGUgb2YgdGhpbmdzLCBJJ20gbm90aW5nIHRoYXQgYGt2bV94ZW5faGNhbGxfdmNwdV9vcGAgaXMgY2FsbGVkIGZyb20gYGt2bV94ZW5faHlwZXJjYWxsYC4gVGhhdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB3YW50IHRvIGRpZyBpbnRvIHRoYXQgYGt2bV94ZW5faGNhbGxfdmNwdV9vcGAgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzIG9mIFhlbiBoeXBlcmNhbGwgaGFuZGxpbmcgaW4gdGhpcyBzcGVjaWZpYyBLVk0gY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvcGVyYXRpb25zIGFyZSBpbnZvbHZlZCBpbiBga3ZtX3hlbl9oY2FsbF92Y3B1X29wYCBhbmQgaG93IGl0IG1pZ2h0IGJlIGludGVyYWN0aW5nIHdpdGggdGhlIEtWTSBpbmZyYXN0cnVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2NDMsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjo1NDoyNS44NTcyNjY5ODlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjkzMTQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1feGVuX2hjYWxsX3ZjcHVfb3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3hlbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS94ZW4uYz0xNjAwPXN0cnVjdCBjb21wYXRfdmNwdV9zZXRfc2luZ2xlc2hvdF90aW1lciB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtMTYwNC1cXG5hcmNoL3g4Ni9rdm0veGVuLmM6MTYwNTpzdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX3ZjcHVfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGxvbmdtb2RlLCBpbnQgY21kLFxcbmFyY2gveDg2L2t2bS94ZW4uYy0xNjA2LVxcdFxcdFxcdFxcdCAgaW50IHZjcHVfaWQsIHU2NCBwYXJhbSwgdTY0ICpyKVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jPTE2NzQ9aW50IGt2bV94ZW5faHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy0xNzM2LVxcdGNhc2UgX19IWVBFUlZJU09SX3ZjcHVfb3A6XFxuYXJjaC94ODYva3ZtL3hlbi5jOjE3Mzc6XFx0XFx0aGFuZGxlZCA9IGt2bV94ZW5faGNhbGxfdmNwdV9vcCh2Y3B1LCBsb25nbW9kZSwgcGFyYW1zWzBdLCBwYXJhbXNbMV0sXFxuYXJjaC94ODYva3ZtL3hlbi5jLTE3MzgtXFx0XFx0XFx0XFx0XFx0XFx0cGFyYW1zWzJdLCBcXHUwMDI2cik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIyOjU0OjI1Ljk5NDIwNzI3NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzE4MjUyNzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgZnJhbWVkIGFzIG15IGludGVybmFsIHRob3VnaHQgcHJvY2VzczpcblxuKip2Q1BVIEluaXRpYWxpemF0aW9uIFBhdGhzOiBBIFF1aWNrIFJldmlldyoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB2Q1BVIGNyZWF0aW9uIHdpdGhpbiB0aGUgS1ZNIGZyYW1ld29yay4gSXQgbG9va3MgbGlrZSBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YCBpcyB0aGUgY29yZSBmdW5jdGlvbiDigJMgdGhlIGVudHJ5IHBvaW50IGZvciBicmluZ2luZyBhIHZpcnR1YWwgQ1BVIGludG8gZXhpc3RlbmNlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGNoZWNrIGhvdyBoeXBlcnYgaW5pdGlhbGl6ZXMgYSB2Q1BVLCBhbmQgSSBzZWUgdGhhdCBpdCBjYWxscyBga3ZtX2h2X3ZjcHVfaW5pdGAuIFNpbWlsYXJseSwgeGVuIHVzZXMgYGt2bV94ZW5faW5pdF92Y3B1YC5cblxuR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgaHlwZXJ2IGNhbGxzLCBsZXQncyBkaXZlIGludG8gYGt2bV9odl92Y3B1X2luaXRgIGFuZCBnZXQgYSBzZW5zZSBmb3IgaG93IHRoYXQgaW5pdGlhbGl6YXRpb24gaXMgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyNjcsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjo1NDoyOS4zMTI0NjIzNTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2OTQ4NzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9odl92Y3B1X2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL2h5cGVydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9oeXBlcnYuYz05NTk9c3RhdGljIHZvaWQgc3RpbWVyX2luaXQoc3RydWN0IGt2bV92Y3B1X2h2X3N0aW1lciAqc3RpbWVyLCBpbnQgdGltZXJfaW5kZXgpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtOTY2LVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzo5Njc6aW50IGt2bV9odl92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy05Njgte1xcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTEwMDU9aW50IGt2bV9odl9hY3RpdmF0ZV9zeW5pYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZG9udF96ZXJvX3N5bmljX3BhZ2VzKVxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTEwMDktXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjEwMTA6XFx0ciA9IGt2bV9odl92Y3B1X2luaXQodmNwdSk7XFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTEwMTEtXFx0aWYgKHIpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9MTc2Mz1pbnQga3ZtX2h2X3NldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zciwgdTY0IGRhdGEsIGJvb2wgaG9zdClcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0xNzY5LVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoxNzcwOlxcdGlmIChrdm1faHZfdmNwdV9pbml0KHZjcHUpKVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0xNzcxLVxcdFxcdHJldHVybiAxO1xcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTE3ODQ9aW50IGt2bV9odl9nZXRfbXNyX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IsIHU2NCAqcGRhdGEsIGJvb2wgaG9zdClcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0xNzkwLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoxNzkxOlxcdGlmIChrdm1faHZfdmNwdV9pbml0KHZjcHUpKVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0xNzkyLVxcdFxcdHJldHVybiAxO1xcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTIzNjE9aW50IGt2bV9odl9zZXRfZW5mb3JjZV9jcHVpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZW5mb3JjZSlcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0yMzY3LVxcdFxcdGlmIChlbmZvcmNlKSB7XFxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjIzNjg6XFx0XFx0XFx0cmV0ID0ga3ZtX2h2X3ZjcHVfaW5pdCh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMjM2OS1cXHRcXHRcXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjo1NDoyOS4zOTk0MTk2MDNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgyMDQ1NDkxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBLVk0gVmlydHVhbCBDUFUgSW5pdGlhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBga3ZtX2h2X3ZjcHVfaW5pdGAgaXMgdGhlIGtleSBmdW5jdGlvbiB0cmlnZ2VyZWQgd2hlbiB3ZSdyZSBkZWFsaW5nIHdpdGggTW9kZWwgU3BlY2lmaWMgUmVnaXN0ZXIgKE1TUikgYWNjZXNzIG9yIHRoZSBlbmZvcmNlbWVudCBvZiBDUFUgSWRlbnRpZmljYXRpb24gKENQVUlEKSBpbnN0cnVjdGlvbnMuIE15IGZvY3VzIGhlcmUgaXMgb24gdW5kZXJzdGFuZGluZyBob3cgdGhlIHZpcnR1YWwgQ1BVIGlzIGluaXRpYWxpemVkIHdpdGhpbiB0aGUgS1ZNIGh5cGVydmlzb3IgY29udGV4dC5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIFhlbiBoeXBlcnZpc29yIGlzIGludGVyYWN0aW5nIHdpdGggdGhlc2UgaW5pdGlhbGl6YXRpb25zOyBJJ2xsIGNoZWNrIGBrdm1feGVuX2luaXRfdmNwdWAuIEZyb20gbXkgdW5kZXJzdGFuZGluZywgdGhpcyB3aWxsIGdpdmUgbWUgdGhlIGluc2lnaHRzIEkgbmVlZCB0byBzZWUgaWYgYW55IFhlbi1zcGVjaWZpYyBjb25maWd1cmF0aW9ucyBvciBhZGFwdGF0aW9ucyBhcmUgaGFwcGVuaW5nIGF0IHRoaXMgY3JpdGljYWwgc3RhZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjUzLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjI6NTQ6MzQuMjE5ODc2ODQ1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA2Njk0NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3hlbl9pbml0X3ZjcHVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3hlbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS94ZW4uYz0yMjY1PXN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfZXZ0Y2huX3NlbmQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcGFyYW0sIHU2NCAqcilcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy0yMjk5LVxcbmFyY2gveDg2L2t2bS94ZW4uYzoyMzAwOnZvaWQga3ZtX3hlbl9pbml0X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS94ZW4uYy0yMzAxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjI6NTQ6MzQuMzIwNTU0MzEzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4MzE1NDQxMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIHF1ZXN0aW9uOlxuXG4qKlRyYWNpbmcgdGhlIEV4ZWN1dGlvbiBQYXRoIG9mIGBrdm1feGVuX2luaXRfdmNwdWAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBga3ZtX3hlbl9pbml0X3ZjcHVgIGlzIGFjdHVhbGx5IGJlaW5nIGNhbGxlZC4gVGhhdCdzIHRoZSBjb3JlIHF1ZXN0aW9uIGhlcmUuIEknbSBnb2luZyB0byBzdGFydCBieSBydW5uaW5nIGEgcXVpY2sgc2VhcmNoLCBidXQgSSBrbm93IHRoaXMgaXNuJ3QgYWx3YXlzIGZvb2xwcm9vZiwgZXNwZWNpYWxseSBpbiBhIGNvZGViYXNlIGxpa2UgWGVuL0tWTSB3aGVyZSB0aGluZ3MgY2FuIGJlIGR5bmFtaWNhbGx5IGxpbmtlZCBvciBoYXZlIGluZGlyZWN0IGNhbGxzLiBJJ20gdGhpbmtpbmcgYWJvdXQgdXNpbmcgYGdyZXBgIG9yIGBjc2NvcGVgIGluaXRpYWxseSwgcHJvYmFibHkgd2l0aGluIHRoZSByZWxldmFudCBLVk0gYW5kIFhlbiBzb3VyY2UgZGlyZWN0b3JpZXMuXG5cbkJ1dCB3YWl0LCBldmVuIGEgdGV4dCBzZWFyY2ggbWlnaHQgbm90IGdldCBtZSB0aGUgZnVsbCBwaWN0dXJlLiBJIG5lZWQgdG8gY29uc2lkZXIgdGhhdCBpdCBtaWdodCBiZSBjYWxsZWQgaW5kaXJlY3RseSB0aHJvdWdoIGEgZnVuY3Rpb24gcG9pbnRlciBvciB2aWEgc29tZSBzb3J0IG9mIG1hY3JvLiBTbywgSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGFzIEkgc2NhbiB0aGUgY29kZSwgbG9va2luZyBmb3IgYW55IGNsdWVzIGFib3V0IGhvdyB2aXJ0dWFsIENQVXMgYXJlIGluaXRpYWxpemVkIHdpdGhpbiB0aGUgWGVuL0tWTSBjb250ZXh0LiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtWTSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZXMsIGVzcGVjaWFsbHkgdGhvc2UgaW52b2x2aW5nIHRoZSB2Q1BVIGNyZWF0aW9uIGFuZCBzZXR1cC4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBmbG93IGluIGBrdm1fdmNwdV9jcmVhdGVgIG9yIHNpbWlsYXIgZnVuY3Rpb25zLCBhcyB3ZWxsIGFzIFhlbidzIGludGVyYWN0aW9uIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUsIGlmIHRoZXJlIGlzIGFuIGludGVyYWN0aW9uIGF0IHRoYXQgdGltZS5cblxuSSBhbHNvIGtub3cgdGhhdCBYZW4gYW5kIEtWTSBpbnRlcmFjdCBhdCB2YXJpb3VzIGxldmVscywgc28gSSBuZWVkIHRvIGNvbnNpZGVyIGJvdGggdGhlIEtWTSBhbmQgWGVuIHNpZGVzIG9mIHRoaW5ncy4gSSdsbCBwcm9iYWJseSBoYXZlIHRvIHJldmlldyB0aGUgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2UsIGlmIGFwcHJvcHJpYXRlIGZvciB0aGlzIGZ1bmN0aW9uLCBzaW5jZSB0aGF0J3MgYSBjb21tb24gaW50ZWdyYXRpb24gcG9pbnQuIElzIGl0IGNhbGxlZCBkdXJpbmcgZG9tYWluIGNyZWF0aW9uLCB2Q1BVIHN0YXJ0LXVwLCBvciBzb21ldGhpbmcgbW9yZSBudWFuY2VkPyBSaWdodCwgSSBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyBYZW4gaGFuZGxlcyBndWVzdCB2aXJ0dWFsaXphdGlvbi5cblxuU28sIEknbGwgc3RhcnQgd2l0aCB0aGUgb2J2aW91cyB0ZXh0dWFsIHNlYXJjaCBhbmQgdGhlbiBzdGFydCBkaWdnaW5nIGludG8gdGhlIGNhbGwgc3RhY2tzIGFuZCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZXMgdG8gc2VlIHdoZXJlIGBrdm1feGVuX2luaXRfdmNwdWAgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgdmlydHVhbCBDUFUgbWFuYWdlbWVudC4gSSBrbm93IGl0J3MgcHJvYmFibHkgaW52b2x2ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgdkNQVSdzIGxpZmVjeWNsZSwgYnV0IHBpbnBvaW50aW5nICpleGFjdGx5KiB3aGVuIGFuZCAqaG93KiBpcyB0aGUgcmVhbCBnb2FsIGhlcmUuIE9rYXksIGxldCdzIHN0YXJ0IHdpdGggdGhvc2Ugc2VhcmNoZXMuLi4gYW5kIGNyb3NzLXJlZmVyZW5jZSB3aXRoIHRoZSByZWxldmFudCBrZXJuZWwgZG9jdW1lbnRhdGlvbiBpZiBJIG5lZWQgdG8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjMyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjI6NTQ6NDAuMTUyMTAyOTcxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTc5MzY2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1feGVuX2luaXRfdmNwdVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS94ODYuYz05MjgzPWludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTM1My1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6OTM1NDpcXHRrdm1feGVuX2luaXRfdmNwdSh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTM1NS1cXHR2Y3B1X2xvYWQodmNwdSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM9MjI2NT1zdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX2V2dGNobl9zZW5kKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHBhcmFtLCB1NjQgKnIpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmMtMjI5OS1cXG5hcmNoL3g4Ni9rdm0veGVuLmM6MjMwMDp2b2lkIGt2bV94ZW5faW5pdF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0veGVuLmMtMjMwMS17XFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmg9MzE9dm9pZCBrdm1feGVuX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bSAqa3ZtKTtcXG5hcmNoL3g4Ni9rdm0veGVuLmg6MzI6dm9pZCBrdm1feGVuX2luaXRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gveDg2L2t2bS94ZW4uaC0zMy12b2lkIGt2bV94ZW5fZGVzdHJveV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veGVuLmg9MTIyPXN0YXRpYyBpbmxpbmUgdm9pZCBrdm1feGVuX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5oLTEyNS1cXG5hcmNoL3g4Ni9rdm0veGVuLmg6MTI2OnN0YXRpYyBpbmxpbmUgdm9pZCBrdm1feGVuX2luaXRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3hlbi5oLTEyNy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIyOjU0OjQwLjIzMzkwMjU1OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDM2MTY2OTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgVkNQVSBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIHRoZSBWQ1BVIGNyZWF0aW9uIHByb2Nlc3Mgd2l0aGluIHRoZSBLVk0vWGVuIGludGVncmF0aW9uLiBJdCBzZWVtcyB0aGF0IHRoZSBga3ZtX3hlbl9pbml0X3ZjcHVgIGZ1bmN0aW9uIGlzIHRoZSBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIFhlbi1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiwgYW5kIGl0J3MgY2FsbGVkIGR1cmluZyBga3ZtX2FyY2hfdmNwdV9jcmVhdGVgLiBUaGF0IG1ha2VzIHNlbnNlLlxuXG5Ob3csIHRvIGdldCBhIGJldHRlciBoaWdoLWxldmVsIHBpY3R1cmUgb2YgaG93IHRoaXMgaW5pdGlhbGl6YXRpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIEtWTSBWQ1BVIGNyZWF0aW9uIHByb2Nlc3MsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YCBmdW5jdGlvbiBpbiBgdmlydC9rdm0va3ZtX21haW4uY2AuIFRoaXMgc2hvdWxkIGdpdmUgbWUgc29tZSBjb250ZXh0IGFib3V0IGhvdyB0aGUgVkNQVSBpcyBhY3R1YWxseSByZXF1ZXN0ZWQgYW5kIGNvbmZpZ3VyZWQgYXQgdGhlIGh5cGVydmlzb3IgbGV2ZWwsIGJlZm9yZSB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGlzIGtpY2tlZCBvZmYuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBiYXNlIHRvIHVuZGVyc3RhbmQgdGhlIGVudGlyZSB3b3JrZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2NjIsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjo1NDo0My4yNzAwNzI1MDVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTQxMTcxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwidmlydC9rdm0va3ZtX21haW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jPTM5NjA9dm9pZCBrdm1fdmNwdV9vbl9zcGluKHN0cnVjdCBrdm1fdmNwdSAqbWUsIGJvb2wgeWllbGRfdG9fa2VybmVsX21vZGUpXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTM5NzAtXFxudmlydC9rdm0va3ZtX21haW4uYzozOTcxOlxcdC8qIFBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpbiBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHUoKS4gKi9cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTM5NzItXFx0c21wX3JtYigpO1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz00MTMxPXN0YXRpYyB2b2lkIGt2bV9jcmVhdGVfdmNwdV9kZWJ1Z2ZzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDE1MS0gKi9cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjQxNTI6c3RhdGljIGludCBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGlkKVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDE1My17XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTQzODg9c3RhdGljIGludCBrdm1fd2FpdF9mb3JfdmNwdV9vbmxpbmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy00NDAwLVxcdCAqIEFjcXVpcmUgYW5kIHJlbGVhc2UgdGhlIHZDUFUncyBtdXRleCB0byB3YWl0IGZvciB2Q1BVIGNyZWF0aW9uIHRvXFxudmlydC9rdm0va3ZtX21haW4uYzo0NDAxOlxcdCAqIGNvbXBsZXRlIChrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHUoKSBob2xkcyB0aGUgbXV0ZXggdW50aWwgdGhlIHZDUFVcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ0MDItXFx0ICogaXMgZnVsbHkgb25saW5lKS5cXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9NTE1Nz1zdGF0aWMgbG9uZyBrdm1fdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUxNjctXFx0Y2FzZSBLVk1fQ1JFQVRFX1ZDUFU6XFxudmlydC9rdm0va3ZtX21haW4uYzo1MTY4OlxcdFxcdHIgPSBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHUoa3ZtLCBhcmcpO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTE2OS1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjI6NTQ6NDMuNDAxNDkwMjgyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5NTEwNDc5MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTSBWQ1BVIEluaXRpYWxpemF0aW9uIGFuZCBTeW5jaHJvbml6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gcmV2aWV3aW5nIHRoaXMgcGF0Y2ggYW5kIEknbSBzZWVpbmcgYSBmZXcga2V5IGFyZWFzIG9mIGltcHJvdmVtZW50IGNvbmNlcm5pbmcgS1ZNJ3MgVkNQVSBpbml0aWFsaXphdGlvbiBhbmQgc3luY2hyb25pemF0aW9uLiBUaGUgbWFpbiB0YWtlYXdheSBoZXJlIGlzIHRoYXQgdGhlc2UgYXJlIGFsbCBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCBhcHBlYXIgdG8gYWRkcmVzcyByYWNlIGNvbmRpdGlvbnMgYW5kIHBvdGVudGlhbCBhY2Nlc3MgdmlvbGF0aW9ucyB0byB1bmluaXRpYWxpemVkIGRhdGEuIFNwZWNpZmljYWxseSwgSSdtIG5vdGluZyB0aGUgd2F5IHRoZSBwYXRjaCBoYW5kbGVzIHRoZSBgS1ZNX0NSRUFURV9WQ1BVYCBpb2N0bCBoYW5kbGVyLCBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YC4gSXQgc2VlbXMgdGhlIGRlc2lnbiBub3cgaW5jbHVkZXMgYW4gZWFybHkgc2V0dGluZyBvZiBgdmNwdS1cdTAwM2V2Y3B1X2lkeCA9IC0xYCB3aXRoaW4gdGhlIGBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHVgIGZ1bmN0aW9uIGFuZCByZXNldHRpbmcgaXQgdG8gLTEgb24gZmFpbHVyZS4gVGhpcyBzdHJpa2VzIG1lIGFzIGEgZGVsaWJlcmF0ZSBzdHJhdGVneSB0byBwcmV2ZW50IG90aGVyIHRhc2tzIGZyb20gaW5hZHZlcnRlbnRseSBhY2Nlc3NpbmcgYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgdkNQVS4gSXQgYWxzbyBsb29rcyBsaWtlIGEgY2xldmVyIHdheSB0byBlbnN1cmUgS1ZNIGNhbiByZWxpYWJseSBkZXRlY3QgYW4gdW5yZWFjaGFibGUgdkNQVS4gR29vZCwgcHJvYWN0aXZlIGRlc2lnbi5cblxuQmV5b25kIHRoYXQsIHRoZSBjaGFuZ2VzIHRvIGB0b19odl92Y3B1X3NhZmVgIGFyZSBpbnRlcmVzdGluZy4gVXNpbmcgYHNtcF9sb2FkX2FjcXVpcmVgIGFuZCB0aGUgbW9kaWZpY2F0aW9uIHRvIGBrdm1faHZfdmNwdV9pbml0YCB0byB1c2UgYHNtcF9zdG9yZV9yZWxlYXNlYCBjbGVhcmx5IGluZGljYXRlcyBhbiBlZmZvcnQgdG8gc2VyaWFsaXplIGFjY2VzcyB0byB0aGUgYHZjcHUtXHUwMDNlYXJjaC5oeXBlcnZgIGRhdGEgc3RydWN0dXJlIGFuZCBhdm9pZCB0aGF0IHJhY2UgY29uZGl0aW9uLiBJdCdzIHRoZSBzdGFuZGFyZCBtZW1vcnkgYmFycmllciBzeW5jaHJvbml6YXRpb24gcGF0dGVybiB0byBoYW5kbGUgbWVtb3J5IG9yZGVyaW5nLlxuXG5UaGVyZSdzIGFsc28gYSBtb2RpZmljYXRpb24gdG8gYGt2bV94ZW5faGNhbGxfdmNwdV9vcGAsIHdoaWNoIG5vdyBpbmNsdWRlcyBjaGVja3MgZm9yIGB2Y3B1LVx1MDAzZWFyY2gueGVuLnZjcHVfaWQgPT0gWEVOX1ZDUFVfSURfSU5WQUxJRGAgYW5kIGB2Y3B1LVx1MDAzZWFyY2gueGVuLnZjcHVfaWQgIT0gdmNwdV9pZGAuIFRoaXMgaXMgYWJvdXQgZ3VhcmRpbmcgYWdhaW5zdCB1c2luZyB0aGUgYHZjcHVfaWRgIGJlZm9yZSBpdCdzIGJlZW4gaW5pdGlhbGl6ZWQgcHJvcGVybHkuIFNvbGlkLlxuXG5GaW5hbGx5LCB0aGUgY2hhbmdlIHRvIGBrdm1faHZfZmx1c2hfdGxiYCBsb29rcyBzdHJhaWdodGZvcndhcmQuIFRoZSBzaGlmdCB0byBwYXNzaW5nIGBpc19ndWVzdF9tb2RlYCB0byBgaHZfdGxiX2ZsdXNoX2VucXVldWVgIGluc3RlYWQgb2YgZGlyZWN0bHkgY2FsbGluZyBga3ZtX2h2X2dldF90bGJfZmx1c2hfZmlmb2AgaXMgYSBtaW5vciwgeWV0IGxpa2VseSBpbXBvcnRhbnQsIHJlZmFjdG9yaW5nIHRoYXQgSSBzaG91bGQgdW5kZXJzdGFuZCBhdCBhIGxvdyBsZXZlbCB0byBtYWtlIHN1cmUgdGhlIGJlaGF2aW9yIGlzIGNvbnNpc3RlbnQuXG5cbk92ZXJhbGwsIHRoaXMgcGF0Y2ggc2VlbXMgcHJldHR5IHNvbGlkIGFuZCBzaG91bGQgaW1wcm92ZSByb2J1c3RuZXNzIGFuZCByZWxpYWJpbGl0eS4gQ29uc2lkZXJpbmcgdGhlIG5hdHVyZSBvZiB0aGVzZSBjaGFuZ2VzIOKAkyBmb2N1c2luZyBvbiBpbml0aWFsaXphdGlvbiBhbmQgZGF0YSBhY2Nlc3Mg4oCTIHRoZXNlIGFyZSBkZWZpbml0ZWx5IGFyZWFzIHJpcGUgZm9yIGZ1enppbmcuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgY29yZSBzeW1ib2xzIHRoYXQgd291bGQgbWFrZSB0aGUgYmVzdCBmdXp6IHRhcmdldHMuIEZyb20gbXkgaW5pdGlhbCBhc3Nlc3NtZW50LCBJIGFtIGdvaW5nIHRvIGZvY3VzIG9uOiBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YCwgYGt2bV9odl92Y3B1X2luaXRgLCBga3ZtX3hlbl9oY2FsbF92Y3B1X29wYCwgYGt2bV9odl9mbHVzaF90bGJgLCBhbmQgYGt2bV9odl92Y3B1X2ZsdXNoX3RsYmAuXG5cbkdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIGd1ZXN0LXRyaWdnZXJlZCBhY3Rpb25zLCB0aGUgbGF0dGVyIHRocmVlIChga3ZtX2h2X3ZjcHVfaW5pdGAsIGBrdm1feGVuX2hjYWxsX3ZjcHVfb3BgLCBhbmQgYGt2bV9odl9mbHVzaF90bGJgKSBhcmUgZXhjZWxsZW50IHRhcmdldHMgYmVjYXVzZSB0aGV5IGFyZSByZWxhdGVkIHRvIGh5cGVyY2FsbHMgYW5kIE1TUiBhY2Nlc3MuIFRoZSBWQ1BVIGNyZWF0aW9uIHBhdGgsIHJlcHJlc2VudGVkIGJ5IGBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHVgLCBpcyBtb3JlIGEgc2xvd2VyIHBhdGggYnV0IHRoZSBjb3JlIG9mIHRoZSBwYXRjaC4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZSBwYXRoIG9mIGBrdm1faHZfdmNwdV9mbHVzaF90bGJgIG9mZmVycyBtb3JlIG9wcG9ydHVuaXRpZXMgZm9yIG1vcmUgdGFyZ2V0ZWQgdGVzdGluZy4gTGV0J3MgZGlnIGRlZXBlciBpbnRvIHRoYXQgb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDUwNSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjo1NDo1My4zNTI1NDM5NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU3NTIxNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2h2X3ZjcHVfZmx1c2hfdGxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9oeXBlcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9MTk0OT1zdGF0aWMgdm9pZCBodl90bGJfZmx1c2hfZW5xdWV1ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqZW50cmllcywgaW50IGNvdW50LFxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTE5ODAtXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjE5ODE6aW50IGt2bV9odl92Y3B1X2ZsdXNoX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTE5ODIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjo1NDo1My40MjgzMDI0MzhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3NzA0NTE2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipUcmFjaW5nIHRoZSBUTEIgRmx1c2ggaW4gS1ZNKipcblxuQWxyaWdodCwgc28gdGhlIGNvcmUgcXVlc3Rpb24gYnV6emluZyBpbiBteSBoZWFkIGlzOiB3aGVyZSBleGFjdGx5IGRvZXMgYGt2bV9odl92Y3B1X2ZsdXNoX3RsYmAgZ2V0IGludm9rZWQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjYWxsIHNpdGVzIHRvIHJlYWxseSBncmFzcCBpdHMgcm9sZSBpbiBLVk0ncyBoeXBlcnZpc29yIG9wZXJhdGlvbnMsIGVzcGVjaWFsbHkgY29uY2VybmluZyBUTEIgY29oZXJlbmN5LiBLbm93aW5nIHRoZSBwb2ludHMgb2YgaW52b2NhdGlvbiB3aWxsIHRlbGwgbWUgdW5kZXIgd2hhdCBjb25kaXRpb25zIHRoZSBoeXBlcnZpc29yIGRlZW1zIGEgVExCIGZsdXNoIG5lY2Vzc2FyeS4gSXMgaXQgdHJpZ2dlcmVkIGJ5IGd1ZXN0IHdyaXRlcywgZ3Vlc3QgcGFnZSB0YWJsZSBtb2RpZmljYXRpb25zLCBvciBleHRlcm5hbCBldmVudHM/XG5cbkkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSB1cHN0cmVhbSBjYWxsZXJzIHRvIHN0YXJ0IGZvcm1pbmcgYSBjbGVhciBwaWN0dXJlLiBJIHdpbGwgdXNlIHRoZSBjb2RlIGJhc2UgYW5kIGEgZ29vZCBncmVwcGluZyBzdHJhdGVneSAob3IgcHJlZmVyYWJseSBteSBJREUpIHRvIGZpbmQgd2hlcmUgYGt2bV9odl92Y3B1X2ZsdXNoX3RsYmAgaXMgY2FsbGVkIGluIHRoZSBzb3VyY2UgdHJlZS4gS25vd2luZyB0aGUgY2FsbCBoaWVyYXJjaHkgd2lsbCBiZSBjcnVjaWFsIHRvIGFzc2Vzc2luZyBpdHMgaW1wbGljYXRpb25zIGZvciBwZXJmb3JtYW5jZSBhbmQsIGNyaXRpY2FsbHksIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3Igc3luY2hyb25pemF0aW9uIGlzc3Vlcy4gVW5kZXJzdGFuZGluZyB0aGUgc3Vycm91bmRpbmcgY29kZSBjb250ZXh0IHdpbGwgcHJvdmlkZSBoaW50cyByZWdhcmRpbmcgdGhlIGludGVudCBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiB0aGlzIHNwZWNpZmljIFRMQiBmbHVzaGluZyBvcGVyYXRpb24uXG5cbkZ1cnRoZXJtb3JlLCBJIGhhdmUgdG8ga2VlcCB0aGUgaW1wYWN0IG9uIHRoZSBndWVzdCBpbiBtaW5kLiBXaGF0IGlzIHRoZSBpbXBhY3Qgb24gcGVyZm9ybWFuY2UgZm9yIGEgZ3Vlc3QgdkNQVT8gSXMgdGhlIGNvc3Qgb2YgZmx1c2hpbmcgdGhlIFRMQiBoaWdoPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBuZXN0ZWQgdmlydHVhbGl6YXRpb24sIG9yIHNwZWNpZmljIENQVSBmZWF0dXJlcyBsaWtlIGV4dGVuZGVkIHBhZ2UgdGFibGVzIChFUFQpPyBBcmUgdGhlcmUgYW55IG9wdGltaXphdGlvbnMgaW4gcGxhY2UgdG8gbWluaW1pemUgdGhlIGZsdXNoIHNjb3BlPyBUaGVzZSBmb2xsb3ctdXAgcXVlc3Rpb25zIHdpbGwgZGVmaW5lIG15IG5leHQgcmVzZWFyY2ggcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwMjUsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjo1NDo1Ny4xMDUzNDk5MzhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1NTc1MDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9odl92Y3B1X2ZsdXNoX3RsYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9oeXBlcnYuYz0xOTQ5PXN0YXRpYyB2b2lkIGh2X3RsYl9mbHVzaF9lbnF1ZXVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0ICplbnRyaWVzLCBpbnQgY291bnQsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMTk4MC1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6MTk4MTppbnQga3ZtX2h2X3ZjcHVfZmx1c2hfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMTk4Mi17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2Lmg9Mjc1PXN0YXRpYyBpbmxpbmUgdm9pZCBrdm1faHZfbmVzdGVkX3RyYW5zdGlvbl90bGJfZmx1c2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5oLTI4Ny1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2Lmg6Mjg4OmludCBrdm1faHZfdmNwdV9mbHVzaF90bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmgtMjg5LSNlbHNlIC8qIENPTkZJR19LVk1fSFlQRVJWICovXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9ODAwMT1zdGF0aWMgaW50IHZjcHVfZW50ZXJfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTgwNjQtXFx0XFx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfSFZfVExCX0ZMVVNILCB2Y3B1KSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L2t2bS94ODYuYzo4MDY1OlxcdFxcdCAgICBrdm1faHZfdmNwdV9mbHVzaF90bGIodmNwdSkpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTgwNjYtXFx0XFx0XFx0a3ZtX3ZjcHVfZmx1c2hfdGxiX2d1ZXN0KHZjcHUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjo1NDo1Ny4yMDA5MzAzNzZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE3OTA5MjE3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBQcmlvcml0aXphdGlvbiBvZiBLVk0gRnV6emluZyBUYXJnZXRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgS1ZNIGZ1bmN0aW9ucyBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb25lcyBhcmUgcHJpbWUgY2FuZGlkYXRlcyBmb3IgZnV6emluZywgZ2l2ZW4gdGhhdCB0aGV5J3JlIGFsbCBwb3RlbnRpYWwgZW50cnkgcG9pbnRzLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgYGt2bV9odl92Y3B1X2ZsdXNoX3RsYmAuIEkga25vdyB0aGF0J3MgY2FsbGVkIHdpdGhpbiBgdmNwdV9lbnRlcl9ndWVzdGAsIGFuZCB0aGF0J3MgYSAqaG90IHBhdGgqLiBXZSBuZWVkIHRvIGJlIHZlcnkgY2FyZWZ1bCBhYm91dCBhZGRpbmcgdGhpbmdzIHRvIGBGb2N1c1N5bWJvbHNgIHRoYXQgaW1wYWN0IHBlcmZvcm1hbmNlIHRoZXJlLiBTbywgSSdtIGdvaW5nIHRvIHNldCB0aGF0IGFzaWRlIGZvciBub3cuXG5cbk5vdywgYGt2bV9odl9mbHVzaF90bGJgIGlzIGRpZmZlcmVudC4gSXQncyBjYWxsZWQgZnJvbSBga3ZtX2h2X2h5cGVyY2FsbGAsIHdoaWNoLCB3aGlsZSBmcmVxdWVudGx5IGNhbGxlZCwgaXNuJ3QgdGhlIHNhbWUga2luZCBvZiBjb3JlIGxvb3AgbGlrZSBgdmNwdV9lbnRlcl9ndWVzdGAuIEl0J3MgYSBoeXBlcmNhbGwgaGFuZGxlciwgYW5kIGh5cGVyY2FsbHMgYXJlIGV4Y2VsbGVudCBmdXp6aW5nIHRhcmdldHMgYmVjYXVzZSBvZiB0aGVpciBzcGVjaWZpYyBpbnB1dHMuIFRoaXMgbG9va3MgcHJvbWlzaW5nLlxuXG5UaGVuIHRoZXJlJ3MgYGt2bV94ZW5faGNhbGxfdmNwdV9vcGAuIEFub3RoZXIgaHlwZXJjYWxsIGhhbmRsZXIsIHNvIGl0IGFsc28gc2VlbXMgbGlrZSBhIGdyZWF0IGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gSSdsbCBtYWtlIGEgbm90ZSBvZiB0aGlzLlxuXG5ga3ZtX2h2X3ZjcHVfaW5pdGAgaXMgY2FsbGVkIG9uIHNwZWNpZmljIE1TUiBhY2Nlc3NlcywgYW5kIHRoYXQgc291bmRzIGxpa2UgYSBnb29kIHRhcmdldCBhcyB3ZWxsLiBNU1IgYWNjZXNzZXMsIGxpa2UgaHlwZXJjYWxscywgY2FuIGJlIHF1aXRlIG51YW5jZWQgYW5kIGFyZSByaXBlIGZvciBmdXp6aW5nLlxuXG5BbmQgZmluYWxseSwgYGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdWAuIEFuIGlvY3RsIGhhbmRsZXIgaXMgYW5vdGhlciBnb29kIGNob2ljZSwgaXQncyBhbiBJL08gcGF0aC4gVGhhdCBnaXZlcyB1cyBtb3JlIGFjY2VzcyBwb2ludHMgYW5kIGRpZmZlcmVudCBleGVjdXRpb24gY29udGV4dHMuXG5cbk5vdywgYmVmb3JlIEkgY29tbWl0IHRvIGFueXRoaW5nLCBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEknbGwgbmVlZCB0byB2ZXJpZnkgdGhhdCB3ZSBoYXZlIGBDT05GSUdfS1ZNYCwgYENPTkZJR19LVk1fSFlQRVJWYCwgYW5kIGBDT05GSUdfS1ZNX1hFTmAgZW5hYmxlZCwgd2hpY2ggd291bGQgY29uZmlybSB0aGVzZSBmZWF0dXJlcyBhcmUgYWN0aXZlIGFuZCBhdmFpbGFibGUgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODU3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIyOjU1OjAyLjM4MDAyNzYxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTM4NjkwODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9YRU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTkzPWNvbmZpZyBLVk1fSFlQRVJWXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA3OmNvbmZpZyBLVk1fWEVOXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjo1NTowMi41OTM5MDI1NDRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI0Mjg4NDg1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIEtWTSBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHNvIGBLVk1fSFlQRVJWYCBhbmQgYEtWTV9YRU5gIGFyZSB0aGUgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHdlJ3JlIGZvY3VzaW5nIG9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdCBJJ3ZlIGdvdCB0aGUgY29ycmVjdCBjb25maWcgaWRlbnRpZmllcnMuIE5vIG5lZWQgdG8gYmVsYWJvciB0aGUgb2J2aW91cywganVzdCBhIHF1aWNrIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aG9zZSBhcmUgaW5kZWVkIHRoZSByZWxldmFudCBjb25maWdzLlxuXG5UaGUgbmV4dCB0aGluZyBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgaXMgYWJvdXQgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBlaXRoZXIgb2YgdGhlc2UgY29uZmlndXJhdGlvbnMgcmVsaWVzIG9uIGFueSBvdGhlciBrZXJuZWwgZmVhdHVyZXMgb3IgbW9kdWxlcy4gQXJlIHRoZXkgc2VsZi1jb250YWluZWQsIG9yIGFyZSB0aGV5IGJ1aWx0IG9uIHRvcCBvZiBzb21lIHVuZGVybHlpbmcgaW5mcmFzdHJ1Y3R1cmU/IEEgZGVwZW5kZW5jeSBhbmFseXNpcyBpcyBjcnVjaWFsIGhlcmUuIFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyB3aWxsIGluZm9ybSBob3cgY2xlYW5seSB0aGV5IGludGVncmF0ZSwgYW5kIGhvdyB0byBhcHByb2FjaCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBmZWF0dXJlcy4gTGV0J3MgZGlnIGludG8gdGhhdCBhbmQgc2VlIHdoYXQgd2UgdW5jb3Zlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2NzksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjo1NTowNy44MzY3OTA3NTdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3NjI3OTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fSFlQRVJWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTE4Mj1jb25maWcgS1ZNX1NNTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTkyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5Mzpjb25maWcgS1ZNX0hZUEVSVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIyOjU1OjA3LjkzNDQyNDgxNFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDY5ODU0NzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBLY29uZmlnIGZvciBgS1ZNX0hZUEVSVmAqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIEtjb25maWcgZm9yIGBLVk1fSFlQRVJWYC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyBhbmQgaW1wbGljYXRpb25zIG9mIHRoaXMgb3B0aW9uLiBJIHdhbnQgdG8gc2VlIGhvdyBpdCdzIGludGVncmF0ZWQgd2l0aGluIHRoZSBsYXJnZXIgS1ZNIGVjb3N5c3RlbS5cblxuSSdtIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOlxuXG4qICAgKipEZXBlbmRlbmNpZXM6KiogV2hhdCBvdGhlciBLY29uZmlnIHN5bWJvbHMgZG9lcyBgS1ZNX0hZUEVSVmAgZGVwZW5kIG9uPyBBcmUgdGhlcmUgYW55IHVwc3RyZWFtL2Rvd25zdHJlYW0gZGVwZW5kZW5jaWVzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBlbmFibGluZyB0aGlzIG9wdGlvbiBpbXBsaWNpdGx5IHB1bGxzIGluIG9yIGFmZmVjdHMgb3RoZXIgZmVhdHVyZXMuIEknbGwgbmVlZCB0byBhc3Nlc3MgdGhlIHBvdGVudGlhbCBmb3IgY29uZmxpY3RzLCB0b28uXG4qICAgKipUcmlnZ2VyczoqKiBXaGF0IGRvZXMgaXQgZW5hYmxlPyBEb2VzIGl0IGJyaW5nIGluIGFueSBuZXcgZHJpdmVycywgbW9kdWxlcywgb3IgZmVhdHVyZXM/IElmIHNvLCB3aGF0IGFyZSB0aGVpciByZWxhdGlvbnNoaXBzIHRvIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGFuZCB0aGVpciBpbXBsaWNhdGlvbnMgb24gdGhlIGh5cGVydmlzb3IncyBwZXJmb3JtYW5jZSBhbmQgc2VjdXJpdHk/XG4qICAgKipEZWZhdWx0IFN0YXRlIGFuZCBQcm9tcHQ6KiogSXMgaXQgYSB0cmlzdGF0ZSwgYSBib29sPyBXaGF0IGFyZSBpdHMgZGVmYXVsdCB2YWx1ZSBhbmQgcHJvbXB0IHN0cmluZz8gRG9lcyBpdCBpbmZsdWVuY2Ugb3RoZXIgdmlydHVhbGl6YXRpb24gZmVhdHVyZXM/XG4qICAgKipIZWxwIFRleHQ6KiogVGhlIGhlbHAgdGV4dCB3aWxsIGJlIGNyaXRpY2FsIGhlcmUuIEl0IHNob3VsZCBnaXZlIG1lIGEgY29uY2lzZSBkZXNjcmlwdGlvbiBvZiB3aGF0IHRoZSBgS1ZNX0hZUEVSVmAgc3VwcG9ydCBhY3R1YWxseSBkb2VzLCBhbmQgdGhlIHNjZW5hcmlvcyB3aGVyZSBJJ2QgZW5hYmxlIGl0LiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGhpbnRzIGFib3V0IHRoZSB0YXJnZXQgaGFyZHdhcmUgYW5kIG9wZXJhdGluZyBzeXN0ZW1zLlxuKiAgICoqQXJjaGl0ZWN0dXJhbCBDb25zaWRlcmF0aW9uczoqKiBBcmUgdGhlcmUgYW55IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjaGVja3Mgb3IgZGVwZW5kZW5jaWVzPyBEb2VzIHRoaXMgb3B0aW9uIG9ubHkgbWFrZSBzZW5zZSBvbiBjZXJ0YWluIENQVSBhcmNoaXRlY3R1cmVzIG9yIHNwZWNpZmljIGhhcmR3YXJlIGZlYXR1cmVzPyBJJ2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgYW55IGAjaWZkZWZgIHN0YXRlbWVudHMgdGhhdCBtaWdodCBpbmZsdWVuY2UgaXRzIGJlaGF2aW9yLlxuXG5JIHdhbnQgdG8gcXVpY2tseSBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIHNlbGVjdGluZyBgS1ZNX0hZUEVSVmAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGl0cyByb2xlIGluIHRoZSB2aXJ0dWFsIGVudmlyb25tZW50LiBBbnkgaGlkZGVuIGdvdGNoYXMgb3Igc3VidGxlIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHZpcnR1YWxpemF0aW9uIGZlYXR1cmVzIGFyZSBleGFjdGx5IHdoYXQgSSdtIGxvb2tpbmcgZm9yLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwNTcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMjo1NToxMi4wMDQyODYyMTVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTkwOlxcdFxcbiAxOTE6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAxOTI6XFx0XFxuIDE5MzpcXHRjb25maWcgS1ZNX0hZUEVSVlxcbiAxOTQ6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXFxcIlxcbiAxOTU6XFx0XFx0ZGVwZW5kcyBvbiBLVk1fWDg2XFxuIDE5NjpcXHRcXHRkZWZhdWx0IHlcXG4gMTk3OlxcdFxcdGhlbHBcXG4gMTk4OlxcdFxcdCAgUHJvdmlkZXMgS1ZNIHN1cHBvcnQgZm9yIGVtdWxhdGluZyBNaWNyb3NvZnQgSHlwZXItVi4gIFRoaXMgYWxsb3dzIEtWTVxcbiAxOTk6XFx0XFx0ICB0byBleHBvc2UgYSBzdWJzZXQgb2YgdGhlIHBhcmF2aXJ0dWFsaXplZCBpbnRlcmZhY2VzIGRlZmluZWQgaW4gdGhlXFxuIDIwMDpcXHRcXHQgIEh5cGVyLVYgSHlwZXJ2aXNvciBUb3AtTGV2ZWwgRnVuY3Rpb25hbCBTcGVjaWZpY2F0aW9uIChUTEZTKTpcXG4gMjAxOlxcdFxcdCAgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvdmlydHVhbGl6YXRpb24vaHlwZXItdi1vbi13aW5kb3dzL3JlZmVyZW5jZS90bGZzXFxuIDIwMjpcXHRcXHQgIFRoZXNlIGludGVyZmFjZXMgYXJlIHJlcXVpcmVkIGZvciB0aGUgY29ycmVjdCBhbmQgcGVyZm9ybWFudCBmdW5jdGlvbmluZ1xcbiAyMDM6XFx0XFx0ICBvZiBXaW5kb3dzIGFuZCBIeXBlci1WIGd1ZXN0cyBvbiBLVk0uXFxuIDIwNDpcXHRcXG4gMjA1OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgXFxcIllcXFwiLlxcbiAyMDY6XFx0XFxuIDIwNzpcXHRjb25maWcgS1ZNX1hFTlxcbiAyMDg6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcXFwiXFxuIDIwOTpcXHRcXHRkZXBlbmRzIG9uIEtWTV9YODZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjI6NTU6MTIuMDA0Mzg0MzY1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMDExNDcyNjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEtWTSBQYXRjaCBGdXp6aW5nIFRhcmdldHMqKlxuXG5Pa2F5LCBzbyBJJ20gaG9taW5nIGluIG9uIHRoZSBiZXN0IGNvbmZpZ3VyYXRpb25zIGZvciBmdXp6aW5nIHRoaXMgS1ZNIHBhdGNoLiAgYEtWTV9IWVBFUlZgIGFuZCBgS1ZNX1hFTmAgYXJlIGRlZmluaXRlbHkgdGhlIGNvcmUgY29uZmlndXJhdGlvbnMgdG8gdGFyZ2V0LiAgSSd2ZSBkb3VibGUtY2hlY2tlZCB0aGF0IGBLVk1fWDg2YCBpc24ndCBleHBsaWNpdGx5IG5lY2Vzc2FyeSwgYXMgYEtWTV9IWVBFUlZgIGhhbmRsZXMgdGhlIGRlcGVuZGVuY3kuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBmb2N1cyBzeW1ib2xzLiBJJ3ZlIGNvbXBpbGVkIGEgbGlzdDpcbi0gICBga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1YFxuLSAgIGBrdm1faHZfdmNwdV9pbml0YFxuLSAgIGBrdm1feGVuX2hjYWxsX3ZjcHVfb3BgXG4tICAgYGt2bV9odl9mbHVzaF90bGJgXG5cbkkgbWV0aWN1bG91c2x5IGNoZWNrZWQgdGhlIHN0YXRpYyBuYXR1cmUgb2YgZWFjaC4gYGt2bV9odl9mbHVzaF90bGJgLCBga3ZtX3hlbl9oY2FsbF92Y3B1X29wYCwgYW5kIGBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHVgIGFyZSBpbmRlZWQgc3RhdGljLCBhbmQgdGhhdCdzIHBlcmZlY3RseSBmaW5lOyBzeXprYWxsZXIgY2FuIGhhbmRsZSB0aGVtLiAgYGt2bV9odl92Y3B1X2luaXRgIGlzIG5vdCBzdGF0aWMuICBUaGVzZSBmdW5jdGlvbnMgYXJlIGFsbCBrZXkgYmVjYXVzZSB0aGV5IHJlcHJlc2VudCB0aGUgY29yZSBvZiB0aGUgcGF0Y2gncyBjaGFuZ2VzOiB2Q1BVIGNyZWF0aW9uLCBIeXBlci1WIGVtdWxhdGlvbiwgYW5kIFhlbiBlbXVsYXRpb24uXG5cbkkgcmVhbGl6ZWQgdGhpcyBwYXRjaCBhbHNvIHRvdWNoZXMgYHN5bmljX2dldGAsIGBzdGltZXJfbWFya19wZW5kaW5nYCwgYW5kIGBzdGltZXJfY2xlYW51cGAuIFRoZXNlIGFyZSBzbWFsbGVyLCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gSSdsbCBtYWtlIHN1cmUgdG8gbm90ZSB0aGF0IHRob3NlIGFyZSBzbWFsbCBoZWxwZXIgZnVuY3Rpb25zLlxuXG5UaGUgcmVhc29uaW5nIGZvciBmdXp6aW5nIGlzIHNvdW5kLiBUaGlzIHBhdGNoIHNwZWNpZmljYWxseSBhZGRyZXNzZXMgcmFjZSBjb25kaXRpb25zIGFuZCB1bmluaXRpYWxpemVkIGFjY2Vzc2VzIHdpdGhpbiBLVk0ncyB2Q1BVIGNyZWF0aW9uLCBoeXBlcmNhbGwgaGFuZGxlcnMgZm9yIGJvdGggSHlwZXItViBhbmQgWGVuIGVtdWxhdGlvbi4gVGhlIGNoYW5nZXMgaW52b2x2ZSBtb2RpZnlpbmcgdkNQVSBpbml0aWFsaXphdGlvbiBhbmQgaHlwZXJjYWxsIGxvZ2ljLCBhbGwgYXJlYXMgdGhhdCBhcmUgcG90ZW50aWFsbHkgcmVhY2hhYmxlIGZyb20gZ3Vlc3QgdXNlcnNwYWNlIGFuZCBzdXNjZXB0aWJsZSB0byBjb25jdXJyZW50IGV4ZWN1dGlvbi4gRnV6emluZyB0aGVzZSBjb21wb25lbnRzIGlzIGNydWNpYWwgdG8gY29uZmlybSB0aGUgZml4IGlzIGVmZmVjdGl2ZSwgd2l0aG91dCBpbnRyb2R1Y2luZyByZWdyZXNzaW9ucy5cblxuVGhlcmVmb3JlLCB0aGUgY3JpdGljYWwgY29uZmlndXJhdGlvbnMgYXJlIGBLVk1fSFlQRVJWYCBhbmQgYEtWTV9YRU5gLiBUaGUgaWRlbnRpZmllZCBmb2N1cyBzeW1ib2xzIHByb3ZpZGUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB0ZXN0aW5nIGFuZCBpZGVudGlmeWluZyBmdXJ0aGVyIGZvY3VzIHN5bWJvbHMuIEknbSByZWFkeSB0byBzZXQgdGhlc2UgcmVzdWx0cyBhbmQgcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg4NTEsIk91dHB1dFRva2VucyI6MTc2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjI6NTU6MjIuMDE1ODU4OTEyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2MDM4NjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1fSFlQRVJWXCIsXG4gICAgXCJLVk1fWEVOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1XCIsXG4gICAgXCJrdm1faHZfdmNwdV9pbml0XCIsXG4gICAgXCJrdm1feGVuX2hjYWxsX3ZjcHVfb3BcIixcbiAgICBcImt2bV9odl9mbHVzaF90bGJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyByYWNlIGNvbmRpdGlvbnMgYW5kIHVuaW5pdGlhbGl6ZWQgYWNjZXNzZXMgaW4gS1ZNJ3MgdkNQVSBjcmVhdGlvbiwgSHlwZXItViBlbXVsYXRpb24sIGFuZCBYZW4gZW11bGF0aW9uLiBJdCBtb2RpZmllcyBjb3JlIHZDUFUgaW5pdGlhbGl6YXRpb24gbG9naWMgYW5kIGh5cGVyY2FsbCBoYW5kbGVycywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIGd1ZXN0IHVzZXJzcGFjZSBhbmQgY2FuIGJlIHRyaWdnZXJlZCBjb25jdXJyZW50bHkuIEZ1enppbmcgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGVzZSBmaXhlcyBjb3JyZWN0bHkgaGFuZGxlIGNvbmN1cnJlbnQgdkNQVSBjcmVhdGlvbiBhbmQgaHlwZXJjYWxscyB3aXRob3V0IGludHJvZHVjaW5nIG5ldyByYWNlcyBvciByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1fSFlQRVJWXCIsXG4gICAgXCJLVk1fWEVOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1XCIsXG4gICAgXCJrdm1faHZfdmNwdV9pbml0XCIsXG4gICAgXCJrdm1feGVuX2hjYWxsX3ZjcHVfb3BcIixcbiAgICBcImt2bV9odl9mbHVzaF90bGJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyByYWNlIGNvbmRpdGlvbnMgYW5kIHVuaW5pdGlhbGl6ZWQgYWNjZXNzZXMgaW4gS1ZNJ3MgdkNQVSBjcmVhdGlvbiwgSHlwZXItViBlbXVsYXRpb24sIGFuZCBYZW4gZW11bGF0aW9uLiBJdCBtb2RpZmllcyBjb3JlIHZDUFUgaW5pdGlhbGl6YXRpb24gbG9naWMgYW5kIGh5cGVyY2FsbCBoYW5kbGVycywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIGd1ZXN0IHVzZXJzcGFjZSBhbmQgY2FuIGJlIHRyaWdnZXJlZCBjb25jdXJyZW50bHkuIEZ1enppbmcgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGVzZSBmaXhlcyBjb3JyZWN0bHkgaGFuZGxlIGNvbmN1cnJlbnQgdkNQVSBjcmVhdGlvbiBhbmQgaHlwZXJjYWxscyB3aXRob3V0IGludHJvZHVjaW5nIG5ldyByYWNlcyBvciByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkqp4n[1] Phase: Succeeded StartedAt: 2026-06-25 22:55:34 +0000 UTC FinishedAt: 2026-06-25 22:55:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqp4n[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-25 22:55:34 +0000 UTC FinishedAt: 2026-06-25 22:55:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqp4n[2] Phase: Succeeded StartedAt: 2026-06-25 22:55:34 +0000 UTC FinishedAt: 2026-06-26 02:46:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqp4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"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_vm_ioctl_create_vcpu","kvm_hv_vcpu_init","kvm_xen_hcall_vcpu_op","kvm_hv_flush_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"series_id":"6864cbe8-ce00-47d1-b4b1-abc7d1528d4e","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:{"findings":["60fac5d8-1296-4ec7-a8e3-40f561d007e9"]},track:KASAN) Phase: Failed StartedAt: 2026-06-25 22:55:34 +0000 UTC FinishedAt: 2026-06-26 02:46:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"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_vm_ioctl_create_vcpu","kvm_hv_vcpu_init","kvm_xen_hcall_vcpu_op","kvm_hv_flush_tlb"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"series_id":"6864cbe8-ce00-47d1-b4b1-abc7d1528d4e","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"retest":{"findings":["60fac5d8-1296-4ec7-a8e3-40f561d007e9"]},"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowkqp4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"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_vm_ioctl_create_vcpu","kvm_hv_vcpu_init","kvm_xen_hcall_vcpu_op","kvm_hv_flush_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"series_id":"6864cbe8-ce00-47d1-b4b1-abc7d1528d4e","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:{"findings":["60fac5d8-1296-4ec7-a8e3-40f561d007e9"]},track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-25 22:55:34 +0000 UTC FinishedAt: 2026-06-25 22:55:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqp4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"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_vm_ioctl_create_vcpu","kvm_hv_vcpu_init","kvm_xen_hcall_vcpu_op","kvm_hv_flush_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"series_id":"6864cbe8-ce00-47d1-b4b1-abc7d1528d4e","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:{"findings":["60fac5d8-1296-4ec7-a8e3-40f561d007e9"]},track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-25 22:55:34 +0000 UTC FinishedAt: 2026-06-25 22:55:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"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-workflowkqp4n/series-workflowkqp4n-convert-artifact-615612061/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkqp4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"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_vm_ioctl_create_vcpu","kvm_hv_vcpu_init","kvm_xen_hcall_vcpu_op","kvm_hv_flush_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"series_id":"6864cbe8-ce00-47d1-b4b1-abc7d1528d4e","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:{"findings":["60fac5d8-1296-4ec7-a8e3-40f561d007e9"]},track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-25 22:55:44 +0000 UTC FinishedAt: 2026-06-25 23:17:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqp4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"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_vm_ioctl_create_vcpu","kvm_hv_vcpu_init","kvm_xen_hcall_vcpu_op","kvm_hv_flush_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"series_id":"6864cbe8-ce00-47d1-b4b1-abc7d1528d4e","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:{"findings":["60fac5d8-1296-4ec7-a8e3-40f561d007e9"]},track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-25 22:55:44 +0000 UTC FinishedAt: 2026-06-25 23:17:45 +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:*b85d4557-dae5-422a-b689-efb90ec443ca,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-workflowkqp4n/series-workflowkqp4n-convert-artifact-615612061/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": "b980af20-6927-422e-be7d-e41324846118", "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-workflowkqp4n/series-workflowkqp4n-build-action-627437523/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkqp4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"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_vm_ioctl_create_vcpu","kvm_hv_vcpu_init","kvm_xen_hcall_vcpu_op","kvm_hv_flush_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"series_id":"6864cbe8-ce00-47d1-b4b1-abc7d1528d4e","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:{"findings":["60fac5d8-1296-4ec7-a8e3-40f561d007e9"]},track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-25 22:55:44 +0000 UTC FinishedAt: 2026-06-25 23:17:35 +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:*b85d4557-dae5-422a-b689-efb90ec443ca,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-workflowkqp4n/series-workflowkqp4n-convert-artifact-615612061/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": "b980af20-6927-422e-be7d-e41324846118", "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-workflowkqp4n/series-workflowkqp4n-build-action-627437523/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkqp4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"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_vm_ioctl_create_vcpu","kvm_hv_vcpu_init","kvm_xen_hcall_vcpu_op","kvm_hv_flush_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"series_id":"6864cbe8-ce00-47d1-b4b1-abc7d1528d4e","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:{"findings":["60fac5d8-1296-4ec7-a8e3-40f561d007e9"]},track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-25 23:17:45 +0000 UTC FinishedAt: 2026-06-25 23:17:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqp4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"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_vm_ioctl_create_vcpu","kvm_hv_vcpu_init","kvm_xen_hcall_vcpu_op","kvm_hv_flush_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"series_id":"6864cbe8-ce00-47d1-b4b1-abc7d1528d4e","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:{"findings":["60fac5d8-1296-4ec7-a8e3-40f561d007e9"]},track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-25 23:17:45 +0000 UTC FinishedAt: 2026-06-25 23:17:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqp4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"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_vm_ioctl_create_vcpu","kvm_hv_vcpu_init","kvm_xen_hcall_vcpu_op","kvm_hv_flush_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"series_id":"6864cbe8-ce00-47d1-b4b1-abc7d1528d4e","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:{"findings":["60fac5d8-1296-4ec7-a8e3-40f561d007e9"]},track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-25 23:17:45 +0000 UTC FinishedAt: 2026-06-25 23:17:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqp4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"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_vm_ioctl_create_vcpu","kvm_hv_vcpu_init","kvm_xen_hcall_vcpu_op","kvm_hv_flush_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"series_id":"6864cbe8-ce00-47d1-b4b1-abc7d1528d4e","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:{"findings":["60fac5d8-1296-4ec7-a8e3-40f561d007e9"]},track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-25 23:17:45 +0000 UTC FinishedAt: 2026-06-25 23:17:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"series_id":"6864cbe8-ce00-47d1-b4b1-abc7d1528d4e","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-workflowkqp4n/series-workflowkqp4n-convert-artifact-3962909560/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkqp4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"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_vm_ioctl_create_vcpu","kvm_hv_vcpu_init","kvm_xen_hcall_vcpu_op","kvm_hv_flush_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"series_id":"6864cbe8-ce00-47d1-b4b1-abc7d1528d4e","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:{"findings":["60fac5d8-1296-4ec7-a8e3-40f561d007e9"]},track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-25 23:17:55 +0000 UTC FinishedAt: 2026-06-25 23:20:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqp4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"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_vm_ioctl_create_vcpu","kvm_hv_vcpu_init","kvm_xen_hcall_vcpu_op","kvm_hv_flush_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"series_id":"6864cbe8-ce00-47d1-b4b1-abc7d1528d4e","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:{"findings":["60fac5d8-1296-4ec7-a8e3-40f561d007e9"]},track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-25 23:17:55 +0000 UTC FinishedAt: 2026-06-25 23:20:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b980af20-6927-422e-be7d-e41324846118,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-workflowkqp4n/series-workflowkqp4n-build-action-627437523/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-workflowkqp4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"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_vm_ioctl_create_vcpu","kvm_hv_vcpu_init","kvm_xen_hcall_vcpu_op","kvm_hv_flush_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"series_id":"6864cbe8-ce00-47d1-b4b1-abc7d1528d4e","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:{"findings":["60fac5d8-1296-4ec7-a8e3-40f561d007e9"]},track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-25 23:20:10 +0000 UTC FinishedAt: 2026-06-25 23:20:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqp4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"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_vm_ioctl_create_vcpu","kvm_hv_vcpu_init","kvm_xen_hcall_vcpu_op","kvm_hv_flush_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"series_id":"6864cbe8-ce00-47d1-b4b1-abc7d1528d4e","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:{"findings":["60fac5d8-1296-4ec7-a8e3-40f561d007e9"]},track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-25 23:20:10 +0000 UTC FinishedAt: 2026-06-25 23:20:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqp4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"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_vm_ioctl_create_vcpu","kvm_hv_vcpu_init","kvm_xen_hcall_vcpu_op","kvm_hv_flush_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"series_id":"6864cbe8-ce00-47d1-b4b1-abc7d1528d4e","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:{"findings":["60fac5d8-1296-4ec7-a8e3-40f561d007e9"]},track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-25 23:20:10 +0000 UTC FinishedAt: 2026-06-25 23:41:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqp4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"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_vm_ioctl_create_vcpu","kvm_hv_vcpu_init","kvm_xen_hcall_vcpu_op","kvm_hv_flush_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"series_id":"6864cbe8-ce00-47d1-b4b1-abc7d1528d4e","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:{"findings":["60fac5d8-1296-4ec7-a8e3-40f561d007e9"]},track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-25 23:20:10 +0000 UTC FinishedAt: 2026-06-25 23:41:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b85d4557-dae5-422a-b689-efb90ec443ca,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-workflowkqp4n/series-workflowkqp4n-convert-artifact-3962909560/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": "0627391d-c4d6-4820-99f0-31a8b51ba783", "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-workflowkqp4n/series-workflowkqp4n-build-action-1977538660/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkqp4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"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_vm_ioctl_create_vcpu","kvm_hv_vcpu_init","kvm_xen_hcall_vcpu_op","kvm_hv_flush_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"series_id":"6864cbe8-ce00-47d1-b4b1-abc7d1528d4e","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:{"findings":["60fac5d8-1296-4ec7-a8e3-40f561d007e9"]},track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-25 23:20:10 +0000 UTC FinishedAt: 2026-06-25 23:41:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b85d4557-dae5-422a-b689-efb90ec443ca,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-workflowkqp4n/series-workflowkqp4n-convert-artifact-3962909560/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": "0627391d-c4d6-4820-99f0-31a8b51ba783", "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-workflowkqp4n/series-workflowkqp4n-build-action-1977538660/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkqp4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"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_vm_ioctl_create_vcpu","kvm_hv_vcpu_init","kvm_xen_hcall_vcpu_op","kvm_hv_flush_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"series_id":"6864cbe8-ce00-47d1-b4b1-abc7d1528d4e","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:{"findings":["60fac5d8-1296-4ec7-a8e3-40f561d007e9"]},track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-25 23:41:55 +0000 UTC FinishedAt: 2026-06-25 23:41:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqp4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"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_vm_ioctl_create_vcpu","kvm_hv_vcpu_init","kvm_xen_hcall_vcpu_op","kvm_hv_flush_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"series_id":"6864cbe8-ce00-47d1-b4b1-abc7d1528d4e","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:{"findings":["60fac5d8-1296-4ec7-a8e3-40f561d007e9"]},track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-25 23:41:55 +0000 UTC FinishedAt: 2026-06-25 23:41:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqp4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"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_vm_ioctl_create_vcpu","kvm_hv_vcpu_init","kvm_xen_hcall_vcpu_op","kvm_hv_flush_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"series_id":"6864cbe8-ce00-47d1-b4b1-abc7d1528d4e","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:{"findings":["60fac5d8-1296-4ec7-a8e3-40f561d007e9"]},track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-25 23:41:55 +0000 UTC FinishedAt: 2026-06-25 23:44:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqp4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"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_vm_ioctl_create_vcpu","kvm_hv_vcpu_init","kvm_xen_hcall_vcpu_op","kvm_hv_flush_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"series_id":"6864cbe8-ce00-47d1-b4b1-abc7d1528d4e","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:{"findings":["60fac5d8-1296-4ec7-a8e3-40f561d007e9"]},track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-25 23:41:55 +0000 UTC FinishedAt: 2026-06-25 23:43:59 +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:*0627391d-c4d6-4820-99f0-31a8b51ba783,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-workflowkqp4n/series-workflowkqp4n-build-action-1977538660/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-workflowkqp4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"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_vm_ioctl_create_vcpu","kvm_hv_vcpu_init","kvm_xen_hcall_vcpu_op","kvm_hv_flush_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"series_id":"6864cbe8-ce00-47d1-b4b1-abc7d1528d4e","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:{"findings":["60fac5d8-1296-4ec7-a8e3-40f561d007e9"]},track:KASAN)[10] Phase: Failed StartedAt: 2026-06-25 23:44:09 +0000 UTC FinishedAt: 2026-06-26 02:46:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqp4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"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_vm_ioctl_create_vcpu","kvm_hv_vcpu_init","kvm_xen_hcall_vcpu_op","kvm_hv_flush_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"series_id":"6864cbe8-ce00-47d1-b4b1-abc7d1528d4e","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:{"findings":["60fac5d8-1296-4ec7-a8e3-40f561d007e9"]},track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-25 23:44:09 +0000 UTC FinishedAt: 2026-06-26 02:46:54 +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_vm_ioctl_create_vcpu","kvm_hv_vcpu_init","kvm_xen_hcall_vcpu_op","kvm_hv_flush_tlb"],"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:*b980af20-6927-422e-be7d-e41324846118,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0627391d-c4d6-4820-99f0-31a8b51ba783,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-workflowkqp4n/series-workflowkqp4n-build-action-627437523/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-workflowkqp4n/series-workflowkqp4n-build-action-1977538660/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowkqp4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"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_vm_ioctl_create_vcpu","kvm_hv_vcpu_init","kvm_xen_hcall_vcpu_op","kvm_hv_flush_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"series_id":"6864cbe8-ce00-47d1-b4b1-abc7d1528d4e","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:{"findings":["60fac5d8-1296-4ec7-a8e3-40f561d007e9"]},track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-25 23:44:09 +0000 UTC FinishedAt: 2026-06-25 23:44:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqp4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"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_vm_ioctl_create_vcpu","kvm_hv_vcpu_init","kvm_xen_hcall_vcpu_op","kvm_hv_flush_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"series_id":"6864cbe8-ce00-47d1-b4b1-abc7d1528d4e","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:{"findings":["60fac5d8-1296-4ec7-a8e3-40f561d007e9"]},track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-25 23:44:09 +0000 UTC FinishedAt: 2026-06-25 23:44:14 +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_vm_ioctl_create_vcpu","kvm_hv_vcpu_init","kvm_xen_hcall_vcpu_op","kvm_hv_flush_tlb"],"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-workflowkqp4n/series-workflowkqp4n-convert-artifact-93114065/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkqp4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"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_vm_ioctl_create_vcpu","kvm_hv_vcpu_init","kvm_xen_hcall_vcpu_op","kvm_hv_flush_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"series_id":"6864cbe8-ce00-47d1-b4b1-abc7d1528d4e","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:{"findings":["60fac5d8-1296-4ec7-a8e3-40f561d007e9"]},track:KASAN)[10].run-retest Phase: Failed StartedAt: 2026-06-25 23:44:09 +0000 UTC FinishedAt: 2026-06-25 23:45:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:retest-data,Default:nil,Value:*{"findings":["60fac5d8-1296-4ec7-a8e3-40f561d007e9"]},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*{{=steps['base-build'].outputs.parameters.result ? jsonpath(steps['base-build'].outputs.parameters.result, '$.build_id') : ''}},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0627391d-c4d6-4820-99f0-31a8b51ba783,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,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-workflowkqp4n/series-workflowkqp4n-build-action-627437523/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-workflowkqp4n/series-workflowkqp4n-build-action-1977538660/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowkqp4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"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_vm_ioctl_create_vcpu","kvm_hv_vcpu_init","kvm_xen_hcall_vcpu_op","kvm_hv_flush_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"series_id":"6864cbe8-ce00-47d1-b4b1-abc7d1528d4e","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:{"findings":["60fac5d8-1296-4ec7-a8e3-40f561d007e9"]},track:KASAN)[10].run-retest[0] Phase: Succeeded StartedAt: 2026-06-25 23:44:09 +0000 UTC FinishedAt: 2026-06-25 23:44:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqp4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"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_vm_ioctl_create_vcpu","kvm_hv_vcpu_init","kvm_xen_hcall_vcpu_op","kvm_hv_flush_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"series_id":"6864cbe8-ce00-47d1-b4b1-abc7d1528d4e","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:{"findings":["60fac5d8-1296-4ec7-a8e3-40f561d007e9"]},track:KASAN)[10].run-retest[0].save-retest-task Phase: Succeeded StartedAt: 2026-06-25 23:44:09 +0000 UTC FinishedAt: 2026-06-25 23:44:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"findings":["60fac5d8-1296-4ec7-a8e3-40f561d007e9"]},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-workflowkqp4n/series-workflowkqp4n-convert-artifact-967659758/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkqp4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"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_vm_ioctl_create_vcpu","kvm_hv_vcpu_init","kvm_xen_hcall_vcpu_op","kvm_hv_flush_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"series_id":"6864cbe8-ce00-47d1-b4b1-abc7d1528d4e","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:{"findings":["60fac5d8-1296-4ec7-a8e3-40f561d007e9"]},track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-25 23:44:09 +0000 UTC FinishedAt: 2026-06-25 23:44:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqp4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"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_vm_ioctl_create_vcpu","kvm_hv_vcpu_init","kvm_xen_hcall_vcpu_op","kvm_hv_flush_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"series_id":"6864cbe8-ce00-47d1-b4b1-abc7d1528d4e","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:{"findings":["60fac5d8-1296-4ec7-a8e3-40f561d007e9"]},track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-25 23:44:09 +0000 UTC FinishedAt: 2026-06-25 23:44:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqp4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"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_vm_ioctl_create_vcpu","kvm_hv_vcpu_init","kvm_xen_hcall_vcpu_op","kvm_hv_flush_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"series_id":"6864cbe8-ce00-47d1-b4b1-abc7d1528d4e","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:{"findings":["60fac5d8-1296-4ec7-a8e3-40f561d007e9"]},track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-25 23:44:19 +0000 UTC FinishedAt: 2026-06-26 02:46:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqp4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"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_vm_ioctl_create_vcpu","kvm_hv_vcpu_init","kvm_xen_hcall_vcpu_op","kvm_hv_flush_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"series_id":"6864cbe8-ce00-47d1-b4b1-abc7d1528d4e","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:{"findings":["60fac5d8-1296-4ec7-a8e3-40f561d007e9"]},track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-25 23:44:19 +0000 UTC FinishedAt: 2026-06-26 02:46:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b980af20-6927-422e-be7d-e41324846118,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0627391d-c4d6-4820-99f0-31a8b51ba783,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-workflowkqp4n/series-workflowkqp4n-build-action-627437523/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-workflowkqp4n/series-workflowkqp4n-build-action-1977538660/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-workflowkqp4n/series-workflowkqp4n-convert-artifact-93114065/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,} --------- Name: series-workflowkqp4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"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_vm_ioctl_create_vcpu","kvm_hv_vcpu_init","kvm_xen_hcall_vcpu_op","kvm_hv_flush_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"series_id":"6864cbe8-ce00-47d1-b4b1-abc7d1528d4e","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:{"findings":["60fac5d8-1296-4ec7-a8e3-40f561d007e9"]},track:KASAN)[10].run-retest[1] Phase: Failed StartedAt: 2026-06-25 23:44:19 +0000 UTC FinishedAt: 2026-06-25 23:45:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqp4n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"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_vm_ioctl_create_vcpu","kvm_hv_vcpu_init","kvm_xen_hcall_vcpu_op","kvm_hv_flush_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_HYPERV","KVM_XEN"],"series_id":"6864cbe8-ce00-47d1-b4b1-abc7d1528d4e","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:{"findings":["60fac5d8-1296-4ec7-a8e3-40f561d007e9"]},track:KASAN)[10].run-retest[1].retest Phase: Failed StartedAt: 2026-06-25 23:44:19 +0000 UTC FinishedAt: 2026-06-25 23:45:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*{{=steps['base-build'].outputs.parameters.result ? jsonpath(steps['base-build'].outputs.parameters.result, '$.build_id') : ''}},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0627391d-c4d6-4820-99f0-31a8b51ba783,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Previous reproducers,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-workflowkqp4n/series-workflowkqp4n-build-action-627437523/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-workflowkqp4n/series-workflowkqp4n-build-action-1977538660/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:retest-task,Path:/data/retest.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-workflowkqp4n/series-workflowkqp4n-convert-artifact-967659758/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:*1,}