Name: series-workflowlfxvs Phase: Succeeded StartedAt: 2026-07-30 23:50:29 +0000 UTC FinishedAt: 2026-07-31 00:47:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfxvs[0] Phase: Succeeded StartedAt: 2026-07-30 23:50:29 +0000 UTC FinishedAt: 2026-07-31 00:08:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfxvs[0].run-triage Phase: Succeeded StartedAt: 2026-07-30 23:50:29 +0000 UTC FinishedAt: 2026-07-31 00:08:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "00000d23-aaa3-48bb-8b1d-dd1f5f9d811c" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_arch_vcpu_create", "kvm_arch_commit_memory_region", "kvm_s390_pv_create_cpu", "kvm_s390_pv_destroy_cpu", "kvm_s390_faultin_gfn", "kvm_s390_inject_vcpu", "kvm_s390_handle_b2", "kvm_s390_handle_b9", "kvm_arch_vm_ioctl" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAwOjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfY3JlYXRlJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3B2X2NyZWF0ZV9jcHUmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfcHZfZGVzdHJveV9jcHUmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfZmF1bHRpbl9nZm4mIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfaW5qZWN0X3ZjcHUmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfaGFuZGxlX2IyJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2hhbmRsZV9iOSYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF92bV9pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBzMzkwIEtWTSBpbXBsZW1lbnRhdGlvbiwgaW5jbHVkaW5nIGZpeGluZyBtZW1vcnkgbGVha3MgZHVyaW5nIHZDUFUgY3JlYXRpb24vZGVzdHJ1Y3Rpb24sIG1vZGlmeWluZyByZWZlcmVuY2UgYml0IHJlc2V0dGluZyBmb3Igc3RvcmFnZSBrZXlzLCBhZGp1c3Rpbmcgc2lnbmFsIGhhbmRsaW5nIGR1cmluZyBwYWdlIGZhdWx0cywgYW5kIGltcHJvdmluZyBsb2NraW5nIGR1cmluZyBtZW1vcnkgcmVnaW9uIGNvbW1pdHMgYW5kIG1pZ3JhdGlvbi4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIHZpcnR1YWxpemF0aW9uIGZlYXR1cmVzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDowNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGZiZjVjZDViOWEyNDAzNTk3NTY4YzhkZWZiYWUyOWU3ODdmMjQ1ODhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzMSAwMDowNjowNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5pbmRleCBlYWEzNGM1YmQzYzExLi5lZGY3NWI2YWQyMGNlIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtNDQwLDYgJiM0Mzs0NDAsNyBAQCBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7XG4gXHRib29sIHNrZXlfZW5hYmxlZDtcbiBcdC8qIEluZGljYXRvciBpZiB0aGUgYWNjZXNzIHJlZ2lzdGVycyBoYXZlIGJlZW4gbG9hZGVkIGZyb20gZ3Vlc3QgKi9cbiBcdGJvb2wgYWNyc19sb2FkZWQ7XG4mIzQzO1x0Ym9vbCBpbml0aWFsaXplZDtcbiBcdHN0cnVjdCBrdm1fczM5MF9wdl92Y3B1IHB2O1xuIFx0dW5pb24gZGlhZzMxOF9pbmZvIGRpYWczMThfaW5mbztcbiBcdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jO1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZGF0LmMgYi9hcmNoL3MzOTAva3ZtL2RhdC5jXG5pbmRleCBlZDQyNTlkMTc2Mjk1Li4zZjJkNmU4OTAyZDc2IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9kYXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9kYXQuY1xuQEAgLTc1NSwxMyAmIzQzOzc1NSwxNSBAQCBpbnQgZGF0X2NvbmRfc2V0X3N0b3JhZ2Vfa2V5KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1tYywgdW5pb24gYXNjZSBhc2NlLCBnZlxuIFx0cmV0dXJuIHJjO1xuIH1cbiBcbi1pbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4pXG4mIzQzO2ludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbiwgdW5pb24gc2tleSAqc2tleSlcbiB7XG4gXHR1bmlvbiBwZ3N0ZSBwZ3N0ZSwgb2xkO1xuIFx0dW5pb24gY3JzdGUgKmNyc3RlcDtcbiBcdHVuaW9uIHB0ZSAqcHRlcDtcbiBcdGludCByYztcbiBcbiYjNDM7XHRza2V5LVx1MDAzZXNrZXkgPSAwO1xuJiM0MztcbiBcdHJjID0gZGF0X2VudHJ5X3dhbGsoTlVMTCwgZ2ZuLCBhc2NlLCBEQVRfV0FMS19BTlksIFRBQkxFX1RZUEVfUEFHRV9UQUJMRSwgXHUwMDI2Y3JzdGVwLCBcdTAwMjZwdGVwKTtcbiBcdGlmIChyYylcbiBcdFx0cmV0dXJuIHJjO1xuQEAgLTc3MSwyMSAmIzQzOzc3MywyMyBAQCBpbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4pXG4gXG4gXHRcdGlmICghY3JzdGUuaC5mYyB8fCAhY3JzdGUucy5mYzEucHIpXG4gXHRcdFx0cmV0dXJuIDA7XG4tXHRcdHJldHVybiBwYWdlX3Jlc2V0X3JlZmVyZW5jZWQobGFyZ2VfY3JzdGVfdG9fcGh5cygqY3JzdGVwLCBnZm4pKTtcbiYjNDM7XHRcdHNrZXktXHUwMDNlc2tleSA9IHBhZ2VfcmVzZXRfcmVmZXJlbmNlZChsYXJnZV9jcnN0ZV90b19waHlzKCpjcnN0ZXAsIGdmbikpIFx1MDAzY1x1MDAzYyAxO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXHRvbGQgPSBwZ3N0ZV9nZXRfbG9jayhwdGVwKTtcbiBcdHBnc3RlID0gb2xkO1xuIFxuIFx0aWYgKCFwdGVwLVx1MDAzZWguaSkge1xuLVx0XHRyYyA9IHBhZ2VfcmVzZXRfcmVmZXJlbmNlZChwdGVfb3JpZ2luKCpwdGVwKSk7XG4tXHRcdHBnc3RlLmhyID0gcmMgXHUwMDNlXHUwMDNlIDE7XG4mIzQzO1x0XHRza2V5LVx1MDAzZXNrZXkgPSBwYWdlX3Jlc2V0X3JlZmVyZW5jZWQocHRlX29yaWdpbigqcHRlcCkpIFx1MDAzY1x1MDAzYyAxO1xuJiM0MztcdFx0cGdzdGUuaHIgPSBza2V5LVx1MDAzZXI7XG4gXHR9XG4tXHRyYyB8PSAocGdzdGUuZ3IgXHUwMDNjXHUwMDNjIDEpIHwgcGdzdGUuZ2M7XG4mIzQzO1x0c2tleS1cdTAwM2VyIHw9IHBnc3RlLmdyO1xuJiM0MztcdHNrZXktXHUwMDNlYyB8PSBwZ3N0ZS5nYztcbiBcdHBnc3RlLmdyID0gMDtcbiBcbiBcdGRhdF91cGRhdGVfcHRlcF9zZChvbGQsIHBnc3RlLCBwdGVwKTtcbiBcdHBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpO1xuLVx0cmV0dXJuIHJjO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgbG9uZyBkYXRfcmVzZXRfc2tleXNfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXG5AQCAtODQ2LDYgJiM0Mzs4NTAsNyBAQCBzdGF0aWMgbG9uZyBfZGF0X3Nsb3RfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbFxuIFx0c3RydWN0IHNsb3RfcHJpdiAqcCA9IHdhbGstXHUwMDNlcHJpdjtcbiBcdHVuaW9uIGNyc3RlIGR1bW15ID0geyAudmFsID0gcC1cdTAwM2V0b2tlbiB9O1xuIFx0dW5pb24gcHRlIG5ld19wdGUsIHB0ZSA9IFJFQURfT05DRSgqcHRlcCk7XG4mIzQzO1x0dW5pb24gcGdzdGUgcGdzdGU7XG4gXG4gXHRuZXdfcHRlID0gX1BURV9UT0soZHVtbXkudG9rLnR5cGUsIGR1bW15LnRvay5wYXIpO1xuIFxuQEAgLTg1Myw3ICYjNDM7ODU4LDExIEBAIHN0YXRpYyBsb25nIF9kYXRfc2xvdF9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsXG4gXHRpZiAocHRlLnZhbCA9PSBuZXdfcHRlLnZhbClcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRkYXRfcHRlcF94Y2hnKHB0ZXAsIG5ld19wdGUsIGdmbiwgd2Fsay1cdTAwM2Vhc2NlLCBmYWxzZSk7XG4mIzQzO1x0cGdzdGUgPSBwZ3N0ZV9nZXRfbG9jayhwdGVwKTtcbiYjNDM7XHRwZ3N0ZSA9IF9fZGF0X3B0ZXBfeGNoZyhwdGVwLCBwZ3N0ZSwgbmV3X3B0ZSwgZ2ZuLCB3YWxrLVx1MDAzZWFzY2UsIGZhbHNlKTtcbiYjNDM7XHRwZ3N0ZS5jbW1hX2QgPSAwO1xuJiM0MztcdHBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2RhdC5oIGIvYXJjaC9zMzkwL2t2bS9kYXQuaFxuaW5kZXggZmFkNjA1MzA1ZTA1Yy4uMTQxZWU3YjlmMDE5MSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vZGF0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vZGF0LmhcbkBAIC01MzcsNyAmIzQzOzUzNyw3IEBAIGludCBkYXRfc2V0X3N0b3JhZ2Vfa2V5KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCB1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmXG4gXHRcdFx0dW5pb24gc2tleSBza2V5LCBib29sIG5xKTtcbiBpbnQgZGF0X2NvbmRfc2V0X3N0b3JhZ2Vfa2V5KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1tYywgdW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4sXG4gXHRcdFx0ICAgICB1bmlvbiBza2V5IHNrZXksIHVuaW9uIHNrZXkgKm9sZGtleSwgYm9vbCBucSwgYm9vbCBtciwgYm9vbCBtYyk7XG4taW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuKTtcbiYjNDM7aW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLCB1bmlvbiBza2V5ICpza2V5KTtcbiBsb25nIGRhdF9yZXNldF9za2V5cyh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IHN0YXJ0KTtcbiBcbiB1bnNpZ25lZCBsb25nIGRhdF9nZXRfcHR2YWwoc3RydWN0IHBhZ2VfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgcHR2YWxfcGFyYW0gcGFyYW0pO1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jIGIvYXJjaC9zMzkwL2t2bS9mYXVsdGluLmNcbmluZGV4IGZlZTgwMDQ3YmQ5NGYuLjNjYzQ1ZjdmNWIyZDcgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9mYXVsdGluLmNcbkBAIC05MSw5ICYjNDM7OTEsOSBAQCBpbnQga3ZtX3MzOTBfZmF1bHRpbl9nZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBndWVzdF9mYVxuIFx0XHQvKiBBY2Nlc3Mgb3V0c2lkZSBtZW1vcnksIGFkZHJlc3NpbmcgZXhjZXB0aW9uLiAqL1xuIFx0XHRpZiAoaXNfbm9zbG90X3BmbihmLVx1MDAzZXBmbikpXG4gXHRcdFx0cmV0dXJuIFBHTV9BRERSRVNTSU5HO1xuLVx0XHQvKiBTaWduYWwgcGVuZGluZzogdHJ5IGFnYWluLiAqL1xuLVx0XHRpZiAoZi1cdTAwM2VwZm4gPT0gS1ZNX1BGTl9FUlJfU0lHUEVORElORylcbi1cdFx0XHRyZXR1cm4gLUVBR0FJTjtcbiYjNDM7XHRcdC8qIEZhdGFsIHNpZ25hbCBwZW5kaW5nOiBiYWlsIG91dC4gKi9cbiYjNDM7XHRcdGlmIChpc19zaWdwZW5kaW5nX3BmbihmLVx1MDAzZXBmbikpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVFI7XG4gXHRcdC8qIENoZWNrIGlmIGl0JiMzOTtzIHJlYWQtb25seSBtZW1vcnk7IGRvbiYjMzk7dCB0cnkgdG8gYWN0dWFsbHkgaGFuZGxlIHRoYXQgY2FzZS4gKi9cbiBcdFx0aWYgKGYtXHUwMDNlcGZuID09IEtWTV9QRk5fRVJSX1JPX0ZBVUxUKVxuIFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1xuaW5kZXggOWUzZTZiMGQ3MmFkNi4uZDAyNzI0YmQxODI5YyAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcbkBAIC01MCw2ICYjNDM7NTAsOCBAQCBzdGF0aWMgaW50IHNjYV9leHRfY2FsbF9wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50ICpzcmNfaWQpXG4gXHRpZiAoIWt2bV9zMzkwX3Rlc3RfY3B1ZmxhZ3ModmNwdSwgQ1BVU1RBVF9FQ0FMTF9QRU5EKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4mIzQzO1x0aWYgKEtWTV9CVUdfT04oa3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKSwgdmNwdS1cdTAwM2Vrdm0pKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRCVUdfT04oIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKTtcbiBcbiBcdGlmIChzcmNfaWQpXG5AQCAtNjYsNiAmIzQzOzY4LDggQEAgc3RhdGljIGludCBzY2FfaW5qZWN0X2V4dF9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNyY19pZClcbiBcdGludCBleHBlY3QsIHJjO1xuIFxuIFx0QlVHX09OKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSk7XG4mIzQzO1x0aWYgKEtWTV9CVUdfT04oa3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKSwgdmNwdS1cdTAwM2Vrdm0pKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRvbGRfdmFsID0gUkVBRF9PTkNFKCpzaWdwX2N0cmwpO1xuIFx0b2xkX3ZhbC5jID0gMDtcbkBAIC04NCwxMCAmIzQzOzg4LDEzIEBAIHN0YXRpYyBpbnQgc2NhX2luamVjdF9leHRfY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzcmNfaWQpXG4gc3RhdGljIHZvaWQgc2NhX2NsZWFyX2V4dF9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRzdHJ1Y3QgZXNjYV9ibG9jayAqc2NhID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5zY2E7XG4tXHR1bmlvbiBlc2NhX3NpZ3BfY3RybCAqc2lncF9jdHJsID0gXHUwMDI2c2NhLVx1MDAzZWNwdVt2Y3B1LVx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcbiYjNDM7XHR1bmlvbiBlc2NhX3NpZ3BfY3RybCAqc2lncF9jdHJsO1xuIFxuLVx0aWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSlcbiYjNDM7XHRpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpIHx8ICF2Y3B1LVx1MDAzZWFyY2guaW5pdGlhbGl6ZWQgfHwga3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKSlcbiBcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHQvKiBJbml0aWFsaXplIGFmdGVyIHRoZSBhYm92ZSBjaGVjaywgdG8gcHJldmVudCBnb2luZyBvdXQgb2YgYm91bmRzICovXG4mIzQzO1x0c2lncF9jdHJsID0gXHUwMDI2c2NhLVx1MDAzZWNwdVt2Y3B1LVx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcbiBcdGt2bV9zMzkwX2NsZWFyX2NwdWZsYWdzKHZjcHUsIENQVVNUQVRfRUNBTExfUEVORCk7XG4gXG4gXHRXUklURV9PTkNFKHNpZ3BfY3RybC1cdTAwM2V2YWx1ZSwgMCk7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG5pbmRleCAxNTBiNWRkMjE3MGUyLi5iMjllNTQ2MGY1ZWZhIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbkBAIC01NzEsNyAmIzQzOzU3MSw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfa2V5b3Aoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBrdm0gKmt2bSwgaW50IG9wXG4gXHRzd2l0Y2ggKG9wKSB7XG4gXHRjYXNlIEtWTV9TMzkwX0tFWU9QX1NTS0U6XG4gXHRcdHIgPSBkYXRfY29uZF9zZXRfc3RvcmFnZV9rZXkobWMsIGFzY2UsIGdmbiwgc2tleSwgXHUwMDI2c2tleSwgMCwgMCwgMCk7XG4tXHRcdGlmIChyIFx1MDAzZT0gMClcbiYjNDM7XHRcdGlmIChyID09IDAgfHwgciA9PSAxKVxuIFx0XHRcdHJldHVybiBza2V5LnNrZXk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBLVk1fUzM5MF9LRVlPUF9JU0tFOlxuQEAgLTU4MCwxNCAmIzQzOzU4MCwxNCBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX2tleW9wKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3Qga3ZtICprdm0sIGludCBvcFxuIFx0XHRcdHJldHVybiBza2V5LnNrZXk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBLVk1fUzM5MF9LRVlPUF9SUkJFOlxuLVx0XHRyID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQoYXNjZSwgZ2ZuKTtcbi1cdFx0aWYgKHIgXHUwMDNlIDApXG4tXHRcdFx0cmV0dXJuIHIgXHUwMDNjXHUwMDNjIDE7XG4mIzQzO1x0XHRyID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQoYXNjZSwgZ2ZuLCBcdTAwMjZza2V5KTtcbiYjNDM7XHRcdGlmICghcilcbiYjNDM7XHRcdFx0cmV0dXJuIHNrZXkuc2tleTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbi1cdHJldHVybiByO1xuJiM0MztcdHJldHVybiByIFx1MDAzZSAwID8gLUVGQVVMVCA6IHI7XG4gfVxuIFxuIC8qIFNlY3Rpb246IGRldmljZSByZWxhdGVkICovXG5AQCAtMTIxOSw4ICYjNDM7MTIxOSw4IEBAIHN0YXRpYyB2b2lkIGt2bV9zMzkwX3N5bmNfcmVxdWVzdF9icm9hZGNhc3Qoc3RydWN0IGt2bSAqa3ZtLCBpbnQgcmVxKVxuIFxuIC8qXG4gICogTXVzdCBiZSBjYWxsZWQgd2l0aCBrdm0tXHUwMDNlc3JjdSBoZWxkIHRvIGF2b2lkIHJhY2VzIG9uIG1lbXNsb3RzLCBhbmQgd2l0aFxuLSAqIGt2bS1cdTAwM2VzbG90c19sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLCBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbigpLFxuLSAqIGFuZCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKCkuXG4mIzQzOyAqIGt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsXG4mIzQzOyAqIGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKCksIGFuZCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKCkuXG4gICovXG4gc3RhdGljIGludCBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKVxuIHtcbkBAIC0xMjY1LDcgJiM0MzsxMjY1LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKVxuIH1cbiBcbiAvKlxuLSAqIE11c3QgYmUgY2FsbGVkIHdpdGgga3ZtLVx1MDAzZXNsb3RzX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsXG4mIzQzOyAqIE11c3QgYmUgY2FsbGVkIHdpdGgga3ZtLVx1MDAzZXNsb3RzX2FyY2hfbG9jayB0byBhdm9pZCByYWNlcyB3aXRoIG91cnNlbHZlcyxcbiAgKiBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oKSBhbmQga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cygpLlxuICAqL1xuIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKVxuQEAgLTEzMDAsNyAmIzQzOzEzMDAsOSBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtLFxuIHtcbiBcdGludCByZXMgPSAtRU5YSU87XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiYjNDM7XHRndWFyZChzcmN1KShcdTAwMjZrdm0tXHUwMDNlc3JjdSk7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNmt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2spO1xuJiM0MztcbiBcdHN3aXRjaCAoYXR0ci1cdTAwM2VhdHRyKSB7XG4gXHRjYXNlIEtWTV9TMzkwX1ZNX01JR1JBVElPTl9TVEFSVDpcbiBcdFx0cmVzID0ga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKGt2bSk7XG5AQCAtMTMxMSw3ICYjNDM7MTMxMyw2IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRkZWZhdWx0OlxuIFx0XHRicmVhaztcbiBcdH1cbi1cdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4gXG4gXHRyZXR1cm4gcmVzO1xuIH1cbkBAIC0yMjE0LDcgJiM0MzsyMjE1LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9nZXRfc2tleXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfc2tleXMgKmFyZ3MpXG4gXHR9XG4gXG4gXHRrdmZyZWUoa2V5cyk7XG4tXHRyZXR1cm4gcjtcbiYjNDM7XHRyZXR1cm4gciBcdTAwM2M9IDAgPyByIDogLUVGQVVMVDtcbiB9XG4gXG4gc3RhdGljIGludCBrdm1fczM5MF9zZXRfc2tleXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfc2tleXMgKmFyZ3MpXG5AQCAtMjI3Niw3ICYjNDM7MjI3Nyw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X3NrZXlzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX3NrZXlzICphcmdzKVxuIFx0a3ZtX3MzOTBfZnJlZV9tbXVfY2FjaGUobWMpO1xuIG91dDpcbiBcdGt2ZnJlZShrZXlzKTtcbi1cdHJldHVybiByO1xuJiM0MztcdHJldHVybiByIFx1MDAzYz0gMCA/IHIgOiAtRUZBVUxUO1xuIH1cbiBcbiAvKlxuQEAgLTIzODYsNyAmIzQzOzIzODcsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3NldF9jbW1hX2JpdHMoc3RydWN0IGt2bSAqa3ZtLFxuIFxuIFx0c2V0X2JpdChHTUFQX0ZMQUdfVVNFU19DTU0sIFx1MDAyNmt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlZmxhZ3MpO1xuIFxuLVx0cmV0dXJuIHI7XG4mIzQzO1x0cmV0dXJuIHIgXHUwMDNjPSAwID8gciA6IC1FRkFVTFQ7XG4gfVxuIFxuIC8qKlxuQEAgLTI5OTgsOSAmIzQzOzI5OTksOCBAQCBpbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gXHRcdHIgPSAtRUZBVUxUO1xuIFx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2YXJncywgYXJncCwgc2l6ZW9mKGFyZ3MpKSlcbiBcdFx0XHRicmVhaztcbi1cdFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4tXHRcdHIgPSBrdm1fczM5MF9nZXRfY21tYV9iaXRzKGt2bSwgXHUwMDI2YXJncyk7XG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4mIzQzO1x0XHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNmt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2spXG4mIzQzO1x0XHRcdHIgPSBrdm1fczM5MF9nZXRfY21tYV9iaXRzKGt2bSwgXHUwMDI2YXJncyk7XG4gXHRcdGlmICghcikge1xuIFx0XHRcdHIgPSBjb3B5X3RvX3VzZXIoYXJncCwgXHUwMDI2YXJncywgc2l6ZW9mKGFyZ3MpKTtcbiBcdFx0XHRpZiAocilcbkBAIC0zMDE0LDkgJiM0MzszMDE0LDkgQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0XHRyID0gLUVGQVVMVDtcbiBcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmFyZ3MsIGFyZ3AsIHNpemVvZihhcmdzKSkpXG4gXHRcdFx0YnJlYWs7XG4tXHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuJiM0MztcdFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcbiBcdFx0ciA9IGt2bV9zMzkwX3NldF9jbW1hX2JpdHMoa3ZtLCBcdTAwMjZhcmdzKTtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXHRjYXNlIEtWTV9TMzkwX1BWX0NPTU1BTkQ6IHtcbkBAIC0zNDYxLDcgJiM0MzszNDYxLDcgQEAgc3RhdGljIHZvaWQgc2NhX2RlbF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRzdHJ1Y3QgZXNjYV9ibG9jayAqc2NhID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5zY2E7XG4gXG4tXHRpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKVxuJiM0MztcdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkgfHwgIXZjcHUtXHUwMDNlYXJjaC5pbml0aWFsaXplZClcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Y2xlYXJfYml0X2ludih2Y3B1LVx1MDAzZXZjcHVfaWQsICh1bnNpZ25lZCBsb25nICopc2NhLVx1MDAzZW1jbik7XG5AQCAtMzQ4MSw4ICYjNDM7MzQ4MSw4IEBAIHN0YXRpYyB2b2lkIHNjYV9hZGRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKVxuIFx0XHRyZXR1cm47XG4gXG4mIzQzO1x0V1JJVEVfT05DRShzY2EtXHUwMDNlY3B1W3ZjcHUtXHUwMDNldmNwdV9pZF0uc2RhLCB2aXJ0X3RvX3BoeXModmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jaykpO1xuIFx0c2V0X2JpdF9pbnYodmNwdS1cdTAwM2V2Y3B1X2lkLCAodW5zaWduZWQgbG9uZyAqKXNjYS1cdTAwM2VtY24pO1xuLVx0c2NhLVx1MDAzZWNwdVt2Y3B1LVx1MDAzZXZjcHVfaWRdLnNkYSA9IHZpcnRfdG9fcGh5cyh2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrKTtcbiB9XG4gXG4gc3RhdGljIGludCBzY2FfY2FuX2FkZF92Y3B1KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkKVxuQEAgLTM2MTMsNiAmIzQzOzM2MTMsOSBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAodGVzdF9rdm1fZmFjaWxpdHkodmNwdS1cdTAwM2Vrdm0sIDc0KSB8fCB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnVzZXJfaW5zdHIwIHx8XG4gXHQgICAgdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC51c2VyX29wZXJleGVjKVxuIFx0XHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWljdGwgfD0gSUNUTF9PUEVSRVhDO1xuJiM0MztcbiYjNDM7XHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bigpIGFuZCBrdm1fYXJjaF92Y3B1X2lvY3RsKCkgKi9cbiYjNDM7XHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaW5pdGlhbGl6ZWQsIHRydWUpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBrdm1faGFzX3Bja21vX3N1YmZ1bmMoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIG5yKVxuQEAgLTM2NzQsNyAmIzQzOzM2NzcsOCBAQCBzdGF0aWMgdm9pZCBrdm1fczM5MF92Y3B1X2NyeXB0b19zZXR1cChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gdm9pZCBrdm1fczM5MF92Y3B1X3Vuc2V0dXBfY21tYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydCh2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWNicmxvKSk7XG4mIzQzO1x0aWYgKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlY2JybG8pXG4mIzQzO1x0XHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcGh5c190b192aXJ0KHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlY2JybG8pKTtcbiBcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlY2JybG8gPSAwO1xuIH1cbiBcbkBAIC0zNzkyLDIxICYjNDM7Mzc5NiwyMSBAQCBpbnQga3ZtX2FyY2hfdmNwdV9wcmVjcmVhdGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO0RFRklORV9GUkVFKHNpZV9wYWdlLCBzdHJ1Y3Qgc2llX3BhZ2UgKiwgaWYgKF9UKSBmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpKF9UKSkpXG4mIzQzO1xuIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0c3RydWN0IHNpZV9wYWdlICpzaWVfcGFnZTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYyBfX2ZyZWUoa3ZtX3MzOTBfbW11X2NhY2hlKSA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IHNpZV9wYWdlICpzaWVfcGFnZSBfX2ZyZWUoc2llX3BhZ2UpID0gTlVMTDtcbiBcdGludCByYztcbiBcbiBcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHNpZV9wYWdlKSAhPSA0MDk2KTtcbi1cdHZjcHUtXHUwMDNlYXJjaC5tYyA9IGt2bV9zMzkwX25ld19tbXVfY2FjaGUoKTtcbi1cdGlmICghdmNwdS1cdTAwM2VhcmNoLm1jKVxuJiM0MztcdG1jID0ga3ZtX3MzOTBfbmV3X21tdV9jYWNoZSgpO1xuJiM0MztcdGlmICghbWMpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0c2llX3BhZ2UgPSAoc3RydWN0IHNpZV9wYWdlICopIGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLVx0aWYgKCFzaWVfcGFnZSkge1xuLVx0XHRrdm1fczM5MF9mcmVlX21tdV9jYWNoZSh2Y3B1LVx1MDAzZWFyY2gubWMpO1xuLVx0XHR2Y3B1LVx1MDAzZWFyY2gubWMgPSBOVUxMO1xuJiM0MztcdGlmICghc2llX3BhZ2UpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuLVx0fVxuIFxuIFx0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jayA9IFx1MDAyNnNpZV9wYWdlLVx1MDAzZXNpZV9ibG9jaztcbiBcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlaXRkYmEgPSB2aXJ0X3RvX3BoeXMoXHUwMDI2c2llX3BhZ2UtXHUwMDNlaXRkYik7XG5AQCAtMzg0OCwxMCAmIzQzOzM4NTIsOSBAQCBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2Vrdm1fdmFsaWRfcmVncyB8PSBLVk1fU1lOQ19GUFJTO1xuIFxuIFx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpIHtcbi1cdFx0cmMgPSAtRU5PTUVNO1xuIFx0XHR2Y3B1LVx1MDAzZWFyY2guZ21hcCA9IGdtYXBfbmV3X2NoaWxkKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guZ21hcCwgLTFVTCk7XG4gXHRcdGlmICghdmNwdS1cdTAwM2VhcmNoLmdtYXApXG4tXHRcdFx0Z290byBvdXRfZnJlZV9zaWVfYmxvY2s7XG4mIzQzO1x0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFxuIFx0Vk1fRVZFTlQodmNwdS1cdTAwM2Vrdm0sIDMsIFwmIzM0O2NyZWF0ZSBjcHUgJWQgYXQgMHglcCwgc2llIGJsb2NrIGF0IDB4JXBcJiMzNDssXG5AQCAtMzg1OSwyMCAmIzQzOzM4NjIsMTkgQEAgaW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHRyYWNlX2t2bV9zMzkwX2NyZWF0ZV92Y3B1KHZjcHUtXHUwMDNldmNwdV9pZCwgdmNwdSwgdmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jayk7XG4gXG4gXHRyYyA9IGt2bV9zMzkwX3ZjcHVfc2V0dXAodmNwdSk7XG4tXHRpZiAocmMpXG4tXHRcdGdvdG8gb3V0X3Vjb250cm9sX3VuaW5pdDtcbiYjNDM7XHRpZiAocmMpIHtcbiYjNDM7XHRcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKSB7XG4mIzQzO1x0XHRcdHNjb3BlZF9ndWFyZChzcGlubG9jaywgXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWNoaWxkcmVuX2xvY2spXG4mIzQzO1x0XHRcdFx0Z21hcF9yZW1vdmVfY2hpbGQodmNwdS1cdTAwM2VhcmNoLmdtYXApO1xuJiM0MztcdFx0XHR2Y3B1LVx1MDAzZWFyY2guZ21hcCA9IGdtYXBfcHV0KHZjcHUtXHUwMDNlYXJjaC5nbWFwKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XHR9XG4gXG4mIzQzO1x0dmNwdS1cdTAwM2VhcmNoLm1jID0gbm9fZnJlZV9wdHIobWMpO1xuJiM0MztcdHNpZV9wYWdlID0gTlVMTDtcbiBcdGt2bV9zMzkwX3VwZGF0ZV90b3BvbG9neV9jaGFuZ2VfcmVwb3J0KHZjcHUtXHUwMDNla3ZtLCAxKTtcbiBcdHJldHVybiAwO1xuLVxuLW91dF91Y29udHJvbF91bmluaXQ6XG4tXHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKSkge1xuLVx0XHRnbWFwX3JlbW92ZV9jaGlsZCh2Y3B1LVx1MDAzZWFyY2guZ21hcCk7XG4tXHRcdHZjcHUtXHUwMDNlYXJjaC5nbWFwID0gZ21hcF9wdXQodmNwdS1cdTAwM2VhcmNoLmdtYXApO1xuLVx0fVxuLW91dF9mcmVlX3NpZV9ibG9jazpcbi1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykodmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jaykpO1xuLVx0cmV0dXJuIHJjO1xuIH1cbiBcbiBpbnQga3ZtX2FyY2hfdmNwdV9ydW5uYWJsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5AQCAtNTAzOSw2ICYjNDM7NTA0MSwxMCBAQCBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICAgIGt2bV9ydW4tXHUwMDNla3ZtX2RpcnR5X3JlZ3MgXHUwMDI2IH5LVk1fU1lOQ19TMzkwX1ZBTElEX0ZJRUxEUylcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4mIzQzO1x0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZSgpICovXG4mIzQzO1x0aWYgKCFzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pbml0aWFsaXplZCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHR2Y3B1X2xvYWQodmNwdSk7XG4gXG4gXHRpZiAoZ3Vlc3RkYmdfZXhpdF9wZW5kaW5nKHZjcHUpKSB7XG5AQCAtNTUyMyw2ICYjNDM7NTUyOSwxMCBAQCBsb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4gXHRsb25nIHI7XG4gXHR1MTYgcmMsIHJyYztcbiBcbiYjNDM7XHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4ga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKCkgKi9cbiYjNDM7XHRpZiAoIXNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmluaXRpYWxpemVkKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiBcdHZjcHVfbG9hZCh2Y3B1KTtcbiBcbiBcdHN3aXRjaCAoaW9jdGwpIHtcbkBAIC01Nzk0LDI0ICYjNDM7NTgwNCw0NCBAQCBpbnQga3ZtX2FyY2hfcHJlcGFyZV9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGxvbmcgY21tYV9kX2NvdW50X3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxuJiM0Mzt7XG4mIzQzO1x0dW5pb24gcGdzdGUgcGdzdGU7XG4mIzQzO1xuJiM0MztcdHBnc3RlID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7XG4mIzQzO1x0aWYgKHBnc3RlLmNtbWFfZCkge1xuJiM0MztcdFx0cGdzdGUuY21tYV9kID0gMDtcbiYjNDM7XHRcdGF0b21pYzY0X2RlYyh3YWxrLVx1MDAzZXByaXYpO1xuJiM0MztcdH1cbiYjNDM7XHRwZ3N0ZV9zZXRfdW5sb2NrKHB0ZXAsIHBnc3RlKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0XHRcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm9sZCxcbiBcdFx0XHRcdGNvbnN0IHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm5ldyxcbiBcdFx0XHRcdGVudW0ga3ZtX21yX2NoYW5nZSBjaGFuZ2UpXG4ge1xuLVx0c3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMgPSBOVUxMO1xuLVx0aW50IHJjID0gMDtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgZGF0X3dhbGtfb3BzIG9wcyA9IHsgLnB0ZV9lbnRyeSA9IGNtbWFfZF9jb3VudF9wdGUsIH07XG4mIzQzO1x0c3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMgX19mcmVlKGt2bV9zMzkwX21tdV9jYWNoZSkgPSBOVUxMO1xuJiM0MztcdGludCByYyA9IC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcbiBcbiBcdGlmIChjaGFuZ2UgPT0gS1ZNX01SX0ZMQUdTX09OTFkpXG4gXHRcdHJldHVybjtcbiBcbiBcdG1jID0ga3ZtX3MzOTBfbmV3X21tdV9jYWNoZSgpO1xuLVx0aWYgKCFtYykge1xuLVx0XHRyYyA9IC1FTk9NRU07XG4mIzQzO1x0aWYgKCFtYylcbiBcdFx0Z290byBvdXQ7XG4tXHR9XG4tXG4mIzQzO3JldHJ5OlxuIFx0c2NvcGVkX2d1YXJkKHdyaXRlX2xvY2ssIFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jaykge1xuJiM0MztcdFx0aWYgKGt2bS1cdTAwM2VhcmNoLm1pZ3JhdGlvbl9tb2RlIFx1MDAyNlx1MDAyNiBrdm0tXHUwMDNlYXJjaC51c2VfY21tYSBcdTAwMjZcdTAwMjYgb2xkKSB7XG4mIzQzO1x0XHRcdF9kYXRfd2Fsa19nZm5fcmFuZ2Uob2xkLVx1MDAzZWJhc2VfZ2ZuLCBvbGQtXHUwMDNlYmFzZV9nZm4gJiM0Mzsgb2xkLVx1MDAzZW5wYWdlcyxcbiYjNDM7XHRcdFx0XHRcdCAgICBrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWFzY2UsIFx1MDAyNm9wcywgREFUX1dBTEtfSUdOX0hPTEVTLFxuJiM0MztcdFx0XHRcdFx0ICAgIFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNtbWFfZGlydHlfcGFnZXMpO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0c3dpdGNoIChjaGFuZ2UpIHtcbiBcdFx0Y2FzZSBLVk1fTVJfREVMRVRFOlxuIFx0XHRcdHJjID0gZGF0X2RlbGV0ZV9zbG90KG1jLCBrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWFzY2UsIG9sZC1cdTAwM2ViYXNlX2dmbiwgb2xkLVx1MDAzZW5wYWdlcyk7XG5AQCAtNTgyNywxMyAmIzQzOzU4NTcsMTggQEAgdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdGNhc2UgS1ZNX01SX0ZMQUdTX09OTFk6XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4mIzQzO1x0XHRcdHJjID0gMDtcbiBcdFx0XHRXQVJOKDEsIFwmIzM0O1Vua25vd24gS1ZNIE1SIENIQU5HRTogJWRcXG5cJiMzNDssIGNoYW5nZSk7XG4gXHRcdH1cbiBcdH1cbiYjNDM7XHRpZiAocmMgPT0gLUVOT01FTSkge1xuJiM0MztcdFx0cmMgPSBrdm1fczM5MF9tbXVfY2FjaGVfdG9wdXAobWMpO1xuJiM0MztcdFx0aWYgKCFyYylcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XHR9XG4gb3V0OlxuLVx0aWYgKHJjKVxuJiM0MztcdGlmIChLVk1fQlVHX09OKHJjLCBrdm0pKVxuIFx0XHRwcl93YXJuKFwmIzM0O2ZhaWxlZCB0byBjb21taXQgbWVtb3J5IHJlZ2lvblxcblwmIzM0Oyk7XG4tXHRrdm1fczM5MF9mcmVlX21tdV9jYWNoZShtYyk7XG4gXHRyZXR1cm47XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHJpdi5jIGIvYXJjaC9zMzkwL2t2bS9wcml2LmNcbmluZGV4IGFkMGRkYzQzM2E3M2MuLmIxYmEyNGMzNDZlZmEgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL3ByaXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9wcml2LmNcbkBAIC0yODksNiAmIzQzOzI4OSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2lza2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHN0YXRpYyBpbnQgaGFuZGxlX3JyYmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZ2FkZHI7XG4mIzQzO1x0dW5pb24gc2tleSBza2V5O1xuIFx0aW50IHJlZzEsIHJlZzI7XG4gXHRpbnQgcmM7XG4gXG5AQCAtMzA3LDEyICYjNDM7MzA4LDEyIEBAIHN0YXRpYyBpbnQgaGFuZGxlX3JyYmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0Z2FkZHIgPSBrdm1fczM5MF9sb2dpY2FsX3RvX2VmZmVjdGl2ZSh2Y3B1LCBnYWRkcik7XG4gXHRnYWRkciA9IGt2bV9zMzkwX3JlYWxfdG9fYWJzKHZjcHUsIGdhZGRyKTtcbiBcdHNjb3BlZF9ndWFyZChyZWFkX2xvY2ssIFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZW1tdV9sb2NrKVxuLVx0XHRyYyA9IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHZjcHUtXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWFzY2UsIGdwYV90b19nZm4oZ2FkZHIpKTtcbiYjNDM7XHRcdHJjID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodmNwdS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlYXNjZSwgZ3BhX3RvX2dmbihnYWRkciksIFx1MDAyNnNrZXkpO1xuIFx0aWYgKHJjIFx1MDAzZSAwKVxuIFx0XHRyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIHJjKTtcbiBcdGlmIChyYyBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJjO1xuLVx0a3ZtX3MzOTBfc2V0X3Bzd19jYyh2Y3B1LCByYyk7XG4mIzQzO1x0a3ZtX3MzOTBfc2V0X3Bzd19jYyh2Y3B1LCAoc2tleS5za2V5IFx1MDAzZVx1MDAzZSAxKSBcdTAwMjYgMyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTI2MCw4ICYjNDM7MTI2MSw5IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2Vzc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHQvKiBSZXRyeSB0aGUgRVNTQSBpbnN0cnVjdGlvbiAqL1xuIFx0XHRrdm1fczM5MF9yZXRyeV9pbnN0cih2Y3B1KTtcbiBcdH0gZWxzZSB7XG4tXHRcdHNjb3BlZF9ndWFyZChyZWFkX2xvY2ssIFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZW1tdV9sb2NrKVxuLVx0XHRcdGkgPSBfX2RvX2Vzc2EodmNwdSwgb3JjKTtcbiYjNDM7XHRcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrKVxuJiM0MztcdFx0XHRzY29wZWRfZ3VhcmQocmVhZF9sb2NrLCBcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VtbXVfbG9jaylcbiYjNDM7XHRcdFx0XHRpID0gX19kb19lc3NhKHZjcHUsIG9yYyk7XG4gXHRcdGlmIChpIFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiBpO1xuIFx0XHQvKiBBY2NvdW50IGZvciB0aGUgcG9zc2libGUgZXh0cmEgY2JybCBlbnRyeSAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHYuYyBiL2FyY2gvczM5MC9rdm0vcHYuY1xuaW5kZXggMWJlYWNjODQxY2E4NS4uYjAyZTAxNTlkM2NkMiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vcHYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9wdi5jXG5AQCAtMjQ0LDYgJiM0MzsyNDQsMjQgQEAgc3RhdGljIHZvaWQga3ZtX3MzOTBfY2xlYXJfcHZfc3RhdGUoc3RydWN0IGt2bSAqa3ZtKVxuIFx0a3ZtLVx1MDAzZWFyY2gucHYuc3Rvcl92YXIgPSBOVUxMO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQga3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGZyZWVfc3Rvcl9iYXNlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGZyZWVfc3Rvcl9iYXNlKVxuJiM0MztcdFx0ZnJlZV9wYWdlcyh2Y3B1LVx1MDAzZWFyY2gucHYuc3Rvcl9iYXNlLCBnZXRfb3JkZXIodXZfaW5mby5ndWVzdF9jcHVfc3Rvcl9sZW4pKTtcbiYjNDM7XHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2lkYV9hZGRyKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2spKTtcbiYjNDM7XHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZXB2X2hhbmRsZV9jcHUgPSAwO1xuJiM0MztcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlcHZfaGFuZGxlX2NvbmZpZyA9IDA7XG4mIzQzO1x0bWVtc2V0KFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5wdiwgMCwgc2l6ZW9mKHZjcHUtXHUwMDNlYXJjaC5wdikpO1xuJiM0MztcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlc2RmID0gMDtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBzaWRhZCBmaWVsZCAoZm9yIHNkZiA9PSAyKSBpcyBub3cgdGhlIGdiZWEgZmllbGQgKGZvciBzZGYgPT0gMCkuXG4mIzQzO1x0ICogVXNlIHRoZSByZXNldCB2YWx1ZSBvZiBnYmVhIHRvIGF2b2lkIGxlYWtpbmcgdGhlIGtlcm5lbCBwb2ludGVyIG9mXG4mIzQzO1x0ICogdGhlIGp1c3QgZnJlZWQgc2lkYS5cbiYjNDM7XHQgKi9cbiYjNDM7XHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWdiZWEgPSAxO1xuJiM0MztcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9UTEJfRkxVU0gsIHZjcHUpO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBrdm1fczM5MF9wdl9kZXN0cm95X2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKVxuIHtcbiBcdGludCBjYztcbkBAIC0yNTgsMjQgJiM0MzsyNzYsOSBAQCBpbnQga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYylcbiBcdFdBUk5fT05DRShjYywgXCYjMzQ7cHJvdHZpcnQgZGVzdHJveSBjcHUgZmFpbGVkIHJjICV4IHJyYyAleFwmIzM0OywgKnJjLCAqcnJjKTtcbiBcbiBcdC8qIEludGVuZGVkIG1lbW9yeSBsZWFrIGZvciBzb21ldGhpbmcgdGhhdCBzaG91bGQgbmV2ZXIgaGFwcGVuLiAqL1xuLVx0aWYgKCFjYylcbi1cdFx0ZnJlZV9wYWdlcyh2Y3B1LVx1MDAzZWFyY2gucHYuc3Rvcl9iYXNlLFxuLVx0XHRcdCAgIGdldF9vcmRlcih1dl9pbmZvLmd1ZXN0X2NwdV9zdG9yX2xlbikpO1xuLVxuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNpZGFfYWRkcih2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrKSk7XG4tXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZXB2X2hhbmRsZV9jcHUgPSAwO1xuLVx0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2Vwdl9oYW5kbGVfY29uZmlnID0gMDtcbi1cdG1lbXNldChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gucHYsIDAsIHNpemVvZih2Y3B1LVx1MDAzZWFyY2gucHYpKTtcbi1cdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlc2RmID0gMDtcbi1cdC8qXG4tXHQgKiBUaGUgc2lkYWQgZmllbGQgKGZvciBzZGYgPT0gMikgaXMgbm93IHRoZSBnYmVhIGZpZWxkIChmb3Igc2RmID09IDApLlxuLVx0ICogVXNlIHRoZSByZXNldCB2YWx1ZSBvZiBnYmVhIHRvIGF2b2lkIGxlYWtpbmcgdGhlIGtlcm5lbCBwb2ludGVyIG9mXG4tXHQgKiB0aGUganVzdCBmcmVlZCBzaWRhLlxuLVx0ICovXG4tXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWdiZWEgPSAxO1xuLVx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1RMQl9GTFVTSCwgdmNwdSk7XG4mIzQzO1x0a3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUodmNwdSwgIWNjKTtcbiBcbi1cdHJldHVybiBjYyA/IEVJTyA6IDA7XG4mIzQzO1x0cmV0dXJuIGNjID8gLUVJTyA6IDA7XG4gfVxuIFxuIGludCBrdm1fczM5MF9wdl9jcmVhdGVfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXG5AQCAtMzE5LDkgJiM0MzszMjIsNyBAQCBpbnQga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKVxuIFx0XHQgICAgIHV2Y2IuaGVhZGVyLnJyYyk7XG4gXG4gXHRpZiAoY2MpIHtcbi1cdFx0dTE2IGR1bW15O1xuLVxuLVx0XHRrdm1fczM5MF9wdl9kZXN0cm95X2NwdSh2Y3B1LCBcdTAwMjZkdW1teSwgXHUwMDI2ZHVtbXkpO1xuJiM0MztcdFx0a3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUodmNwdSwgdHJ1ZSk7XG4gXHRcdHJldHVybiAtRUlPO1xuIFx0fVxuIFxuQEAgLTgwOSw3ICYjNDM7ODEwLDcgQEAgc3RhdGljIGludCB1bnBhY2tfb25lKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1NjQgdHdlYWssXG4gXHRcdFx0cmV0dXJuIC1FQUdBSU47XG4gXHR9XG4gXG4tXHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVBR0FJTilcbiYjNDM7XHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVBR0FJTiBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FSU5UUilcbiBcdFx0S1ZNX1VWX0VWRU5UKGt2bSwgMywgXCYjMzQ7UFJPVFZJUlQgVk0gVU5QQUNLOiBmYWlsZWQgYWRkciAlbGx4IHdpdGggcmMgJXggcnJjICV4XCYjMzQ7LFxuIFx0XHRcdCAgICAgdXZjYi5nYWRkciwgKnJjLCAqcnJjKTtcbiBcdHJldHVybiByZXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfY3JlYXRlJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3B2X2NyZWF0ZV9jcHUmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfcHZfZGVzdHJveV9jcHUmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfZmF1bHRpbl9nZm4mIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfaW5qZWN0X3ZjcHUmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfaGFuZGxlX2IyJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2hhbmRsZV9iOSYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF92bV9pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBzMzkwIEtWTSBpbXBsZW1lbnRhdGlvbiwgaW5jbHVkaW5nIGZpeGluZyBtZW1vcnkgbGVha3MgZHVyaW5nIHZDUFUgY3JlYXRpb24vZGVzdHJ1Y3Rpb24sIG1vZGlmeWluZyByZWZlcmVuY2UgYml0IHJlc2V0dGluZyBmb3Igc3RvcmFnZSBrZXlzLCBhZGp1c3Rpbmcgc2lnbmFsIGhhbmRsaW5nIGR1cmluZyBwYWdlIGZhdWx0cywgYW5kIGltcHJvdmluZyBsb2NraW5nIGR1cmluZyBtZW1vcnkgcmVnaW9uIGNvbW1pdHMgYW5kIG1pZ3JhdGlvbi4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIHZpcnR1YWxpemF0aW9uIGZlYXR1cmVzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGZiZjVjZDViOWEyNDAzNTk3NTY4YzhkZWZiYWUyOWU3ODdmMjQ1ODgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAzMSAwMDowNjowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggZWFhMzRjNWJkM2MxMS4uZWRmNzViNmFkMjBjZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTQ0MCw2ICYjNDM7NDQwLDcgQEAgc3RydWN0IGt2bV92Y3B1X2FyY2ggewogCWJvb2wgc2tleV9lbmFibGVkOwogCS8qIEluZGljYXRvciBpZiB0aGUgYWNjZXNzIHJlZ2lzdGVycyBoYXZlIGJlZW4gbG9hZGVkIGZyb20gZ3Vlc3QgKi8KIAlib29sIGFjcnNfbG9hZGVkOwomIzQzOwlib29sIGluaXRpYWxpemVkOwogCXN0cnVjdCBrdm1fczM5MF9wdl92Y3B1IHB2OwogCXVuaW9uIGRpYWczMThfaW5mbyBkaWFnMzE4X2luZm87CiAJc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWM7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2RhdC5jIGIvYXJjaC9zMzkwL2t2bS9kYXQuYwppbmRleCBlZDQyNTlkMTc2Mjk1Li4zZjJkNmU4OTAyZDc2IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2RhdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vZGF0LmMKQEAgLTc1NSwxMyAmIzQzOzc1NSwxNSBAQCBpbnQgZGF0X2NvbmRfc2V0X3N0b3JhZ2Vfa2V5KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1tYywgdW5pb24gYXNjZSBhc2NlLCBnZgogCXJldHVybiByYzsKIH0KIAotaW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuKQomIzQzO2ludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbiwgdW5pb24gc2tleSAqc2tleSkKIHsKIAl1bmlvbiBwZ3N0ZSBwZ3N0ZSwgb2xkOwogCXVuaW9uIGNyc3RlICpjcnN0ZXA7CiAJdW5pb24gcHRlICpwdGVwOwogCWludCByYzsKIAomIzQzOwlza2V5LSZndDtza2V5ID0gMDsKJiM0MzsKIAlyYyA9IGRhdF9lbnRyeV93YWxrKE5VTEwsIGdmbiwgYXNjZSwgREFUX1dBTEtfQU5ZLCBUQUJMRV9UWVBFX1BBR0VfVEFCTEUsICZhbXA7Y3JzdGVwLCAmYW1wO3B0ZXApOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwpAQCAtNzcxLDIxICYjNDM7NzczLDIzIEBAIGludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbikKIAogCQlpZiAoIWNyc3RlLmguZmMgfHwgIWNyc3RlLnMuZmMxLnByKQogCQkJcmV0dXJuIDA7Ci0JCXJldHVybiBwYWdlX3Jlc2V0X3JlZmVyZW5jZWQobGFyZ2VfY3JzdGVfdG9fcGh5cygqY3JzdGVwLCBnZm4pKTsKJiM0MzsJCXNrZXktJmd0O3NrZXkgPSBwYWdlX3Jlc2V0X3JlZmVyZW5jZWQobGFyZ2VfY3JzdGVfdG9fcGh5cygqY3JzdGVwLCBnZm4pKSAmbHQ7Jmx0OyAxOwomIzQzOwkJcmV0dXJuIDA7CiAJfQogCW9sZCA9IHBnc3RlX2dldF9sb2NrKHB0ZXApOwogCXBnc3RlID0gb2xkOwogCiAJaWYgKCFwdGVwLSZndDtoLmkpIHsKLQkJcmMgPSBwYWdlX3Jlc2V0X3JlZmVyZW5jZWQocHRlX29yaWdpbigqcHRlcCkpOwotCQlwZ3N0ZS5ociA9IHJjICZndDsmZ3Q7IDE7CiYjNDM7CQlza2V5LSZndDtza2V5ID0gcGFnZV9yZXNldF9yZWZlcmVuY2VkKHB0ZV9vcmlnaW4oKnB0ZXApKSAmbHQ7Jmx0OyAxOwomIzQzOwkJcGdzdGUuaHIgPSBza2V5LSZndDtyOwogCX0KLQlyYyB8PSAocGdzdGUuZ3IgJmx0OyZsdDsgMSkgfCBwZ3N0ZS5nYzsKJiM0MzsJc2tleS0mZ3Q7ciB8PSBwZ3N0ZS5ncjsKJiM0MzsJc2tleS0mZ3Q7YyB8PSBwZ3N0ZS5nYzsKIAlwZ3N0ZS5nciA9IDA7CiAKIAlkYXRfdXBkYXRlX3B0ZXBfc2Qob2xkLCBwZ3N0ZSwgcHRlcCk7CiAJcGdzdGVfc2V0X3VubG9jayhwdGVwLCBwZ3N0ZSk7Ci0JcmV0dXJuIHJjOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGxvbmcgZGF0X3Jlc2V0X3NrZXlzX3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKQpAQCAtODQ2LDYgJiM0Mzs4NTAsNyBAQCBzdGF0aWMgbG9uZyBfZGF0X3Nsb3RfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbAogCXN0cnVjdCBzbG90X3ByaXYgKnAgPSB3YWxrLSZndDtwcml2OwogCXVuaW9uIGNyc3RlIGR1bW15ID0geyAudmFsID0gcC0mZ3Q7dG9rZW4gfTsKIAl1bmlvbiBwdGUgbmV3X3B0ZSwgcHRlID0gUkVBRF9PTkNFKCpwdGVwKTsKJiM0MzsJdW5pb24gcGdzdGUgcGdzdGU7CiAKIAluZXdfcHRlID0gX1BURV9UT0soZHVtbXkudG9rLnR5cGUsIGR1bW15LnRvay5wYXIpOwogCkBAIC04NTMsNyAmIzQzOzg1OCwxMSBAQCBzdGF0aWMgbG9uZyBfZGF0X3Nsb3RfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbAogCWlmIChwdGUudmFsID09IG5ld19wdGUudmFsKQogCQlyZXR1cm4gMDsKIAotCWRhdF9wdGVwX3hjaGcocHRlcCwgbmV3X3B0ZSwgZ2ZuLCB3YWxrLSZndDthc2NlLCBmYWxzZSk7CiYjNDM7CXBnc3RlID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7CiYjNDM7CXBnc3RlID0gX19kYXRfcHRlcF94Y2hnKHB0ZXAsIHBnc3RlLCBuZXdfcHRlLCBnZm4sIHdhbGstJmd0O2FzY2UsIGZhbHNlKTsKJiM0MzsJcGdzdGUuY21tYV9kID0gMDsKJiM0MzsJcGdzdGVfc2V0X3VubG9jayhwdGVwLCBwZ3N0ZSk7CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZGF0LmggYi9hcmNoL3MzOTAva3ZtL2RhdC5oCmluZGV4IGZhZDYwNTMwNWUwNWMuLjE0MWVlN2I5ZjAxOTEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vZGF0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9kYXQuaApAQCAtNTM3LDcgJiM0Mzs1MzcsNyBAQCBpbnQgZGF0X3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgdW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZgogCQkJdW5pb24gc2tleSBza2V5LCBib29sIG5xKTsKIGludCBkYXRfY29uZF9zZXRfc3RvcmFnZV9rZXkoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbW1jLCB1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbiwKIAkJCSAgICAgdW5pb24gc2tleSBza2V5LCB1bmlvbiBza2V5ICpvbGRrZXksIGJvb2wgbnEsIGJvb2wgbXIsIGJvb2wgbWMpOwotaW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuKTsKJiM0MztpbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4sIHVuaW9uIHNrZXkgKnNrZXkpOwogbG9uZyBkYXRfcmVzZXRfc2tleXModW5pb24gYXNjZSBhc2NlLCBnZm5fdCBzdGFydCk7CiAKIHVuc2lnbmVkIGxvbmcgZGF0X2dldF9wdHZhbChzdHJ1Y3QgcGFnZV90YWJsZSAqdGFibGUsIHN0cnVjdCBwdHZhbF9wYXJhbSBwYXJhbSk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYyBiL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jCmluZGV4IGZlZTgwMDQ3YmQ5NGYuLjNjYzQ1ZjdmNWIyZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jCkBAIC05MSw5ICYjNDM7OTEsOSBAQCBpbnQga3ZtX3MzOTBfZmF1bHRpbl9nZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBndWVzdF9mYQogCQkvKiBBY2Nlc3Mgb3V0c2lkZSBtZW1vcnksIGFkZHJlc3NpbmcgZXhjZXB0aW9uLiAqLwogCQlpZiAoaXNfbm9zbG90X3BmbihmLSZndDtwZm4pKQogCQkJcmV0dXJuIFBHTV9BRERSRVNTSU5HOwotCQkvKiBTaWduYWwgcGVuZGluZzogdHJ5IGFnYWluLiAqLwotCQlpZiAoZi0mZ3Q7cGZuID09IEtWTV9QRk5fRVJSX1NJR1BFTkRJTkcpCi0JCQlyZXR1cm4gLUVBR0FJTjsKJiM0MzsJCS8qIEZhdGFsIHNpZ25hbCBwZW5kaW5nOiBiYWlsIG91dC4gKi8KJiM0MzsJCWlmIChpc19zaWdwZW5kaW5nX3BmbihmLSZndDtwZm4pKQomIzQzOwkJCXJldHVybiAtRUlOVFI7CiAJCS8qIENoZWNrIGlmIGl0JiMzOTtzIHJlYWQtb25seSBtZW1vcnk7IGRvbiYjMzk7dCB0cnkgdG8gYWN0dWFsbHkgaGFuZGxlIHRoYXQgY2FzZS4gKi8KIAkJaWYgKGYtJmd0O3BmbiA9PSBLVk1fUEZOX0VSUl9ST19GQVVMVCkKIAkJCXJldHVybiAtRU9QTk9UU1VQUDsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jCmluZGV4IDllM2U2YjBkNzJhZDYuLmQwMjcyNGJkMTgyOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYwpAQCAtNTAsNiAmIzQzOzUwLDggQEAgc3RhdGljIGludCBzY2FfZXh0X2NhbGxfcGVuZGluZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCAqc3JjX2lkKQogCWlmICgha3ZtX3MzOTBfdGVzdF9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX0VDQUxMX1BFTkQpKQogCQlyZXR1cm4gMDsKIAomIzQzOwlpZiAoS1ZNX0JVR19PTihrdm1faXNfdWNvbnRyb2wodmNwdS0mZ3Q7a3ZtKSwgdmNwdS0mZ3Q7a3ZtKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwogCUJVR19PTigha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpOwogCiAJaWYgKHNyY19pZCkKQEAgLTY2LDYgJiM0Mzs2OCw4IEBAIHN0YXRpYyBpbnQgc2NhX2luamVjdF9leHRfY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzcmNfaWQpCiAJaW50IGV4cGVjdCwgcmM7CiAKIAlCVUdfT04oIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKTsKJiM0MzsJaWYgKEtWTV9CVUdfT04oa3ZtX2lzX3Vjb250cm9sKHZjcHUtJmd0O2t2bSksIHZjcHUtJmd0O2t2bSkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKIAogCW9sZF92YWwgPSBSRUFEX09OQ0UoKnNpZ3BfY3RybCk7CiAJb2xkX3ZhbC5jID0gMDsKQEAgLTg0LDEwICYjNDM7ODgsMTMgQEAgc3RhdGljIGludCBzY2FfaW5qZWN0X2V4dF9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNyY19pZCkKIHN0YXRpYyB2b2lkIHNjYV9jbGVhcl9leHRfY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5zY2E7Ci0JdW5pb24gZXNjYV9zaWdwX2N0cmwgKnNpZ3BfY3RybCA9ICZhbXA7c2NhLSZndDtjcHVbdmNwdS0mZ3Q7dmNwdV9pZF0uc2lncF9jdHJsOwomIzQzOwl1bmlvbiBlc2NhX3NpZ3BfY3RybCAqc2lncF9jdHJsOwogCi0JaWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSkKJiM0MzsJaWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSB8fCAhdmNwdS0mZ3Q7YXJjaC5pbml0aWFsaXplZCB8fCBrdm1faXNfdWNvbnRyb2wodmNwdS0mZ3Q7a3ZtKSkKIAkJcmV0dXJuOwomIzQzOwomIzQzOwkvKiBJbml0aWFsaXplIGFmdGVyIHRoZSBhYm92ZSBjaGVjaywgdG8gcHJldmVudCBnb2luZyBvdXQgb2YgYm91bmRzICovCiYjNDM7CXNpZ3BfY3RybCA9ICZhbXA7c2NhLSZndDtjcHVbdmNwdS0mZ3Q7dmNwdV9pZF0uc2lncF9jdHJsOwogCWt2bV9zMzkwX2NsZWFyX2NwdWZsYWdzKHZjcHUsIENQVVNUQVRfRUNBTExfUEVORCk7CiAKIAlXUklURV9PTkNFKHNpZ3BfY3RybC0mZ3Q7dmFsdWUsIDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCmluZGV4IDE1MGI1ZGQyMTcwZTIuLmIyOWU1NDYwZjVlZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKQEAgLTU3MSw3ICYjNDM7NTcxLDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9rZXlvcChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGt2bSAqa3ZtLCBpbnQgb3AKIAlzd2l0Y2ggKG9wKSB7CiAJY2FzZSBLVk1fUzM5MF9LRVlPUF9TU0tFOgogCQlyID0gZGF0X2NvbmRfc2V0X3N0b3JhZ2Vfa2V5KG1jLCBhc2NlLCBnZm4sIHNrZXksICZhbXA7c2tleSwgMCwgMCwgMCk7Ci0JCWlmIChyICZndDs9IDApCiYjNDM7CQlpZiAociA9PSAwIHx8IHIgPT0gMSkKIAkJCXJldHVybiBza2V5LnNrZXk7CiAJCWJyZWFrOwogCWNhc2UgS1ZNX1MzOTBfS0VZT1BfSVNLRToKQEAgLTU4MCwxNCAmIzQzOzU4MCwxNCBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX2tleW9wKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3Qga3ZtICprdm0sIGludCBvcAogCQkJcmV0dXJuIHNrZXkuc2tleTsKIAkJYnJlYWs7CiAJY2FzZSBLVk1fUzM5MF9LRVlPUF9SUkJFOgotCQlyID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQoYXNjZSwgZ2ZuKTsKLQkJaWYgKHIgJmd0OyAwKQotCQkJcmV0dXJuIHIgJmx0OyZsdDsgMTsKJiM0MzsJCXIgPSBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdChhc2NlLCBnZm4sICZhbXA7c2tleSk7CiYjNDM7CQlpZiAoIXIpCiYjNDM7CQkJcmV0dXJuIHNrZXkuc2tleTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXJldHVybiByOwomIzQzOwlyZXR1cm4gciAmZ3Q7IDAgPyAtRUZBVUxUIDogcjsKIH0KIAogLyogU2VjdGlvbjogZGV2aWNlIHJlbGF0ZWQgKi8KQEAgLTEyMTksOCAmIzQzOzEyMTksOCBAQCBzdGF0aWMgdm9pZCBrdm1fczM5MF9zeW5jX3JlcXVlc3RfYnJvYWRjYXN0KHN0cnVjdCBrdm0gKmt2bSwgaW50IHJlcSkKIAogLyoKICAqIE11c3QgYmUgY2FsbGVkIHdpdGgga3ZtLSZndDtzcmN1IGhlbGQgdG8gYXZvaWQgcmFjZXMgb24gbWVtc2xvdHMsIGFuZCB3aXRoCi0gKiBrdm0tJmd0O3Nsb3RzX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsIGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKCksCi0gKiBhbmQga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cygpLgomIzQzOyAqIGt2bS0mZ3Q7c2xvdHNfYXJjaF9sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLAomIzQzOyAqIGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKCksIGFuZCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKCkuCiAgKi8KIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSkKIHsKQEAgLTEyNjUsNyAmIzQzOzEyNjUsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pCiB9CiAKIC8qCi0gKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGt2bS0mZ3Q7c2xvdHNfbG9jayB0byBhdm9pZCByYWNlcyB3aXRoIG91cnNlbHZlcywKJiM0MzsgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGt2bS0mZ3Q7c2xvdHNfYXJjaF9sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLAogICoga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKCkgYW5kIGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoKS4KICAqLwogc3RhdGljIGludCBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pCkBAIC0xMzAwLDcgJiM0MzsxMzAwLDkgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSwKIHsKIAlpbnQgcmVzID0gLUVOWElPOwogCi0JbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7c2xvdHNfbG9jayk7CiYjNDM7CWd1YXJkKHNyY3UpKCZhbXA7a3ZtLSZndDtzcmN1KTsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7a3ZtLSZndDtzbG90c19hcmNoX2xvY2spOwomIzQzOwogCXN3aXRjaCAoYXR0ci0mZ3Q7YXR0cikgewogCWNhc2UgS1ZNX1MzOTBfVk1fTUlHUkFUSU9OX1NUQVJUOgogCQlyZXMgPSBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oa3ZtKTsKQEAgLTEzMTEsNyAmIzQzOzEzMTMsNiBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtLAogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KLQltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O3Nsb3RzX2xvY2spOwogCiAJcmV0dXJuIHJlczsKIH0KQEAgLTIyMTQsNyAmIzQzOzIyMTUsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX2dldF9za2V5cyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9za2V5cyAqYXJncykKIAl9CiAKIAlrdmZyZWUoa2V5cyk7Ci0JcmV0dXJuIHI7CiYjNDM7CXJldHVybiByICZsdDs9IDAgPyByIDogLUVGQVVMVDsKIH0KIAogc3RhdGljIGludCBrdm1fczM5MF9zZXRfc2tleXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfc2tleXMgKmFyZ3MpCkBAIC0yMjc2LDcgJiM0MzsyMjc3LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfc2tleXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfc2tleXMgKmFyZ3MpCiAJa3ZtX3MzOTBfZnJlZV9tbXVfY2FjaGUobWMpOwogb3V0OgogCWt2ZnJlZShrZXlzKTsKLQlyZXR1cm4gcjsKJiM0MzsJcmV0dXJuIHIgJmx0Oz0gMCA/IHIgOiAtRUZBVUxUOwogfQogCiAvKgpAQCAtMjM4Niw3ICYjNDM7MjM4Nyw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X2NtbWFfYml0cyhzdHJ1Y3Qga3ZtICprdm0sCiAKIAlzZXRfYml0KEdNQVBfRkxBR19VU0VTX0NNTSwgJmFtcDtrdm0tJmd0O2FyY2guZ21hcC0mZ3Q7ZmxhZ3MpOwogCi0JcmV0dXJuIHI7CiYjNDM7CXJldHVybiByICZsdDs9IDAgPyByIDogLUVGQVVMVDsKIH0KIAogLyoqCkBAIC0yOTk4LDkgJiM0MzsyOTk5LDggQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKQogCQlyID0gLUVGQVVMVDsKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZhbXA7YXJncywgYXJncCwgc2l6ZW9mKGFyZ3MpKSkKIAkJCWJyZWFrOwotCQltdXRleF9sb2NrKCZhbXA7a3ZtLSZndDtzbG90c19sb2NrKTsKLQkJciA9IGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoa3ZtLCAmYW1wO2FyZ3MpOwotCQltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O3Nsb3RzX2xvY2spOwomIzQzOwkJc2NvcGVkX2d1YXJkKG11dGV4LCAmYW1wO2t2bS0mZ3Q7c2xvdHNfYXJjaF9sb2NrKQomIzQzOwkJCXIgPSBrdm1fczM5MF9nZXRfY21tYV9iaXRzKGt2bSwgJmFtcDthcmdzKTsKIAkJaWYgKCFyKSB7CiAJCQlyID0gY29weV90b191c2VyKGFyZ3AsICZhbXA7YXJncywgc2l6ZW9mKGFyZ3MpKTsKIAkJCWlmIChyKQpAQCAtMzAxNCw5ICYjNDM7MzAxNCw5IEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZykKIAkJciA9IC1FRkFVTFQ7CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmYW1wO2FyZ3MsIGFyZ3AsIHNpemVvZihhcmdzKSkpCiAJCQlicmVhazsKLQkJbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7c2xvdHNfbG9jayk7CiYjNDM7CQltdXRleF9sb2NrKCZhbXA7a3ZtLSZndDtzbG90c19hcmNoX2xvY2spOwogCQlyID0ga3ZtX3MzOTBfc2V0X2NtbWFfYml0cyhrdm0sICZhbXA7YXJncyk7Ci0JCW11dGV4X3VubG9jaygmYW1wO2t2bS0mZ3Q7c2xvdHNfbG9jayk7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O3Nsb3RzX2FyY2hfbG9jayk7CiAJCWJyZWFrOwogCX0KIAljYXNlIEtWTV9TMzkwX1BWX0NPTU1BTkQ6IHsKQEAgLTM0NjEsNyAmIzQzOzM0NjEsNyBAQCBzdGF0aWMgdm9pZCBzY2FfZGVsX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXN0cnVjdCBlc2NhX2Jsb2NrICpzY2EgPSB2Y3B1LSZndDtrdm0tJmd0O2FyY2guc2NhOwogCi0JaWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSkKJiM0MzsJaWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSB8fCAhdmNwdS0mZ3Q7YXJjaC5pbml0aWFsaXplZCkKIAkJcmV0dXJuOwogCiAJY2xlYXJfYml0X2ludih2Y3B1LSZndDt2Y3B1X2lkLCAodW5zaWduZWQgbG9uZyAqKXNjYS0mZ3Q7bWNuKTsKQEAgLTM0ODEsOCAmIzQzOzM0ODEsOCBAQCBzdGF0aWMgdm9pZCBzY2FfYWRkX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCWlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpCiAJCXJldHVybjsKIAomIzQzOwlXUklURV9PTkNFKHNjYS0mZ3Q7Y3B1W3ZjcHUtJmd0O3ZjcHVfaWRdLnNkYSwgdmlydF90b19waHlzKHZjcHUtJmd0O2FyY2guc2llX2Jsb2NrKSk7CiAJc2V0X2JpdF9pbnYodmNwdS0mZ3Q7dmNwdV9pZCwgKHVuc2lnbmVkIGxvbmcgKilzY2EtJmd0O21jbik7Ci0Jc2NhLSZndDtjcHVbdmNwdS0mZ3Q7dmNwdV9pZF0uc2RhID0gdmlydF90b19waHlzKHZjcHUtJmd0O2FyY2guc2llX2Jsb2NrKTsKIH0KIAogc3RhdGljIGludCBzY2FfY2FuX2FkZF92Y3B1KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkKQpAQCAtMzYxMyw2ICYjNDM7MzYxMyw5IEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpZiAodGVzdF9rdm1fZmFjaWxpdHkodmNwdS0mZ3Q7a3ZtLCA3NCkgfHwgdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnVzZXJfaW5zdHIwIHx8CiAJICAgIHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC51c2VyX29wZXJleGVjKQogCQl2Y3B1LSZndDthcmNoLnNpZV9ibG9jay0mZ3Q7aWN0bCB8PSBJQ1RMX09QRVJFWEM7CiYjNDM7CiYjNDM7CS8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKCkgYW5kIGt2bV9hcmNoX3ZjcHVfaW9jdGwoKSAqLwomIzQzOwlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO3ZjcHUtJmd0O2FyY2guaW5pdGlhbGl6ZWQsIHRydWUpOwogfQogCiBzdGF0aWMgYm9vbCBrdm1faGFzX3Bja21vX3N1YmZ1bmMoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIG5yKQpAQCAtMzY3NCw3ICYjNDM7MzY3Nyw4IEBAIHN0YXRpYyB2b2lkIGt2bV9zMzkwX3ZjcHVfY3J5cHRvX3NldHVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogdm9pZCBrdm1fczM5MF92Y3B1X3Vuc2V0dXBfY21tYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydCh2Y3B1LSZndDthcmNoLnNpZV9ibG9jay0mZ3Q7Y2JybG8pKTsKJiM0MzsJaWYgKHZjcHUtJmd0O2FyY2guc2llX2Jsb2NrLSZndDtjYnJsbykKJiM0MzsJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwaHlzX3RvX3ZpcnQodmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O2NicmxvKSk7CiAJdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O2NicmxvID0gMDsKIH0KIApAQCAtMzc5MiwyMSAmIzQzOzM3OTYsMjEgQEAgaW50IGt2bV9hcmNoX3ZjcHVfcHJlY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkKQogCXJldHVybiAwOwogfQogCiYjNDM7REVGSU5FX0ZSRUUoc2llX3BhZ2UsIHN0cnVjdCBzaWVfcGFnZSAqLCBpZiAoX1QpIGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykoX1QpKSkKJiM0MzsKIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0Jc3RydWN0IHNpZV9wYWdlICpzaWVfcGFnZTsKJiM0MzsJc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMgX19mcmVlKGt2bV9zMzkwX21tdV9jYWNoZSkgPSBOVUxMOwomIzQzOwlzdHJ1Y3Qgc2llX3BhZ2UgKnNpZV9wYWdlIF9fZnJlZShzaWVfcGFnZSkgPSBOVUxMOwogCWludCByYzsKIAogCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHNpZV9wYWdlKSAhPSA0MDk2KTsKLQl2Y3B1LSZndDthcmNoLm1jID0ga3ZtX3MzOTBfbmV3X21tdV9jYWNoZSgpOwotCWlmICghdmNwdS0mZ3Q7YXJjaC5tYykKJiM0MzsJbWMgPSBrdm1fczM5MF9uZXdfbW11X2NhY2hlKCk7CiYjNDM7CWlmICghbWMpCiAJCXJldHVybiAtRU5PTUVNOwogCXNpZV9wYWdlID0gKHN0cnVjdCBzaWVfcGFnZSAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKLQlpZiAoIXNpZV9wYWdlKSB7Ci0JCWt2bV9zMzkwX2ZyZWVfbW11X2NhY2hlKHZjcHUtJmd0O2FyY2gubWMpOwotCQl2Y3B1LSZndDthcmNoLm1jID0gTlVMTDsKJiM0MzsJaWYgKCFzaWVfcGFnZSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCiAJdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2sgPSAmYW1wO3NpZV9wYWdlLSZndDtzaWVfYmxvY2s7CiAJdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O2l0ZGJhID0gdmlydF90b19waHlzKCZhbXA7c2llX3BhZ2UtJmd0O2l0ZGIpOwpAQCAtMzg0OCwxMCAmIzQzOzM4NTIsOSBAQCBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCQl2Y3B1LSZndDtydW4tJmd0O2t2bV92YWxpZF9yZWdzIHw9IEtWTV9TWU5DX0ZQUlM7CiAKIAlpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtJmd0O2t2bSkpIHsKLQkJcmMgPSAtRU5PTUVNOwogCQl2Y3B1LSZndDthcmNoLmdtYXAgPSBnbWFwX25ld19jaGlsZCh2Y3B1LSZndDtrdm0tJmd0O2FyY2guZ21hcCwgLTFVTCk7CiAJCWlmICghdmNwdS0mZ3Q7YXJjaC5nbWFwKQotCQkJZ290byBvdXRfZnJlZV9zaWVfYmxvY2s7CiYjNDM7CQkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJVk1fRVZFTlQodmNwdS0mZ3Q7a3ZtLCAzLCAmIzM0O2NyZWF0ZSBjcHUgJWQgYXQgMHglcCwgc2llIGJsb2NrIGF0IDB4JXAmIzM0OywKQEAgLTM4NTksMjAgJiM0MzszODYyLDE5IEBAIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJdHJhY2Vfa3ZtX3MzOTBfY3JlYXRlX3ZjcHUodmNwdS0mZ3Q7dmNwdV9pZCwgdmNwdSwgdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2spOwogCiAJcmMgPSBrdm1fczM5MF92Y3B1X3NldHVwKHZjcHUpOwotCWlmIChyYykKLQkJZ290byBvdXRfdWNvbnRyb2xfdW5pbml0OwomIzQzOwlpZiAocmMpIHsKJiM0MzsJCWlmIChrdm1faXNfdWNvbnRyb2wodmNwdS0mZ3Q7a3ZtKSkgewomIzQzOwkJCXNjb3BlZF9ndWFyZChzcGlubG9jaywgJmFtcDt2Y3B1LSZndDtrdm0tJmd0O2FyY2guZ21hcC0mZ3Q7Y2hpbGRyZW5fbG9jaykKJiM0MzsJCQkJZ21hcF9yZW1vdmVfY2hpbGQodmNwdS0mZ3Q7YXJjaC5nbWFwKTsKJiM0MzsJCQl2Y3B1LSZndDthcmNoLmdtYXAgPSBnbWFwX3B1dCh2Y3B1LSZndDthcmNoLmdtYXApOwomIzQzOwkJfQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwl9CiAKJiM0MzsJdmNwdS0mZ3Q7YXJjaC5tYyA9IG5vX2ZyZWVfcHRyKG1jKTsKJiM0MzsJc2llX3BhZ2UgPSBOVUxMOwogCWt2bV9zMzkwX3VwZGF0ZV90b3BvbG9neV9jaGFuZ2VfcmVwb3J0KHZjcHUtJmd0O2t2bSwgMSk7CiAJcmV0dXJuIDA7Ci0KLW91dF91Y29udHJvbF91bmluaXQ6Ci0JaWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LSZndDtrdm0pKSB7Ci0JCWdtYXBfcmVtb3ZlX2NoaWxkKHZjcHUtJmd0O2FyY2guZ21hcCk7Ci0JCXZjcHUtJmd0O2FyY2guZ21hcCA9IGdtYXBfcHV0KHZjcHUtJmd0O2FyY2guZ21hcCk7Ci0JfQotb3V0X2ZyZWVfc2llX2Jsb2NrOgotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykodmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2spKTsKLQlyZXR1cm4gcmM7CiB9CiAKIGludCBrdm1fYXJjaF92Y3B1X3J1bm5hYmxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTUwMzksNiAmIzQzOzUwNDEsMTAgQEAgaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkgICAga3ZtX3J1bi0mZ3Q7a3ZtX2RpcnR5X3JlZ3MgJmFtcDsgfktWTV9TWU5DX1MzOTBfVkFMSURfRklFTERTKQogCQlyZXR1cm4gLUVJTlZBTDsKIAomIzQzOwkvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4ga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKCkgKi8KJiM0MzsJaWYgKCFzbXBfbG9hZF9hY3F1aXJlKCZhbXA7dmNwdS0mZ3Q7YXJjaC5pbml0aWFsaXplZCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAl2Y3B1X2xvYWQodmNwdSk7CiAKIAlpZiAoZ3Vlc3RkYmdfZXhpdF9wZW5kaW5nKHZjcHUpKSB7CkBAIC01NTIzLDYgJiM0Mzs1NTI5LDEwIEBAIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwKIAlsb25nIHI7CiAJdTE2IHJjLCBycmM7CiAKJiM0MzsJLyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZSgpICovCiYjNDM7CWlmICghc21wX2xvYWRfYWNxdWlyZSgmYW1wO3ZjcHUtJmd0O2FyY2guaW5pdGlhbGl6ZWQpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJdmNwdV9sb2FkKHZjcHUpOwogCiAJc3dpdGNoIChpb2N0bCkgewpAQCAtNTc5NCwyNCAmIzQzOzU4MDQsNDQgQEAgaW50IGt2bV9hcmNoX3ByZXBhcmVfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgbG9uZyBjbW1hX2RfY291bnRfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspCiYjNDM7ewomIzQzOwl1bmlvbiBwZ3N0ZSBwZ3N0ZTsKJiM0MzsKJiM0MzsJcGdzdGUgPSBwZ3N0ZV9nZXRfbG9jayhwdGVwKTsKJiM0MzsJaWYgKHBnc3RlLmNtbWFfZCkgewomIzQzOwkJcGdzdGUuY21tYV9kID0gMDsKJiM0MzsJCWF0b21pYzY0X2RlYyh3YWxrLSZndDtwcml2KTsKJiM0MzsJfQomIzQzOwlwZ3N0ZV9zZXRfdW5sb2NrKHB0ZXAsIHBnc3RlKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sCiAJCQkJc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqb2xkLAogCQkJCWNvbnN0IHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm5ldywKIAkJCQllbnVtIGt2bV9tcl9jaGFuZ2UgY2hhbmdlKQogewotCXN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jID0gTlVMTDsKLQlpbnQgcmMgPSAwOwomIzQzOwljb25zdCBzdHJ1Y3QgZGF0X3dhbGtfb3BzIG9wcyA9IHsgLnB0ZV9lbnRyeSA9IGNtbWFfZF9jb3VudF9wdGUsIH07CiYjNDM7CXN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jIF9fZnJlZShrdm1fczM5MF9tbXVfY2FjaGUpID0gTlVMTDsKJiM0MzsJaW50IHJjID0gLUVOT01FTTsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7a3ZtLSZndDtzbG90c19hcmNoX2xvY2spOwogCiAJaWYgKGNoYW5nZSA9PSBLVk1fTVJfRkxBR1NfT05MWSkKIAkJcmV0dXJuOwogCiAJbWMgPSBrdm1fczM5MF9uZXdfbW11X2NhY2hlKCk7Ci0JaWYgKCFtYykgewotCQlyYyA9IC1FTk9NRU07CiYjNDM7CWlmICghbWMpCiAJCWdvdG8gb3V0OwotCX0KLQomIzQzO3JldHJ5OgogCXNjb3BlZF9ndWFyZCh3cml0ZV9sb2NrLCAmYW1wO2t2bS0mZ3Q7bW11X2xvY2spIHsKJiM0MzsJCWlmIChrdm0tJmd0O2FyY2gubWlncmF0aW9uX21vZGUgJmFtcDsmYW1wOyBrdm0tJmd0O2FyY2gudXNlX2NtbWEgJmFtcDsmYW1wOyBvbGQpIHsKJiM0MzsJCQlfZGF0X3dhbGtfZ2ZuX3JhbmdlKG9sZC0mZ3Q7YmFzZV9nZm4sIG9sZC0mZ3Q7YmFzZV9nZm4gJiM0Mzsgb2xkLSZndDtucGFnZXMsCiYjNDM7CQkJCQkgICAga3ZtLSZndDthcmNoLmdtYXAtJmd0O2FzY2UsICZhbXA7b3BzLCBEQVRfV0FMS19JR05fSE9MRVMsCiYjNDM7CQkJCQkgICAgJmFtcDtrdm0tJmd0O2FyY2guY21tYV9kaXJ0eV9wYWdlcyk7CiYjNDM7CQl9CiYjNDM7CiAJCXN3aXRjaCAoY2hhbmdlKSB7CiAJCWNhc2UgS1ZNX01SX0RFTEVURToKIAkJCXJjID0gZGF0X2RlbGV0ZV9zbG90KG1jLCBrdm0tJmd0O2FyY2guZ21hcC0mZ3Q7YXNjZSwgb2xkLSZndDtiYXNlX2dmbiwgb2xkLSZndDtucGFnZXMpOwpAQCAtNTgyNywxMyAmIzQzOzU4NTcsMTggQEAgdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sCiAJCWNhc2UgS1ZNX01SX0ZMQUdTX09OTFk6CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKJiM0MzsJCQlyYyA9IDA7CiAJCQlXQVJOKDEsICYjMzQ7VW5rbm93biBLVk0gTVIgQ0hBTkdFOiAlZFxuJiMzNDssIGNoYW5nZSk7CiAJCX0KIAl9CiYjNDM7CWlmIChyYyA9PSAtRU5PTUVNKSB7CiYjNDM7CQlyYyA9IGt2bV9zMzkwX21tdV9jYWNoZV90b3B1cChtYyk7CiYjNDM7CQlpZiAoIXJjKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CX0KIG91dDoKLQlpZiAocmMpCiYjNDM7CWlmIChLVk1fQlVHX09OKHJjLCBrdm0pKQogCQlwcl93YXJuKCYjMzQ7ZmFpbGVkIHRvIGNvbW1pdCBtZW1vcnkgcmVnaW9uXG4mIzM0Oyk7Ci0Ja3ZtX3MzOTBfZnJlZV9tbXVfY2FjaGUobWMpOwogCXJldHVybjsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9wcml2LmMgYi9hcmNoL3MzOTAva3ZtL3ByaXYuYwppbmRleCBhZDBkZGM0MzNhNzNjLi5iMWJhMjRjMzQ2ZWZhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL3ByaXYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL3ByaXYuYwpAQCAtMjg5LDYgJiM0MzsyODksNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9pc2tlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHN0YXRpYyBpbnQgaGFuZGxlX3JyYmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXVuc2lnbmVkIGxvbmcgZ2FkZHI7CiYjNDM7CXVuaW9uIHNrZXkgc2tleTsKIAlpbnQgcmVnMSwgcmVnMjsKIAlpbnQgcmM7CiAKQEAgLTMwNywxMiAmIzQzOzMwOCwxMiBAQCBzdGF0aWMgaW50IGhhbmRsZV9ycmJlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlnYWRkciA9IGt2bV9zMzkwX2xvZ2ljYWxfdG9fZWZmZWN0aXZlKHZjcHUsIGdhZGRyKTsKIAlnYWRkciA9IGt2bV9zMzkwX3JlYWxfdG9fYWJzKHZjcHUsIGdhZGRyKTsKIAlzY29wZWRfZ3VhcmQocmVhZF9sb2NrLCAmYW1wO3ZjcHUtJmd0O2t2bS0mZ3Q7bW11X2xvY2spCi0JCXJjID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodmNwdS0mZ3Q7YXJjaC5nbWFwLSZndDthc2NlLCBncGFfdG9fZ2ZuKGdhZGRyKSk7CiYjNDM7CQlyYyA9IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHZjcHUtJmd0O2FyY2guZ21hcC0mZ3Q7YXNjZSwgZ3BhX3RvX2dmbihnYWRkciksICZhbXA7c2tleSk7CiAJaWYgKHJjICZndDsgMCkKIAkJcmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LCByYyk7CiAJaWYgKHJjICZsdDsgMCkKIAkJcmV0dXJuIHJjOwotCWt2bV9zMzkwX3NldF9wc3dfY2ModmNwdSwgcmMpOwomIzQzOwlrdm1fczM5MF9zZXRfcHN3X2NjKHZjcHUsIChza2V5LnNrZXkgJmd0OyZndDsgMSkgJmFtcDsgMyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyNjAsOCAmIzQzOzEyNjEsOSBAQCBzdGF0aWMgaW50IGhhbmRsZV9lc3NhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJLyogUmV0cnkgdGhlIEVTU0EgaW5zdHJ1Y3Rpb24gKi8KIAkJa3ZtX3MzOTBfcmV0cnlfaW5zdHIodmNwdSk7CiAJfSBlbHNlIHsKLQkJc2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgJmFtcDt2Y3B1LSZndDtrdm0tJmd0O21tdV9sb2NrKQotCQkJaSA9IF9fZG9fZXNzYSh2Y3B1LCBvcmMpOwomIzQzOwkJc2NvcGVkX2d1YXJkKG11dGV4LCAmYW1wO3ZjcHUtJmd0O2t2bS0mZ3Q7c2xvdHNfYXJjaF9sb2NrKQomIzQzOwkJCXNjb3BlZF9ndWFyZChyZWFkX2xvY2ssICZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDttbXVfbG9jaykKJiM0MzsJCQkJaSA9IF9fZG9fZXNzYSh2Y3B1LCBvcmMpOwogCQlpZiAoaSAmbHQ7IDApCiAJCQlyZXR1cm4gaTsKIAkJLyogQWNjb3VudCBmb3IgdGhlIHBvc3NpYmxlIGV4dHJhIGNicmwgZW50cnkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHYuYyBiL2FyY2gvczM5MC9rdm0vcHYuYwppbmRleCAxYmVhY2M4NDFjYTg1Li5iMDJlMDE1OWQzY2QyIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL3B2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9wdi5jCkBAIC0yNDQsNiAmIzQzOzI0NCwyNCBAQCBzdGF0aWMgdm9pZCBrdm1fczM5MF9jbGVhcl9wdl9zdGF0ZShzdHJ1Y3Qga3ZtICprdm0pCiAJa3ZtLSZndDthcmNoLnB2LnN0b3JfdmFyID0gTlVMTDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGt2bV9zMzkwX3B2X2Rpc3Bvc2VfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmcmVlX3N0b3JfYmFzZSkKJiM0Mzt7CiYjNDM7CWlmIChmcmVlX3N0b3JfYmFzZSkKJiM0MzsJCWZyZWVfcGFnZXModmNwdS0mZ3Q7YXJjaC5wdi5zdG9yX2Jhc2UsIGdldF9vcmRlcih1dl9pbmZvLmd1ZXN0X2NwdV9zdG9yX2xlbikpOwomIzQzOwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2lkYV9hZGRyKHZjcHUtJmd0O2FyY2guc2llX2Jsb2NrKSk7CiYjNDM7CXZjcHUtJmd0O2FyY2guc2llX2Jsb2NrLSZndDtwdl9oYW5kbGVfY3B1ID0gMDsKJiM0MzsJdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O3B2X2hhbmRsZV9jb25maWcgPSAwOwomIzQzOwltZW1zZXQoJmFtcDt2Y3B1LSZndDthcmNoLnB2LCAwLCBzaXplb2YodmNwdS0mZ3Q7YXJjaC5wdikpOwomIzQzOwl2Y3B1LSZndDthcmNoLnNpZV9ibG9jay0mZ3Q7c2RmID0gMDsKJiM0MzsJLyoKJiM0MzsJICogVGhlIHNpZGFkIGZpZWxkIChmb3Igc2RmID09IDIpIGlzIG5vdyB0aGUgZ2JlYSBmaWVsZCAoZm9yIHNkZiA9PSAwKS4KJiM0MzsJICogVXNlIHRoZSByZXNldCB2YWx1ZSBvZiBnYmVhIHRvIGF2b2lkIGxlYWtpbmcgdGhlIGtlcm5lbCBwb2ludGVyIG9mCiYjNDM7CSAqIHRoZSBqdXN0IGZyZWVkIHNpZGEuCiYjNDM7CSAqLwomIzQzOwl2Y3B1LSZndDthcmNoLnNpZV9ibG9jay0mZ3Q7Z2JlYSA9IDE7CiYjNDM7CWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9UTEJfRkxVU0gsIHZjcHUpOwomIzQzO30KJiM0MzsKIGludCBrdm1fczM5MF9wdl9kZXN0cm95X2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKQogewogCWludCBjYzsKQEAgLTI1OCwyNCAmIzQzOzI3Niw5IEBAIGludCBrdm1fczM5MF9wdl9kZXN0cm95X2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKQogCVdBUk5fT05DRShjYywgJiMzNDtwcm90dmlydCBkZXN0cm95IGNwdSBmYWlsZWQgcmMgJXggcnJjICV4JiMzNDssICpyYywgKnJyYyk7CiAKIAkvKiBJbnRlbmRlZCBtZW1vcnkgbGVhayBmb3Igc29tZXRoaW5nIHRoYXQgc2hvdWxkIG5ldmVyIGhhcHBlbi4gKi8KLQlpZiAoIWNjKQotCQlmcmVlX3BhZ2VzKHZjcHUtJmd0O2FyY2gucHYuc3Rvcl9iYXNlLAotCQkJICAgZ2V0X29yZGVyKHV2X2luZm8uZ3Vlc3RfY3B1X3N0b3JfbGVuKSk7Ci0KLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2lkYV9hZGRyKHZjcHUtJmd0O2FyY2guc2llX2Jsb2NrKSk7Ci0JdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O3B2X2hhbmRsZV9jcHUgPSAwOwotCXZjcHUtJmd0O2FyY2guc2llX2Jsb2NrLSZndDtwdl9oYW5kbGVfY29uZmlnID0gMDsKLQltZW1zZXQoJmFtcDt2Y3B1LSZndDthcmNoLnB2LCAwLCBzaXplb2YodmNwdS0mZ3Q7YXJjaC5wdikpOwotCXZjcHUtJmd0O2FyY2guc2llX2Jsb2NrLSZndDtzZGYgPSAwOwotCS8qCi0JICogVGhlIHNpZGFkIGZpZWxkIChmb3Igc2RmID09IDIpIGlzIG5vdyB0aGUgZ2JlYSBmaWVsZCAoZm9yIHNkZiA9PSAwKS4KLQkgKiBVc2UgdGhlIHJlc2V0IHZhbHVlIG9mIGdiZWEgdG8gYXZvaWQgbGVha2luZyB0aGUga2VybmVsIHBvaW50ZXIgb2YKLQkgKiB0aGUganVzdCBmcmVlZCBzaWRhLgotCSAqLwotCXZjcHUtJmd0O2FyY2guc2llX2Jsb2NrLSZndDtnYmVhID0gMTsKLQlrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfVExCX0ZMVVNILCB2Y3B1KTsKJiM0MzsJa3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUodmNwdSwgIWNjKTsKIAotCXJldHVybiBjYyA/IEVJTyA6IDA7CiYjNDM7CXJldHVybiBjYyA/IC1FSU8gOiAwOwogfQogCiBpbnQga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKQpAQCAtMzE5LDkgJiM0MzszMjIsNyBAQCBpbnQga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKQogCQkgICAgIHV2Y2IuaGVhZGVyLnJyYyk7CiAKIAlpZiAoY2MpIHsKLQkJdTE2IGR1bW15OwotCi0JCWt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHZjcHUsICZhbXA7ZHVtbXksICZhbXA7ZHVtbXkpOwomIzQzOwkJa3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUodmNwdSwgdHJ1ZSk7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtODA5LDcgJiM0Mzs4MTAsNyBAQCBzdGF0aWMgaW50IHVucGFja19vbmUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGFkZHIsIHU2NCB0d2VhaywKIAkJCXJldHVybiAtRUFHQUlOOwogCX0KIAotCWlmIChyZXQgJmFtcDsmYW1wOyByZXQgIT0gLUVBR0FJTikKJiM0MzsJaWYgKHJldCAmYW1wOyZhbXA7IHJldCAhPSAtRUFHQUlOICZhbXA7JmFtcDsgcmV0ICE9IC1FSU5UUikKIAkJS1ZNX1VWX0VWRU5UKGt2bSwgMywgJiMzNDtQUk9UVklSVCBWTSBVTlBBQ0s6IGZhaWxlZCBhZGRyICVsbHggd2l0aCByYyAleCBycmMgJXgmIzM0OywKIAkJCSAgICAgdXZjYi5nYWRkciwgKnJjLCAqcnJjKTsKIAlyZXR1cm4gcmV0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTIwNAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEwMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBEZWNpc2lvbiBmb3IgS1ZNL3MzOTAgUGF0Y2gqKgoKT2theSwgc28gSSBoYXZlIHRoaXMgcGF0Y2ggc2VyaWVzIHRvdWNoaW5nIEtWTSBjb2RlIHNwZWNpZmljYWxseSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBzaW5jZSBpdCYjMzk7cyBzMzkwLCB3aGljaCBpcyBsZXNzIGNvbW1vbiBpbiB0eXBpY2FsIGZ1enppbmcgZW52aXJvbm1lbnRzIGxpa2UgR0NFL1FFTVUgZm9yIHg4NiwgSSBuZWVkIHRvIGJlIG1vcmUgZGVsaWJlcmF0ZS4gVGhlIHByb21wdCBoaWdobGlnaHRzIGEga2V5IGV4Y2x1c2lvbjogY29kZSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4gSG93ZXZlciwgU3l6a2FsbGVyICpkb2VzKiBoYXZlIHMzOTB4IHN1cHBvcnQsIGFuZCBRRU1VICpkb2VzKiBzdXBwb3J0IHMzOTB4LiBTbywgdGhlIHF1ZXN0aW9uIGlzbiYjMzk7dCB3aGV0aGVyIHMzOTAgaXMgaW5oZXJlbnRseSBleGNsdWRlZCwgYnV0IHdoZXRoZXIgdGhlc2UgKnNwZWNpZmljKiBjaGFuZ2VzIGFyZSByZWFjaGFibGUuCgpJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoZXNlIEtWTSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsbHkgc2lnbmlmaWNhbnQuIExldCYjMzk7cyBkaWcgaW50byB0aGUgY29kZSBjaGFuZ2VzLiBJJiMzOTttIHNlZWluZyBtb2RpZmljYXRpb25zIGluIGBkYXQuY2AsIGBmYXVsdGluLmNgLCBgaW50ZXJydXB0LmNgLCBga3ZtLXMzOTAuY2AsIGFuZCBgcHYuY2AuIFRoZXNlIGFyZW4mIzM5O3QganVzdCBjb3NtZXRpYyBjaGFuZ2VzOyB0aGV5IGFyZSBhY3R1YWxseSBtb2RpZnlpbmcgaG93IEtWTSBiZWhhdmVzIGZvciBzMzkwLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBjaGFuZ2VzIHRvIGRhdGEgc3RydWN0dXJlcywgZXJyb3IgaGFuZGxpbmcgKGUuZy4sIHJldHVybmluZyBgLUVGQVVMVGAgaW5zdGVhZCBvZiBwb3NpdGl2ZSBjb2RlcyBpbiBga3ZtX3MzOTBfa2V5b3BgKSwgbWVtb3J5IG1hbmFnZW1lbnQgKGZpeGVzLCBndWFyZHMsIGFuZCB1c2Ugb2YgYF9fZnJlZWApLCBpbml0aWFsaXphdGlvbiBjaGVja3MsIGFuZCBuZXcgQ1BVIGRpc3Bvc2FsL2NyZWF0aW9uIGZ1bmN0aW9ucyAoYGt2bV9zMzkwX3B2X2Rpc3Bvc2VfY3B1YCkuIENsZWFybHksIHRoZXNlIGFyZSBmdW5jdGlvbmFsIGFsdGVyYXRpb25zIHRvIEtWTS4KCkdpdmVuIHRoZXNlIGFyZSAqZnVuY3Rpb25hbCogY2hhbmdlcyB3aXRoaW4gS1ZNLCBhbmQgU3l6a2FsbGVyIGhhcyB0aGUgY2FwYWJpbGl0eSB0byBmdXp6IHMzOTB4LCBteSBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBzZXJpZXMgKmlzKiB3b3J0aCBmdXp6aW5nLiBLVk0gaXMgYSBoaWdoLXZhbHVlIHRhcmdldCBpbiBnZW5lcmFsLCBhbmQgdGhlIGZhY3QgdGhhdCBTeXprYWxsZXIgc3VwcG9ydHMgdGhpcyB0YXJnZXQgaXMgYW4gaW5kaWNhdGlvbiB0aGF0IGl0IGNhbiBiZSBkb25lLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgdGhlIGZ1bmN0aW9ucyB0aGF0IHdlcmUgY2hhbmdlZCB0byBzZWUgaWYgYW55IGFyZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcgZm9yIGZ1enppbmcuIEZ1bmN0aW9ucyBsaWtlIGBrdm1fczM5MF9rZXlvcGAsIGBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uYCwgYGt2bV9hcmNoX3ZjcHVfY3JlYXRlYCwgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYCwgYW5kIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAsIGFuZCB0aGUgbmV3IENQVSBkaXNwb3NhbC9jcmVhdGlvbiBmdW5jdGlvbnMgYXJlIGdvb2QgY2FuZGlkYXRlcy4gSSB3aWxsIGFsc28gY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyBmb3IgS1ZNIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNldHRpbmdzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQsIGFuZCBsZXZlcmFnZSB0b29scyBsaWtlIGBkZWZhdWx0X2FwaTpncmVwcGVyYCB0byBzZWFyY2ggZm9yIEtjb25maWcgb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vS2NvbmZpZz0xNz1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTE4LVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjE5OmNvbmZpZyBLVk1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0yMC1cdGRlZl90cmlzdGF0ZSB5XG4tLVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ2LVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjQ3OmNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtVc2Vyc3BhY2UgY29udHJvbGxlZCB2aXJ0dWFsIG1hY2hpbmVzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5NzcKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAxNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBLVk0gQ29uZmlndXJhdGlvbiBmb3IgczM5MCBBcmNoaXRlY3R1cmUqKgoKT2theSwgc28gdGhlIGNvbmZpZyBpbiBxdWVzdGlvbiBpcyBkZWZpbml0ZWx5IGBLVk1gLCBidXQgaGFuZyBvbiwgSSBhbHNvIHNlZSBgS1ZNX1MzOTBfVUNPTlRST0xgIHJlZmVyZW5jZWQgaW4gdGhlIHBhdGNoLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBrdm1faXNfdWNvbnRyb2wodmNwdS0mZ3Q7a3ZtKWAgZnVuY3Rpb24gY2FsbC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYEtWTV9TMzkwX1VDT05UUk9MYCBhY3R1YWxseSAqbmVlZHMqIHRvIGJlIGVuYWJsZWQuIE15IGluc3RpbmN0IGlzIHRoYXQgaXQgbWlnaHQuCgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayBgYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY2AuIEFoLCBoZXJlIGl0IGlzOiBgaWYgKEtWTV9CVUdfT04oa3ZtX2lzX3Vjb250cm9sKHZjcHUtJmd0O2t2bSksIHZjcHUtJmd0O2t2bSkpYC4gVGhpcyBsb29rcyBsaWtlIGEgY29uZGl0aW9uYWwgYmFzZWQgb24gYEtWTV9TMzkwX1VDT05UUk9MYCB3aXRoaW4gYW4gaW1wb3J0YW50IGludGVycnVwdCBoYW5kbGluZyBwYXRoLiBUaGUgYEtWTV9CVUdfT05gIG1hY3JvIHN0cm9uZ2x5IHN1Z2dlc3RzIHdlIG5lZWQgdGhpcyBjb25maWcsIG9yIHdlJiMzOTtsbCBnZXQgYSBmYXRhbCBlcnJvci4KCk5vdywgSSYjMzk7bGwgbW92ZSBvbiBhbmQgY2hlY2sgYGFyY2gvczM5MC9rdm0va3ZtLXMzOTAuY2AgdG8gc2VlIGhvdyBga3ZtX2FyY2hfdmNwdV9jcmVhdGVgIGlzIGJlaW5nIGhhbmRsZWQgaW4gdGhpcyBjb250ZXh0LiBJIGV4cGVjdCB0aGlzIHdpbGwgaGVscCBtZSBjb25maXJtIGFuZCBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2FyY2hfdmNwdV9jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTM3OTk9REVGSU5FX0ZSRUUoc2llX3BhZ2UsIHN0cnVjdCBzaWVfcGFnZSAqLCBpZiAoX1QpIGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykoX1QpKSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zODAwLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjM4MDE6aW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zODAyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzY0MQoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byB0aGUgS1ZNIFMzOTAgUGFyYXZpcnR1YWxpemF0aW9uIENQVSBDcmVhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IEtWTSBoYW5kbGVzIENQVSBjcmVhdGlvbiBzcGVjaWZpY2FsbHkgZm9yIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSwgcGFydGljdWxhcmx5IHRoZSBwYXJhdmlydHVhbGl6YXRpb24gYXNwZWN0cy4gVGhlIHBsYWNlIHRvIHN0YXJ0IGlzIGRlZmluaXRlbHkgYGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVgIGluIHRoZSBgYXJjaC9zMzkwL2t2bS9wdi5jYCBmaWxlLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBvciBhdCBsZWFzdCB3aGVyZSBpdCBzaG91bGQgYmUuIExldCYjMzk7cyBzZWUgaG93IHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBwYXJhdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgaXMgc2V0IHVwIGFuZCB3aGF0IGtpbmQgb2YgcmVzb3VyY2VzIGFyZSBiZWluZyBpbml0aWFsaXplZCBhdCB0aGUgQ1BVIGxldmVsLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIG9mIGEgdmlydHVhbCBDUFUgaW4gdGhpcyBjb250ZXh0OiBmcm9tIGluaXRpYWwgYWxsb2NhdGlvbiwgdG8gaXRzIHN0YXRlIGFuZCB3aGF0IHRoZSBjb2RlIGRvZXMgdG8gbWFrZSBpdCByZWFkeSB0byBydW4gZ3Vlc3RzLiBJIHdpbGwgbG9vayBmb3IgYW55IHN1YnRsZSBvcHRpbWl6YXRpb25zIGFuZCBlZGdlIGNhc2VzLCBiZWNhdXNlIHRoYXQgaXMgd2hlcmUgdGhlIGltcG9ydGFudCBkZXRhaWxzIG9mdGVuIHJlc2lkZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fczM5MF9wdl9jcmVhdGVfY3B1JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9wdi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vcHYuYz0yNjU9aW50IGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXG4tLVxuYXJjaC9zMzkwL2t2bS9wdi5jLTI4My1cbmFyY2gvczM5MC9rdm0vcHYuYzoyODQ6aW50IGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYylcbmFyY2gvczM5MC9rdm0vcHYuYy0yODUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTAzCgkJCQkJCQlvdXRwdXQ6IDQ5CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBLVk0gb24gczM5MCBBcmNoaXRlY3R1cmUqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggbWVtb3J5IHJlZ2lvbnMgdW5kZXIgS1ZNLCBzcGVjaWZpY2FsbHkgb24gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBmdW5jdGlvbiBJJiMzOTttIGludGVyZXN0ZWQgaW4gaXMgYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYC4gSSByZWNhbGwgaXQgYmVpbmcgZGVmaW5lZCBpbiBgYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jYCwgc28gdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBzdGFydC4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSB0aGUga2V5IHBpZWNlIGluIGFwcGx5aW5nIHVwZGF0ZXMgcmVsYXRlZCB0byBtZW1vcnkgdG8gdGhlIHN5c3RlbSBmb3IgdGhlIHZpcnR1YWwgbWFjaGluZXMuIEl0JiMzOTtzIGxpa2VseSBoYW5kbGluZyB0aGUgYWN0dWFsIGNvbW1pdG1lbnQgb2YgY2hhbmdlcyB0byB0aGUgZ3Vlc3QmIzM5O3MgbWVtb3J5IG1hcCBvciBzb21lIG90aGVyIGFyY2gtc3BlY2lmaWMgbWVtb3J5IG1hbmFnZW1lbnQgc3RydWN0dXJlIHdpdGhpbiB0aGUgS1ZNIGZyYW1ld29yay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtZW1vcnkgcmVnaW9uIGlzIGRlc2NyaWJlZCwgaG93IHRoZSBjb21taXQgYWN0dWFsbHkgaGFwcGVucyBhdCB0aGUgczM5MCBsZXZlbCwgYW5kIHdoYXQgaW1wbGljYXRpb25zIHRoZSBjb21taXQgaGFzIG9uIHRoZSByZXN0IG9mIHRoZSBLVk0gaW5mcmFzdHJ1Y3R1cmUuIFRoaXMgbWlnaHQgaW52b2x2ZSBsb29raW5nIGF0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBNTVUsIGhvdyBpdCBoYW5kbGVzIG1lbW9yeSBwcm90ZWN0aW9uLCBvciBldmVuIGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCBwYWdlIHNpemVzIGFuZCBtZW1vcnkgdHlwZXMgb24gdGhlIHMzOTAuIEkmIzM5O20gZXhwZWN0aW5nIGEgbG93LWxldmVsLCBwZXJmb3JtYW5jZS1jcml0aWNhbCBpbnRlcmFjdGlvbiBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTgwNz1zdGF0aWMgbG9uZyBjbW1hX2RfY291bnRfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU4MTktXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTgyMDp2b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01ODIxLVx0XHRcdFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqb2xkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDY0NwoJCQkJCQkJb3V0cHV0OiA1MgoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgYnJlYWtkb3duIG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEtWTSBTMzkwIE1pZ3JhdGlvbiBDb2RlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgbXkgaGVhZCBhcm91bmQgaG93IG1pZ3JhdGlvbiBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgS1ZNIHMzOTAgYXJjaGl0ZWN0dXJlLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIGBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uYCBsb2NhdGVkIGluIGBhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNgLiBUaGF0IGZ1bmN0aW9uIG5hbWUgaXRzZWxmIGlzIGEgcHJldHR5IGdvb2QgaW5kaWNhdG9yIG9mIHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBtaWdyYXRpb24gaW5pdGlhbGl6YXRpb24vY29uZmlndXJhdGlvbiBtaWdodCByZXNpZGUuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgdGhlIGNvcmUgZnVuY3Rpb24gd2hlcmUgdGhlIHByb2Nlc3MgaXMgc2V0IHVwLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBob3cgdGhlIHN0YXRlIGlzIGNhcHR1cmVkLCB0cmFuc2ZlcnJlZCwgYW5kIHJlc3RvcmVkLCBvciBhdCBsZWFzdCB0aGUgaW5pdGlhbCBzdGVwcyBvZiB0aGUgcHJvY2Vzcy4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQ7IHBhcnRpY3VsYXJseSBhbnkgUzM5MC1zcGVjaWZpYyBzdHJ1Y3R1cmVzLCByZWdpc3RlcnMgb3IgYXJjaGl0ZWN0dXJhbCBjb25zaWRlcmF0aW9ucyB0aGF0IGluZmx1ZW5jZSB0aGUgbWlncmF0aW9uIGZsb3cuIExldCYjMzk7cyBnZXQgcmVhZGluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MTI3MT1zdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTI5Ny1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMjk4OnN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTI5OS1cdFx0XHRcdCAgICAgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjA0ND1zdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3NldF9hdHRyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjA2MS1cdGNhc2UgS1ZNX1MzOTBfVk1fTUlHUkFUSU9OOlxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjIwNjI6XHRcdHJldCA9IGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb24oa3ZtLCBhdHRyKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMDYzLVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzMDUKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHlvdSBkZXNjcmliZWQ6CgoqKkV4YW1pbmluZyB0aGUgYGt2bV9zMzkwX2tleW9wYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBndXRzIG9mIHRoZSBLVk0gUzM5MCBjb2RlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGt2bV9zMzkwX2tleW9wYCBmdW5jdGlvbi4gSSYjMzk7bSBoZWFkaW5nIHN0cmFpZ2h0IHRvIGBhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNgIHRvIGZpbmQgaXQuIFRoaXMgZnVuY3Rpb24gaGFzIGxpa2VseSBiZWVuIGZsYWdnZWQsIG9yIEkgaGF2ZSBhIHF1ZXN0aW9uIGFib3V0IGl0cyBvcGVyYXRpb24sIGFuZCBuZWVkcyB0byBiZSBhbmFseXplZCBpbiBkZXRhaWwuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBvcGVyYXRpb25zIHJlbGF0ZWQgdG8ga2V5IGhhbmRsaW5nIG9yIHNvbWUgc2VjdXJpdHkgYXNwZWN0IHdpdGhpbiB0aGUgUzM5MCBhcmNoaXRlY3R1cmUmIzM5O3MgS1ZNIGltcGxlbWVudGF0aW9uLiBUaGlzIGNvdWxkIGJlIGFueXRoaW5nIGZyb20gY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb25zIHRvIG1hbmFnaW5nIGFjY2VzcyBjb250cm9sLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udHJvbCBmbG93LCB0aGUgZGF0YSBpdCBvcGVyYXRlcyBvbiwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBLVk0gZnJhbWV3b3JrLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIHRoZSBTMzkwIGhhcmR3YXJlLiBJJiMzOTttIGFudGljaXBhdGluZyBzb21lIFMzOTAtc3BlY2lmaWMgcmVnaXN0ZXIgdXNhZ2Ugb3IgcGVyaGFwcyBpbnRlcmFjdGlvbnMgd2l0aCBoYXJkd2FyZSBzZWN1cml0eSBtb2R1bGVzLCBhbmQgSSYjMzk7bSByZWFkeSB0byBwZWVsIGJhY2sgdGhlIGxheWVycyB0byB1bmRlcnN0YW5kIGhvdyBpdCBhbGwgZml0cyB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3MzOTBfa2V5b3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU1MD1zdGF0aWMgdm9pZCBfX2t2bV9zMzkwX2V4aXQodm9pZClcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTYxLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU2MjpzdGF0aWMgaW50IGt2bV9zMzkwX2tleW9wKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3Qga3ZtICprdm0sIGludCBvcCxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NjMtXHRcdFx0ICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuaW9uIHNrZXkgc2tleSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjkyNj1pbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMwNTgtXHRcdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMwNTk6XHRcdHN0cnVjdCBrdm1fczM5MF9rZXlvcCBrb3A7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzA2MC1cdFx0dW5pb24gc2tleSBza2V5O1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMDcxLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMwNzI6XHRcdHIgPSBrdm1fczM5MF9rZXlvcChtYywga3ZtLCBrb3Aub3BlcmF0aW9uLCBrb3AuZ3Vlc3RfYWRkciwgc2tleSk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzA3My1cdFx0a3ZtX3MzOTBfZnJlZV9tbXVfY2FjaGUobWMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjEyMQoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDE1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtWTSBzMzkwIEFyY2hpdGVjdHVyZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYGt2bV9hcmNoX3ZtX2lvY3RsYCBpcyB0aGUga2V5IGVudHJ5IHBvaW50IGZvciBga3ZtX3MzOTBfa2V5b3BgLiBUaGF0JiMzOTtzIHdoZXJlIHdlIHN0YXJ0LiBOb3csIHRoaW5raW5nIGFib3V0IHRoZSBjb3JlIGZ1bmN0aW9uYWxpdGllcywgbXkgYXR0ZW50aW9uIGlzIGRyYXduIHRvIGEgc3BlY2lmaWMgc2V0IG9mIGZ1bmN0aW9uczogYGt2bV9hcmNoX3ZjcHVfY3JlYXRlYCwgYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYCwgYGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25gLCBga3ZtX3MzOTBfa2V5b3BgIChvYnZpb3VzbHkhKSwgYGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVgLCBhbmQgYGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1YC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgSSBuZWVkIHRvIGRpc3NlY3QgZnVydGhlciB0byBmdWxseSBncmFzcCB0aGUgczM5MCBhcmNoaXRlY3R1cmUgd2l0aGluIEtWTS4KCkdpdmVuIHRoZWlyIGNvbnRleHQsIGl0JiMzOTtzIGFsc28gaW1wb3J0YW50IHRvIGhhdmUgYSBsb29rIGF0IGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAgYW5kIGBrdm1fYXJjaF92Y3B1X2lvY3RsYCB0byBnZXQgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb250cm9sIGZsb3cuIEkgbmVlZCB0byBzZWUgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoIHRoZSBvbmVzIEkmIzM5O3ZlIGxpc3RlZC4gVGhpcyBpcyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciBhIGRlZXBlciBkaXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fYXJjaF92Y3B1X2lvY3RsX3J1biYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzYwMT12b2lkIGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM2MTYtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzYxNzpcdC8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKCkgYW5kIGt2bV9hcmNoX3ZjcHVfaW9jdGwoKSAqL1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM2MTgtXHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaW5pdGlhbGl6ZWQsIHRydWUpO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01MDAxPXN0YXRpYyB2b2lkIHN0b3JlX3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01MDIxLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjUwMjI6aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01MDIzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY5MjYKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggYGt2bV9hcmNoX3ZjcHVfaW9jdGxgLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZSwgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEtWTSBBcmNoaXRlY3R1cmFsIFZDUFUgaW9jdGwqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIGRvd24gYGt2bV9hcmNoX3ZjcHVfaW9jdGxgLiBJbW1lZGlhdGVseSwgSSBzZWUgdGhpcyBhcyBhIGNyaXRpY2FsIGVudHJ5IHBvaW50IGZvciBhcmNoaXRlY3R1cmFsIGludGVyYWN0aW9ucyB3aXRoaW4gYSBLVk0gdmlydHVhbCBDUFUuIFRoaXMgZnVuY3Rpb24sIEkgc3VybWlzZSwgaGFuZGxlcyB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlIGh5cGVydmlzb3ImIzM5O3MgZ2VuZXJpYyBWQ1BVIG1hbmFnZW1lbnQgYW5kIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgcmVxdWlyZW1lbnRzIG9mIHRoZSBndWVzdC4gVGhhdCBtZWFucyB0aGlzIGlzIHdoZXJlIHRoZSAqcmVhbCogbWFnaWMgaGFwcGVucywgd2hlcmUgdGhlIEtWTSBjb2RlIGFkYXB0cyB0byB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBhcmNoaXRlY3R1cmUgYW5kIGl0cyBudWFuY2VzLgoKTXkgaW1tZWRpYXRlIGFzc3VtcHRpb24gaXMgdGhhdCB0aGlzIGlvY3RsIGhhbmRsZXIgYWN0cyBhcyBhIGNlbnRyYWwgZGlzcGF0Y2hlci4gSXQmIzM5O3MgdGhlIGdhdGVrZWVwZXIsIHJlY2VpdmluZyBpb2N0bCBjb21tYW5kcyBmcm9tIHRoZSB1c2VyIHNwYWNlIChvciBmcm9tIEtWTSYjMzk7cyBvd24gaW50ZXJuYWwgY29tcG9uZW50cywgZm9yIHNvbWUgY29tbWFuZHMpLiBCYXNlZCBvbiB0aGUgc3BlY2lmaWMgY29tbWFuZCBjb2RlIHByb3ZpZGVkIGluIHRoZSBgaW9jdGxgIGNhbGwsIGl0IHRoZW4gZmlndXJlcyBvdXQgd2hhdCBhcmNoaXRlY3R1cmFsIGFjdGlvbiBuZWVkcyB0byBiZSB0YWtlbi4gVGhpcyBjb3VsZCByYW5nZSBmcm9tIGNvbmZpZ3VyaW5nIHNwZWNpZmljIENQVSBmZWF0dXJlcyB0byBoYW5kbGluZyBndWVzdCBtZW1vcnkgbWFuYWdlbWVudCBpbiBhbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgd2F5LgoKSSBiZXQgaXQgaGFzIGEgbGFyZ2UgYHN3aXRjaGAgc3RhdGVtZW50IG9yIGEgbG9va3VwIHRhYmxlLCBlc3NlbnRpYWxseSBhICYjMzQ7Y2FzZSYjMzQ7IHN0YXRlbWVudCwgdGhhdCBtYXBzIHRoZSBpb2N0bCBjb21tYW5kIHRvIHRoZSByZWxldmFudCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZnVuY3Rpb24uIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpbmdzIGxpa2UgaW50ZXJjZXB0aW5nIGFuZCBlbXVsYXRpbmcgc3BlY2lhbCBpbnN0cnVjdGlvbnMsIG1hbmFnaW5nIGNvbnRyb2wgcmVnaXN0ZXJzLCBoYW5kbGluZyBtb2RlbC1zcGVjaWZpYyByZWdpc3RlcnMgKE1TUnMpLCBwZXJoYXBzIHNldHRpbmcgdXAgbmVzdGVkIHBhZ2luZyBzdHJ1Y3R1cmVzIGlmIGFwcHJvcHJpYXRlLCBvciBldmVuIG1hbmFnaW5nIHNwZWNpZmljIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgdW5pdHMuCgpGdXJ0aGVybW9yZSwgSSBleHBlY3Qgc3Ryb25nIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zIGFyZSBlbXBsb3llZCBoZXJlLiBUaGlzIGZ1bmN0aW9uIGlzIHVuZG91YnRlZGx5IG11bHRpLXRocmVhZGVkOyBpdCYjMzk7cyBhIGNyaXRpY2FsIHNlY3Rpb24gd2l0aGluIEtWTS4gSSYjMzk7ZCBleHBlY3QgbG9ja3Mgb3IgYXRvbWljIG9wZXJhdGlvbnMgdG8gZW5zdXJlIGRhdGEgY29uc2lzdGVuY3ksIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggc2hhcmVkIFZDUFUgc3RhdGUuIFRoaXMgd291bGQgYmUgbmVjZXNzYXJ5IHRvIHByb3RlY3QgdGhlIFZDUFUgc3RhdGUgZnJvbSBzaW11bHRhbmVvdXMgYWNjZXNzZXMgYnkgZGlmZmVyZW50IHRocmVhZHMgb3IgZXZlbiBkaWZmZXJlbnQgdkNQVXMuIEFsc28sIHRoZXJlJiMzOTtzIGFsd2F5cyB0aGUgY29uY2VybiBvZiBkZWFkbG9ja3Mgd2hlbiBkZWFsaW5nIHdpdGggc3luY2hyb25pemF0aW9uIGFuZCBuZXN0ZWQgb3BlcmF0aW9ucywgc28gdGhlcmUgd2lsbCBuZWVkIHRvIGJlIHdlbGwtY29uc2lkZXJlZCBsb2NrIG9yZGVyaW5nLgoKQWxzbywgdGhlIGVycm9yIGhhbmRsaW5nLCBJIGltYWdpbmUsIGlzIGEgY29tcGxleCBhZmZhaXIsIGdpdmVuIHRoZSBpbnRyaWNhdGUgbmF0dXJlIG9mIHRoZSBwb3NzaWJsZSBmYWlsdXJlIG1vZGVzLiBJIG5lZWQgdG8gaGFuZGxlIGJvdGggZ2VuZXJhbCBLVk0gZXJyb3JzIGFuZCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZXJyb3JzLCBhbmQgdGhlbiB0cmFuc2xhdGUgdGhlbSBiYWNrIGludG8gdXNlci1mcmllbmRseSBlcnJvciBjb2RlcyBvciBpbmZvcm1hdGlvbiB0aGF0IGNhbiBiZSBsb2dnZWQgZWZmZWN0aXZlbHkuCgpUaGUgZGVzaWduIG9mIGBrdm1fYXJjaF92Y3B1X2lvY3RsYCBzaG91bGQgYmUgbW9kdWxhciwgY2xlYXJseS4gSSBob3BlIHRvIHNlZSBpdCBpcyB3ZWxsLXN0cnVjdHVyZWQgaW4gb3JkZXIgdG8gYWxsb3cgY2xlYW4gc2VwYXJhdGlvbiBvZiBjb25jZXJuIGFuZCBlYXNpZXIgbWFpbnRlbmFuY2UsIHdpdGggc3BlY2lmaWMgaGFuZGxlcnMgZm9yIGRpZmZlcmVudCBpb2N0bCBvcGVyYXRpb25zLCBlYWNoIHRhaWxvcmVkIHRvIHRoZSBhcmNoaXRlY3R1cmFsIG5lZWRzLiBUaGlzIGZ1bmN0aW9uLCB3aGVuIGRvbmUgcmlnaHQsIGlzIGEgbWFzdGVycGllY2Ugb2YgYWJzdHJhY3Rpb24sIGJyaWRnaW5nIHRoZSBnZW5lcmFsIEtWTSBjb3JlIHdpdGggdGhlIGlkaW9zeW5jcmFzaWVzIG9mIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2FyY2hfdmNwdV9pb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzYwMT12b2lkIGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM2MTYtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzYxNzpcdC8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKCkgYW5kIGt2bV9hcmNoX3ZjcHVfaW9jdGwoKSAqL1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM2MTgtXHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaW5pdGlhbGl6ZWQsIHRydWUpO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zOTQ5PWludCBrdm1fYXJjaF92Y3B1X3Nob3VsZF9raWNrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzk1NS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozOTU2OnN0YXRpYyBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfb25lX3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzk1Ny1cdFx0XHRcdFx0ICAgc3RydWN0IGt2bV9vbmVfcmVnICpyZWcpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQwMDQtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDAwNTpzdGF0aWMgaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X29uZV9yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQwMDYtXHRcdFx0XHRcdCAgIHN0cnVjdCBrdm1fb25lX3JlZyAqcmVnKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MDU3LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQwNTg6c3RhdGljIHZvaWQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ub3JtYWxfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQwNTkte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MDY5LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQwNzA6c3RhdGljIHZvaWQga3ZtX2FyY2hfdmNwdV9pb2N0bF9pbml0aWFsX3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MDcxLXtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MDcyLVx0LyogSW5pdGlhbCByZXNldCBpcyBhIHN1cGVyc2V0IG9mIHRoZSBub3JtYWwgcmVzZXQgKi9cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MDczOlx0a3ZtX2FyY2hfdmNwdV9pb2N0bF9ub3JtYWxfcmVzZXQodmNwdSk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDA3NC1cbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDExMy1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MTE0OnN0YXRpYyB2b2lkIGt2bV9hcmNoX3ZjcHVfaW9jdGxfY2xlYXJfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQxMTUte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTE4LVx0LyogQ2xlYXIgcmVzZXQgaXMgYSBzdXBlcnNldCBvZiB0aGUgaW5pdGlhbCByZXNldCAqL1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQxMTk6XHRrdm1fYXJjaF92Y3B1X2lvY3RsX2luaXRpYWxfcmVzZXQodmNwdSk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDEyMC1cbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDEyOS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MTMwOmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9yZWdzICpyZWdzKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQxMzEte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTM3LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQxMzg6aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZ2V0X3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3JlZ3MgKnJlZ3MpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDEzOS17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQxNDUtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDE0NjppbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfc3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQxNDctXHRcdFx0XHQgIHN0cnVjdCBrdm1fc3JlZ3MgKnNyZWdzKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTU3LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQxNTg6aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZ2V0X3NyZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTU5LVx0XHRcdFx0ICBzdHJ1Y3Qga3ZtX3NyZWdzICpzcmVncylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDE2OS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MTcwOmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9mcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2ZwdSAqZnB1KVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQxNzEte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTg0LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQxODU6aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZ2V0X2ZwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZnB1ICpmcHUpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDE4Ni17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQxOTktXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDIwMDpzdGF0aWMgaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X2luaXRpYWxfcHN3KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgcHN3X3QgcHN3KVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQyMDEte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MjEyLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQyMTM6aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfdHJhbnNsYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MjE0LVx0XHRcdFx0ICBzdHJ1Y3Qga3ZtX3RyYW5zbGF0aW9uICp0cilcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDIyMi1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MjIzOmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9ndWVzdF9kZWJ1ZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDIyNC1cdFx0XHRcdFx0c3RydWN0IGt2bV9ndWVzdF9kZWJ1ZyAqZGJnKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MjY0LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQyNjU6aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZ2V0X21wc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQyNjYtXHRcdFx0XHQgICAgc3RydWN0IGt2bV9tcF9zdGF0ZSAqbXBfc3RhdGUpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQyNzktXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDI4MDppbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfbXBzdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDI4MS1cdFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX21wX3N0YXRlICptcF9zdGF0ZSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTAwMT1zdGF0aWMgdm9pZCBzdG9yZV9yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTAyMS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1MDIyOmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTAyMy17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU0ODE9c3RhdGljIGludCBrdm1fczM5MF9oYW5kbGVfcHZfdmNwdV9kdW1wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTUyMi1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1NTIzOmxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NTI0LVx0XHRcdCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NTQ5LVx0XHRcdGJyZWFrO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU1NTA6XHRcdHIgPSBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9pbml0aWFsX3Bzdyh2Y3B1LCBwc3cpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU1NTEtXHRcdGJyZWFrO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NTU0LVx0XHRyID0gMDtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1NTU1Olx0XHRrdm1fYXJjaF92Y3B1X2lvY3RsX2NsZWFyX3Jlc2V0KHZjcHUpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU1NTYtXHRcdGlmIChrdm1fczM5MF9wdl9jcHVfaXNfcHJvdGVjdGVkKHZjcHUpKSB7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU1NjQtXHRcdHIgPSAwO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU1NjU6XHRcdGt2bV9hcmNoX3ZjcHVfaW9jdGxfaW5pdGlhbF9yZXNldCh2Y3B1KTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NTY2LVx0XHRpZiAoa3ZtX3MzOTBfcHZfY3B1X2lzX3Byb3RlY3RlZCh2Y3B1KSkge1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NTc1LVx0XHRyID0gMDtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1NTc2Olx0XHRrdm1fYXJjaF92Y3B1X2lvY3RsX25vcm1hbF9yZXNldCh2Y3B1KTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NTc3LVx0XHRpZiAoa3ZtX3MzOTBfcHZfY3B1X2lzX3Byb3RlY3RlZCh2Y3B1KSkge1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NTkzLVx0XHRpZiAoaW9jdGwgPT0gS1ZNX1NFVF9PTkVfUkVHKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU1OTQ6XHRcdFx0ciA9IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X29uZV9yZWcodmNwdSwgXHUwMDI2cmVnKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NTk1LVx0XHRlbHNlXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTU5NjpcdFx0XHRyID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfb25lX3JlZyh2Y3B1LCBcdTAwMjZyZWcpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU1OTctXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDg3MwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNIEVudHJ5IFBvaW50cyBmb3IgUzM5MCBBcmNoaXRlY3R1cmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBrZXkgZW50cnkgcG9pbnRzIGZvciBLVk0gb24gdGhlIFMzOTAgYXJjaGl0ZWN0dXJlLiBJbml0aWFsbHksIEkgam90dGVkIGRvd24gYGt2bV9hcmNoX3ZjcHVfaW9jdGxgIGFuZCBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gLiBIbW0sIG9uIHNlY29uZCB0aG91Z2h0LCBga3ZtX2FyY2hfdmNwdV9pb2N0bGAgaXMgYSBiaXQgdG9vIGdlbmVyaWMsIGEgc3RhbmRhcmQgS1ZNIEFQSSBmdW5jdGlvbi4gSXQmIzM5O3Mgbm90ICp3cm9uZyogdG8gbGlzdCBpdCwgYnV0IGl0IG1pZ2h0IG5vdCBiZSB0aGUgbW9zdCBzcGVjaWZpYyBvciBpbnRlcmVzdGluZyBvbmUgaW4gdGhpcyBjb250ZXh0LgoKTm93LCBga3ZtX2FyY2hfdmNwdV9jcmVhdGVgIOKAkyB0aGF0JiMzOTtzIGEgZ29vZCBvbmUsIHRoYXQmIzM5O3MgZXhhY3RseSB0aGUga2luZCBvZiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZW50cnkgcG9pbnQgSSYjMzk7bSBhZnRlci4gU2ltaWxhcmx5LCBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gIGlzIGRlZmluaXRlbHkgcmVsZXZhbnQuIEFuZCBtb3Zpbmcgb24gdG8gUzM5MCBzcGVjaWZpY3MsIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YCBhbmQgYGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1YCBhcmUgZXhjZWxsZW50IGNob2ljZXMg4oCTIHRoZXkmIzM5O3JlIGNvcmUgdG8gdGhlIHBvd2VyIHZpcnR1YWxpemF0aW9uIGFzcGVjdC4gIGBrdm1fczM5MF9rZXlvcGAgYWxzbyBzZWVtcyByZWxldmFudC4gVGhlbiB0aGVyZSYjMzk7cyBga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbmAgLSB5ZXMsIHRoYXQmIzM5O3MgZ29vZCB0b28sIGZvciBtaWdyYXRpb24gaGFuZGxpbmcuCgpMZXQmIzM5O3Mgbm93IGRpZyBkZWVwZXIsIEkgd2lsbCBjaGVjayBpbiBgYXJjaC9zMzkwL2t2bS9wcml2LmNgIHRvIHNlZSBpZiBJIGNhbiBmaW5kIGBoYW5kbGVfcnJiZWAgb3IgYGhhbmRsZV9lc3NhYC4gSSYjMzk7bSB0cnlpbmcgdG8gZ2V0IGEgZnVsbCBwaWN0dXJlIG9mIHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgZHJpdmUgdGhlIFMzOTAgS1ZNIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoYW5kbGVfcnJiZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vcHJpdi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vcHJpdi5jPTI1Nz1zdGF0aWMgaW50IGhhbmRsZV9pc2tlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0yODgtXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzoyODk6c3RhdGljIGludCBoYW5kbGVfcnJiZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0yOTAte1xuLS1cbmFyY2gvczM5MC9rdm0vcHJpdi5jPTk1OT1pbnQga3ZtX3MzOTBfaGFuZGxlX2IyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy05NzktXHRjYXNlIDB4MmE6XG5hcmNoL3MzOTAva3ZtL3ByaXYuYzo5ODA6XHRcdHJldHVybiBoYW5kbGVfcnJiZSh2Y3B1KTtcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTk4MS1cdGNhc2UgMHgyYjpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE3MjIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiAmIzM5O2hhbmRsZV9ycmJlJiMzOTsqKgoKQWxyaWdodCwgbG9va2luZyBhdCB0aGF0IGZ1bmN0aW9uIG5hbWUsIGBoYW5kbGVfcnJiZWAsIG15IGltbWVkaWF0ZSBhc3Nlc3NtZW50IGlzIHRoYXQgaXQgc2hvd3MgcHJvbWlzZSBhcyBhIGZvY3VzZWQgZnVuY3Rpb24uIFRoZSBuYW1lIGl0c2VsZiBzdWdnZXN0cyBhIGRpc3RpbmN0IGFuZCBsaWtlbHkgaW1wb3J0YW50IHJlc3BvbnNpYmlsaXR5IHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0uIEkmIzM5O20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggcG90ZW50aWFsIHNjZW5hcmlvcyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBzZWUgdGhpcyBmdW5jdGlvbiB1c2VkLiBCYXNlZCBvbiB0aGUgbmFtZSBhbG9uZSwgSSYjMzk7bSBpbmZlcnJpbmcgaXQgcHJvYmFibHkgcGxheXMgYSBjcnVjaWFsIHJvbGUgaW4gbWFuYWdpbmcgc29tZSBhc3BlY3Qgb2YsIHBvc3NpYmx5IHJlbGF0ZWQgdG8gcmVzb3VyY2UgcmViYWxhbmNpbmcsIGRhdGEgdmFsaWRhdGlvbiwgb3IgZXh0ZXJuYWwgaW50ZXJmYWNlcy4gVGhlICYjMzQ7UlImIzM0OyBwb3RlbnRpYWxseSBzdGFuZHMgZm9yICYjMzQ7UmVzb3VyY2UgUmViYWxhbmNpbmcmIzM0OyBvciAmIzM0O1JlbGlhYmxlIFJlbW90ZSYjMzQ7LCB0aGUgJiMzNDtCRSYjMzQ7IGlzIGxpa2VseSAmIzM0O0JhY2tlbmQmIzM0OyBvciAmIzM0O0J1c2luZXNzIEVudGl0eSYjMzQ7LiBGdXJ0aGVyIGludmVzdGlnYXRpb24gd291bGQgYmUgbmVlZGVkIG9mIGNvdXJzZSwgYnV0IHRoZSBuYW1lIGlzIHF1aXRlIHRlbGxpbmcgYW5kIHByb3ZpZGVzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYSBkZWVwZXIgZGl2ZS4gVGhlIGZhY3QgdGhhdCBzb21lb25lIGhhcyBpZGVudGlmaWVkIHRoaXMgZnVuY3Rpb24gdG8gcmV2aWV3IGlzIGEgZ29vZCBpbmRpY2F0b3Igb2YgaXRzIHNpZ25pZmljYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGFuZGxlX2Vzc2EmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL3ByaXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL3ByaXYuYz0xMTkxPXN0YXRpYyB2b2lkIF9lc3NhX2NsZWFyX2Nicmwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nICpjYnJsLCBpbnQgbGVuKVxuLS1cbmFyY2gvczM5MC9rdm0vcHJpdi5jLTEyMTYtXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzoxMjE3OnN0YXRpYyBpbnQgaGFuZGxlX2Vzc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTIxOC17XG4tLVxuYXJjaC9zMzkwL2t2bS9wcml2LmM9MTI4ND1pbnQga3ZtX3MzOTBfaGFuZGxlX2I5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0xMjkzLVx0Y2FzZSAweGFiOlxuYXJjaC9zMzkwL2t2bS9wcml2LmM6MTI5NDpcdFx0cmV0dXJuIGhhbmRsZV9lc3NhKHZjcHUpO1xuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTI5NS1cdGNhc2UgMHhhZjpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIyNTMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRm9jdXNpbmcgb24gSW50ZXJydXB0IEluamVjdGlvbiBpbiB0aGUgczM5MCBLVk0gQ29udGV4dCoqCgpSaWdodCwgYGhhbmRsZV9lc3NhYCBpcyBkZWZpbml0ZWx5IGFub3RoZXIgc3Ryb25nIGNhbmRpZGF0ZSBmb3IgYSBmb2N1c2VkIGZ1bmN0aW9uIGhlcmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBjb25zaWRlcmluZyBhbGwgcmVsZXZhbnQgZW50cnkgcG9pbnRzLiBPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29kZSBub3cuIE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBhcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGluamVjdGlvbiBhbmQgY2xlYXJpbmcgbWVjaGFuaXNtcyBmb3IgZXh0ZXJuYWwgY2FsbHMgd2l0aGluIHRoZSBzMzkwIEtWTSBlbnZpcm9ubWVudC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgYHNjYV9pbmplY3RfZXh0X2NhbGxgIGFuZCBgc2NhX2NsZWFyX2V4dF9jYWxsYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgaHlwZXJ2aXNvciBpbnRlcmFjdHMgd2l0aCBndWVzdHMgcmVnYXJkaW5nIGV4dGVybmFsIGludGVycnVwdHMgYW5kIGV2ZW50cywgYW5kIHNob3VsZCBwcm92aWRlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgZXNzYSBpcyBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzY2FfaW5qZWN0X2V4dF9jYWxsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTQ1PXN0YXRpYyBpbnQgc2NhX2V4dF9jYWxsX3BlbmRpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgKnNyY19pZClcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTYyLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzo2MzpzdGF0aWMgaW50IHNjYV9pbmplY3RfZXh0X2NhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc3JjX2lkKVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy02NC17XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0xNTA1PXN0YXRpYyBpbnQgX19pbmplY3RfZXh0Y2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9pcnEgKmlycSlcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE1MjEtXHRpZiAoa3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkgXHUwMDI2XHUwMDI2ICFrdm1fczM5MF9wdl9jcHVfZ2V0X2hhbmRsZSh2Y3B1KSlcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTUyMjpcdFx0cmV0dXJuIHNjYV9pbmplY3RfZXh0X2NhbGwodmNwdSwgc3JjX2lkKTtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTUyMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI4NDMKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDoKCioqQ29uc2lkZXJpbmcgdGhlIEJlc3QgQXBwcm9hY2ggZm9yIEV4dGVybmFsIENhbGxzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgd2UmIzM5O3JlIGhhbmRsaW5nIHRoZXNlIGV4dGVybmFsIGNhbGxzLCBhbmQgSSYjMzk7bSByZWFsaXppbmcgYHNjYV9pbmplY3RfZXh0X2NhbGxgIGlzIHN0YXRpYy4gVGhhdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayB3ZSBjYW4gcHJvYmFibHkgZG8gYmV0dGVyLiBMZXQmIzM5O3Mgc2VlLi4uIG1heWJlIGBfX2luamVjdF9leHRjYWxsYCBvciBga3ZtX3MzOTBfaW5qZWN0X3ZjcHVgIHdvdWxkIGJlIG1vcmUgYXBwcm9wcmlhdGUuIEJ1dCBoYW5nIG9uLCBgX19pbmplY3RfZXh0Y2FsbGAgaXMgYWxzbyBzdGF0aWMhIEFscmlnaHQsIHNlZW1zIGxpa2UgdGhlIG9wdGlvbnMgYXJlIG5hcnJvd2luZy4gTGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBga3ZtX3MzOTBfaW5qZWN0X3ZjcHVgLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoYXQgb25lIGFuZCBzZWUgaWYgaXQmIzM5O3MgdGhlIHJpZ2h0IGZpdCBmb3IgdGhlIGpvYi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3MzOTBfaW5qZWN0X3ZjcHUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MTQ0Nj1zdGF0aWMgaW50IF9faW5qZWN0X3Byb2coc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfaXJxICppcnEpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNDUxLVx0VkNQVV9FVkVOVCh2Y3B1LCAzLCBcJiMzNDtpbmplY3Q6IHByb2dyYW0gaXJxIGNvZGUgMHgleFwmIzM0OywgaXJxLVx1MDAzZXUucGdtLmNvZGUpO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxNDUyOlx0dHJhY2Vfa3ZtX3MzOTBfaW5qZWN0X3ZjcHUodmNwdS1cdTAwM2V2Y3B1X2lkLCBLVk1fUzM5MF9QUk9HUkFNX0lOVCxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTQ1My1cdFx0XHRcdCAgIGlycS1cdTAwM2V1LnBnbS5jb2RlLCAwKTtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTE0ODg9c3RhdGljIGludCBfX2luamVjdF9wZmF1bHRfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9pcnEgKmlycSlcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE0OTQtXHRcdCAgIGlycS1cdTAwM2V1LmV4dC5leHRfcGFyYW1zMik7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjE0OTU6XHR0cmFjZV9rdm1fczM5MF9pbmplY3RfdmNwdSh2Y3B1LVx1MDAzZXZjcHVfaWQsIEtWTV9TMzkwX0lOVF9QRkFVTFRfSU5JVCxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTQ5Ni1cdFx0XHRcdCAgIGlycS1cdTAwM2V1LmV4dC5leHRfcGFyYW1zLFxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MTUwNT1zdGF0aWMgaW50IF9faW5qZWN0X2V4dGNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfaXJxICppcnEpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNTEzLVx0XHQgICBzcmNfaWQpO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxNTE0Olx0dHJhY2Vfa3ZtX3MzOTBfaW5qZWN0X3ZjcHUodmNwdS1cdTAwM2V2Y3B1X2lkLCBLVk1fUzM5MF9JTlRfRVhURVJOQUxfQ0FMTCxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTUxNS1cdFx0XHRcdCAgIHNyY19pZCwgMCk7XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0xNTMxPXN0YXRpYyBpbnQgX19pbmplY3Rfc2V0X3ByZWZpeChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9pcnEgKmlycSlcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE1MzgtXHRcdCAgIGlycS1cdTAwM2V1LnByZWZpeC5hZGRyZXNzKTtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTUzOTpcdHRyYWNlX2t2bV9zMzkwX2luamVjdF92Y3B1KHZjcHUtXHUwMDNldmNwdV9pZCwgS1ZNX1MzOTBfU0lHUF9TRVRfUFJFRklYLFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNTQwLVx0XHRcdFx0ICAgaXJxLVx1MDAzZXUucHJlZml4LmFkZHJlc3MsIDApO1xuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MTU1MT1zdGF0aWMgaW50IF9faW5qZWN0X3NpZ3Bfc3RvcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9pcnEgKmlycSlcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE1NTctXHR2Y3B1LVx1MDAzZXN0YXQuaW5qZWN0X3N0b3Bfc2lnbmFsJiM0MzsmIzQzOztcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTU1ODpcdHRyYWNlX2t2bV9zMzkwX2luamVjdF92Y3B1KHZjcHUtXHUwMDNldmNwdV9pZCwgS1ZNX1MzOTBfU0lHUF9TVE9QLCAwLCAwKTtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTU1OS1cbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTE1Nzc9c3RhdGljIGludCBfX2luamVjdF9zaWdwX3Jlc3RhcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTU4Mi1cdFZDUFVfRVZFTlQodmNwdSwgMywgXCYjMzQ7JXNcJiMzNDssIFwmIzM0O2luamVjdDogcmVzdGFydCBpbnRcJiMzNDspO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxNTgzOlx0dHJhY2Vfa3ZtX3MzOTBfaW5qZWN0X3ZjcHUodmNwdS1cdTAwM2V2Y3B1X2lkLCBLVk1fUzM5MF9SRVNUQVJULCAwLCAwKTtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTU4NC1cbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTE1ODk9c3RhdGljIGludCBfX2luamVjdF9zaWdwX2VtZXJnZW5jeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNTk2LVx0XHQgICBpcnEtXHUwMDNldS5lbWVyZy5jb2RlKTtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTU5NzpcdHRyYWNlX2t2bV9zMzkwX2luamVjdF92Y3B1KHZjcHUtXHUwMDNldmNwdV9pZCwgS1ZNX1MzOTBfSU5UX0VNRVJHRU5DWSxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTU5OC1cdFx0XHRcdCAgIGlycS1cdTAwM2V1LmVtZXJnLmNvZGUsIDApO1xuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MTYxMD1zdGF0aWMgaW50IF9faW5qZWN0X21jaGsoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfaXJxICppcnEpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNjE3LVx0XHQgICBpcnEtXHUwMDNldS5tY2hrLm1jaWMpO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxNjE4Olx0dHJhY2Vfa3ZtX3MzOTBfaW5qZWN0X3ZjcHUodmNwdS1cdTAwM2V2Y3B1X2lkLCBLVk1fUzM5MF9NQ0hLLCAwLFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNjE5LVx0XHRcdFx0ICAgaXJxLVx1MDAzZXUubWNoay5tY2ljKTtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTE2NDI9c3RhdGljIGludCBfX2luamVjdF9ja2Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTY0Ny1cdFZDUFVfRVZFTlQodmNwdSwgMywgXCYjMzQ7JXNcJiMzNDssIFwmIzM0O2luamVjdDogY2xvY2sgY29tcGFyYXRvciBleHRlcm5hbFwmIzM0Oyk7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjE2NDg6XHR0cmFjZV9rdm1fczM5MF9pbmplY3RfdmNwdSh2Y3B1LVx1MDAzZXZjcHVfaWQsIEtWTV9TMzkwX0lOVF9DTE9DS19DT01QLFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNjQ5LVx0XHRcdFx0ICAgMCwgMCk7XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0xNjU2PXN0YXRpYyBpbnQgX19pbmplY3RfY3B1X3RpbWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE2NjEtXHRWQ1BVX0VWRU5UKHZjcHUsIDMsIFwmIzM0OyVzXCYjMzQ7LCBcJiMzNDtpbmplY3Q6IGNwdSB0aW1lciBleHRlcm5hbFwmIzM0Oyk7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjE2NjI6XHR0cmFjZV9rdm1fczM5MF9pbmplY3RfdmNwdSh2Y3B1LVx1MDAzZXZjcHVfaWQsIEtWTV9TMzkwX0lOVF9DUFVfVElNRVIsXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE2NjMtXHRcdFx0XHQgICAwLCAwKTtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTIxMDM9c3RhdGljIGludCBkb19pbmplY3RfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9pcnEgKmlycSlcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIxNDctXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjIxNDg6aW50IGt2bV9zMzkwX2luamVjdF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zMzkwX2lycSAqaXJxKVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMTQ5LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTMwNzg9dm9pZCBrdm1fczM5MF9yZWluamVjdF9tYWNoaW5lX2NoZWNrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTMxMTMtXHRcdGlycS50eXBlID0gS1ZNX1MzOTBfTUNISztcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MzExNDpcdFx0cmMgPSBrdm1fczM5MF9pbmplY3RfdmNwdSh2Y3B1LCBcdTAwMjZpcnEpO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMTE1LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTIxMwoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbiwgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqQW5hbHl6aW5nIEtWTS9zMzkwIEZhdWx0IEluamVjdGlvbioqCgpBbHJpZ2h0LCBsb29raW5nIGF0IHRoaXMsIGBrdm1fczM5MF9pbmplY3RfdmNwdWAgc2VlbXMgbGlrZSBhIHNvbGlkIGVudHJ5IHBvaW50IGZvciBmb2N1c2luZyBteSBhbmFseXNpcy4gSXQmIzM5O3Mgb2Z0ZW4gdGhlIGNhc2UgdGhhdCBpbmplY3Rpb24gcG9pbnRzIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBob29rcyB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIHByb2Nlc3MuCgpOb3csIHdoZXJlIGRvIEkgZmluZCB0aGUgYWN0dWFsIGZhdWx0IGhhbmRsaW5nIGxvZ2ljPyBHaXZlbiB0aGUgY29udGV4dCBvZiBLVk0gb24gczM5MCwgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCBzb21ldGhpbmcgcmVsZXZhbnQgaW4gdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb2RlLiBMZXQmIzM5O3MgZGVsdmUgaW50byBgYXJjaC9zMzkwL2t2bS9mYXVsdGluLmNgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuYCB3aXRoaW4gdGhhdCBmaWxlLiBUaGF0IGZ1bmN0aW9uIG5hbWUgc3VnZ2VzdHMgaXQgd2lsbCBiZSB0aGUgY29yZSBvZiB0aGUgR3Vlc3QgRnJhbWUgTnVtYmVyIChHRk4pIGZhdWx0LWluIHByb2Nlc3MsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJJiMzOTttIGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyBmb3IgdGhpcyBwcm9qZWN0LiBUaGlzIHNob3VsZCByZXZlYWwgdGhlIG1lY2hhbmlzbXMgcmVsYXRlZCB0byBmYXVsdCBpbmplY3Rpb24gd2l0aGluIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSYjMzk7cyBLVk0gaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9zMzkwX2ZhdWx0aW5fZ2ZuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9mYXVsdGluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9mYXVsdGluLmM9MTU9Ym9vbCBrdm1fYXJjaF9zZXR1cF9hc3luY19wZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuLS1cbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5jLTE3LS8qXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYzoxODogKiBrdm1fczM5MF9mYXVsdGluX2dmbigpIC0gaGFuZGxlIGEgZGF0IGZhdWx0LlxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMtMTktICogQHZjcHU6IFRoZSB2Q1BVIHdob3NlIGdtYXAgaXMgdG8gYmUgZml4ZWQgdXAsIG9yIE5VTEwgaWYgb3BlcmF0aW5nIG9uIHRoZSBWTS5cbi0tXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYy0zMi0gKi9cbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5jOjMzOmludCBrdm1fczM5MF9mYXVsdGluX2dmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGd1ZXN0X2ZhdWx0ICpmKVxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMtMzQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTgwNgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBLVk0vczM5MCBDb2RlIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGVzZSBjaGFuZ2VzIGFuZCBga3ZtX3MzOTBfZmF1bHRpbl9nZm5gIHNlZW1zIGxpa2UgYSBnb29kIGVudHJ5IHBvaW50LiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCB0aGUgbGF5IG9mIHRoZSBsYW5kIGZpcnN0LiBJJiMzOTtsbCBzdW1tYXJpemUgdGhlc2UgZm9jdXMgZnVuY3Rpb25zIHRoYXQgc2VlbSByZWxldmFudCB0byB0aGUgcGF0Y2g6IGBrdm1fYXJjaF92Y3B1X2NyZWF0ZWAsIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAsIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YCwgYGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1YCwgYGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25gLCBga3ZtX3MzOTBfa2V5b3BgLCBgaGFuZGxlX3JyYmVgLCBgaGFuZGxlX2Vzc2FgLCBhbmQgb2YgY291cnNlLCBga3ZtX3MzOTBfZmF1bHRpbl9nZm5gLiBUaGV5IHNlZW0gbGlrZSB0aGUgbW9zdCByZWxldmFudCBhcmVhcyB0byBpbnZlc3RpZ2F0ZS4KCk5vdywgYSBrZXkgcXVlc3Rpb246IERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYSBuZXcgZGVwZW5kZW5jeSBvciByZWx5IG9uIGBLVk1fUzM5MF9VQ09OVFJPTGA/IFllcCwgaXQgZG9lcy4gSSBzZWUgaXQgbW9kaWZpZXMgY29kZSB1c2luZyBga3ZtX2lzX3Vjb250cm9sKHZjcHUtJmd0O2t2bSlgLiBTbywgYEtWTV9TMzkwX1VDT05UUk9MYCBuZWVkcyB0byBiZSBpbiBgRW5hYmxlQ29uZmlnc2AuIEl0JiMzOTtzIHByZXR0eSBvYnZpb3VzIHRoYXQgYEtWTWAgaXRzZWxmIHNob3VsZCBiZSBpbiBgRW5hYmxlQ29uZmlncyB0b28sIHNpbmNlIHRoYXQmIzM5O3MgdGhlIGNvcmUgS1ZNIGZlYXR1cmUgdGhpcyBpcyBidWlsdCB1cG9uLgoKSG9sZCBvbiwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gSSYjMzk7bGwgcXVpY2tseSBjaGVjayBgYXJjaC9zMzkwL2t2bS9LY29uZmlnYCBhZ2FpbiB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgb3IgaW1wbGljYXRpb25zLiBJIHdhbnQgdG8gYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9LY29uZmlnPTE3PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMTgtXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6MTk6Y29uZmlnIEtWTVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTIwLVx0ZGVmX3RyaXN0YXRlIHlcbi0tXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDYtXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDc6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDgtXHRib29sIFwmIzM0O1VzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY2NjIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGZyb20gYW4gZXhwZXJ0IHBlcnNwZWN0aXZlOgoKKipJbnZlc3RpZ2F0aW5nIEtWTSBEZXBlbmRlbmNpZXMgb24gczM5MCBBcmNoaXRlY3R1cmUqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluIGFuZCB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmN5IHN0cnVjdHVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2Ug4oCTIGxldCYjMzk7cyBjaGVjayB0aGUgYGFyY2gvczM5MC9rdm0vS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBjb25kaXRpb25hbCBsb2dpYyBmb3IgS1ZNIChLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lKSB3aXRoaW4gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBJIHdhbnQgdG8gc2VlIHByZWNpc2VseSAqd2hhdCogb3RoZXIgY29uZmlndXJhdGlvbnMgb3IgZmVhdHVyZXMgYGt2bWAgcmVsaWVzIG9uIHRvIGJlIGVuYWJsZWQgb24gdGhpcyBhcmNoaXRlY3R1cmUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBsb29raW5nIGZvciB0aGUgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMuIFRoZXNlIGFyZSB0aGUgY3JpdGljYWwgcGllY2VzIG9mIGluZm9ybWF0aW9uIHRoYXQgcmV2ZWFsIHRoZSBwcmVyZXF1aXNpdGVzLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGRlcGVuZGVuY2llcyBpcyBrZXkgdG8gdHJvdWJsZXNob290aW5nIEtWTS1yZWxhdGVkIGlzc3Vlcywgb3IgdG8gZW5zdXJpbmcgY29ycmVjdCBjb25maWd1cmF0aW9uIGluIGEgY3VzdG9tIGJ1aWxkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIHJlcXVpcmVkIHNvIEkgY2FuIGVpdGhlciB0cm91Ymxlc2hvb3QgYSBjb25maWd1cmF0aW9uIGlzc3VlLCBvciBnZXQgS1ZNIHdvcmtpbmcgb24gYSBjdXN0b20gYnVpbGQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIEtWTSBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdHNvdXJjZSBcJiMzNDt2aXJ0L2t2bS9LY29uZmlnXCYjMzQ7XG4gICA2Olx0XG4gICA3Olx0bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxuICAgODpcdFx0ZGVmX2Jvb2wgeVxuICAgOTpcdFx0cHJvbXB0IFwmIzM0O0tWTVwmIzM0O1xuICAxMDpcdFx0aGVscFxuICAxMTpcdFx0ICBTYXkgWSBoZXJlIHRvIGdldCB0byBzZWUgb3B0aW9ucyBmb3IgdXNpbmcgeW91ciBMaW51eCBob3N0IHRvIHJ1biBvdGhlclxuICAxMjpcdFx0ICBvcGVyYXRpbmcgc3lzdGVtcyBpbnNpZGUgdmlydHVhbCBtYWNoaW5lcyAoZ3Vlc3RzKS5cbiAgMTM6XHRcdCAgVGhpcyBvcHRpb24gYWxvbmUgZG9lcyBub3QgYWRkIGFueSBrZXJuZWwgY29kZS5cbiAgMTQ6XHRcbiAgMTU6XHRcdCAgSWYgeW91IHNheSBOLCBhbGwgb3B0aW9ucyBpbiB0aGlzIHN1Ym1lbnUgd2lsbCBiZSBza2lwcGVkIGFuZCBkaXNhYmxlZC5cbiAgMTY6XHRcbiAgMTc6XHRpZiBWSVJUVUFMSVpBVElPTlxuICAxODpcdFxuICAxOTpcdGNvbmZpZyBLVk1cbiAgMjA6XHRcdGRlZl90cmlzdGF0ZSB5XG4gIDIxOlx0XHRwcm9tcHQgXCYjMzQ7S2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XCYjMzQ7XG4gIDIyOlx0XHRzZWxlY3QgSEFWRV9LVk1fQ1BVX1JFTEFYX0lOVEVSQ0VQVFxuICAyMzpcdFx0c2VsZWN0IEtWTV9BU1lOQ19QRlxuICAyNDpcdFx0c2VsZWN0IEtWTV9BU1lOQ19QRl9TWU5DXG4gIDI1Olx0XHRzZWxlY3QgS1ZNX0NPTU1PTlxuICAyNjpcdFx0c2VsZWN0IEhBVkVfS1ZNX0lSUUNISVBcbiAgMjc6XHRcdHNlbGVjdCBIQVZFX0tWTV9JUlFfUk9VVElOR1xuICAyODpcdFx0c2VsZWN0IEhBVkVfS1ZNX0lOVkFMSURfV0FLRVVQU1xuICAyOTpcdFx0c2VsZWN0IEhBVkVfS1ZNX05PX1BPTExcbiAgMzA6XHRcdHNlbGVjdCBLVk1fVkZJT1xuICAzMTpcdFx0c2VsZWN0IFZJUlRfWEZFUl9UT19HVUVTVF9XT1JLXG4gIDMyOlx0XHRzZWxlY3QgS1ZNX01NVV9MT0NLTEVTU19BR0lOR1xuICAzMzpcdFx0c2VsZWN0IEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcbiAgMzQ6XHRcdGhlbHBcbiAgMzU6XHRcdCAgU3VwcG9ydCBob3N0aW5nIHBhcmF2aXJ0dWFsaXplZCBndWVzdCBtYWNoaW5lcyB1c2luZyB0aGUgU0lFXG4gIDM2Olx0XHQgIHZpcnR1YWxpemF0aW9uIGNhcGFiaWxpdHkgb24gdGhlIG1haW5mcmFtZS4gVGhpcyBzaG91bGQgd29ya1xuICAzNzpcdFx0ICBvbiBhbnkgNjRiaXQgbWFjaGluZS5cbiAgMzg6XHRcbiAgMzk6XHRcdCAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgdGhyb3VnaFxuICA0MDpcdFx0ICBhIGNoYXJhY3RlciBkZXZpY2Ugbm9kZSBuYW1lZCAvZGV2L2t2bS5cbiAgNDE6XHRcbiAgNDI6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gIDQzOlx0XHQgIHdpbGwgYmUgY2FsbGVkIGt2bS5cbiAgNDQ6XHRcbiAgNDU6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNDY6XHRcbiAgNDc6XHRjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcbiAgNDg6XHRcdGJvb2wgXCYjMzQ7VXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1wmIzM0O1xuICA0OTpcdFx0ZGVwZW5kcyBvbiBLVk1cbiAgNTA6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc1OTAKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgbXkgbWluZCBpcyBqdW1waW5nIGFyb3VuZCBhIGJpdCBoZXJl4oCmCgoqKktWTSBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpSaWdodCwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnM6IGBLVk1gIGFuZCBgS1ZNX1MzOTBfVUNPTlRST0xgLiBUaG9zZSBhcmUgdGhlIGNvcmUsIEkga25vdyB0aGF0LiBCdXQgaG9sZCBvbiwgdGhlIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YCBmdW5jdGlvbiBuYW1l4oCmIHRoYXQgc2NyZWFtcyBQcm90ZWN0ZWQgVmlydHVhbGl6YXRpb24gKFBWKSB0byBtZSwgb24gczM5MHguIEkgbmVlZCB0byBjbGFyaWZ5OiBpcyB0aGVyZSBhIHNwZWNpZmljIGNvbmZpZyBvcHRpb24gKmRlZGljYXRlZCogdG8gdGhhdCBQViBmZWF0dXJlIHNldCwgb3IgaXMgaXQgaW1wbGljaXRseSBlbmFibGVkIHNvbWVob3c/IEkgbmVlZCB0byBrbm93IHdoZXJlIHRoZSBQViBzdXBwb3J0IGlzIGVuYWJsZWQgaW4gS1ZNIHMzOTB4LiBJIGhhdmUgdG8gdHJhY2UgaG93IHRoaXMgaXMgYmVpbmcgY29udHJvbGxlZCB3aXRoaW4gdGhlIEtWTSBlY29zeXN0ZW0gZm9yIHMzOTB4LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fUzM5MF9QViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3ODc0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkNoZWNraW5nIGZvciBQViBDb25maWd1cmF0aW9uIGluIHMzOTAgS2NvbmZpZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlcmUmIzM5O3MgYW55IFBhcmF2aXJ0dWFsaXphdGlvbiAoUFYpIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBkZWZpbmVkIHdpdGhpbiB0aGUgYGFyY2gvczM5MC9LY29uZmlnYCBmaWxlLiBUaGlzIGlzIHN0YW5kYXJkIHByb2NlZHVyZSBmb3IgY2hlY2tpbmcgdGhlIGFyY2hpdGVjdHVyZSYjMzk7cyBjb25maWd1cmF0aW9uIHNwYWNlIGZvciB2aXJ0dWFsaXphdGlvbiBzdXBwb3J0LiBJJiMzOTttIGxvb2tpbmcgZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gaHlwZXJ2aXNvcnMsIGd1ZXN0cywgb3IgcGFyYXZpcnR1YWxpemVkIGRyaXZlcnMuIFRoZSBwcmVzZW5jZSBvZiBQViBvcHRpb25zIHdvdWxkIHNpZ25hbCBob3cgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlIGhhbmRsZXMgaW50ZXJhY3Rpb25zIHdpdGggdmlydHVhbGl6YXRpb24gdGVjaG5vbG9naWVzIGFuZCBpZiB0aGUga2VybmVsIHByb3ZpZGVzIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24ga25vYnMgZm9yIHN1Y2ggZW52aXJvbm1lbnRzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIC4qUFYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MDg0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkNoZWNraW5nIHRoZSBQcm90ZWN0ZWQgTWVtb3J5IENvbmZpZ3VyYXRpb24gZm9yIHMzOTAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHByb3RlY3RlZCBtZW1vcnkgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlJiMzOTtzIGtlcm5lbC4gVGhlIGZpcnN0IHBsYWNlIEkmIzM5O2QgbG9vayBpcywgbmF0dXJhbGx5LCB0aGUgYEtjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgb25lIGluIGBhcmNoL3MzOTAvYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoYXQgYXJjaGl0ZWN0dXJlIHJlc2lkZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgYFBST1RFQ1RFRGAgc3ltYm9sLCBvciBob3dldmVyIGl0JiMzOTtzIGRlZmluZWQgdGhlcmUsIHRvIHNlZSBob3cgaXQmIzM5O3MgaGFuZGxlZC4gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gSG93IGlzIGl0IGNvbm5lY3RlZCB0byBvdGhlciBmZWF0dXJlcz8gQXJlIHRoZXJlIHNwZWNpZmljIGRlZmF1bHQgdmFsdWVzIG9yIHByb21wdHM/IFRoaXMgYEtjb25maWdgIGZpbGUgc2hvdWxkIGdpdmUgbWUgdGhlIGdyb3VuZCB0cnV0aCBvZiB0aGUgY29udHJvbCBvdmVyIHByb3RlY3RlZCBtZW1vcnkgZm9yIHRoZSBhcmNoaXRlY3R1cmUuIEkmIzM5O20gaG9waW5nIGl0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IGV4cGVyaWVuY2UgdGVsbHMgbWUgdG8gcHJlcGFyZSBmb3IgcG90ZW50aWFsIGNvbXBsZXhpdGllcyByZWxhdGVkIHRvIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGFuZCBob3cgdGhlIGtlcm5lbCBpbnRlcmFjdHMgd2l0aCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgLipQUk9URUNURUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MzQ5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gaW4gYGFyY2gvczM5MC9rdm0vcHYuY2AqKgoKT2theSwgSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgaWYgYGFyY2gvczM5MC9rdm0vcHYuY2AgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZC4gR2l2ZW4gdGhlIGNvbnRleHQsIGl0JiMzOTtzIGxpa2VseSBkZWFsaW5nIHdpdGggcGFyYXZpcnR1YWxpemVkIChQVikgY29tcG9uZW50cyBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlIHdpdGhpbiBLVk0uIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBQViBjb2RlIG9mdGVuIGhhcyBzcGVjaWZpYyBjb21waWxhdGlvbiBmbGFncyBvciBidWlsZCBjb25maWd1cmF0aW9ucyB0byBlbmFibGUgaXQsIGRlcGVuZGluZyBvbiB0aGUgZW52aXJvbm1lbnQgb3IgdGhlIGRlc2lyZWQgZmVhdHVyZSBzZXQuIFNvLCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoaXMgZmlsZSBpcyBhbHdheXMgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkIG9yIGlmIHRoZXJlIGFyZSBgI2lmZGVmYCBvciBzaW1pbGFyIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGNvbnRyb2xsaW5nIGl0cyBpbmNsdXNpb24uIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGZpbGUgaXMgYWN0aXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwdi5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL01ha2VmaWxlPTEwPWt2bS15ICYjNDM7PSBrdm0tczM5MC5vIGludGVyY2VwdC5vIGludGVycnVwdC5vIHByaXYubyBzaWdwLm9cbmFyY2gvczM5MC9rdm0vTWFrZWZpbGU6MTE6a3ZtLXkgJiM0Mzs9IGRpYWcubyBnYWNjZXNzLm8gZ3Vlc3RkYmcubyB2c2llLm8gcHYub1xuYXJjaC9zMzkwL2t2bS9NYWtlZmlsZS0xMi1rdm0teSAmIzQzOz0gZGF0Lm8gZ21hcC5vIGZhdWx0aW4ub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODcxNQoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDY4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLVk0gczM5MHggRnV6emluZyBEZWNpc2lvbioqCgpPa2F5LCBzbyBLVk0mIzM5O3MgcHJlc2VuY2UgaXMgYXNzdW1lZCBpZiB0aGUga2VybmVsIGlzIGNvbXBpbGVkIHdpdGggS1ZNIGVuYWJsZWQuIExldCYjMzk7cyBzdGFydCBieSByZXZpZXdpbmcgdGhlIGZ1bmN0aW9ucyBmbGFnZ2VkIGFzIHBvdGVudGlhbGx5IGludGVyZXN0aW5nOiBga3ZtX2FyY2hfdmNwdV9jcmVhdGVgLCBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gLCBga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdWAsIGBrdm1fczM5MF9wdl9kZXN0cm95X2NwdWAsIGBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uYCwgYGt2bV9zMzkwX2tleW9wYCwgYGhhbmRsZV9ycmJlYCwgYGhhbmRsZV9lc3NhYCwgYGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuYCwgYW5kIGBrdm1fczM5MF9pbmplY3RfdmNwdWAuIFdlIGtub3cgdGhlc2UgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCBLVk0gaW9jdGxzIGFuZCBndWVzdCBleGVjdXRpb24sIG1ha2luZyB0aGVtIGRlZmluaXRlbHkgY2FuZGlkYXRlcyBmb3IgZnV6emluZywgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGV5IGRlYWwgd2l0aCB0aGUgY29yZSBLVk0gZnVuY3Rpb25hbGl0eSBzcGVjaWZpYyB0byBzMzkwLiBGdXJ0aGVybW9yZSwgU3l6a2FsbGVyIGRvZXMgaW4gZmFjdCBzdXBwb3J0IGJvdGggczM5MHggYXJjaGl0ZWN0dXJlIGFuZCBLVk0gZnV6emluZy4KCk5vdywgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhpcyB3YXJyYW50cyBmdXp6aW5nLCBsZXQmIzM5O3MgZ28gb3ZlciB0aGUgYFdvcnRoRnV6emluZ2AgY3JpdGVyaWEuIFRoZSB0ZXh0IHNheXMgdG8gZXhjbHVkZSBjb2RlIHBhdGhzICYjMzQ7aW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSYjMzQ7LiBIZXJlJiMzOTtzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3Rpbmc6IHMzOTB4IEtWTSwgYXMgd2UgYWxsIGtub3csICpyZXF1aXJlcyogYWN0dWFsIHMzOTB4IGhhcmR3YXJlIGZvciBLVk0uIFFFTVUgb24geDg2IGNhbiYjMzk7dCBydW4gS1ZNIGZvciBzMzkweC4gQnV0LCBjcnVjaWFsbHksIFN5emthbGxlciAqY2FuKiBiZSBydW4gb24gczM5MHggaGFyZHdhcmUgaXRzZWxmLCBsaWtlIG9uIElCTSBDbG91ZCBvciB6L1ZNLgoKVGhlIHdvcmRpbmcgb2YgdGhlIHByb21wdCBzYXlzLCAmIzM0O2ltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUmIzM0Oy4gSXQgKmRvZXNuJiMzOTt0KiByZXN0cmljdCB0aGlzIHRvIHg4Niwgd2hpY2ggaXMgY3J1Y2lhbC4gQWx0aG91Z2ggUUVNVSBvbiB4ODYgY2Fu4oCZdCB1dGlsaXplIEtWTSBmb3IgczM5MHgsIFFFTVUgKmNhbiogZW11bGF0ZSBzMzkweCwgYW5kIHdoZW4gcnVuICpvbiogczM5MHgsIGl0IGJlY29tZXMgYSB2YWxpZCBLVk0gdGFyZ2V0LiBTaW5jZSBzeXprYWxsZXIgKmRvZXMqIGhhdmUgczM5MHggaW5zdGFuY2VzLCBhbmQgc2luY2UgcnVubmluZyBRRU1VIG9uIHMzOTB4ICpkb2VzKiBtYWtlIHRoZXNlIGZ1bmN0aW9ucyBhY2Nlc3NpYmxlLCBldmVuIGlmIGluZGlyZWN0bHkgdGhyb3VnaCBlbXVsYXRpb24sIEkmIzM5O20gY29uZmlkZW50IGluIHNheWluZyB0aGF0IHRoZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUuIFRoZXJlZm9yZSwgSSB3aWxsIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgLgoKSSYjMzk7bGwgZmluYWxpemUgdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3Qgd2l0aCB0aGUgZnVuY3Rpb25zIEkgbWVudGlvbmVkIGFib3ZlLiBBbmQsIGxldCYjMzk7cyBub3cgY2hlY2sgaWYgYGt2bV9zMzkwX2tleW9wYCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3MzOTBfa2V5b3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU1MD1zdGF0aWMgdm9pZCBfX2t2bV9zMzkwX2V4aXQodm9pZClcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTYxLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU2MjpzdGF0aWMgaW50IGt2bV9zMzkwX2tleW9wKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3Qga3ZtICprdm0sIGludCBvcCxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NjMtXHRcdFx0ICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuaW9uIHNrZXkgc2tleSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjkyNj1pbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMwNTgtXHRcdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMwNTk6XHRcdHN0cnVjdCBrdm1fczM5MF9rZXlvcCBrb3A7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzA2MC1cdFx0dW5pb24gc2tleSBza2V5O1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMDcxLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMwNzI6XHRcdHIgPSBrdm1fczM5MF9rZXlvcChtYywga3ZtLCBrb3Aub3BlcmF0aW9uLCBrb3AuZ3Vlc3RfYWRkciwgc2tleSk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzA3My1cdFx0a3ZtX3MzOTBfZnJlZV9tbXVfY2FjaGUobWMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDUwOQoJCQkJCQkJb3V0cHV0OiA1MgoJCQkJCQkJdGhvdWdodHM6IDIwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4KCioqQW5hbHl6aW5nIEFQSSBFbnRyeXBvaW50IFVzYWdlIGZvciBLVk0vczM5MHgqKgoKUmlnaHQsIHNvIHRoZSBwcm9tcHQgaXMgcHJldHR5IGNsZWFyOiBpdCYjMzk7cyBnZW5lcmFsbHkgcHJlZmVycmVkIHRvIHVzZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgcmF0aGVyIHRoYW4gc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIEkmIzM5O20gbG9va2luZyBhdCBga3ZtX3MzOTBfa2V5b3BgLCB3aGljaCBpcywgaW4gZmFjdCwgc3RhdGljLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1c2UgYGt2bV9hcmNoX3ZtX2lvY3RsYCBpbnN0ZWFkLiBCdXQsIGhvbGQgb24gYSBzZWNvbmQuLi4gYGt2bV9hcmNoX3ZtX2lvY3RsYCBpcyAqdmVyeSogZ2VuZXJpYywgaXNuJiMzOTt0IGl0PyBJdCBzZWVtcyBsaWtlIGl0IGhhbmRsZXMgYSBicm9hZCByYW5nZSBvZiBpb2N0bHMsIG5vdCBzcGVjaWZpY2FsbHkgdGhlIGtleSBvcGVyYXRpb24uCgpIbW0sIG9rYXksIHJlLWV4YW1pbmluZyBga3ZtX3MzOTBfa2V5b3BgLCBpdCAqaXMqIHN0YXRpYywgYnV0IGl0IGlzbiYjMzk7dCBpbmxpbmVkLiBJdCYjMzk7cyBnb3QgdGhhdCBiaWcgYHN3aXRjaGAgc3RhdGVtZW50LCB3aGljaCBsaWtlbHkgbWVhbnMgaXQmIzM5O3MgYSBkaXN0aW5jdCwgZmFpcmx5IHNpemVhYmxlIGZ1bmN0aW9uLiBTbywgaXMgYGt2bV9hcmNoX3ZtX2lvY3RsYCBhICpiZXR0ZXIqIGNob2ljZT8gT3IgaXMgaXQgb2theSB0byBsZWF2ZSBga3ZtX3MzOTBfa2V5b3BgIGlmIGl0IGlzIGEgdHJ1bHkgZGlzdGluY3QgZnVuY3Rpb24/IEkgbmVlZCB0byB0aGluayBhYm91dCB0aGUgYWJzdHJhY3Rpb24gbGV2ZWwgaGVyZS4KCldhaXQsIG9mIGNvdXJzZSwgSSBzaG91bGQgYmUgdXNpbmcgYGt2bV9hcmNoX3ZtX2lvY3RsYC4gVGhhdCBpcyB0aGUgYWN0dWFsIEtWTSBlbnRyeSBwb2ludC4gT2ssIHNvIHVzaW5nIHRoYXQgaXMgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvIHRoZW4uCgpPa2F5LCBsZXQgbWUgY2hlY2sgYW5vdGhlciBvbmU6IFdoYXQgYWJvdXQgYGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25gPyBUaGF0JiMzOTtzICphbHNvKiBzdGF0aWMuIFNvLCBJIG5lZWQgdG8gYXBwbHkgdGhlIHNhbWUgYW5hbHlzaXMgdGhlcmUgdG9vLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0xMjcxPXN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMjk3LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjEyOTg6c3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMjk5LVx0XHRcdFx0ICAgICBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yMDQ0PXN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc2V0X2F0dHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMDYxLVx0Y2FzZSBLVk1fUzM5MF9WTV9NSUdSQVRJT046XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MjA2MjpcdFx0cmV0ID0ga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbihrdm0sIGF0dHIpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTIwNjMtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTQ3NQoJCQkJCQkJb3V0cHV0OiAyNDEKCQkJCQkJCXRob3VnaHRzOiA1MzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtWTSBzMzkwIEVudHJ5IFBvaW50cyBmb3IgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGhlcmUgaXMgdG8gaWRlbnRpZnkgdGhlIGtleSBlbnRyeSBwb2ludHMgaW4gdGhlIHMzOTAgS1ZNIGltcGxlbWVudGF0aW9uIHRoYXQgYXJlICptb3N0KiBsaWtlbHkgdG8geWllbGQgaW50ZXJlc3RpbmcgZnV6emluZyB0YXJnZXRzLCBnaXZlbiB0aGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBwYXRjaCBzZXJpZXMuCgpGaXJzdCwgSSBzZWUgdGhhdCBga3ZtX3MzOTBfdm1fc2V0X2F0dHJgIGlzIGEgc3RhdGljIGZ1bmN0aW9uOyBpdCYjMzk7cyBhY2Nlc3NlZCB0aHJvdWdoIGBrdm1fZGV2aWNlX2lvY3RsX2F0dHJgIG9yIGEgc2ltaWxhciBpbnRlcmZhY2UsIHNvIGl0JiMzOTtzIHByb2JhYmx5IGxlc3MgZGlyZWN0LiBOb3csIGxldCYjMzk7cyBnbyBmdW5jdGlvbiBieSBmdW5jdGlvbi4KCmBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YCwgbm90IHN0YXRpYy4gT2theSwgZ29vZC4gYGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1YCwgYWxzbyBub3Qgc3RhdGljLiBga3ZtX2FyY2hfdmNwdV9jcmVhdGVgLCBub24tc3RhdGljIHRvby4gYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYCBhcyB3ZWxsLiBUaGVuIHRoZXJlIGFyZSBzb21lIHN0YXRpYyBmdW5jdGlvbnMsIGBoYW5kbGVfcnJiZWAgY2FsbGVkIHZpYSBga3ZtX3MzOTBfaGFuZGxlX2IyYCBhbmQgYGhhbmRsZV9lc3NhYCBjYWxsZWQgdmlhIGBrdm1fczM5MF9oYW5kbGVfYjlgLCBpbnRlcmVzdGluZy4gVGhlbiwgYGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuYCBpcyBub3Qgc3RhdGljLiBGaW5hbGx5LCBga3ZtX3MzOTBfaW5qZWN0X3ZjcHVgIGlzIG5vdCBzdGF0aWMuCgpTbywgdGhlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIGFyZSBub3cgY2xlYXI6Ci0gYGt2bV9hcmNoX3ZjcHVfY3JlYXRlYAotIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAKLSBga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdWAKLSBga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHVgCi0gYGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuYAotIGBrdm1fczM5MF9pbmplY3RfdmNwdWAKLSBga3ZtX3MzOTBfaGFuZGxlX2IyYAotIGBrdm1fczM5MF9oYW5kbGVfYjlgCi0gYGt2bV9hcmNoX3ZtX2lvY3RsYAoKQWxyaWdodCwgdGhlc2UgYXJlIG91ciBtYWluIHRhcmdldHMuIEkgbmVlZCB0byBrZWVwIHRob3NlIGluIG1pbmQuCgpOb3csIGNvbnNpZGVyaW5nIHRoZSBwYXRjaCBkZXNjcmlwdGlvbiwgd2hpY2ggZGV0YWlscyBmaXhlcyBmb3IgbWVtb3J5IGxlYWtzIGluIHZDUFUgY3JlYXRpb24vZGVzdHJ1Y3Rpb24sIHN0b3JhZ2Uga2V5IG9wZXJhdGlvbnMsIHBhZ2UgZmF1bHQgc2lnbmFsIGhhbmRsaW5nLCBhbmQgbWVtb3J5IHJlZ2lvbiBsb2NraW5nLCBpdCBtYWtlcyBzZW5zZSB0byBmb2N1cyBvbiB0aGVzZSBub24tc3RhdGljIGZ1bmN0aW9ucy4gVGhleSByZXByZXNlbnQga2V5IHZpcnR1YWxpemF0aW9uIGZlYXR1cmVzIGFuZCB3b3VsZCBiZSBnb29kIHBsYWNlcyB0byBzdGFydCBmdXp6aW5nLgoKSSYjMzk7bSB0aGlua2luZywgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgY29uZmlncy4gSSBrbm93IGBLVk1gIGlzIGJhc2VsaW5lLiBJIGFsc28gc2VlIHRoYXQgYEtWTV9TMzkwX1VDT05UUk9MYCBpcyBwcmVzZW50LiBJcyB0aGF0IHJlbGV2YW50PyBZZXMsIHRoZSBjb2RlIHVzZXMgYGt2bV9pc191Y29udHJvbCh2Y3B1LSZndDtrdm0pYC4gR3JlYXQsIHdlIHdpbGwgbmVlZCB0byBjb25zaWRlciB0aGF0LgoKV2l0aCB0aGlzIGFuYWx5c2lzIGNvbXBsZXRlLCBpdCYjMzk7cyB0aW1lIHRvIGdlbmVyYXRlIHRoZSByZXN1bHRzLiBJJiMzOTttIGNvbmZpZGVudCBpbiB0aGUgaWRlbnRpZmllZCBmdXp6aW5nIHRhcmdldHMgYmFzZWQgb24gdGhpcyBhbmFseXNpcy4gTm93LCBJJiMzOTttIGdvaW5nIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBLVk1fUzM5MF9VQ09OVFJPTDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX1MzOTBfVUNPTlRST0wmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fYXJjaF92Y3B1X2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbiYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9wdl9jcmVhdGVfY3B1JiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1JiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2ZhdWx0aW5fZ2ZuJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2luamVjdF92Y3B1JiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2hhbmRsZV9iMiYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9oYW5kbGVfYjkmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfdm1faW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgczM5MCBLVk0gaW1wbGVtZW50YXRpb24sIGluY2x1ZGluZyBmaXhpbmcgbWVtb3J5IGxlYWtzIGR1cmluZyB2Q1BVIGNyZWF0aW9uL2Rlc3RydWN0aW9uLCBtb2RpZnlpbmcgcmVmZXJlbmNlIGJpdCByZXNldHRpbmcgZm9yIHN0b3JhZ2Uga2V5cywgYWRqdXN0aW5nIHNpZ25hbCBoYW5kbGluZyBkdXJpbmcgcGFnZSBmYXVsdHMsIGFuZCBpbXByb3ZpbmcgbG9ja2luZyBkdXJpbmcgbWVtb3J5IHJlZ2lvbiBjb21taXRzIGFuZCBtaWdyYXRpb24uIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSB2aXJ0dWFsaXphdGlvbiBmZWF0dXJlcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDt0aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogS1ZNX1MzOTBfVUNPTlRST0wmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyOTMwCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYSBNaXNzaW5nIEtWTSBGZWF0dXJlIG9uIHMzOTB4KioKClJpZ2h0LCBsZXQgbWUgc2VlLi4uIEkmIzM5O20gYSBiaXQgcGVycGxleGVkLiBJdCBhcHBlYXJzIHRoYXQgYEtWTV9TMzkwX1VDT05UUk9MYCBpc24mIzM5O3QgZGVmaW5lZC4gVGhhdCYjMzk7cyB1bmV4cGVjdGVkLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBjb250ZXh0IEkmIzM5O20gd29ya2luZyBpbi4gVGltZSB0byBnbyBiYWNrIGFuZCBkb3VibGUtY2hlY2ssIHNwZWNpZmljYWxseSwgdGhlIGBhcmNoL3MzOTAva3ZtL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgaGFzbiYjMzk7dCBiZWVuIGEgcmVjZW50IGNoYW5nZSBvciBtaXNjb25maWd1cmF0aW9uIG9uIG15IHBhcnQsIG9yIHBlcmhhcHMgdGhlcmUmIzM5O3MgYSBkZXBlbmRlbmN5IEkgbWlzc2VkLiBJdCYjMzk7cyB1c3VhbGx5IHRoZSBLY29uZmlnIGZpbGVzIHRoYXQgZGVmaW5lIHRoZSBhdmFpbGFiaWxpdHkgb2YgdGhlc2UgZmVhdHVyZXMsIHNvIGxldCYjMzk7cyBzdGFydCB0aGVyZSBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vS2NvbmZpZz0xOT1jb25maWcgS1ZNXG4tLVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ2LVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjQ3OmNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtVc2Vyc3BhY2UgY29udHJvbGxlZCB2aXJ0dWFsIG1hY2hpbmVzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMjg5CgkJCQkJCQlvdXRwdXQ6IDIyOAoJCQkJCQkJdGhvdWdodHM6IDEwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipOYXZpZ2F0aW5nIHRoZSBLY29uZmlnIExhYnlyaW50aCoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHRob3VnaHQgSSByZW1lbWJlcmVkIHNlZWluZyBzb21ldGhpbmcgYWJvdXQgdGhpcy4uLiBhbmQgeWVzLCB0aGVyZSBpdCBpcyEgYEtWTV9TMzkwX1VDT05UUk9MYCAqZG9lcyogZXhpc3QsIGFuZCBpdCYjMzk7cyByaWdodCB3aGVyZSBpdCBzaG91bGQgYmUsIHR1Y2tlZCBhd2F5IGluIGBhcmNoL3MzOTAva3ZtL0tjb25maWdgLiBTbywgd2hhdCBnaXZlcz8gV2h5IGRpZCBgc2V0LXJlc3VsdHNgIHRlbGwgbWUgaXQgd2FzbiYjMzk7dCB0aGVyZT8gU29tZXRoaW5nJiMzOTtzIGFtaXNzIHdpdGggdGhlIHRvb2wuCgpNeSBzdXNwaWNpb24gaXMgdGhhdCBpdCYjMzk7cyBnZXR0aW5nIGNvbmZ1c2VkLiBJdCYjMzk7cyBsaWtlbHkgY2hlY2tpbmcgYWdhaW5zdCBhbiB4ODYgY29uZmlndXJhdGlvbiwgbWF5YmUgZXZlbiB0aGUgYHg4Nl82NGAgZGVmY29uZmlnLCB3aGVyZSB0aGlzIHNwZWNpZmljIHN5bWJvbCwgYEtWTV9TMzkwX1VDT05UUk9MYCwgd291bGQgbmF0dXJhbGx5IGJlIGFic2VudCBiZWNhdXNlLCB3ZWxsLCBpdCYjMzk7cyBzcGVjaWZpYyB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIEl0JiMzOTtzIGEgY2xhc3NpYyBnb3RjaGEgd2hlbiB3b3JraW5nIHdpdGggbXVsdGktYXJjaGl0ZWN0dXJlIGtlcm5lbCBjb25maWd1cmF0aW9ucy4KCklmIHRoZSB0b29sIHBlcnNpc3RzIGluIGl0cyBtaXNndWlkZWQgY29tcGxhaW50cywgSSYjMzk7bGwgc2ltcGx5IHJldmVydCB0byB0aGUgbW9zdCBicm9hZGx5IGFwcGxpY2FibGUgc3ltYm9sLCBgS1ZNYC4gSXQmIzM5O2xsIGJlIGZpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fYXJjaF92Y3B1X2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbiYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9wdl9jcmVhdGVfY3B1JiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1JiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2ZhdWx0aW5fZ2ZuJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2luamVjdF92Y3B1JiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2hhbmRsZV9iMiYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9oYW5kbGVfYjkmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfdm1faW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgczM5MCBLVk0gaW1wbGVtZW50YXRpb24sIGluY2x1ZGluZyBmaXhpbmcgbWVtb3J5IGxlYWtzIGR1cmluZyB2Q1BVIGNyZWF0aW9uL2Rlc3RydWN0aW9uLCBtb2RpZnlpbmcgcmVmZXJlbmNlIGJpdCByZXNldHRpbmcgZm9yIHN0b3JhZ2Uga2V5cywgYWRqdXN0aW5nIHNpZ25hbCBoYW5kbGluZyBkdXJpbmcgcGFnZSBmYXVsdHMsIGFuZCBpbXByb3ZpbmcgbG9ja2luZyBkdXJpbmcgbWVtb3J5IHJlZ2lvbiBjb21taXRzIGFuZCBtaWdyYXRpb24uIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSB2aXJ0dWFsaXphdGlvbiBmZWF0dXJlcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfY3JlYXRlJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3B2X2NyZWF0ZV9jcHUmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfcHZfZGVzdHJveV9jcHUmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfZmF1bHRpbl9nZm4mIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfaW5qZWN0X3ZjcHUmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfaGFuZGxlX2IyJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2hhbmRsZV9iOSYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF92bV9pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBzMzkwIEtWTSBpbXBsZW1lbnRhdGlvbiwgaW5jbHVkaW5nIGZpeGluZyBtZW1vcnkgbGVha3MgZHVyaW5nIHZDUFUgY3JlYXRpb24vZGVzdHJ1Y3Rpb24sIG1vZGlmeWluZyByZWZlcmVuY2UgYml0IHJlc2V0dGluZyBmb3Igc3RvcmFnZSBrZXlzLCBhZGp1c3Rpbmcgc2lnbmFsIGhhbmRsaW5nIGR1cmluZyBwYWdlIGZhdWx0cywgYW5kIGltcHJvdmluZyBsb2NraW5nIGR1cmluZyBtZW1vcnkgcmVnaW9uIGNvbW1pdHMgYW5kIG1pZ3JhdGlvbi4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIHZpcnR1YWxpemF0aW9uIGZlYXR1cmVzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAwOjA2OjA2LjM2OTczNzA1MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjkyOTkwNjM5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fYXJjaF92Y3B1X2NyZWF0ZVwiLFxuICAgIFwia3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25cIixcbiAgICBcImt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVcIixcbiAgICBcImt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1XCIsXG4gICAgXCJrdm1fczM5MF9mYXVsdGluX2dmblwiLFxuICAgIFwia3ZtX3MzOTBfaW5qZWN0X3ZjcHVcIixcbiAgICBcImt2bV9zMzkwX2hhbmRsZV9iMlwiLFxuICAgIFwia3ZtX3MzOTBfaGFuZGxlX2I5XCIsXG4gICAgXCJrdm1fYXJjaF92bV9pb2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHMzOTAgS1ZNIGltcGxlbWVudGF0aW9uLCBpbmNsdWRpbmcgZml4aW5nIG1lbW9yeSBsZWFrcyBkdXJpbmcgdkNQVSBjcmVhdGlvbi9kZXN0cnVjdGlvbiwgbW9kaWZ5aW5nIHJlZmVyZW5jZSBiaXQgcmVzZXR0aW5nIGZvciBzdG9yYWdlIGtleXMsIGFkanVzdGluZyBzaWduYWwgaGFuZGxpbmcgZHVyaW5nIHBhZ2UgZmF1bHRzLCBhbmQgaW1wcm92aW5nIGxvY2tpbmcgZHVyaW5nIG1lbW9yeSByZWdpb24gY29tbWl0cyBhbmQgbWlncmF0aW9uLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUgdmlydHVhbGl6YXRpb24gZmVhdHVyZXMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDowNjowNi4zNjk3NDUxMTJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3MzU3NjEzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGZiZjVjZDViOWEyNDAzNTk3NTY4YzhkZWZiYWUyOWU3ODdmMjQ1ODhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMzEgMDA6MDY6MDUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbmluZGV4IGVhYTM0YzViZDNjMTEuLmVkZjc1YjZhZDIwY2UgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG4rKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbkBAIC00NDAsNiArNDQwLDcgQEAgc3RydWN0IGt2bV92Y3B1X2FyY2gge1xcbiBcXHRib29sIHNrZXlfZW5hYmxlZDtcXG4gXFx0LyogSW5kaWNhdG9yIGlmIHRoZSBhY2Nlc3MgcmVnaXN0ZXJzIGhhdmUgYmVlbiBsb2FkZWQgZnJvbSBndWVzdCAqL1xcbiBcXHRib29sIGFjcnNfbG9hZGVkO1xcbitcXHRib29sIGluaXRpYWxpemVkO1xcbiBcXHRzdHJ1Y3Qga3ZtX3MzOTBfcHZfdmNwdSBwdjtcXG4gXFx0dW5pb24gZGlhZzMxOF9pbmZvIGRpYWczMThfaW5mbztcXG4gXFx0c3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWM7XFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZGF0LmMgYi9hcmNoL3MzOTAva3ZtL2RhdC5jXFxuaW5kZXggZWQ0MjU5ZDE3NjI5NS4uM2YyZDZlODkwMmQ3NiAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva3ZtL2RhdC5jXFxuKysrIGIvYXJjaC9zMzkwL2t2bS9kYXQuY1xcbkBAIC03NTUsMTMgKzc1NSwxNSBAQCBpbnQgZGF0X2NvbmRfc2V0X3N0b3JhZ2Vfa2V5KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1tYywgdW5pb24gYXNjZSBhc2NlLCBnZlxcbiBcXHRyZXR1cm4gcmM7XFxuIH1cXG4gXFxuLWludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbilcXG4raW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLCB1bmlvbiBza2V5ICpza2V5KVxcbiB7XFxuIFxcdHVuaW9uIHBnc3RlIHBnc3RlLCBvbGQ7XFxuIFxcdHVuaW9uIGNyc3RlICpjcnN0ZXA7XFxuIFxcdHVuaW9uIHB0ZSAqcHRlcDtcXG4gXFx0aW50IHJjO1xcbiBcXG4rXFx0c2tleS1cXHUwMDNlc2tleSA9IDA7XFxuK1xcbiBcXHRyYyA9IGRhdF9lbnRyeV93YWxrKE5VTEwsIGdmbiwgYXNjZSwgREFUX1dBTEtfQU5ZLCBUQUJMRV9UWVBFX1BBR0VfVEFCTEUsIFxcdTAwMjZjcnN0ZXAsIFxcdTAwMjZwdGVwKTtcXG4gXFx0aWYgKHJjKVxcbiBcXHRcXHRyZXR1cm4gcmM7XFxuQEAgLTc3MSwyMSArNzczLDIzIEBAIGludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbilcXG4gXFxuIFxcdFxcdGlmICghY3JzdGUuaC5mYyB8fCAhY3JzdGUucy5mYzEucHIpXFxuIFxcdFxcdFxcdHJldHVybiAwO1xcbi1cXHRcXHRyZXR1cm4gcGFnZV9yZXNldF9yZWZlcmVuY2VkKGxhcmdlX2Nyc3RlX3RvX3BoeXMoKmNyc3RlcCwgZ2ZuKSk7XFxuK1xcdFxcdHNrZXktXFx1MDAzZXNrZXkgPSBwYWdlX3Jlc2V0X3JlZmVyZW5jZWQobGFyZ2VfY3JzdGVfdG9fcGh5cygqY3JzdGVwLCBnZm4pKSBcXHUwMDNjXFx1MDAzYyAxO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXHRvbGQgPSBwZ3N0ZV9nZXRfbG9jayhwdGVwKTtcXG4gXFx0cGdzdGUgPSBvbGQ7XFxuIFxcbiBcXHRpZiAoIXB0ZXAtXFx1MDAzZWguaSkge1xcbi1cXHRcXHRyYyA9IHBhZ2VfcmVzZXRfcmVmZXJlbmNlZChwdGVfb3JpZ2luKCpwdGVwKSk7XFxuLVxcdFxcdHBnc3RlLmhyID0gcmMgXFx1MDAzZVxcdTAwM2UgMTtcXG4rXFx0XFx0c2tleS1cXHUwMDNlc2tleSA9IHBhZ2VfcmVzZXRfcmVmZXJlbmNlZChwdGVfb3JpZ2luKCpwdGVwKSkgXFx1MDAzY1xcdTAwM2MgMTtcXG4rXFx0XFx0cGdzdGUuaHIgPSBza2V5LVxcdTAwM2VyO1xcbiBcXHR9XFxuLVxcdHJjIHw9IChwZ3N0ZS5nciBcXHUwMDNjXFx1MDAzYyAxKSB8IHBnc3RlLmdjO1xcbitcXHRza2V5LVxcdTAwM2VyIHw9IHBnc3RlLmdyO1xcbitcXHRza2V5LVxcdTAwM2VjIHw9IHBnc3RlLmdjO1xcbiBcXHRwZ3N0ZS5nciA9IDA7XFxuIFxcbiBcXHRkYXRfdXBkYXRlX3B0ZXBfc2Qob2xkLCBwZ3N0ZSwgcHRlcCk7XFxuIFxcdHBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpO1xcbi1cXHRyZXR1cm4gcmM7XFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgbG9uZyBkYXRfcmVzZXRfc2tleXNfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXFxuQEAgLTg0Niw2ICs4NTAsNyBAQCBzdGF0aWMgbG9uZyBfZGF0X3Nsb3RfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbFxcbiBcXHRzdHJ1Y3Qgc2xvdF9wcml2ICpwID0gd2Fsay1cXHUwMDNlcHJpdjtcXG4gXFx0dW5pb24gY3JzdGUgZHVtbXkgPSB7IC52YWwgPSBwLVxcdTAwM2V0b2tlbiB9O1xcbiBcXHR1bmlvbiBwdGUgbmV3X3B0ZSwgcHRlID0gUkVBRF9PTkNFKCpwdGVwKTtcXG4rXFx0dW5pb24gcGdzdGUgcGdzdGU7XFxuIFxcbiBcXHRuZXdfcHRlID0gX1BURV9UT0soZHVtbXkudG9rLnR5cGUsIGR1bW15LnRvay5wYXIpO1xcbiBcXG5AQCAtODUzLDcgKzg1OCwxMSBAQCBzdGF0aWMgbG9uZyBfZGF0X3Nsb3RfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbFxcbiBcXHRpZiAocHRlLnZhbCA9PSBuZXdfcHRlLnZhbClcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHRkYXRfcHRlcF94Y2hnKHB0ZXAsIG5ld19wdGUsIGdmbiwgd2Fsay1cXHUwMDNlYXNjZSwgZmFsc2UpO1xcbitcXHRwZ3N0ZSA9IHBnc3RlX2dldF9sb2NrKHB0ZXApO1xcbitcXHRwZ3N0ZSA9IF9fZGF0X3B0ZXBfeGNoZyhwdGVwLCBwZ3N0ZSwgbmV3X3B0ZSwgZ2ZuLCB3YWxrLVxcdTAwM2Vhc2NlLCBmYWxzZSk7XFxuK1xcdHBnc3RlLmNtbWFfZCA9IDA7XFxuK1xcdHBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZGF0LmggYi9hcmNoL3MzOTAva3ZtL2RhdC5oXFxuaW5kZXggZmFkNjA1MzA1ZTA1Yy4uMTQxZWU3YjlmMDE5MSAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva3ZtL2RhdC5oXFxuKysrIGIvYXJjaC9zMzkwL2t2bS9kYXQuaFxcbkBAIC01MzcsNyArNTM3LDcgQEAgaW50IGRhdF9zZXRfc3RvcmFnZV9rZXkoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZcXG4gXFx0XFx0XFx0dW5pb24gc2tleSBza2V5LCBib29sIG5xKTtcXG4gaW50IGRhdF9jb25kX3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLFxcbiBcXHRcXHRcXHQgICAgIHVuaW9uIHNrZXkgc2tleSwgdW5pb24gc2tleSAqb2xka2V5LCBib29sIG5xLCBib29sIG1yLCBib29sIG1jKTtcXG4taW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuKTtcXG4raW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLCB1bmlvbiBza2V5ICpza2V5KTtcXG4gbG9uZyBkYXRfcmVzZXRfc2tleXModW5pb24gYXNjZSBhc2NlLCBnZm5fdCBzdGFydCk7XFxuIFxcbiB1bnNpZ25lZCBsb25nIGRhdF9nZXRfcHR2YWwoc3RydWN0IHBhZ2VfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgcHR2YWxfcGFyYW0gcGFyYW0pO1xcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYyBiL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jXFxuaW5kZXggZmVlODAwNDdiZDk0Zi4uM2NjNDVmN2Y1YjJkNyAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uY1xcbisrKyBiL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jXFxuQEAgLTkxLDkgKzkxLDkgQEAgaW50IGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgZ3Vlc3RfZmFcXG4gXFx0XFx0LyogQWNjZXNzIG91dHNpZGUgbWVtb3J5LCBhZGRyZXNzaW5nIGV4Y2VwdGlvbi4gKi9cXG4gXFx0XFx0aWYgKGlzX25vc2xvdF9wZm4oZi1cXHUwMDNlcGZuKSlcXG4gXFx0XFx0XFx0cmV0dXJuIFBHTV9BRERSRVNTSU5HO1xcbi1cXHRcXHQvKiBTaWduYWwgcGVuZGluZzogdHJ5IGFnYWluLiAqL1xcbi1cXHRcXHRpZiAoZi1cXHUwMDNlcGZuID09IEtWTV9QRk5fRVJSX1NJR1BFTkRJTkcpXFxuLVxcdFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbitcXHRcXHQvKiBGYXRhbCBzaWduYWwgcGVuZGluZzogYmFpbCBvdXQuICovXFxuK1xcdFxcdGlmIChpc19zaWdwZW5kaW5nX3BmbihmLVxcdTAwM2VwZm4pKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlRSO1xcbiBcXHRcXHQvKiBDaGVjayBpZiBpdCdzIHJlYWQtb25seSBtZW1vcnk7IGRvbid0IHRyeSB0byBhY3R1YWxseSBoYW5kbGUgdGhhdCBjYXNlLiAqL1xcbiBcXHRcXHRpZiAoZi1cXHUwMDNlcGZuID09IEtWTV9QRk5fRVJSX1JPX0ZBVUxUKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXFxuaW5kZXggOWUzZTZiMGQ3MmFkNi4uZDAyNzI0YmQxODI5YyAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXFxuKysrIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1xcbkBAIC01MCw2ICs1MCw4IEBAIHN0YXRpYyBpbnQgc2NhX2V4dF9jYWxsX3BlbmRpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgKnNyY19pZClcXG4gXFx0aWYgKCFrdm1fczM5MF90ZXN0X2NwdWZsYWdzKHZjcHUsIENQVVNUQVRfRUNBTExfUEVORCkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4rXFx0aWYgKEtWTV9CVUdfT04oa3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSksIHZjcHUtXFx1MDAzZWt2bSkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRCVUdfT04oIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKTtcXG4gXFxuIFxcdGlmIChzcmNfaWQpXFxuQEAgLTY2LDYgKzY4LDggQEAgc3RhdGljIGludCBzY2FfaW5qZWN0X2V4dF9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNyY19pZClcXG4gXFx0aW50IGV4cGVjdCwgcmM7XFxuIFxcbiBcXHRCVUdfT04oIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKTtcXG4rXFx0aWYgKEtWTV9CVUdfT04oa3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSksIHZjcHUtXFx1MDAzZWt2bSkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0b2xkX3ZhbCA9IFJFQURfT05DRSgqc2lncF9jdHJsKTtcXG4gXFx0b2xkX3ZhbC5jID0gMDtcXG5AQCAtODQsMTAgKzg4LDEzIEBAIHN0YXRpYyBpbnQgc2NhX2luamVjdF9leHRfY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzcmNfaWQpXFxuIHN0YXRpYyB2b2lkIHNjYV9jbGVhcl9leHRfY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0c3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5zY2E7XFxuLVxcdHVuaW9uIGVzY2Ffc2lncF9jdHJsICpzaWdwX2N0cmwgPSBcXHUwMDI2c2NhLVxcdTAwM2VjcHVbdmNwdS1cXHUwMDNldmNwdV9pZF0uc2lncF9jdHJsO1xcbitcXHR1bmlvbiBlc2NhX3NpZ3BfY3RybCAqc2lncF9jdHJsO1xcbiBcXG4tXFx0aWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSlcXG4rXFx0aWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSB8fCAhdmNwdS1cXHUwMDNlYXJjaC5pbml0aWFsaXplZCB8fCBrdm1faXNfdWNvbnRyb2wodmNwdS1cXHUwMDNla3ZtKSlcXG4gXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0LyogSW5pdGlhbGl6ZSBhZnRlciB0aGUgYWJvdmUgY2hlY2ssIHRvIHByZXZlbnQgZ29pbmcgb3V0IG9mIGJvdW5kcyAqL1xcbitcXHRzaWdwX2N0cmwgPSBcXHUwMDI2c2NhLVxcdTAwM2VjcHVbdmNwdS1cXHUwMDNldmNwdV9pZF0uc2lncF9jdHJsO1xcbiBcXHRrdm1fczM5MF9jbGVhcl9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX0VDQUxMX1BFTkQpO1xcbiBcXG4gXFx0V1JJVEVfT05DRShzaWdwX2N0cmwtXFx1MDAzZXZhbHVlLCAwKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXFxuaW5kZXggMTUwYjVkZDIxNzBlMi4uYjI5ZTU0NjBmNWVmYSAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcXG4rKysgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcXG5AQCAtNTcxLDcgKzU3MSw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfa2V5b3Aoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBrdm0gKmt2bSwgaW50IG9wXFxuIFxcdHN3aXRjaCAob3ApIHtcXG4gXFx0Y2FzZSBLVk1fUzM5MF9LRVlPUF9TU0tFOlxcbiBcXHRcXHRyID0gZGF0X2NvbmRfc2V0X3N0b3JhZ2Vfa2V5KG1jLCBhc2NlLCBnZm4sIHNrZXksIFxcdTAwMjZza2V5LCAwLCAwLCAwKTtcXG4tXFx0XFx0aWYgKHIgXFx1MDAzZT0gMClcXG4rXFx0XFx0aWYgKHIgPT0gMCB8fCByID09IDEpXFxuIFxcdFxcdFxcdHJldHVybiBza2V5LnNrZXk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIEtWTV9TMzkwX0tFWU9QX0lTS0U6XFxuQEAgLTU4MCwxNCArNTgwLDE0IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfa2V5b3Aoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBrdm0gKmt2bSwgaW50IG9wXFxuIFxcdFxcdFxcdHJldHVybiBza2V5LnNrZXk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIEtWTV9TMzkwX0tFWU9QX1JSQkU6XFxuLVxcdFxcdHIgPSBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdChhc2NlLCBnZm4pO1xcbi1cXHRcXHRpZiAociBcXHUwMDNlIDApXFxuLVxcdFxcdFxcdHJldHVybiByIFxcdTAwM2NcXHUwMDNjIDE7XFxuK1xcdFxcdHIgPSBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdChhc2NlLCBnZm4sIFxcdTAwMjZza2V5KTtcXG4rXFx0XFx0aWYgKCFyKVxcbitcXHRcXHRcXHRyZXR1cm4gc2tleS5za2V5O1xcbiBcXHRcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4tXFx0cmV0dXJuIHI7XFxuK1xcdHJldHVybiByIFxcdTAwM2UgMCA/IC1FRkFVTFQgOiByO1xcbiB9XFxuIFxcbiAvKiBTZWN0aW9uOiBkZXZpY2UgcmVsYXRlZCAqL1xcbkBAIC0xMjE5LDggKzEyMTksOCBAQCBzdGF0aWMgdm9pZCBrdm1fczM5MF9zeW5jX3JlcXVlc3RfYnJvYWRjYXN0KHN0cnVjdCBrdm0gKmt2bSwgaW50IHJlcSlcXG4gXFxuIC8qXFxuICAqIE11c3QgYmUgY2FsbGVkIHdpdGgga3ZtLVxcdTAwM2VzcmN1IGhlbGQgdG8gYXZvaWQgcmFjZXMgb24gbWVtc2xvdHMsIGFuZCB3aXRoXFxuLSAqIGt2bS1cXHUwMDNlc2xvdHNfbG9jayB0byBhdm9pZCByYWNlcyB3aXRoIG91cnNlbHZlcywga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb24oKSxcXG4tICogYW5kIGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoKS5cXG4rICoga3ZtLVxcdTAwM2VzbG90c19hcmNoX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsXFxuKyAqIGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKCksIGFuZCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKCkuXFxuICAqL1xcbiBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXFxuIHtcXG5AQCAtMTI2NSw3ICsxMjY1LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKVxcbiB9XFxuIFxcbiAvKlxcbi0gKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGt2bS1cXHUwMDNlc2xvdHNfbG9jayB0byBhdm9pZCByYWNlcyB3aXRoIG91cnNlbHZlcyxcXG4rICogTXVzdCBiZSBjYWxsZWQgd2l0aCBrdm0tXFx1MDAzZXNsb3RzX2FyY2hfbG9jayB0byBhdm9pZCByYWNlcyB3aXRoIG91cnNlbHZlcyxcXG4gICoga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKCkgYW5kIGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoKS5cXG4gICovXFxuIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKVxcbkBAIC0xMzAwLDcgKzEzMDAsOSBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtLFxcbiB7XFxuIFxcdGludCByZXMgPSAtRU5YSU87XFxuIFxcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbitcXHRndWFyZChzcmN1KShcXHUwMDI2a3ZtLVxcdTAwM2VzcmN1KTtcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2FyY2hfbG9jayk7XFxuK1xcbiBcXHRzd2l0Y2ggKGF0dHItXFx1MDAzZWF0dHIpIHtcXG4gXFx0Y2FzZSBLVk1fUzM5MF9WTV9NSUdSQVRJT05fU1RBUlQ6XFxuIFxcdFxcdHJlcyA9IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihrdm0pO1xcbkBAIC0xMzExLDcgKzEzMTMsNiBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuIFxcbiBcXHRyZXR1cm4gcmVzO1xcbiB9XFxuQEAgLTIyMTQsNyArMjIxNSw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfZ2V0X3NrZXlzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX3NrZXlzICphcmdzKVxcbiBcXHR9XFxuIFxcbiBcXHRrdmZyZWUoa2V5cyk7XFxuLVxcdHJldHVybiByO1xcbitcXHRyZXR1cm4gciBcXHUwMDNjPSAwID8gciA6IC1FRkFVTFQ7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X3NrZXlzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX3NrZXlzICphcmdzKVxcbkBAIC0yMjc2LDcgKzIyNzcsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3NldF9za2V5cyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9za2V5cyAqYXJncylcXG4gXFx0a3ZtX3MzOTBfZnJlZV9tbXVfY2FjaGUobWMpO1xcbiBvdXQ6XFxuIFxcdGt2ZnJlZShrZXlzKTtcXG4tXFx0cmV0dXJuIHI7XFxuK1xcdHJldHVybiByIFxcdTAwM2M9IDAgPyByIDogLUVGQVVMVDtcXG4gfVxcbiBcXG4gLypcXG5AQCAtMjM4Niw3ICsyMzg3LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfY21tYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSxcXG4gXFxuIFxcdHNldF9iaXQoR01BUF9GTEFHX1VTRVNfQ01NLCBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmdtYXAtXFx1MDAzZWZsYWdzKTtcXG4gXFxuLVxcdHJldHVybiByO1xcbitcXHRyZXR1cm4gciBcXHUwMDNjPSAwID8gciA6IC1FRkFVTFQ7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC0yOTk4LDkgKzI5OTksOCBAQCBpbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuIFxcdFxcdHIgPSAtRUZBVUxUO1xcbiBcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNmFyZ3MsIGFyZ3AsIHNpemVvZihhcmdzKSkpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbi1cXHRcXHRyID0ga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cyhrdm0sIFxcdTAwMjZhcmdzKTtcXG4tXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbitcXHRcXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2FyY2hfbG9jaylcXG4rXFx0XFx0XFx0ciA9IGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoa3ZtLCBcXHUwMDI2YXJncyk7XFxuIFxcdFxcdGlmICghcikge1xcbiBcXHRcXHRcXHRyID0gY29weV90b191c2VyKGFyZ3AsIFxcdTAwMjZhcmdzLCBzaXplb2YoYXJncykpO1xcbiBcXHRcXHRcXHRpZiAocilcXG5AQCAtMzAxNCw5ICszMDE0LDkgQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbiBcXHRcXHRyID0gLUVGQVVMVDtcXG4gXFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZhcmdzLCBhcmdwLCBzaXplb2YoYXJncykpKVxcbiBcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG4rXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19hcmNoX2xvY2spO1xcbiBcXHRcXHRyID0ga3ZtX3MzOTBfc2V0X2NtbWFfYml0cyhrdm0sIFxcdTAwMjZhcmdzKTtcXG4tXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gXFx0Y2FzZSBLVk1fUzM5MF9QVl9DT01NQU5EOiB7XFxuQEAgLTM0NjEsNyArMzQ2MSw3IEBAIHN0YXRpYyB2b2lkIHNjYV9kZWxfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0c3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5zY2E7XFxuIFxcbi1cXHRpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKVxcbitcXHRpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpIHx8ICF2Y3B1LVxcdTAwM2VhcmNoLmluaXRpYWxpemVkKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRjbGVhcl9iaXRfaW52KHZjcHUtXFx1MDAzZXZjcHVfaWQsICh1bnNpZ25lZCBsb25nICopc2NhLVxcdTAwM2VtY24pO1xcbkBAIC0zNDgxLDggKzM0ODEsOCBAQCBzdGF0aWMgdm9pZCBzY2FfYWRkX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbitcXHRXUklURV9PTkNFKHNjYS1cXHUwMDNlY3B1W3ZjcHUtXFx1MDAzZXZjcHVfaWRdLnNkYSwgdmlydF90b19waHlzKHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrKSk7XFxuIFxcdHNldF9iaXRfaW52KHZjcHUtXFx1MDAzZXZjcHVfaWQsICh1bnNpZ25lZCBsb25nICopc2NhLVxcdTAwM2VtY24pO1xcbi1cXHRzY2EtXFx1MDAzZWNwdVt2Y3B1LVxcdTAwM2V2Y3B1X2lkXS5zZGEgPSB2aXJ0X3RvX3BoeXModmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2spO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHNjYV9jYW5fYWRkX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQpXFxuQEAgLTM2MTMsNiArMzYxMyw5IEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0aWYgKHRlc3Rfa3ZtX2ZhY2lsaXR5KHZjcHUtXFx1MDAzZWt2bSwgNzQpIHx8IHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC51c2VyX2luc3RyMCB8fFxcbiBcXHQgICAgdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLnVzZXJfb3BlcmV4ZWMpXFxuIFxcdFxcdHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrLVxcdTAwM2VpY3RsIHw9IElDVExfT1BFUkVYQztcXG4rXFxuK1xcdC8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKCkgYW5kIGt2bV9hcmNoX3ZjcHVfaW9jdGwoKSAqL1xcbitcXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5pbml0aWFsaXplZCwgdHJ1ZSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIGt2bV9oYXNfcGNrbW9fc3ViZnVuYyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbnIpXFxuQEAgLTM2NzQsNyArMzY3Nyw4IEBAIHN0YXRpYyB2b2lkIGt2bV9zMzkwX3ZjcHVfY3J5cHRvX3NldHVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFxuIHZvaWQga3ZtX3MzOTBfdmNwdV91bnNldHVwX2NtbWEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuLVxcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwaHlzX3RvX3ZpcnQodmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZWNicmxvKSk7XFxuK1xcdGlmICh2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jay1cXHUwMDNlY2JybG8pXFxuK1xcdFxcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwaHlzX3RvX3ZpcnQodmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZWNicmxvKSk7XFxuIFxcdHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrLVxcdTAwM2VjYnJsbyA9IDA7XFxuIH1cXG4gXFxuQEAgLTM3OTIsMjEgKzM3OTYsMjEgQEAgaW50IGt2bV9hcmNoX3ZjcHVfcHJlY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rREVGSU5FX0ZSRUUoc2llX3BhZ2UsIHN0cnVjdCBzaWVfcGFnZSAqLCBpZiAoX1QpIGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykoX1QpKSlcXG4rXFxuIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4tXFx0c3RydWN0IHNpZV9wYWdlICpzaWVfcGFnZTtcXG4rXFx0c3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMgX19mcmVlKGt2bV9zMzkwX21tdV9jYWNoZSkgPSBOVUxMO1xcbitcXHRzdHJ1Y3Qgc2llX3BhZ2UgKnNpZV9wYWdlIF9fZnJlZShzaWVfcGFnZSkgPSBOVUxMO1xcbiBcXHRpbnQgcmM7XFxuIFxcbiBcXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBzaWVfcGFnZSkgIT0gNDA5Nik7XFxuLVxcdHZjcHUtXFx1MDAzZWFyY2gubWMgPSBrdm1fczM5MF9uZXdfbW11X2NhY2hlKCk7XFxuLVxcdGlmICghdmNwdS1cXHUwMDNlYXJjaC5tYylcXG4rXFx0bWMgPSBrdm1fczM5MF9uZXdfbW11X2NhY2hlKCk7XFxuK1xcdGlmICghbWMpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHRzaWVfcGFnZSA9IChzdHJ1Y3Qgc2llX3BhZ2UgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuLVxcdGlmICghc2llX3BhZ2UpIHtcXG4tXFx0XFx0a3ZtX3MzOTBfZnJlZV9tbXVfY2FjaGUodmNwdS1cXHUwMDNlYXJjaC5tYyk7XFxuLVxcdFxcdHZjcHUtXFx1MDAzZWFyY2gubWMgPSBOVUxMO1xcbitcXHRpZiAoIXNpZV9wYWdlKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFx0fVxcbiBcXG4gXFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2sgPSBcXHUwMDI2c2llX3BhZ2UtXFx1MDAzZXNpZV9ibG9jaztcXG4gXFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZWl0ZGJhID0gdmlydF90b19waHlzKFxcdTAwMjZzaWVfcGFnZS1cXHUwMDNlaXRkYik7XFxuQEAgLTM4NDgsMTAgKzM4NTIsOSBAQCBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRcXHR2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZWt2bV92YWxpZF9yZWdzIHw9IEtWTV9TWU5DX0ZQUlM7XFxuIFxcbiBcXHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSkpIHtcXG4tXFx0XFx0cmMgPSAtRU5PTUVNO1xcbiBcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLmdtYXAgPSBnbWFwX25ld19jaGlsZCh2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guZ21hcCwgLTFVTCk7XFxuIFxcdFxcdGlmICghdmNwdS1cXHUwMDNlYXJjaC5nbWFwKVxcbi1cXHRcXHRcXHRnb3RvIG91dF9mcmVlX3NpZV9ibG9jaztcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdH1cXG4gXFxuIFxcdFZNX0VWRU5UKHZjcHUtXFx1MDAzZWt2bSwgMywgXFxcImNyZWF0ZSBjcHUgJWQgYXQgMHglcCwgc2llIGJsb2NrIGF0IDB4JXBcXFwiLFxcbkBAIC0zODU5LDIwICszODYyLDE5IEBAIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdHRyYWNlX2t2bV9zMzkwX2NyZWF0ZV92Y3B1KHZjcHUtXFx1MDAzZXZjcHVfaWQsIHZjcHUsIHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrKTtcXG4gXFxuIFxcdHJjID0ga3ZtX3MzOTBfdmNwdV9zZXR1cCh2Y3B1KTtcXG4tXFx0aWYgKHJjKVxcbi1cXHRcXHRnb3RvIG91dF91Y29udHJvbF91bmluaXQ7XFxuK1xcdGlmIChyYykge1xcbitcXHRcXHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSkpIHtcXG4rXFx0XFx0XFx0c2NvcGVkX2d1YXJkKHNwaW5sb2NrLCBcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLmdtYXAtXFx1MDAzZWNoaWxkcmVuX2xvY2spXFxuK1xcdFxcdFxcdFxcdGdtYXBfcmVtb3ZlX2NoaWxkKHZjcHUtXFx1MDAzZWFyY2guZ21hcCk7XFxuK1xcdFxcdFxcdHZjcHUtXFx1MDAzZWFyY2guZ21hcCA9IGdtYXBfcHV0KHZjcHUtXFx1MDAzZWFyY2guZ21hcCk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXHR9XFxuIFxcbitcXHR2Y3B1LVxcdTAwM2VhcmNoLm1jID0gbm9fZnJlZV9wdHIobWMpO1xcbitcXHRzaWVfcGFnZSA9IE5VTEw7XFxuIFxcdGt2bV9zMzkwX3VwZGF0ZV90b3BvbG9neV9jaGFuZ2VfcmVwb3J0KHZjcHUtXFx1MDAzZWt2bSwgMSk7XFxuIFxcdHJldHVybiAwO1xcbi1cXG4tb3V0X3Vjb250cm9sX3VuaW5pdDpcXG4tXFx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVxcdTAwM2Vrdm0pKSB7XFxuLVxcdFxcdGdtYXBfcmVtb3ZlX2NoaWxkKHZjcHUtXFx1MDAzZWFyY2guZ21hcCk7XFxuLVxcdFxcdHZjcHUtXFx1MDAzZWFyY2guZ21hcCA9IGdtYXBfcHV0KHZjcHUtXFx1MDAzZWFyY2guZ21hcCk7XFxuLVxcdH1cXG4tb3V0X2ZyZWVfc2llX2Jsb2NrOlxcbi1cXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpKHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrKSk7XFxuLVxcdHJldHVybiByYztcXG4gfVxcbiBcXG4gaW50IGt2bV9hcmNoX3ZjcHVfcnVubmFibGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbkBAIC01MDM5LDYgKzUwNDEsMTAgQEAgaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0ICAgIGt2bV9ydW4tXFx1MDAzZWt2bV9kaXJ0eV9yZWdzIFxcdTAwMjYgfktWTV9TWU5DX1MzOTBfVkFMSURfRklFTERTKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuK1xcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUoKSAqL1xcbitcXHRpZiAoIXNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guaW5pdGlhbGl6ZWQpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuIFxcdHZjcHVfbG9hZCh2Y3B1KTtcXG4gXFxuIFxcdGlmIChndWVzdGRiZ19leGl0X3BlbmRpbmcodmNwdSkpIHtcXG5AQCAtNTUyMyw2ICs1NTI5LDEwIEBAIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcXG4gXFx0bG9uZyByO1xcbiBcXHR1MTYgcmMsIHJyYztcXG4gXFxuK1xcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUoKSAqL1xcbitcXHRpZiAoIXNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guaW5pdGlhbGl6ZWQpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuIFxcdHZjcHVfbG9hZCh2Y3B1KTtcXG4gXFxuIFxcdHN3aXRjaCAoaW9jdGwpIHtcXG5AQCAtNTc5NCwyNCArNTgwNCw0NCBAQCBpbnQga3ZtX2FyY2hfcHJlcGFyZV9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBsb25nIGNtbWFfZF9jb3VudF9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaylcXG4re1xcbitcXHR1bmlvbiBwZ3N0ZSBwZ3N0ZTtcXG4rXFxuK1xcdHBnc3RlID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7XFxuK1xcdGlmIChwZ3N0ZS5jbW1hX2QpIHtcXG4rXFx0XFx0cGdzdGUuY21tYV9kID0gMDtcXG4rXFx0XFx0YXRvbWljNjRfZGVjKHdhbGstXFx1MDAzZXByaXYpO1xcbitcXHR9XFxuK1xcdHBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm9sZCxcXG4gXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbmV3LFxcbiBcXHRcXHRcXHRcXHRlbnVtIGt2bV9tcl9jaGFuZ2UgY2hhbmdlKVxcbiB7XFxuLVxcdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jID0gTlVMTDtcXG4tXFx0aW50IHJjID0gMDtcXG4rXFx0Y29uc3Qgc3RydWN0IGRhdF93YWxrX29wcyBvcHMgPSB7IC5wdGVfZW50cnkgPSBjbW1hX2RfY291bnRfcHRlLCB9O1xcbitcXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYyBfX2ZyZWUoa3ZtX3MzOTBfbW11X2NhY2hlKSA9IE5VTEw7XFxuK1xcdGludCByYyA9IC1FTk9NRU07XFxuK1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcXG4gXFxuIFxcdGlmIChjaGFuZ2UgPT0gS1ZNX01SX0ZMQUdTX09OTFkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdG1jID0ga3ZtX3MzOTBfbmV3X21tdV9jYWNoZSgpO1xcbi1cXHRpZiAoIW1jKSB7XFxuLVxcdFxcdHJjID0gLUVOT01FTTtcXG4rXFx0aWYgKCFtYylcXG4gXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4tXFxuK3JldHJ5OlxcbiBcXHRzY29wZWRfZ3VhcmQod3JpdGVfbG9jaywgXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spIHtcXG4rXFx0XFx0aWYgKGt2bS1cXHUwMDNlYXJjaC5taWdyYXRpb25fbW9kZSBcXHUwMDI2XFx1MDAyNiBrdm0tXFx1MDAzZWFyY2gudXNlX2NtbWEgXFx1MDAyNlxcdTAwMjYgb2xkKSB7XFxuK1xcdFxcdFxcdF9kYXRfd2Fsa19nZm5fcmFuZ2Uob2xkLVxcdTAwM2ViYXNlX2dmbiwgb2xkLVxcdTAwM2ViYXNlX2dmbiArIG9sZC1cXHUwMDNlbnBhZ2VzLFxcbitcXHRcXHRcXHRcXHRcXHQgICAga3ZtLVxcdTAwM2VhcmNoLmdtYXAtXFx1MDAzZWFzY2UsIFxcdTAwMjZvcHMsIERBVF9XQUxLX0lHTl9IT0xFUyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY21tYV9kaXJ0eV9wYWdlcyk7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdHN3aXRjaCAoY2hhbmdlKSB7XFxuIFxcdFxcdGNhc2UgS1ZNX01SX0RFTEVURTpcXG4gXFx0XFx0XFx0cmMgPSBkYXRfZGVsZXRlX3Nsb3QobWMsIGt2bS1cXHUwMDNlYXJjaC5nbWFwLVxcdTAwM2Vhc2NlLCBvbGQtXFx1MDAzZWJhc2VfZ2ZuLCBvbGQtXFx1MDAzZW5wYWdlcyk7XFxuQEAgLTU4MjcsMTMgKzU4NTcsMTggQEAgdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdFxcdGNhc2UgS1ZNX01SX0ZMQUdTX09OTFk6XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRkZWZhdWx0OlxcbitcXHRcXHRcXHRyYyA9IDA7XFxuIFxcdFxcdFxcdFdBUk4oMSwgXFxcIlVua25vd24gS1ZNIE1SIENIQU5HRTogJWRcXFxcblxcXCIsIGNoYW5nZSk7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbitcXHRpZiAocmMgPT0gLUVOT01FTSkge1xcbitcXHRcXHRyYyA9IGt2bV9zMzkwX21tdV9jYWNoZV90b3B1cChtYyk7XFxuK1xcdFxcdGlmICghcmMpXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdH1cXG4gb3V0Olxcbi1cXHRpZiAocmMpXFxuK1xcdGlmIChLVk1fQlVHX09OKHJjLCBrdm0pKVxcbiBcXHRcXHRwcl93YXJuKFxcXCJmYWlsZWQgdG8gY29tbWl0IG1lbW9yeSByZWdpb25cXFxcblxcXCIpO1xcbi1cXHRrdm1fczM5MF9mcmVlX21tdV9jYWNoZShtYyk7XFxuIFxcdHJldHVybjtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9wcml2LmMgYi9hcmNoL3MzOTAva3ZtL3ByaXYuY1xcbmluZGV4IGFkMGRkYzQzM2E3M2MuLmIxYmEyNGMzNDZlZmEgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9wcml2LmNcXG4rKysgYi9hcmNoL3MzOTAva3ZtL3ByaXYuY1xcbkBAIC0yODksNiArMjg5LDcgQEAgc3RhdGljIGludCBoYW5kbGVfaXNrZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHN0YXRpYyBpbnQgaGFuZGxlX3JyYmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZ2FkZHI7XFxuK1xcdHVuaW9uIHNrZXkgc2tleTtcXG4gXFx0aW50IHJlZzEsIHJlZzI7XFxuIFxcdGludCByYztcXG4gXFxuQEAgLTMwNywxMiArMzA4LDEyIEBAIHN0YXRpYyBpbnQgaGFuZGxlX3JyYmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRnYWRkciA9IGt2bV9zMzkwX2xvZ2ljYWxfdG9fZWZmZWN0aXZlKHZjcHUsIGdhZGRyKTtcXG4gXFx0Z2FkZHIgPSBrdm1fczM5MF9yZWFsX3RvX2Ficyh2Y3B1LCBnYWRkcik7XFxuIFxcdHNjb3BlZF9ndWFyZChyZWFkX2xvY2ssIFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZW1tdV9sb2NrKVxcbi1cXHRcXHRyYyA9IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHZjcHUtXFx1MDAzZWFyY2guZ21hcC1cXHUwMDNlYXNjZSwgZ3BhX3RvX2dmbihnYWRkcikpO1xcbitcXHRcXHRyYyA9IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHZjcHUtXFx1MDAzZWFyY2guZ21hcC1cXHUwMDNlYXNjZSwgZ3BhX3RvX2dmbihnYWRkciksIFxcdTAwMjZza2V5KTtcXG4gXFx0aWYgKHJjIFxcdTAwM2UgMClcXG4gXFx0XFx0cmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LCByYyk7XFxuIFxcdGlmIChyYyBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiByYztcXG4tXFx0a3ZtX3MzOTBfc2V0X3Bzd19jYyh2Y3B1LCByYyk7XFxuK1xcdGt2bV9zMzkwX3NldF9wc3dfY2ModmNwdSwgKHNrZXkuc2tleSBcXHUwMDNlXFx1MDAzZSAxKSBcXHUwMDI2IDMpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtMTI2MCw4ICsxMjYxLDkgQEAgc3RhdGljIGludCBoYW5kbGVfZXNzYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdFxcdC8qIFJldHJ5IHRoZSBFU1NBIGluc3RydWN0aW9uICovXFxuIFxcdFxcdGt2bV9zMzkwX3JldHJ5X2luc3RyKHZjcHUpO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRzY29wZWRfZ3VhcmQocmVhZF9sb2NrLCBcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VtbXVfbG9jaylcXG4tXFx0XFx0XFx0aSA9IF9fZG9fZXNzYSh2Y3B1LCBvcmMpO1xcbitcXHRcXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZXNsb3RzX2FyY2hfbG9jaylcXG4rXFx0XFx0XFx0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlbW11X2xvY2spXFxuK1xcdFxcdFxcdFxcdGkgPSBfX2RvX2Vzc2EodmNwdSwgb3JjKTtcXG4gXFx0XFx0aWYgKGkgXFx1MDAzYyAwKVxcbiBcXHRcXHRcXHRyZXR1cm4gaTtcXG4gXFx0XFx0LyogQWNjb3VudCBmb3IgdGhlIHBvc3NpYmxlIGV4dHJhIGNicmwgZW50cnkgKi9cXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9wdi5jIGIvYXJjaC9zMzkwL2t2bS9wdi5jXFxuaW5kZXggMWJlYWNjODQxY2E4NS4uYjAyZTAxNTlkM2NkMiAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva3ZtL3B2LmNcXG4rKysgYi9hcmNoL3MzOTAva3ZtL3B2LmNcXG5AQCAtMjQ0LDYgKzI0NCwyNCBAQCBzdGF0aWMgdm9pZCBrdm1fczM5MF9jbGVhcl9wdl9zdGF0ZShzdHJ1Y3Qga3ZtICprdm0pXFxuIFxcdGt2bS1cXHUwMDNlYXJjaC5wdi5zdG9yX3ZhciA9IE5VTEw7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGt2bV9zMzkwX3B2X2Rpc3Bvc2VfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmcmVlX3N0b3JfYmFzZSlcXG4re1xcbitcXHRpZiAoZnJlZV9zdG9yX2Jhc2UpXFxuK1xcdFxcdGZyZWVfcGFnZXModmNwdS1cXHUwMDNlYXJjaC5wdi5zdG9yX2Jhc2UsIGdldF9vcmRlcih1dl9pbmZvLmd1ZXN0X2NwdV9zdG9yX2xlbikpO1xcbitcXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2lkYV9hZGRyKHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrKSk7XFxuK1xcdHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrLVxcdTAwM2Vwdl9oYW5kbGVfY3B1ID0gMDtcXG4rXFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZXB2X2hhbmRsZV9jb25maWcgPSAwO1xcbitcXHRtZW1zZXQoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gucHYsIDAsIHNpemVvZih2Y3B1LVxcdTAwM2VhcmNoLnB2KSk7XFxuK1xcdHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrLVxcdTAwM2VzZGYgPSAwO1xcbitcXHQvKlxcbitcXHQgKiBUaGUgc2lkYWQgZmllbGQgKGZvciBzZGYgPT0gMikgaXMgbm93IHRoZSBnYmVhIGZpZWxkIChmb3Igc2RmID09IDApLlxcbitcXHQgKiBVc2UgdGhlIHJlc2V0IHZhbHVlIG9mIGdiZWEgdG8gYXZvaWQgbGVha2luZyB0aGUga2VybmVsIHBvaW50ZXIgb2ZcXG4rXFx0ICogdGhlIGp1c3QgZnJlZWQgc2lkYS5cXG4rXFx0ICovXFxuK1xcdHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrLVxcdTAwM2VnYmVhID0gMTtcXG4rXFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1RMQl9GTFVTSCwgdmNwdSk7XFxuK31cXG4rXFxuIGludCBrdm1fczM5MF9wdl9kZXN0cm95X2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKVxcbiB7XFxuIFxcdGludCBjYztcXG5AQCAtMjU4LDI0ICsyNzYsOSBAQCBpbnQga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYylcXG4gXFx0V0FSTl9PTkNFKGNjLCBcXFwicHJvdHZpcnQgZGVzdHJveSBjcHUgZmFpbGVkIHJjICV4IHJyYyAleFxcXCIsICpyYywgKnJyYyk7XFxuIFxcbiBcXHQvKiBJbnRlbmRlZCBtZW1vcnkgbGVhayBmb3Igc29tZXRoaW5nIHRoYXQgc2hvdWxkIG5ldmVyIGhhcHBlbi4gKi9cXG4tXFx0aWYgKCFjYylcXG4tXFx0XFx0ZnJlZV9wYWdlcyh2Y3B1LVxcdTAwM2VhcmNoLnB2LnN0b3JfYmFzZSxcXG4tXFx0XFx0XFx0ICAgZ2V0X29yZGVyKHV2X2luZm8uZ3Vlc3RfY3B1X3N0b3JfbGVuKSk7XFxuLVxcbi1cXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2lkYV9hZGRyKHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrKSk7XFxuLVxcdHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrLVxcdTAwM2Vwdl9oYW5kbGVfY3B1ID0gMDtcXG4tXFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZXB2X2hhbmRsZV9jb25maWcgPSAwO1xcbi1cXHRtZW1zZXQoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gucHYsIDAsIHNpemVvZih2Y3B1LVxcdTAwM2VhcmNoLnB2KSk7XFxuLVxcdHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrLVxcdTAwM2VzZGYgPSAwO1xcbi1cXHQvKlxcbi1cXHQgKiBUaGUgc2lkYWQgZmllbGQgKGZvciBzZGYgPT0gMikgaXMgbm93IHRoZSBnYmVhIGZpZWxkIChmb3Igc2RmID09IDApLlxcbi1cXHQgKiBVc2UgdGhlIHJlc2V0IHZhbHVlIG9mIGdiZWEgdG8gYXZvaWQgbGVha2luZyB0aGUga2VybmVsIHBvaW50ZXIgb2ZcXG4tXFx0ICogdGhlIGp1c3QgZnJlZWQgc2lkYS5cXG4tXFx0ICovXFxuLVxcdHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrLVxcdTAwM2VnYmVhID0gMTtcXG4tXFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1RMQl9GTFVTSCwgdmNwdSk7XFxuK1xcdGt2bV9zMzkwX3B2X2Rpc3Bvc2VfY3B1KHZjcHUsICFjYyk7XFxuIFxcbi1cXHRyZXR1cm4gY2MgPyBFSU8gOiAwO1xcbitcXHRyZXR1cm4gY2MgPyAtRUlPIDogMDtcXG4gfVxcbiBcXG4gaW50IGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYylcXG5AQCAtMzE5LDkgKzMyMiw3IEBAIGludCBrdm1fczM5MF9wdl9jcmVhdGVfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXFxuIFxcdFxcdCAgICAgdXZjYi5oZWFkZXIucnJjKTtcXG4gXFxuIFxcdGlmIChjYykge1xcbi1cXHRcXHR1MTYgZHVtbXk7XFxuLVxcbi1cXHRcXHRrdm1fczM5MF9wdl9kZXN0cm95X2NwdSh2Y3B1LCBcXHUwMDI2ZHVtbXksIFxcdTAwMjZkdW1teSk7XFxuK1xcdFxcdGt2bV9zMzkwX3B2X2Rpc3Bvc2VfY3B1KHZjcHUsIHRydWUpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTztcXG4gXFx0fVxcbiBcXG5AQCAtODA5LDcgKzgxMCw3IEBAIHN0YXRpYyBpbnQgdW5wYWNrX29uZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgYWRkciwgdTY0IHR3ZWFrLFxcbiBcXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiByZXQgIT0gLUVBR0FJTilcXG4rXFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiByZXQgIT0gLUVBR0FJTiBcXHUwMDI2XFx1MDAyNiByZXQgIT0gLUVJTlRSKVxcbiBcXHRcXHRLVk1fVVZfRVZFTlQoa3ZtLCAzLCBcXFwiUFJPVFZJUlQgVk0gVU5QQUNLOiBmYWlsZWQgYWRkciAlbGx4IHdpdGggcmMgJXggcnJjICV4XFxcIixcXG4gXFx0XFx0XFx0ICAgICB1dmNiLmdhZGRyLCAqcmMsICpycmMpO1xcbiBcXHRyZXR1cm4gcmV0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDowNjowNi43NDQwMTk4OTdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTI1NTU2MTQ5MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2FyY2hfdmNwdV9jcmVhdGVcIixcbiAgICBcImt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uXCIsXG4gICAgXCJrdm1fczM5MF9wdl9jcmVhdGVfY3B1XCIsXG4gICAgXCJrdm1fczM5MF9wdl9kZXN0cm95X2NwdVwiLFxuICAgIFwia3ZtX3MzOTBfZmF1bHRpbl9nZm5cIixcbiAgICBcImt2bV9zMzkwX2luamVjdF92Y3B1XCIsXG4gICAgXCJrdm1fczM5MF9oYW5kbGVfYjJcIixcbiAgICBcImt2bV9zMzkwX2hhbmRsZV9iOVwiLFxuICAgIFwia3ZtX2FyY2hfdm1faW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBzMzkwIEtWTSBpbXBsZW1lbnRhdGlvbiwgaW5jbHVkaW5nIGZpeGluZyBtZW1vcnkgbGVha3MgZHVyaW5nIHZDUFUgY3JlYXRpb24vZGVzdHJ1Y3Rpb24sIG1vZGlmeWluZyByZWZlcmVuY2UgYml0IHJlc2V0dGluZyBmb3Igc3RvcmFnZSBrZXlzLCBhZGp1c3Rpbmcgc2lnbmFsIGhhbmRsaW5nIGR1cmluZyBwYWdlIGZhdWx0cywgYW5kIGltcHJvdmluZyBsb2NraW5nIGR1cmluZyBtZW1vcnkgcmVnaW9uIGNvbW1pdHMgYW5kIG1pZ3JhdGlvbi4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIHZpcnR1YWxpemF0aW9uIGZlYXR1cmVzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZmJmNWNkNWI5YTI0MDM1OTc1NjhjOGRlZmJhZTI5ZTc4N2YyNDU4OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMxIDAwOjA2OjA1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggZWFhMzRjNWJkM2MxMS4uZWRmNzViNmFkMjBjZSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4rKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTQ0MCw2ICs0NDAsNyBAQCBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7XG4gXHRib29sIHNrZXlfZW5hYmxlZDtcbiBcdC8qIEluZGljYXRvciBpZiB0aGUgYWNjZXNzIHJlZ2lzdGVycyBoYXZlIGJlZW4gbG9hZGVkIGZyb20gZ3Vlc3QgKi9cbiBcdGJvb2wgYWNyc19sb2FkZWQ7XG4rXHRib29sIGluaXRpYWxpemVkO1xuIFx0c3RydWN0IGt2bV9zMzkwX3B2X3ZjcHUgcHY7XG4gXHR1bmlvbiBkaWFnMzE4X2luZm8gZGlhZzMxOF9pbmZvO1xuIFx0c3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWM7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9kYXQuYyBiL2FyY2gvczM5MC9rdm0vZGF0LmNcbmluZGV4IGVkNDI1OWQxNzYyOTUuLjNmMmQ2ZTg5MDJkNzYgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2RhdC5jXG4rKysgYi9hcmNoL3MzOTAva3ZtL2RhdC5jXG5AQCAtNzU1LDEzICs3NTUsMTUgQEAgaW50IGRhdF9jb25kX3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2ZcbiBcdHJldHVybiByYztcbiB9XG4gXG4taW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuKVxuK2ludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbiwgdW5pb24gc2tleSAqc2tleSlcbiB7XG4gXHR1bmlvbiBwZ3N0ZSBwZ3N0ZSwgb2xkO1xuIFx0dW5pb24gY3JzdGUgKmNyc3RlcDtcbiBcdHVuaW9uIHB0ZSAqcHRlcDtcbiBcdGludCByYztcbiBcbitcdHNrZXktXHUwMDNlc2tleSA9IDA7XG4rXG4gXHRyYyA9IGRhdF9lbnRyeV93YWxrKE5VTEwsIGdmbiwgYXNjZSwgREFUX1dBTEtfQU5ZLCBUQUJMRV9UWVBFX1BBR0VfVEFCTEUsIFx1MDAyNmNyc3RlcCwgXHUwMDI2cHRlcCk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiByYztcbkBAIC03NzEsMjEgKzc3MywyMyBAQCBpbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4pXG4gXG4gXHRcdGlmICghY3JzdGUuaC5mYyB8fCAhY3JzdGUucy5mYzEucHIpXG4gXHRcdFx0cmV0dXJuIDA7XG4tXHRcdHJldHVybiBwYWdlX3Jlc2V0X3JlZmVyZW5jZWQobGFyZ2VfY3JzdGVfdG9fcGh5cygqY3JzdGVwLCBnZm4pKTtcbitcdFx0c2tleS1cdTAwM2Vza2V5ID0gcGFnZV9yZXNldF9yZWZlcmVuY2VkKGxhcmdlX2Nyc3RlX3RvX3BoeXMoKmNyc3RlcCwgZ2ZuKSkgXHUwMDNjXHUwMDNjIDE7XG4rXHRcdHJldHVybiAwO1xuIFx0fVxuIFx0b2xkID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7XG4gXHRwZ3N0ZSA9IG9sZDtcbiBcbiBcdGlmICghcHRlcC1cdTAwM2VoLmkpIHtcbi1cdFx0cmMgPSBwYWdlX3Jlc2V0X3JlZmVyZW5jZWQocHRlX29yaWdpbigqcHRlcCkpO1xuLVx0XHRwZ3N0ZS5ociA9IHJjIFx1MDAzZVx1MDAzZSAxO1xuK1x0XHRza2V5LVx1MDAzZXNrZXkgPSBwYWdlX3Jlc2V0X3JlZmVyZW5jZWQocHRlX29yaWdpbigqcHRlcCkpIFx1MDAzY1x1MDAzYyAxO1xuK1x0XHRwZ3N0ZS5ociA9IHNrZXktXHUwMDNlcjtcbiBcdH1cbi1cdHJjIHw9IChwZ3N0ZS5nciBcdTAwM2NcdTAwM2MgMSkgfCBwZ3N0ZS5nYztcbitcdHNrZXktXHUwMDNlciB8PSBwZ3N0ZS5ncjtcbitcdHNrZXktXHUwMDNlYyB8PSBwZ3N0ZS5nYztcbiBcdHBnc3RlLmdyID0gMDtcbiBcbiBcdGRhdF91cGRhdGVfcHRlcF9zZChvbGQsIHBnc3RlLCBwdGVwKTtcbiBcdHBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpO1xuLVx0cmV0dXJuIHJjO1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBsb25nIGRhdF9yZXNldF9za2V5c19wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaylcbkBAIC04NDYsNiArODUwLDcgQEAgc3RhdGljIGxvbmcgX2RhdF9zbG90X3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxcbiBcdHN0cnVjdCBzbG90X3ByaXYgKnAgPSB3YWxrLVx1MDAzZXByaXY7XG4gXHR1bmlvbiBjcnN0ZSBkdW1teSA9IHsgLnZhbCA9IHAtXHUwMDNldG9rZW4gfTtcbiBcdHVuaW9uIHB0ZSBuZXdfcHRlLCBwdGUgPSBSRUFEX09OQ0UoKnB0ZXApO1xuK1x0dW5pb24gcGdzdGUgcGdzdGU7XG4gXG4gXHRuZXdfcHRlID0gX1BURV9UT0soZHVtbXkudG9rLnR5cGUsIGR1bW15LnRvay5wYXIpO1xuIFxuQEAgLTg1Myw3ICs4NTgsMTEgQEAgc3RhdGljIGxvbmcgX2RhdF9zbG90X3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxcbiBcdGlmIChwdGUudmFsID09IG5ld19wdGUudmFsKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGRhdF9wdGVwX3hjaGcocHRlcCwgbmV3X3B0ZSwgZ2ZuLCB3YWxrLVx1MDAzZWFzY2UsIGZhbHNlKTtcbitcdHBnc3RlID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7XG4rXHRwZ3N0ZSA9IF9fZGF0X3B0ZXBfeGNoZyhwdGVwLCBwZ3N0ZSwgbmV3X3B0ZSwgZ2ZuLCB3YWxrLVx1MDAzZWFzY2UsIGZhbHNlKTtcbitcdHBnc3RlLmNtbWFfZCA9IDA7XG4rXHRwZ3N0ZV9zZXRfdW5sb2NrKHB0ZXAsIHBnc3RlKTtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2RhdC5oIGIvYXJjaC9zMzkwL2t2bS9kYXQuaFxuaW5kZXggZmFkNjA1MzA1ZTA1Yy4uMTQxZWU3YjlmMDE5MSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vZGF0LmhcbisrKyBiL2FyY2gvczM5MC9rdm0vZGF0LmhcbkBAIC01MzcsNyArNTM3LDcgQEAgaW50IGRhdF9zZXRfc3RvcmFnZV9rZXkoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZcbiBcdFx0XHR1bmlvbiBza2V5IHNrZXksIGJvb2wgbnEpO1xuIGludCBkYXRfY29uZF9zZXRfc3RvcmFnZV9rZXkoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbW1jLCB1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbixcbiBcdFx0XHQgICAgIHVuaW9uIHNrZXkgc2tleSwgdW5pb24gc2tleSAqb2xka2V5LCBib29sIG5xLCBib29sIG1yLCBib29sIG1jKTtcbi1pbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4pO1xuK2ludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbiwgdW5pb24gc2tleSAqc2tleSk7XG4gbG9uZyBkYXRfcmVzZXRfc2tleXModW5pb24gYXNjZSBhc2NlLCBnZm5fdCBzdGFydCk7XG4gXG4gdW5zaWduZWQgbG9uZyBkYXRfZ2V0X3B0dmFsKHN0cnVjdCBwYWdlX3RhYmxlICp0YWJsZSwgc3RydWN0IHB0dmFsX3BhcmFtIHBhcmFtKTtcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYyBiL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jXG5pbmRleCBmZWU4MDA0N2JkOTRmLi4zY2M0NWY3ZjViMmQ3IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9mYXVsdGluLmNcbisrKyBiL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jXG5AQCAtOTEsOSArOTEsOSBAQCBpbnQga3ZtX3MzOTBfZmF1bHRpbl9nZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBndWVzdF9mYVxuIFx0XHQvKiBBY2Nlc3Mgb3V0c2lkZSBtZW1vcnksIGFkZHJlc3NpbmcgZXhjZXB0aW9uLiAqL1xuIFx0XHRpZiAoaXNfbm9zbG90X3BmbihmLVx1MDAzZXBmbikpXG4gXHRcdFx0cmV0dXJuIFBHTV9BRERSRVNTSU5HO1xuLVx0XHQvKiBTaWduYWwgcGVuZGluZzogdHJ5IGFnYWluLiAqL1xuLVx0XHRpZiAoZi1cdTAwM2VwZm4gPT0gS1ZNX1BGTl9FUlJfU0lHUEVORElORylcbi1cdFx0XHRyZXR1cm4gLUVBR0FJTjtcbitcdFx0LyogRmF0YWwgc2lnbmFsIHBlbmRpbmc6IGJhaWwgb3V0LiAqL1xuK1x0XHRpZiAoaXNfc2lncGVuZGluZ19wZm4oZi1cdTAwM2VwZm4pKVxuK1x0XHRcdHJldHVybiAtRUlOVFI7XG4gXHRcdC8qIENoZWNrIGlmIGl0J3MgcmVhZC1vbmx5IG1lbW9yeTsgZG9uJ3QgdHJ5IHRvIGFjdHVhbGx5IGhhbmRsZSB0aGF0IGNhc2UuICovXG4gXHRcdGlmIChmLVx1MDAzZXBmbiA9PSBLVk1fUEZOX0VSUl9ST19GQVVMVClcbiBcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcbmluZGV4IDllM2U2YjBkNzJhZDYuLmQwMjcyNGJkMTgyOWMgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXG4rKysgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXG5AQCAtNTAsNiArNTAsOCBAQCBzdGF0aWMgaW50IHNjYV9leHRfY2FsbF9wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50ICpzcmNfaWQpXG4gXHRpZiAoIWt2bV9zMzkwX3Rlc3RfY3B1ZmxhZ3ModmNwdSwgQ1BVU1RBVF9FQ0FMTF9QRU5EKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4rXHRpZiAoS1ZNX0JVR19PTihrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pLCB2Y3B1LVx1MDAzZWt2bSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0QlVHX09OKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSk7XG4gXG4gXHRpZiAoc3JjX2lkKVxuQEAgLTY2LDYgKzY4LDggQEAgc3RhdGljIGludCBzY2FfaW5qZWN0X2V4dF9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNyY19pZClcbiBcdGludCBleHBlY3QsIHJjO1xuIFxuIFx0QlVHX09OKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSk7XG4rXHRpZiAoS1ZNX0JVR19PTihrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pLCB2Y3B1LVx1MDAzZWt2bSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0b2xkX3ZhbCA9IFJFQURfT05DRSgqc2lncF9jdHJsKTtcbiBcdG9sZF92YWwuYyA9IDA7XG5AQCAtODQsMTAgKzg4LDEzIEBAIHN0YXRpYyBpbnQgc2NhX2luamVjdF9leHRfY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzcmNfaWQpXG4gc3RhdGljIHZvaWQgc2NhX2NsZWFyX2V4dF9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRzdHJ1Y3QgZXNjYV9ibG9jayAqc2NhID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5zY2E7XG4tXHR1bmlvbiBlc2NhX3NpZ3BfY3RybCAqc2lncF9jdHJsID0gXHUwMDI2c2NhLVx1MDAzZWNwdVt2Y3B1LVx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcbitcdHVuaW9uIGVzY2Ffc2lncF9jdHJsICpzaWdwX2N0cmw7XG4gXG4tXHRpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKVxuK1x0aWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSB8fCAhdmNwdS1cdTAwM2VhcmNoLmluaXRpYWxpemVkIHx8IGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpXG4gXHRcdHJldHVybjtcbitcbitcdC8qIEluaXRpYWxpemUgYWZ0ZXIgdGhlIGFib3ZlIGNoZWNrLCB0byBwcmV2ZW50IGdvaW5nIG91dCBvZiBib3VuZHMgKi9cbitcdHNpZ3BfY3RybCA9IFx1MDAyNnNjYS1cdTAwM2VjcHVbdmNwdS1cdTAwM2V2Y3B1X2lkXS5zaWdwX2N0cmw7XG4gXHRrdm1fczM5MF9jbGVhcl9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX0VDQUxMX1BFTkQpO1xuIFxuIFx0V1JJVEVfT05DRShzaWdwX2N0cmwtXHUwMDNldmFsdWUsIDApO1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuaW5kZXggMTUwYjVkZDIxNzBlMi4uYjI5ZTU0NjBmNWVmYSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuKysrIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG5AQCAtNTcxLDcgKzU3MSw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfa2V5b3Aoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBrdm0gKmt2bSwgaW50IG9wXG4gXHRzd2l0Y2ggKG9wKSB7XG4gXHRjYXNlIEtWTV9TMzkwX0tFWU9QX1NTS0U6XG4gXHRcdHIgPSBkYXRfY29uZF9zZXRfc3RvcmFnZV9rZXkobWMsIGFzY2UsIGdmbiwgc2tleSwgXHUwMDI2c2tleSwgMCwgMCwgMCk7XG4tXHRcdGlmIChyIFx1MDAzZT0gMClcbitcdFx0aWYgKHIgPT0gMCB8fCByID09IDEpXG4gXHRcdFx0cmV0dXJuIHNrZXkuc2tleTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEtWTV9TMzkwX0tFWU9QX0lTS0U6XG5AQCAtNTgwLDE0ICs1ODAsMTQgQEAgc3RhdGljIGludCBrdm1fczM5MF9rZXlvcChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGt2bSAqa3ZtLCBpbnQgb3BcbiBcdFx0XHRyZXR1cm4gc2tleS5za2V5O1xuIFx0XHRicmVhaztcbiBcdGNhc2UgS1ZNX1MzOTBfS0VZT1BfUlJCRTpcbi1cdFx0ciA9IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KGFzY2UsIGdmbik7XG4tXHRcdGlmIChyIFx1MDAzZSAwKVxuLVx0XHRcdHJldHVybiByIFx1MDAzY1x1MDAzYyAxO1xuK1x0XHRyID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQoYXNjZSwgZ2ZuLCBcdTAwMjZza2V5KTtcbitcdFx0aWYgKCFyKVxuK1x0XHRcdHJldHVybiBza2V5LnNrZXk7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4tXHRyZXR1cm4gcjtcbitcdHJldHVybiByIFx1MDAzZSAwID8gLUVGQVVMVCA6IHI7XG4gfVxuIFxuIC8qIFNlY3Rpb246IGRldmljZSByZWxhdGVkICovXG5AQCAtMTIxOSw4ICsxMjE5LDggQEAgc3RhdGljIHZvaWQga3ZtX3MzOTBfc3luY19yZXF1ZXN0X2Jyb2FkY2FzdChzdHJ1Y3Qga3ZtICprdm0sIGludCByZXEpXG4gXG4gLypcbiAgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGt2bS1cdTAwM2VzcmN1IGhlbGQgdG8gYXZvaWQgcmFjZXMgb24gbWVtc2xvdHMsIGFuZCB3aXRoXG4tICoga3ZtLVx1MDAzZXNsb3RzX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsIGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKCksXG4tICogYW5kIGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoKS5cbisgKiBrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLFxuKyAqIGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKCksIGFuZCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKCkuXG4gICovXG4gc3RhdGljIGludCBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKVxuIHtcbkBAIC0xMjY1LDcgKzEyNjUsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXG4gfVxuIFxuIC8qXG4tICogTXVzdCBiZSBjYWxsZWQgd2l0aCBrdm0tXHUwMDNlc2xvdHNfbG9jayB0byBhdm9pZCByYWNlcyB3aXRoIG91cnNlbHZlcyxcbisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsXG4gICoga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKCkgYW5kIGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoKS5cbiAgKi9cbiBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSlcbkBAIC0xMzAwLDcgKzEzMDAsOSBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtLFxuIHtcbiBcdGludCByZXMgPSAtRU5YSU87XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbitcdGd1YXJkKHNyY3UpKFx1MDAyNmt2bS1cdTAwM2VzcmN1KTtcbitcdGd1YXJkKG11dGV4KShcdTAwMjZrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcbitcbiBcdHN3aXRjaCAoYXR0ci1cdTAwM2VhdHRyKSB7XG4gXHRjYXNlIEtWTV9TMzkwX1ZNX01JR1JBVElPTl9TVEFSVDpcbiBcdFx0cmVzID0ga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKGt2bSk7XG5AQCAtMTMxMSw3ICsxMzEzLDYgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSxcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuIFx0fVxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiBcbiBcdHJldHVybiByZXM7XG4gfVxuQEAgLTIyMTQsNyArMjIxNSw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfZ2V0X3NrZXlzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX3NrZXlzICphcmdzKVxuIFx0fVxuIFxuIFx0a3ZmcmVlKGtleXMpO1xuLVx0cmV0dXJuIHI7XG4rXHRyZXR1cm4gciBcdTAwM2M9IDAgPyByIDogLUVGQVVMVDtcbiB9XG4gXG4gc3RhdGljIGludCBrdm1fczM5MF9zZXRfc2tleXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfc2tleXMgKmFyZ3MpXG5AQCAtMjI3Niw3ICsyMjc3LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfc2tleXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfc2tleXMgKmFyZ3MpXG4gXHRrdm1fczM5MF9mcmVlX21tdV9jYWNoZShtYyk7XG4gb3V0OlxuIFx0a3ZmcmVlKGtleXMpO1xuLVx0cmV0dXJuIHI7XG4rXHRyZXR1cm4gciBcdTAwM2M9IDAgPyByIDogLUVGQVVMVDtcbiB9XG4gXG4gLypcbkBAIC0yMzg2LDcgKzIzODcsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3NldF9jbW1hX2JpdHMoc3RydWN0IGt2bSAqa3ZtLFxuIFxuIFx0c2V0X2JpdChHTUFQX0ZMQUdfVVNFU19DTU0sIFx1MDAyNmt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlZmxhZ3MpO1xuIFxuLVx0cmV0dXJuIHI7XG4rXHRyZXR1cm4gciBcdTAwM2M9IDAgPyByIDogLUVGQVVMVDtcbiB9XG4gXG4gLyoqXG5AQCAtMjk5OCw5ICsyOTk5LDggQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0XHRyID0gLUVGQVVMVDtcbiBcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmFyZ3MsIGFyZ3AsIHNpemVvZihhcmdzKSkpXG4gXHRcdFx0YnJlYWs7XG4tXHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuLVx0XHRyID0ga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cyhrdm0sIFx1MDAyNmFyZ3MpO1xuLVx0XHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuK1x0XHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNmt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2spXG4rXHRcdFx0ciA9IGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoa3ZtLCBcdTAwMjZhcmdzKTtcbiBcdFx0aWYgKCFyKSB7XG4gXHRcdFx0ciA9IGNvcHlfdG9fdXNlcihhcmdwLCBcdTAwMjZhcmdzLCBzaXplb2YoYXJncykpO1xuIFx0XHRcdGlmIChyKVxuQEAgLTMwMTQsOSArMzAxNCw5IEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdFx0ciA9IC1FRkFVTFQ7XG4gXHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZhcmdzLCBhcmdwLCBzaXplb2YoYXJncykpKVxuIFx0XHRcdGJyZWFrO1xuLVx0XHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbitcdFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcbiBcdFx0ciA9IGt2bV9zMzkwX3NldF9jbW1hX2JpdHMoa3ZtLCBcdTAwMjZhcmdzKTtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2spO1xuIFx0XHRicmVhaztcbiBcdH1cbiBcdGNhc2UgS1ZNX1MzOTBfUFZfQ09NTUFORDoge1xuQEAgLTM0NjEsNyArMzQ2MSw3IEBAIHN0YXRpYyB2b2lkIHNjYV9kZWxfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guc2NhO1xuIFxuLVx0aWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSlcbitcdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkgfHwgIXZjcHUtXHUwMDNlYXJjaC5pbml0aWFsaXplZClcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Y2xlYXJfYml0X2ludih2Y3B1LVx1MDAzZXZjcHVfaWQsICh1bnNpZ25lZCBsb25nICopc2NhLVx1MDAzZW1jbik7XG5AQCAtMzQ4MSw4ICszNDgxLDggQEAgc3RhdGljIHZvaWQgc2NhX2FkZF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpXG4gXHRcdHJldHVybjtcbiBcbitcdFdSSVRFX09OQ0Uoc2NhLVx1MDAzZWNwdVt2Y3B1LVx1MDAzZXZjcHVfaWRdLnNkYSwgdmlydF90b19waHlzKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2spKTtcbiBcdHNldF9iaXRfaW52KHZjcHUtXHUwMDNldmNwdV9pZCwgKHVuc2lnbmVkIGxvbmcgKilzY2EtXHUwMDNlbWNuKTtcbi1cdHNjYS1cdTAwM2VjcHVbdmNwdS1cdTAwM2V2Y3B1X2lkXS5zZGEgPSB2aXJ0X3RvX3BoeXModmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jayk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgc2NhX2Nhbl9hZGRfdmNwdShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZClcbkBAIC0zNjEzLDYgKzM2MTMsOSBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAodGVzdF9rdm1fZmFjaWxpdHkodmNwdS1cdTAwM2Vrdm0sIDc0KSB8fCB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnVzZXJfaW5zdHIwIHx8XG4gXHQgICAgdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC51c2VyX29wZXJleGVjKVxuIFx0XHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWljdGwgfD0gSUNUTF9PUEVSRVhDO1xuK1xuK1x0LyogUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4ga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oKSBhbmQga3ZtX2FyY2hfdmNwdV9pb2N0bCgpICovXG4rXHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaW5pdGlhbGl6ZWQsIHRydWUpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBrdm1faGFzX3Bja21vX3N1YmZ1bmMoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIG5yKVxuQEAgLTM2NzQsNyArMzY3Nyw4IEBAIHN0YXRpYyB2b2lkIGt2bV9zMzkwX3ZjcHVfY3J5cHRvX3NldHVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiB2b2lkIGt2bV9zMzkwX3ZjcHVfdW5zZXR1cF9jbW1hKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcGh5c190b192aXJ0KHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlY2JybG8pKTtcbitcdGlmICh2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWNicmxvKVxuK1x0XHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcGh5c190b192aXJ0KHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlY2JybG8pKTtcbiBcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlY2JybG8gPSAwO1xuIH1cbiBcbkBAIC0zNzkyLDIxICszNzk2LDIxIEBAIGludCBrdm1fYXJjaF92Y3B1X3ByZWNyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZClcbiBcdHJldHVybiAwO1xuIH1cbiBcbitERUZJTkVfRlJFRShzaWVfcGFnZSwgc3RydWN0IHNpZV9wYWdlICosIGlmIChfVCkgZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKShfVCkpKVxuK1xuIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0c3RydWN0IHNpZV9wYWdlICpzaWVfcGFnZTtcbitcdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jIF9fZnJlZShrdm1fczM5MF9tbXVfY2FjaGUpID0gTlVMTDtcbitcdHN0cnVjdCBzaWVfcGFnZSAqc2llX3BhZ2UgX19mcmVlKHNpZV9wYWdlKSA9IE5VTEw7XG4gXHRpbnQgcmM7XG4gXG4gXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBzaWVfcGFnZSkgIT0gNDA5Nik7XG4tXHR2Y3B1LVx1MDAzZWFyY2gubWMgPSBrdm1fczM5MF9uZXdfbW11X2NhY2hlKCk7XG4tXHRpZiAoIXZjcHUtXHUwMDNlYXJjaC5tYylcbitcdG1jID0ga3ZtX3MzOTBfbmV3X21tdV9jYWNoZSgpO1xuK1x0aWYgKCFtYylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRzaWVfcGFnZSA9IChzdHJ1Y3Qgc2llX3BhZ2UgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XG4tXHRpZiAoIXNpZV9wYWdlKSB7XG4tXHRcdGt2bV9zMzkwX2ZyZWVfbW11X2NhY2hlKHZjcHUtXHUwMDNlYXJjaC5tYyk7XG4tXHRcdHZjcHUtXHUwMDNlYXJjaC5tYyA9IE5VTEw7XG4rXHRpZiAoIXNpZV9wYWdlKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdH1cbiBcbiBcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2sgPSBcdTAwMjZzaWVfcGFnZS1cdTAwM2VzaWVfYmxvY2s7XG4gXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWl0ZGJhID0gdmlydF90b19waHlzKFx1MDAyNnNpZV9wYWdlLVx1MDAzZWl0ZGIpO1xuQEAgLTM4NDgsMTAgKzM4NTIsOSBAQCBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2Vrdm1fdmFsaWRfcmVncyB8PSBLVk1fU1lOQ19GUFJTO1xuIFxuIFx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpIHtcbi1cdFx0cmMgPSAtRU5PTUVNO1xuIFx0XHR2Y3B1LVx1MDAzZWFyY2guZ21hcCA9IGdtYXBfbmV3X2NoaWxkKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guZ21hcCwgLTFVTCk7XG4gXHRcdGlmICghdmNwdS1cdTAwM2VhcmNoLmdtYXApXG4tXHRcdFx0Z290byBvdXRfZnJlZV9zaWVfYmxvY2s7XG4rXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXG4gXHRWTV9FVkVOVCh2Y3B1LVx1MDAzZWt2bSwgMywgXCJjcmVhdGUgY3B1ICVkIGF0IDB4JXAsIHNpZSBibG9jayBhdCAweCVwXCIsXG5AQCAtMzg1OSwyMCArMzg2MiwxOSBAQCBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0dHJhY2Vfa3ZtX3MzOTBfY3JlYXRlX3ZjcHUodmNwdS1cdTAwM2V2Y3B1X2lkLCB2Y3B1LCB2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrKTtcbiBcbiBcdHJjID0ga3ZtX3MzOTBfdmNwdV9zZXR1cCh2Y3B1KTtcbi1cdGlmIChyYylcbi1cdFx0Z290byBvdXRfdWNvbnRyb2xfdW5pbml0O1xuK1x0aWYgKHJjKSB7XG4rXHRcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKSB7XG4rXHRcdFx0c2NvcGVkX2d1YXJkKHNwaW5sb2NrLCBcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlY2hpbGRyZW5fbG9jaylcbitcdFx0XHRcdGdtYXBfcmVtb3ZlX2NoaWxkKHZjcHUtXHUwMDNlYXJjaC5nbWFwKTtcbitcdFx0XHR2Y3B1LVx1MDAzZWFyY2guZ21hcCA9IGdtYXBfcHV0KHZjcHUtXHUwMDNlYXJjaC5nbWFwKTtcbitcdFx0fVxuK1x0XHRyZXR1cm4gcmM7XG4rXHR9XG4gXG4rXHR2Y3B1LVx1MDAzZWFyY2gubWMgPSBub19mcmVlX3B0cihtYyk7XG4rXHRzaWVfcGFnZSA9IE5VTEw7XG4gXHRrdm1fczM5MF91cGRhdGVfdG9wb2xvZ3lfY2hhbmdlX3JlcG9ydCh2Y3B1LVx1MDAzZWt2bSwgMSk7XG4gXHRyZXR1cm4gMDtcbi1cbi1vdXRfdWNvbnRyb2xfdW5pbml0OlxuLVx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpIHtcbi1cdFx0Z21hcF9yZW1vdmVfY2hpbGQodmNwdS1cdTAwM2VhcmNoLmdtYXApO1xuLVx0XHR2Y3B1LVx1MDAzZWFyY2guZ21hcCA9IGdtYXBfcHV0KHZjcHUtXHUwMDNlYXJjaC5nbWFwKTtcbi1cdH1cbi1vdXRfZnJlZV9zaWVfYmxvY2s6XG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2spKTtcbi1cdHJldHVybiByYztcbiB9XG4gXG4gaW50IGt2bV9hcmNoX3ZjcHVfcnVubmFibGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuQEAgLTUwMzksNiArNTA0MSwxMCBAQCBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICAgIGt2bV9ydW4tXHUwMDNla3ZtX2RpcnR5X3JlZ3MgXHUwMDI2IH5LVk1fU1lOQ19TMzkwX1ZBTElEX0ZJRUxEUylcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4rXHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4ga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKCkgKi9cbitcdGlmICghc21wX2xvYWRfYWNxdWlyZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaW5pdGlhbGl6ZWQpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdHZjcHVfbG9hZCh2Y3B1KTtcbiBcbiBcdGlmIChndWVzdGRiZ19leGl0X3BlbmRpbmcodmNwdSkpIHtcbkBAIC01NTIzLDYgKzU1MjksMTAgQEAgbG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuIFx0bG9uZyByO1xuIFx0dTE2IHJjLCBycmM7XG4gXG4rXHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4ga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKCkgKi9cbitcdGlmICghc21wX2xvYWRfYWNxdWlyZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaW5pdGlhbGl6ZWQpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdHZjcHVfbG9hZCh2Y3B1KTtcbiBcbiBcdHN3aXRjaCAoaW9jdGwpIHtcbkBAIC01Nzk0LDI0ICs1ODA0LDQ0IEBAIGludCBrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBsb25nIGNtbWFfZF9jb3VudF9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2Fsaylcbit7XG4rXHR1bmlvbiBwZ3N0ZSBwZ3N0ZTtcbitcbitcdHBnc3RlID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7XG4rXHRpZiAocGdzdGUuY21tYV9kKSB7XG4rXHRcdHBnc3RlLmNtbWFfZCA9IDA7XG4rXHRcdGF0b21pYzY0X2RlYyh3YWxrLVx1MDAzZXByaXYpO1xuK1x0fVxuK1x0cGdzdGVfc2V0X3VubG9jayhwdGVwLCBwZ3N0ZSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdFx0XHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpvbGQsXG4gXHRcdFx0XHRjb25zdCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpuZXcsXG4gXHRcdFx0XHRlbnVtIGt2bV9tcl9jaGFuZ2UgY2hhbmdlKVxuIHtcbi1cdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jID0gTlVMTDtcbi1cdGludCByYyA9IDA7XG4rXHRjb25zdCBzdHJ1Y3QgZGF0X3dhbGtfb3BzIG9wcyA9IHsgLnB0ZV9lbnRyeSA9IGNtbWFfZF9jb3VudF9wdGUsIH07XG4rXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYyBfX2ZyZWUoa3ZtX3MzOTBfbW11X2NhY2hlKSA9IE5VTEw7XG4rXHRpbnQgcmMgPSAtRU5PTUVNO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNmt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2spO1xuIFxuIFx0aWYgKGNoYW5nZSA9PSBLVk1fTVJfRkxBR1NfT05MWSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0bWMgPSBrdm1fczM5MF9uZXdfbW11X2NhY2hlKCk7XG4tXHRpZiAoIW1jKSB7XG4tXHRcdHJjID0gLUVOT01FTTtcbitcdGlmICghbWMpXG4gXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuK3JldHJ5OlxuIFx0c2NvcGVkX2d1YXJkKHdyaXRlX2xvY2ssIFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jaykge1xuK1x0XHRpZiAoa3ZtLVx1MDAzZWFyY2gubWlncmF0aW9uX21vZGUgXHUwMDI2XHUwMDI2IGt2bS1cdTAwM2VhcmNoLnVzZV9jbW1hIFx1MDAyNlx1MDAyNiBvbGQpIHtcbitcdFx0XHRfZGF0X3dhbGtfZ2ZuX3JhbmdlKG9sZC1cdTAwM2ViYXNlX2dmbiwgb2xkLVx1MDAzZWJhc2VfZ2ZuICsgb2xkLVx1MDAzZW5wYWdlcyxcbitcdFx0XHRcdFx0ICAgIGt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlYXNjZSwgXHUwMDI2b3BzLCBEQVRfV0FMS19JR05fSE9MRVMsXG4rXHRcdFx0XHRcdCAgICBcdTAwMjZrdm0tXHUwMDNlYXJjaC5jbW1hX2RpcnR5X3BhZ2VzKTtcbitcdFx0fVxuK1xuIFx0XHRzd2l0Y2ggKGNoYW5nZSkge1xuIFx0XHRjYXNlIEtWTV9NUl9ERUxFVEU6XG4gXHRcdFx0cmMgPSBkYXRfZGVsZXRlX3Nsb3QobWMsIGt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlYXNjZSwgb2xkLVx1MDAzZWJhc2VfZ2ZuLCBvbGQtXHUwMDNlbnBhZ2VzKTtcbkBAIC01ODI3LDEzICs1ODU3LDE4IEBAIHZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRjYXNlIEtWTV9NUl9GTEFHU19PTkxZOlxuIFx0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuK1x0XHRcdHJjID0gMDtcbiBcdFx0XHRXQVJOKDEsIFwiVW5rbm93biBLVk0gTVIgQ0hBTkdFOiAlZFxcblwiLCBjaGFuZ2UpO1xuIFx0XHR9XG4gXHR9XG4rXHRpZiAocmMgPT0gLUVOT01FTSkge1xuK1x0XHRyYyA9IGt2bV9zMzkwX21tdV9jYWNoZV90b3B1cChtYyk7XG4rXHRcdGlmICghcmMpXG4rXHRcdFx0Z290byByZXRyeTtcbitcdH1cbiBvdXQ6XG4tXHRpZiAocmMpXG4rXHRpZiAoS1ZNX0JVR19PTihyYywga3ZtKSlcbiBcdFx0cHJfd2FybihcImZhaWxlZCB0byBjb21taXQgbWVtb3J5IHJlZ2lvblxcblwiKTtcbi1cdGt2bV9zMzkwX2ZyZWVfbW11X2NhY2hlKG1jKTtcbiBcdHJldHVybjtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9wcml2LmMgYi9hcmNoL3MzOTAva3ZtL3ByaXYuY1xuaW5kZXggYWQwZGRjNDMzYTczYy4uYjFiYTI0YzM0NmVmYSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vcHJpdi5jXG4rKysgYi9hcmNoL3MzOTAva3ZtL3ByaXYuY1xuQEAgLTI4OSw2ICsyODksNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9pc2tlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBzdGF0aWMgaW50IGhhbmRsZV9ycmJlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGdhZGRyO1xuK1x0dW5pb24gc2tleSBza2V5O1xuIFx0aW50IHJlZzEsIHJlZzI7XG4gXHRpbnQgcmM7XG4gXG5AQCAtMzA3LDEyICszMDgsMTIgQEAgc3RhdGljIGludCBoYW5kbGVfcnJiZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRnYWRkciA9IGt2bV9zMzkwX2xvZ2ljYWxfdG9fZWZmZWN0aXZlKHZjcHUsIGdhZGRyKTtcbiBcdGdhZGRyID0ga3ZtX3MzOTBfcmVhbF90b19hYnModmNwdSwgZ2FkZHIpO1xuIFx0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlbW11X2xvY2spXG4tXHRcdHJjID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodmNwdS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlYXNjZSwgZ3BhX3RvX2dmbihnYWRkcikpO1xuK1x0XHRyYyA9IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHZjcHUtXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWFzY2UsIGdwYV90b19nZm4oZ2FkZHIpLCBcdTAwMjZza2V5KTtcbiBcdGlmIChyYyBcdTAwM2UgMClcbiBcdFx0cmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LCByYyk7XG4gXHRpZiAocmMgXHUwMDNjIDApXG4gXHRcdHJldHVybiByYztcbi1cdGt2bV9zMzkwX3NldF9wc3dfY2ModmNwdSwgcmMpO1xuK1x0a3ZtX3MzOTBfc2V0X3Bzd19jYyh2Y3B1LCAoc2tleS5za2V5IFx1MDAzZVx1MDAzZSAxKSBcdTAwMjYgMyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTI2MCw4ICsxMjYxLDkgQEAgc3RhdGljIGludCBoYW5kbGVfZXNzYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdC8qIFJldHJ5IHRoZSBFU1NBIGluc3RydWN0aW9uICovXG4gXHRcdGt2bV9zMzkwX3JldHJ5X2luc3RyKHZjcHUpO1xuIFx0fSBlbHNlIHtcbi1cdFx0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlbW11X2xvY2spXG4tXHRcdFx0aSA9IF9fZG9fZXNzYSh2Y3B1LCBvcmMpO1xuK1x0XHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZXNsb3RzX2FyY2hfbG9jaylcbitcdFx0XHRzY29wZWRfZ3VhcmQocmVhZF9sb2NrLCBcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VtbXVfbG9jaylcbitcdFx0XHRcdGkgPSBfX2RvX2Vzc2EodmNwdSwgb3JjKTtcbiBcdFx0aWYgKGkgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIGk7XG4gXHRcdC8qIEFjY291bnQgZm9yIHRoZSBwb3NzaWJsZSBleHRyYSBjYnJsIGVudHJ5ICovXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9wdi5jIGIvYXJjaC9zMzkwL2t2bS9wdi5jXG5pbmRleCAxYmVhY2M4NDFjYTg1Li5iMDJlMDE1OWQzY2QyIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9wdi5jXG4rKysgYi9hcmNoL3MzOTAva3ZtL3B2LmNcbkBAIC0yNDQsNiArMjQ0LDI0IEBAIHN0YXRpYyB2b2lkIGt2bV9zMzkwX2NsZWFyX3B2X3N0YXRlKHN0cnVjdCBrdm0gKmt2bSlcbiBcdGt2bS1cdTAwM2VhcmNoLnB2LnN0b3JfdmFyID0gTlVMTDtcbiB9XG4gXG4rc3RhdGljIHZvaWQga3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGZyZWVfc3Rvcl9iYXNlKVxuK3tcbitcdGlmIChmcmVlX3N0b3JfYmFzZSlcbitcdFx0ZnJlZV9wYWdlcyh2Y3B1LVx1MDAzZWFyY2gucHYuc3Rvcl9iYXNlLCBnZXRfb3JkZXIodXZfaW5mby5ndWVzdF9jcHVfc3Rvcl9sZW4pKTtcbitcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzaWRhX2FkZHIodmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jaykpO1xuK1x0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2Vwdl9oYW5kbGVfY3B1ID0gMDtcbitcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlcHZfaGFuZGxlX2NvbmZpZyA9IDA7XG4rXHRtZW1zZXQoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnB2LCAwLCBzaXplb2YodmNwdS1cdTAwM2VhcmNoLnB2KSk7XG4rXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZXNkZiA9IDA7XG4rXHQvKlxuK1x0ICogVGhlIHNpZGFkIGZpZWxkIChmb3Igc2RmID09IDIpIGlzIG5vdyB0aGUgZ2JlYSBmaWVsZCAoZm9yIHNkZiA9PSAwKS5cbitcdCAqIFVzZSB0aGUgcmVzZXQgdmFsdWUgb2YgZ2JlYSB0byBhdm9pZCBsZWFraW5nIHRoZSBrZXJuZWwgcG9pbnRlciBvZlxuK1x0ICogdGhlIGp1c3QgZnJlZWQgc2lkYS5cbitcdCAqL1xuK1x0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VnYmVhID0gMTtcbitcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9UTEJfRkxVU0gsIHZjcHUpO1xuK31cbitcbiBpbnQga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYylcbiB7XG4gXHRpbnQgY2M7XG5AQCAtMjU4LDI0ICsyNzYsOSBAQCBpbnQga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYylcbiBcdFdBUk5fT05DRShjYywgXCJwcm90dmlydCBkZXN0cm95IGNwdSBmYWlsZWQgcmMgJXggcnJjICV4XCIsICpyYywgKnJyYyk7XG4gXG4gXHQvKiBJbnRlbmRlZCBtZW1vcnkgbGVhayBmb3Igc29tZXRoaW5nIHRoYXQgc2hvdWxkIG5ldmVyIGhhcHBlbi4gKi9cbi1cdGlmICghY2MpXG4tXHRcdGZyZWVfcGFnZXModmNwdS1cdTAwM2VhcmNoLnB2LnN0b3JfYmFzZSxcbi1cdFx0XHQgICBnZXRfb3JkZXIodXZfaW5mby5ndWVzdF9jcHVfc3Rvcl9sZW4pKTtcbi1cbi1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzaWRhX2FkZHIodmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jaykpO1xuLVx0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2Vwdl9oYW5kbGVfY3B1ID0gMDtcbi1cdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlcHZfaGFuZGxlX2NvbmZpZyA9IDA7XG4tXHRtZW1zZXQoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnB2LCAwLCBzaXplb2YodmNwdS1cdTAwM2VhcmNoLnB2KSk7XG4tXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZXNkZiA9IDA7XG4tXHQvKlxuLVx0ICogVGhlIHNpZGFkIGZpZWxkIChmb3Igc2RmID09IDIpIGlzIG5vdyB0aGUgZ2JlYSBmaWVsZCAoZm9yIHNkZiA9PSAwKS5cbi1cdCAqIFVzZSB0aGUgcmVzZXQgdmFsdWUgb2YgZ2JlYSB0byBhdm9pZCBsZWFraW5nIHRoZSBrZXJuZWwgcG9pbnRlciBvZlxuLVx0ICogdGhlIGp1c3QgZnJlZWQgc2lkYS5cbi1cdCAqL1xuLVx0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VnYmVhID0gMTtcbi1cdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9UTEJfRkxVU0gsIHZjcHUpO1xuK1x0a3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUodmNwdSwgIWNjKTtcbiBcbi1cdHJldHVybiBjYyA/IEVJTyA6IDA7XG4rXHRyZXR1cm4gY2MgPyAtRUlPIDogMDtcbiB9XG4gXG4gaW50IGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYylcbkBAIC0zMTksOSArMzIyLDcgQEAgaW50IGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYylcbiBcdFx0ICAgICB1dmNiLmhlYWRlci5ycmMpO1xuIFxuIFx0aWYgKGNjKSB7XG4tXHRcdHUxNiBkdW1teTtcbi1cbi1cdFx0a3ZtX3MzOTBfcHZfZGVzdHJveV9jcHUodmNwdSwgXHUwMDI2ZHVtbXksIFx1MDAyNmR1bW15KTtcbitcdFx0a3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUodmNwdSwgdHJ1ZSk7XG4gXHRcdHJldHVybiAtRUlPO1xuIFx0fVxuIFxuQEAgLTgwOSw3ICs4MTAsNyBAQCBzdGF0aWMgaW50IHVucGFja19vbmUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGFkZHIsIHU2NCB0d2VhayxcbiBcdFx0XHRyZXR1cm4gLUVBR0FJTjtcbiBcdH1cbiBcbi1cdGlmIChyZXQgXHUwMDI2XHUwMDI2IHJldCAhPSAtRUFHQUlOKVxuK1x0aWYgKHJldCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FQUdBSU4gXHUwMDI2XHUwMDI2IHJldCAhPSAtRUlOVFIpXG4gXHRcdEtWTV9VVl9FVkVOVChrdm0sIDMsIFwiUFJPVFZJUlQgVk0gVU5QQUNLOiBmYWlsZWQgYWRkciAlbGx4IHdpdGggcmMgJXggcnJjICV4XCIsXG4gXHRcdFx0ICAgICB1dmNiLmdhZGRyLCAqcmMsICpycmMpO1xuIFx0cmV0dXJuIHJldDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAwOjA2OjA2Ljc0NDAyMTcxN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNTEzMzYzMTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRGVjaXNpb24gZm9yIEtWTS9zMzkwIFBhdGNoKipcblxuT2theSwgc28gSSBoYXZlIHRoaXMgcGF0Y2ggc2VyaWVzIHRvdWNoaW5nIEtWTSBjb2RlIHNwZWNpZmljYWxseSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBzaW5jZSBpdCdzIHMzOTAsIHdoaWNoIGlzIGxlc3MgY29tbW9uIGluIHR5cGljYWwgZnV6emluZyBlbnZpcm9ubWVudHMgbGlrZSBHQ0UvUUVNVSBmb3IgeDg2LCBJIG5lZWQgdG8gYmUgbW9yZSBkZWxpYmVyYXRlLiBUaGUgcHJvbXB0IGhpZ2hsaWdodHMgYSBrZXkgZXhjbHVzaW9uOiBjb2RlIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLiBIb3dldmVyLCBTeXprYWxsZXIgKmRvZXMqIGhhdmUgczM5MHggc3VwcG9ydCwgYW5kIFFFTVUgKmRvZXMqIHN1cHBvcnQgczM5MHguIFNvLCB0aGUgcXVlc3Rpb24gaXNuJ3Qgd2hldGhlciBzMzkwIGlzIGluaGVyZW50bHkgZXhjbHVkZWQsIGJ1dCB3aGV0aGVyIHRoZXNlICpzcGVjaWZpYyogY2hhbmdlcyBhcmUgcmVhY2hhYmxlLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoZXNlIEtWTSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsbHkgc2lnbmlmaWNhbnQuIExldCdzIGRpZyBpbnRvIHRoZSBjb2RlIGNoYW5nZXMuIEknbSBzZWVpbmcgbW9kaWZpY2F0aW9ucyBpbiBgZGF0LmNgLCBgZmF1bHRpbi5jYCwgYGludGVycnVwdC5jYCwgYGt2bS1zMzkwLmNgLCBhbmQgYHB2LmNgLiBUaGVzZSBhcmVuJ3QganVzdCBjb3NtZXRpYyBjaGFuZ2VzOyB0aGV5IGFyZSBhY3R1YWxseSBtb2RpZnlpbmcgaG93IEtWTSBiZWhhdmVzIGZvciBzMzkwLiBXZSdyZSB0YWxraW5nIGFib3V0IGNoYW5nZXMgdG8gZGF0YSBzdHJ1Y3R1cmVzLCBlcnJvciBoYW5kbGluZyAoZS5nLiwgcmV0dXJuaW5nIGAtRUZBVUxUYCBpbnN0ZWFkIG9mIHBvc2l0aXZlIGNvZGVzIGluIGBrdm1fczM5MF9rZXlvcGApLCBtZW1vcnkgbWFuYWdlbWVudCAoZml4ZXMsIGd1YXJkcywgYW5kIHVzZSBvZiBgX19mcmVlYCksIGluaXRpYWxpemF0aW9uIGNoZWNrcywgYW5kIG5ldyBDUFUgZGlzcG9zYWwvY3JlYXRpb24gZnVuY3Rpb25zIChga3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHVgKS4gQ2xlYXJseSwgdGhlc2UgYXJlIGZ1bmN0aW9uYWwgYWx0ZXJhdGlvbnMgdG8gS1ZNLlxuXG5HaXZlbiB0aGVzZSBhcmUgKmZ1bmN0aW9uYWwqIGNoYW5nZXMgd2l0aGluIEtWTSwgYW5kIFN5emthbGxlciBoYXMgdGhlIGNhcGFiaWxpdHkgdG8gZnV6eiBzMzkweCwgbXkgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggc2VyaWVzICppcyogd29ydGggZnV6emluZy4gS1ZNIGlzIGEgaGlnaC12YWx1ZSB0YXJnZXQgaW4gZ2VuZXJhbCwgYW5kIHRoZSBmYWN0IHRoYXQgU3l6a2FsbGVyIHN1cHBvcnRzIHRoaXMgdGFyZ2V0IGlzIGFuIGluZGljYXRpb24gdGhhdCBpdCBjYW4gYmUgZG9uZS4gSSdtIGdvaW5nIHRvIGxvb2sgYXQgdGhlIGZ1bmN0aW9ucyB0aGF0IHdlcmUgY2hhbmdlZCB0byBzZWUgaWYgYW55IGFyZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcgZm9yIGZ1enppbmcuIEZ1bmN0aW9ucyBsaWtlIGBrdm1fczM5MF9rZXlvcGAsIGBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uYCwgYGt2bV9hcmNoX3ZjcHVfY3JlYXRlYCwgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYCwgYW5kIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAsIGFuZCB0aGUgbmV3IENQVSBkaXNwb3NhbC9jcmVhdGlvbiBmdW5jdGlvbnMgYXJlIGdvb2QgY2FuZGlkYXRlcy4gSSB3aWxsIGFsc28gY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyBmb3IgS1ZNIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNldHRpbmdzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQsIGFuZCBsZXZlcmFnZSB0b29scyBsaWtlIGBkZWZhdWx0X2FwaTpncmVwcGVyYCB0byBzZWFyY2ggZm9yIEtjb25maWcgb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyMDQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDI3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDA6MDY6MTguMjU3Mzg3Nzg2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNzQyMjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vS2NvbmZpZz0xNz1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0xOC1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6MTk6Y29uZmlnIEtWTVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0yMC1cXHRkZWZfdHJpc3RhdGUgeVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ2LVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiVXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDA6MDY6MTguMzAwMTMzNjY1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQyNDkyMDkyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEtWTSBDb25maWd1cmF0aW9uIGZvciBzMzkwIEFyY2hpdGVjdHVyZSoqXG5cbk9rYXksIHNvIHRoZSBjb25maWcgaW4gcXVlc3Rpb24gaXMgZGVmaW5pdGVseSBgS1ZNYCwgYnV0IGhhbmcgb24sIEkgYWxzbyBzZWUgYEtWTV9TMzkwX1VDT05UUk9MYCByZWZlcmVuY2VkIGluIHRoZSBwYXRjaCwgc3BlY2lmaWNhbGx5IGluIHRoZSBga3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKWAgZnVuY3Rpb24gY2FsbC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYEtWTV9TMzkwX1VDT05UUk9MYCBhY3R1YWxseSAqbmVlZHMqIHRvIGJlIGVuYWJsZWQuIE15IGluc3RpbmN0IGlzIHRoYXQgaXQgbWlnaHQuXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgYGFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNgLiBBaCwgaGVyZSBpdCBpczogYGlmIChLVk1fQlVHX09OKGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSksIHZjcHUtXHUwMDNla3ZtKSlgLiBUaGlzIGxvb2tzIGxpa2UgYSBjb25kaXRpb25hbCBiYXNlZCBvbiBgS1ZNX1MzOTBfVUNPTlRST0xgIHdpdGhpbiBhbiBpbXBvcnRhbnQgaW50ZXJydXB0IGhhbmRsaW5nIHBhdGguIFRoZSBgS1ZNX0JVR19PTmAgbWFjcm8gc3Ryb25nbHkgc3VnZ2VzdHMgd2UgbmVlZCB0aGlzIGNvbmZpZywgb3Igd2UnbGwgZ2V0IGEgZmF0YWwgZXJyb3IuXG5cbk5vdywgSSdsbCBtb3ZlIG9uIGFuZCBjaGVjayBgYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jYCB0byBzZWUgaG93IGBrdm1fYXJjaF92Y3B1X2NyZWF0ZWAgaXMgYmVpbmcgaGFuZGxlZCBpbiB0aGlzIGNvbnRleHQuIEkgZXhwZWN0IHRoaXMgd2lsbCBoZWxwIG1lIGNvbmZpcm0gYW5kIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5NzcsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDA6MDY6MjIuNzI1MDU2NDQ5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMzY2MDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9hcmNoX3ZjcHVfY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9Mzc5OT1ERUZJTkVfRlJFRShzaWVfcGFnZSwgc3RydWN0IHNpZV9wYWdlICosIGlmIChfVCkgZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKShfVCkpKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zODAwLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozODAxOmludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM4MDIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDowNjoyMi43Njc0MjYxMDlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjQ4ODc1NTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEtWTSBTMzkwIFBhcmF2aXJ0dWFsaXphdGlvbiBDUFUgQ3JlYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IEtWTSBoYW5kbGVzIENQVSBjcmVhdGlvbiBzcGVjaWZpY2FsbHkgZm9yIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSwgcGFydGljdWxhcmx5IHRoZSBwYXJhdmlydHVhbGl6YXRpb24gYXNwZWN0cy4gVGhlIHBsYWNlIHRvIHN0YXJ0IGlzIGRlZmluaXRlbHkgYGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVgIGluIHRoZSBgYXJjaC9zMzkwL2t2bS9wdi5jYCBmaWxlLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBvciBhdCBsZWFzdCB3aGVyZSBpdCBzaG91bGQgYmUuIExldCdzIHNlZSBob3cgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIHBhcmF2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBpcyBzZXQgdXAgYW5kIHdoYXQga2luZCBvZiByZXNvdXJjZXMgYXJlIGJlaW5nIGluaXRpYWxpemVkIGF0IHRoZSBDUFUgbGV2ZWwuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgYSB2aXJ0dWFsIENQVSBpbiB0aGlzIGNvbnRleHQ6IGZyb20gaW5pdGlhbCBhbGxvY2F0aW9uLCB0byBpdHMgc3RhdGUgYW5kIHdoYXQgdGhlIGNvZGUgZG9lcyB0byBtYWtlIGl0IHJlYWR5IHRvIHJ1biBndWVzdHMuIEkgd2lsbCBsb29rIGZvciBhbnkgc3VidGxlIG9wdGltaXphdGlvbnMgYW5kIGVkZ2UgY2FzZXMsIGJlY2F1c2UgdGhhdCBpcyB3aGVyZSB0aGUgaW1wb3J0YW50IGRldGFpbHMgb2Z0ZW4gcmVzaWRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzY0MSwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAwOjA2OjI3LjAxNjMwMzc5NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDYxMTIwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fczM5MF9wdl9jcmVhdGVfY3B1XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vcHYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL3B2LmM9MjY1PWludCBrdm1fczM5MF9wdl9kZXN0cm95X2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wdi5jLTI4My1cXG5hcmNoL3MzOTAva3ZtL3B2LmM6Mjg0OmludCBrdm1fczM5MF9wdl9jcmVhdGVfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXFxuYXJjaC9zMzkwL2t2bS9wdi5jLTI4NS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAwOjA2OjI3LjA1NjkxODMzNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3OTAwODE3NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gS1ZNIG9uIHMzOTAgQXJjaGl0ZWN0dXJlKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aCBtZW1vcnkgcmVnaW9ucyB1bmRlciBLVk0sIHNwZWNpZmljYWxseSBvbiB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIExldCdzIHNlZS4uLiB0aGUgZnVuY3Rpb24gSSdtIGludGVyZXN0ZWQgaW4gaXMgYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYC4gSSByZWNhbGwgaXQgYmVpbmcgZGVmaW5lZCBpbiBgYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jYCwgc28gdGhhdCdzIHdoZXJlIEknbGwgc3RhcnQuIEknbSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSB0aGUga2V5IHBpZWNlIGluIGFwcGx5aW5nIHVwZGF0ZXMgcmVsYXRlZCB0byBtZW1vcnkgdG8gdGhlIHN5c3RlbSBmb3IgdGhlIHZpcnR1YWwgbWFjaGluZXMuIEl0J3MgbGlrZWx5IGhhbmRsaW5nIHRoZSBhY3R1YWwgY29tbWl0bWVudCBvZiBjaGFuZ2VzIHRvIHRoZSBndWVzdCdzIG1lbW9yeSBtYXAgb3Igc29tZSBvdGhlciBhcmNoLXNwZWNpZmljIG1lbW9yeSBtYW5hZ2VtZW50IHN0cnVjdHVyZSB3aXRoaW4gdGhlIEtWTSBmcmFtZXdvcmsuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbWVtb3J5IHJlZ2lvbiBpcyBkZXNjcmliZWQsIGhvdyB0aGUgY29tbWl0IGFjdHVhbGx5IGhhcHBlbnMgYXQgdGhlIHMzOTAgbGV2ZWwsIGFuZCB3aGF0IGltcGxpY2F0aW9ucyB0aGUgY29tbWl0IGhhcyBvbiB0aGUgcmVzdCBvZiB0aGUgS1ZNIGluZnJhc3RydWN0dXJlLiBUaGlzIG1pZ2h0IGludm9sdmUgbG9va2luZyBhdCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgTU1VLCBob3cgaXQgaGFuZGxlcyBtZW1vcnkgcHJvdGVjdGlvbiwgb3IgZXZlbiBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgcGFnZSBzaXplcyBhbmQgbWVtb3J5IHR5cGVzIG9uIHRoZSBzMzkwLiBJJ20gZXhwZWN0aW5nIGEgbG93LWxldmVsLCBwZXJmb3JtYW5jZS1jcml0aWNhbCBpbnRlcmFjdGlvbiBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDEwMywiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAwOjA2OjMwLjg0NzAwMjIzOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDAwNTUxNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01ODA3PXN0YXRpYyBsb25nIGNtbWFfZF9jb3VudF9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaylcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01ODE5LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1ODIwOnZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01ODIxLVxcdFxcdFxcdFxcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm9sZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDA6MDY6MzAuODg3MDY0NTA4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MzI3ODA2NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGJyZWFrZG93biBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEtWTSBTMzkwIE1pZ3JhdGlvbiBDb2RlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBteSBoZWFkIGFyb3VuZCBob3cgbWlncmF0aW9uIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBLVk0gczM5MCBhcmNoaXRlY3R1cmUuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byBga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbmAgbG9jYXRlZCBpbiBgYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jYC4gVGhhdCBmdW5jdGlvbiBuYW1lIGl0c2VsZiBpcyBhIHByZXR0eSBnb29kIGluZGljYXRvciBvZiB3aGVyZSB0aGUgbWVhdCBvZiB0aGUgbWlncmF0aW9uIGluaXRpYWxpemF0aW9uL2NvbmZpZ3VyYXRpb24gbWlnaHQgcmVzaWRlLiBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgdGhlIGNvcmUgZnVuY3Rpb24gd2hlcmUgdGhlIHByb2Nlc3MgaXMgc2V0IHVwLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGhvdyB0aGUgc3RhdGUgaXMgY2FwdHVyZWQsIHRyYW5zZmVycmVkLCBhbmQgcmVzdG9yZWQsIG9yIGF0IGxlYXN0IHRoZSBpbml0aWFsIHN0ZXBzIG9mIHRoZSBwcm9jZXNzLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkOyBwYXJ0aWN1bGFybHkgYW55IFMzOTAtc3BlY2lmaWMgc3RydWN0dXJlcywgcmVnaXN0ZXJzIG9yIGFyY2hpdGVjdHVyYWwgY29uc2lkZXJhdGlvbnMgdGhhdCBpbmZsdWVuY2UgdGhlIG1pZ3JhdGlvbiBmbG93LiBMZXQncyBnZXQgcmVhZGluZyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2NDcsIk91dHB1dFRva2VucyI6NTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDowNjozNC43MTk4NTEyMzFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwOTg5OTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0xMjcxPXN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTEyOTctXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjEyOTg6c3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTI5OS1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjA0ND1zdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3NldF9hdHRyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMDYxLVxcdGNhc2UgS1ZNX1MzOTBfVk1fTUlHUkFUSU9OOlxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyMDYyOlxcdFxcdHJldCA9IGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb24oa3ZtLCBhdHRyKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjA2My1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDA6MDY6MzQuNzYwODQ3MTMxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0ODkzMDY2MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHlvdSBkZXNjcmliZWQ6XG5cbioqRXhhbWluaW5nIHRoZSBga3ZtX3MzOTBfa2V5b3BgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBndXRzIG9mIHRoZSBLVk0gUzM5MCBjb2RlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGt2bV9zMzkwX2tleW9wYCBmdW5jdGlvbi4gSSdtIGhlYWRpbmcgc3RyYWlnaHQgdG8gYGFyY2gvczM5MC9rdm0va3ZtLXMzOTAuY2AgdG8gZmluZCBpdC4gVGhpcyBmdW5jdGlvbiBoYXMgbGlrZWx5IGJlZW4gZmxhZ2dlZCwgb3IgSSBoYXZlIGEgcXVlc3Rpb24gYWJvdXQgaXRzIG9wZXJhdGlvbiwgYW5kIG5lZWRzIHRvIGJlIGFuYWx5emVkIGluIGRldGFpbC4gSSdtIGV4cGVjdGluZyB0byBzZWUgb3BlcmF0aW9ucyByZWxhdGVkIHRvIGtleSBoYW5kbGluZyBvciBzb21lIHNlY3VyaXR5IGFzcGVjdCB3aXRoaW4gdGhlIFMzOTAgYXJjaGl0ZWN0dXJlJ3MgS1ZNIGltcGxlbWVudGF0aW9uLiBUaGlzIGNvdWxkIGJlIGFueXRoaW5nIGZyb20gY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb25zIHRvIG1hbmFnaW5nIGFjY2VzcyBjb250cm9sLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udHJvbCBmbG93LCB0aGUgZGF0YSBpdCBvcGVyYXRlcyBvbiwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBLVk0gZnJhbWV3b3JrLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIHRoZSBTMzkwIGhhcmR3YXJlLiBJJ20gYW50aWNpcGF0aW5nIHNvbWUgUzM5MC1zcGVjaWZpYyByZWdpc3RlciB1c2FnZSBvciBwZXJoYXBzIGludGVyYWN0aW9ucyB3aXRoIGhhcmR3YXJlIHNlY3VyaXR5IG1vZHVsZXMsIGFuZCBJJ20gcmVhZHkgdG8gcGVlbCBiYWNrIHRoZSBsYXllcnMgdG8gdW5kZXJzdGFuZCBob3cgaXQgYWxsIGZpdHMgdG9nZXRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MzA1LCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDA6MDY6MzguMjUwMTU2MjA5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjQyODM1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fczM5MF9rZXlvcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU1MD1zdGF0aWMgdm9pZCBfX2t2bV9zMzkwX2V4aXQodm9pZClcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NjEtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU2MjpzdGF0aWMgaW50IGt2bV9zMzkwX2tleW9wKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3Qga3ZtICprdm0sIGludCBvcCxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTYzLVxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bmlvbiBza2V5IHNrZXkpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjkyNj1pbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzA1OC1cXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYztcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzA1OTpcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfa2V5b3Aga29wO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMDYwLVxcdFxcdHVuaW9uIHNrZXkgc2tleTtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMDcxLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMDcyOlxcdFxcdHIgPSBrdm1fczM5MF9rZXlvcChtYywga3ZtLCBrb3Aub3BlcmF0aW9uLCBrb3AuZ3Vlc3RfYWRkciwgc2tleSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMwNzMtXFx0XFx0a3ZtX3MzOTBfZnJlZV9tbXVfY2FjaGUobWMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDowNjozOC4yOTI1OTA1NThaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU4MDg0OTY2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtWTSBzMzkwIEFyY2hpdGVjdHVyZSoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGBrdm1fYXJjaF92bV9pb2N0bGAgaXMgdGhlIGtleSBlbnRyeSBwb2ludCBmb3IgYGt2bV9zMzkwX2tleW9wYC4gVGhhdCdzIHdoZXJlIHdlIHN0YXJ0LiBOb3csIHRoaW5raW5nIGFib3V0IHRoZSBjb3JlIGZ1bmN0aW9uYWxpdGllcywgbXkgYXR0ZW50aW9uIGlzIGRyYXduIHRvIGEgc3BlY2lmaWMgc2V0IG9mIGZ1bmN0aW9uczogYGt2bV9hcmNoX3ZjcHVfY3JlYXRlYCwgYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYCwgYGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25gLCBga3ZtX3MzOTBfa2V5b3BgIChvYnZpb3VzbHkhKSwgYGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVgLCBhbmQgYGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1YC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgSSBuZWVkIHRvIGRpc3NlY3QgZnVydGhlciB0byBmdWxseSBncmFzcCB0aGUgczM5MCBhcmNoaXRlY3R1cmUgd2l0aGluIEtWTS5cblxuR2l2ZW4gdGhlaXIgY29udGV4dCwgaXQncyBhbHNvIGltcG9ydGFudCB0byBoYXZlIGEgbG9vayBhdCBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gIGFuZCBga3ZtX2FyY2hfdmNwdV9pb2N0bGAgdG8gZ2V0IGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29udHJvbCBmbG93LiBJIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGUgb25lcyBJJ3ZlIGxpc3RlZC4gVGhpcyBpcyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciBhIGRlZXBlciBkaXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjEyMSwiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDowNjo0Mi44NzM0NDI5MTFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMzk2Nzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzYwMT12b2lkIGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzYxNi1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzYxNzpcXHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bigpIGFuZCBrdm1fYXJjaF92Y3B1X2lvY3RsKCkgKi9cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzYxOC1cXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5pbml0aWFsaXplZCwgdHJ1ZSk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTAwMT1zdGF0aWMgdm9pZCBzdG9yZV9yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01MDIxLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1MDIyOmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTUwMjMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDowNjo0Mi45MTQ4NDU2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5Mjk1MTE1MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0J3MgZ29pbmcgb24gd2l0aCBga3ZtX2FyY2hfdmNwdV9pb2N0bGAsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmUsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEtWTSBBcmNoaXRlY3R1cmFsIFZDUFUgaW9jdGwqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayBkb3duIGBrdm1fYXJjaF92Y3B1X2lvY3RsYC4gSW1tZWRpYXRlbHksIEkgc2VlIHRoaXMgYXMgYSBjcml0aWNhbCBlbnRyeSBwb2ludCBmb3IgYXJjaGl0ZWN0dXJhbCBpbnRlcmFjdGlvbnMgd2l0aGluIGEgS1ZNIHZpcnR1YWwgQ1BVLiBUaGlzIGZ1bmN0aW9uLCBJIHN1cm1pc2UsIGhhbmRsZXMgdGhlIGludGVyZmFjZSBiZXR3ZWVuIHRoZSBoeXBlcnZpc29yJ3MgZ2VuZXJpYyBWQ1BVIG1hbmFnZW1lbnQgYW5kIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgcmVxdWlyZW1lbnRzIG9mIHRoZSBndWVzdC4gVGhhdCBtZWFucyB0aGlzIGlzIHdoZXJlIHRoZSAqcmVhbCogbWFnaWMgaGFwcGVucywgd2hlcmUgdGhlIEtWTSBjb2RlIGFkYXB0cyB0byB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBhcmNoaXRlY3R1cmUgYW5kIGl0cyBudWFuY2VzLlxuXG5NeSBpbW1lZGlhdGUgYXNzdW1wdGlvbiBpcyB0aGF0IHRoaXMgaW9jdGwgaGFuZGxlciBhY3RzIGFzIGEgY2VudHJhbCBkaXNwYXRjaGVyLiBJdCdzIHRoZSBnYXRla2VlcGVyLCByZWNlaXZpbmcgaW9jdGwgY29tbWFuZHMgZnJvbSB0aGUgdXNlciBzcGFjZSAob3IgZnJvbSBLVk0ncyBvd24gaW50ZXJuYWwgY29tcG9uZW50cywgZm9yIHNvbWUgY29tbWFuZHMpLiBCYXNlZCBvbiB0aGUgc3BlY2lmaWMgY29tbWFuZCBjb2RlIHByb3ZpZGVkIGluIHRoZSBgaW9jdGxgIGNhbGwsIGl0IHRoZW4gZmlndXJlcyBvdXQgd2hhdCBhcmNoaXRlY3R1cmFsIGFjdGlvbiBuZWVkcyB0byBiZSB0YWtlbi4gVGhpcyBjb3VsZCByYW5nZSBmcm9tIGNvbmZpZ3VyaW5nIHNwZWNpZmljIENQVSBmZWF0dXJlcyB0byBoYW5kbGluZyBndWVzdCBtZW1vcnkgbWFuYWdlbWVudCBpbiBhbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgd2F5LlxuXG5JIGJldCBpdCBoYXMgYSBsYXJnZSBgc3dpdGNoYCBzdGF0ZW1lbnQgb3IgYSBsb29rdXAgdGFibGUsIGVzc2VudGlhbGx5IGEgXCJjYXNlXCIgc3RhdGVtZW50LCB0aGF0IG1hcHMgdGhlIGlvY3RsIGNvbW1hbmQgdG8gdGhlIHJlbGV2YW50IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmdW5jdGlvbi4gSSdtIHRoaW5raW5nIGFib3V0IHRoaW5ncyBsaWtlIGludGVyY2VwdGluZyBhbmQgZW11bGF0aW5nIHNwZWNpYWwgaW5zdHJ1Y3Rpb25zLCBtYW5hZ2luZyBjb250cm9sIHJlZ2lzdGVycywgaGFuZGxpbmcgbW9kZWwtc3BlY2lmaWMgcmVnaXN0ZXJzIChNU1JzKSwgcGVyaGFwcyBzZXR0aW5nIHVwIG5lc3RlZCBwYWdpbmcgc3RydWN0dXJlcyBpZiBhcHByb3ByaWF0ZSwgb3IgZXZlbiBtYW5hZ2luZyBzcGVjaWZpYyBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIHVuaXRzLlxuXG5GdXJ0aGVybW9yZSwgSSBleHBlY3Qgc3Ryb25nIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zIGFyZSBlbXBsb3llZCBoZXJlLiBUaGlzIGZ1bmN0aW9uIGlzIHVuZG91YnRlZGx5IG11bHRpLXRocmVhZGVkOyBpdCdzIGEgY3JpdGljYWwgc2VjdGlvbiB3aXRoaW4gS1ZNLiBJJ2QgZXhwZWN0IGxvY2tzIG9yIGF0b21pYyBvcGVyYXRpb25zIHRvIGVuc3VyZSBkYXRhIGNvbnNpc3RlbmN5LCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHNoYXJlZCBWQ1BVIHN0YXRlLiBUaGlzIHdvdWxkIGJlIG5lY2Vzc2FyeSB0byBwcm90ZWN0IHRoZSBWQ1BVIHN0YXRlIGZyb20gc2ltdWx0YW5lb3VzIGFjY2Vzc2VzIGJ5IGRpZmZlcmVudCB0aHJlYWRzIG9yIGV2ZW4gZGlmZmVyZW50IHZDUFVzLiBBbHNvLCB0aGVyZSdzIGFsd2F5cyB0aGUgY29uY2VybiBvZiBkZWFkbG9ja3Mgd2hlbiBkZWFsaW5nIHdpdGggc3luY2hyb25pemF0aW9uIGFuZCBuZXN0ZWQgb3BlcmF0aW9ucywgc28gdGhlcmUgd2lsbCBuZWVkIHRvIGJlIHdlbGwtY29uc2lkZXJlZCBsb2NrIG9yZGVyaW5nLlxuXG5BbHNvLCB0aGUgZXJyb3IgaGFuZGxpbmcsIEkgaW1hZ2luZSwgaXMgYSBjb21wbGV4IGFmZmFpciwgZ2l2ZW4gdGhlIGludHJpY2F0ZSBuYXR1cmUgb2YgdGhlIHBvc3NpYmxlIGZhaWx1cmUgbW9kZXMuIEkgbmVlZCB0byBoYW5kbGUgYm90aCBnZW5lcmFsIEtWTSBlcnJvcnMgYW5kIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBlcnJvcnMsIGFuZCB0aGVuIHRyYW5zbGF0ZSB0aGVtIGJhY2sgaW50byB1c2VyLWZyaWVuZGx5IGVycm9yIGNvZGVzIG9yIGluZm9ybWF0aW9uIHRoYXQgY2FuIGJlIGxvZ2dlZCBlZmZlY3RpdmVseS5cblxuVGhlIGRlc2lnbiBvZiBga3ZtX2FyY2hfdmNwdV9pb2N0bGAgc2hvdWxkIGJlIG1vZHVsYXIsIGNsZWFybHkuIEkgaG9wZSB0byBzZWUgaXQgaXMgd2VsbC1zdHJ1Y3R1cmVkIGluIG9yZGVyIHRvIGFsbG93IGNsZWFuIHNlcGFyYXRpb24gb2YgY29uY2VybiBhbmQgZWFzaWVyIG1haW50ZW5hbmNlLCB3aXRoIHNwZWNpZmljIGhhbmRsZXJzIGZvciBkaWZmZXJlbnQgaW9jdGwgb3BlcmF0aW9ucywgZWFjaCB0YWlsb3JlZCB0byB0aGUgYXJjaGl0ZWN0dXJhbCBuZWVkcy4gVGhpcyBmdW5jdGlvbiwgd2hlbiBkb25lIHJpZ2h0LCBpcyBhIG1hc3RlcnBpZWNlIG9mIGFic3RyYWN0aW9uLCBicmlkZ2luZyB0aGUgZ2VuZXJhbCBLVk0gY29yZSB3aXRoIHRoZSBpZGlvc3luY3Jhc2llcyBvZiB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2OTI2LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDA6MDY6NDcuODQ0MzYwNzk3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTg3ODMzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fYXJjaF92Y3B1X2lvY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzYwMT12b2lkIGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzYxNi1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzYxNzpcXHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bigpIGFuZCBrdm1fYXJjaF92Y3B1X2lvY3RsKCkgKi9cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzYxOC1cXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5pbml0aWFsaXplZCwgdHJ1ZSk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9Mzk0OT1pbnQga3ZtX2FyY2hfdmNwdV9zaG91bGRfa2ljayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzk1NS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6Mzk1NjpzdGF0aWMgaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZ2V0X29uZV9yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zOTU3LVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBrdm1fb25lX3JlZyAqcmVnKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQwMDQtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQwMDU6c3RhdGljIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9vbmVfcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDAwNi1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga3ZtX29uZV9yZWcgKnJlZylcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MDU3LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MDU4OnN0YXRpYyB2b2lkIGt2bV9hcmNoX3ZjcHVfaW9jdGxfbm9ybWFsX3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDA1OS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDA2OS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDA3MDpzdGF0aWMgdm9pZCBrdm1fYXJjaF92Y3B1X2lvY3RsX2luaXRpYWxfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MDcxLXtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDA3Mi1cXHQvKiBJbml0aWFsIHJlc2V0IGlzIGEgc3VwZXJzZXQgb2YgdGhlIG5vcm1hbCByZXNldCAqL1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MDczOlxcdGt2bV9hcmNoX3ZjcHVfaW9jdGxfbm9ybWFsX3Jlc2V0KHZjcHUpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MDc0LVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQxMTMtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQxMTQ6c3RhdGljIHZvaWQga3ZtX2FyY2hfdmNwdV9pb2N0bF9jbGVhcl9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQxMTUte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQxMTgtXFx0LyogQ2xlYXIgcmVzZXQgaXMgYSBzdXBlcnNldCBvZiB0aGUgaW5pdGlhbCByZXNldCAqL1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MTE5OlxcdGt2bV9hcmNoX3ZjcHVfaW9jdGxfaW5pdGlhbF9yZXNldCh2Y3B1KTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDEyMC1cXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTI5LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MTMwOmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9yZWdzICpyZWdzKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTMxLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTM3LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MTM4OmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX2dldF9yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9yZWdzICpyZWdzKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTM5LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTQ1LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MTQ2OmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9zcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQxNDctXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qga3ZtX3NyZWdzICpzcmVncylcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTU3LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MTU4OmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX2dldF9zcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQxNTktXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qga3ZtX3NyZWdzICpzcmVncylcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTY5LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MTcwOmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9mcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2ZwdSAqZnB1KVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTcxLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTg0LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MTg1OmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX2dldF9mcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2ZwdSAqZnB1KVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTg2LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTk5LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MjAwOnN0YXRpYyBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfaW5pdGlhbF9wc3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBwc3dfdCBwc3cpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQyMDEte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQyMTItXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQyMTM6aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfdHJhbnNsYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDIxNC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBrdm1fdHJhbnNsYXRpb24gKnRyKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQyMjItXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQyMjM6aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X2d1ZXN0X2RlYnVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDIyNC1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnICpkYmcpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDI2NC1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDI2NTppbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfbXBzdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQyNjYtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fbXBfc3RhdGUgKm1wX3N0YXRlKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQyNzktXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQyODA6aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X21wc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MjgxLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX21wX3N0YXRlICptcF9zdGF0ZSlcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01MDAxPXN0YXRpYyB2b2lkIHN0b3JlX3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTUwMjEtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjUwMjI6aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTAyMy17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTQ4MT1zdGF0aWMgaW50IGt2bV9zMzkwX2hhbmRsZV9wdl92Y3B1X2R1bXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU1MjItXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU1MjM6bG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NTI0LVxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU1NDktXFx0XFx0XFx0YnJlYWs7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU1NTA6XFx0XFx0ciA9IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X2luaXRpYWxfcHN3KHZjcHUsIHBzdyk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU1NTEtXFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTU1NC1cXHRcXHRyID0gMDtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTU1NTpcXHRcXHRrdm1fYXJjaF92Y3B1X2lvY3RsX2NsZWFyX3Jlc2V0KHZjcHUpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NTU2LVxcdFxcdGlmIChrdm1fczM5MF9wdl9jcHVfaXNfcHJvdGVjdGVkKHZjcHUpKSB7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTU2NC1cXHRcXHRyID0gMDtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTU2NTpcXHRcXHRrdm1fYXJjaF92Y3B1X2lvY3RsX2luaXRpYWxfcmVzZXQodmNwdSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU1NjYtXFx0XFx0aWYgKGt2bV9zMzkwX3B2X2NwdV9pc19wcm90ZWN0ZWQodmNwdSkpIHtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NTc1LVxcdFxcdHIgPSAwO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1NTc2OlxcdFxcdGt2bV9hcmNoX3ZjcHVfaW9jdGxfbm9ybWFsX3Jlc2V0KHZjcHUpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NTc3LVxcdFxcdGlmIChrdm1fczM5MF9wdl9jcHVfaXNfcHJvdGVjdGVkKHZjcHUpKSB7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTU5My1cXHRcXHRpZiAoaW9jdGwgPT0gS1ZNX1NFVF9PTkVfUkVHKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1NTk0OlxcdFxcdFxcdHIgPSBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9vbmVfcmVnKHZjcHUsIFxcdTAwMjZyZWcpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NTk1LVxcdFxcdGVsc2VcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTU5NjpcXHRcXHRcXHRyID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfb25lX3JlZyh2Y3B1LCBcXHUwMDI2cmVnKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTU5Ny1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDA6MDY6NDcuODkwMjQ3NzE2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4ODQ5ODAxMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTSBFbnRyeSBQb2ludHMgZm9yIFMzOTAgQXJjaGl0ZWN0dXJlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGtleSBlbnRyeSBwb2ludHMgZm9yIEtWTSBvbiB0aGUgUzM5MCBhcmNoaXRlY3R1cmUuIEluaXRpYWxseSwgSSBqb3R0ZWQgZG93biBga3ZtX2FyY2hfdmNwdV9pb2N0bGAgYW5kIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAuIEhtbSwgb24gc2Vjb25kIHRob3VnaHQsIGBrdm1fYXJjaF92Y3B1X2lvY3RsYCBpcyBhIGJpdCB0b28gZ2VuZXJpYywgYSBzdGFuZGFyZCBLVk0gQVBJIGZ1bmN0aW9uLiBJdCdzIG5vdCAqd3JvbmcqIHRvIGxpc3QgaXQsIGJ1dCBpdCBtaWdodCBub3QgYmUgdGhlIG1vc3Qgc3BlY2lmaWMgb3IgaW50ZXJlc3Rpbmcgb25lIGluIHRoaXMgY29udGV4dC5cblxuTm93LCBga3ZtX2FyY2hfdmNwdV9jcmVhdGVgIOKAkyB0aGF0J3MgYSBnb29kIG9uZSwgdGhhdCdzIGV4YWN0bHkgdGhlIGtpbmQgb2YgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGVudHJ5IHBvaW50IEknbSBhZnRlci4gU2ltaWxhcmx5LCBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gIGlzIGRlZmluaXRlbHkgcmVsZXZhbnQuIEFuZCBtb3Zpbmcgb24gdG8gUzM5MCBzcGVjaWZpY3MsIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YCBhbmQgYGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1YCBhcmUgZXhjZWxsZW50IGNob2ljZXMg4oCTIHRoZXkncmUgY29yZSB0byB0aGUgcG93ZXIgdmlydHVhbGl6YXRpb24gYXNwZWN0LiAgYGt2bV9zMzkwX2tleW9wYCBhbHNvIHNlZW1zIHJlbGV2YW50LiBUaGVuIHRoZXJlJ3MgYGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25gIC0geWVzLCB0aGF0J3MgZ29vZCB0b28sIGZvciBtaWdyYXRpb24gaGFuZGxpbmcuXG5cbkxldCdzIG5vdyBkaWcgZGVlcGVyLCBJIHdpbGwgY2hlY2sgaW4gYGFyY2gvczM5MC9rdm0vcHJpdi5jYCB0byBzZWUgaWYgSSBjYW4gZmluZCBgaGFuZGxlX3JyYmVgIG9yIGBoYW5kbGVfZXNzYWAuIEknbSB0cnlpbmcgdG8gZ2V0IGEgZnVsbCBwaWN0dXJlIG9mIHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgZHJpdmUgdGhlIFMzOTAgS1ZNIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDg3MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDowNjo1Mi43NzUyMzA1NzRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NTAyNzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhhbmRsZV9ycmJlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vcHJpdi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vcHJpdi5jPTI1Nz1zdGF0aWMgaW50IGhhbmRsZV9pc2tlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTI4OC1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzoyODk6c3RhdGljIGludCBoYW5kbGVfcnJiZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMjkwLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jPTk1OT1pbnQga3ZtX3MzOTBfaGFuZGxlX2IyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTk3OS1cXHRjYXNlIDB4MmE6XFxuYXJjaC9zMzkwL2t2bS9wcml2LmM6OTgwOlxcdFxcdHJldHVybiBoYW5kbGVfcnJiZSh2Y3B1KTtcXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy05ODEtXFx0Y2FzZSAweDJiOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDowNjo1Mi44MjM3Mzg2OTNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYwNTY1ODQ1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgRnVuY3Rpb24gJ2hhbmRsZV9ycmJlJyoqXG5cbkFscmlnaHQsIGxvb2tpbmcgYXQgdGhhdCBmdW5jdGlvbiBuYW1lLCBgaGFuZGxlX3JyYmVgLCBteSBpbW1lZGlhdGUgYXNzZXNzbWVudCBpcyB0aGF0IGl0IHNob3dzIHByb21pc2UgYXMgYSBmb2N1c2VkIGZ1bmN0aW9uLiBUaGUgbmFtZSBpdHNlbGYgc3VnZ2VzdHMgYSBkaXN0aW5jdCBhbmQgbGlrZWx5IGltcG9ydGFudCByZXNwb25zaWJpbGl0eSB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBJJ20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggcG90ZW50aWFsIHNjZW5hcmlvcyB3aGVyZSBJJ2QgZXhwZWN0IHRvIHNlZSB0aGlzIGZ1bmN0aW9uIHVzZWQuIEJhc2VkIG9uIHRoZSBuYW1lIGFsb25lLCBJJ20gaW5mZXJyaW5nIGl0IHByb2JhYmx5IHBsYXlzIGEgY3J1Y2lhbCByb2xlIGluIG1hbmFnaW5nIHNvbWUgYXNwZWN0IG9mLCBwb3NzaWJseSByZWxhdGVkIHRvIHJlc291cmNlIHJlYmFsYW5jaW5nLCBkYXRhIHZhbGlkYXRpb24sIG9yIGV4dGVybmFsIGludGVyZmFjZXMuIFRoZSBcIlJSXCIgcG90ZW50aWFsbHkgc3RhbmRzIGZvciBcIlJlc291cmNlIFJlYmFsYW5jaW5nXCIgb3IgXCJSZWxpYWJsZSBSZW1vdGVcIiwgdGhlIFwiQkVcIiBpcyBsaWtlbHkgXCJCYWNrZW5kXCIgb3IgXCJCdXNpbmVzcyBFbnRpdHlcIi4gRnVydGhlciBpbnZlc3RpZ2F0aW9uIHdvdWxkIGJlIG5lZWRlZCBvZiBjb3Vyc2UsIGJ1dCB0aGUgbmFtZSBpcyBxdWl0ZSB0ZWxsaW5nIGFuZCBwcm92aWRlcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGEgZGVlcGVyIGRpdmUuIFRoZSBmYWN0IHRoYXQgc29tZW9uZSBoYXMgaWRlbnRpZmllZCB0aGlzIGZ1bmN0aW9uIHRvIHJldmlldyBpcyBhIGdvb2QgaW5kaWNhdG9yIG9mIGl0cyBzaWduaWZpY2FuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNzIyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDA6MDY6NTYuNDI5NDAwMjM5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjUyOTE3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoYW5kbGVfZXNzYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL3ByaXYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL3ByaXYuYz0xMTkxPXN0YXRpYyB2b2lkIF9lc3NhX2NsZWFyX2Nicmwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nICpjYnJsLCBpbnQgbGVuKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTIxNi1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzoxMjE3OnN0YXRpYyBpbnQgaGFuZGxlX2Vzc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTEyMTgte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmM9MTI4ND1pbnQga3ZtX3MzOTBfaGFuZGxlX2I5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTEyOTMtXFx0Y2FzZSAweGFiOlxcbmFyY2gvczM5MC9rdm0vcHJpdi5jOjEyOTQ6XFx0XFx0cmV0dXJuIGhhbmRsZV9lc3NhKHZjcHUpO1xcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTEyOTUtXFx0Y2FzZSAweGFmOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDowNjo1Ni40NzE5MzQwNDhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM3MjkyMjQzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRm9jdXNpbmcgb24gSW50ZXJydXB0IEluamVjdGlvbiBpbiB0aGUgczM5MCBLVk0gQ29udGV4dCoqXG5cblJpZ2h0LCBgaGFuZGxlX2Vzc2FgIGlzIGRlZmluaXRlbHkgYW5vdGhlciBzdHJvbmcgY2FuZGlkYXRlIGZvciBhIGZvY3VzZWQgZnVuY3Rpb24gaGVyZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gY29uc2lkZXJpbmcgYWxsIHJlbGV2YW50IGVudHJ5IHBvaW50cy4gT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29kZSBub3cuIE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBhcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGluamVjdGlvbiBhbmQgY2xlYXJpbmcgbWVjaGFuaXNtcyBmb3IgZXh0ZXJuYWwgY2FsbHMgd2l0aGluIHRoZSBzMzkwIEtWTSBlbnZpcm9ubWVudC4gU3BlY2lmaWNhbGx5LCBJJ20gbG9va2luZyBmb3IgdGhlIGltcGxlbWVudGF0aW9ucyBvZiBgc2NhX2luamVjdF9leHRfY2FsbGAgYW5kIGBzY2FfY2xlYXJfZXh0X2NhbGxgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBoeXBlcnZpc29yIGludGVyYWN0cyB3aXRoIGd1ZXN0cyByZWdhcmRpbmcgZXh0ZXJuYWwgaW50ZXJydXB0cyBhbmQgZXZlbnRzLCBhbmQgc2hvdWxkIHByb3ZpZGUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBlc3NhIGlzIGhhbmRsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMjUzLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDA6MDY6NTkuODQ0ODYwMTE3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjEyOTIxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY2FfaW5qZWN0X2V4dF9jYWxsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz00NT1zdGF0aWMgaW50IHNjYV9leHRfY2FsbF9wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50ICpzcmNfaWQpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTYyLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6NjM6c3RhdGljIGludCBzY2FfaW5qZWN0X2V4dF9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNyY19pZClcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTY0LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MTUwNT1zdGF0aWMgaW50IF9faW5qZWN0X2V4dGNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfaXJxICppcnEpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE1MjEtXFx0aWYgKGt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpIFxcdTAwMjZcXHUwMDI2ICFrdm1fczM5MF9wdl9jcHVfZ2V0X2hhbmRsZSh2Y3B1KSlcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjE1MjI6XFx0XFx0cmV0dXJuIHNjYV9pbmplY3RfZXh0X2NhbGwodmNwdSwgc3JjX2lkKTtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE1MjMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAwOjA2OjU5Ljg4Njk5NjUwNloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjIyNjY0OTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6XG5cbioqQ29uc2lkZXJpbmcgdGhlIEJlc3QgQXBwcm9hY2ggZm9yIEV4dGVybmFsIENhbGxzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHdlJ3JlIGhhbmRsaW5nIHRoZXNlIGV4dGVybmFsIGNhbGxzLCBhbmQgSSdtIHJlYWxpemluZyBgc2NhX2luamVjdF9leHRfY2FsbGAgaXMgc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIHdlIGNhbiBwcm9iYWJseSBkbyBiZXR0ZXIuIExldCdzIHNlZS4uLiBtYXliZSBgX19pbmplY3RfZXh0Y2FsbGAgb3IgYGt2bV9zMzkwX2luamVjdF92Y3B1YCB3b3VsZCBiZSBtb3JlIGFwcHJvcHJpYXRlLiBCdXQgaGFuZyBvbiwgYF9faW5qZWN0X2V4dGNhbGxgIGlzIGFsc28gc3RhdGljISBBbHJpZ2h0LCBzZWVtcyBsaWtlIHRoZSBvcHRpb25zIGFyZSBuYXJyb3dpbmcuIExldCdzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBga3ZtX3MzOTBfaW5qZWN0X3ZjcHVgLiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhhdCBvbmUgYW5kIHNlZSBpZiBpdCdzIHRoZSByaWdodCBmaXQgZm9yIHRoZSBqb2IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODQzLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDA6MDc6MDMuMTA5NjY0OTE2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjY1ODc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fczM5MF9pbmplY3RfdmNwdVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MTQ0Nj1zdGF0aWMgaW50IF9faW5qZWN0X3Byb2coc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfaXJxICppcnEpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE0NTEtXFx0VkNQVV9FVkVOVCh2Y3B1LCAzLCBcXFwiaW5qZWN0OiBwcm9ncmFtIGlycSBjb2RlIDB4JXhcXFwiLCBpcnEtXFx1MDAzZXUucGdtLmNvZGUpO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTQ1MjpcXHR0cmFjZV9rdm1fczM5MF9pbmplY3RfdmNwdSh2Y3B1LVxcdTAwM2V2Y3B1X2lkLCBLVk1fUzM5MF9QUk9HUkFNX0lOVCxcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE0NTMtXFx0XFx0XFx0XFx0ICAgaXJxLVxcdTAwM2V1LnBnbS5jb2RlLCAwKTtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MTQ4OD1zdGF0aWMgaW50IF9faW5qZWN0X3BmYXVsdF9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zMzkwX2lycSAqaXJxKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNDk0LVxcdFxcdCAgIGlycS1cXHUwMDNldS5leHQuZXh0X3BhcmFtczIpO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTQ5NTpcXHR0cmFjZV9rdm1fczM5MF9pbmplY3RfdmNwdSh2Y3B1LVxcdTAwM2V2Y3B1X2lkLCBLVk1fUzM5MF9JTlRfUEZBVUxUX0lOSVQsXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNDk2LVxcdFxcdFxcdFxcdCAgIGlycS1cXHUwMDNldS5leHQuZXh0X3BhcmFtcyxcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MTUwNT1zdGF0aWMgaW50IF9faW5qZWN0X2V4dGNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfaXJxICppcnEpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE1MTMtXFx0XFx0ICAgc3JjX2lkKTtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjE1MTQ6XFx0dHJhY2Vfa3ZtX3MzOTBfaW5qZWN0X3ZjcHUodmNwdS1cXHUwMDNldmNwdV9pZCwgS1ZNX1MzOTBfSU5UX0VYVEVSTkFMX0NBTEwsXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNTE1LVxcdFxcdFxcdFxcdCAgIHNyY19pZCwgMCk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTE1MzE9c3RhdGljIGludCBfX2luamVjdF9zZXRfcHJlZml4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zMzkwX2lycSAqaXJxKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNTM4LVxcdFxcdCAgIGlycS1cXHUwMDNldS5wcmVmaXguYWRkcmVzcyk7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxNTM5OlxcdHRyYWNlX2t2bV9zMzkwX2luamVjdF92Y3B1KHZjcHUtXFx1MDAzZXZjcHVfaWQsIEtWTV9TMzkwX1NJR1BfU0VUX1BSRUZJWCxcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE1NDAtXFx0XFx0XFx0XFx0ICAgaXJxLVxcdTAwM2V1LnByZWZpeC5hZGRyZXNzLCAwKTtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MTU1MT1zdGF0aWMgaW50IF9faW5qZWN0X3NpZ3Bfc3RvcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9pcnEgKmlycSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTU1Ny1cXHR2Y3B1LVxcdTAwM2VzdGF0LmluamVjdF9zdG9wX3NpZ25hbCsrO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTU1ODpcXHR0cmFjZV9rdm1fczM5MF9pbmplY3RfdmNwdSh2Y3B1LVxcdTAwM2V2Y3B1X2lkLCBLVk1fUzM5MF9TSUdQX1NUT1AsIDAsIDApO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTU1OS1cXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MTU3Nz1zdGF0aWMgaW50IF9faW5qZWN0X3NpZ3BfcmVzdGFydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE1ODItXFx0VkNQVV9FVkVOVCh2Y3B1LCAzLCBcXFwiJXNcXFwiLCBcXFwiaW5qZWN0OiByZXN0YXJ0IGludFxcXCIpO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTU4MzpcXHR0cmFjZV9rdm1fczM5MF9pbmplY3RfdmNwdSh2Y3B1LVxcdTAwM2V2Y3B1X2lkLCBLVk1fUzM5MF9SRVNUQVJULCAwLCAwKTtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE1ODQtXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTE1ODk9c3RhdGljIGludCBfX2luamVjdF9zaWdwX2VtZXJnZW5jeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE1OTYtXFx0XFx0ICAgaXJxLVxcdTAwM2V1LmVtZXJnLmNvZGUpO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTU5NzpcXHR0cmFjZV9rdm1fczM5MF9pbmplY3RfdmNwdSh2Y3B1LVxcdTAwM2V2Y3B1X2lkLCBLVk1fUzM5MF9JTlRfRU1FUkdFTkNZLFxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTU5OC1cXHRcXHRcXHRcXHQgICBpcnEtXFx1MDAzZXUuZW1lcmcuY29kZSwgMCk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTE2MTA9c3RhdGljIGludCBfX2luamVjdF9tY2hrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zMzkwX2lycSAqaXJxKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNjE3LVxcdFxcdCAgIGlycS1cXHUwMDNldS5tY2hrLm1jaWMpO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTYxODpcXHR0cmFjZV9rdm1fczM5MF9pbmplY3RfdmNwdSh2Y3B1LVxcdTAwM2V2Y3B1X2lkLCBLVk1fUzM5MF9NQ0hLLCAwLFxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTYxOS1cXHRcXHRcXHRcXHQgICBpcnEtXFx1MDAzZXUubWNoay5tY2ljKTtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MTY0Mj1zdGF0aWMgaW50IF9faW5qZWN0X2NrYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE2NDctXFx0VkNQVV9FVkVOVCh2Y3B1LCAzLCBcXFwiJXNcXFwiLCBcXFwiaW5qZWN0OiBjbG9jayBjb21wYXJhdG9yIGV4dGVybmFsXFxcIik7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxNjQ4OlxcdHRyYWNlX2t2bV9zMzkwX2luamVjdF92Y3B1KHZjcHUtXFx1MDAzZXZjcHVfaWQsIEtWTV9TMzkwX0lOVF9DTE9DS19DT01QLFxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTY0OS1cXHRcXHRcXHRcXHQgICAwLCAwKTtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MTY1Nj1zdGF0aWMgaW50IF9faW5qZWN0X2NwdV90aW1lcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE2NjEtXFx0VkNQVV9FVkVOVCh2Y3B1LCAzLCBcXFwiJXNcXFwiLCBcXFwiaW5qZWN0OiBjcHUgdGltZXIgZXh0ZXJuYWxcXFwiKTtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjE2NjI6XFx0dHJhY2Vfa3ZtX3MzOTBfaW5qZWN0X3ZjcHUodmNwdS1cXHUwMDNldmNwdV9pZCwgS1ZNX1MzOTBfSU5UX0NQVV9USU1FUixcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE2NjMtXFx0XFx0XFx0XFx0ICAgMCwgMCk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTIxMDM9c3RhdGljIGludCBkb19pbmplY3RfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9pcnEgKmlycSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjE0Ny1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjIxNDg6aW50IGt2bV9zMzkwX2luamVjdF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zMzkwX2lycSAqaXJxKVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjE0OS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTMwNzg9dm9pZCBrdm1fczM5MF9yZWluamVjdF9tYWNoaW5lX2NoZWNrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzExMy1cXHRcXHRpcnEudHlwZSA9IEtWTV9TMzkwX01DSEs7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozMTE0OlxcdFxcdHJjID0ga3ZtX3MzOTBfaW5qZWN0X3ZjcHUodmNwdSwgXFx1MDAyNmlycSk7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMTE1LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDA6MDc6MDMuMTUyMzMwMDY2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDcxNzE1MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgaW5mb3JtYXRpb24sIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIEtWTS9zMzkwIEZhdWx0IEluamVjdGlvbioqXG5cbkFscmlnaHQsIGxvb2tpbmcgYXQgdGhpcywgYGt2bV9zMzkwX2luamVjdF92Y3B1YCBzZWVtcyBsaWtlIGEgc29saWQgZW50cnkgcG9pbnQgZm9yIGZvY3VzaW5nIG15IGFuYWx5c2lzLiBJdCdzIG9mdGVuIHRoZSBjYXNlIHRoYXQgaW5qZWN0aW9uIHBvaW50cyBwcm92aWRlIHRoZSBuZWNlc3NhcnkgaG9va3MgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBwcm9jZXNzLlxuXG5Ob3csIHdoZXJlIGRvIEkgZmluZCB0aGUgYWN0dWFsIGZhdWx0IGhhbmRsaW5nIGxvZ2ljPyBHaXZlbiB0aGUgY29udGV4dCBvZiBLVk0gb24gczM5MCwgSSdkIGV4cGVjdCB0byBmaW5kIHNvbWV0aGluZyByZWxldmFudCBpbiB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUuIExldCdzIGRlbHZlIGludG8gYGFyY2gvczM5MC9rdm0vZmF1bHRpbi5jYC4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuYCB3aXRoaW4gdGhhdCBmaWxlLiBUaGF0IGZ1bmN0aW9uIG5hbWUgc3VnZ2VzdHMgaXQgd2lsbCBiZSB0aGUgY29yZSBvZiB0aGUgR3Vlc3QgRnJhbWUgTnVtYmVyIChHRk4pIGZhdWx0LWluIHByb2Nlc3MsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJJ20gaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIGZvciB0aGlzIHByb2plY3QuIFRoaXMgc2hvdWxkIHJldmVhbCB0aGUgbWVjaGFuaXNtcyByZWxhdGVkIHRvIGZhdWx0IGluamVjdGlvbiB3aXRoaW4gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlJ3MgS1ZNIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTIxMywiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAwOjA3OjA2LjU5OTUwNTM4NFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1NjU3MDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9zMzkwX2ZhdWx0aW5fZ2ZuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vZmF1bHRpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vZmF1bHRpbi5jPTE1PWJvb2wga3ZtX2FyY2hfc2V0dXBfYXN5bmNfcGYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4tLVxcbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5jLTE3LS8qXFxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmM6MTg6ICoga3ZtX3MzOTBfZmF1bHRpbl9nZm4oKSAtIGhhbmRsZSBhIGRhdCBmYXVsdC5cXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYy0xOS0gKiBAdmNwdTogVGhlIHZDUFUgd2hvc2UgZ21hcCBpcyB0byBiZSBmaXhlZCB1cCwgb3IgTlVMTCBpZiBvcGVyYXRpbmcgb24gdGhlIFZNLlxcbi0tXFxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMtMzItICovXFxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmM6MzM6aW50IGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgZ3Vlc3RfZmF1bHQgKmYpXFxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMtMzQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDowNzowNi43MTUxNzA0OTJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMzNTU2NDQwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBLVk0vczM5MCBDb2RlIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlc2UgY2hhbmdlcyBhbmQgYGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuYCBzZWVtcyBsaWtlIGEgZ29vZCBlbnRyeSBwb2ludC4gTGV0J3MgbWFrZSBzdXJlIEkndmUgZ290IHRoZSBsYXkgb2YgdGhlIGxhbmQgZmlyc3QuIEknbGwgc3VtbWFyaXplIHRoZXNlIGZvY3VzIGZ1bmN0aW9ucyB0aGF0IHNlZW0gcmVsZXZhbnQgdG8gdGhlIHBhdGNoOiBga3ZtX2FyY2hfdmNwdV9jcmVhdGVgLCBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gLCBga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdWAsIGBrdm1fczM5MF9wdl9kZXN0cm95X2NwdWAsIGBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uYCwgYGt2bV9zMzkwX2tleW9wYCwgYGhhbmRsZV9ycmJlYCwgYGhhbmRsZV9lc3NhYCwgYW5kIG9mIGNvdXJzZSwgYGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuYC4gVGhleSBzZWVtIGxpa2UgdGhlIG1vc3QgcmVsZXZhbnQgYXJlYXMgdG8gaW52ZXN0aWdhdGUuXG5cbk5vdywgYSBrZXkgcXVlc3Rpb246IERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYSBuZXcgZGVwZW5kZW5jeSBvciByZWx5IG9uIGBLVk1fUzM5MF9VQ09OVFJPTGA/IFllcCwgaXQgZG9lcy4gSSBzZWUgaXQgbW9kaWZpZXMgY29kZSB1c2luZyBga3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKWAuIFNvLCBgS1ZNX1MzOTBfVUNPTlRST0xgIG5lZWRzIHRvIGJlIGluIGBFbmFibGVDb25maWdzYC4gSXQncyBwcmV0dHkgb2J2aW91cyB0aGF0IGBLVk1gIGl0c2VsZiBzaG91bGQgYmUgaW4gYEVuYWJsZUNvbmZpZ3MgdG9vLCBzaW5jZSB0aGF0J3MgdGhlIGNvcmUgS1ZNIGZlYXR1cmUgdGhpcyBpcyBidWlsdCB1cG9uLlxuXG5Ib2xkIG9uLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIEknbGwgcXVpY2tseSBjaGVjayBgYXJjaC9zMzkwL2t2bS9LY29uZmlnYCBhZ2FpbiB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgb3IgaW1wbGljYXRpb25zLiBJIHdhbnQgdG8gYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1ODA2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAwOjA3OjEyLjA1MDczODg3M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIzNDIzMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9LY29uZmlnPTE3PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTE4LVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzoxOTpjb25maWcgS1ZNXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTIwLVxcdGRlZl90cmlzdGF0ZSB5XFxuLS1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDYtXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjQ3OmNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTFxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cXHRib29sIFxcXCJVc2Vyc3BhY2UgY29udHJvbGxlZCB2aXJ0dWFsIG1hY2hpbmVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDowNzoxMi4wOTMwODc0MzJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE3NTk4Nzg3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgZnJvbSBhbiBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqSW52ZXN0aWdhdGluZyBLVk0gRGVwZW5kZW5jaWVzIG9uIHMzOTAgQXJjaGl0ZWN0dXJlKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGluIGFuZCB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmN5IHN0cnVjdHVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2Ug4oCTIGxldCdzIGNoZWNrIHRoZSBgYXJjaC9zMzkwL2t2bS9LY29uZmlnYCBmaWxlLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBjb25kaXRpb25hbCBsb2dpYyBmb3IgS1ZNIChLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lKSB3aXRoaW4gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBJIHdhbnQgdG8gc2VlIHByZWNpc2VseSAqd2hhdCogb3RoZXIgY29uZmlndXJhdGlvbnMgb3IgZmVhdHVyZXMgYGt2bWAgcmVsaWVzIG9uIHRvIGJlIGVuYWJsZWQgb24gdGhpcyBhcmNoaXRlY3R1cmUuIFNwZWNpZmljYWxseSwgSSdtIGxvb2tpbmcgZm9yIHRoZSBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cy4gVGhlc2UgYXJlIHRoZSBjcml0aWNhbCBwaWVjZXMgb2YgaW5mb3JtYXRpb24gdGhhdCByZXZlYWwgdGhlIHByZXJlcXVpc2l0ZXMuIFVuZGVyc3RhbmRpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGlzIGtleSB0byB0cm91Ymxlc2hvb3RpbmcgS1ZNLXJlbGF0ZWQgaXNzdWVzLCBvciB0byBlbnN1cmluZyBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gaW4gYSBjdXN0b20gYnVpbGQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyByZXF1aXJlZCBzbyBJIGNhbiBlaXRoZXIgdHJvdWJsZXNob290IGEgY29uZmlndXJhdGlvbiBpc3N1ZSwgb3IgZ2V0IEtWTSB3b3JraW5nIG9uIGEgY3VzdG9tIGJ1aWxkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjY2MiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAwOjA3OjE1LjI2OTA3ODU5NVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIEtWTSBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRzb3VyY2UgXFxcInZpcnQva3ZtL0tjb25maWdcXFwiXFxuICAgNjpcXHRcXG4gICA3OlxcdG1lbnVjb25maWcgVklSVFVBTElaQVRJT05cXG4gICA4OlxcdFxcdGRlZl9ib29sIHlcXG4gICA5OlxcdFxcdHByb21wdCBcXFwiS1ZNXFxcIlxcbiAgMTA6XFx0XFx0aGVscFxcbiAgMTE6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGdldCB0byBzZWUgb3B0aW9ucyBmb3IgdXNpbmcgeW91ciBMaW51eCBob3N0IHRvIHJ1biBvdGhlclxcbiAgMTI6XFx0XFx0ICBvcGVyYXRpbmcgc3lzdGVtcyBpbnNpZGUgdmlydHVhbCBtYWNoaW5lcyAoZ3Vlc3RzKS5cXG4gIDEzOlxcdFxcdCAgVGhpcyBvcHRpb24gYWxvbmUgZG9lcyBub3QgYWRkIGFueSBrZXJuZWwgY29kZS5cXG4gIDE0OlxcdFxcbiAgMTU6XFx0XFx0ICBJZiB5b3Ugc2F5IE4sIGFsbCBvcHRpb25zIGluIHRoaXMgc3VibWVudSB3aWxsIGJlIHNraXBwZWQgYW5kIGRpc2FibGVkLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRpZiBWSVJUVUFMSVpBVElPTlxcbiAgMTg6XFx0XFxuICAxOTpcXHRjb25maWcgS1ZNXFxuICAyMDpcXHRcXHRkZWZfdHJpc3RhdGUgeVxcbiAgMjE6XFx0XFx0cHJvbXB0IFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuICAyMjpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fQ1BVX1JFTEFYX0lOVEVSQ0VQVFxcbiAgMjM6XFx0XFx0c2VsZWN0IEtWTV9BU1lOQ19QRlxcbiAgMjQ6XFx0XFx0c2VsZWN0IEtWTV9BU1lOQ19QRl9TWU5DXFxuICAyNTpcXHRcXHRzZWxlY3QgS1ZNX0NPTU1PTlxcbiAgMjY6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0lSUUNISVBcXG4gIDI3OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9JUlFfUk9VVElOR1xcbiAgMjg6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0lOVkFMSURfV0FLRVVQU1xcbiAgMjk6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX05PX1BPTExcXG4gIDMwOlxcdFxcdHNlbGVjdCBLVk1fVkZJT1xcbiAgMzE6XFx0XFx0c2VsZWN0IFZJUlRfWEZFUl9UT19HVUVTVF9XT1JLXFxuICAzMjpcXHRcXHRzZWxlY3QgS1ZNX01NVV9MT0NLTEVTU19BR0lOR1xcbiAgMzM6XFx0XFx0c2VsZWN0IEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcXG4gIDM0OlxcdFxcdGhlbHBcXG4gIDM1OlxcdFxcdCAgU3VwcG9ydCBob3N0aW5nIHBhcmF2aXJ0dWFsaXplZCBndWVzdCBtYWNoaW5lcyB1c2luZyB0aGUgU0lFXFxuICAzNjpcXHRcXHQgIHZpcnR1YWxpemF0aW9uIGNhcGFiaWxpdHkgb24gdGhlIG1haW5mcmFtZS4gVGhpcyBzaG91bGQgd29ya1xcbiAgMzc6XFx0XFx0ICBvbiBhbnkgNjRiaXQgbWFjaGluZS5cXG4gIDM4OlxcdFxcbiAgMzk6XFx0XFx0ICBUaGlzIG1vZHVsZSBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGhhcmR3YXJlIGNhcGFiaWxpdGllcyB0aHJvdWdoXFxuICA0MDpcXHRcXHQgIGEgY2hhcmFjdGVyIGRldmljZSBub2RlIG5hbWVkIC9kZXYva3ZtLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAgNDM6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBrdm0uXFxuICA0NDpcXHRcXG4gIDQ1OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDQ2OlxcdFxcbiAgNDc6XFx0Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXFxuICA0ODpcXHRcXHRib29sIFxcXCJVc2Vyc3BhY2UgY29udHJvbGxlZCB2aXJ0dWFsIG1hY2hpbmVzXFxcIlxcbiAgNDk6XFx0XFx0ZGVwZW5kcyBvbiBLVk1cXG4gIDUwOlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDA6MDc6MTUuMjY5MTcxMjY1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNzg0ODgzNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgbXkgbWluZCBpcyBqdW1waW5nIGFyb3VuZCBhIGJpdCBoZXJl4oCmXG5cbioqS1ZNIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuUmlnaHQsIHNvIEknbSBmb2N1c2luZyBvbiB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnM6IGBLVk1gIGFuZCBgS1ZNX1MzOTBfVUNPTlRST0xgLiBUaG9zZSBhcmUgdGhlIGNvcmUsIEkga25vdyB0aGF0LiBCdXQgaG9sZCBvbiwgdGhlIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YCBmdW5jdGlvbiBuYW1l4oCmIHRoYXQgc2NyZWFtcyBQcm90ZWN0ZWQgVmlydHVhbGl6YXRpb24gKFBWKSB0byBtZSwgb24gczM5MHguIEkgbmVlZCB0byBjbGFyaWZ5OiBpcyB0aGVyZSBhIHNwZWNpZmljIGNvbmZpZyBvcHRpb24gKmRlZGljYXRlZCogdG8gdGhhdCBQViBmZWF0dXJlIHNldCwgb3IgaXMgaXQgaW1wbGljaXRseSBlbmFibGVkIHNvbWVob3c/IEkgbmVlZCB0byBrbm93IHdoZXJlIHRoZSBQViBzdXBwb3J0IGlzIGVuYWJsZWQgaW4gS1ZNIHMzOTB4LiBJIGhhdmUgdG8gdHJhY2UgaG93IHRoaXMgaXMgYmVpbmcgY29udHJvbGxlZCB3aXRoaW4gdGhlIEtWTSBlY29zeXN0ZW0gZm9yIHMzOTB4LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzU5MCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDA6MDc6MTguNDQ3NjYyMjQ1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mjc1NzkxOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9TMzkwX1BWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDA6MDc6MTguNDkwNDI5NDU0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NDgwOTg5NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipDaGVja2luZyBmb3IgUFYgQ29uZmlndXJhdGlvbiBpbiBzMzkwIEtjb25maWcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlcmUncyBhbnkgUGFyYXZpcnR1YWxpemF0aW9uIChQVikgY29uZmlndXJhdGlvbiBvcHRpb25zIGRlZmluZWQgd2l0aGluIHRoZSBgYXJjaC9zMzkwL0tjb25maWdgIGZpbGUuIFRoaXMgaXMgc3RhbmRhcmQgcHJvY2VkdXJlIGZvciBjaGVja2luZyB0aGUgYXJjaGl0ZWN0dXJlJ3MgY29uZmlndXJhdGlvbiBzcGFjZSBmb3IgdmlydHVhbGl6YXRpb24gc3VwcG9ydC4gSSdtIGxvb2tpbmcgZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gaHlwZXJ2aXNvcnMsIGd1ZXN0cywgb3IgcGFyYXZpcnR1YWxpemVkIGRyaXZlcnMuIFRoZSBwcmVzZW5jZSBvZiBQViBvcHRpb25zIHdvdWxkIHNpZ25hbCBob3cgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlIGhhbmRsZXMgaW50ZXJhY3Rpb25zIHdpdGggdmlydHVhbGl6YXRpb24gdGVjaG5vbG9naWVzIGFuZCBpZiB0aGUga2VybmVsIHByb3ZpZGVzIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24ga25vYnMgZm9yIHN1Y2ggZW52aXJvbm1lbnRzLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzg3NCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAwOjA3OjIxLjMzODUzMTQ5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzE2ODAxOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIC4qUFZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAwOjA3OjIxLjM4MTcwOTU3OVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDU0OTY4ODYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQ2hlY2tpbmcgdGhlIFByb3RlY3RlZCBNZW1vcnkgQ29uZmlndXJhdGlvbiBmb3IgczM5MCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBwcm90ZWN0ZWQgbWVtb3J5IGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSdzIGtlcm5lbC4gVGhlIGZpcnN0IHBsYWNlIEknZCBsb29rIGlzLCBuYXR1cmFsbHksIHRoZSBgS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBvbmUgaW4gYGFyY2gvczM5MC9gLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGF0IGFyY2hpdGVjdHVyZSByZXNpZGUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGBQUk9URUNURURgIHN5bWJvbCwgb3IgaG93ZXZlciBpdCdzIGRlZmluZWQgdGhlcmUsIHRvIHNlZSBob3cgaXQncyBoYW5kbGVkLiBXaGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzPyBIb3cgaXMgaXQgY29ubmVjdGVkIHRvIG90aGVyIGZlYXR1cmVzPyBBcmUgdGhlcmUgc3BlY2lmaWMgZGVmYXVsdCB2YWx1ZXMgb3IgcHJvbXB0cz8gVGhpcyBgS2NvbmZpZ2AgZmlsZSBzaG91bGQgZ2l2ZSBtZSB0aGUgZ3JvdW5kIHRydXRoIG9mIHRoZSBjb250cm9sIG92ZXIgcHJvdGVjdGVkIG1lbW9yeSBmb3IgdGhlIGFyY2hpdGVjdHVyZS4gSSdtIGhvcGluZyBpdCdzIHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IGV4cGVyaWVuY2UgdGVsbHMgbWUgdG8gcHJlcGFyZSBmb3IgcG90ZW50aWFsIGNvbXBsZXhpdGllcyByZWxhdGVkIHRvIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGFuZCBob3cgdGhlIGtlcm5lbCBpbnRlcmFjdHMgd2l0aCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgwODQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDowNzoyNC40MzY2ODExNzJaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMDE5MzI5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgLipQUk9URUNURURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAwOjA3OjI0LjQ3NzcwNzkwMVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTg5NjI2ODE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyBDb25kaXRpb25hbCBDb21waWxhdGlvbiBpbiBgYXJjaC9zMzkwL2t2bS9wdi5jYCoqXG5cbk9rYXksIEknbSBkaWdnaW5nIGludG8gdGhpcy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgaWYgYGFyY2gvczM5MC9rdm0vcHYuY2AgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZC4gR2l2ZW4gdGhlIGNvbnRleHQsIGl0J3MgbGlrZWx5IGRlYWxpbmcgd2l0aCBwYXJhdmlydHVhbGl6ZWQgKFBWKSBjb21wb25lbnRzIGZvciB0aGUgczM5MCBhcmNoaXRlY3R1cmUgd2l0aGluIEtWTS4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IFBWIGNvZGUgb2Z0ZW4gaGFzIHNwZWNpZmljIGNvbXBpbGF0aW9uIGZsYWdzIG9yIGJ1aWxkIGNvbmZpZ3VyYXRpb25zIHRvIGVuYWJsZSBpdCwgZGVwZW5kaW5nIG9uIHRoZSBlbnZpcm9ubWVudCBvciB0aGUgZGVzaXJlZCBmZWF0dXJlIHNldC4gU28sIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhpcyBmaWxlIGlzIGFsd2F5cyBpbmNsdWRlZCBpbiB0aGUgYnVpbGQgb3IgaWYgdGhlcmUgYXJlIGAjaWZkZWZgIG9yIHNpbWlsYXIgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgY29udHJvbGxpbmcgaXRzIGluY2x1c2lvbi4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoaXMgZmlsZSBpcyBhY3RpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MzQ5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDA6MDc6MjcuNDY3MzUxMTE2WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjE3NDAxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwdi5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9NYWtlZmlsZT0xMD1rdm0teSArPSBrdm0tczM5MC5vIGludGVyY2VwdC5vIGludGVycnVwdC5vIHByaXYubyBzaWdwLm9cXG5hcmNoL3MzOTAva3ZtL01ha2VmaWxlOjExOmt2bS15ICs9IGRpYWcubyBnYWNjZXNzLm8gZ3Vlc3RkYmcubyB2c2llLm8gcHYub1xcbmFyY2gvczM5MC9rdm0vTWFrZWZpbGUtMTIta3ZtLXkgKz0gZGF0Lm8gZ21hcC5vIGZhdWx0aW4ub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDowNzoyNy41MDk1MzE1ODVaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTAzNDgwMTkxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLVk0gczM5MHggRnV6emluZyBEZWNpc2lvbioqXG5cbk9rYXksIHNvIEtWTSdzIHByZXNlbmNlIGlzIGFzc3VtZWQgaWYgdGhlIGtlcm5lbCBpcyBjb21waWxlZCB3aXRoIEtWTSBlbmFibGVkLiBMZXQncyBzdGFydCBieSByZXZpZXdpbmcgdGhlIGZ1bmN0aW9ucyBmbGFnZ2VkIGFzIHBvdGVudGlhbGx5IGludGVyZXN0aW5nOiBga3ZtX2FyY2hfdmNwdV9jcmVhdGVgLCBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gLCBga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdWAsIGBrdm1fczM5MF9wdl9kZXN0cm95X2NwdWAsIGBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uYCwgYGt2bV9zMzkwX2tleW9wYCwgYGhhbmRsZV9ycmJlYCwgYGhhbmRsZV9lc3NhYCwgYGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuYCwgYW5kIGBrdm1fczM5MF9pbmplY3RfdmNwdWAuIFdlIGtub3cgdGhlc2UgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCBLVk0gaW9jdGxzIGFuZCBndWVzdCBleGVjdXRpb24sIG1ha2luZyB0aGVtIGRlZmluaXRlbHkgY2FuZGlkYXRlcyBmb3IgZnV6emluZywgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGV5IGRlYWwgd2l0aCB0aGUgY29yZSBLVk0gZnVuY3Rpb25hbGl0eSBzcGVjaWZpYyB0byBzMzkwLiBGdXJ0aGVybW9yZSwgU3l6a2FsbGVyIGRvZXMgaW4gZmFjdCBzdXBwb3J0IGJvdGggczM5MHggYXJjaGl0ZWN0dXJlIGFuZCBLVk0gZnV6emluZy5cblxuTm93LCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGlzIHdhcnJhbnRzIGZ1enppbmcsIGxldCdzIGdvIG92ZXIgdGhlIGBXb3J0aEZ1enppbmdgIGNyaXRlcmlhLiBUaGUgdGV4dCBzYXlzIHRvIGV4Y2x1ZGUgY29kZSBwYXRocyBcImltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmVcIi4gSGVyZSdzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3Rpbmc6IHMzOTB4IEtWTSwgYXMgd2UgYWxsIGtub3csICpyZXF1aXJlcyogYWN0dWFsIHMzOTB4IGhhcmR3YXJlIGZvciBLVk0uIFFFTVUgb24geDg2IGNhbid0IHJ1biBLVk0gZm9yIHMzOTB4LiBCdXQsIGNydWNpYWxseSwgU3l6a2FsbGVyICpjYW4qIGJlIHJ1biBvbiBzMzkweCBoYXJkd2FyZSBpdHNlbGYsIGxpa2Ugb24gSUJNIENsb3VkIG9yIHovVk0uXG5cblRoZSB3b3JkaW5nIG9mIHRoZSBwcm9tcHQgc2F5cywgXCJpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VXCIuIEl0ICpkb2Vzbid0KiByZXN0cmljdCB0aGlzIHRvIHg4Niwgd2hpY2ggaXMgY3J1Y2lhbC4gQWx0aG91Z2ggUUVNVSBvbiB4ODYgY2Fu4oCZdCB1dGlsaXplIEtWTSBmb3IgczM5MHgsIFFFTVUgKmNhbiogZW11bGF0ZSBzMzkweCwgYW5kIHdoZW4gcnVuICpvbiogczM5MHgsIGl0IGJlY29tZXMgYSB2YWxpZCBLVk0gdGFyZ2V0LiBTaW5jZSBzeXprYWxsZXIgKmRvZXMqIGhhdmUgczM5MHggaW5zdGFuY2VzLCBhbmQgc2luY2UgcnVubmluZyBRRU1VIG9uIHMzOTB4ICpkb2VzKiBtYWtlIHRoZXNlIGZ1bmN0aW9ucyBhY2Nlc3NpYmxlLCBldmVuIGlmIGluZGlyZWN0bHkgdGhyb3VnaCBlbXVsYXRpb24sIEknbSBjb25maWRlbnQgaW4gc2F5aW5nIHRoYXQgdGhlIGNvZGUgcGF0aHMgYXJlIHJlYWNoYWJsZS4gVGhlcmVmb3JlLCBJIHdpbGwgcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbkknbGwgZmluYWxpemUgdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3Qgd2l0aCB0aGUgZnVuY3Rpb25zIEkgbWVudGlvbmVkIGFib3ZlLiBBbmQsIGxldCdzIG5vdyBjaGVjayBpZiBga3ZtX3MzOTBfa2V5b3BgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODcxNSwiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDowNzozNi41NDQzMzYwNTRaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNjE2NzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9zMzkwX2tleW9wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTUwPXN0YXRpYyB2b2lkIF9fa3ZtX3MzOTBfZXhpdCh2b2lkKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU2MS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTYyOnN0YXRpYyBpbnQga3ZtX3MzOTBfa2V5b3Aoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBrdm0gKmt2bSwgaW50IG9wLFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NjMtXFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuaW9uIHNrZXkgc2tleSlcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yOTI2PWludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMDU4LVxcdFxcdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMDU5OlxcdFxcdHN0cnVjdCBrdm1fczM5MF9rZXlvcCBrb3A7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMwNjAtXFx0XFx0dW5pb24gc2tleSBza2V5O1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMwNzEtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMwNzI6XFx0XFx0ciA9IGt2bV9zMzkwX2tleW9wKG1jLCBrdm0sIGtvcC5vcGVyYXRpb24sIGtvcC5ndWVzdF9hZGRyLCBza2V5KTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzA3My1cXHRcXHRrdm1fczM5MF9mcmVlX21tdV9jYWNoZShtYyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAwOjA3OjM2LjU4Nzk1OTcwM1oiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTEwNjI1ODI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG4qKkFuYWx5emluZyBBUEkgRW50cnlwb2ludCBVc2FnZSBmb3IgS1ZNL3MzOTB4KipcblxuUmlnaHQsIHNvIHRoZSBwcm9tcHQgaXMgcHJldHR5IGNsZWFyOiBpdCdzIGdlbmVyYWxseSBwcmVmZXJyZWQgdG8gdXNlIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyByYXRoZXIgdGhhbiBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gSSdtIGxvb2tpbmcgYXQgYGt2bV9zMzkwX2tleW9wYCwgd2hpY2ggaXMsIGluIGZhY3QsIHN0YXRpYy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdXNlIGBrdm1fYXJjaF92bV9pb2N0bGAgaW5zdGVhZC4gQnV0LCBob2xkIG9uIGEgc2Vjb25kLi4uIGBrdm1fYXJjaF92bV9pb2N0bGAgaXMgKnZlcnkqIGdlbmVyaWMsIGlzbid0IGl0PyBJdCBzZWVtcyBsaWtlIGl0IGhhbmRsZXMgYSBicm9hZCByYW5nZSBvZiBpb2N0bHMsIG5vdCBzcGVjaWZpY2FsbHkgdGhlIGtleSBvcGVyYXRpb24uXG5cbkhtbSwgb2theSwgcmUtZXhhbWluaW5nIGBrdm1fczM5MF9rZXlvcGAsIGl0ICppcyogc3RhdGljLCBidXQgaXQgaXNuJ3QgaW5saW5lZC4gSXQncyBnb3QgdGhhdCBiaWcgYHN3aXRjaGAgc3RhdGVtZW50LCB3aGljaCBsaWtlbHkgbWVhbnMgaXQncyBhIGRpc3RpbmN0LCBmYWlybHkgc2l6ZWFibGUgZnVuY3Rpb24uIFNvLCBpcyBga3ZtX2FyY2hfdm1faW9jdGxgIGEgKmJldHRlciogY2hvaWNlPyBPciBpcyBpdCBva2F5IHRvIGxlYXZlIGBrdm1fczM5MF9rZXlvcGAgaWYgaXQgaXMgYSB0cnVseSBkaXN0aW5jdCBmdW5jdGlvbj8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHRoZSBhYnN0cmFjdGlvbiBsZXZlbCBoZXJlLlxuXG5XYWl0LCBvZiBjb3Vyc2UsIEkgc2hvdWxkIGJlIHVzaW5nIGBrdm1fYXJjaF92bV9pb2N0bGAuIFRoYXQgaXMgdGhlIGFjdHVhbCBLVk0gZW50cnkgcG9pbnQuIE9rLCBzbyB1c2luZyB0aGF0IGlzIHRoZSByaWdodCB0aGluZyB0byBkbyB0aGVuLlxuXG5Pa2F5LCBsZXQgbWUgY2hlY2sgYW5vdGhlciBvbmU6IFdoYXQgYWJvdXQgYGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25gPyBUaGF0J3MgKmFsc28qIHN0YXRpYy4gU28sIEkgbmVlZCB0byBhcHBseSB0aGUgc2FtZSBhbmFseXNpcyB0aGVyZSB0b28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNTA5LCJPdXRwdXRUb2tlbnMiOjUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAwOjA3OjQxLjQ5ODU4ODUyOFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ2MTg4NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTEyNzE9c3RhdGljIGludCBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTI5Ny1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTI5ODpzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMjk5LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yMDQ0PXN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc2V0X2F0dHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTIwNjEtXFx0Y2FzZSBLVk1fUzM5MF9WTV9NSUdSQVRJT046XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjIwNjI6XFx0XFx0cmV0ID0ga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbihrdm0sIGF0dHIpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMDYzLVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDowNzo0MS41NDMyMTMyNTdaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTMyNTgxODYxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS1ZNIHMzOTAgRW50cnkgUG9pbnRzIGZvciBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGhlcmUgaXMgdG8gaWRlbnRpZnkgdGhlIGtleSBlbnRyeSBwb2ludHMgaW4gdGhlIHMzOTAgS1ZNIGltcGxlbWVudGF0aW9uIHRoYXQgYXJlICptb3N0KiBsaWtlbHkgdG8geWllbGQgaW50ZXJlc3RpbmcgZnV6emluZyB0YXJnZXRzLCBnaXZlbiB0aGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBwYXRjaCBzZXJpZXMuXG5cbkZpcnN0LCBJIHNlZSB0aGF0IGBrdm1fczM5MF92bV9zZXRfYXR0cmAgaXMgYSBzdGF0aWMgZnVuY3Rpb247IGl0J3MgYWNjZXNzZWQgdGhyb3VnaCBga3ZtX2RldmljZV9pb2N0bF9hdHRyYCBvciBhIHNpbWlsYXIgaW50ZXJmYWNlLCBzbyBpdCdzIHByb2JhYmx5IGxlc3MgZGlyZWN0LiBOb3csIGxldCdzIGdvIGZ1bmN0aW9uIGJ5IGZ1bmN0aW9uLlxuXG5ga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdWAsIG5vdCBzdGF0aWMuIE9rYXksIGdvb2QuIGBrdm1fczM5MF9wdl9kZXN0cm95X2NwdWAsIGFsc28gbm90IHN0YXRpYy4gYGt2bV9hcmNoX3ZjcHVfY3JlYXRlYCwgbm9uLXN0YXRpYyB0b28uIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAgYXMgd2VsbC4gVGhlbiB0aGVyZSBhcmUgc29tZSBzdGF0aWMgZnVuY3Rpb25zLCBgaGFuZGxlX3JyYmVgIGNhbGxlZCB2aWEgYGt2bV9zMzkwX2hhbmRsZV9iMmAgYW5kIGBoYW5kbGVfZXNzYWAgY2FsbGVkIHZpYSBga3ZtX3MzOTBfaGFuZGxlX2I5YCwgaW50ZXJlc3RpbmcuIFRoZW4sIGBrdm1fczM5MF9mYXVsdGluX2dmbmAgaXMgbm90IHN0YXRpYy4gRmluYWxseSwgYGt2bV9zMzkwX2luamVjdF92Y3B1YCBpcyBub3Qgc3RhdGljLlxuXG5TbywgdGhlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIGFyZSBub3cgY2xlYXI6XG4tIGBrdm1fYXJjaF92Y3B1X2NyZWF0ZWBcbi0gYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYFxuLSBga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdWBcbi0gYGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1YFxuLSBga3ZtX3MzOTBfZmF1bHRpbl9nZm5gXG4tIGBrdm1fczM5MF9pbmplY3RfdmNwdWBcbi0gYGt2bV9zMzkwX2hhbmRsZV9iMmBcbi0gYGt2bV9zMzkwX2hhbmRsZV9iOWBcbi0gYGt2bV9hcmNoX3ZtX2lvY3RsYFxuXG5BbHJpZ2h0LCB0aGVzZSBhcmUgb3VyIG1haW4gdGFyZ2V0cy4gSSBuZWVkIHRvIGtlZXAgdGhvc2UgaW4gbWluZC5cblxuTm93LCBjb25zaWRlcmluZyB0aGUgcGF0Y2ggZGVzY3JpcHRpb24sIHdoaWNoIGRldGFpbHMgZml4ZXMgZm9yIG1lbW9yeSBsZWFrcyBpbiB2Q1BVIGNyZWF0aW9uL2Rlc3RydWN0aW9uLCBzdG9yYWdlIGtleSBvcGVyYXRpb25zLCBwYWdlIGZhdWx0IHNpZ25hbCBoYW5kbGluZywgYW5kIG1lbW9yeSByZWdpb24gbG9ja2luZywgaXQgbWFrZXMgc2Vuc2UgdG8gZm9jdXMgb24gdGhlc2Ugbm9uLXN0YXRpYyBmdW5jdGlvbnMuIFRoZXkgcmVwcmVzZW50IGtleSB2aXJ0dWFsaXphdGlvbiBmZWF0dXJlcyBhbmQgd291bGQgYmUgZ29vZCBwbGFjZXMgdG8gc3RhcnQgZnV6emluZy5cblxuSSdtIHRoaW5raW5nLCBsZXQncyBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3MuIEkga25vdyBgS1ZNYCBpcyBiYXNlbGluZS4gSSBhbHNvIHNlZSB0aGF0IGBLVk1fUzM5MF9VQ09OVFJPTGAgaXMgcHJlc2VudC4gSXMgdGhhdCByZWxldmFudD8gWWVzLCB0aGUgY29kZSB1c2VzIGBrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pYC4gR3JlYXQsIHdlIHdpbGwgbmVlZCB0byBjb25zaWRlciB0aGF0LlxuXG5XaXRoIHRoaXMgYW5hbHlzaXMgY29tcGxldGUsIGl0J3MgdGltZSB0byBnZW5lcmF0ZSB0aGUgcmVzdWx0cy4gSSdtIGNvbmZpZGVudCBpbiB0aGUgaWRlbnRpZmllZCBmdXp6aW5nIHRhcmdldHMgYmFzZWQgb24gdGhpcyBhbmFseXNpcy4gTm93LCBJJ20gZ29pbmcgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTQ3NSwiT3V0cHV0VG9rZW5zIjoyNDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDA6MDc6NTAuODY5MDM0MzA0WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA1NjkxMDksIkVycm9yIjoidGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IEtWTV9TMzkwX1VDT05UUk9MIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX1MzOTBfVUNPTlRST0xcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fYXJjaF92Y3B1X2NyZWF0ZVwiLFxuICAgIFwia3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25cIixcbiAgICBcImt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVcIixcbiAgICBcImt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1XCIsXG4gICAgXCJrdm1fczM5MF9mYXVsdGluX2dmblwiLFxuICAgIFwia3ZtX3MzOTBfaW5qZWN0X3ZjcHVcIixcbiAgICBcImt2bV9zMzkwX2hhbmRsZV9iMlwiLFxuICAgIFwia3ZtX3MzOTBfaGFuZGxlX2I5XCIsXG4gICAgXCJrdm1fYXJjaF92bV9pb2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHMzOTAgS1ZNIGltcGxlbWVudGF0aW9uLCBpbmNsdWRpbmcgZml4aW5nIG1lbW9yeSBsZWFrcyBkdXJpbmcgdkNQVSBjcmVhdGlvbi9kZXN0cnVjdGlvbiwgbW9kaWZ5aW5nIHJlZmVyZW5jZSBiaXQgcmVzZXR0aW5nIGZvciBzdG9yYWdlIGtleXMsIGFkanVzdGluZyBzaWduYWwgaGFuZGxpbmcgZHVyaW5nIHBhZ2UgZmF1bHRzLCBhbmQgaW1wcm92aW5nIGxvY2tpbmcgZHVyaW5nIG1lbW9yeSByZWdpb24gY29tbWl0cyBhbmQgbWlncmF0aW9uLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUgdmlydHVhbGl6YXRpb24gZmVhdHVyZXMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcInRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBLVk1fUzM5MF9VQ09OVFJPTFwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDowNzo1MC45NDk2MTM1MzNaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk3MTM2NDg2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBhIE1pc3NpbmcgS1ZNIEZlYXR1cmUgb24gczM5MHgqKlxuXG5SaWdodCwgbGV0IG1lIHNlZS4uLiBJJ20gYSBiaXQgcGVycGxleGVkLiBJdCBhcHBlYXJzIHRoYXQgYEtWTV9TMzkwX1VDT05UUk9MYCBpc24ndCBkZWZpbmVkLiBUaGF0J3MgdW5leHBlY3RlZCwgZXNwZWNpYWxseSBnaXZlbiB0aGUgY29udGV4dCBJJ20gd29ya2luZyBpbi4gVGltZSB0byBnbyBiYWNrIGFuZCBkb3VibGUtY2hlY2ssIHNwZWNpZmljYWxseSwgdGhlIGBhcmNoL3MzOTAva3ZtL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgaGFzbid0IGJlZW4gYSByZWNlbnQgY2hhbmdlIG9yIG1pc2NvbmZpZ3VyYXRpb24gb24gbXkgcGFydCwgb3IgcGVyaGFwcyB0aGVyZSdzIGEgZGVwZW5kZW5jeSBJIG1pc3NlZC4gSXQncyB1c3VhbGx5IHRoZSBLY29uZmlnIGZpbGVzIHRoYXQgZGVmaW5lIHRoZSBhdmFpbGFiaWxpdHkgb2YgdGhlc2UgZmVhdHVyZXMsIHNvIGxldCdzIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyOTMwLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJzZXQtcmVzdWx0cyJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAwOjA3OjUzLjkyMDk4MTM4OFoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1MDAyMzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9LY29uZmlnPTE5PWNvbmZpZyBLVk1cXG4tLVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDc6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIlVzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAwOjA3OjU0LjAzNTk4OTcyNloiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTg4ODc4NzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFieXJpbnRoKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB0aG91Z2h0IEkgcmVtZW1iZXJlZCBzZWVpbmcgc29tZXRoaW5nIGFib3V0IHRoaXMuLi4gYW5kIHllcywgdGhlcmUgaXQgaXMhIGBLVk1fUzM5MF9VQ09OVFJPTGAgKmRvZXMqIGV4aXN0LCBhbmQgaXQncyByaWdodCB3aGVyZSBpdCBzaG91bGQgYmUsIHR1Y2tlZCBhd2F5IGluIGBhcmNoL3MzOTAva3ZtL0tjb25maWdgLiBTbywgd2hhdCBnaXZlcz8gV2h5IGRpZCBgc2V0LXJlc3VsdHNgIHRlbGwgbWUgaXQgd2Fzbid0IHRoZXJlPyBTb21ldGhpbmcncyBhbWlzcyB3aXRoIHRoZSB0b29sLlxuXG5NeSBzdXNwaWNpb24gaXMgdGhhdCBpdCdzIGdldHRpbmcgY29uZnVzZWQuIEl0J3MgbGlrZWx5IGNoZWNraW5nIGFnYWluc3QgYW4geDg2IGNvbmZpZ3VyYXRpb24sIG1heWJlIGV2ZW4gdGhlIGB4ODZfNjRgIGRlZmNvbmZpZywgd2hlcmUgdGhpcyBzcGVjaWZpYyBzeW1ib2wsIGBLVk1fUzM5MF9VQ09OVFJPTGAsIHdvdWxkIG5hdHVyYWxseSBiZSBhYnNlbnQgYmVjYXVzZSwgd2VsbCwgaXQncyBzcGVjaWZpYyB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIEl0J3MgYSBjbGFzc2ljIGdvdGNoYSB3aGVuIHdvcmtpbmcgd2l0aCBtdWx0aS1hcmNoaXRlY3R1cmUga2VybmVsIGNvbmZpZ3VyYXRpb25zLlxuXG5JZiB0aGUgdG9vbCBwZXJzaXN0cyBpbiBpdHMgbWlzZ3VpZGVkIGNvbXBsYWludHMsIEknbGwgc2ltcGx5IHJldmVydCB0byB0aGUgbW9zdCBicm9hZGx5IGFwcGxpY2FibGUgc3ltYm9sLCBgS1ZNYC4gSXQnbGwgYmUgZmluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMyODksIk91dHB1dFRva2VucyI6MjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAwOjA3OjU5LjIyNDg3MjA4N1oiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NzU5MjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fYXJjaF92Y3B1X2NyZWF0ZVwiLFxuICAgIFwia3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25cIixcbiAgICBcImt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVcIixcbiAgICBcImt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1XCIsXG4gICAgXCJrdm1fczM5MF9mYXVsdGluX2dmblwiLFxuICAgIFwia3ZtX3MzOTBfaW5qZWN0X3ZjcHVcIixcbiAgICBcImt2bV9zMzkwX2hhbmRsZV9iMlwiLFxuICAgIFwia3ZtX3MzOTBfaGFuZGxlX2I5XCIsXG4gICAgXCJrdm1fYXJjaF92bV9pb2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHMzOTAgS1ZNIGltcGxlbWVudGF0aW9uLCBpbmNsdWRpbmcgZml4aW5nIG1lbW9yeSBsZWFrcyBkdXJpbmcgdkNQVSBjcmVhdGlvbi9kZXN0cnVjdGlvbiwgbW9kaWZ5aW5nIHJlZmVyZW5jZSBiaXQgcmVzZXR0aW5nIGZvciBzdG9yYWdlIGtleXMsIGFkanVzdGluZyBzaWduYWwgaGFuZGxpbmcgZHVyaW5nIHBhZ2UgZmF1bHRzLCBhbmQgaW1wcm92aW5nIGxvY2tpbmcgZHVyaW5nIG1lbW9yeSByZWdpb24gY29tbWl0cyBhbmQgbWlncmF0aW9uLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUgdmlydHVhbGl6YXRpb24gZmVhdHVyZXMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcmNoX3ZjcHVfY3JlYXRlXCIsXG4gICAgXCJrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvblwiLFxuICAgIFwia3ZtX3MzOTBfcHZfY3JlYXRlX2NwdVwiLFxuICAgIFwia3ZtX3MzOTBfcHZfZGVzdHJveV9jcHVcIixcbiAgICBcImt2bV9zMzkwX2ZhdWx0aW5fZ2ZuXCIsXG4gICAgXCJrdm1fczM5MF9pbmplY3RfdmNwdVwiLFxuICAgIFwia3ZtX3MzOTBfaGFuZGxlX2IyXCIsXG4gICAgXCJrdm1fczM5MF9oYW5kbGVfYjlcIixcbiAgICBcImt2bV9hcmNoX3ZtX2lvY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgczM5MCBLVk0gaW1wbGVtZW50YXRpb24sIGluY2x1ZGluZyBmaXhpbmcgbWVtb3J5IGxlYWtzIGR1cmluZyB2Q1BVIGNyZWF0aW9uL2Rlc3RydWN0aW9uLCBtb2RpZnlpbmcgcmVmZXJlbmNlIGJpdCByZXNldHRpbmcgZm9yIHN0b3JhZ2Uga2V5cywgYWRqdXN0aW5nIHNpZ25hbCBoYW5kbGluZyBkdXJpbmcgcGFnZSBmYXVsdHMsIGFuZCBpbXByb3ZpbmcgbG9ja2luZyBkdXJpbmcgbWVtb3J5IHJlZ2lvbiBjb21taXRzIGFuZCBtaWdyYXRpb24uIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSB2aXJ0dWFsaXphdGlvbiBmZWF0dXJlcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlfxvs[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-30 23:50:29 +0000 UTC FinishedAt: 2026-07-31 00:08:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "00000d23-aaa3-48bb-8b1d-dd1f5f9d811c" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_arch_vcpu_create", "kvm_arch_commit_memory_region", "kvm_s390_pv_create_cpu", "kvm_s390_pv_destroy_cpu", "kvm_s390_faultin_gfn", "kvm_s390_inject_vcpu", "kvm_s390_handle_b2", "kvm_s390_handle_b9", "kvm_arch_vm_ioctl" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAwOjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfY3JlYXRlJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3B2X2NyZWF0ZV9jcHUmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfcHZfZGVzdHJveV9jcHUmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfZmF1bHRpbl9nZm4mIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfaW5qZWN0X3ZjcHUmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfaGFuZGxlX2IyJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2hhbmRsZV9iOSYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF92bV9pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBzMzkwIEtWTSBpbXBsZW1lbnRhdGlvbiwgaW5jbHVkaW5nIGZpeGluZyBtZW1vcnkgbGVha3MgZHVyaW5nIHZDUFUgY3JlYXRpb24vZGVzdHJ1Y3Rpb24sIG1vZGlmeWluZyByZWZlcmVuY2UgYml0IHJlc2V0dGluZyBmb3Igc3RvcmFnZSBrZXlzLCBhZGp1c3Rpbmcgc2lnbmFsIGhhbmRsaW5nIGR1cmluZyBwYWdlIGZhdWx0cywgYW5kIGltcHJvdmluZyBsb2NraW5nIGR1cmluZyBtZW1vcnkgcmVnaW9uIGNvbW1pdHMgYW5kIG1pZ3JhdGlvbi4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIHZpcnR1YWxpemF0aW9uIGZlYXR1cmVzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDowNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGZiZjVjZDViOWEyNDAzNTk3NTY4YzhkZWZiYWUyOWU3ODdmMjQ1ODhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzMSAwMDowNjowNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5pbmRleCBlYWEzNGM1YmQzYzExLi5lZGY3NWI2YWQyMGNlIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtNDQwLDYgJiM0Mzs0NDAsNyBAQCBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7XG4gXHRib29sIHNrZXlfZW5hYmxlZDtcbiBcdC8qIEluZGljYXRvciBpZiB0aGUgYWNjZXNzIHJlZ2lzdGVycyBoYXZlIGJlZW4gbG9hZGVkIGZyb20gZ3Vlc3QgKi9cbiBcdGJvb2wgYWNyc19sb2FkZWQ7XG4mIzQzO1x0Ym9vbCBpbml0aWFsaXplZDtcbiBcdHN0cnVjdCBrdm1fczM5MF9wdl92Y3B1IHB2O1xuIFx0dW5pb24gZGlhZzMxOF9pbmZvIGRpYWczMThfaW5mbztcbiBcdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jO1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZGF0LmMgYi9hcmNoL3MzOTAva3ZtL2RhdC5jXG5pbmRleCBlZDQyNTlkMTc2Mjk1Li4zZjJkNmU4OTAyZDc2IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9kYXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9kYXQuY1xuQEAgLTc1NSwxMyAmIzQzOzc1NSwxNSBAQCBpbnQgZGF0X2NvbmRfc2V0X3N0b3JhZ2Vfa2V5KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1tYywgdW5pb24gYXNjZSBhc2NlLCBnZlxuIFx0cmV0dXJuIHJjO1xuIH1cbiBcbi1pbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4pXG4mIzQzO2ludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbiwgdW5pb24gc2tleSAqc2tleSlcbiB7XG4gXHR1bmlvbiBwZ3N0ZSBwZ3N0ZSwgb2xkO1xuIFx0dW5pb24gY3JzdGUgKmNyc3RlcDtcbiBcdHVuaW9uIHB0ZSAqcHRlcDtcbiBcdGludCByYztcbiBcbiYjNDM7XHRza2V5LVx1MDAzZXNrZXkgPSAwO1xuJiM0MztcbiBcdHJjID0gZGF0X2VudHJ5X3dhbGsoTlVMTCwgZ2ZuLCBhc2NlLCBEQVRfV0FMS19BTlksIFRBQkxFX1RZUEVfUEFHRV9UQUJMRSwgXHUwMDI2Y3JzdGVwLCBcdTAwMjZwdGVwKTtcbiBcdGlmIChyYylcbiBcdFx0cmV0dXJuIHJjO1xuQEAgLTc3MSwyMSAmIzQzOzc3MywyMyBAQCBpbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4pXG4gXG4gXHRcdGlmICghY3JzdGUuaC5mYyB8fCAhY3JzdGUucy5mYzEucHIpXG4gXHRcdFx0cmV0dXJuIDA7XG4tXHRcdHJldHVybiBwYWdlX3Jlc2V0X3JlZmVyZW5jZWQobGFyZ2VfY3JzdGVfdG9fcGh5cygqY3JzdGVwLCBnZm4pKTtcbiYjNDM7XHRcdHNrZXktXHUwMDNlc2tleSA9IHBhZ2VfcmVzZXRfcmVmZXJlbmNlZChsYXJnZV9jcnN0ZV90b19waHlzKCpjcnN0ZXAsIGdmbikpIFx1MDAzY1x1MDAzYyAxO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXHRvbGQgPSBwZ3N0ZV9nZXRfbG9jayhwdGVwKTtcbiBcdHBnc3RlID0gb2xkO1xuIFxuIFx0aWYgKCFwdGVwLVx1MDAzZWguaSkge1xuLVx0XHRyYyA9IHBhZ2VfcmVzZXRfcmVmZXJlbmNlZChwdGVfb3JpZ2luKCpwdGVwKSk7XG4tXHRcdHBnc3RlLmhyID0gcmMgXHUwMDNlXHUwMDNlIDE7XG4mIzQzO1x0XHRza2V5LVx1MDAzZXNrZXkgPSBwYWdlX3Jlc2V0X3JlZmVyZW5jZWQocHRlX29yaWdpbigqcHRlcCkpIFx1MDAzY1x1MDAzYyAxO1xuJiM0MztcdFx0cGdzdGUuaHIgPSBza2V5LVx1MDAzZXI7XG4gXHR9XG4tXHRyYyB8PSAocGdzdGUuZ3IgXHUwMDNjXHUwMDNjIDEpIHwgcGdzdGUuZ2M7XG4mIzQzO1x0c2tleS1cdTAwM2VyIHw9IHBnc3RlLmdyO1xuJiM0MztcdHNrZXktXHUwMDNlYyB8PSBwZ3N0ZS5nYztcbiBcdHBnc3RlLmdyID0gMDtcbiBcbiBcdGRhdF91cGRhdGVfcHRlcF9zZChvbGQsIHBnc3RlLCBwdGVwKTtcbiBcdHBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpO1xuLVx0cmV0dXJuIHJjO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgbG9uZyBkYXRfcmVzZXRfc2tleXNfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXG5AQCAtODQ2LDYgJiM0Mzs4NTAsNyBAQCBzdGF0aWMgbG9uZyBfZGF0X3Nsb3RfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbFxuIFx0c3RydWN0IHNsb3RfcHJpdiAqcCA9IHdhbGstXHUwMDNlcHJpdjtcbiBcdHVuaW9uIGNyc3RlIGR1bW15ID0geyAudmFsID0gcC1cdTAwM2V0b2tlbiB9O1xuIFx0dW5pb24gcHRlIG5ld19wdGUsIHB0ZSA9IFJFQURfT05DRSgqcHRlcCk7XG4mIzQzO1x0dW5pb24gcGdzdGUgcGdzdGU7XG4gXG4gXHRuZXdfcHRlID0gX1BURV9UT0soZHVtbXkudG9rLnR5cGUsIGR1bW15LnRvay5wYXIpO1xuIFxuQEAgLTg1Myw3ICYjNDM7ODU4LDExIEBAIHN0YXRpYyBsb25nIF9kYXRfc2xvdF9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsXG4gXHRpZiAocHRlLnZhbCA9PSBuZXdfcHRlLnZhbClcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRkYXRfcHRlcF94Y2hnKHB0ZXAsIG5ld19wdGUsIGdmbiwgd2Fsay1cdTAwM2Vhc2NlLCBmYWxzZSk7XG4mIzQzO1x0cGdzdGUgPSBwZ3N0ZV9nZXRfbG9jayhwdGVwKTtcbiYjNDM7XHRwZ3N0ZSA9IF9fZGF0X3B0ZXBfeGNoZyhwdGVwLCBwZ3N0ZSwgbmV3X3B0ZSwgZ2ZuLCB3YWxrLVx1MDAzZWFzY2UsIGZhbHNlKTtcbiYjNDM7XHRwZ3N0ZS5jbW1hX2QgPSAwO1xuJiM0MztcdHBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2RhdC5oIGIvYXJjaC9zMzkwL2t2bS9kYXQuaFxuaW5kZXggZmFkNjA1MzA1ZTA1Yy4uMTQxZWU3YjlmMDE5MSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vZGF0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vZGF0LmhcbkBAIC01MzcsNyAmIzQzOzUzNyw3IEBAIGludCBkYXRfc2V0X3N0b3JhZ2Vfa2V5KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCB1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmXG4gXHRcdFx0dW5pb24gc2tleSBza2V5LCBib29sIG5xKTtcbiBpbnQgZGF0X2NvbmRfc2V0X3N0b3JhZ2Vfa2V5KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1tYywgdW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4sXG4gXHRcdFx0ICAgICB1bmlvbiBza2V5IHNrZXksIHVuaW9uIHNrZXkgKm9sZGtleSwgYm9vbCBucSwgYm9vbCBtciwgYm9vbCBtYyk7XG4taW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuKTtcbiYjNDM7aW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLCB1bmlvbiBza2V5ICpza2V5KTtcbiBsb25nIGRhdF9yZXNldF9za2V5cyh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IHN0YXJ0KTtcbiBcbiB1bnNpZ25lZCBsb25nIGRhdF9nZXRfcHR2YWwoc3RydWN0IHBhZ2VfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgcHR2YWxfcGFyYW0gcGFyYW0pO1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jIGIvYXJjaC9zMzkwL2t2bS9mYXVsdGluLmNcbmluZGV4IGZlZTgwMDQ3YmQ5NGYuLjNjYzQ1ZjdmNWIyZDcgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9mYXVsdGluLmNcbkBAIC05MSw5ICYjNDM7OTEsOSBAQCBpbnQga3ZtX3MzOTBfZmF1bHRpbl9nZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBndWVzdF9mYVxuIFx0XHQvKiBBY2Nlc3Mgb3V0c2lkZSBtZW1vcnksIGFkZHJlc3NpbmcgZXhjZXB0aW9uLiAqL1xuIFx0XHRpZiAoaXNfbm9zbG90X3BmbihmLVx1MDAzZXBmbikpXG4gXHRcdFx0cmV0dXJuIFBHTV9BRERSRVNTSU5HO1xuLVx0XHQvKiBTaWduYWwgcGVuZGluZzogdHJ5IGFnYWluLiAqL1xuLVx0XHRpZiAoZi1cdTAwM2VwZm4gPT0gS1ZNX1BGTl9FUlJfU0lHUEVORElORylcbi1cdFx0XHRyZXR1cm4gLUVBR0FJTjtcbiYjNDM7XHRcdC8qIEZhdGFsIHNpZ25hbCBwZW5kaW5nOiBiYWlsIG91dC4gKi9cbiYjNDM7XHRcdGlmIChpc19zaWdwZW5kaW5nX3BmbihmLVx1MDAzZXBmbikpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVFI7XG4gXHRcdC8qIENoZWNrIGlmIGl0JiMzOTtzIHJlYWQtb25seSBtZW1vcnk7IGRvbiYjMzk7dCB0cnkgdG8gYWN0dWFsbHkgaGFuZGxlIHRoYXQgY2FzZS4gKi9cbiBcdFx0aWYgKGYtXHUwMDNlcGZuID09IEtWTV9QRk5fRVJSX1JPX0ZBVUxUKVxuIFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1xuaW5kZXggOWUzZTZiMGQ3MmFkNi4uZDAyNzI0YmQxODI5YyAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcbkBAIC01MCw2ICYjNDM7NTAsOCBAQCBzdGF0aWMgaW50IHNjYV9leHRfY2FsbF9wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50ICpzcmNfaWQpXG4gXHRpZiAoIWt2bV9zMzkwX3Rlc3RfY3B1ZmxhZ3ModmNwdSwgQ1BVU1RBVF9FQ0FMTF9QRU5EKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4mIzQzO1x0aWYgKEtWTV9CVUdfT04oa3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKSwgdmNwdS1cdTAwM2Vrdm0pKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRCVUdfT04oIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKTtcbiBcbiBcdGlmIChzcmNfaWQpXG5AQCAtNjYsNiAmIzQzOzY4LDggQEAgc3RhdGljIGludCBzY2FfaW5qZWN0X2V4dF9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNyY19pZClcbiBcdGludCBleHBlY3QsIHJjO1xuIFxuIFx0QlVHX09OKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSk7XG4mIzQzO1x0aWYgKEtWTV9CVUdfT04oa3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKSwgdmNwdS1cdTAwM2Vrdm0pKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRvbGRfdmFsID0gUkVBRF9PTkNFKCpzaWdwX2N0cmwpO1xuIFx0b2xkX3ZhbC5jID0gMDtcbkBAIC04NCwxMCAmIzQzOzg4LDEzIEBAIHN0YXRpYyBpbnQgc2NhX2luamVjdF9leHRfY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzcmNfaWQpXG4gc3RhdGljIHZvaWQgc2NhX2NsZWFyX2V4dF9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRzdHJ1Y3QgZXNjYV9ibG9jayAqc2NhID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5zY2E7XG4tXHR1bmlvbiBlc2NhX3NpZ3BfY3RybCAqc2lncF9jdHJsID0gXHUwMDI2c2NhLVx1MDAzZWNwdVt2Y3B1LVx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcbiYjNDM7XHR1bmlvbiBlc2NhX3NpZ3BfY3RybCAqc2lncF9jdHJsO1xuIFxuLVx0aWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSlcbiYjNDM7XHRpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpIHx8ICF2Y3B1LVx1MDAzZWFyY2guaW5pdGlhbGl6ZWQgfHwga3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKSlcbiBcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHQvKiBJbml0aWFsaXplIGFmdGVyIHRoZSBhYm92ZSBjaGVjaywgdG8gcHJldmVudCBnb2luZyBvdXQgb2YgYm91bmRzICovXG4mIzQzO1x0c2lncF9jdHJsID0gXHUwMDI2c2NhLVx1MDAzZWNwdVt2Y3B1LVx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcbiBcdGt2bV9zMzkwX2NsZWFyX2NwdWZsYWdzKHZjcHUsIENQVVNUQVRfRUNBTExfUEVORCk7XG4gXG4gXHRXUklURV9PTkNFKHNpZ3BfY3RybC1cdTAwM2V2YWx1ZSwgMCk7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG5pbmRleCAxNTBiNWRkMjE3MGUyLi5iMjllNTQ2MGY1ZWZhIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcbkBAIC01NzEsNyAmIzQzOzU3MSw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfa2V5b3Aoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBrdm0gKmt2bSwgaW50IG9wXG4gXHRzd2l0Y2ggKG9wKSB7XG4gXHRjYXNlIEtWTV9TMzkwX0tFWU9QX1NTS0U6XG4gXHRcdHIgPSBkYXRfY29uZF9zZXRfc3RvcmFnZV9rZXkobWMsIGFzY2UsIGdmbiwgc2tleSwgXHUwMDI2c2tleSwgMCwgMCwgMCk7XG4tXHRcdGlmIChyIFx1MDAzZT0gMClcbiYjNDM7XHRcdGlmIChyID09IDAgfHwgciA9PSAxKVxuIFx0XHRcdHJldHVybiBza2V5LnNrZXk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBLVk1fUzM5MF9LRVlPUF9JU0tFOlxuQEAgLTU4MCwxNCAmIzQzOzU4MCwxNCBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX2tleW9wKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3Qga3ZtICprdm0sIGludCBvcFxuIFx0XHRcdHJldHVybiBza2V5LnNrZXk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBLVk1fUzM5MF9LRVlPUF9SUkJFOlxuLVx0XHRyID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQoYXNjZSwgZ2ZuKTtcbi1cdFx0aWYgKHIgXHUwMDNlIDApXG4tXHRcdFx0cmV0dXJuIHIgXHUwMDNjXHUwMDNjIDE7XG4mIzQzO1x0XHRyID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQoYXNjZSwgZ2ZuLCBcdTAwMjZza2V5KTtcbiYjNDM7XHRcdGlmICghcilcbiYjNDM7XHRcdFx0cmV0dXJuIHNrZXkuc2tleTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbi1cdHJldHVybiByO1xuJiM0MztcdHJldHVybiByIFx1MDAzZSAwID8gLUVGQVVMVCA6IHI7XG4gfVxuIFxuIC8qIFNlY3Rpb246IGRldmljZSByZWxhdGVkICovXG5AQCAtMTIxOSw4ICYjNDM7MTIxOSw4IEBAIHN0YXRpYyB2b2lkIGt2bV9zMzkwX3N5bmNfcmVxdWVzdF9icm9hZGNhc3Qoc3RydWN0IGt2bSAqa3ZtLCBpbnQgcmVxKVxuIFxuIC8qXG4gICogTXVzdCBiZSBjYWxsZWQgd2l0aCBrdm0tXHUwMDNlc3JjdSBoZWxkIHRvIGF2b2lkIHJhY2VzIG9uIG1lbXNsb3RzLCBhbmQgd2l0aFxuLSAqIGt2bS1cdTAwM2VzbG90c19sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLCBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbigpLFxuLSAqIGFuZCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKCkuXG4mIzQzOyAqIGt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsXG4mIzQzOyAqIGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKCksIGFuZCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKCkuXG4gICovXG4gc3RhdGljIGludCBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKVxuIHtcbkBAIC0xMjY1LDcgJiM0MzsxMjY1LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKVxuIH1cbiBcbiAvKlxuLSAqIE11c3QgYmUgY2FsbGVkIHdpdGgga3ZtLVx1MDAzZXNsb3RzX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsXG4mIzQzOyAqIE11c3QgYmUgY2FsbGVkIHdpdGgga3ZtLVx1MDAzZXNsb3RzX2FyY2hfbG9jayB0byBhdm9pZCByYWNlcyB3aXRoIG91cnNlbHZlcyxcbiAgKiBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oKSBhbmQga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cygpLlxuICAqL1xuIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKVxuQEAgLTEzMDAsNyAmIzQzOzEzMDAsOSBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtLFxuIHtcbiBcdGludCByZXMgPSAtRU5YSU87XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiYjNDM7XHRndWFyZChzcmN1KShcdTAwMjZrdm0tXHUwMDNlc3JjdSk7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNmt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2spO1xuJiM0MztcbiBcdHN3aXRjaCAoYXR0ci1cdTAwM2VhdHRyKSB7XG4gXHRjYXNlIEtWTV9TMzkwX1ZNX01JR1JBVElPTl9TVEFSVDpcbiBcdFx0cmVzID0ga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKGt2bSk7XG5AQCAtMTMxMSw3ICYjNDM7MTMxMyw2IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRkZWZhdWx0OlxuIFx0XHRicmVhaztcbiBcdH1cbi1cdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4gXG4gXHRyZXR1cm4gcmVzO1xuIH1cbkBAIC0yMjE0LDcgJiM0MzsyMjE1LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9nZXRfc2tleXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfc2tleXMgKmFyZ3MpXG4gXHR9XG4gXG4gXHRrdmZyZWUoa2V5cyk7XG4tXHRyZXR1cm4gcjtcbiYjNDM7XHRyZXR1cm4gciBcdTAwM2M9IDAgPyByIDogLUVGQVVMVDtcbiB9XG4gXG4gc3RhdGljIGludCBrdm1fczM5MF9zZXRfc2tleXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfc2tleXMgKmFyZ3MpXG5AQCAtMjI3Niw3ICYjNDM7MjI3Nyw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X3NrZXlzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX3NrZXlzICphcmdzKVxuIFx0a3ZtX3MzOTBfZnJlZV9tbXVfY2FjaGUobWMpO1xuIG91dDpcbiBcdGt2ZnJlZShrZXlzKTtcbi1cdHJldHVybiByO1xuJiM0MztcdHJldHVybiByIFx1MDAzYz0gMCA/IHIgOiAtRUZBVUxUO1xuIH1cbiBcbiAvKlxuQEAgLTIzODYsNyAmIzQzOzIzODcsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3NldF9jbW1hX2JpdHMoc3RydWN0IGt2bSAqa3ZtLFxuIFxuIFx0c2V0X2JpdChHTUFQX0ZMQUdfVVNFU19DTU0sIFx1MDAyNmt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlZmxhZ3MpO1xuIFxuLVx0cmV0dXJuIHI7XG4mIzQzO1x0cmV0dXJuIHIgXHUwMDNjPSAwID8gciA6IC1FRkFVTFQ7XG4gfVxuIFxuIC8qKlxuQEAgLTI5OTgsOSAmIzQzOzI5OTksOCBAQCBpbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gXHRcdHIgPSAtRUZBVUxUO1xuIFx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2YXJncywgYXJncCwgc2l6ZW9mKGFyZ3MpKSlcbiBcdFx0XHRicmVhaztcbi1cdFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4tXHRcdHIgPSBrdm1fczM5MF9nZXRfY21tYV9iaXRzKGt2bSwgXHUwMDI2YXJncyk7XG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4mIzQzO1x0XHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNmt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2spXG4mIzQzO1x0XHRcdHIgPSBrdm1fczM5MF9nZXRfY21tYV9iaXRzKGt2bSwgXHUwMDI2YXJncyk7XG4gXHRcdGlmICghcikge1xuIFx0XHRcdHIgPSBjb3B5X3RvX3VzZXIoYXJncCwgXHUwMDI2YXJncywgc2l6ZW9mKGFyZ3MpKTtcbiBcdFx0XHRpZiAocilcbkBAIC0zMDE0LDkgJiM0MzszMDE0LDkgQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0XHRyID0gLUVGQVVMVDtcbiBcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmFyZ3MsIGFyZ3AsIHNpemVvZihhcmdzKSkpXG4gXHRcdFx0YnJlYWs7XG4tXHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuJiM0MztcdFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcbiBcdFx0ciA9IGt2bV9zMzkwX3NldF9jbW1hX2JpdHMoa3ZtLCBcdTAwMjZhcmdzKTtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXHRjYXNlIEtWTV9TMzkwX1BWX0NPTU1BTkQ6IHtcbkBAIC0zNDYxLDcgJiM0MzszNDYxLDcgQEAgc3RhdGljIHZvaWQgc2NhX2RlbF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRzdHJ1Y3QgZXNjYV9ibG9jayAqc2NhID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5zY2E7XG4gXG4tXHRpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKVxuJiM0MztcdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkgfHwgIXZjcHUtXHUwMDNlYXJjaC5pbml0aWFsaXplZClcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Y2xlYXJfYml0X2ludih2Y3B1LVx1MDAzZXZjcHVfaWQsICh1bnNpZ25lZCBsb25nICopc2NhLVx1MDAzZW1jbik7XG5AQCAtMzQ4MSw4ICYjNDM7MzQ4MSw4IEBAIHN0YXRpYyB2b2lkIHNjYV9hZGRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKVxuIFx0XHRyZXR1cm47XG4gXG4mIzQzO1x0V1JJVEVfT05DRShzY2EtXHUwMDNlY3B1W3ZjcHUtXHUwMDNldmNwdV9pZF0uc2RhLCB2aXJ0X3RvX3BoeXModmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jaykpO1xuIFx0c2V0X2JpdF9pbnYodmNwdS1cdTAwM2V2Y3B1X2lkLCAodW5zaWduZWQgbG9uZyAqKXNjYS1cdTAwM2VtY24pO1xuLVx0c2NhLVx1MDAzZWNwdVt2Y3B1LVx1MDAzZXZjcHVfaWRdLnNkYSA9IHZpcnRfdG9fcGh5cyh2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrKTtcbiB9XG4gXG4gc3RhdGljIGludCBzY2FfY2FuX2FkZF92Y3B1KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkKVxuQEAgLTM2MTMsNiAmIzQzOzM2MTMsOSBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAodGVzdF9rdm1fZmFjaWxpdHkodmNwdS1cdTAwM2Vrdm0sIDc0KSB8fCB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnVzZXJfaW5zdHIwIHx8XG4gXHQgICAgdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC51c2VyX29wZXJleGVjKVxuIFx0XHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWljdGwgfD0gSUNUTF9PUEVSRVhDO1xuJiM0MztcbiYjNDM7XHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bigpIGFuZCBrdm1fYXJjaF92Y3B1X2lvY3RsKCkgKi9cbiYjNDM7XHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaW5pdGlhbGl6ZWQsIHRydWUpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBrdm1faGFzX3Bja21vX3N1YmZ1bmMoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIG5yKVxuQEAgLTM2NzQsNyAmIzQzOzM2NzcsOCBAQCBzdGF0aWMgdm9pZCBrdm1fczM5MF92Y3B1X2NyeXB0b19zZXR1cChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gdm9pZCBrdm1fczM5MF92Y3B1X3Vuc2V0dXBfY21tYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydCh2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWNicmxvKSk7XG4mIzQzO1x0aWYgKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlY2JybG8pXG4mIzQzO1x0XHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcGh5c190b192aXJ0KHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlY2JybG8pKTtcbiBcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlY2JybG8gPSAwO1xuIH1cbiBcbkBAIC0zNzkyLDIxICYjNDM7Mzc5NiwyMSBAQCBpbnQga3ZtX2FyY2hfdmNwdV9wcmVjcmVhdGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO0RFRklORV9GUkVFKHNpZV9wYWdlLCBzdHJ1Y3Qgc2llX3BhZ2UgKiwgaWYgKF9UKSBmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpKF9UKSkpXG4mIzQzO1xuIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0c3RydWN0IHNpZV9wYWdlICpzaWVfcGFnZTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYyBfX2ZyZWUoa3ZtX3MzOTBfbW11X2NhY2hlKSA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IHNpZV9wYWdlICpzaWVfcGFnZSBfX2ZyZWUoc2llX3BhZ2UpID0gTlVMTDtcbiBcdGludCByYztcbiBcbiBcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHNpZV9wYWdlKSAhPSA0MDk2KTtcbi1cdHZjcHUtXHUwMDNlYXJjaC5tYyA9IGt2bV9zMzkwX25ld19tbXVfY2FjaGUoKTtcbi1cdGlmICghdmNwdS1cdTAwM2VhcmNoLm1jKVxuJiM0MztcdG1jID0ga3ZtX3MzOTBfbmV3X21tdV9jYWNoZSgpO1xuJiM0MztcdGlmICghbWMpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0c2llX3BhZ2UgPSAoc3RydWN0IHNpZV9wYWdlICopIGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLVx0aWYgKCFzaWVfcGFnZSkge1xuLVx0XHRrdm1fczM5MF9mcmVlX21tdV9jYWNoZSh2Y3B1LVx1MDAzZWFyY2gubWMpO1xuLVx0XHR2Y3B1LVx1MDAzZWFyY2gubWMgPSBOVUxMO1xuJiM0MztcdGlmICghc2llX3BhZ2UpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuLVx0fVxuIFxuIFx0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jayA9IFx1MDAyNnNpZV9wYWdlLVx1MDAzZXNpZV9ibG9jaztcbiBcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlaXRkYmEgPSB2aXJ0X3RvX3BoeXMoXHUwMDI2c2llX3BhZ2UtXHUwMDNlaXRkYik7XG5AQCAtMzg0OCwxMCAmIzQzOzM4NTIsOSBAQCBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2Vrdm1fdmFsaWRfcmVncyB8PSBLVk1fU1lOQ19GUFJTO1xuIFxuIFx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpIHtcbi1cdFx0cmMgPSAtRU5PTUVNO1xuIFx0XHR2Y3B1LVx1MDAzZWFyY2guZ21hcCA9IGdtYXBfbmV3X2NoaWxkKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guZ21hcCwgLTFVTCk7XG4gXHRcdGlmICghdmNwdS1cdTAwM2VhcmNoLmdtYXApXG4tXHRcdFx0Z290byBvdXRfZnJlZV9zaWVfYmxvY2s7XG4mIzQzO1x0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFxuIFx0Vk1fRVZFTlQodmNwdS1cdTAwM2Vrdm0sIDMsIFwmIzM0O2NyZWF0ZSBjcHUgJWQgYXQgMHglcCwgc2llIGJsb2NrIGF0IDB4JXBcJiMzNDssXG5AQCAtMzg1OSwyMCAmIzQzOzM4NjIsMTkgQEAgaW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHRyYWNlX2t2bV9zMzkwX2NyZWF0ZV92Y3B1KHZjcHUtXHUwMDNldmNwdV9pZCwgdmNwdSwgdmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jayk7XG4gXG4gXHRyYyA9IGt2bV9zMzkwX3ZjcHVfc2V0dXAodmNwdSk7XG4tXHRpZiAocmMpXG4tXHRcdGdvdG8gb3V0X3Vjb250cm9sX3VuaW5pdDtcbiYjNDM7XHRpZiAocmMpIHtcbiYjNDM7XHRcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKSB7XG4mIzQzO1x0XHRcdHNjb3BlZF9ndWFyZChzcGlubG9jaywgXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWNoaWxkcmVuX2xvY2spXG4mIzQzO1x0XHRcdFx0Z21hcF9yZW1vdmVfY2hpbGQodmNwdS1cdTAwM2VhcmNoLmdtYXApO1xuJiM0MztcdFx0XHR2Y3B1LVx1MDAzZWFyY2guZ21hcCA9IGdtYXBfcHV0KHZjcHUtXHUwMDNlYXJjaC5nbWFwKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XHR9XG4gXG4mIzQzO1x0dmNwdS1cdTAwM2VhcmNoLm1jID0gbm9fZnJlZV9wdHIobWMpO1xuJiM0MztcdHNpZV9wYWdlID0gTlVMTDtcbiBcdGt2bV9zMzkwX3VwZGF0ZV90b3BvbG9neV9jaGFuZ2VfcmVwb3J0KHZjcHUtXHUwMDNla3ZtLCAxKTtcbiBcdHJldHVybiAwO1xuLVxuLW91dF91Y29udHJvbF91bmluaXQ6XG4tXHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKSkge1xuLVx0XHRnbWFwX3JlbW92ZV9jaGlsZCh2Y3B1LVx1MDAzZWFyY2guZ21hcCk7XG4tXHRcdHZjcHUtXHUwMDNlYXJjaC5nbWFwID0gZ21hcF9wdXQodmNwdS1cdTAwM2VhcmNoLmdtYXApO1xuLVx0fVxuLW91dF9mcmVlX3NpZV9ibG9jazpcbi1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykodmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jaykpO1xuLVx0cmV0dXJuIHJjO1xuIH1cbiBcbiBpbnQga3ZtX2FyY2hfdmNwdV9ydW5uYWJsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5AQCAtNTAzOSw2ICYjNDM7NTA0MSwxMCBAQCBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICAgIGt2bV9ydW4tXHUwMDNla3ZtX2RpcnR5X3JlZ3MgXHUwMDI2IH5LVk1fU1lOQ19TMzkwX1ZBTElEX0ZJRUxEUylcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4mIzQzO1x0LyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZSgpICovXG4mIzQzO1x0aWYgKCFzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pbml0aWFsaXplZCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHR2Y3B1X2xvYWQodmNwdSk7XG4gXG4gXHRpZiAoZ3Vlc3RkYmdfZXhpdF9wZW5kaW5nKHZjcHUpKSB7XG5AQCAtNTUyMyw2ICYjNDM7NTUyOSwxMCBAQCBsb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4gXHRsb25nIHI7XG4gXHR1MTYgcmMsIHJyYztcbiBcbiYjNDM7XHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4ga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKCkgKi9cbiYjNDM7XHRpZiAoIXNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmluaXRpYWxpemVkKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiBcdHZjcHVfbG9hZCh2Y3B1KTtcbiBcbiBcdHN3aXRjaCAoaW9jdGwpIHtcbkBAIC01Nzk0LDI0ICYjNDM7NTgwNCw0NCBAQCBpbnQga3ZtX2FyY2hfcHJlcGFyZV9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGxvbmcgY21tYV9kX2NvdW50X3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKVxuJiM0Mzt7XG4mIzQzO1x0dW5pb24gcGdzdGUgcGdzdGU7XG4mIzQzO1xuJiM0MztcdHBnc3RlID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7XG4mIzQzO1x0aWYgKHBnc3RlLmNtbWFfZCkge1xuJiM0MztcdFx0cGdzdGUuY21tYV9kID0gMDtcbiYjNDM7XHRcdGF0b21pYzY0X2RlYyh3YWxrLVx1MDAzZXByaXYpO1xuJiM0MztcdH1cbiYjNDM7XHRwZ3N0ZV9zZXRfdW5sb2NrKHB0ZXAsIHBnc3RlKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0XHRcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm9sZCxcbiBcdFx0XHRcdGNvbnN0IHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm5ldyxcbiBcdFx0XHRcdGVudW0ga3ZtX21yX2NoYW5nZSBjaGFuZ2UpXG4ge1xuLVx0c3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMgPSBOVUxMO1xuLVx0aW50IHJjID0gMDtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgZGF0X3dhbGtfb3BzIG9wcyA9IHsgLnB0ZV9lbnRyeSA9IGNtbWFfZF9jb3VudF9wdGUsIH07XG4mIzQzO1x0c3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMgX19mcmVlKGt2bV9zMzkwX21tdV9jYWNoZSkgPSBOVUxMO1xuJiM0MztcdGludCByYyA9IC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcbiBcbiBcdGlmIChjaGFuZ2UgPT0gS1ZNX01SX0ZMQUdTX09OTFkpXG4gXHRcdHJldHVybjtcbiBcbiBcdG1jID0ga3ZtX3MzOTBfbmV3X21tdV9jYWNoZSgpO1xuLVx0aWYgKCFtYykge1xuLVx0XHRyYyA9IC1FTk9NRU07XG4mIzQzO1x0aWYgKCFtYylcbiBcdFx0Z290byBvdXQ7XG4tXHR9XG4tXG4mIzQzO3JldHJ5OlxuIFx0c2NvcGVkX2d1YXJkKHdyaXRlX2xvY2ssIFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jaykge1xuJiM0MztcdFx0aWYgKGt2bS1cdTAwM2VhcmNoLm1pZ3JhdGlvbl9tb2RlIFx1MDAyNlx1MDAyNiBrdm0tXHUwMDNlYXJjaC51c2VfY21tYSBcdTAwMjZcdTAwMjYgb2xkKSB7XG4mIzQzO1x0XHRcdF9kYXRfd2Fsa19nZm5fcmFuZ2Uob2xkLVx1MDAzZWJhc2VfZ2ZuLCBvbGQtXHUwMDNlYmFzZV9nZm4gJiM0Mzsgb2xkLVx1MDAzZW5wYWdlcyxcbiYjNDM7XHRcdFx0XHRcdCAgICBrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWFzY2UsIFx1MDAyNm9wcywgREFUX1dBTEtfSUdOX0hPTEVTLFxuJiM0MztcdFx0XHRcdFx0ICAgIFx1MDAyNmt2bS1cdTAwM2VhcmNoLmNtbWFfZGlydHlfcGFnZXMpO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0c3dpdGNoIChjaGFuZ2UpIHtcbiBcdFx0Y2FzZSBLVk1fTVJfREVMRVRFOlxuIFx0XHRcdHJjID0gZGF0X2RlbGV0ZV9zbG90KG1jLCBrdm0tXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWFzY2UsIG9sZC1cdTAwM2ViYXNlX2dmbiwgb2xkLVx1MDAzZW5wYWdlcyk7XG5AQCAtNTgyNywxMyAmIzQzOzU4NTcsMTggQEAgdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdGNhc2UgS1ZNX01SX0ZMQUdTX09OTFk6XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4mIzQzO1x0XHRcdHJjID0gMDtcbiBcdFx0XHRXQVJOKDEsIFwmIzM0O1Vua25vd24gS1ZNIE1SIENIQU5HRTogJWRcXG5cJiMzNDssIGNoYW5nZSk7XG4gXHRcdH1cbiBcdH1cbiYjNDM7XHRpZiAocmMgPT0gLUVOT01FTSkge1xuJiM0MztcdFx0cmMgPSBrdm1fczM5MF9tbXVfY2FjaGVfdG9wdXAobWMpO1xuJiM0MztcdFx0aWYgKCFyYylcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XHR9XG4gb3V0OlxuLVx0aWYgKHJjKVxuJiM0MztcdGlmIChLVk1fQlVHX09OKHJjLCBrdm0pKVxuIFx0XHRwcl93YXJuKFwmIzM0O2ZhaWxlZCB0byBjb21taXQgbWVtb3J5IHJlZ2lvblxcblwmIzM0Oyk7XG4tXHRrdm1fczM5MF9mcmVlX21tdV9jYWNoZShtYyk7XG4gXHRyZXR1cm47XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHJpdi5jIGIvYXJjaC9zMzkwL2t2bS9wcml2LmNcbmluZGV4IGFkMGRkYzQzM2E3M2MuLmIxYmEyNGMzNDZlZmEgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL3ByaXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9wcml2LmNcbkBAIC0yODksNiAmIzQzOzI4OSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2lza2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHN0YXRpYyBpbnQgaGFuZGxlX3JyYmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZ2FkZHI7XG4mIzQzO1x0dW5pb24gc2tleSBza2V5O1xuIFx0aW50IHJlZzEsIHJlZzI7XG4gXHRpbnQgcmM7XG4gXG5AQCAtMzA3LDEyICYjNDM7MzA4LDEyIEBAIHN0YXRpYyBpbnQgaGFuZGxlX3JyYmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0Z2FkZHIgPSBrdm1fczM5MF9sb2dpY2FsX3RvX2VmZmVjdGl2ZSh2Y3B1LCBnYWRkcik7XG4gXHRnYWRkciA9IGt2bV9zMzkwX3JlYWxfdG9fYWJzKHZjcHUsIGdhZGRyKTtcbiBcdHNjb3BlZF9ndWFyZChyZWFkX2xvY2ssIFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZW1tdV9sb2NrKVxuLVx0XHRyYyA9IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHZjcHUtXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWFzY2UsIGdwYV90b19nZm4oZ2FkZHIpKTtcbiYjNDM7XHRcdHJjID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodmNwdS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlYXNjZSwgZ3BhX3RvX2dmbihnYWRkciksIFx1MDAyNnNrZXkpO1xuIFx0aWYgKHJjIFx1MDAzZSAwKVxuIFx0XHRyZXR1cm4ga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHZjcHUsIHJjKTtcbiBcdGlmIChyYyBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJjO1xuLVx0a3ZtX3MzOTBfc2V0X3Bzd19jYyh2Y3B1LCByYyk7XG4mIzQzO1x0a3ZtX3MzOTBfc2V0X3Bzd19jYyh2Y3B1LCAoc2tleS5za2V5IFx1MDAzZVx1MDAzZSAxKSBcdTAwMjYgMyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTI2MCw4ICYjNDM7MTI2MSw5IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2Vzc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHQvKiBSZXRyeSB0aGUgRVNTQSBpbnN0cnVjdGlvbiAqL1xuIFx0XHRrdm1fczM5MF9yZXRyeV9pbnN0cih2Y3B1KTtcbiBcdH0gZWxzZSB7XG4tXHRcdHNjb3BlZF9ndWFyZChyZWFkX2xvY2ssIFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZW1tdV9sb2NrKVxuLVx0XHRcdGkgPSBfX2RvX2Vzc2EodmNwdSwgb3JjKTtcbiYjNDM7XHRcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrKVxuJiM0MztcdFx0XHRzY29wZWRfZ3VhcmQocmVhZF9sb2NrLCBcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VtbXVfbG9jaylcbiYjNDM7XHRcdFx0XHRpID0gX19kb19lc3NhKHZjcHUsIG9yYyk7XG4gXHRcdGlmIChpIFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiBpO1xuIFx0XHQvKiBBY2NvdW50IGZvciB0aGUgcG9zc2libGUgZXh0cmEgY2JybCBlbnRyeSAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHYuYyBiL2FyY2gvczM5MC9rdm0vcHYuY1xuaW5kZXggMWJlYWNjODQxY2E4NS4uYjAyZTAxNTlkM2NkMiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vcHYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9wdi5jXG5AQCAtMjQ0LDYgJiM0MzsyNDQsMjQgQEAgc3RhdGljIHZvaWQga3ZtX3MzOTBfY2xlYXJfcHZfc3RhdGUoc3RydWN0IGt2bSAqa3ZtKVxuIFx0a3ZtLVx1MDAzZWFyY2gucHYuc3Rvcl92YXIgPSBOVUxMO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQga3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGZyZWVfc3Rvcl9iYXNlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGZyZWVfc3Rvcl9iYXNlKVxuJiM0MztcdFx0ZnJlZV9wYWdlcyh2Y3B1LVx1MDAzZWFyY2gucHYuc3Rvcl9iYXNlLCBnZXRfb3JkZXIodXZfaW5mby5ndWVzdF9jcHVfc3Rvcl9sZW4pKTtcbiYjNDM7XHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2lkYV9hZGRyKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2spKTtcbiYjNDM7XHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZXB2X2hhbmRsZV9jcHUgPSAwO1xuJiM0MztcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlcHZfaGFuZGxlX2NvbmZpZyA9IDA7XG4mIzQzO1x0bWVtc2V0KFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5wdiwgMCwgc2l6ZW9mKHZjcHUtXHUwMDNlYXJjaC5wdikpO1xuJiM0MztcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlc2RmID0gMDtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBzaWRhZCBmaWVsZCAoZm9yIHNkZiA9PSAyKSBpcyBub3cgdGhlIGdiZWEgZmllbGQgKGZvciBzZGYgPT0gMCkuXG4mIzQzO1x0ICogVXNlIHRoZSByZXNldCB2YWx1ZSBvZiBnYmVhIHRvIGF2b2lkIGxlYWtpbmcgdGhlIGtlcm5lbCBwb2ludGVyIG9mXG4mIzQzO1x0ICogdGhlIGp1c3QgZnJlZWQgc2lkYS5cbiYjNDM7XHQgKi9cbiYjNDM7XHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWdiZWEgPSAxO1xuJiM0MztcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9UTEJfRkxVU0gsIHZjcHUpO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBrdm1fczM5MF9wdl9kZXN0cm95X2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKVxuIHtcbiBcdGludCBjYztcbkBAIC0yNTgsMjQgJiM0MzsyNzYsOSBAQCBpbnQga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYylcbiBcdFdBUk5fT05DRShjYywgXCYjMzQ7cHJvdHZpcnQgZGVzdHJveSBjcHUgZmFpbGVkIHJjICV4IHJyYyAleFwmIzM0OywgKnJjLCAqcnJjKTtcbiBcbiBcdC8qIEludGVuZGVkIG1lbW9yeSBsZWFrIGZvciBzb21ldGhpbmcgdGhhdCBzaG91bGQgbmV2ZXIgaGFwcGVuLiAqL1xuLVx0aWYgKCFjYylcbi1cdFx0ZnJlZV9wYWdlcyh2Y3B1LVx1MDAzZWFyY2gucHYuc3Rvcl9iYXNlLFxuLVx0XHRcdCAgIGdldF9vcmRlcih1dl9pbmZvLmd1ZXN0X2NwdV9zdG9yX2xlbikpO1xuLVxuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNpZGFfYWRkcih2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrKSk7XG4tXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZXB2X2hhbmRsZV9jcHUgPSAwO1xuLVx0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2Vwdl9oYW5kbGVfY29uZmlnID0gMDtcbi1cdG1lbXNldChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gucHYsIDAsIHNpemVvZih2Y3B1LVx1MDAzZWFyY2gucHYpKTtcbi1cdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlc2RmID0gMDtcbi1cdC8qXG4tXHQgKiBUaGUgc2lkYWQgZmllbGQgKGZvciBzZGYgPT0gMikgaXMgbm93IHRoZSBnYmVhIGZpZWxkIChmb3Igc2RmID09IDApLlxuLVx0ICogVXNlIHRoZSByZXNldCB2YWx1ZSBvZiBnYmVhIHRvIGF2b2lkIGxlYWtpbmcgdGhlIGtlcm5lbCBwb2ludGVyIG9mXG4tXHQgKiB0aGUganVzdCBmcmVlZCBzaWRhLlxuLVx0ICovXG4tXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWdiZWEgPSAxO1xuLVx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1RMQl9GTFVTSCwgdmNwdSk7XG4mIzQzO1x0a3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUodmNwdSwgIWNjKTtcbiBcbi1cdHJldHVybiBjYyA/IEVJTyA6IDA7XG4mIzQzO1x0cmV0dXJuIGNjID8gLUVJTyA6IDA7XG4gfVxuIFxuIGludCBrdm1fczM5MF9wdl9jcmVhdGVfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXG5AQCAtMzE5LDkgJiM0MzszMjIsNyBAQCBpbnQga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKVxuIFx0XHQgICAgIHV2Y2IuaGVhZGVyLnJyYyk7XG4gXG4gXHRpZiAoY2MpIHtcbi1cdFx0dTE2IGR1bW15O1xuLVxuLVx0XHRrdm1fczM5MF9wdl9kZXN0cm95X2NwdSh2Y3B1LCBcdTAwMjZkdW1teSwgXHUwMDI2ZHVtbXkpO1xuJiM0MztcdFx0a3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUodmNwdSwgdHJ1ZSk7XG4gXHRcdHJldHVybiAtRUlPO1xuIFx0fVxuIFxuQEAgLTgwOSw3ICYjNDM7ODEwLDcgQEAgc3RhdGljIGludCB1bnBhY2tfb25lKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1NjQgdHdlYWssXG4gXHRcdFx0cmV0dXJuIC1FQUdBSU47XG4gXHR9XG4gXG4tXHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVBR0FJTilcbiYjNDM7XHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVBR0FJTiBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FSU5UUilcbiBcdFx0S1ZNX1VWX0VWRU5UKGt2bSwgMywgXCYjMzQ7UFJPVFZJUlQgVk0gVU5QQUNLOiBmYWlsZWQgYWRkciAlbGx4IHdpdGggcmMgJXggcnJjICV4XCYjMzQ7LFxuIFx0XHRcdCAgICAgdXZjYi5nYWRkciwgKnJjLCAqcnJjKTtcbiBcdHJldHVybiByZXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfY3JlYXRlJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3B2X2NyZWF0ZV9jcHUmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfcHZfZGVzdHJveV9jcHUmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfZmF1bHRpbl9nZm4mIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfaW5qZWN0X3ZjcHUmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfaGFuZGxlX2IyJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2hhbmRsZV9iOSYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF92bV9pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBzMzkwIEtWTSBpbXBsZW1lbnRhdGlvbiwgaW5jbHVkaW5nIGZpeGluZyBtZW1vcnkgbGVha3MgZHVyaW5nIHZDUFUgY3JlYXRpb24vZGVzdHJ1Y3Rpb24sIG1vZGlmeWluZyByZWZlcmVuY2UgYml0IHJlc2V0dGluZyBmb3Igc3RvcmFnZSBrZXlzLCBhZGp1c3Rpbmcgc2lnbmFsIGhhbmRsaW5nIGR1cmluZyBwYWdlIGZhdWx0cywgYW5kIGltcHJvdmluZyBsb2NraW5nIGR1cmluZyBtZW1vcnkgcmVnaW9uIGNvbW1pdHMgYW5kIG1pZ3JhdGlvbi4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIHZpcnR1YWxpemF0aW9uIGZlYXR1cmVzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGZiZjVjZDViOWEyNDAzNTk3NTY4YzhkZWZiYWUyOWU3ODdmMjQ1ODgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAzMSAwMDowNjowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggZWFhMzRjNWJkM2MxMS4uZWRmNzViNmFkMjBjZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTQ0MCw2ICYjNDM7NDQwLDcgQEAgc3RydWN0IGt2bV92Y3B1X2FyY2ggewogCWJvb2wgc2tleV9lbmFibGVkOwogCS8qIEluZGljYXRvciBpZiB0aGUgYWNjZXNzIHJlZ2lzdGVycyBoYXZlIGJlZW4gbG9hZGVkIGZyb20gZ3Vlc3QgKi8KIAlib29sIGFjcnNfbG9hZGVkOwomIzQzOwlib29sIGluaXRpYWxpemVkOwogCXN0cnVjdCBrdm1fczM5MF9wdl92Y3B1IHB2OwogCXVuaW9uIGRpYWczMThfaW5mbyBkaWFnMzE4X2luZm87CiAJc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWM7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2RhdC5jIGIvYXJjaC9zMzkwL2t2bS9kYXQuYwppbmRleCBlZDQyNTlkMTc2Mjk1Li4zZjJkNmU4OTAyZDc2IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2RhdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vZGF0LmMKQEAgLTc1NSwxMyAmIzQzOzc1NSwxNSBAQCBpbnQgZGF0X2NvbmRfc2V0X3N0b3JhZ2Vfa2V5KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1tYywgdW5pb24gYXNjZSBhc2NlLCBnZgogCXJldHVybiByYzsKIH0KIAotaW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuKQomIzQzO2ludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbiwgdW5pb24gc2tleSAqc2tleSkKIHsKIAl1bmlvbiBwZ3N0ZSBwZ3N0ZSwgb2xkOwogCXVuaW9uIGNyc3RlICpjcnN0ZXA7CiAJdW5pb24gcHRlICpwdGVwOwogCWludCByYzsKIAomIzQzOwlza2V5LSZndDtza2V5ID0gMDsKJiM0MzsKIAlyYyA9IGRhdF9lbnRyeV93YWxrKE5VTEwsIGdmbiwgYXNjZSwgREFUX1dBTEtfQU5ZLCBUQUJMRV9UWVBFX1BBR0VfVEFCTEUsICZhbXA7Y3JzdGVwLCAmYW1wO3B0ZXApOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwpAQCAtNzcxLDIxICYjNDM7NzczLDIzIEBAIGludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbikKIAogCQlpZiAoIWNyc3RlLmguZmMgfHwgIWNyc3RlLnMuZmMxLnByKQogCQkJcmV0dXJuIDA7Ci0JCXJldHVybiBwYWdlX3Jlc2V0X3JlZmVyZW5jZWQobGFyZ2VfY3JzdGVfdG9fcGh5cygqY3JzdGVwLCBnZm4pKTsKJiM0MzsJCXNrZXktJmd0O3NrZXkgPSBwYWdlX3Jlc2V0X3JlZmVyZW5jZWQobGFyZ2VfY3JzdGVfdG9fcGh5cygqY3JzdGVwLCBnZm4pKSAmbHQ7Jmx0OyAxOwomIzQzOwkJcmV0dXJuIDA7CiAJfQogCW9sZCA9IHBnc3RlX2dldF9sb2NrKHB0ZXApOwogCXBnc3RlID0gb2xkOwogCiAJaWYgKCFwdGVwLSZndDtoLmkpIHsKLQkJcmMgPSBwYWdlX3Jlc2V0X3JlZmVyZW5jZWQocHRlX29yaWdpbigqcHRlcCkpOwotCQlwZ3N0ZS5ociA9IHJjICZndDsmZ3Q7IDE7CiYjNDM7CQlza2V5LSZndDtza2V5ID0gcGFnZV9yZXNldF9yZWZlcmVuY2VkKHB0ZV9vcmlnaW4oKnB0ZXApKSAmbHQ7Jmx0OyAxOwomIzQzOwkJcGdzdGUuaHIgPSBza2V5LSZndDtyOwogCX0KLQlyYyB8PSAocGdzdGUuZ3IgJmx0OyZsdDsgMSkgfCBwZ3N0ZS5nYzsKJiM0MzsJc2tleS0mZ3Q7ciB8PSBwZ3N0ZS5ncjsKJiM0MzsJc2tleS0mZ3Q7YyB8PSBwZ3N0ZS5nYzsKIAlwZ3N0ZS5nciA9IDA7CiAKIAlkYXRfdXBkYXRlX3B0ZXBfc2Qob2xkLCBwZ3N0ZSwgcHRlcCk7CiAJcGdzdGVfc2V0X3VubG9jayhwdGVwLCBwZ3N0ZSk7Ci0JcmV0dXJuIHJjOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGxvbmcgZGF0X3Jlc2V0X3NrZXlzX3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxrICp3YWxrKQpAQCAtODQ2LDYgJiM0Mzs4NTAsNyBAQCBzdGF0aWMgbG9uZyBfZGF0X3Nsb3RfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbAogCXN0cnVjdCBzbG90X3ByaXYgKnAgPSB3YWxrLSZndDtwcml2OwogCXVuaW9uIGNyc3RlIGR1bW15ID0geyAudmFsID0gcC0mZ3Q7dG9rZW4gfTsKIAl1bmlvbiBwdGUgbmV3X3B0ZSwgcHRlID0gUkVBRF9PTkNFKCpwdGVwKTsKJiM0MzsJdW5pb24gcGdzdGUgcGdzdGU7CiAKIAluZXdfcHRlID0gX1BURV9UT0soZHVtbXkudG9rLnR5cGUsIGR1bW15LnRvay5wYXIpOwogCkBAIC04NTMsNyAmIzQzOzg1OCwxMSBAQCBzdGF0aWMgbG9uZyBfZGF0X3Nsb3RfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbAogCWlmIChwdGUudmFsID09IG5ld19wdGUudmFsKQogCQlyZXR1cm4gMDsKIAotCWRhdF9wdGVwX3hjaGcocHRlcCwgbmV3X3B0ZSwgZ2ZuLCB3YWxrLSZndDthc2NlLCBmYWxzZSk7CiYjNDM7CXBnc3RlID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7CiYjNDM7CXBnc3RlID0gX19kYXRfcHRlcF94Y2hnKHB0ZXAsIHBnc3RlLCBuZXdfcHRlLCBnZm4sIHdhbGstJmd0O2FzY2UsIGZhbHNlKTsKJiM0MzsJcGdzdGUuY21tYV9kID0gMDsKJiM0MzsJcGdzdGVfc2V0X3VubG9jayhwdGVwLCBwZ3N0ZSk7CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZGF0LmggYi9hcmNoL3MzOTAva3ZtL2RhdC5oCmluZGV4IGZhZDYwNTMwNWUwNWMuLjE0MWVlN2I5ZjAxOTEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vZGF0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9kYXQuaApAQCAtNTM3LDcgJiM0Mzs1MzcsNyBAQCBpbnQgZGF0X3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgdW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZgogCQkJdW5pb24gc2tleSBza2V5LCBib29sIG5xKTsKIGludCBkYXRfY29uZF9zZXRfc3RvcmFnZV9rZXkoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbW1jLCB1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbiwKIAkJCSAgICAgdW5pb24gc2tleSBza2V5LCB1bmlvbiBza2V5ICpvbGRrZXksIGJvb2wgbnEsIGJvb2wgbXIsIGJvb2wgbWMpOwotaW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuKTsKJiM0MztpbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4sIHVuaW9uIHNrZXkgKnNrZXkpOwogbG9uZyBkYXRfcmVzZXRfc2tleXModW5pb24gYXNjZSBhc2NlLCBnZm5fdCBzdGFydCk7CiAKIHVuc2lnbmVkIGxvbmcgZGF0X2dldF9wdHZhbChzdHJ1Y3QgcGFnZV90YWJsZSAqdGFibGUsIHN0cnVjdCBwdHZhbF9wYXJhbSBwYXJhbSk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYyBiL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jCmluZGV4IGZlZTgwMDQ3YmQ5NGYuLjNjYzQ1ZjdmNWIyZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jCkBAIC05MSw5ICYjNDM7OTEsOSBAQCBpbnQga3ZtX3MzOTBfZmF1bHRpbl9nZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBndWVzdF9mYQogCQkvKiBBY2Nlc3Mgb3V0c2lkZSBtZW1vcnksIGFkZHJlc3NpbmcgZXhjZXB0aW9uLiAqLwogCQlpZiAoaXNfbm9zbG90X3BmbihmLSZndDtwZm4pKQogCQkJcmV0dXJuIFBHTV9BRERSRVNTSU5HOwotCQkvKiBTaWduYWwgcGVuZGluZzogdHJ5IGFnYWluLiAqLwotCQlpZiAoZi0mZ3Q7cGZuID09IEtWTV9QRk5fRVJSX1NJR1BFTkRJTkcpCi0JCQlyZXR1cm4gLUVBR0FJTjsKJiM0MzsJCS8qIEZhdGFsIHNpZ25hbCBwZW5kaW5nOiBiYWlsIG91dC4gKi8KJiM0MzsJCWlmIChpc19zaWdwZW5kaW5nX3BmbihmLSZndDtwZm4pKQomIzQzOwkJCXJldHVybiAtRUlOVFI7CiAJCS8qIENoZWNrIGlmIGl0JiMzOTtzIHJlYWQtb25seSBtZW1vcnk7IGRvbiYjMzk7dCB0cnkgdG8gYWN0dWFsbHkgaGFuZGxlIHRoYXQgY2FzZS4gKi8KIAkJaWYgKGYtJmd0O3BmbiA9PSBLVk1fUEZOX0VSUl9ST19GQVVMVCkKIAkJCXJldHVybiAtRU9QTk9UU1VQUDsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jCmluZGV4IDllM2U2YjBkNzJhZDYuLmQwMjcyNGJkMTgyOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYwpAQCAtNTAsNiAmIzQzOzUwLDggQEAgc3RhdGljIGludCBzY2FfZXh0X2NhbGxfcGVuZGluZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCAqc3JjX2lkKQogCWlmICgha3ZtX3MzOTBfdGVzdF9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX0VDQUxMX1BFTkQpKQogCQlyZXR1cm4gMDsKIAomIzQzOwlpZiAoS1ZNX0JVR19PTihrdm1faXNfdWNvbnRyb2wodmNwdS0mZ3Q7a3ZtKSwgdmNwdS0mZ3Q7a3ZtKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwogCUJVR19PTigha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpOwogCiAJaWYgKHNyY19pZCkKQEAgLTY2LDYgJiM0Mzs2OCw4IEBAIHN0YXRpYyBpbnQgc2NhX2luamVjdF9leHRfY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzcmNfaWQpCiAJaW50IGV4cGVjdCwgcmM7CiAKIAlCVUdfT04oIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKTsKJiM0MzsJaWYgKEtWTV9CVUdfT04oa3ZtX2lzX3Vjb250cm9sKHZjcHUtJmd0O2t2bSksIHZjcHUtJmd0O2t2bSkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKIAogCW9sZF92YWwgPSBSRUFEX09OQ0UoKnNpZ3BfY3RybCk7CiAJb2xkX3ZhbC5jID0gMDsKQEAgLTg0LDEwICYjNDM7ODgsMTMgQEAgc3RhdGljIGludCBzY2FfaW5qZWN0X2V4dF9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNyY19pZCkKIHN0YXRpYyB2b2lkIHNjYV9jbGVhcl9leHRfY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5zY2E7Ci0JdW5pb24gZXNjYV9zaWdwX2N0cmwgKnNpZ3BfY3RybCA9ICZhbXA7c2NhLSZndDtjcHVbdmNwdS0mZ3Q7dmNwdV9pZF0uc2lncF9jdHJsOwomIzQzOwl1bmlvbiBlc2NhX3NpZ3BfY3RybCAqc2lncF9jdHJsOwogCi0JaWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSkKJiM0MzsJaWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSB8fCAhdmNwdS0mZ3Q7YXJjaC5pbml0aWFsaXplZCB8fCBrdm1faXNfdWNvbnRyb2wodmNwdS0mZ3Q7a3ZtKSkKIAkJcmV0dXJuOwomIzQzOwomIzQzOwkvKiBJbml0aWFsaXplIGFmdGVyIHRoZSBhYm92ZSBjaGVjaywgdG8gcHJldmVudCBnb2luZyBvdXQgb2YgYm91bmRzICovCiYjNDM7CXNpZ3BfY3RybCA9ICZhbXA7c2NhLSZndDtjcHVbdmNwdS0mZ3Q7dmNwdV9pZF0uc2lncF9jdHJsOwogCWt2bV9zMzkwX2NsZWFyX2NwdWZsYWdzKHZjcHUsIENQVVNUQVRfRUNBTExfUEVORCk7CiAKIAlXUklURV9PTkNFKHNpZ3BfY3RybC0mZ3Q7dmFsdWUsIDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCmluZGV4IDE1MGI1ZGQyMTcwZTIuLmIyOWU1NDYwZjVlZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKQEAgLTU3MSw3ICYjNDM7NTcxLDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9rZXlvcChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGt2bSAqa3ZtLCBpbnQgb3AKIAlzd2l0Y2ggKG9wKSB7CiAJY2FzZSBLVk1fUzM5MF9LRVlPUF9TU0tFOgogCQlyID0gZGF0X2NvbmRfc2V0X3N0b3JhZ2Vfa2V5KG1jLCBhc2NlLCBnZm4sIHNrZXksICZhbXA7c2tleSwgMCwgMCwgMCk7Ci0JCWlmIChyICZndDs9IDApCiYjNDM7CQlpZiAociA9PSAwIHx8IHIgPT0gMSkKIAkJCXJldHVybiBza2V5LnNrZXk7CiAJCWJyZWFrOwogCWNhc2UgS1ZNX1MzOTBfS0VZT1BfSVNLRToKQEAgLTU4MCwxNCAmIzQzOzU4MCwxNCBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX2tleW9wKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3Qga3ZtICprdm0sIGludCBvcAogCQkJcmV0dXJuIHNrZXkuc2tleTsKIAkJYnJlYWs7CiAJY2FzZSBLVk1fUzM5MF9LRVlPUF9SUkJFOgotCQlyID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQoYXNjZSwgZ2ZuKTsKLQkJaWYgKHIgJmd0OyAwKQotCQkJcmV0dXJuIHIgJmx0OyZsdDsgMTsKJiM0MzsJCXIgPSBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdChhc2NlLCBnZm4sICZhbXA7c2tleSk7CiYjNDM7CQlpZiAoIXIpCiYjNDM7CQkJcmV0dXJuIHNrZXkuc2tleTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXJldHVybiByOwomIzQzOwlyZXR1cm4gciAmZ3Q7IDAgPyAtRUZBVUxUIDogcjsKIH0KIAogLyogU2VjdGlvbjogZGV2aWNlIHJlbGF0ZWQgKi8KQEAgLTEyMTksOCAmIzQzOzEyMTksOCBAQCBzdGF0aWMgdm9pZCBrdm1fczM5MF9zeW5jX3JlcXVlc3RfYnJvYWRjYXN0KHN0cnVjdCBrdm0gKmt2bSwgaW50IHJlcSkKIAogLyoKICAqIE11c3QgYmUgY2FsbGVkIHdpdGgga3ZtLSZndDtzcmN1IGhlbGQgdG8gYXZvaWQgcmFjZXMgb24gbWVtc2xvdHMsIGFuZCB3aXRoCi0gKiBrdm0tJmd0O3Nsb3RzX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsIGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKCksCi0gKiBhbmQga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cygpLgomIzQzOyAqIGt2bS0mZ3Q7c2xvdHNfYXJjaF9sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLAomIzQzOyAqIGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKCksIGFuZCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKCkuCiAgKi8KIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSkKIHsKQEAgLTEyNjUsNyAmIzQzOzEyNjUsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pCiB9CiAKIC8qCi0gKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGt2bS0mZ3Q7c2xvdHNfbG9jayB0byBhdm9pZCByYWNlcyB3aXRoIG91cnNlbHZlcywKJiM0MzsgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGt2bS0mZ3Q7c2xvdHNfYXJjaF9sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLAogICoga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKCkgYW5kIGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoKS4KICAqLwogc3RhdGljIGludCBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pCkBAIC0xMzAwLDcgJiM0MzsxMzAwLDkgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSwKIHsKIAlpbnQgcmVzID0gLUVOWElPOwogCi0JbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7c2xvdHNfbG9jayk7CiYjNDM7CWd1YXJkKHNyY3UpKCZhbXA7a3ZtLSZndDtzcmN1KTsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7a3ZtLSZndDtzbG90c19hcmNoX2xvY2spOwomIzQzOwogCXN3aXRjaCAoYXR0ci0mZ3Q7YXR0cikgewogCWNhc2UgS1ZNX1MzOTBfVk1fTUlHUkFUSU9OX1NUQVJUOgogCQlyZXMgPSBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oa3ZtKTsKQEAgLTEzMTEsNyAmIzQzOzEzMTMsNiBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtLAogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KLQltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O3Nsb3RzX2xvY2spOwogCiAJcmV0dXJuIHJlczsKIH0KQEAgLTIyMTQsNyAmIzQzOzIyMTUsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX2dldF9za2V5cyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9za2V5cyAqYXJncykKIAl9CiAKIAlrdmZyZWUoa2V5cyk7Ci0JcmV0dXJuIHI7CiYjNDM7CXJldHVybiByICZsdDs9IDAgPyByIDogLUVGQVVMVDsKIH0KIAogc3RhdGljIGludCBrdm1fczM5MF9zZXRfc2tleXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfc2tleXMgKmFyZ3MpCkBAIC0yMjc2LDcgJiM0MzsyMjc3LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfc2tleXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfc2tleXMgKmFyZ3MpCiAJa3ZtX3MzOTBfZnJlZV9tbXVfY2FjaGUobWMpOwogb3V0OgogCWt2ZnJlZShrZXlzKTsKLQlyZXR1cm4gcjsKJiM0MzsJcmV0dXJuIHIgJmx0Oz0gMCA/IHIgOiAtRUZBVUxUOwogfQogCiAvKgpAQCAtMjM4Niw3ICYjNDM7MjM4Nyw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X2NtbWFfYml0cyhzdHJ1Y3Qga3ZtICprdm0sCiAKIAlzZXRfYml0KEdNQVBfRkxBR19VU0VTX0NNTSwgJmFtcDtrdm0tJmd0O2FyY2guZ21hcC0mZ3Q7ZmxhZ3MpOwogCi0JcmV0dXJuIHI7CiYjNDM7CXJldHVybiByICZsdDs9IDAgPyByIDogLUVGQVVMVDsKIH0KIAogLyoqCkBAIC0yOTk4LDkgJiM0MzsyOTk5LDggQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKQogCQlyID0gLUVGQVVMVDsKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZhbXA7YXJncywgYXJncCwgc2l6ZW9mKGFyZ3MpKSkKIAkJCWJyZWFrOwotCQltdXRleF9sb2NrKCZhbXA7a3ZtLSZndDtzbG90c19sb2NrKTsKLQkJciA9IGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoa3ZtLCAmYW1wO2FyZ3MpOwotCQltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O3Nsb3RzX2xvY2spOwomIzQzOwkJc2NvcGVkX2d1YXJkKG11dGV4LCAmYW1wO2t2bS0mZ3Q7c2xvdHNfYXJjaF9sb2NrKQomIzQzOwkJCXIgPSBrdm1fczM5MF9nZXRfY21tYV9iaXRzKGt2bSwgJmFtcDthcmdzKTsKIAkJaWYgKCFyKSB7CiAJCQlyID0gY29weV90b191c2VyKGFyZ3AsICZhbXA7YXJncywgc2l6ZW9mKGFyZ3MpKTsKIAkJCWlmIChyKQpAQCAtMzAxNCw5ICYjNDM7MzAxNCw5IEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZykKIAkJciA9IC1FRkFVTFQ7CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmYW1wO2FyZ3MsIGFyZ3AsIHNpemVvZihhcmdzKSkpCiAJCQlicmVhazsKLQkJbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7c2xvdHNfbG9jayk7CiYjNDM7CQltdXRleF9sb2NrKCZhbXA7a3ZtLSZndDtzbG90c19hcmNoX2xvY2spOwogCQlyID0ga3ZtX3MzOTBfc2V0X2NtbWFfYml0cyhrdm0sICZhbXA7YXJncyk7Ci0JCW11dGV4X3VubG9jaygmYW1wO2t2bS0mZ3Q7c2xvdHNfbG9jayk7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O3Nsb3RzX2FyY2hfbG9jayk7CiAJCWJyZWFrOwogCX0KIAljYXNlIEtWTV9TMzkwX1BWX0NPTU1BTkQ6IHsKQEAgLTM0NjEsNyAmIzQzOzM0NjEsNyBAQCBzdGF0aWMgdm9pZCBzY2FfZGVsX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXN0cnVjdCBlc2NhX2Jsb2NrICpzY2EgPSB2Y3B1LSZndDtrdm0tJmd0O2FyY2guc2NhOwogCi0JaWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSkKJiM0MzsJaWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSB8fCAhdmNwdS0mZ3Q7YXJjaC5pbml0aWFsaXplZCkKIAkJcmV0dXJuOwogCiAJY2xlYXJfYml0X2ludih2Y3B1LSZndDt2Y3B1X2lkLCAodW5zaWduZWQgbG9uZyAqKXNjYS0mZ3Q7bWNuKTsKQEAgLTM0ODEsOCAmIzQzOzM0ODEsOCBAQCBzdGF0aWMgdm9pZCBzY2FfYWRkX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCWlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpCiAJCXJldHVybjsKIAomIzQzOwlXUklURV9PTkNFKHNjYS0mZ3Q7Y3B1W3ZjcHUtJmd0O3ZjcHVfaWRdLnNkYSwgdmlydF90b19waHlzKHZjcHUtJmd0O2FyY2guc2llX2Jsb2NrKSk7CiAJc2V0X2JpdF9pbnYodmNwdS0mZ3Q7dmNwdV9pZCwgKHVuc2lnbmVkIGxvbmcgKilzY2EtJmd0O21jbik7Ci0Jc2NhLSZndDtjcHVbdmNwdS0mZ3Q7dmNwdV9pZF0uc2RhID0gdmlydF90b19waHlzKHZjcHUtJmd0O2FyY2guc2llX2Jsb2NrKTsKIH0KIAogc3RhdGljIGludCBzY2FfY2FuX2FkZF92Y3B1KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkKQpAQCAtMzYxMyw2ICYjNDM7MzYxMyw5IEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpZiAodGVzdF9rdm1fZmFjaWxpdHkodmNwdS0mZ3Q7a3ZtLCA3NCkgfHwgdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnVzZXJfaW5zdHIwIHx8CiAJICAgIHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC51c2VyX29wZXJleGVjKQogCQl2Y3B1LSZndDthcmNoLnNpZV9ibG9jay0mZ3Q7aWN0bCB8PSBJQ1RMX09QRVJFWEM7CiYjNDM7CiYjNDM7CS8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKCkgYW5kIGt2bV9hcmNoX3ZjcHVfaW9jdGwoKSAqLwomIzQzOwlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO3ZjcHUtJmd0O2FyY2guaW5pdGlhbGl6ZWQsIHRydWUpOwogfQogCiBzdGF0aWMgYm9vbCBrdm1faGFzX3Bja21vX3N1YmZ1bmMoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIG5yKQpAQCAtMzY3NCw3ICYjNDM7MzY3Nyw4IEBAIHN0YXRpYyB2b2lkIGt2bV9zMzkwX3ZjcHVfY3J5cHRvX3NldHVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogdm9pZCBrdm1fczM5MF92Y3B1X3Vuc2V0dXBfY21tYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydCh2Y3B1LSZndDthcmNoLnNpZV9ibG9jay0mZ3Q7Y2JybG8pKTsKJiM0MzsJaWYgKHZjcHUtJmd0O2FyY2guc2llX2Jsb2NrLSZndDtjYnJsbykKJiM0MzsJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwaHlzX3RvX3ZpcnQodmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O2NicmxvKSk7CiAJdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O2NicmxvID0gMDsKIH0KIApAQCAtMzc5MiwyMSAmIzQzOzM3OTYsMjEgQEAgaW50IGt2bV9hcmNoX3ZjcHVfcHJlY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkKQogCXJldHVybiAwOwogfQogCiYjNDM7REVGSU5FX0ZSRUUoc2llX3BhZ2UsIHN0cnVjdCBzaWVfcGFnZSAqLCBpZiAoX1QpIGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykoX1QpKSkKJiM0MzsKIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0Jc3RydWN0IHNpZV9wYWdlICpzaWVfcGFnZTsKJiM0MzsJc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMgX19mcmVlKGt2bV9zMzkwX21tdV9jYWNoZSkgPSBOVUxMOwomIzQzOwlzdHJ1Y3Qgc2llX3BhZ2UgKnNpZV9wYWdlIF9fZnJlZShzaWVfcGFnZSkgPSBOVUxMOwogCWludCByYzsKIAogCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHNpZV9wYWdlKSAhPSA0MDk2KTsKLQl2Y3B1LSZndDthcmNoLm1jID0ga3ZtX3MzOTBfbmV3X21tdV9jYWNoZSgpOwotCWlmICghdmNwdS0mZ3Q7YXJjaC5tYykKJiM0MzsJbWMgPSBrdm1fczM5MF9uZXdfbW11X2NhY2hlKCk7CiYjNDM7CWlmICghbWMpCiAJCXJldHVybiAtRU5PTUVNOwogCXNpZV9wYWdlID0gKHN0cnVjdCBzaWVfcGFnZSAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKLQlpZiAoIXNpZV9wYWdlKSB7Ci0JCWt2bV9zMzkwX2ZyZWVfbW11X2NhY2hlKHZjcHUtJmd0O2FyY2gubWMpOwotCQl2Y3B1LSZndDthcmNoLm1jID0gTlVMTDsKJiM0MzsJaWYgKCFzaWVfcGFnZSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCiAJdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2sgPSAmYW1wO3NpZV9wYWdlLSZndDtzaWVfYmxvY2s7CiAJdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O2l0ZGJhID0gdmlydF90b19waHlzKCZhbXA7c2llX3BhZ2UtJmd0O2l0ZGIpOwpAQCAtMzg0OCwxMCAmIzQzOzM4NTIsOSBAQCBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCQl2Y3B1LSZndDtydW4tJmd0O2t2bV92YWxpZF9yZWdzIHw9IEtWTV9TWU5DX0ZQUlM7CiAKIAlpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtJmd0O2t2bSkpIHsKLQkJcmMgPSAtRU5PTUVNOwogCQl2Y3B1LSZndDthcmNoLmdtYXAgPSBnbWFwX25ld19jaGlsZCh2Y3B1LSZndDtrdm0tJmd0O2FyY2guZ21hcCwgLTFVTCk7CiAJCWlmICghdmNwdS0mZ3Q7YXJjaC5nbWFwKQotCQkJZ290byBvdXRfZnJlZV9zaWVfYmxvY2s7CiYjNDM7CQkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJVk1fRVZFTlQodmNwdS0mZ3Q7a3ZtLCAzLCAmIzM0O2NyZWF0ZSBjcHUgJWQgYXQgMHglcCwgc2llIGJsb2NrIGF0IDB4JXAmIzM0OywKQEAgLTM4NTksMjAgJiM0MzszODYyLDE5IEBAIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJdHJhY2Vfa3ZtX3MzOTBfY3JlYXRlX3ZjcHUodmNwdS0mZ3Q7dmNwdV9pZCwgdmNwdSwgdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2spOwogCiAJcmMgPSBrdm1fczM5MF92Y3B1X3NldHVwKHZjcHUpOwotCWlmIChyYykKLQkJZ290byBvdXRfdWNvbnRyb2xfdW5pbml0OwomIzQzOwlpZiAocmMpIHsKJiM0MzsJCWlmIChrdm1faXNfdWNvbnRyb2wodmNwdS0mZ3Q7a3ZtKSkgewomIzQzOwkJCXNjb3BlZF9ndWFyZChzcGlubG9jaywgJmFtcDt2Y3B1LSZndDtrdm0tJmd0O2FyY2guZ21hcC0mZ3Q7Y2hpbGRyZW5fbG9jaykKJiM0MzsJCQkJZ21hcF9yZW1vdmVfY2hpbGQodmNwdS0mZ3Q7YXJjaC5nbWFwKTsKJiM0MzsJCQl2Y3B1LSZndDthcmNoLmdtYXAgPSBnbWFwX3B1dCh2Y3B1LSZndDthcmNoLmdtYXApOwomIzQzOwkJfQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwl9CiAKJiM0MzsJdmNwdS0mZ3Q7YXJjaC5tYyA9IG5vX2ZyZWVfcHRyKG1jKTsKJiM0MzsJc2llX3BhZ2UgPSBOVUxMOwogCWt2bV9zMzkwX3VwZGF0ZV90b3BvbG9neV9jaGFuZ2VfcmVwb3J0KHZjcHUtJmd0O2t2bSwgMSk7CiAJcmV0dXJuIDA7Ci0KLW91dF91Y29udHJvbF91bmluaXQ6Ci0JaWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LSZndDtrdm0pKSB7Ci0JCWdtYXBfcmVtb3ZlX2NoaWxkKHZjcHUtJmd0O2FyY2guZ21hcCk7Ci0JCXZjcHUtJmd0O2FyY2guZ21hcCA9IGdtYXBfcHV0KHZjcHUtJmd0O2FyY2guZ21hcCk7Ci0JfQotb3V0X2ZyZWVfc2llX2Jsb2NrOgotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykodmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2spKTsKLQlyZXR1cm4gcmM7CiB9CiAKIGludCBrdm1fYXJjaF92Y3B1X3J1bm5hYmxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTUwMzksNiAmIzQzOzUwNDEsMTAgQEAgaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkgICAga3ZtX3J1bi0mZ3Q7a3ZtX2RpcnR5X3JlZ3MgJmFtcDsgfktWTV9TWU5DX1MzOTBfVkFMSURfRklFTERTKQogCQlyZXR1cm4gLUVJTlZBTDsKIAomIzQzOwkvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4ga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKCkgKi8KJiM0MzsJaWYgKCFzbXBfbG9hZF9hY3F1aXJlKCZhbXA7dmNwdS0mZ3Q7YXJjaC5pbml0aWFsaXplZCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAl2Y3B1X2xvYWQodmNwdSk7CiAKIAlpZiAoZ3Vlc3RkYmdfZXhpdF9wZW5kaW5nKHZjcHUpKSB7CkBAIC01NTIzLDYgJiM0Mzs1NTI5LDEwIEBAIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwKIAlsb25nIHI7CiAJdTE2IHJjLCBycmM7CiAKJiM0MzsJLyogUGFpcnMgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZSgpICovCiYjNDM7CWlmICghc21wX2xvYWRfYWNxdWlyZSgmYW1wO3ZjcHUtJmd0O2FyY2guaW5pdGlhbGl6ZWQpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJdmNwdV9sb2FkKHZjcHUpOwogCiAJc3dpdGNoIChpb2N0bCkgewpAQCAtNTc5NCwyNCAmIzQzOzU4MDQsNDQgQEAgaW50IGt2bV9hcmNoX3ByZXBhcmVfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgbG9uZyBjbW1hX2RfY291bnRfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspCiYjNDM7ewomIzQzOwl1bmlvbiBwZ3N0ZSBwZ3N0ZTsKJiM0MzsKJiM0MzsJcGdzdGUgPSBwZ3N0ZV9nZXRfbG9jayhwdGVwKTsKJiM0MzsJaWYgKHBnc3RlLmNtbWFfZCkgewomIzQzOwkJcGdzdGUuY21tYV9kID0gMDsKJiM0MzsJCWF0b21pYzY0X2RlYyh3YWxrLSZndDtwcml2KTsKJiM0MzsJfQomIzQzOwlwZ3N0ZV9zZXRfdW5sb2NrKHB0ZXAsIHBnc3RlKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sCiAJCQkJc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqb2xkLAogCQkJCWNvbnN0IHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm5ldywKIAkJCQllbnVtIGt2bV9tcl9jaGFuZ2UgY2hhbmdlKQogewotCXN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jID0gTlVMTDsKLQlpbnQgcmMgPSAwOwomIzQzOwljb25zdCBzdHJ1Y3QgZGF0X3dhbGtfb3BzIG9wcyA9IHsgLnB0ZV9lbnRyeSA9IGNtbWFfZF9jb3VudF9wdGUsIH07CiYjNDM7CXN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jIF9fZnJlZShrdm1fczM5MF9tbXVfY2FjaGUpID0gTlVMTDsKJiM0MzsJaW50IHJjID0gLUVOT01FTTsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7a3ZtLSZndDtzbG90c19hcmNoX2xvY2spOwogCiAJaWYgKGNoYW5nZSA9PSBLVk1fTVJfRkxBR1NfT05MWSkKIAkJcmV0dXJuOwogCiAJbWMgPSBrdm1fczM5MF9uZXdfbW11X2NhY2hlKCk7Ci0JaWYgKCFtYykgewotCQlyYyA9IC1FTk9NRU07CiYjNDM7CWlmICghbWMpCiAJCWdvdG8gb3V0OwotCX0KLQomIzQzO3JldHJ5OgogCXNjb3BlZF9ndWFyZCh3cml0ZV9sb2NrLCAmYW1wO2t2bS0mZ3Q7bW11X2xvY2spIHsKJiM0MzsJCWlmIChrdm0tJmd0O2FyY2gubWlncmF0aW9uX21vZGUgJmFtcDsmYW1wOyBrdm0tJmd0O2FyY2gudXNlX2NtbWEgJmFtcDsmYW1wOyBvbGQpIHsKJiM0MzsJCQlfZGF0X3dhbGtfZ2ZuX3JhbmdlKG9sZC0mZ3Q7YmFzZV9nZm4sIG9sZC0mZ3Q7YmFzZV9nZm4gJiM0Mzsgb2xkLSZndDtucGFnZXMsCiYjNDM7CQkJCQkgICAga3ZtLSZndDthcmNoLmdtYXAtJmd0O2FzY2UsICZhbXA7b3BzLCBEQVRfV0FMS19JR05fSE9MRVMsCiYjNDM7CQkJCQkgICAgJmFtcDtrdm0tJmd0O2FyY2guY21tYV9kaXJ0eV9wYWdlcyk7CiYjNDM7CQl9CiYjNDM7CiAJCXN3aXRjaCAoY2hhbmdlKSB7CiAJCWNhc2UgS1ZNX01SX0RFTEVURToKIAkJCXJjID0gZGF0X2RlbGV0ZV9zbG90KG1jLCBrdm0tJmd0O2FyY2guZ21hcC0mZ3Q7YXNjZSwgb2xkLSZndDtiYXNlX2dmbiwgb2xkLSZndDtucGFnZXMpOwpAQCAtNTgyNywxMyAmIzQzOzU4NTcsMTggQEAgdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sCiAJCWNhc2UgS1ZNX01SX0ZMQUdTX09OTFk6CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKJiM0MzsJCQlyYyA9IDA7CiAJCQlXQVJOKDEsICYjMzQ7VW5rbm93biBLVk0gTVIgQ0hBTkdFOiAlZFxuJiMzNDssIGNoYW5nZSk7CiAJCX0KIAl9CiYjNDM7CWlmIChyYyA9PSAtRU5PTUVNKSB7CiYjNDM7CQlyYyA9IGt2bV9zMzkwX21tdV9jYWNoZV90b3B1cChtYyk7CiYjNDM7CQlpZiAoIXJjKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CX0KIG91dDoKLQlpZiAocmMpCiYjNDM7CWlmIChLVk1fQlVHX09OKHJjLCBrdm0pKQogCQlwcl93YXJuKCYjMzQ7ZmFpbGVkIHRvIGNvbW1pdCBtZW1vcnkgcmVnaW9uXG4mIzM0Oyk7Ci0Ja3ZtX3MzOTBfZnJlZV9tbXVfY2FjaGUobWMpOwogCXJldHVybjsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9wcml2LmMgYi9hcmNoL3MzOTAva3ZtL3ByaXYuYwppbmRleCBhZDBkZGM0MzNhNzNjLi5iMWJhMjRjMzQ2ZWZhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL3ByaXYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva3ZtL3ByaXYuYwpAQCAtMjg5LDYgJiM0MzsyODksNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9pc2tlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHN0YXRpYyBpbnQgaGFuZGxlX3JyYmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXVuc2lnbmVkIGxvbmcgZ2FkZHI7CiYjNDM7CXVuaW9uIHNrZXkgc2tleTsKIAlpbnQgcmVnMSwgcmVnMjsKIAlpbnQgcmM7CiAKQEAgLTMwNywxMiAmIzQzOzMwOCwxMiBAQCBzdGF0aWMgaW50IGhhbmRsZV9ycmJlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlnYWRkciA9IGt2bV9zMzkwX2xvZ2ljYWxfdG9fZWZmZWN0aXZlKHZjcHUsIGdhZGRyKTsKIAlnYWRkciA9IGt2bV9zMzkwX3JlYWxfdG9fYWJzKHZjcHUsIGdhZGRyKTsKIAlzY29wZWRfZ3VhcmQocmVhZF9sb2NrLCAmYW1wO3ZjcHUtJmd0O2t2bS0mZ3Q7bW11X2xvY2spCi0JCXJjID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodmNwdS0mZ3Q7YXJjaC5nbWFwLSZndDthc2NlLCBncGFfdG9fZ2ZuKGdhZGRyKSk7CiYjNDM7CQlyYyA9IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHZjcHUtJmd0O2FyY2guZ21hcC0mZ3Q7YXNjZSwgZ3BhX3RvX2dmbihnYWRkciksICZhbXA7c2tleSk7CiAJaWYgKHJjICZndDsgMCkKIAkJcmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LCByYyk7CiAJaWYgKHJjICZsdDsgMCkKIAkJcmV0dXJuIHJjOwotCWt2bV9zMzkwX3NldF9wc3dfY2ModmNwdSwgcmMpOwomIzQzOwlrdm1fczM5MF9zZXRfcHN3X2NjKHZjcHUsIChza2V5LnNrZXkgJmd0OyZndDsgMSkgJmFtcDsgMyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyNjAsOCAmIzQzOzEyNjEsOSBAQCBzdGF0aWMgaW50IGhhbmRsZV9lc3NhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJLyogUmV0cnkgdGhlIEVTU0EgaW5zdHJ1Y3Rpb24gKi8KIAkJa3ZtX3MzOTBfcmV0cnlfaW5zdHIodmNwdSk7CiAJfSBlbHNlIHsKLQkJc2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgJmFtcDt2Y3B1LSZndDtrdm0tJmd0O21tdV9sb2NrKQotCQkJaSA9IF9fZG9fZXNzYSh2Y3B1LCBvcmMpOwomIzQzOwkJc2NvcGVkX2d1YXJkKG11dGV4LCAmYW1wO3ZjcHUtJmd0O2t2bS0mZ3Q7c2xvdHNfYXJjaF9sb2NrKQomIzQzOwkJCXNjb3BlZF9ndWFyZChyZWFkX2xvY2ssICZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDttbXVfbG9jaykKJiM0MzsJCQkJaSA9IF9fZG9fZXNzYSh2Y3B1LCBvcmMpOwogCQlpZiAoaSAmbHQ7IDApCiAJCQlyZXR1cm4gaTsKIAkJLyogQWNjb3VudCBmb3IgdGhlIHBvc3NpYmxlIGV4dHJhIGNicmwgZW50cnkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vcHYuYyBiL2FyY2gvczM5MC9rdm0vcHYuYwppbmRleCAxYmVhY2M4NDFjYTg1Li5iMDJlMDE1OWQzY2QyIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL3B2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2t2bS9wdi5jCkBAIC0yNDQsNiAmIzQzOzI0NCwyNCBAQCBzdGF0aWMgdm9pZCBrdm1fczM5MF9jbGVhcl9wdl9zdGF0ZShzdHJ1Y3Qga3ZtICprdm0pCiAJa3ZtLSZndDthcmNoLnB2LnN0b3JfdmFyID0gTlVMTDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGt2bV9zMzkwX3B2X2Rpc3Bvc2VfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmcmVlX3N0b3JfYmFzZSkKJiM0Mzt7CiYjNDM7CWlmIChmcmVlX3N0b3JfYmFzZSkKJiM0MzsJCWZyZWVfcGFnZXModmNwdS0mZ3Q7YXJjaC5wdi5zdG9yX2Jhc2UsIGdldF9vcmRlcih1dl9pbmZvLmd1ZXN0X2NwdV9zdG9yX2xlbikpOwomIzQzOwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2lkYV9hZGRyKHZjcHUtJmd0O2FyY2guc2llX2Jsb2NrKSk7CiYjNDM7CXZjcHUtJmd0O2FyY2guc2llX2Jsb2NrLSZndDtwdl9oYW5kbGVfY3B1ID0gMDsKJiM0MzsJdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O3B2X2hhbmRsZV9jb25maWcgPSAwOwomIzQzOwltZW1zZXQoJmFtcDt2Y3B1LSZndDthcmNoLnB2LCAwLCBzaXplb2YodmNwdS0mZ3Q7YXJjaC5wdikpOwomIzQzOwl2Y3B1LSZndDthcmNoLnNpZV9ibG9jay0mZ3Q7c2RmID0gMDsKJiM0MzsJLyoKJiM0MzsJICogVGhlIHNpZGFkIGZpZWxkIChmb3Igc2RmID09IDIpIGlzIG5vdyB0aGUgZ2JlYSBmaWVsZCAoZm9yIHNkZiA9PSAwKS4KJiM0MzsJICogVXNlIHRoZSByZXNldCB2YWx1ZSBvZiBnYmVhIHRvIGF2b2lkIGxlYWtpbmcgdGhlIGtlcm5lbCBwb2ludGVyIG9mCiYjNDM7CSAqIHRoZSBqdXN0IGZyZWVkIHNpZGEuCiYjNDM7CSAqLwomIzQzOwl2Y3B1LSZndDthcmNoLnNpZV9ibG9jay0mZ3Q7Z2JlYSA9IDE7CiYjNDM7CWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9UTEJfRkxVU0gsIHZjcHUpOwomIzQzO30KJiM0MzsKIGludCBrdm1fczM5MF9wdl9kZXN0cm95X2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKQogewogCWludCBjYzsKQEAgLTI1OCwyNCAmIzQzOzI3Niw5IEBAIGludCBrdm1fczM5MF9wdl9kZXN0cm95X2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKQogCVdBUk5fT05DRShjYywgJiMzNDtwcm90dmlydCBkZXN0cm95IGNwdSBmYWlsZWQgcmMgJXggcnJjICV4JiMzNDssICpyYywgKnJyYyk7CiAKIAkvKiBJbnRlbmRlZCBtZW1vcnkgbGVhayBmb3Igc29tZXRoaW5nIHRoYXQgc2hvdWxkIG5ldmVyIGhhcHBlbi4gKi8KLQlpZiAoIWNjKQotCQlmcmVlX3BhZ2VzKHZjcHUtJmd0O2FyY2gucHYuc3Rvcl9iYXNlLAotCQkJICAgZ2V0X29yZGVyKHV2X2luZm8uZ3Vlc3RfY3B1X3N0b3JfbGVuKSk7Ci0KLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2lkYV9hZGRyKHZjcHUtJmd0O2FyY2guc2llX2Jsb2NrKSk7Ci0JdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O3B2X2hhbmRsZV9jcHUgPSAwOwotCXZjcHUtJmd0O2FyY2guc2llX2Jsb2NrLSZndDtwdl9oYW5kbGVfY29uZmlnID0gMDsKLQltZW1zZXQoJmFtcDt2Y3B1LSZndDthcmNoLnB2LCAwLCBzaXplb2YodmNwdS0mZ3Q7YXJjaC5wdikpOwotCXZjcHUtJmd0O2FyY2guc2llX2Jsb2NrLSZndDtzZGYgPSAwOwotCS8qCi0JICogVGhlIHNpZGFkIGZpZWxkIChmb3Igc2RmID09IDIpIGlzIG5vdyB0aGUgZ2JlYSBmaWVsZCAoZm9yIHNkZiA9PSAwKS4KLQkgKiBVc2UgdGhlIHJlc2V0IHZhbHVlIG9mIGdiZWEgdG8gYXZvaWQgbGVha2luZyB0aGUga2VybmVsIHBvaW50ZXIgb2YKLQkgKiB0aGUganVzdCBmcmVlZCBzaWRhLgotCSAqLwotCXZjcHUtJmd0O2FyY2guc2llX2Jsb2NrLSZndDtnYmVhID0gMTsKLQlrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfVExCX0ZMVVNILCB2Y3B1KTsKJiM0MzsJa3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUodmNwdSwgIWNjKTsKIAotCXJldHVybiBjYyA/IEVJTyA6IDA7CiYjNDM7CXJldHVybiBjYyA/IC1FSU8gOiAwOwogfQogCiBpbnQga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKQpAQCAtMzE5LDkgJiM0MzszMjIsNyBAQCBpbnQga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKQogCQkgICAgIHV2Y2IuaGVhZGVyLnJyYyk7CiAKIAlpZiAoY2MpIHsKLQkJdTE2IGR1bW15OwotCi0JCWt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHZjcHUsICZhbXA7ZHVtbXksICZhbXA7ZHVtbXkpOwomIzQzOwkJa3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUodmNwdSwgdHJ1ZSk7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtODA5LDcgJiM0Mzs4MTAsNyBAQCBzdGF0aWMgaW50IHVucGFja19vbmUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGFkZHIsIHU2NCB0d2VhaywKIAkJCXJldHVybiAtRUFHQUlOOwogCX0KIAotCWlmIChyZXQgJmFtcDsmYW1wOyByZXQgIT0gLUVBR0FJTikKJiM0MzsJaWYgKHJldCAmYW1wOyZhbXA7IHJldCAhPSAtRUFHQUlOICZhbXA7JmFtcDsgcmV0ICE9IC1FSU5UUikKIAkJS1ZNX1VWX0VWRU5UKGt2bSwgMywgJiMzNDtQUk9UVklSVCBWTSBVTlBBQ0s6IGZhaWxlZCBhZGRyICVsbHggd2l0aCByYyAleCBycmMgJXgmIzM0OywKIAkJCSAgICAgdXZjYi5nYWRkciwgKnJjLCAqcnJjKTsKIAlyZXR1cm4gcmV0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTIwNAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEwMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBEZWNpc2lvbiBmb3IgS1ZNL3MzOTAgUGF0Y2gqKgoKT2theSwgc28gSSBoYXZlIHRoaXMgcGF0Y2ggc2VyaWVzIHRvdWNoaW5nIEtWTSBjb2RlIHNwZWNpZmljYWxseSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBzaW5jZSBpdCYjMzk7cyBzMzkwLCB3aGljaCBpcyBsZXNzIGNvbW1vbiBpbiB0eXBpY2FsIGZ1enppbmcgZW52aXJvbm1lbnRzIGxpa2UgR0NFL1FFTVUgZm9yIHg4NiwgSSBuZWVkIHRvIGJlIG1vcmUgZGVsaWJlcmF0ZS4gVGhlIHByb21wdCBoaWdobGlnaHRzIGEga2V5IGV4Y2x1c2lvbjogY29kZSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4gSG93ZXZlciwgU3l6a2FsbGVyICpkb2VzKiBoYXZlIHMzOTB4IHN1cHBvcnQsIGFuZCBRRU1VICpkb2VzKiBzdXBwb3J0IHMzOTB4LiBTbywgdGhlIHF1ZXN0aW9uIGlzbiYjMzk7dCB3aGV0aGVyIHMzOTAgaXMgaW5oZXJlbnRseSBleGNsdWRlZCwgYnV0IHdoZXRoZXIgdGhlc2UgKnNwZWNpZmljKiBjaGFuZ2VzIGFyZSByZWFjaGFibGUuCgpJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoZXNlIEtWTSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsbHkgc2lnbmlmaWNhbnQuIExldCYjMzk7cyBkaWcgaW50byB0aGUgY29kZSBjaGFuZ2VzLiBJJiMzOTttIHNlZWluZyBtb2RpZmljYXRpb25zIGluIGBkYXQuY2AsIGBmYXVsdGluLmNgLCBgaW50ZXJydXB0LmNgLCBga3ZtLXMzOTAuY2AsIGFuZCBgcHYuY2AuIFRoZXNlIGFyZW4mIzM5O3QganVzdCBjb3NtZXRpYyBjaGFuZ2VzOyB0aGV5IGFyZSBhY3R1YWxseSBtb2RpZnlpbmcgaG93IEtWTSBiZWhhdmVzIGZvciBzMzkwLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBjaGFuZ2VzIHRvIGRhdGEgc3RydWN0dXJlcywgZXJyb3IgaGFuZGxpbmcgKGUuZy4sIHJldHVybmluZyBgLUVGQVVMVGAgaW5zdGVhZCBvZiBwb3NpdGl2ZSBjb2RlcyBpbiBga3ZtX3MzOTBfa2V5b3BgKSwgbWVtb3J5IG1hbmFnZW1lbnQgKGZpeGVzLCBndWFyZHMsIGFuZCB1c2Ugb2YgYF9fZnJlZWApLCBpbml0aWFsaXphdGlvbiBjaGVja3MsIGFuZCBuZXcgQ1BVIGRpc3Bvc2FsL2NyZWF0aW9uIGZ1bmN0aW9ucyAoYGt2bV9zMzkwX3B2X2Rpc3Bvc2VfY3B1YCkuIENsZWFybHksIHRoZXNlIGFyZSBmdW5jdGlvbmFsIGFsdGVyYXRpb25zIHRvIEtWTS4KCkdpdmVuIHRoZXNlIGFyZSAqZnVuY3Rpb25hbCogY2hhbmdlcyB3aXRoaW4gS1ZNLCBhbmQgU3l6a2FsbGVyIGhhcyB0aGUgY2FwYWJpbGl0eSB0byBmdXp6IHMzOTB4LCBteSBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBzZXJpZXMgKmlzKiB3b3J0aCBmdXp6aW5nLiBLVk0gaXMgYSBoaWdoLXZhbHVlIHRhcmdldCBpbiBnZW5lcmFsLCBhbmQgdGhlIGZhY3QgdGhhdCBTeXprYWxsZXIgc3VwcG9ydHMgdGhpcyB0YXJnZXQgaXMgYW4gaW5kaWNhdGlvbiB0aGF0IGl0IGNhbiBiZSBkb25lLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgdGhlIGZ1bmN0aW9ucyB0aGF0IHdlcmUgY2hhbmdlZCB0byBzZWUgaWYgYW55IGFyZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcgZm9yIGZ1enppbmcuIEZ1bmN0aW9ucyBsaWtlIGBrdm1fczM5MF9rZXlvcGAsIGBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uYCwgYGt2bV9hcmNoX3ZjcHVfY3JlYXRlYCwgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYCwgYW5kIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAsIGFuZCB0aGUgbmV3IENQVSBkaXNwb3NhbC9jcmVhdGlvbiBmdW5jdGlvbnMgYXJlIGdvb2QgY2FuZGlkYXRlcy4gSSB3aWxsIGFsc28gY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyBmb3IgS1ZNIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNldHRpbmdzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQsIGFuZCBsZXZlcmFnZSB0b29scyBsaWtlIGBkZWZhdWx0X2FwaTpncmVwcGVyYCB0byBzZWFyY2ggZm9yIEtjb25maWcgb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vS2NvbmZpZz0xNz1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTE4LVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjE5OmNvbmZpZyBLVk1cbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0yMC1cdGRlZl90cmlzdGF0ZSB5XG4tLVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ2LVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjQ3OmNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtVc2Vyc3BhY2UgY29udHJvbGxlZCB2aXJ0dWFsIG1hY2hpbmVzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5NzcKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAxNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBLVk0gQ29uZmlndXJhdGlvbiBmb3IgczM5MCBBcmNoaXRlY3R1cmUqKgoKT2theSwgc28gdGhlIGNvbmZpZyBpbiBxdWVzdGlvbiBpcyBkZWZpbml0ZWx5IGBLVk1gLCBidXQgaGFuZyBvbiwgSSBhbHNvIHNlZSBgS1ZNX1MzOTBfVUNPTlRST0xgIHJlZmVyZW5jZWQgaW4gdGhlIHBhdGNoLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBrdm1faXNfdWNvbnRyb2wodmNwdS0mZ3Q7a3ZtKWAgZnVuY3Rpb24gY2FsbC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYEtWTV9TMzkwX1VDT05UUk9MYCBhY3R1YWxseSAqbmVlZHMqIHRvIGJlIGVuYWJsZWQuIE15IGluc3RpbmN0IGlzIHRoYXQgaXQgbWlnaHQuCgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayBgYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY2AuIEFoLCBoZXJlIGl0IGlzOiBgaWYgKEtWTV9CVUdfT04oa3ZtX2lzX3Vjb250cm9sKHZjcHUtJmd0O2t2bSksIHZjcHUtJmd0O2t2bSkpYC4gVGhpcyBsb29rcyBsaWtlIGEgY29uZGl0aW9uYWwgYmFzZWQgb24gYEtWTV9TMzkwX1VDT05UUk9MYCB3aXRoaW4gYW4gaW1wb3J0YW50IGludGVycnVwdCBoYW5kbGluZyBwYXRoLiBUaGUgYEtWTV9CVUdfT05gIG1hY3JvIHN0cm9uZ2x5IHN1Z2dlc3RzIHdlIG5lZWQgdGhpcyBjb25maWcsIG9yIHdlJiMzOTtsbCBnZXQgYSBmYXRhbCBlcnJvci4KCk5vdywgSSYjMzk7bGwgbW92ZSBvbiBhbmQgY2hlY2sgYGFyY2gvczM5MC9rdm0va3ZtLXMzOTAuY2AgdG8gc2VlIGhvdyBga3ZtX2FyY2hfdmNwdV9jcmVhdGVgIGlzIGJlaW5nIGhhbmRsZWQgaW4gdGhpcyBjb250ZXh0LiBJIGV4cGVjdCB0aGlzIHdpbGwgaGVscCBtZSBjb25maXJtIGFuZCBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2FyY2hfdmNwdV9jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTM3OTk9REVGSU5FX0ZSRUUoc2llX3BhZ2UsIHN0cnVjdCBzaWVfcGFnZSAqLCBpZiAoX1QpIGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykoX1QpKSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zODAwLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjM4MDE6aW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zODAyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzY0MQoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byB0aGUgS1ZNIFMzOTAgUGFyYXZpcnR1YWxpemF0aW9uIENQVSBDcmVhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IEtWTSBoYW5kbGVzIENQVSBjcmVhdGlvbiBzcGVjaWZpY2FsbHkgZm9yIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSwgcGFydGljdWxhcmx5IHRoZSBwYXJhdmlydHVhbGl6YXRpb24gYXNwZWN0cy4gVGhlIHBsYWNlIHRvIHN0YXJ0IGlzIGRlZmluaXRlbHkgYGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVgIGluIHRoZSBgYXJjaC9zMzkwL2t2bS9wdi5jYCBmaWxlLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBvciBhdCBsZWFzdCB3aGVyZSBpdCBzaG91bGQgYmUuIExldCYjMzk7cyBzZWUgaG93IHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBwYXJhdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgaXMgc2V0IHVwIGFuZCB3aGF0IGtpbmQgb2YgcmVzb3VyY2VzIGFyZSBiZWluZyBpbml0aWFsaXplZCBhdCB0aGUgQ1BVIGxldmVsLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIG9mIGEgdmlydHVhbCBDUFUgaW4gdGhpcyBjb250ZXh0OiBmcm9tIGluaXRpYWwgYWxsb2NhdGlvbiwgdG8gaXRzIHN0YXRlIGFuZCB3aGF0IHRoZSBjb2RlIGRvZXMgdG8gbWFrZSBpdCByZWFkeSB0byBydW4gZ3Vlc3RzLiBJIHdpbGwgbG9vayBmb3IgYW55IHN1YnRsZSBvcHRpbWl6YXRpb25zIGFuZCBlZGdlIGNhc2VzLCBiZWNhdXNlIHRoYXQgaXMgd2hlcmUgdGhlIGltcG9ydGFudCBkZXRhaWxzIG9mdGVuIHJlc2lkZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fczM5MF9wdl9jcmVhdGVfY3B1JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9wdi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vcHYuYz0yNjU9aW50IGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXG4tLVxuYXJjaC9zMzkwL2t2bS9wdi5jLTI4My1cbmFyY2gvczM5MC9rdm0vcHYuYzoyODQ6aW50IGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYylcbmFyY2gvczM5MC9rdm0vcHYuYy0yODUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTAzCgkJCQkJCQlvdXRwdXQ6IDQ5CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBLVk0gb24gczM5MCBBcmNoaXRlY3R1cmUqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggbWVtb3J5IHJlZ2lvbnMgdW5kZXIgS1ZNLCBzcGVjaWZpY2FsbHkgb24gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBmdW5jdGlvbiBJJiMzOTttIGludGVyZXN0ZWQgaW4gaXMgYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYC4gSSByZWNhbGwgaXQgYmVpbmcgZGVmaW5lZCBpbiBgYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jYCwgc28gdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBzdGFydC4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSB0aGUga2V5IHBpZWNlIGluIGFwcGx5aW5nIHVwZGF0ZXMgcmVsYXRlZCB0byBtZW1vcnkgdG8gdGhlIHN5c3RlbSBmb3IgdGhlIHZpcnR1YWwgbWFjaGluZXMuIEl0JiMzOTtzIGxpa2VseSBoYW5kbGluZyB0aGUgYWN0dWFsIGNvbW1pdG1lbnQgb2YgY2hhbmdlcyB0byB0aGUgZ3Vlc3QmIzM5O3MgbWVtb3J5IG1hcCBvciBzb21lIG90aGVyIGFyY2gtc3BlY2lmaWMgbWVtb3J5IG1hbmFnZW1lbnQgc3RydWN0dXJlIHdpdGhpbiB0aGUgS1ZNIGZyYW1ld29yay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtZW1vcnkgcmVnaW9uIGlzIGRlc2NyaWJlZCwgaG93IHRoZSBjb21taXQgYWN0dWFsbHkgaGFwcGVucyBhdCB0aGUgczM5MCBsZXZlbCwgYW5kIHdoYXQgaW1wbGljYXRpb25zIHRoZSBjb21taXQgaGFzIG9uIHRoZSByZXN0IG9mIHRoZSBLVk0gaW5mcmFzdHJ1Y3R1cmUuIFRoaXMgbWlnaHQgaW52b2x2ZSBsb29raW5nIGF0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBNTVUsIGhvdyBpdCBoYW5kbGVzIG1lbW9yeSBwcm90ZWN0aW9uLCBvciBldmVuIGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCBwYWdlIHNpemVzIGFuZCBtZW1vcnkgdHlwZXMgb24gdGhlIHMzOTAuIEkmIzM5O20gZXhwZWN0aW5nIGEgbG93LWxldmVsLCBwZXJmb3JtYW5jZS1jcml0aWNhbCBpbnRlcmFjdGlvbiBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTgwNz1zdGF0aWMgbG9uZyBjbW1hX2RfY291bnRfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU4MTktXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTgyMDp2b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01ODIxLVx0XHRcdFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqb2xkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDY0NwoJCQkJCQkJb3V0cHV0OiA1MgoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgYnJlYWtkb3duIG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEtWTSBTMzkwIE1pZ3JhdGlvbiBDb2RlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgbXkgaGVhZCBhcm91bmQgaG93IG1pZ3JhdGlvbiBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgS1ZNIHMzOTAgYXJjaGl0ZWN0dXJlLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIGBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uYCBsb2NhdGVkIGluIGBhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNgLiBUaGF0IGZ1bmN0aW9uIG5hbWUgaXRzZWxmIGlzIGEgcHJldHR5IGdvb2QgaW5kaWNhdG9yIG9mIHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBtaWdyYXRpb24gaW5pdGlhbGl6YXRpb24vY29uZmlndXJhdGlvbiBtaWdodCByZXNpZGUuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgdGhlIGNvcmUgZnVuY3Rpb24gd2hlcmUgdGhlIHByb2Nlc3MgaXMgc2V0IHVwLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBob3cgdGhlIHN0YXRlIGlzIGNhcHR1cmVkLCB0cmFuc2ZlcnJlZCwgYW5kIHJlc3RvcmVkLCBvciBhdCBsZWFzdCB0aGUgaW5pdGlhbCBzdGVwcyBvZiB0aGUgcHJvY2Vzcy4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQ7IHBhcnRpY3VsYXJseSBhbnkgUzM5MC1zcGVjaWZpYyBzdHJ1Y3R1cmVzLCByZWdpc3RlcnMgb3IgYXJjaGl0ZWN0dXJhbCBjb25zaWRlcmF0aW9ucyB0aGF0IGluZmx1ZW5jZSB0aGUgbWlncmF0aW9uIGZsb3cuIExldCYjMzk7cyBnZXQgcmVhZGluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MTI3MT1zdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTI5Ny1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoxMjk4OnN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTI5OS1cdFx0XHRcdCAgICAgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjA0ND1zdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3NldF9hdHRyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjA2MS1cdGNhc2UgS1ZNX1MzOTBfVk1fTUlHUkFUSU9OOlxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjIwNjI6XHRcdHJldCA9IGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb24oa3ZtLCBhdHRyKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMDYzLVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzMDUKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHlvdSBkZXNjcmliZWQ6CgoqKkV4YW1pbmluZyB0aGUgYGt2bV9zMzkwX2tleW9wYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBndXRzIG9mIHRoZSBLVk0gUzM5MCBjb2RlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGt2bV9zMzkwX2tleW9wYCBmdW5jdGlvbi4gSSYjMzk7bSBoZWFkaW5nIHN0cmFpZ2h0IHRvIGBhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNgIHRvIGZpbmQgaXQuIFRoaXMgZnVuY3Rpb24gaGFzIGxpa2VseSBiZWVuIGZsYWdnZWQsIG9yIEkgaGF2ZSBhIHF1ZXN0aW9uIGFib3V0IGl0cyBvcGVyYXRpb24sIGFuZCBuZWVkcyB0byBiZSBhbmFseXplZCBpbiBkZXRhaWwuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBvcGVyYXRpb25zIHJlbGF0ZWQgdG8ga2V5IGhhbmRsaW5nIG9yIHNvbWUgc2VjdXJpdHkgYXNwZWN0IHdpdGhpbiB0aGUgUzM5MCBhcmNoaXRlY3R1cmUmIzM5O3MgS1ZNIGltcGxlbWVudGF0aW9uLiBUaGlzIGNvdWxkIGJlIGFueXRoaW5nIGZyb20gY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb25zIHRvIG1hbmFnaW5nIGFjY2VzcyBjb250cm9sLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udHJvbCBmbG93LCB0aGUgZGF0YSBpdCBvcGVyYXRlcyBvbiwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBLVk0gZnJhbWV3b3JrLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIHRoZSBTMzkwIGhhcmR3YXJlLiBJJiMzOTttIGFudGljaXBhdGluZyBzb21lIFMzOTAtc3BlY2lmaWMgcmVnaXN0ZXIgdXNhZ2Ugb3IgcGVyaGFwcyBpbnRlcmFjdGlvbnMgd2l0aCBoYXJkd2FyZSBzZWN1cml0eSBtb2R1bGVzLCBhbmQgSSYjMzk7bSByZWFkeSB0byBwZWVsIGJhY2sgdGhlIGxheWVycyB0byB1bmRlcnN0YW5kIGhvdyBpdCBhbGwgZml0cyB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3MzOTBfa2V5b3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU1MD1zdGF0aWMgdm9pZCBfX2t2bV9zMzkwX2V4aXQodm9pZClcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTYxLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU2MjpzdGF0aWMgaW50IGt2bV9zMzkwX2tleW9wKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3Qga3ZtICprdm0sIGludCBvcCxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NjMtXHRcdFx0ICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuaW9uIHNrZXkgc2tleSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjkyNj1pbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMwNTgtXHRcdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMwNTk6XHRcdHN0cnVjdCBrdm1fczM5MF9rZXlvcCBrb3A7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzA2MC1cdFx0dW5pb24gc2tleSBza2V5O1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMDcxLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMwNzI6XHRcdHIgPSBrdm1fczM5MF9rZXlvcChtYywga3ZtLCBrb3Aub3BlcmF0aW9uLCBrb3AuZ3Vlc3RfYWRkciwgc2tleSk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzA3My1cdFx0a3ZtX3MzOTBfZnJlZV9tbXVfY2FjaGUobWMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjEyMQoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDE1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtWTSBzMzkwIEFyY2hpdGVjdHVyZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYGt2bV9hcmNoX3ZtX2lvY3RsYCBpcyB0aGUga2V5IGVudHJ5IHBvaW50IGZvciBga3ZtX3MzOTBfa2V5b3BgLiBUaGF0JiMzOTtzIHdoZXJlIHdlIHN0YXJ0LiBOb3csIHRoaW5raW5nIGFib3V0IHRoZSBjb3JlIGZ1bmN0aW9uYWxpdGllcywgbXkgYXR0ZW50aW9uIGlzIGRyYXduIHRvIGEgc3BlY2lmaWMgc2V0IG9mIGZ1bmN0aW9uczogYGt2bV9hcmNoX3ZjcHVfY3JlYXRlYCwgYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYCwgYGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25gLCBga3ZtX3MzOTBfa2V5b3BgIChvYnZpb3VzbHkhKSwgYGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVgLCBhbmQgYGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1YC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgSSBuZWVkIHRvIGRpc3NlY3QgZnVydGhlciB0byBmdWxseSBncmFzcCB0aGUgczM5MCBhcmNoaXRlY3R1cmUgd2l0aGluIEtWTS4KCkdpdmVuIHRoZWlyIGNvbnRleHQsIGl0JiMzOTtzIGFsc28gaW1wb3J0YW50IHRvIGhhdmUgYSBsb29rIGF0IGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAgYW5kIGBrdm1fYXJjaF92Y3B1X2lvY3RsYCB0byBnZXQgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb250cm9sIGZsb3cuIEkgbmVlZCB0byBzZWUgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoIHRoZSBvbmVzIEkmIzM5O3ZlIGxpc3RlZC4gVGhpcyBpcyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciBhIGRlZXBlciBkaXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fYXJjaF92Y3B1X2lvY3RsX3J1biYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzYwMT12b2lkIGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM2MTYtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzYxNzpcdC8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKCkgYW5kIGt2bV9hcmNoX3ZjcHVfaW9jdGwoKSAqL1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM2MTgtXHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaW5pdGlhbGl6ZWQsIHRydWUpO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01MDAxPXN0YXRpYyB2b2lkIHN0b3JlX3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01MDIxLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjUwMjI6aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01MDIzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY5MjYKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggYGt2bV9hcmNoX3ZjcHVfaW9jdGxgLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZSwgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEtWTSBBcmNoaXRlY3R1cmFsIFZDUFUgaW9jdGwqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIGRvd24gYGt2bV9hcmNoX3ZjcHVfaW9jdGxgLiBJbW1lZGlhdGVseSwgSSBzZWUgdGhpcyBhcyBhIGNyaXRpY2FsIGVudHJ5IHBvaW50IGZvciBhcmNoaXRlY3R1cmFsIGludGVyYWN0aW9ucyB3aXRoaW4gYSBLVk0gdmlydHVhbCBDUFUuIFRoaXMgZnVuY3Rpb24sIEkgc3VybWlzZSwgaGFuZGxlcyB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlIGh5cGVydmlzb3ImIzM5O3MgZ2VuZXJpYyBWQ1BVIG1hbmFnZW1lbnQgYW5kIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgcmVxdWlyZW1lbnRzIG9mIHRoZSBndWVzdC4gVGhhdCBtZWFucyB0aGlzIGlzIHdoZXJlIHRoZSAqcmVhbCogbWFnaWMgaGFwcGVucywgd2hlcmUgdGhlIEtWTSBjb2RlIGFkYXB0cyB0byB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBhcmNoaXRlY3R1cmUgYW5kIGl0cyBudWFuY2VzLgoKTXkgaW1tZWRpYXRlIGFzc3VtcHRpb24gaXMgdGhhdCB0aGlzIGlvY3RsIGhhbmRsZXIgYWN0cyBhcyBhIGNlbnRyYWwgZGlzcGF0Y2hlci4gSXQmIzM5O3MgdGhlIGdhdGVrZWVwZXIsIHJlY2VpdmluZyBpb2N0bCBjb21tYW5kcyBmcm9tIHRoZSB1c2VyIHNwYWNlIChvciBmcm9tIEtWTSYjMzk7cyBvd24gaW50ZXJuYWwgY29tcG9uZW50cywgZm9yIHNvbWUgY29tbWFuZHMpLiBCYXNlZCBvbiB0aGUgc3BlY2lmaWMgY29tbWFuZCBjb2RlIHByb3ZpZGVkIGluIHRoZSBgaW9jdGxgIGNhbGwsIGl0IHRoZW4gZmlndXJlcyBvdXQgd2hhdCBhcmNoaXRlY3R1cmFsIGFjdGlvbiBuZWVkcyB0byBiZSB0YWtlbi4gVGhpcyBjb3VsZCByYW5nZSBmcm9tIGNvbmZpZ3VyaW5nIHNwZWNpZmljIENQVSBmZWF0dXJlcyB0byBoYW5kbGluZyBndWVzdCBtZW1vcnkgbWFuYWdlbWVudCBpbiBhbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgd2F5LgoKSSBiZXQgaXQgaGFzIGEgbGFyZ2UgYHN3aXRjaGAgc3RhdGVtZW50IG9yIGEgbG9va3VwIHRhYmxlLCBlc3NlbnRpYWxseSBhICYjMzQ7Y2FzZSYjMzQ7IHN0YXRlbWVudCwgdGhhdCBtYXBzIHRoZSBpb2N0bCBjb21tYW5kIHRvIHRoZSByZWxldmFudCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZnVuY3Rpb24uIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpbmdzIGxpa2UgaW50ZXJjZXB0aW5nIGFuZCBlbXVsYXRpbmcgc3BlY2lhbCBpbnN0cnVjdGlvbnMsIG1hbmFnaW5nIGNvbnRyb2wgcmVnaXN0ZXJzLCBoYW5kbGluZyBtb2RlbC1zcGVjaWZpYyByZWdpc3RlcnMgKE1TUnMpLCBwZXJoYXBzIHNldHRpbmcgdXAgbmVzdGVkIHBhZ2luZyBzdHJ1Y3R1cmVzIGlmIGFwcHJvcHJpYXRlLCBvciBldmVuIG1hbmFnaW5nIHNwZWNpZmljIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgdW5pdHMuCgpGdXJ0aGVybW9yZSwgSSBleHBlY3Qgc3Ryb25nIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zIGFyZSBlbXBsb3llZCBoZXJlLiBUaGlzIGZ1bmN0aW9uIGlzIHVuZG91YnRlZGx5IG11bHRpLXRocmVhZGVkOyBpdCYjMzk7cyBhIGNyaXRpY2FsIHNlY3Rpb24gd2l0aGluIEtWTS4gSSYjMzk7ZCBleHBlY3QgbG9ja3Mgb3IgYXRvbWljIG9wZXJhdGlvbnMgdG8gZW5zdXJlIGRhdGEgY29uc2lzdGVuY3ksIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggc2hhcmVkIFZDUFUgc3RhdGUuIFRoaXMgd291bGQgYmUgbmVjZXNzYXJ5IHRvIHByb3RlY3QgdGhlIFZDUFUgc3RhdGUgZnJvbSBzaW11bHRhbmVvdXMgYWNjZXNzZXMgYnkgZGlmZmVyZW50IHRocmVhZHMgb3IgZXZlbiBkaWZmZXJlbnQgdkNQVXMuIEFsc28sIHRoZXJlJiMzOTtzIGFsd2F5cyB0aGUgY29uY2VybiBvZiBkZWFkbG9ja3Mgd2hlbiBkZWFsaW5nIHdpdGggc3luY2hyb25pemF0aW9uIGFuZCBuZXN0ZWQgb3BlcmF0aW9ucywgc28gdGhlcmUgd2lsbCBuZWVkIHRvIGJlIHdlbGwtY29uc2lkZXJlZCBsb2NrIG9yZGVyaW5nLgoKQWxzbywgdGhlIGVycm9yIGhhbmRsaW5nLCBJIGltYWdpbmUsIGlzIGEgY29tcGxleCBhZmZhaXIsIGdpdmVuIHRoZSBpbnRyaWNhdGUgbmF0dXJlIG9mIHRoZSBwb3NzaWJsZSBmYWlsdXJlIG1vZGVzLiBJIG5lZWQgdG8gaGFuZGxlIGJvdGggZ2VuZXJhbCBLVk0gZXJyb3JzIGFuZCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZXJyb3JzLCBhbmQgdGhlbiB0cmFuc2xhdGUgdGhlbSBiYWNrIGludG8gdXNlci1mcmllbmRseSBlcnJvciBjb2RlcyBvciBpbmZvcm1hdGlvbiB0aGF0IGNhbiBiZSBsb2dnZWQgZWZmZWN0aXZlbHkuCgpUaGUgZGVzaWduIG9mIGBrdm1fYXJjaF92Y3B1X2lvY3RsYCBzaG91bGQgYmUgbW9kdWxhciwgY2xlYXJseS4gSSBob3BlIHRvIHNlZSBpdCBpcyB3ZWxsLXN0cnVjdHVyZWQgaW4gb3JkZXIgdG8gYWxsb3cgY2xlYW4gc2VwYXJhdGlvbiBvZiBjb25jZXJuIGFuZCBlYXNpZXIgbWFpbnRlbmFuY2UsIHdpdGggc3BlY2lmaWMgaGFuZGxlcnMgZm9yIGRpZmZlcmVudCBpb2N0bCBvcGVyYXRpb25zLCBlYWNoIHRhaWxvcmVkIHRvIHRoZSBhcmNoaXRlY3R1cmFsIG5lZWRzLiBUaGlzIGZ1bmN0aW9uLCB3aGVuIGRvbmUgcmlnaHQsIGlzIGEgbWFzdGVycGllY2Ugb2YgYWJzdHJhY3Rpb24sIGJyaWRnaW5nIHRoZSBnZW5lcmFsIEtWTSBjb3JlIHdpdGggdGhlIGlkaW9zeW5jcmFzaWVzIG9mIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2FyY2hfdmNwdV9pb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzYwMT12b2lkIGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM2MTYtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzYxNzpcdC8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKCkgYW5kIGt2bV9hcmNoX3ZjcHVfaW9jdGwoKSAqL1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM2MTgtXHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaW5pdGlhbGl6ZWQsIHRydWUpO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0zOTQ5PWludCBrdm1fYXJjaF92Y3B1X3Nob3VsZF9raWNrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzk1NS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozOTU2OnN0YXRpYyBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfb25lX3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzk1Ny1cdFx0XHRcdFx0ICAgc3RydWN0IGt2bV9vbmVfcmVnICpyZWcpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQwMDQtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDAwNTpzdGF0aWMgaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X29uZV9yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQwMDYtXHRcdFx0XHRcdCAgIHN0cnVjdCBrdm1fb25lX3JlZyAqcmVnKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MDU3LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQwNTg6c3RhdGljIHZvaWQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ub3JtYWxfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQwNTkte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MDY5LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQwNzA6c3RhdGljIHZvaWQga3ZtX2FyY2hfdmNwdV9pb2N0bF9pbml0aWFsX3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MDcxLXtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MDcyLVx0LyogSW5pdGlhbCByZXNldCBpcyBhIHN1cGVyc2V0IG9mIHRoZSBub3JtYWwgcmVzZXQgKi9cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MDczOlx0a3ZtX2FyY2hfdmNwdV9pb2N0bF9ub3JtYWxfcmVzZXQodmNwdSk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDA3NC1cbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDExMy1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MTE0OnN0YXRpYyB2b2lkIGt2bV9hcmNoX3ZjcHVfaW9jdGxfY2xlYXJfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQxMTUte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTE4LVx0LyogQ2xlYXIgcmVzZXQgaXMgYSBzdXBlcnNldCBvZiB0aGUgaW5pdGlhbCByZXNldCAqL1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQxMTk6XHRrdm1fYXJjaF92Y3B1X2lvY3RsX2luaXRpYWxfcmVzZXQodmNwdSk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDEyMC1cbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDEyOS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MTMwOmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9yZWdzICpyZWdzKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQxMzEte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTM3LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQxMzg6aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZ2V0X3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3JlZ3MgKnJlZ3MpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDEzOS17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQxNDUtXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDE0NjppbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfc3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQxNDctXHRcdFx0XHQgIHN0cnVjdCBrdm1fc3JlZ3MgKnNyZWdzKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTU3LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQxNTg6aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZ2V0X3NyZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTU5LVx0XHRcdFx0ICBzdHJ1Y3Qga3ZtX3NyZWdzICpzcmVncylcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDE2OS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MTcwOmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9mcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2ZwdSAqZnB1KVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQxNzEte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTg0LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQxODU6aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZ2V0X2ZwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZnB1ICpmcHUpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDE4Ni17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQxOTktXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDIwMDpzdGF0aWMgaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X2luaXRpYWxfcHN3KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgcHN3X3QgcHN3KVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQyMDEte1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MjEyLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQyMTM6aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfdHJhbnNsYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MjE0LVx0XHRcdFx0ICBzdHJ1Y3Qga3ZtX3RyYW5zbGF0aW9uICp0cilcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDIyMi1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MjIzOmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9ndWVzdF9kZWJ1ZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDIyNC1cdFx0XHRcdFx0c3RydWN0IGt2bV9ndWVzdF9kZWJ1ZyAqZGJnKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MjY0LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQyNjU6aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZ2V0X21wc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQyNjYtXHRcdFx0XHQgICAgc3RydWN0IGt2bV9tcF9zdGF0ZSAqbXBfc3RhdGUpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQyNzktXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDI4MDppbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfbXBzdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDI4MS1cdFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX21wX3N0YXRlICptcF9zdGF0ZSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTAwMT1zdGF0aWMgdm9pZCBzdG9yZV9yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTAyMS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1MDIyOmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTAyMy17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU0ODE9c3RhdGljIGludCBrdm1fczM5MF9oYW5kbGVfcHZfdmNwdV9kdW1wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTUyMi1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1NTIzOmxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NTI0LVx0XHRcdCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NTQ5LVx0XHRcdGJyZWFrO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU1NTA6XHRcdHIgPSBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9pbml0aWFsX3Bzdyh2Y3B1LCBwc3cpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU1NTEtXHRcdGJyZWFrO1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NTU0LVx0XHRyID0gMDtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1NTU1Olx0XHRrdm1fYXJjaF92Y3B1X2lvY3RsX2NsZWFyX3Jlc2V0KHZjcHUpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU1NTYtXHRcdGlmIChrdm1fczM5MF9wdl9jcHVfaXNfcHJvdGVjdGVkKHZjcHUpKSB7XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU1NjQtXHRcdHIgPSAwO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU1NjU6XHRcdGt2bV9hcmNoX3ZjcHVfaW9jdGxfaW5pdGlhbF9yZXNldCh2Y3B1KTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NTY2LVx0XHRpZiAoa3ZtX3MzOTBfcHZfY3B1X2lzX3Byb3RlY3RlZCh2Y3B1KSkge1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NTc1LVx0XHRyID0gMDtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1NTc2Olx0XHRrdm1fYXJjaF92Y3B1X2lvY3RsX25vcm1hbF9yZXNldCh2Y3B1KTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NTc3LVx0XHRpZiAoa3ZtX3MzOTBfcHZfY3B1X2lzX3Byb3RlY3RlZCh2Y3B1KSkge1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NTkzLVx0XHRpZiAoaW9jdGwgPT0gS1ZNX1NFVF9PTkVfUkVHKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU1OTQ6XHRcdFx0ciA9IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X29uZV9yZWcodmNwdSwgXHUwMDI2cmVnKTtcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NTk1LVx0XHRlbHNlXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTU5NjpcdFx0XHRyID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfb25lX3JlZyh2Y3B1LCBcdTAwMjZyZWcpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU1OTctXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDg3MwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNIEVudHJ5IFBvaW50cyBmb3IgUzM5MCBBcmNoaXRlY3R1cmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBrZXkgZW50cnkgcG9pbnRzIGZvciBLVk0gb24gdGhlIFMzOTAgYXJjaGl0ZWN0dXJlLiBJbml0aWFsbHksIEkgam90dGVkIGRvd24gYGt2bV9hcmNoX3ZjcHVfaW9jdGxgIGFuZCBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gLiBIbW0sIG9uIHNlY29uZCB0aG91Z2h0LCBga3ZtX2FyY2hfdmNwdV9pb2N0bGAgaXMgYSBiaXQgdG9vIGdlbmVyaWMsIGEgc3RhbmRhcmQgS1ZNIEFQSSBmdW5jdGlvbi4gSXQmIzM5O3Mgbm90ICp3cm9uZyogdG8gbGlzdCBpdCwgYnV0IGl0IG1pZ2h0IG5vdCBiZSB0aGUgbW9zdCBzcGVjaWZpYyBvciBpbnRlcmVzdGluZyBvbmUgaW4gdGhpcyBjb250ZXh0LgoKTm93LCBga3ZtX2FyY2hfdmNwdV9jcmVhdGVgIOKAkyB0aGF0JiMzOTtzIGEgZ29vZCBvbmUsIHRoYXQmIzM5O3MgZXhhY3RseSB0aGUga2luZCBvZiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZW50cnkgcG9pbnQgSSYjMzk7bSBhZnRlci4gU2ltaWxhcmx5LCBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gIGlzIGRlZmluaXRlbHkgcmVsZXZhbnQuIEFuZCBtb3Zpbmcgb24gdG8gUzM5MCBzcGVjaWZpY3MsIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YCBhbmQgYGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1YCBhcmUgZXhjZWxsZW50IGNob2ljZXMg4oCTIHRoZXkmIzM5O3JlIGNvcmUgdG8gdGhlIHBvd2VyIHZpcnR1YWxpemF0aW9uIGFzcGVjdC4gIGBrdm1fczM5MF9rZXlvcGAgYWxzbyBzZWVtcyByZWxldmFudC4gVGhlbiB0aGVyZSYjMzk7cyBga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbmAgLSB5ZXMsIHRoYXQmIzM5O3MgZ29vZCB0b28sIGZvciBtaWdyYXRpb24gaGFuZGxpbmcuCgpMZXQmIzM5O3Mgbm93IGRpZyBkZWVwZXIsIEkgd2lsbCBjaGVjayBpbiBgYXJjaC9zMzkwL2t2bS9wcml2LmNgIHRvIHNlZSBpZiBJIGNhbiBmaW5kIGBoYW5kbGVfcnJiZWAgb3IgYGhhbmRsZV9lc3NhYC4gSSYjMzk7bSB0cnlpbmcgdG8gZ2V0IGEgZnVsbCBwaWN0dXJlIG9mIHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgZHJpdmUgdGhlIFMzOTAgS1ZNIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoYW5kbGVfcnJiZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vcHJpdi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vcHJpdi5jPTI1Nz1zdGF0aWMgaW50IGhhbmRsZV9pc2tlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0yODgtXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzoyODk6c3RhdGljIGludCBoYW5kbGVfcnJiZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0yOTAte1xuLS1cbmFyY2gvczM5MC9rdm0vcHJpdi5jPTk1OT1pbnQga3ZtX3MzOTBfaGFuZGxlX2IyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy05NzktXHRjYXNlIDB4MmE6XG5hcmNoL3MzOTAva3ZtL3ByaXYuYzo5ODA6XHRcdHJldHVybiBoYW5kbGVfcnJiZSh2Y3B1KTtcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTk4MS1cdGNhc2UgMHgyYjpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE3MjIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiAmIzM5O2hhbmRsZV9ycmJlJiMzOTsqKgoKQWxyaWdodCwgbG9va2luZyBhdCB0aGF0IGZ1bmN0aW9uIG5hbWUsIGBoYW5kbGVfcnJiZWAsIG15IGltbWVkaWF0ZSBhc3Nlc3NtZW50IGlzIHRoYXQgaXQgc2hvd3MgcHJvbWlzZSBhcyBhIGZvY3VzZWQgZnVuY3Rpb24uIFRoZSBuYW1lIGl0c2VsZiBzdWdnZXN0cyBhIGRpc3RpbmN0IGFuZCBsaWtlbHkgaW1wb3J0YW50IHJlc3BvbnNpYmlsaXR5IHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0uIEkmIzM5O20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggcG90ZW50aWFsIHNjZW5hcmlvcyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBzZWUgdGhpcyBmdW5jdGlvbiB1c2VkLiBCYXNlZCBvbiB0aGUgbmFtZSBhbG9uZSwgSSYjMzk7bSBpbmZlcnJpbmcgaXQgcHJvYmFibHkgcGxheXMgYSBjcnVjaWFsIHJvbGUgaW4gbWFuYWdpbmcgc29tZSBhc3BlY3Qgb2YsIHBvc3NpYmx5IHJlbGF0ZWQgdG8gcmVzb3VyY2UgcmViYWxhbmNpbmcsIGRhdGEgdmFsaWRhdGlvbiwgb3IgZXh0ZXJuYWwgaW50ZXJmYWNlcy4gVGhlICYjMzQ7UlImIzM0OyBwb3RlbnRpYWxseSBzdGFuZHMgZm9yICYjMzQ7UmVzb3VyY2UgUmViYWxhbmNpbmcmIzM0OyBvciAmIzM0O1JlbGlhYmxlIFJlbW90ZSYjMzQ7LCB0aGUgJiMzNDtCRSYjMzQ7IGlzIGxpa2VseSAmIzM0O0JhY2tlbmQmIzM0OyBvciAmIzM0O0J1c2luZXNzIEVudGl0eSYjMzQ7LiBGdXJ0aGVyIGludmVzdGlnYXRpb24gd291bGQgYmUgbmVlZGVkIG9mIGNvdXJzZSwgYnV0IHRoZSBuYW1lIGlzIHF1aXRlIHRlbGxpbmcgYW5kIHByb3ZpZGVzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYSBkZWVwZXIgZGl2ZS4gVGhlIGZhY3QgdGhhdCBzb21lb25lIGhhcyBpZGVudGlmaWVkIHRoaXMgZnVuY3Rpb24gdG8gcmV2aWV3IGlzIGEgZ29vZCBpbmRpY2F0b3Igb2YgaXRzIHNpZ25pZmljYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGFuZGxlX2Vzc2EmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL3ByaXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL3ByaXYuYz0xMTkxPXN0YXRpYyB2b2lkIF9lc3NhX2NsZWFyX2Nicmwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nICpjYnJsLCBpbnQgbGVuKVxuLS1cbmFyY2gvczM5MC9rdm0vcHJpdi5jLTEyMTYtXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzoxMjE3OnN0YXRpYyBpbnQgaGFuZGxlX2Vzc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTIxOC17XG4tLVxuYXJjaC9zMzkwL2t2bS9wcml2LmM9MTI4ND1pbnQga3ZtX3MzOTBfaGFuZGxlX2I5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy0xMjkzLVx0Y2FzZSAweGFiOlxuYXJjaC9zMzkwL2t2bS9wcml2LmM6MTI5NDpcdFx0cmV0dXJuIGhhbmRsZV9lc3NhKHZjcHUpO1xuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTI5NS1cdGNhc2UgMHhhZjpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIyNTMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRm9jdXNpbmcgb24gSW50ZXJydXB0IEluamVjdGlvbiBpbiB0aGUgczM5MCBLVk0gQ29udGV4dCoqCgpSaWdodCwgYGhhbmRsZV9lc3NhYCBpcyBkZWZpbml0ZWx5IGFub3RoZXIgc3Ryb25nIGNhbmRpZGF0ZSBmb3IgYSBmb2N1c2VkIGZ1bmN0aW9uIGhlcmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBjb25zaWRlcmluZyBhbGwgcmVsZXZhbnQgZW50cnkgcG9pbnRzLiBPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29kZSBub3cuIE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBhcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGluamVjdGlvbiBhbmQgY2xlYXJpbmcgbWVjaGFuaXNtcyBmb3IgZXh0ZXJuYWwgY2FsbHMgd2l0aGluIHRoZSBzMzkwIEtWTSBlbnZpcm9ubWVudC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgYHNjYV9pbmplY3RfZXh0X2NhbGxgIGFuZCBgc2NhX2NsZWFyX2V4dF9jYWxsYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgaHlwZXJ2aXNvciBpbnRlcmFjdHMgd2l0aCBndWVzdHMgcmVnYXJkaW5nIGV4dGVybmFsIGludGVycnVwdHMgYW5kIGV2ZW50cywgYW5kIHNob3VsZCBwcm92aWRlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgZXNzYSBpcyBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzY2FfaW5qZWN0X2V4dF9jYWxsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTQ1PXN0YXRpYyBpbnQgc2NhX2V4dF9jYWxsX3BlbmRpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgKnNyY19pZClcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTYyLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzo2MzpzdGF0aWMgaW50IHNjYV9pbmplY3RfZXh0X2NhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc3JjX2lkKVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy02NC17XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0xNTA1PXN0YXRpYyBpbnQgX19pbmplY3RfZXh0Y2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9pcnEgKmlycSlcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE1MjEtXHRpZiAoa3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkgXHUwMDI2XHUwMDI2ICFrdm1fczM5MF9wdl9jcHVfZ2V0X2hhbmRsZSh2Y3B1KSlcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTUyMjpcdFx0cmV0dXJuIHNjYV9pbmplY3RfZXh0X2NhbGwodmNwdSwgc3JjX2lkKTtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTUyMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI4NDMKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDoKCioqQ29uc2lkZXJpbmcgdGhlIEJlc3QgQXBwcm9hY2ggZm9yIEV4dGVybmFsIENhbGxzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgd2UmIzM5O3JlIGhhbmRsaW5nIHRoZXNlIGV4dGVybmFsIGNhbGxzLCBhbmQgSSYjMzk7bSByZWFsaXppbmcgYHNjYV9pbmplY3RfZXh0X2NhbGxgIGlzIHN0YXRpYy4gVGhhdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayB3ZSBjYW4gcHJvYmFibHkgZG8gYmV0dGVyLiBMZXQmIzM5O3Mgc2VlLi4uIG1heWJlIGBfX2luamVjdF9leHRjYWxsYCBvciBga3ZtX3MzOTBfaW5qZWN0X3ZjcHVgIHdvdWxkIGJlIG1vcmUgYXBwcm9wcmlhdGUuIEJ1dCBoYW5nIG9uLCBgX19pbmplY3RfZXh0Y2FsbGAgaXMgYWxzbyBzdGF0aWMhIEFscmlnaHQsIHNlZW1zIGxpa2UgdGhlIG9wdGlvbnMgYXJlIG5hcnJvd2luZy4gTGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBga3ZtX3MzOTBfaW5qZWN0X3ZjcHVgLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoYXQgb25lIGFuZCBzZWUgaWYgaXQmIzM5O3MgdGhlIHJpZ2h0IGZpdCBmb3IgdGhlIGpvYi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3MzOTBfaW5qZWN0X3ZjcHUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MTQ0Nj1zdGF0aWMgaW50IF9faW5qZWN0X3Byb2coc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfaXJxICppcnEpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNDUxLVx0VkNQVV9FVkVOVCh2Y3B1LCAzLCBcJiMzNDtpbmplY3Q6IHByb2dyYW0gaXJxIGNvZGUgMHgleFwmIzM0OywgaXJxLVx1MDAzZXUucGdtLmNvZGUpO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxNDUyOlx0dHJhY2Vfa3ZtX3MzOTBfaW5qZWN0X3ZjcHUodmNwdS1cdTAwM2V2Y3B1X2lkLCBLVk1fUzM5MF9QUk9HUkFNX0lOVCxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTQ1My1cdFx0XHRcdCAgIGlycS1cdTAwM2V1LnBnbS5jb2RlLCAwKTtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTE0ODg9c3RhdGljIGludCBfX2luamVjdF9wZmF1bHRfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9pcnEgKmlycSlcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE0OTQtXHRcdCAgIGlycS1cdTAwM2V1LmV4dC5leHRfcGFyYW1zMik7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjE0OTU6XHR0cmFjZV9rdm1fczM5MF9pbmplY3RfdmNwdSh2Y3B1LVx1MDAzZXZjcHVfaWQsIEtWTV9TMzkwX0lOVF9QRkFVTFRfSU5JVCxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTQ5Ni1cdFx0XHRcdCAgIGlycS1cdTAwM2V1LmV4dC5leHRfcGFyYW1zLFxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MTUwNT1zdGF0aWMgaW50IF9faW5qZWN0X2V4dGNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfaXJxICppcnEpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNTEzLVx0XHQgICBzcmNfaWQpO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxNTE0Olx0dHJhY2Vfa3ZtX3MzOTBfaW5qZWN0X3ZjcHUodmNwdS1cdTAwM2V2Y3B1X2lkLCBLVk1fUzM5MF9JTlRfRVhURVJOQUxfQ0FMTCxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTUxNS1cdFx0XHRcdCAgIHNyY19pZCwgMCk7XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0xNTMxPXN0YXRpYyBpbnQgX19pbmplY3Rfc2V0X3ByZWZpeChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9pcnEgKmlycSlcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE1MzgtXHRcdCAgIGlycS1cdTAwM2V1LnByZWZpeC5hZGRyZXNzKTtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTUzOTpcdHRyYWNlX2t2bV9zMzkwX2luamVjdF92Y3B1KHZjcHUtXHUwMDNldmNwdV9pZCwgS1ZNX1MzOTBfU0lHUF9TRVRfUFJFRklYLFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNTQwLVx0XHRcdFx0ICAgaXJxLVx1MDAzZXUucHJlZml4LmFkZHJlc3MsIDApO1xuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MTU1MT1zdGF0aWMgaW50IF9faW5qZWN0X3NpZ3Bfc3RvcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9pcnEgKmlycSlcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE1NTctXHR2Y3B1LVx1MDAzZXN0YXQuaW5qZWN0X3N0b3Bfc2lnbmFsJiM0MzsmIzQzOztcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTU1ODpcdHRyYWNlX2t2bV9zMzkwX2luamVjdF92Y3B1KHZjcHUtXHUwMDNldmNwdV9pZCwgS1ZNX1MzOTBfU0lHUF9TVE9QLCAwLCAwKTtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTU1OS1cbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTE1Nzc9c3RhdGljIGludCBfX2luamVjdF9zaWdwX3Jlc3RhcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTU4Mi1cdFZDUFVfRVZFTlQodmNwdSwgMywgXCYjMzQ7JXNcJiMzNDssIFwmIzM0O2luamVjdDogcmVzdGFydCBpbnRcJiMzNDspO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxNTgzOlx0dHJhY2Vfa3ZtX3MzOTBfaW5qZWN0X3ZjcHUodmNwdS1cdTAwM2V2Y3B1X2lkLCBLVk1fUzM5MF9SRVNUQVJULCAwLCAwKTtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTU4NC1cbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTE1ODk9c3RhdGljIGludCBfX2luamVjdF9zaWdwX2VtZXJnZW5jeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNTk2LVx0XHQgICBpcnEtXHUwMDNldS5lbWVyZy5jb2RlKTtcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTU5NzpcdHRyYWNlX2t2bV9zMzkwX2luamVjdF92Y3B1KHZjcHUtXHUwMDNldmNwdV9pZCwgS1ZNX1MzOTBfSU5UX0VNRVJHRU5DWSxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTU5OC1cdFx0XHRcdCAgIGlycS1cdTAwM2V1LmVtZXJnLmNvZGUsIDApO1xuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MTYxMD1zdGF0aWMgaW50IF9faW5qZWN0X21jaGsoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfaXJxICppcnEpXG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNjE3LVx0XHQgICBpcnEtXHUwMDNldS5tY2hrLm1jaWMpO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxNjE4Olx0dHJhY2Vfa3ZtX3MzOTBfaW5qZWN0X3ZjcHUodmNwdS1cdTAwM2V2Y3B1X2lkLCBLVk1fUzM5MF9NQ0hLLCAwLFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNjE5LVx0XHRcdFx0ICAgaXJxLVx1MDAzZXUubWNoay5tY2ljKTtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTE2NDI9c3RhdGljIGludCBfX2luamVjdF9ja2Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTY0Ny1cdFZDUFVfRVZFTlQodmNwdSwgMywgXCYjMzQ7JXNcJiMzNDssIFwmIzM0O2luamVjdDogY2xvY2sgY29tcGFyYXRvciBleHRlcm5hbFwmIzM0Oyk7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjE2NDg6XHR0cmFjZV9rdm1fczM5MF9pbmplY3RfdmNwdSh2Y3B1LVx1MDAzZXZjcHVfaWQsIEtWTV9TMzkwX0lOVF9DTE9DS19DT01QLFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNjQ5LVx0XHRcdFx0ICAgMCwgMCk7XG4tLVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz0xNjU2PXN0YXRpYyBpbnQgX19pbmplY3RfY3B1X3RpbWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE2NjEtXHRWQ1BVX0VWRU5UKHZjcHUsIDMsIFwmIzM0OyVzXCYjMzQ7LCBcJiMzNDtpbmplY3Q6IGNwdSB0aW1lciBleHRlcm5hbFwmIzM0Oyk7XG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjE2NjI6XHR0cmFjZV9rdm1fczM5MF9pbmplY3RfdmNwdSh2Y3B1LVx1MDAzZXZjcHVfaWQsIEtWTV9TMzkwX0lOVF9DUFVfVElNRVIsXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE2NjMtXHRcdFx0XHQgICAwLCAwKTtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTIxMDM9c3RhdGljIGludCBkb19pbmplY3RfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9pcnEgKmlycSlcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTIxNDctXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjIxNDg6aW50IGt2bV9zMzkwX2luamVjdF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zMzkwX2lycSAqaXJxKVxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0yMTQ5LXtcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTMwNzg9dm9pZCBrdm1fczM5MF9yZWluamVjdF9tYWNoaW5lX2NoZWNrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTMxMTMtXHRcdGlycS50eXBlID0gS1ZNX1MzOTBfTUNISztcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MzExNDpcdFx0cmMgPSBrdm1fczM5MF9pbmplY3RfdmNwdSh2Y3B1LCBcdTAwMjZpcnEpO1xuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMTE1LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTIxMwoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbiwgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqQW5hbHl6aW5nIEtWTS9zMzkwIEZhdWx0IEluamVjdGlvbioqCgpBbHJpZ2h0LCBsb29raW5nIGF0IHRoaXMsIGBrdm1fczM5MF9pbmplY3RfdmNwdWAgc2VlbXMgbGlrZSBhIHNvbGlkIGVudHJ5IHBvaW50IGZvciBmb2N1c2luZyBteSBhbmFseXNpcy4gSXQmIzM5O3Mgb2Z0ZW4gdGhlIGNhc2UgdGhhdCBpbmplY3Rpb24gcG9pbnRzIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBob29rcyB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIHByb2Nlc3MuCgpOb3csIHdoZXJlIGRvIEkgZmluZCB0aGUgYWN0dWFsIGZhdWx0IGhhbmRsaW5nIGxvZ2ljPyBHaXZlbiB0aGUgY29udGV4dCBvZiBLVk0gb24gczM5MCwgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCBzb21ldGhpbmcgcmVsZXZhbnQgaW4gdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb2RlLiBMZXQmIzM5O3MgZGVsdmUgaW50byBgYXJjaC9zMzkwL2t2bS9mYXVsdGluLmNgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuYCB3aXRoaW4gdGhhdCBmaWxlLiBUaGF0IGZ1bmN0aW9uIG5hbWUgc3VnZ2VzdHMgaXQgd2lsbCBiZSB0aGUgY29yZSBvZiB0aGUgR3Vlc3QgRnJhbWUgTnVtYmVyIChHRk4pIGZhdWx0LWluIHByb2Nlc3MsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJJiMzOTttIGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyBmb3IgdGhpcyBwcm9qZWN0LiBUaGlzIHNob3VsZCByZXZlYWwgdGhlIG1lY2hhbmlzbXMgcmVsYXRlZCB0byBmYXVsdCBpbmplY3Rpb24gd2l0aGluIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSYjMzk7cyBLVk0gaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9zMzkwX2ZhdWx0aW5fZ2ZuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9mYXVsdGluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9mYXVsdGluLmM9MTU9Ym9vbCBrdm1fYXJjaF9zZXR1cF9hc3luY19wZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuLS1cbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5jLTE3LS8qXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYzoxODogKiBrdm1fczM5MF9mYXVsdGluX2dmbigpIC0gaGFuZGxlIGEgZGF0IGZhdWx0LlxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMtMTktICogQHZjcHU6IFRoZSB2Q1BVIHdob3NlIGdtYXAgaXMgdG8gYmUgZml4ZWQgdXAsIG9yIE5VTEwgaWYgb3BlcmF0aW5nIG9uIHRoZSBWTS5cbi0tXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYy0zMi0gKi9cbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5jOjMzOmludCBrdm1fczM5MF9mYXVsdGluX2dmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGd1ZXN0X2ZhdWx0ICpmKVxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMtMzQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTgwNgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBLVk0vczM5MCBDb2RlIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGVzZSBjaGFuZ2VzIGFuZCBga3ZtX3MzOTBfZmF1bHRpbl9nZm5gIHNlZW1zIGxpa2UgYSBnb29kIGVudHJ5IHBvaW50LiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCB0aGUgbGF5IG9mIHRoZSBsYW5kIGZpcnN0LiBJJiMzOTtsbCBzdW1tYXJpemUgdGhlc2UgZm9jdXMgZnVuY3Rpb25zIHRoYXQgc2VlbSByZWxldmFudCB0byB0aGUgcGF0Y2g6IGBrdm1fYXJjaF92Y3B1X2NyZWF0ZWAsIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAsIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YCwgYGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1YCwgYGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25gLCBga3ZtX3MzOTBfa2V5b3BgLCBgaGFuZGxlX3JyYmVgLCBgaGFuZGxlX2Vzc2FgLCBhbmQgb2YgY291cnNlLCBga3ZtX3MzOTBfZmF1bHRpbl9nZm5gLiBUaGV5IHNlZW0gbGlrZSB0aGUgbW9zdCByZWxldmFudCBhcmVhcyB0byBpbnZlc3RpZ2F0ZS4KCk5vdywgYSBrZXkgcXVlc3Rpb246IERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYSBuZXcgZGVwZW5kZW5jeSBvciByZWx5IG9uIGBLVk1fUzM5MF9VQ09OVFJPTGA/IFllcCwgaXQgZG9lcy4gSSBzZWUgaXQgbW9kaWZpZXMgY29kZSB1c2luZyBga3ZtX2lzX3Vjb250cm9sKHZjcHUtJmd0O2t2bSlgLiBTbywgYEtWTV9TMzkwX1VDT05UUk9MYCBuZWVkcyB0byBiZSBpbiBgRW5hYmxlQ29uZmlnc2AuIEl0JiMzOTtzIHByZXR0eSBvYnZpb3VzIHRoYXQgYEtWTWAgaXRzZWxmIHNob3VsZCBiZSBpbiBgRW5hYmxlQ29uZmlncyB0b28sIHNpbmNlIHRoYXQmIzM5O3MgdGhlIGNvcmUgS1ZNIGZlYXR1cmUgdGhpcyBpcyBidWlsdCB1cG9uLgoKSG9sZCBvbiwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gSSYjMzk7bGwgcXVpY2tseSBjaGVjayBgYXJjaC9zMzkwL2t2bS9LY29uZmlnYCBhZ2FpbiB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgb3IgaW1wbGljYXRpb25zLiBJIHdhbnQgdG8gYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9LY29uZmlnPTE3PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMTgtXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6MTk6Y29uZmlnIEtWTVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTIwLVx0ZGVmX3RyaXN0YXRlIHlcbi0tXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDYtXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDc6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDgtXHRib29sIFwmIzM0O1VzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY2NjIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGZyb20gYW4gZXhwZXJ0IHBlcnNwZWN0aXZlOgoKKipJbnZlc3RpZ2F0aW5nIEtWTSBEZXBlbmRlbmNpZXMgb24gczM5MCBBcmNoaXRlY3R1cmUqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluIGFuZCB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmN5IHN0cnVjdHVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2Ug4oCTIGxldCYjMzk7cyBjaGVjayB0aGUgYGFyY2gvczM5MC9rdm0vS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBjb25kaXRpb25hbCBsb2dpYyBmb3IgS1ZNIChLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lKSB3aXRoaW4gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBJIHdhbnQgdG8gc2VlIHByZWNpc2VseSAqd2hhdCogb3RoZXIgY29uZmlndXJhdGlvbnMgb3IgZmVhdHVyZXMgYGt2bWAgcmVsaWVzIG9uIHRvIGJlIGVuYWJsZWQgb24gdGhpcyBhcmNoaXRlY3R1cmUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBsb29raW5nIGZvciB0aGUgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMuIFRoZXNlIGFyZSB0aGUgY3JpdGljYWwgcGllY2VzIG9mIGluZm9ybWF0aW9uIHRoYXQgcmV2ZWFsIHRoZSBwcmVyZXF1aXNpdGVzLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGRlcGVuZGVuY2llcyBpcyBrZXkgdG8gdHJvdWJsZXNob290aW5nIEtWTS1yZWxhdGVkIGlzc3Vlcywgb3IgdG8gZW5zdXJpbmcgY29ycmVjdCBjb25maWd1cmF0aW9uIGluIGEgY3VzdG9tIGJ1aWxkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIHJlcXVpcmVkIHNvIEkgY2FuIGVpdGhlciB0cm91Ymxlc2hvb3QgYSBjb25maWd1cmF0aW9uIGlzc3VlLCBvciBnZXQgS1ZNIHdvcmtpbmcgb24gYSBjdXN0b20gYnVpbGQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIEtWTSBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdHNvdXJjZSBcJiMzNDt2aXJ0L2t2bS9LY29uZmlnXCYjMzQ7XG4gICA2Olx0XG4gICA3Olx0bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxuICAgODpcdFx0ZGVmX2Jvb2wgeVxuICAgOTpcdFx0cHJvbXB0IFwmIzM0O0tWTVwmIzM0O1xuICAxMDpcdFx0aGVscFxuICAxMTpcdFx0ICBTYXkgWSBoZXJlIHRvIGdldCB0byBzZWUgb3B0aW9ucyBmb3IgdXNpbmcgeW91ciBMaW51eCBob3N0IHRvIHJ1biBvdGhlclxuICAxMjpcdFx0ICBvcGVyYXRpbmcgc3lzdGVtcyBpbnNpZGUgdmlydHVhbCBtYWNoaW5lcyAoZ3Vlc3RzKS5cbiAgMTM6XHRcdCAgVGhpcyBvcHRpb24gYWxvbmUgZG9lcyBub3QgYWRkIGFueSBrZXJuZWwgY29kZS5cbiAgMTQ6XHRcbiAgMTU6XHRcdCAgSWYgeW91IHNheSBOLCBhbGwgb3B0aW9ucyBpbiB0aGlzIHN1Ym1lbnUgd2lsbCBiZSBza2lwcGVkIGFuZCBkaXNhYmxlZC5cbiAgMTY6XHRcbiAgMTc6XHRpZiBWSVJUVUFMSVpBVElPTlxuICAxODpcdFxuICAxOTpcdGNvbmZpZyBLVk1cbiAgMjA6XHRcdGRlZl90cmlzdGF0ZSB5XG4gIDIxOlx0XHRwcm9tcHQgXCYjMzQ7S2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XCYjMzQ7XG4gIDIyOlx0XHRzZWxlY3QgSEFWRV9LVk1fQ1BVX1JFTEFYX0lOVEVSQ0VQVFxuICAyMzpcdFx0c2VsZWN0IEtWTV9BU1lOQ19QRlxuICAyNDpcdFx0c2VsZWN0IEtWTV9BU1lOQ19QRl9TWU5DXG4gIDI1Olx0XHRzZWxlY3QgS1ZNX0NPTU1PTlxuICAyNjpcdFx0c2VsZWN0IEhBVkVfS1ZNX0lSUUNISVBcbiAgMjc6XHRcdHNlbGVjdCBIQVZFX0tWTV9JUlFfUk9VVElOR1xuICAyODpcdFx0c2VsZWN0IEhBVkVfS1ZNX0lOVkFMSURfV0FLRVVQU1xuICAyOTpcdFx0c2VsZWN0IEhBVkVfS1ZNX05PX1BPTExcbiAgMzA6XHRcdHNlbGVjdCBLVk1fVkZJT1xuICAzMTpcdFx0c2VsZWN0IFZJUlRfWEZFUl9UT19HVUVTVF9XT1JLXG4gIDMyOlx0XHRzZWxlY3QgS1ZNX01NVV9MT0NLTEVTU19BR0lOR1xuICAzMzpcdFx0c2VsZWN0IEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcbiAgMzQ6XHRcdGhlbHBcbiAgMzU6XHRcdCAgU3VwcG9ydCBob3N0aW5nIHBhcmF2aXJ0dWFsaXplZCBndWVzdCBtYWNoaW5lcyB1c2luZyB0aGUgU0lFXG4gIDM2Olx0XHQgIHZpcnR1YWxpemF0aW9uIGNhcGFiaWxpdHkgb24gdGhlIG1haW5mcmFtZS4gVGhpcyBzaG91bGQgd29ya1xuICAzNzpcdFx0ICBvbiBhbnkgNjRiaXQgbWFjaGluZS5cbiAgMzg6XHRcbiAgMzk6XHRcdCAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgdGhyb3VnaFxuICA0MDpcdFx0ICBhIGNoYXJhY3RlciBkZXZpY2Ugbm9kZSBuYW1lZCAvZGV2L2t2bS5cbiAgNDE6XHRcbiAgNDI6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gIDQzOlx0XHQgIHdpbGwgYmUgY2FsbGVkIGt2bS5cbiAgNDQ6XHRcbiAgNDU6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNDY6XHRcbiAgNDc6XHRjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcbiAgNDg6XHRcdGJvb2wgXCYjMzQ7VXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1wmIzM0O1xuICA0OTpcdFx0ZGVwZW5kcyBvbiBLVk1cbiAgNTA6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc1OTAKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgbXkgbWluZCBpcyBqdW1waW5nIGFyb3VuZCBhIGJpdCBoZXJl4oCmCgoqKktWTSBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpSaWdodCwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnM6IGBLVk1gIGFuZCBgS1ZNX1MzOTBfVUNPTlRST0xgLiBUaG9zZSBhcmUgdGhlIGNvcmUsIEkga25vdyB0aGF0LiBCdXQgaG9sZCBvbiwgdGhlIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YCBmdW5jdGlvbiBuYW1l4oCmIHRoYXQgc2NyZWFtcyBQcm90ZWN0ZWQgVmlydHVhbGl6YXRpb24gKFBWKSB0byBtZSwgb24gczM5MHguIEkgbmVlZCB0byBjbGFyaWZ5OiBpcyB0aGVyZSBhIHNwZWNpZmljIGNvbmZpZyBvcHRpb24gKmRlZGljYXRlZCogdG8gdGhhdCBQViBmZWF0dXJlIHNldCwgb3IgaXMgaXQgaW1wbGljaXRseSBlbmFibGVkIHNvbWVob3c/IEkgbmVlZCB0byBrbm93IHdoZXJlIHRoZSBQViBzdXBwb3J0IGlzIGVuYWJsZWQgaW4gS1ZNIHMzOTB4LiBJIGhhdmUgdG8gdHJhY2UgaG93IHRoaXMgaXMgYmVpbmcgY29udHJvbGxlZCB3aXRoaW4gdGhlIEtWTSBlY29zeXN0ZW0gZm9yIHMzOTB4LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fUzM5MF9QViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3ODc0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkNoZWNraW5nIGZvciBQViBDb25maWd1cmF0aW9uIGluIHMzOTAgS2NvbmZpZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlcmUmIzM5O3MgYW55IFBhcmF2aXJ0dWFsaXphdGlvbiAoUFYpIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBkZWZpbmVkIHdpdGhpbiB0aGUgYGFyY2gvczM5MC9LY29uZmlnYCBmaWxlLiBUaGlzIGlzIHN0YW5kYXJkIHByb2NlZHVyZSBmb3IgY2hlY2tpbmcgdGhlIGFyY2hpdGVjdHVyZSYjMzk7cyBjb25maWd1cmF0aW9uIHNwYWNlIGZvciB2aXJ0dWFsaXphdGlvbiBzdXBwb3J0LiBJJiMzOTttIGxvb2tpbmcgZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gaHlwZXJ2aXNvcnMsIGd1ZXN0cywgb3IgcGFyYXZpcnR1YWxpemVkIGRyaXZlcnMuIFRoZSBwcmVzZW5jZSBvZiBQViBvcHRpb25zIHdvdWxkIHNpZ25hbCBob3cgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlIGhhbmRsZXMgaW50ZXJhY3Rpb25zIHdpdGggdmlydHVhbGl6YXRpb24gdGVjaG5vbG9naWVzIGFuZCBpZiB0aGUga2VybmVsIHByb3ZpZGVzIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24ga25vYnMgZm9yIHN1Y2ggZW52aXJvbm1lbnRzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIC4qUFYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MDg0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkNoZWNraW5nIHRoZSBQcm90ZWN0ZWQgTWVtb3J5IENvbmZpZ3VyYXRpb24gZm9yIHMzOTAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHByb3RlY3RlZCBtZW1vcnkgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlJiMzOTtzIGtlcm5lbC4gVGhlIGZpcnN0IHBsYWNlIEkmIzM5O2QgbG9vayBpcywgbmF0dXJhbGx5LCB0aGUgYEtjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgb25lIGluIGBhcmNoL3MzOTAvYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoYXQgYXJjaGl0ZWN0dXJlIHJlc2lkZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgYFBST1RFQ1RFRGAgc3ltYm9sLCBvciBob3dldmVyIGl0JiMzOTtzIGRlZmluZWQgdGhlcmUsIHRvIHNlZSBob3cgaXQmIzM5O3MgaGFuZGxlZC4gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gSG93IGlzIGl0IGNvbm5lY3RlZCB0byBvdGhlciBmZWF0dXJlcz8gQXJlIHRoZXJlIHNwZWNpZmljIGRlZmF1bHQgdmFsdWVzIG9yIHByb21wdHM/IFRoaXMgYEtjb25maWdgIGZpbGUgc2hvdWxkIGdpdmUgbWUgdGhlIGdyb3VuZCB0cnV0aCBvZiB0aGUgY29udHJvbCBvdmVyIHByb3RlY3RlZCBtZW1vcnkgZm9yIHRoZSBhcmNoaXRlY3R1cmUuIEkmIzM5O20gaG9waW5nIGl0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IGV4cGVyaWVuY2UgdGVsbHMgbWUgdG8gcHJlcGFyZSBmb3IgcG90ZW50aWFsIGNvbXBsZXhpdGllcyByZWxhdGVkIHRvIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGFuZCBob3cgdGhlIGtlcm5lbCBpbnRlcmFjdHMgd2l0aCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgLipQUk9URUNURUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MzQ5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gaW4gYGFyY2gvczM5MC9rdm0vcHYuY2AqKgoKT2theSwgSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgaWYgYGFyY2gvczM5MC9rdm0vcHYuY2AgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZC4gR2l2ZW4gdGhlIGNvbnRleHQsIGl0JiMzOTtzIGxpa2VseSBkZWFsaW5nIHdpdGggcGFyYXZpcnR1YWxpemVkIChQVikgY29tcG9uZW50cyBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlIHdpdGhpbiBLVk0uIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBQViBjb2RlIG9mdGVuIGhhcyBzcGVjaWZpYyBjb21waWxhdGlvbiBmbGFncyBvciBidWlsZCBjb25maWd1cmF0aW9ucyB0byBlbmFibGUgaXQsIGRlcGVuZGluZyBvbiB0aGUgZW52aXJvbm1lbnQgb3IgdGhlIGRlc2lyZWQgZmVhdHVyZSBzZXQuIFNvLCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoaXMgZmlsZSBpcyBhbHdheXMgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkIG9yIGlmIHRoZXJlIGFyZSBgI2lmZGVmYCBvciBzaW1pbGFyIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGNvbnRyb2xsaW5nIGl0cyBpbmNsdXNpb24uIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGZpbGUgaXMgYWN0aXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwdi5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL01ha2VmaWxlPTEwPWt2bS15ICYjNDM7PSBrdm0tczM5MC5vIGludGVyY2VwdC5vIGludGVycnVwdC5vIHByaXYubyBzaWdwLm9cbmFyY2gvczM5MC9rdm0vTWFrZWZpbGU6MTE6a3ZtLXkgJiM0Mzs9IGRpYWcubyBnYWNjZXNzLm8gZ3Vlc3RkYmcubyB2c2llLm8gcHYub1xuYXJjaC9zMzkwL2t2bS9NYWtlZmlsZS0xMi1rdm0teSAmIzQzOz0gZGF0Lm8gZ21hcC5vIGZhdWx0aW4ub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODcxNQoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDY4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLVk0gczM5MHggRnV6emluZyBEZWNpc2lvbioqCgpPa2F5LCBzbyBLVk0mIzM5O3MgcHJlc2VuY2UgaXMgYXNzdW1lZCBpZiB0aGUga2VybmVsIGlzIGNvbXBpbGVkIHdpdGggS1ZNIGVuYWJsZWQuIExldCYjMzk7cyBzdGFydCBieSByZXZpZXdpbmcgdGhlIGZ1bmN0aW9ucyBmbGFnZ2VkIGFzIHBvdGVudGlhbGx5IGludGVyZXN0aW5nOiBga3ZtX2FyY2hfdmNwdV9jcmVhdGVgLCBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gLCBga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdWAsIGBrdm1fczM5MF9wdl9kZXN0cm95X2NwdWAsIGBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uYCwgYGt2bV9zMzkwX2tleW9wYCwgYGhhbmRsZV9ycmJlYCwgYGhhbmRsZV9lc3NhYCwgYGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuYCwgYW5kIGBrdm1fczM5MF9pbmplY3RfdmNwdWAuIFdlIGtub3cgdGhlc2UgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCBLVk0gaW9jdGxzIGFuZCBndWVzdCBleGVjdXRpb24sIG1ha2luZyB0aGVtIGRlZmluaXRlbHkgY2FuZGlkYXRlcyBmb3IgZnV6emluZywgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGV5IGRlYWwgd2l0aCB0aGUgY29yZSBLVk0gZnVuY3Rpb25hbGl0eSBzcGVjaWZpYyB0byBzMzkwLiBGdXJ0aGVybW9yZSwgU3l6a2FsbGVyIGRvZXMgaW4gZmFjdCBzdXBwb3J0IGJvdGggczM5MHggYXJjaGl0ZWN0dXJlIGFuZCBLVk0gZnV6emluZy4KCk5vdywgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhpcyB3YXJyYW50cyBmdXp6aW5nLCBsZXQmIzM5O3MgZ28gb3ZlciB0aGUgYFdvcnRoRnV6emluZ2AgY3JpdGVyaWEuIFRoZSB0ZXh0IHNheXMgdG8gZXhjbHVkZSBjb2RlIHBhdGhzICYjMzQ7aW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSYjMzQ7LiBIZXJlJiMzOTtzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3Rpbmc6IHMzOTB4IEtWTSwgYXMgd2UgYWxsIGtub3csICpyZXF1aXJlcyogYWN0dWFsIHMzOTB4IGhhcmR3YXJlIGZvciBLVk0uIFFFTVUgb24geDg2IGNhbiYjMzk7dCBydW4gS1ZNIGZvciBzMzkweC4gQnV0LCBjcnVjaWFsbHksIFN5emthbGxlciAqY2FuKiBiZSBydW4gb24gczM5MHggaGFyZHdhcmUgaXRzZWxmLCBsaWtlIG9uIElCTSBDbG91ZCBvciB6L1ZNLgoKVGhlIHdvcmRpbmcgb2YgdGhlIHByb21wdCBzYXlzLCAmIzM0O2ltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUmIzM0Oy4gSXQgKmRvZXNuJiMzOTt0KiByZXN0cmljdCB0aGlzIHRvIHg4Niwgd2hpY2ggaXMgY3J1Y2lhbC4gQWx0aG91Z2ggUUVNVSBvbiB4ODYgY2Fu4oCZdCB1dGlsaXplIEtWTSBmb3IgczM5MHgsIFFFTVUgKmNhbiogZW11bGF0ZSBzMzkweCwgYW5kIHdoZW4gcnVuICpvbiogczM5MHgsIGl0IGJlY29tZXMgYSB2YWxpZCBLVk0gdGFyZ2V0LiBTaW5jZSBzeXprYWxsZXIgKmRvZXMqIGhhdmUgczM5MHggaW5zdGFuY2VzLCBhbmQgc2luY2UgcnVubmluZyBRRU1VIG9uIHMzOTB4ICpkb2VzKiBtYWtlIHRoZXNlIGZ1bmN0aW9ucyBhY2Nlc3NpYmxlLCBldmVuIGlmIGluZGlyZWN0bHkgdGhyb3VnaCBlbXVsYXRpb24sIEkmIzM5O20gY29uZmlkZW50IGluIHNheWluZyB0aGF0IHRoZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUuIFRoZXJlZm9yZSwgSSB3aWxsIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgLgoKSSYjMzk7bGwgZmluYWxpemUgdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3Qgd2l0aCB0aGUgZnVuY3Rpb25zIEkgbWVudGlvbmVkIGFib3ZlLiBBbmQsIGxldCYjMzk7cyBub3cgY2hlY2sgaWYgYGt2bV9zMzkwX2tleW9wYCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3MzOTBfa2V5b3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU1MD1zdGF0aWMgdm9pZCBfX2t2bV9zMzkwX2V4aXQodm9pZClcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTYxLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU2MjpzdGF0aWMgaW50IGt2bV9zMzkwX2tleW9wKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3Qga3ZtICprdm0sIGludCBvcCxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NjMtXHRcdFx0ICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuaW9uIHNrZXkgc2tleSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjkyNj1pbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMwNTgtXHRcdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMwNTk6XHRcdHN0cnVjdCBrdm1fczM5MF9rZXlvcCBrb3A7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzA2MC1cdFx0dW5pb24gc2tleSBza2V5O1xuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMDcxLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMwNzI6XHRcdHIgPSBrdm1fczM5MF9rZXlvcChtYywga3ZtLCBrb3Aub3BlcmF0aW9uLCBrb3AuZ3Vlc3RfYWRkciwgc2tleSk7XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzA3My1cdFx0a3ZtX3MzOTBfZnJlZV9tbXVfY2FjaGUobWMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDUwOQoJCQkJCQkJb3V0cHV0OiA1MgoJCQkJCQkJdGhvdWdodHM6IDIwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4KCioqQW5hbHl6aW5nIEFQSSBFbnRyeXBvaW50IFVzYWdlIGZvciBLVk0vczM5MHgqKgoKUmlnaHQsIHNvIHRoZSBwcm9tcHQgaXMgcHJldHR5IGNsZWFyOiBpdCYjMzk7cyBnZW5lcmFsbHkgcHJlZmVycmVkIHRvIHVzZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgcmF0aGVyIHRoYW4gc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIEkmIzM5O20gbG9va2luZyBhdCBga3ZtX3MzOTBfa2V5b3BgLCB3aGljaCBpcywgaW4gZmFjdCwgc3RhdGljLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1c2UgYGt2bV9hcmNoX3ZtX2lvY3RsYCBpbnN0ZWFkLiBCdXQsIGhvbGQgb24gYSBzZWNvbmQuLi4gYGt2bV9hcmNoX3ZtX2lvY3RsYCBpcyAqdmVyeSogZ2VuZXJpYywgaXNuJiMzOTt0IGl0PyBJdCBzZWVtcyBsaWtlIGl0IGhhbmRsZXMgYSBicm9hZCByYW5nZSBvZiBpb2N0bHMsIG5vdCBzcGVjaWZpY2FsbHkgdGhlIGtleSBvcGVyYXRpb24uCgpIbW0sIG9rYXksIHJlLWV4YW1pbmluZyBga3ZtX3MzOTBfa2V5b3BgLCBpdCAqaXMqIHN0YXRpYywgYnV0IGl0IGlzbiYjMzk7dCBpbmxpbmVkLiBJdCYjMzk7cyBnb3QgdGhhdCBiaWcgYHN3aXRjaGAgc3RhdGVtZW50LCB3aGljaCBsaWtlbHkgbWVhbnMgaXQmIzM5O3MgYSBkaXN0aW5jdCwgZmFpcmx5IHNpemVhYmxlIGZ1bmN0aW9uLiBTbywgaXMgYGt2bV9hcmNoX3ZtX2lvY3RsYCBhICpiZXR0ZXIqIGNob2ljZT8gT3IgaXMgaXQgb2theSB0byBsZWF2ZSBga3ZtX3MzOTBfa2V5b3BgIGlmIGl0IGlzIGEgdHJ1bHkgZGlzdGluY3QgZnVuY3Rpb24/IEkgbmVlZCB0byB0aGluayBhYm91dCB0aGUgYWJzdHJhY3Rpb24gbGV2ZWwgaGVyZS4KCldhaXQsIG9mIGNvdXJzZSwgSSBzaG91bGQgYmUgdXNpbmcgYGt2bV9hcmNoX3ZtX2lvY3RsYC4gVGhhdCBpcyB0aGUgYWN0dWFsIEtWTSBlbnRyeSBwb2ludC4gT2ssIHNvIHVzaW5nIHRoYXQgaXMgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvIHRoZW4uCgpPa2F5LCBsZXQgbWUgY2hlY2sgYW5vdGhlciBvbmU6IFdoYXQgYWJvdXQgYGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25gPyBUaGF0JiMzOTtzICphbHNvKiBzdGF0aWMuIFNvLCBJIG5lZWQgdG8gYXBwbHkgdGhlIHNhbWUgYW5hbHlzaXMgdGhlcmUgdG9vLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0xMjcxPXN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMjk3LVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjEyOTg6c3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMjk5LVx0XHRcdFx0ICAgICBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yMDQ0PXN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc2V0X2F0dHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMDYxLVx0Y2FzZSBLVk1fUzM5MF9WTV9NSUdSQVRJT046XG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MjA2MjpcdFx0cmV0ID0ga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbihrdm0sIGF0dHIpO1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTIwNjMtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMDowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTQ3NQoJCQkJCQkJb3V0cHV0OiAyNDEKCQkJCQkJCXRob3VnaHRzOiA1MzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtWTSBzMzkwIEVudHJ5IFBvaW50cyBmb3IgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGhlcmUgaXMgdG8gaWRlbnRpZnkgdGhlIGtleSBlbnRyeSBwb2ludHMgaW4gdGhlIHMzOTAgS1ZNIGltcGxlbWVudGF0aW9uIHRoYXQgYXJlICptb3N0KiBsaWtlbHkgdG8geWllbGQgaW50ZXJlc3RpbmcgZnV6emluZyB0YXJnZXRzLCBnaXZlbiB0aGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBwYXRjaCBzZXJpZXMuCgpGaXJzdCwgSSBzZWUgdGhhdCBga3ZtX3MzOTBfdm1fc2V0X2F0dHJgIGlzIGEgc3RhdGljIGZ1bmN0aW9uOyBpdCYjMzk7cyBhY2Nlc3NlZCB0aHJvdWdoIGBrdm1fZGV2aWNlX2lvY3RsX2F0dHJgIG9yIGEgc2ltaWxhciBpbnRlcmZhY2UsIHNvIGl0JiMzOTtzIHByb2JhYmx5IGxlc3MgZGlyZWN0LiBOb3csIGxldCYjMzk7cyBnbyBmdW5jdGlvbiBieSBmdW5jdGlvbi4KCmBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YCwgbm90IHN0YXRpYy4gT2theSwgZ29vZC4gYGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1YCwgYWxzbyBub3Qgc3RhdGljLiBga3ZtX2FyY2hfdmNwdV9jcmVhdGVgLCBub24tc3RhdGljIHRvby4gYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYCBhcyB3ZWxsLiBUaGVuIHRoZXJlIGFyZSBzb21lIHN0YXRpYyBmdW5jdGlvbnMsIGBoYW5kbGVfcnJiZWAgY2FsbGVkIHZpYSBga3ZtX3MzOTBfaGFuZGxlX2IyYCBhbmQgYGhhbmRsZV9lc3NhYCBjYWxsZWQgdmlhIGBrdm1fczM5MF9oYW5kbGVfYjlgLCBpbnRlcmVzdGluZy4gVGhlbiwgYGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuYCBpcyBub3Qgc3RhdGljLiBGaW5hbGx5LCBga3ZtX3MzOTBfaW5qZWN0X3ZjcHVgIGlzIG5vdCBzdGF0aWMuCgpTbywgdGhlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIGFyZSBub3cgY2xlYXI6Ci0gYGt2bV9hcmNoX3ZjcHVfY3JlYXRlYAotIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAKLSBga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdWAKLSBga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHVgCi0gYGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuYAotIGBrdm1fczM5MF9pbmplY3RfdmNwdWAKLSBga3ZtX3MzOTBfaGFuZGxlX2IyYAotIGBrdm1fczM5MF9oYW5kbGVfYjlgCi0gYGt2bV9hcmNoX3ZtX2lvY3RsYAoKQWxyaWdodCwgdGhlc2UgYXJlIG91ciBtYWluIHRhcmdldHMuIEkgbmVlZCB0byBrZWVwIHRob3NlIGluIG1pbmQuCgpOb3csIGNvbnNpZGVyaW5nIHRoZSBwYXRjaCBkZXNjcmlwdGlvbiwgd2hpY2ggZGV0YWlscyBmaXhlcyBmb3IgbWVtb3J5IGxlYWtzIGluIHZDUFUgY3JlYXRpb24vZGVzdHJ1Y3Rpb24sIHN0b3JhZ2Uga2V5IG9wZXJhdGlvbnMsIHBhZ2UgZmF1bHQgc2lnbmFsIGhhbmRsaW5nLCBhbmQgbWVtb3J5IHJlZ2lvbiBsb2NraW5nLCBpdCBtYWtlcyBzZW5zZSB0byBmb2N1cyBvbiB0aGVzZSBub24tc3RhdGljIGZ1bmN0aW9ucy4gVGhleSByZXByZXNlbnQga2V5IHZpcnR1YWxpemF0aW9uIGZlYXR1cmVzIGFuZCB3b3VsZCBiZSBnb29kIHBsYWNlcyB0byBzdGFydCBmdXp6aW5nLgoKSSYjMzk7bSB0aGlua2luZywgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgY29uZmlncy4gSSBrbm93IGBLVk1gIGlzIGJhc2VsaW5lLiBJIGFsc28gc2VlIHRoYXQgYEtWTV9TMzkwX1VDT05UUk9MYCBpcyBwcmVzZW50LiBJcyB0aGF0IHJlbGV2YW50PyBZZXMsIHRoZSBjb2RlIHVzZXMgYGt2bV9pc191Y29udHJvbCh2Y3B1LSZndDtrdm0pYC4gR3JlYXQsIHdlIHdpbGwgbmVlZCB0byBjb25zaWRlciB0aGF0LgoKV2l0aCB0aGlzIGFuYWx5c2lzIGNvbXBsZXRlLCBpdCYjMzk7cyB0aW1lIHRvIGdlbmVyYXRlIHRoZSByZXN1bHRzLiBJJiMzOTttIGNvbmZpZGVudCBpbiB0aGUgaWRlbnRpZmllZCBmdXp6aW5nIHRhcmdldHMgYmFzZWQgb24gdGhpcyBhbmFseXNpcy4gTm93LCBJJiMzOTttIGdvaW5nIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBLVk1fUzM5MF9VQ09OVFJPTDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX1MzOTBfVUNPTlRST0wmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fYXJjaF92Y3B1X2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbiYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9wdl9jcmVhdGVfY3B1JiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1JiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2ZhdWx0aW5fZ2ZuJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2luamVjdF92Y3B1JiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2hhbmRsZV9iMiYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9oYW5kbGVfYjkmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfdm1faW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgczM5MCBLVk0gaW1wbGVtZW50YXRpb24sIGluY2x1ZGluZyBmaXhpbmcgbWVtb3J5IGxlYWtzIGR1cmluZyB2Q1BVIGNyZWF0aW9uL2Rlc3RydWN0aW9uLCBtb2RpZnlpbmcgcmVmZXJlbmNlIGJpdCByZXNldHRpbmcgZm9yIHN0b3JhZ2Uga2V5cywgYWRqdXN0aW5nIHNpZ25hbCBoYW5kbGluZyBkdXJpbmcgcGFnZSBmYXVsdHMsIGFuZCBpbXByb3ZpbmcgbG9ja2luZyBkdXJpbmcgbWVtb3J5IHJlZ2lvbiBjb21taXRzIGFuZCBtaWdyYXRpb24uIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSB2aXJ0dWFsaXphdGlvbiBmZWF0dXJlcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDt0aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogS1ZNX1MzOTBfVUNPTlRST0wmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyOTMwCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYSBNaXNzaW5nIEtWTSBGZWF0dXJlIG9uIHMzOTB4KioKClJpZ2h0LCBsZXQgbWUgc2VlLi4uIEkmIzM5O20gYSBiaXQgcGVycGxleGVkLiBJdCBhcHBlYXJzIHRoYXQgYEtWTV9TMzkwX1VDT05UUk9MYCBpc24mIzM5O3QgZGVmaW5lZC4gVGhhdCYjMzk7cyB1bmV4cGVjdGVkLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBjb250ZXh0IEkmIzM5O20gd29ya2luZyBpbi4gVGltZSB0byBnbyBiYWNrIGFuZCBkb3VibGUtY2hlY2ssIHNwZWNpZmljYWxseSwgdGhlIGBhcmNoL3MzOTAva3ZtL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgaGFzbiYjMzk7dCBiZWVuIGEgcmVjZW50IGNoYW5nZSBvciBtaXNjb25maWd1cmF0aW9uIG9uIG15IHBhcnQsIG9yIHBlcmhhcHMgdGhlcmUmIzM5O3MgYSBkZXBlbmRlbmN5IEkgbWlzc2VkLiBJdCYjMzk7cyB1c3VhbGx5IHRoZSBLY29uZmlnIGZpbGVzIHRoYXQgZGVmaW5lIHRoZSBhdmFpbGFiaWxpdHkgb2YgdGhlc2UgZmVhdHVyZXMsIHNvIGxldCYjMzk7cyBzdGFydCB0aGVyZSBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vS2NvbmZpZz0xOT1jb25maWcgS1ZNXG4tLVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ2LVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjQ3OmNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtVc2Vyc3BhY2UgY29udHJvbGxlZCB2aXJ0dWFsIG1hY2hpbmVzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMjg5CgkJCQkJCQlvdXRwdXQ6IDIyOAoJCQkJCQkJdGhvdWdodHM6IDEwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipOYXZpZ2F0aW5nIHRoZSBLY29uZmlnIExhYnlyaW50aCoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHRob3VnaHQgSSByZW1lbWJlcmVkIHNlZWluZyBzb21ldGhpbmcgYWJvdXQgdGhpcy4uLiBhbmQgeWVzLCB0aGVyZSBpdCBpcyEgYEtWTV9TMzkwX1VDT05UUk9MYCAqZG9lcyogZXhpc3QsIGFuZCBpdCYjMzk7cyByaWdodCB3aGVyZSBpdCBzaG91bGQgYmUsIHR1Y2tlZCBhd2F5IGluIGBhcmNoL3MzOTAva3ZtL0tjb25maWdgLiBTbywgd2hhdCBnaXZlcz8gV2h5IGRpZCBgc2V0LXJlc3VsdHNgIHRlbGwgbWUgaXQgd2FzbiYjMzk7dCB0aGVyZT8gU29tZXRoaW5nJiMzOTtzIGFtaXNzIHdpdGggdGhlIHRvb2wuCgpNeSBzdXNwaWNpb24gaXMgdGhhdCBpdCYjMzk7cyBnZXR0aW5nIGNvbmZ1c2VkLiBJdCYjMzk7cyBsaWtlbHkgY2hlY2tpbmcgYWdhaW5zdCBhbiB4ODYgY29uZmlndXJhdGlvbiwgbWF5YmUgZXZlbiB0aGUgYHg4Nl82NGAgZGVmY29uZmlnLCB3aGVyZSB0aGlzIHNwZWNpZmljIHN5bWJvbCwgYEtWTV9TMzkwX1VDT05UUk9MYCwgd291bGQgbmF0dXJhbGx5IGJlIGFic2VudCBiZWNhdXNlLCB3ZWxsLCBpdCYjMzk7cyBzcGVjaWZpYyB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIEl0JiMzOTtzIGEgY2xhc3NpYyBnb3RjaGEgd2hlbiB3b3JraW5nIHdpdGggbXVsdGktYXJjaGl0ZWN0dXJlIGtlcm5lbCBjb25maWd1cmF0aW9ucy4KCklmIHRoZSB0b29sIHBlcnNpc3RzIGluIGl0cyBtaXNndWlkZWQgY29tcGxhaW50cywgSSYjMzk7bGwgc2ltcGx5IHJldmVydCB0byB0aGUgbW9zdCBicm9hZGx5IGFwcGxpY2FibGUgc3ltYm9sLCBgS1ZNYC4gSXQmIzM5O2xsIGJlIGZpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fYXJjaF92Y3B1X2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbiYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9wdl9jcmVhdGVfY3B1JiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1JiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2ZhdWx0aW5fZ2ZuJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2luamVjdF92Y3B1JiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2hhbmRsZV9iMiYjMzQ7LAogICAgJiMzNDtrdm1fczM5MF9oYW5kbGVfYjkmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfdm1faW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgczM5MCBLVk0gaW1wbGVtZW50YXRpb24sIGluY2x1ZGluZyBmaXhpbmcgbWVtb3J5IGxlYWtzIGR1cmluZyB2Q1BVIGNyZWF0aW9uL2Rlc3RydWN0aW9uLCBtb2RpZnlpbmcgcmVmZXJlbmNlIGJpdCByZXNldHRpbmcgZm9yIHN0b3JhZ2Uga2V5cywgYWRqdXN0aW5nIHNpZ25hbCBoYW5kbGluZyBkdXJpbmcgcGFnZSBmYXVsdHMsIGFuZCBpbXByb3ZpbmcgbG9ja2luZyBkdXJpbmcgbWVtb3J5IHJlZ2lvbiBjb21taXRzIGFuZCBtaWdyYXRpb24uIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSB2aXJ0dWFsaXphdGlvbiBmZWF0dXJlcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfY3JlYXRlJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX3B2X2NyZWF0ZV9jcHUmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfcHZfZGVzdHJveV9jcHUmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfZmF1bHRpbl9nZm4mIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfaW5qZWN0X3ZjcHUmIzM0OywKICAgICYjMzQ7a3ZtX3MzOTBfaGFuZGxlX2IyJiMzNDssCiAgICAmIzM0O2t2bV9zMzkwX2hhbmRsZV9iOSYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF92bV9pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBzMzkwIEtWTSBpbXBsZW1lbnRhdGlvbiwgaW5jbHVkaW5nIGZpeGluZyBtZW1vcnkgbGVha3MgZHVyaW5nIHZDUFUgY3JlYXRpb24vZGVzdHJ1Y3Rpb24sIG1vZGlmeWluZyByZWZlcmVuY2UgYml0IHJlc2V0dGluZyBmb3Igc3RvcmFnZSBrZXlzLCBhZGp1c3Rpbmcgc2lnbmFsIGhhbmRsaW5nIGR1cmluZyBwYWdlIGZhdWx0cywgYW5kIGltcHJvdmluZyBsb2NraW5nIGR1cmluZyBtZW1vcnkgcmVnaW9uIGNvbW1pdHMgYW5kIG1pZ3JhdGlvbi4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIHZpcnR1YWxpemF0aW9uIGZlYXR1cmVzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAwOjA2OjA2LjM2OTczNzA1MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjkyOTkwNjM5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fYXJjaF92Y3B1X2NyZWF0ZVwiLFxuICAgIFwia3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25cIixcbiAgICBcImt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVcIixcbiAgICBcImt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1XCIsXG4gICAgXCJrdm1fczM5MF9mYXVsdGluX2dmblwiLFxuICAgIFwia3ZtX3MzOTBfaW5qZWN0X3ZjcHVcIixcbiAgICBcImt2bV9zMzkwX2hhbmRsZV9iMlwiLFxuICAgIFwia3ZtX3MzOTBfaGFuZGxlX2I5XCIsXG4gICAgXCJrdm1fYXJjaF92bV9pb2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHMzOTAgS1ZNIGltcGxlbWVudGF0aW9uLCBpbmNsdWRpbmcgZml4aW5nIG1lbW9yeSBsZWFrcyBkdXJpbmcgdkNQVSBjcmVhdGlvbi9kZXN0cnVjdGlvbiwgbW9kaWZ5aW5nIHJlZmVyZW5jZSBiaXQgcmVzZXR0aW5nIGZvciBzdG9yYWdlIGtleXMsIGFkanVzdGluZyBzaWduYWwgaGFuZGxpbmcgZHVyaW5nIHBhZ2UgZmF1bHRzLCBhbmQgaW1wcm92aW5nIGxvY2tpbmcgZHVyaW5nIG1lbW9yeSByZWdpb24gY29tbWl0cyBhbmQgbWlncmF0aW9uLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUgdmlydHVhbGl6YXRpb24gZmVhdHVyZXMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDowNjowNi4zNjk3NDUxMTJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3MzU3NjEzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGZiZjVjZDViOWEyNDAzNTk3NTY4YzhkZWZiYWUyOWU3ODdmMjQ1ODhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMzEgMDA6MDY6MDUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbmluZGV4IGVhYTM0YzViZDNjMTEuLmVkZjc1YjZhZDIwY2UgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG4rKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbkBAIC00NDAsNiArNDQwLDcgQEAgc3RydWN0IGt2bV92Y3B1X2FyY2gge1xcbiBcXHRib29sIHNrZXlfZW5hYmxlZDtcXG4gXFx0LyogSW5kaWNhdG9yIGlmIHRoZSBhY2Nlc3MgcmVnaXN0ZXJzIGhhdmUgYmVlbiBsb2FkZWQgZnJvbSBndWVzdCAqL1xcbiBcXHRib29sIGFjcnNfbG9hZGVkO1xcbitcXHRib29sIGluaXRpYWxpemVkO1xcbiBcXHRzdHJ1Y3Qga3ZtX3MzOTBfcHZfdmNwdSBwdjtcXG4gXFx0dW5pb24gZGlhZzMxOF9pbmZvIGRpYWczMThfaW5mbztcXG4gXFx0c3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWM7XFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZGF0LmMgYi9hcmNoL3MzOTAva3ZtL2RhdC5jXFxuaW5kZXggZWQ0MjU5ZDE3NjI5NS4uM2YyZDZlODkwMmQ3NiAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva3ZtL2RhdC5jXFxuKysrIGIvYXJjaC9zMzkwL2t2bS9kYXQuY1xcbkBAIC03NTUsMTMgKzc1NSwxNSBAQCBpbnQgZGF0X2NvbmRfc2V0X3N0b3JhZ2Vfa2V5KHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1tYywgdW5pb24gYXNjZSBhc2NlLCBnZlxcbiBcXHRyZXR1cm4gcmM7XFxuIH1cXG4gXFxuLWludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbilcXG4raW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLCB1bmlvbiBza2V5ICpza2V5KVxcbiB7XFxuIFxcdHVuaW9uIHBnc3RlIHBnc3RlLCBvbGQ7XFxuIFxcdHVuaW9uIGNyc3RlICpjcnN0ZXA7XFxuIFxcdHVuaW9uIHB0ZSAqcHRlcDtcXG4gXFx0aW50IHJjO1xcbiBcXG4rXFx0c2tleS1cXHUwMDNlc2tleSA9IDA7XFxuK1xcbiBcXHRyYyA9IGRhdF9lbnRyeV93YWxrKE5VTEwsIGdmbiwgYXNjZSwgREFUX1dBTEtfQU5ZLCBUQUJMRV9UWVBFX1BBR0VfVEFCTEUsIFxcdTAwMjZjcnN0ZXAsIFxcdTAwMjZwdGVwKTtcXG4gXFx0aWYgKHJjKVxcbiBcXHRcXHRyZXR1cm4gcmM7XFxuQEAgLTc3MSwyMSArNzczLDIzIEBAIGludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbilcXG4gXFxuIFxcdFxcdGlmICghY3JzdGUuaC5mYyB8fCAhY3JzdGUucy5mYzEucHIpXFxuIFxcdFxcdFxcdHJldHVybiAwO1xcbi1cXHRcXHRyZXR1cm4gcGFnZV9yZXNldF9yZWZlcmVuY2VkKGxhcmdlX2Nyc3RlX3RvX3BoeXMoKmNyc3RlcCwgZ2ZuKSk7XFxuK1xcdFxcdHNrZXktXFx1MDAzZXNrZXkgPSBwYWdlX3Jlc2V0X3JlZmVyZW5jZWQobGFyZ2VfY3JzdGVfdG9fcGh5cygqY3JzdGVwLCBnZm4pKSBcXHUwMDNjXFx1MDAzYyAxO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXHRvbGQgPSBwZ3N0ZV9nZXRfbG9jayhwdGVwKTtcXG4gXFx0cGdzdGUgPSBvbGQ7XFxuIFxcbiBcXHRpZiAoIXB0ZXAtXFx1MDAzZWguaSkge1xcbi1cXHRcXHRyYyA9IHBhZ2VfcmVzZXRfcmVmZXJlbmNlZChwdGVfb3JpZ2luKCpwdGVwKSk7XFxuLVxcdFxcdHBnc3RlLmhyID0gcmMgXFx1MDAzZVxcdTAwM2UgMTtcXG4rXFx0XFx0c2tleS1cXHUwMDNlc2tleSA9IHBhZ2VfcmVzZXRfcmVmZXJlbmNlZChwdGVfb3JpZ2luKCpwdGVwKSkgXFx1MDAzY1xcdTAwM2MgMTtcXG4rXFx0XFx0cGdzdGUuaHIgPSBza2V5LVxcdTAwM2VyO1xcbiBcXHR9XFxuLVxcdHJjIHw9IChwZ3N0ZS5nciBcXHUwMDNjXFx1MDAzYyAxKSB8IHBnc3RlLmdjO1xcbitcXHRza2V5LVxcdTAwM2VyIHw9IHBnc3RlLmdyO1xcbitcXHRza2V5LVxcdTAwM2VjIHw9IHBnc3RlLmdjO1xcbiBcXHRwZ3N0ZS5nciA9IDA7XFxuIFxcbiBcXHRkYXRfdXBkYXRlX3B0ZXBfc2Qob2xkLCBwZ3N0ZSwgcHRlcCk7XFxuIFxcdHBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpO1xcbi1cXHRyZXR1cm4gcmM7XFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgbG9uZyBkYXRfcmVzZXRfc2tleXNfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbGsgKndhbGspXFxuQEAgLTg0Niw2ICs4NTAsNyBAQCBzdGF0aWMgbG9uZyBfZGF0X3Nsb3RfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbFxcbiBcXHRzdHJ1Y3Qgc2xvdF9wcml2ICpwID0gd2Fsay1cXHUwMDNlcHJpdjtcXG4gXFx0dW5pb24gY3JzdGUgZHVtbXkgPSB7IC52YWwgPSBwLVxcdTAwM2V0b2tlbiB9O1xcbiBcXHR1bmlvbiBwdGUgbmV3X3B0ZSwgcHRlID0gUkVBRF9PTkNFKCpwdGVwKTtcXG4rXFx0dW5pb24gcGdzdGUgcGdzdGU7XFxuIFxcbiBcXHRuZXdfcHRlID0gX1BURV9UT0soZHVtbXkudG9rLnR5cGUsIGR1bW15LnRvay5wYXIpO1xcbiBcXG5AQCAtODUzLDcgKzg1OCwxMSBAQCBzdGF0aWMgbG9uZyBfZGF0X3Nsb3RfcHRlKHVuaW9uIHB0ZSAqcHRlcCwgZ2ZuX3QgZ2ZuLCBnZm5fdCBuZXh0LCBzdHJ1Y3QgZGF0X3dhbFxcbiBcXHRpZiAocHRlLnZhbCA9PSBuZXdfcHRlLnZhbClcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHRkYXRfcHRlcF94Y2hnKHB0ZXAsIG5ld19wdGUsIGdmbiwgd2Fsay1cXHUwMDNlYXNjZSwgZmFsc2UpO1xcbitcXHRwZ3N0ZSA9IHBnc3RlX2dldF9sb2NrKHB0ZXApO1xcbitcXHRwZ3N0ZSA9IF9fZGF0X3B0ZXBfeGNoZyhwdGVwLCBwZ3N0ZSwgbmV3X3B0ZSwgZ2ZuLCB3YWxrLVxcdTAwM2Vhc2NlLCBmYWxzZSk7XFxuK1xcdHBnc3RlLmNtbWFfZCA9IDA7XFxuK1xcdHBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZGF0LmggYi9hcmNoL3MzOTAva3ZtL2RhdC5oXFxuaW5kZXggZmFkNjA1MzA1ZTA1Yy4uMTQxZWU3YjlmMDE5MSAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva3ZtL2RhdC5oXFxuKysrIGIvYXJjaC9zMzkwL2t2bS9kYXQuaFxcbkBAIC01MzcsNyArNTM3LDcgQEAgaW50IGRhdF9zZXRfc3RvcmFnZV9rZXkoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZcXG4gXFx0XFx0XFx0dW5pb24gc2tleSBza2V5LCBib29sIG5xKTtcXG4gaW50IGRhdF9jb25kX3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLFxcbiBcXHRcXHRcXHQgICAgIHVuaW9uIHNrZXkgc2tleSwgdW5pb24gc2tleSAqb2xka2V5LCBib29sIG5xLCBib29sIG1yLCBib29sIG1jKTtcXG4taW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuKTtcXG4raW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuLCB1bmlvbiBza2V5ICpza2V5KTtcXG4gbG9uZyBkYXRfcmVzZXRfc2tleXModW5pb24gYXNjZSBhc2NlLCBnZm5fdCBzdGFydCk7XFxuIFxcbiB1bnNpZ25lZCBsb25nIGRhdF9nZXRfcHR2YWwoc3RydWN0IHBhZ2VfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgcHR2YWxfcGFyYW0gcGFyYW0pO1xcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYyBiL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jXFxuaW5kZXggZmVlODAwNDdiZDk0Zi4uM2NjNDVmN2Y1YjJkNyAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uY1xcbisrKyBiL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jXFxuQEAgLTkxLDkgKzkxLDkgQEAgaW50IGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgZ3Vlc3RfZmFcXG4gXFx0XFx0LyogQWNjZXNzIG91dHNpZGUgbWVtb3J5LCBhZGRyZXNzaW5nIGV4Y2VwdGlvbi4gKi9cXG4gXFx0XFx0aWYgKGlzX25vc2xvdF9wZm4oZi1cXHUwMDNlcGZuKSlcXG4gXFx0XFx0XFx0cmV0dXJuIFBHTV9BRERSRVNTSU5HO1xcbi1cXHRcXHQvKiBTaWduYWwgcGVuZGluZzogdHJ5IGFnYWluLiAqL1xcbi1cXHRcXHRpZiAoZi1cXHUwMDNlcGZuID09IEtWTV9QRk5fRVJSX1NJR1BFTkRJTkcpXFxuLVxcdFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbitcXHRcXHQvKiBGYXRhbCBzaWduYWwgcGVuZGluZzogYmFpbCBvdXQuICovXFxuK1xcdFxcdGlmIChpc19zaWdwZW5kaW5nX3BmbihmLVxcdTAwM2VwZm4pKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlRSO1xcbiBcXHRcXHQvKiBDaGVjayBpZiBpdCdzIHJlYWQtb25seSBtZW1vcnk7IGRvbid0IHRyeSB0byBhY3R1YWxseSBoYW5kbGUgdGhhdCBjYXNlLiAqL1xcbiBcXHRcXHRpZiAoZi1cXHUwMDNlcGZuID09IEtWTV9QRk5fRVJSX1JPX0ZBVUxUKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXFxuaW5kZXggOWUzZTZiMGQ3MmFkNi4uZDAyNzI0YmQxODI5YyAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXFxuKysrIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuY1xcbkBAIC01MCw2ICs1MCw4IEBAIHN0YXRpYyBpbnQgc2NhX2V4dF9jYWxsX3BlbmRpbmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgKnNyY19pZClcXG4gXFx0aWYgKCFrdm1fczM5MF90ZXN0X2NwdWZsYWdzKHZjcHUsIENQVVNUQVRfRUNBTExfUEVORCkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4rXFx0aWYgKEtWTV9CVUdfT04oa3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSksIHZjcHUtXFx1MDAzZWt2bSkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRCVUdfT04oIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKTtcXG4gXFxuIFxcdGlmIChzcmNfaWQpXFxuQEAgLTY2LDYgKzY4LDggQEAgc3RhdGljIGludCBzY2FfaW5qZWN0X2V4dF9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNyY19pZClcXG4gXFx0aW50IGV4cGVjdCwgcmM7XFxuIFxcbiBcXHRCVUdfT04oIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKTtcXG4rXFx0aWYgKEtWTV9CVUdfT04oa3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSksIHZjcHUtXFx1MDAzZWt2bSkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0b2xkX3ZhbCA9IFJFQURfT05DRSgqc2lncF9jdHJsKTtcXG4gXFx0b2xkX3ZhbC5jID0gMDtcXG5AQCAtODQsMTAgKzg4LDEzIEBAIHN0YXRpYyBpbnQgc2NhX2luamVjdF9leHRfY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzcmNfaWQpXFxuIHN0YXRpYyB2b2lkIHNjYV9jbGVhcl9leHRfY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0c3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5zY2E7XFxuLVxcdHVuaW9uIGVzY2Ffc2lncF9jdHJsICpzaWdwX2N0cmwgPSBcXHUwMDI2c2NhLVxcdTAwM2VjcHVbdmNwdS1cXHUwMDNldmNwdV9pZF0uc2lncF9jdHJsO1xcbitcXHR1bmlvbiBlc2NhX3NpZ3BfY3RybCAqc2lncF9jdHJsO1xcbiBcXG4tXFx0aWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSlcXG4rXFx0aWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSB8fCAhdmNwdS1cXHUwMDNlYXJjaC5pbml0aWFsaXplZCB8fCBrdm1faXNfdWNvbnRyb2wodmNwdS1cXHUwMDNla3ZtKSlcXG4gXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0LyogSW5pdGlhbGl6ZSBhZnRlciB0aGUgYWJvdmUgY2hlY2ssIHRvIHByZXZlbnQgZ29pbmcgb3V0IG9mIGJvdW5kcyAqL1xcbitcXHRzaWdwX2N0cmwgPSBcXHUwMDI2c2NhLVxcdTAwM2VjcHVbdmNwdS1cXHUwMDNldmNwdV9pZF0uc2lncF9jdHJsO1xcbiBcXHRrdm1fczM5MF9jbGVhcl9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX0VDQUxMX1BFTkQpO1xcbiBcXG4gXFx0V1JJVEVfT05DRShzaWdwX2N0cmwtXFx1MDAzZXZhbHVlLCAwKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXFxuaW5kZXggMTUwYjVkZDIxNzBlMi4uYjI5ZTU0NjBmNWVmYSAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcXG4rKysgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcXG5AQCAtNTcxLDcgKzU3MSw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfa2V5b3Aoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBrdm0gKmt2bSwgaW50IG9wXFxuIFxcdHN3aXRjaCAob3ApIHtcXG4gXFx0Y2FzZSBLVk1fUzM5MF9LRVlPUF9TU0tFOlxcbiBcXHRcXHRyID0gZGF0X2NvbmRfc2V0X3N0b3JhZ2Vfa2V5KG1jLCBhc2NlLCBnZm4sIHNrZXksIFxcdTAwMjZza2V5LCAwLCAwLCAwKTtcXG4tXFx0XFx0aWYgKHIgXFx1MDAzZT0gMClcXG4rXFx0XFx0aWYgKHIgPT0gMCB8fCByID09IDEpXFxuIFxcdFxcdFxcdHJldHVybiBza2V5LnNrZXk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIEtWTV9TMzkwX0tFWU9QX0lTS0U6XFxuQEAgLTU4MCwxNCArNTgwLDE0IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfa2V5b3Aoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBrdm0gKmt2bSwgaW50IG9wXFxuIFxcdFxcdFxcdHJldHVybiBza2V5LnNrZXk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIEtWTV9TMzkwX0tFWU9QX1JSQkU6XFxuLVxcdFxcdHIgPSBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdChhc2NlLCBnZm4pO1xcbi1cXHRcXHRpZiAociBcXHUwMDNlIDApXFxuLVxcdFxcdFxcdHJldHVybiByIFxcdTAwM2NcXHUwMDNjIDE7XFxuK1xcdFxcdHIgPSBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdChhc2NlLCBnZm4sIFxcdTAwMjZza2V5KTtcXG4rXFx0XFx0aWYgKCFyKVxcbitcXHRcXHRcXHRyZXR1cm4gc2tleS5za2V5O1xcbiBcXHRcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4tXFx0cmV0dXJuIHI7XFxuK1xcdHJldHVybiByIFxcdTAwM2UgMCA/IC1FRkFVTFQgOiByO1xcbiB9XFxuIFxcbiAvKiBTZWN0aW9uOiBkZXZpY2UgcmVsYXRlZCAqL1xcbkBAIC0xMjE5LDggKzEyMTksOCBAQCBzdGF0aWMgdm9pZCBrdm1fczM5MF9zeW5jX3JlcXVlc3RfYnJvYWRjYXN0KHN0cnVjdCBrdm0gKmt2bSwgaW50IHJlcSlcXG4gXFxuIC8qXFxuICAqIE11c3QgYmUgY2FsbGVkIHdpdGgga3ZtLVxcdTAwM2VzcmN1IGhlbGQgdG8gYXZvaWQgcmFjZXMgb24gbWVtc2xvdHMsIGFuZCB3aXRoXFxuLSAqIGt2bS1cXHUwMDNlc2xvdHNfbG9jayB0byBhdm9pZCByYWNlcyB3aXRoIG91cnNlbHZlcywga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb24oKSxcXG4tICogYW5kIGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoKS5cXG4rICoga3ZtLVxcdTAwM2VzbG90c19hcmNoX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsXFxuKyAqIGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKCksIGFuZCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKCkuXFxuICAqL1xcbiBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXFxuIHtcXG5AQCAtMTI2NSw3ICsxMjY1LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKVxcbiB9XFxuIFxcbiAvKlxcbi0gKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGt2bS1cXHUwMDNlc2xvdHNfbG9jayB0byBhdm9pZCByYWNlcyB3aXRoIG91cnNlbHZlcyxcXG4rICogTXVzdCBiZSBjYWxsZWQgd2l0aCBrdm0tXFx1MDAzZXNsb3RzX2FyY2hfbG9jayB0byBhdm9pZCByYWNlcyB3aXRoIG91cnNlbHZlcyxcXG4gICoga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKCkgYW5kIGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoKS5cXG4gICovXFxuIHN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKVxcbkBAIC0xMzAwLDcgKzEzMDAsOSBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtLFxcbiB7XFxuIFxcdGludCByZXMgPSAtRU5YSU87XFxuIFxcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbitcXHRndWFyZChzcmN1KShcXHUwMDI2a3ZtLVxcdTAwM2VzcmN1KTtcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2FyY2hfbG9jayk7XFxuK1xcbiBcXHRzd2l0Y2ggKGF0dHItXFx1MDAzZWF0dHIpIHtcXG4gXFx0Y2FzZSBLVk1fUzM5MF9WTV9NSUdSQVRJT05fU1RBUlQ6XFxuIFxcdFxcdHJlcyA9IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihrdm0pO1xcbkBAIC0xMzExLDcgKzEzMTMsNiBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuIFxcbiBcXHRyZXR1cm4gcmVzO1xcbiB9XFxuQEAgLTIyMTQsNyArMjIxNSw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfZ2V0X3NrZXlzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX3NrZXlzICphcmdzKVxcbiBcXHR9XFxuIFxcbiBcXHRrdmZyZWUoa2V5cyk7XFxuLVxcdHJldHVybiByO1xcbitcXHRyZXR1cm4gciBcXHUwMDNjPSAwID8gciA6IC1FRkFVTFQ7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQga3ZtX3MzOTBfc2V0X3NrZXlzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX3NrZXlzICphcmdzKVxcbkBAIC0yMjc2LDcgKzIyNzcsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3NldF9za2V5cyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczM5MF9za2V5cyAqYXJncylcXG4gXFx0a3ZtX3MzOTBfZnJlZV9tbXVfY2FjaGUobWMpO1xcbiBvdXQ6XFxuIFxcdGt2ZnJlZShrZXlzKTtcXG4tXFx0cmV0dXJuIHI7XFxuK1xcdHJldHVybiByIFxcdTAwM2M9IDAgPyByIDogLUVGQVVMVDtcXG4gfVxcbiBcXG4gLypcXG5AQCAtMjM4Niw3ICsyMzg3LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfY21tYV9iaXRzKHN0cnVjdCBrdm0gKmt2bSxcXG4gXFxuIFxcdHNldF9iaXQoR01BUF9GTEFHX1VTRVNfQ01NLCBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLmdtYXAtXFx1MDAzZWZsYWdzKTtcXG4gXFxuLVxcdHJldHVybiByO1xcbitcXHRyZXR1cm4gciBcXHUwMDNjPSAwID8gciA6IC1FRkFVTFQ7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC0yOTk4LDkgKzI5OTksOCBAQCBpbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuIFxcdFxcdHIgPSAtRUZBVUxUO1xcbiBcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNmFyZ3MsIGFyZ3AsIHNpemVvZihhcmdzKSkpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbi1cXHRcXHRyID0ga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cyhrdm0sIFxcdTAwMjZhcmdzKTtcXG4tXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbitcXHRcXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2FyY2hfbG9jaylcXG4rXFx0XFx0XFx0ciA9IGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoa3ZtLCBcXHUwMDI2YXJncyk7XFxuIFxcdFxcdGlmICghcikge1xcbiBcXHRcXHRcXHRyID0gY29weV90b191c2VyKGFyZ3AsIFxcdTAwMjZhcmdzLCBzaXplb2YoYXJncykpO1xcbiBcXHRcXHRcXHRpZiAocilcXG5AQCAtMzAxNCw5ICszMDE0LDkgQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbiBcXHRcXHRyID0gLUVGQVVMVDtcXG4gXFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZhcmdzLCBhcmdwLCBzaXplb2YoYXJncykpKVxcbiBcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG4rXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19hcmNoX2xvY2spO1xcbiBcXHRcXHRyID0ga3ZtX3MzOTBfc2V0X2NtbWFfYml0cyhrdm0sIFxcdTAwMjZhcmdzKTtcXG4tXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gXFx0Y2FzZSBLVk1fUzM5MF9QVl9DT01NQU5EOiB7XFxuQEAgLTM0NjEsNyArMzQ2MSw3IEBAIHN0YXRpYyB2b2lkIHNjYV9kZWxfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0c3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5zY2E7XFxuIFxcbi1cXHRpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKVxcbitcXHRpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpIHx8ICF2Y3B1LVxcdTAwM2VhcmNoLmluaXRpYWxpemVkKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRjbGVhcl9iaXRfaW52KHZjcHUtXFx1MDAzZXZjcHVfaWQsICh1bnNpZ25lZCBsb25nICopc2NhLVxcdTAwM2VtY24pO1xcbkBAIC0zNDgxLDggKzM0ODEsOCBAQCBzdGF0aWMgdm9pZCBzY2FfYWRkX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbitcXHRXUklURV9PTkNFKHNjYS1cXHUwMDNlY3B1W3ZjcHUtXFx1MDAzZXZjcHVfaWRdLnNkYSwgdmlydF90b19waHlzKHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrKSk7XFxuIFxcdHNldF9iaXRfaW52KHZjcHUtXFx1MDAzZXZjcHVfaWQsICh1bnNpZ25lZCBsb25nICopc2NhLVxcdTAwM2VtY24pO1xcbi1cXHRzY2EtXFx1MDAzZWNwdVt2Y3B1LVxcdTAwM2V2Y3B1X2lkXS5zZGEgPSB2aXJ0X3RvX3BoeXModmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2spO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHNjYV9jYW5fYWRkX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQpXFxuQEAgLTM2MTMsNiArMzYxMyw5IEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0aWYgKHRlc3Rfa3ZtX2ZhY2lsaXR5KHZjcHUtXFx1MDAzZWt2bSwgNzQpIHx8IHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC51c2VyX2luc3RyMCB8fFxcbiBcXHQgICAgdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLnVzZXJfb3BlcmV4ZWMpXFxuIFxcdFxcdHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrLVxcdTAwM2VpY3RsIHw9IElDVExfT1BFUkVYQztcXG4rXFxuK1xcdC8qIFBhaXJzIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpIGluIGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKCkgYW5kIGt2bV9hcmNoX3ZjcHVfaW9jdGwoKSAqL1xcbitcXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5pbml0aWFsaXplZCwgdHJ1ZSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIGt2bV9oYXNfcGNrbW9fc3ViZnVuYyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbnIpXFxuQEAgLTM2NzQsNyArMzY3Nyw4IEBAIHN0YXRpYyB2b2lkIGt2bV9zMzkwX3ZjcHVfY3J5cHRvX3NldHVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFxuIHZvaWQga3ZtX3MzOTBfdmNwdV91bnNldHVwX2NtbWEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuLVxcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwaHlzX3RvX3ZpcnQodmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZWNicmxvKSk7XFxuK1xcdGlmICh2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jay1cXHUwMDNlY2JybG8pXFxuK1xcdFxcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwaHlzX3RvX3ZpcnQodmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZWNicmxvKSk7XFxuIFxcdHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrLVxcdTAwM2VjYnJsbyA9IDA7XFxuIH1cXG4gXFxuQEAgLTM3OTIsMjEgKzM3OTYsMjEgQEAgaW50IGt2bV9hcmNoX3ZjcHVfcHJlY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGlkKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rREVGSU5FX0ZSRUUoc2llX3BhZ2UsIHN0cnVjdCBzaWVfcGFnZSAqLCBpZiAoX1QpIGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykoX1QpKSlcXG4rXFxuIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4tXFx0c3RydWN0IHNpZV9wYWdlICpzaWVfcGFnZTtcXG4rXFx0c3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMgX19mcmVlKGt2bV9zMzkwX21tdV9jYWNoZSkgPSBOVUxMO1xcbitcXHRzdHJ1Y3Qgc2llX3BhZ2UgKnNpZV9wYWdlIF9fZnJlZShzaWVfcGFnZSkgPSBOVUxMO1xcbiBcXHRpbnQgcmM7XFxuIFxcbiBcXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBzaWVfcGFnZSkgIT0gNDA5Nik7XFxuLVxcdHZjcHUtXFx1MDAzZWFyY2gubWMgPSBrdm1fczM5MF9uZXdfbW11X2NhY2hlKCk7XFxuLVxcdGlmICghdmNwdS1cXHUwMDNlYXJjaC5tYylcXG4rXFx0bWMgPSBrdm1fczM5MF9uZXdfbW11X2NhY2hlKCk7XFxuK1xcdGlmICghbWMpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHRzaWVfcGFnZSA9IChzdHJ1Y3Qgc2llX3BhZ2UgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuLVxcdGlmICghc2llX3BhZ2UpIHtcXG4tXFx0XFx0a3ZtX3MzOTBfZnJlZV9tbXVfY2FjaGUodmNwdS1cXHUwMDNlYXJjaC5tYyk7XFxuLVxcdFxcdHZjcHUtXFx1MDAzZWFyY2gubWMgPSBOVUxMO1xcbitcXHRpZiAoIXNpZV9wYWdlKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFx0fVxcbiBcXG4gXFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2sgPSBcXHUwMDI2c2llX3BhZ2UtXFx1MDAzZXNpZV9ibG9jaztcXG4gXFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZWl0ZGJhID0gdmlydF90b19waHlzKFxcdTAwMjZzaWVfcGFnZS1cXHUwMDNlaXRkYik7XFxuQEAgLTM4NDgsMTAgKzM4NTIsOSBAQCBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRcXHR2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZWt2bV92YWxpZF9yZWdzIHw9IEtWTV9TWU5DX0ZQUlM7XFxuIFxcbiBcXHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSkpIHtcXG4tXFx0XFx0cmMgPSAtRU5PTUVNO1xcbiBcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLmdtYXAgPSBnbWFwX25ld19jaGlsZCh2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guZ21hcCwgLTFVTCk7XFxuIFxcdFxcdGlmICghdmNwdS1cXHUwMDNlYXJjaC5nbWFwKVxcbi1cXHRcXHRcXHRnb3RvIG91dF9mcmVlX3NpZV9ibG9jaztcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdH1cXG4gXFxuIFxcdFZNX0VWRU5UKHZjcHUtXFx1MDAzZWt2bSwgMywgXFxcImNyZWF0ZSBjcHUgJWQgYXQgMHglcCwgc2llIGJsb2NrIGF0IDB4JXBcXFwiLFxcbkBAIC0zODU5LDIwICszODYyLDE5IEBAIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdHRyYWNlX2t2bV9zMzkwX2NyZWF0ZV92Y3B1KHZjcHUtXFx1MDAzZXZjcHVfaWQsIHZjcHUsIHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrKTtcXG4gXFxuIFxcdHJjID0ga3ZtX3MzOTBfdmNwdV9zZXR1cCh2Y3B1KTtcXG4tXFx0aWYgKHJjKVxcbi1cXHRcXHRnb3RvIG91dF91Y29udHJvbF91bmluaXQ7XFxuK1xcdGlmIChyYykge1xcbitcXHRcXHRpZiAoa3ZtX2lzX3Vjb250cm9sKHZjcHUtXFx1MDAzZWt2bSkpIHtcXG4rXFx0XFx0XFx0c2NvcGVkX2d1YXJkKHNwaW5sb2NrLCBcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLmdtYXAtXFx1MDAzZWNoaWxkcmVuX2xvY2spXFxuK1xcdFxcdFxcdFxcdGdtYXBfcmVtb3ZlX2NoaWxkKHZjcHUtXFx1MDAzZWFyY2guZ21hcCk7XFxuK1xcdFxcdFxcdHZjcHUtXFx1MDAzZWFyY2guZ21hcCA9IGdtYXBfcHV0KHZjcHUtXFx1MDAzZWFyY2guZ21hcCk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXHR9XFxuIFxcbitcXHR2Y3B1LVxcdTAwM2VhcmNoLm1jID0gbm9fZnJlZV9wdHIobWMpO1xcbitcXHRzaWVfcGFnZSA9IE5VTEw7XFxuIFxcdGt2bV9zMzkwX3VwZGF0ZV90b3BvbG9neV9jaGFuZ2VfcmVwb3J0KHZjcHUtXFx1MDAzZWt2bSwgMSk7XFxuIFxcdHJldHVybiAwO1xcbi1cXG4tb3V0X3Vjb250cm9sX3VuaW5pdDpcXG4tXFx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVxcdTAwM2Vrdm0pKSB7XFxuLVxcdFxcdGdtYXBfcmVtb3ZlX2NoaWxkKHZjcHUtXFx1MDAzZWFyY2guZ21hcCk7XFxuLVxcdFxcdHZjcHUtXFx1MDAzZWFyY2guZ21hcCA9IGdtYXBfcHV0KHZjcHUtXFx1MDAzZWFyY2guZ21hcCk7XFxuLVxcdH1cXG4tb3V0X2ZyZWVfc2llX2Jsb2NrOlxcbi1cXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpKHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrKSk7XFxuLVxcdHJldHVybiByYztcXG4gfVxcbiBcXG4gaW50IGt2bV9hcmNoX3ZjcHVfcnVubmFibGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbkBAIC01MDM5LDYgKzUwNDEsMTAgQEAgaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0ICAgIGt2bV9ydW4tXFx1MDAzZWt2bV9kaXJ0eV9yZWdzIFxcdTAwMjYgfktWTV9TWU5DX1MzOTBfVkFMSURfRklFTERTKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuK1xcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUoKSAqL1xcbitcXHRpZiAoIXNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guaW5pdGlhbGl6ZWQpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuIFxcdHZjcHVfbG9hZCh2Y3B1KTtcXG4gXFxuIFxcdGlmIChndWVzdGRiZ19leGl0X3BlbmRpbmcodmNwdSkpIHtcXG5AQCAtNTUyMyw2ICs1NTI5LDEwIEBAIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcXG4gXFx0bG9uZyByO1xcbiBcXHR1MTYgcmMsIHJyYztcXG4gXFxuK1xcdC8qIFBhaXJzIHdpdGggc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUoKSAqL1xcbitcXHRpZiAoIXNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guaW5pdGlhbGl6ZWQpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuIFxcdHZjcHVfbG9hZCh2Y3B1KTtcXG4gXFxuIFxcdHN3aXRjaCAoaW9jdGwpIHtcXG5AQCAtNTc5NCwyNCArNTgwNCw0NCBAQCBpbnQga3ZtX2FyY2hfcHJlcGFyZV9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBsb25nIGNtbWFfZF9jb3VudF9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaylcXG4re1xcbitcXHR1bmlvbiBwZ3N0ZSBwZ3N0ZTtcXG4rXFxuK1xcdHBnc3RlID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7XFxuK1xcdGlmIChwZ3N0ZS5jbW1hX2QpIHtcXG4rXFx0XFx0cGdzdGUuY21tYV9kID0gMDtcXG4rXFx0XFx0YXRvbWljNjRfZGVjKHdhbGstXFx1MDAzZXByaXYpO1xcbitcXHR9XFxuK1xcdHBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm9sZCxcXG4gXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbmV3LFxcbiBcXHRcXHRcXHRcXHRlbnVtIGt2bV9tcl9jaGFuZ2UgY2hhbmdlKVxcbiB7XFxuLVxcdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jID0gTlVMTDtcXG4tXFx0aW50IHJjID0gMDtcXG4rXFx0Y29uc3Qgc3RydWN0IGRhdF93YWxrX29wcyBvcHMgPSB7IC5wdGVfZW50cnkgPSBjbW1hX2RfY291bnRfcHRlLCB9O1xcbitcXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYyBfX2ZyZWUoa3ZtX3MzOTBfbW11X2NhY2hlKSA9IE5VTEw7XFxuK1xcdGludCByYyA9IC1FTk9NRU07XFxuK1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcXG4gXFxuIFxcdGlmIChjaGFuZ2UgPT0gS1ZNX01SX0ZMQUdTX09OTFkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdG1jID0ga3ZtX3MzOTBfbmV3X21tdV9jYWNoZSgpO1xcbi1cXHRpZiAoIW1jKSB7XFxuLVxcdFxcdHJjID0gLUVOT01FTTtcXG4rXFx0aWYgKCFtYylcXG4gXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4tXFxuK3JldHJ5OlxcbiBcXHRzY29wZWRfZ3VhcmQod3JpdGVfbG9jaywgXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spIHtcXG4rXFx0XFx0aWYgKGt2bS1cXHUwMDNlYXJjaC5taWdyYXRpb25fbW9kZSBcXHUwMDI2XFx1MDAyNiBrdm0tXFx1MDAzZWFyY2gudXNlX2NtbWEgXFx1MDAyNlxcdTAwMjYgb2xkKSB7XFxuK1xcdFxcdFxcdF9kYXRfd2Fsa19nZm5fcmFuZ2Uob2xkLVxcdTAwM2ViYXNlX2dmbiwgb2xkLVxcdTAwM2ViYXNlX2dmbiArIG9sZC1cXHUwMDNlbnBhZ2VzLFxcbitcXHRcXHRcXHRcXHRcXHQgICAga3ZtLVxcdTAwM2VhcmNoLmdtYXAtXFx1MDAzZWFzY2UsIFxcdTAwMjZvcHMsIERBVF9XQUxLX0lHTl9IT0xFUyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZrdm0tXFx1MDAzZWFyY2guY21tYV9kaXJ0eV9wYWdlcyk7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdHN3aXRjaCAoY2hhbmdlKSB7XFxuIFxcdFxcdGNhc2UgS1ZNX01SX0RFTEVURTpcXG4gXFx0XFx0XFx0cmMgPSBkYXRfZGVsZXRlX3Nsb3QobWMsIGt2bS1cXHUwMDNlYXJjaC5nbWFwLVxcdTAwM2Vhc2NlLCBvbGQtXFx1MDAzZWJhc2VfZ2ZuLCBvbGQtXFx1MDAzZW5wYWdlcyk7XFxuQEAgLTU4MjcsMTMgKzU4NTcsMTggQEAgdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdFxcdGNhc2UgS1ZNX01SX0ZMQUdTX09OTFk6XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRkZWZhdWx0OlxcbitcXHRcXHRcXHRyYyA9IDA7XFxuIFxcdFxcdFxcdFdBUk4oMSwgXFxcIlVua25vd24gS1ZNIE1SIENIQU5HRTogJWRcXFxcblxcXCIsIGNoYW5nZSk7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbitcXHRpZiAocmMgPT0gLUVOT01FTSkge1xcbitcXHRcXHRyYyA9IGt2bV9zMzkwX21tdV9jYWNoZV90b3B1cChtYyk7XFxuK1xcdFxcdGlmICghcmMpXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdH1cXG4gb3V0Olxcbi1cXHRpZiAocmMpXFxuK1xcdGlmIChLVk1fQlVHX09OKHJjLCBrdm0pKVxcbiBcXHRcXHRwcl93YXJuKFxcXCJmYWlsZWQgdG8gY29tbWl0IG1lbW9yeSByZWdpb25cXFxcblxcXCIpO1xcbi1cXHRrdm1fczM5MF9mcmVlX21tdV9jYWNoZShtYyk7XFxuIFxcdHJldHVybjtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9wcml2LmMgYi9hcmNoL3MzOTAva3ZtL3ByaXYuY1xcbmluZGV4IGFkMGRkYzQzM2E3M2MuLmIxYmEyNGMzNDZlZmEgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9wcml2LmNcXG4rKysgYi9hcmNoL3MzOTAva3ZtL3ByaXYuY1xcbkBAIC0yODksNiArMjg5LDcgQEAgc3RhdGljIGludCBoYW5kbGVfaXNrZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHN0YXRpYyBpbnQgaGFuZGxlX3JyYmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZ2FkZHI7XFxuK1xcdHVuaW9uIHNrZXkgc2tleTtcXG4gXFx0aW50IHJlZzEsIHJlZzI7XFxuIFxcdGludCByYztcXG4gXFxuQEAgLTMwNywxMiArMzA4LDEyIEBAIHN0YXRpYyBpbnQgaGFuZGxlX3JyYmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRnYWRkciA9IGt2bV9zMzkwX2xvZ2ljYWxfdG9fZWZmZWN0aXZlKHZjcHUsIGdhZGRyKTtcXG4gXFx0Z2FkZHIgPSBrdm1fczM5MF9yZWFsX3RvX2Ficyh2Y3B1LCBnYWRkcik7XFxuIFxcdHNjb3BlZF9ndWFyZChyZWFkX2xvY2ssIFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZW1tdV9sb2NrKVxcbi1cXHRcXHRyYyA9IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHZjcHUtXFx1MDAzZWFyY2guZ21hcC1cXHUwMDNlYXNjZSwgZ3BhX3RvX2dmbihnYWRkcikpO1xcbitcXHRcXHRyYyA9IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHZjcHUtXFx1MDAzZWFyY2guZ21hcC1cXHUwMDNlYXNjZSwgZ3BhX3RvX2dmbihnYWRkciksIFxcdTAwMjZza2V5KTtcXG4gXFx0aWYgKHJjIFxcdTAwM2UgMClcXG4gXFx0XFx0cmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LCByYyk7XFxuIFxcdGlmIChyYyBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiByYztcXG4tXFx0a3ZtX3MzOTBfc2V0X3Bzd19jYyh2Y3B1LCByYyk7XFxuK1xcdGt2bV9zMzkwX3NldF9wc3dfY2ModmNwdSwgKHNrZXkuc2tleSBcXHUwMDNlXFx1MDAzZSAxKSBcXHUwMDI2IDMpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtMTI2MCw4ICsxMjYxLDkgQEAgc3RhdGljIGludCBoYW5kbGVfZXNzYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdFxcdC8qIFJldHJ5IHRoZSBFU1NBIGluc3RydWN0aW9uICovXFxuIFxcdFxcdGt2bV9zMzkwX3JldHJ5X2luc3RyKHZjcHUpO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRzY29wZWRfZ3VhcmQocmVhZF9sb2NrLCBcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VtbXVfbG9jaylcXG4tXFx0XFx0XFx0aSA9IF9fZG9fZXNzYSh2Y3B1LCBvcmMpO1xcbitcXHRcXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZXNsb3RzX2FyY2hfbG9jaylcXG4rXFx0XFx0XFx0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlbW11X2xvY2spXFxuK1xcdFxcdFxcdFxcdGkgPSBfX2RvX2Vzc2EodmNwdSwgb3JjKTtcXG4gXFx0XFx0aWYgKGkgXFx1MDAzYyAwKVxcbiBcXHRcXHRcXHRyZXR1cm4gaTtcXG4gXFx0XFx0LyogQWNjb3VudCBmb3IgdGhlIHBvc3NpYmxlIGV4dHJhIGNicmwgZW50cnkgKi9cXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9wdi5jIGIvYXJjaC9zMzkwL2t2bS9wdi5jXFxuaW5kZXggMWJlYWNjODQxY2E4NS4uYjAyZTAxNTlkM2NkMiAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva3ZtL3B2LmNcXG4rKysgYi9hcmNoL3MzOTAva3ZtL3B2LmNcXG5AQCAtMjQ0LDYgKzI0NCwyNCBAQCBzdGF0aWMgdm9pZCBrdm1fczM5MF9jbGVhcl9wdl9zdGF0ZShzdHJ1Y3Qga3ZtICprdm0pXFxuIFxcdGt2bS1cXHUwMDNlYXJjaC5wdi5zdG9yX3ZhciA9IE5VTEw7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGt2bV9zMzkwX3B2X2Rpc3Bvc2VfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmcmVlX3N0b3JfYmFzZSlcXG4re1xcbitcXHRpZiAoZnJlZV9zdG9yX2Jhc2UpXFxuK1xcdFxcdGZyZWVfcGFnZXModmNwdS1cXHUwMDNlYXJjaC5wdi5zdG9yX2Jhc2UsIGdldF9vcmRlcih1dl9pbmZvLmd1ZXN0X2NwdV9zdG9yX2xlbikpO1xcbitcXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2lkYV9hZGRyKHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrKSk7XFxuK1xcdHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrLVxcdTAwM2Vwdl9oYW5kbGVfY3B1ID0gMDtcXG4rXFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZXB2X2hhbmRsZV9jb25maWcgPSAwO1xcbitcXHRtZW1zZXQoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gucHYsIDAsIHNpemVvZih2Y3B1LVxcdTAwM2VhcmNoLnB2KSk7XFxuK1xcdHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrLVxcdTAwM2VzZGYgPSAwO1xcbitcXHQvKlxcbitcXHQgKiBUaGUgc2lkYWQgZmllbGQgKGZvciBzZGYgPT0gMikgaXMgbm93IHRoZSBnYmVhIGZpZWxkIChmb3Igc2RmID09IDApLlxcbitcXHQgKiBVc2UgdGhlIHJlc2V0IHZhbHVlIG9mIGdiZWEgdG8gYXZvaWQgbGVha2luZyB0aGUga2VybmVsIHBvaW50ZXIgb2ZcXG4rXFx0ICogdGhlIGp1c3QgZnJlZWQgc2lkYS5cXG4rXFx0ICovXFxuK1xcdHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrLVxcdTAwM2VnYmVhID0gMTtcXG4rXFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1RMQl9GTFVTSCwgdmNwdSk7XFxuK31cXG4rXFxuIGludCBrdm1fczM5MF9wdl9kZXN0cm95X2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKVxcbiB7XFxuIFxcdGludCBjYztcXG5AQCAtMjU4LDI0ICsyNzYsOSBAQCBpbnQga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYylcXG4gXFx0V0FSTl9PTkNFKGNjLCBcXFwicHJvdHZpcnQgZGVzdHJveSBjcHUgZmFpbGVkIHJjICV4IHJyYyAleFxcXCIsICpyYywgKnJyYyk7XFxuIFxcbiBcXHQvKiBJbnRlbmRlZCBtZW1vcnkgbGVhayBmb3Igc29tZXRoaW5nIHRoYXQgc2hvdWxkIG5ldmVyIGhhcHBlbi4gKi9cXG4tXFx0aWYgKCFjYylcXG4tXFx0XFx0ZnJlZV9wYWdlcyh2Y3B1LVxcdTAwM2VhcmNoLnB2LnN0b3JfYmFzZSxcXG4tXFx0XFx0XFx0ICAgZ2V0X29yZGVyKHV2X2luZm8uZ3Vlc3RfY3B1X3N0b3JfbGVuKSk7XFxuLVxcbi1cXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2lkYV9hZGRyKHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrKSk7XFxuLVxcdHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrLVxcdTAwM2Vwdl9oYW5kbGVfY3B1ID0gMDtcXG4tXFx0dmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZXB2X2hhbmRsZV9jb25maWcgPSAwO1xcbi1cXHRtZW1zZXQoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gucHYsIDAsIHNpemVvZih2Y3B1LVxcdTAwM2VhcmNoLnB2KSk7XFxuLVxcdHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrLVxcdTAwM2VzZGYgPSAwO1xcbi1cXHQvKlxcbi1cXHQgKiBUaGUgc2lkYWQgZmllbGQgKGZvciBzZGYgPT0gMikgaXMgbm93IHRoZSBnYmVhIGZpZWxkIChmb3Igc2RmID09IDApLlxcbi1cXHQgKiBVc2UgdGhlIHJlc2V0IHZhbHVlIG9mIGdiZWEgdG8gYXZvaWQgbGVha2luZyB0aGUga2VybmVsIHBvaW50ZXIgb2ZcXG4tXFx0ICogdGhlIGp1c3QgZnJlZWQgc2lkYS5cXG4tXFx0ICovXFxuLVxcdHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrLVxcdTAwM2VnYmVhID0gMTtcXG4tXFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1RMQl9GTFVTSCwgdmNwdSk7XFxuK1xcdGt2bV9zMzkwX3B2X2Rpc3Bvc2VfY3B1KHZjcHUsICFjYyk7XFxuIFxcbi1cXHRyZXR1cm4gY2MgPyBFSU8gOiAwO1xcbitcXHRyZXR1cm4gY2MgPyAtRUlPIDogMDtcXG4gfVxcbiBcXG4gaW50IGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYylcXG5AQCAtMzE5LDkgKzMyMiw3IEBAIGludCBrdm1fczM5MF9wdl9jcmVhdGVfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXFxuIFxcdFxcdCAgICAgdXZjYi5oZWFkZXIucnJjKTtcXG4gXFxuIFxcdGlmIChjYykge1xcbi1cXHRcXHR1MTYgZHVtbXk7XFxuLVxcbi1cXHRcXHRrdm1fczM5MF9wdl9kZXN0cm95X2NwdSh2Y3B1LCBcXHUwMDI2ZHVtbXksIFxcdTAwMjZkdW1teSk7XFxuK1xcdFxcdGt2bV9zMzkwX3B2X2Rpc3Bvc2VfY3B1KHZjcHUsIHRydWUpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTztcXG4gXFx0fVxcbiBcXG5AQCAtODA5LDcgKzgxMCw3IEBAIHN0YXRpYyBpbnQgdW5wYWNrX29uZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgYWRkciwgdTY0IHR3ZWFrLFxcbiBcXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiByZXQgIT0gLUVBR0FJTilcXG4rXFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiByZXQgIT0gLUVBR0FJTiBcXHUwMDI2XFx1MDAyNiByZXQgIT0gLUVJTlRSKVxcbiBcXHRcXHRLVk1fVVZfRVZFTlQoa3ZtLCAzLCBcXFwiUFJPVFZJUlQgVk0gVU5QQUNLOiBmYWlsZWQgYWRkciAlbGx4IHdpdGggcmMgJXggcnJjICV4XFxcIixcXG4gXFx0XFx0XFx0ICAgICB1dmNiLmdhZGRyLCAqcmMsICpycmMpO1xcbiBcXHRyZXR1cm4gcmV0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDowNjowNi43NDQwMTk4OTdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTI1NTU2MTQ5MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2FyY2hfdmNwdV9jcmVhdGVcIixcbiAgICBcImt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uXCIsXG4gICAgXCJrdm1fczM5MF9wdl9jcmVhdGVfY3B1XCIsXG4gICAgXCJrdm1fczM5MF9wdl9kZXN0cm95X2NwdVwiLFxuICAgIFwia3ZtX3MzOTBfZmF1bHRpbl9nZm5cIixcbiAgICBcImt2bV9zMzkwX2luamVjdF92Y3B1XCIsXG4gICAgXCJrdm1fczM5MF9oYW5kbGVfYjJcIixcbiAgICBcImt2bV9zMzkwX2hhbmRsZV9iOVwiLFxuICAgIFwia3ZtX2FyY2hfdm1faW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBzMzkwIEtWTSBpbXBsZW1lbnRhdGlvbiwgaW5jbHVkaW5nIGZpeGluZyBtZW1vcnkgbGVha3MgZHVyaW5nIHZDUFUgY3JlYXRpb24vZGVzdHJ1Y3Rpb24sIG1vZGlmeWluZyByZWZlcmVuY2UgYml0IHJlc2V0dGluZyBmb3Igc3RvcmFnZSBrZXlzLCBhZGp1c3Rpbmcgc2lnbmFsIGhhbmRsaW5nIGR1cmluZyBwYWdlIGZhdWx0cywgYW5kIGltcHJvdmluZyBsb2NraW5nIGR1cmluZyBtZW1vcnkgcmVnaW9uIGNvbW1pdHMgYW5kIG1pZ3JhdGlvbi4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIHZpcnR1YWxpemF0aW9uIGZlYXR1cmVzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZmJmNWNkNWI5YTI0MDM1OTc1NjhjOGRlZmJhZTI5ZTc4N2YyNDU4OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMxIDAwOjA2OjA1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggZWFhMzRjNWJkM2MxMS4uZWRmNzViNmFkMjBjZSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4rKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTQ0MCw2ICs0NDAsNyBAQCBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7XG4gXHRib29sIHNrZXlfZW5hYmxlZDtcbiBcdC8qIEluZGljYXRvciBpZiB0aGUgYWNjZXNzIHJlZ2lzdGVycyBoYXZlIGJlZW4gbG9hZGVkIGZyb20gZ3Vlc3QgKi9cbiBcdGJvb2wgYWNyc19sb2FkZWQ7XG4rXHRib29sIGluaXRpYWxpemVkO1xuIFx0c3RydWN0IGt2bV9zMzkwX3B2X3ZjcHUgcHY7XG4gXHR1bmlvbiBkaWFnMzE4X2luZm8gZGlhZzMxOF9pbmZvO1xuIFx0c3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWM7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9kYXQuYyBiL2FyY2gvczM5MC9rdm0vZGF0LmNcbmluZGV4IGVkNDI1OWQxNzYyOTUuLjNmMmQ2ZTg5MDJkNzYgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2RhdC5jXG4rKysgYi9hcmNoL3MzOTAva3ZtL2RhdC5jXG5AQCAtNzU1LDEzICs3NTUsMTUgQEAgaW50IGRhdF9jb25kX3NldF9zdG9yYWdlX2tleShzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2ZcbiBcdHJldHVybiByYztcbiB9XG4gXG4taW50IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZuKVxuK2ludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbiwgdW5pb24gc2tleSAqc2tleSlcbiB7XG4gXHR1bmlvbiBwZ3N0ZSBwZ3N0ZSwgb2xkO1xuIFx0dW5pb24gY3JzdGUgKmNyc3RlcDtcbiBcdHVuaW9uIHB0ZSAqcHRlcDtcbiBcdGludCByYztcbiBcbitcdHNrZXktXHUwMDNlc2tleSA9IDA7XG4rXG4gXHRyYyA9IGRhdF9lbnRyeV93YWxrKE5VTEwsIGdmbiwgYXNjZSwgREFUX1dBTEtfQU5ZLCBUQUJMRV9UWVBFX1BBR0VfVEFCTEUsIFx1MDAyNmNyc3RlcCwgXHUwMDI2cHRlcCk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiByYztcbkBAIC03NzEsMjEgKzc3MywyMyBAQCBpbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4pXG4gXG4gXHRcdGlmICghY3JzdGUuaC5mYyB8fCAhY3JzdGUucy5mYzEucHIpXG4gXHRcdFx0cmV0dXJuIDA7XG4tXHRcdHJldHVybiBwYWdlX3Jlc2V0X3JlZmVyZW5jZWQobGFyZ2VfY3JzdGVfdG9fcGh5cygqY3JzdGVwLCBnZm4pKTtcbitcdFx0c2tleS1cdTAwM2Vza2V5ID0gcGFnZV9yZXNldF9yZWZlcmVuY2VkKGxhcmdlX2Nyc3RlX3RvX3BoeXMoKmNyc3RlcCwgZ2ZuKSkgXHUwMDNjXHUwMDNjIDE7XG4rXHRcdHJldHVybiAwO1xuIFx0fVxuIFx0b2xkID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7XG4gXHRwZ3N0ZSA9IG9sZDtcbiBcbiBcdGlmICghcHRlcC1cdTAwM2VoLmkpIHtcbi1cdFx0cmMgPSBwYWdlX3Jlc2V0X3JlZmVyZW5jZWQocHRlX29yaWdpbigqcHRlcCkpO1xuLVx0XHRwZ3N0ZS5ociA9IHJjIFx1MDAzZVx1MDAzZSAxO1xuK1x0XHRza2V5LVx1MDAzZXNrZXkgPSBwYWdlX3Jlc2V0X3JlZmVyZW5jZWQocHRlX29yaWdpbigqcHRlcCkpIFx1MDAzY1x1MDAzYyAxO1xuK1x0XHRwZ3N0ZS5ociA9IHNrZXktXHUwMDNlcjtcbiBcdH1cbi1cdHJjIHw9IChwZ3N0ZS5nciBcdTAwM2NcdTAwM2MgMSkgfCBwZ3N0ZS5nYztcbitcdHNrZXktXHUwMDNlciB8PSBwZ3N0ZS5ncjtcbitcdHNrZXktXHUwMDNlYyB8PSBwZ3N0ZS5nYztcbiBcdHBnc3RlLmdyID0gMDtcbiBcbiBcdGRhdF91cGRhdGVfcHRlcF9zZChvbGQsIHBnc3RlLCBwdGVwKTtcbiBcdHBnc3RlX3NldF91bmxvY2socHRlcCwgcGdzdGUpO1xuLVx0cmV0dXJuIHJjO1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBsb25nIGRhdF9yZXNldF9za2V5c19wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaylcbkBAIC04NDYsNiArODUwLDcgQEAgc3RhdGljIGxvbmcgX2RhdF9zbG90X3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxcbiBcdHN0cnVjdCBzbG90X3ByaXYgKnAgPSB3YWxrLVx1MDAzZXByaXY7XG4gXHR1bmlvbiBjcnN0ZSBkdW1teSA9IHsgLnZhbCA9IHAtXHUwMDNldG9rZW4gfTtcbiBcdHVuaW9uIHB0ZSBuZXdfcHRlLCBwdGUgPSBSRUFEX09OQ0UoKnB0ZXApO1xuK1x0dW5pb24gcGdzdGUgcGdzdGU7XG4gXG4gXHRuZXdfcHRlID0gX1BURV9UT0soZHVtbXkudG9rLnR5cGUsIGR1bW15LnRvay5wYXIpO1xuIFxuQEAgLTg1Myw3ICs4NTgsMTEgQEAgc3RhdGljIGxvbmcgX2RhdF9zbG90X3B0ZSh1bmlvbiBwdGUgKnB0ZXAsIGdmbl90IGdmbiwgZ2ZuX3QgbmV4dCwgc3RydWN0IGRhdF93YWxcbiBcdGlmIChwdGUudmFsID09IG5ld19wdGUudmFsKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGRhdF9wdGVwX3hjaGcocHRlcCwgbmV3X3B0ZSwgZ2ZuLCB3YWxrLVx1MDAzZWFzY2UsIGZhbHNlKTtcbitcdHBnc3RlID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7XG4rXHRwZ3N0ZSA9IF9fZGF0X3B0ZXBfeGNoZyhwdGVwLCBwZ3N0ZSwgbmV3X3B0ZSwgZ2ZuLCB3YWxrLVx1MDAzZWFzY2UsIGZhbHNlKTtcbitcdHBnc3RlLmNtbWFfZCA9IDA7XG4rXHRwZ3N0ZV9zZXRfdW5sb2NrKHB0ZXAsIHBnc3RlKTtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2RhdC5oIGIvYXJjaC9zMzkwL2t2bS9kYXQuaFxuaW5kZXggZmFkNjA1MzA1ZTA1Yy4uMTQxZWU3YjlmMDE5MSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vZGF0LmhcbisrKyBiL2FyY2gvczM5MC9rdm0vZGF0LmhcbkBAIC01MzcsNyArNTM3LDcgQEAgaW50IGRhdF9zZXRfc3RvcmFnZV9rZXkoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHVuaW9uIGFzY2UgYXNjZSwgZ2ZuX3QgZ2ZcbiBcdFx0XHR1bmlvbiBza2V5IHNrZXksIGJvb2wgbnEpO1xuIGludCBkYXRfY29uZF9zZXRfc3RvcmFnZV9rZXkoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbW1jLCB1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbixcbiBcdFx0XHQgICAgIHVuaW9uIHNrZXkgc2tleSwgdW5pb24gc2tleSAqb2xka2V5LCBib29sIG5xLCBib29sIG1yLCBib29sIG1jKTtcbi1pbnQgZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodW5pb24gYXNjZSBhc2NlLCBnZm5fdCBnZm4pO1xuK2ludCBkYXRfcmVzZXRfcmVmZXJlbmNlX2JpdCh1bmlvbiBhc2NlIGFzY2UsIGdmbl90IGdmbiwgdW5pb24gc2tleSAqc2tleSk7XG4gbG9uZyBkYXRfcmVzZXRfc2tleXModW5pb24gYXNjZSBhc2NlLCBnZm5fdCBzdGFydCk7XG4gXG4gdW5zaWduZWQgbG9uZyBkYXRfZ2V0X3B0dmFsKHN0cnVjdCBwYWdlX3RhYmxlICp0YWJsZSwgc3RydWN0IHB0dmFsX3BhcmFtIHBhcmFtKTtcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYyBiL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jXG5pbmRleCBmZWU4MDA0N2JkOTRmLi4zY2M0NWY3ZjViMmQ3IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9mYXVsdGluLmNcbisrKyBiL2FyY2gvczM5MC9rdm0vZmF1bHRpbi5jXG5AQCAtOTEsOSArOTEsOSBAQCBpbnQga3ZtX3MzOTBfZmF1bHRpbl9nZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBndWVzdF9mYVxuIFx0XHQvKiBBY2Nlc3Mgb3V0c2lkZSBtZW1vcnksIGFkZHJlc3NpbmcgZXhjZXB0aW9uLiAqL1xuIFx0XHRpZiAoaXNfbm9zbG90X3BmbihmLVx1MDAzZXBmbikpXG4gXHRcdFx0cmV0dXJuIFBHTV9BRERSRVNTSU5HO1xuLVx0XHQvKiBTaWduYWwgcGVuZGluZzogdHJ5IGFnYWluLiAqL1xuLVx0XHRpZiAoZi1cdTAwM2VwZm4gPT0gS1ZNX1BGTl9FUlJfU0lHUEVORElORylcbi1cdFx0XHRyZXR1cm4gLUVBR0FJTjtcbitcdFx0LyogRmF0YWwgc2lnbmFsIHBlbmRpbmc6IGJhaWwgb3V0LiAqL1xuK1x0XHRpZiAoaXNfc2lncGVuZGluZ19wZm4oZi1cdTAwM2VwZm4pKVxuK1x0XHRcdHJldHVybiAtRUlOVFI7XG4gXHRcdC8qIENoZWNrIGlmIGl0J3MgcmVhZC1vbmx5IG1lbW9yeTsgZG9uJ3QgdHJ5IHRvIGFjdHVhbGx5IGhhbmRsZSB0aGF0IGNhc2UuICovXG4gXHRcdGlmIChmLVx1MDAzZXBmbiA9PSBLVk1fUEZOX0VSUl9ST19GQVVMVClcbiBcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcbmluZGV4IDllM2U2YjBkNzJhZDYuLmQwMjcyNGJkMTgyOWMgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXG4rKysgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXG5AQCAtNTAsNiArNTAsOCBAQCBzdGF0aWMgaW50IHNjYV9leHRfY2FsbF9wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50ICpzcmNfaWQpXG4gXHRpZiAoIWt2bV9zMzkwX3Rlc3RfY3B1ZmxhZ3ModmNwdSwgQ1BVU1RBVF9FQ0FMTF9QRU5EKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4rXHRpZiAoS1ZNX0JVR19PTihrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pLCB2Y3B1LVx1MDAzZWt2bSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0QlVHX09OKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSk7XG4gXG4gXHRpZiAoc3JjX2lkKVxuQEAgLTY2LDYgKzY4LDggQEAgc3RhdGljIGludCBzY2FfaW5qZWN0X2V4dF9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNyY19pZClcbiBcdGludCBleHBlY3QsIHJjO1xuIFxuIFx0QlVHX09OKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSk7XG4rXHRpZiAoS1ZNX0JVR19PTihrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pLCB2Y3B1LVx1MDAzZWt2bSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0b2xkX3ZhbCA9IFJFQURfT05DRSgqc2lncF9jdHJsKTtcbiBcdG9sZF92YWwuYyA9IDA7XG5AQCAtODQsMTAgKzg4LDEzIEBAIHN0YXRpYyBpbnQgc2NhX2luamVjdF9leHRfY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzcmNfaWQpXG4gc3RhdGljIHZvaWQgc2NhX2NsZWFyX2V4dF9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRzdHJ1Y3QgZXNjYV9ibG9jayAqc2NhID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5zY2E7XG4tXHR1bmlvbiBlc2NhX3NpZ3BfY3RybCAqc2lncF9jdHJsID0gXHUwMDI2c2NhLVx1MDAzZWNwdVt2Y3B1LVx1MDAzZXZjcHVfaWRdLnNpZ3BfY3RybDtcbitcdHVuaW9uIGVzY2Ffc2lncF9jdHJsICpzaWdwX2N0cmw7XG4gXG4tXHRpZiAoIWt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpKVxuK1x0aWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSB8fCAhdmNwdS1cdTAwM2VhcmNoLmluaXRpYWxpemVkIHx8IGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpXG4gXHRcdHJldHVybjtcbitcbitcdC8qIEluaXRpYWxpemUgYWZ0ZXIgdGhlIGFib3ZlIGNoZWNrLCB0byBwcmV2ZW50IGdvaW5nIG91dCBvZiBib3VuZHMgKi9cbitcdHNpZ3BfY3RybCA9IFx1MDAyNnNjYS1cdTAwM2VjcHVbdmNwdS1cdTAwM2V2Y3B1X2lkXS5zaWdwX2N0cmw7XG4gXHRrdm1fczM5MF9jbGVhcl9jcHVmbGFncyh2Y3B1LCBDUFVTVEFUX0VDQUxMX1BFTkQpO1xuIFxuIFx0V1JJVEVfT05DRShzaWdwX2N0cmwtXHUwMDNldmFsdWUsIDApO1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuaW5kZXggMTUwYjVkZDIxNzBlMi4uYjI5ZTU0NjBmNWVmYSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1xuKysrIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXG5AQCAtNTcxLDcgKzU3MSw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfa2V5b3Aoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBrdm0gKmt2bSwgaW50IG9wXG4gXHRzd2l0Y2ggKG9wKSB7XG4gXHRjYXNlIEtWTV9TMzkwX0tFWU9QX1NTS0U6XG4gXHRcdHIgPSBkYXRfY29uZF9zZXRfc3RvcmFnZV9rZXkobWMsIGFzY2UsIGdmbiwgc2tleSwgXHUwMDI2c2tleSwgMCwgMCwgMCk7XG4tXHRcdGlmIChyIFx1MDAzZT0gMClcbitcdFx0aWYgKHIgPT0gMCB8fCByID09IDEpXG4gXHRcdFx0cmV0dXJuIHNrZXkuc2tleTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEtWTV9TMzkwX0tFWU9QX0lTS0U6XG5AQCAtNTgwLDE0ICs1ODAsMTQgQEAgc3RhdGljIGludCBrdm1fczM5MF9rZXlvcChzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYywgc3RydWN0IGt2bSAqa3ZtLCBpbnQgb3BcbiBcdFx0XHRyZXR1cm4gc2tleS5za2V5O1xuIFx0XHRicmVhaztcbiBcdGNhc2UgS1ZNX1MzOTBfS0VZT1BfUlJCRTpcbi1cdFx0ciA9IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KGFzY2UsIGdmbik7XG4tXHRcdGlmIChyIFx1MDAzZSAwKVxuLVx0XHRcdHJldHVybiByIFx1MDAzY1x1MDAzYyAxO1xuK1x0XHRyID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQoYXNjZSwgZ2ZuLCBcdTAwMjZza2V5KTtcbitcdFx0aWYgKCFyKVxuK1x0XHRcdHJldHVybiBza2V5LnNrZXk7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4tXHRyZXR1cm4gcjtcbitcdHJldHVybiByIFx1MDAzZSAwID8gLUVGQVVMVCA6IHI7XG4gfVxuIFxuIC8qIFNlY3Rpb246IGRldmljZSByZWxhdGVkICovXG5AQCAtMTIxOSw4ICsxMjE5LDggQEAgc3RhdGljIHZvaWQga3ZtX3MzOTBfc3luY19yZXF1ZXN0X2Jyb2FkY2FzdChzdHJ1Y3Qga3ZtICprdm0sIGludCByZXEpXG4gXG4gLypcbiAgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGt2bS1cdTAwM2VzcmN1IGhlbGQgdG8gYXZvaWQgcmFjZXMgb24gbWVtc2xvdHMsIGFuZCB3aXRoXG4tICoga3ZtLVx1MDAzZXNsb3RzX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsIGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKCksXG4tICogYW5kIGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoKS5cbisgKiBrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrIHRvIGF2b2lkIHJhY2VzIHdpdGggb3Vyc2VsdmVzLFxuKyAqIGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKCksIGFuZCBrdm1fczM5MF9nZXRfY21tYV9iaXRzKCkuXG4gICovXG4gc3RhdGljIGludCBrdm1fczM5MF92bV9zdGFydF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKVxuIHtcbkBAIC0xMjY1LDcgKzEyNjUsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0YXJ0X21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXG4gfVxuIFxuIC8qXG4tICogTXVzdCBiZSBjYWxsZWQgd2l0aCBrdm0tXHUwMDNlc2xvdHNfbG9jayB0byBhdm9pZCByYWNlcyB3aXRoIG91cnNlbHZlcyxcbisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2sgdG8gYXZvaWQgcmFjZXMgd2l0aCBvdXJzZWx2ZXMsXG4gICoga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKCkgYW5kIGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoKS5cbiAgKi9cbiBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3N0b3BfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSlcbkBAIC0xMzAwLDcgKzEzMDAsOSBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtLFxuIHtcbiBcdGludCByZXMgPSAtRU5YSU87XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbitcdGd1YXJkKHNyY3UpKFx1MDAyNmt2bS1cdTAwM2VzcmN1KTtcbitcdGd1YXJkKG11dGV4KShcdTAwMjZrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcbitcbiBcdHN3aXRjaCAoYXR0ci1cdTAwM2VhdHRyKSB7XG4gXHRjYXNlIEtWTV9TMzkwX1ZNX01JR1JBVElPTl9TVEFSVDpcbiBcdFx0cmVzID0ga3ZtX3MzOTBfdm1fc3RhcnRfbWlncmF0aW9uKGt2bSk7XG5AQCAtMTMxMSw3ICsxMzEzLDYgQEAgc3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSxcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuIFx0fVxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbiBcbiBcdHJldHVybiByZXM7XG4gfVxuQEAgLTIyMTQsNyArMjIxNSw3IEBAIHN0YXRpYyBpbnQga3ZtX3MzOTBfZ2V0X3NrZXlzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMzkwX3NrZXlzICphcmdzKVxuIFx0fVxuIFxuIFx0a3ZmcmVlKGtleXMpO1xuLVx0cmV0dXJuIHI7XG4rXHRyZXR1cm4gciBcdTAwM2M9IDAgPyByIDogLUVGQVVMVDtcbiB9XG4gXG4gc3RhdGljIGludCBrdm1fczM5MF9zZXRfc2tleXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfc2tleXMgKmFyZ3MpXG5AQCAtMjI3Niw3ICsyMjc3LDcgQEAgc3RhdGljIGludCBrdm1fczM5MF9zZXRfc2tleXMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MzOTBfc2tleXMgKmFyZ3MpXG4gXHRrdm1fczM5MF9mcmVlX21tdV9jYWNoZShtYyk7XG4gb3V0OlxuIFx0a3ZmcmVlKGtleXMpO1xuLVx0cmV0dXJuIHI7XG4rXHRyZXR1cm4gciBcdTAwM2M9IDAgPyByIDogLUVGQVVMVDtcbiB9XG4gXG4gLypcbkBAIC0yMzg2LDcgKzIzODcsNyBAQCBzdGF0aWMgaW50IGt2bV9zMzkwX3NldF9jbW1hX2JpdHMoc3RydWN0IGt2bSAqa3ZtLFxuIFxuIFx0c2V0X2JpdChHTUFQX0ZMQUdfVVNFU19DTU0sIFx1MDAyNmt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlZmxhZ3MpO1xuIFxuLVx0cmV0dXJuIHI7XG4rXHRyZXR1cm4gciBcdTAwM2M9IDAgPyByIDogLUVGQVVMVDtcbiB9XG4gXG4gLyoqXG5AQCAtMjk5OCw5ICsyOTk5LDggQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0XHRyID0gLUVGQVVMVDtcbiBcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmFyZ3MsIGFyZ3AsIHNpemVvZihhcmdzKSkpXG4gXHRcdFx0YnJlYWs7XG4tXHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuLVx0XHRyID0ga3ZtX3MzOTBfZ2V0X2NtbWFfYml0cyhrdm0sIFx1MDAyNmFyZ3MpO1xuLVx0XHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuK1x0XHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNmt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2spXG4rXHRcdFx0ciA9IGt2bV9zMzkwX2dldF9jbW1hX2JpdHMoa3ZtLCBcdTAwMjZhcmdzKTtcbiBcdFx0aWYgKCFyKSB7XG4gXHRcdFx0ciA9IGNvcHlfdG9fdXNlcihhcmdwLCBcdTAwMjZhcmdzLCBzaXplb2YoYXJncykpO1xuIFx0XHRcdGlmIChyKVxuQEAgLTMwMTQsOSArMzAxNCw5IEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdFx0ciA9IC1FRkFVTFQ7XG4gXHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZhcmdzLCBhcmdwLCBzaXplb2YoYXJncykpKVxuIFx0XHRcdGJyZWFrO1xuLVx0XHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbitcdFx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcbiBcdFx0ciA9IGt2bV9zMzkwX3NldF9jbW1hX2JpdHMoa3ZtLCBcdTAwMjZhcmdzKTtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2spO1xuIFx0XHRicmVhaztcbiBcdH1cbiBcdGNhc2UgS1ZNX1MzOTBfUFZfQ09NTUFORDoge1xuQEAgLTM0NjEsNyArMzQ2MSw3IEBAIHN0YXRpYyB2b2lkIHNjYV9kZWxfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IGVzY2FfYmxvY2sgKnNjYSA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guc2NhO1xuIFxuLVx0aWYgKCFrdm1fczM5MF91c2Vfc2NhX2VudHJpZXMoKSlcbitcdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkgfHwgIXZjcHUtXHUwMDNlYXJjaC5pbml0aWFsaXplZClcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Y2xlYXJfYml0X2ludih2Y3B1LVx1MDAzZXZjcHVfaWQsICh1bnNpZ25lZCBsb25nICopc2NhLVx1MDAzZW1jbik7XG5AQCAtMzQ4MSw4ICszNDgxLDggQEAgc3RhdGljIHZvaWQgc2NhX2FkZF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGlmICgha3ZtX3MzOTBfdXNlX3NjYV9lbnRyaWVzKCkpXG4gXHRcdHJldHVybjtcbiBcbitcdFdSSVRFX09OQ0Uoc2NhLVx1MDAzZWNwdVt2Y3B1LVx1MDAzZXZjcHVfaWRdLnNkYSwgdmlydF90b19waHlzKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2spKTtcbiBcdHNldF9iaXRfaW52KHZjcHUtXHUwMDNldmNwdV9pZCwgKHVuc2lnbmVkIGxvbmcgKilzY2EtXHUwMDNlbWNuKTtcbi1cdHNjYS1cdTAwM2VjcHVbdmNwdS1cdTAwM2V2Y3B1X2lkXS5zZGEgPSB2aXJ0X3RvX3BoeXModmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jayk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgc2NhX2Nhbl9hZGRfdmNwdShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZClcbkBAIC0zNjEzLDYgKzM2MTMsOSBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAodGVzdF9rdm1fZmFjaWxpdHkodmNwdS1cdTAwM2Vrdm0sIDc0KSB8fCB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnVzZXJfaW5zdHIwIHx8XG4gXHQgICAgdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC51c2VyX29wZXJleGVjKVxuIFx0XHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWljdGwgfD0gSUNUTF9PUEVSRVhDO1xuK1xuK1x0LyogUGFpcnMgd2l0aCBzbXBfbG9hZF9hY3F1aXJlKCkgaW4ga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oKSBhbmQga3ZtX2FyY2hfdmNwdV9pb2N0bCgpICovXG4rXHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaW5pdGlhbGl6ZWQsIHRydWUpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBrdm1faGFzX3Bja21vX3N1YmZ1bmMoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIG5yKVxuQEAgLTM2NzQsNyArMzY3Nyw4IEBAIHN0YXRpYyB2b2lkIGt2bV9zMzkwX3ZjcHVfY3J5cHRvX3NldHVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiB2b2lkIGt2bV9zMzkwX3ZjcHVfdW5zZXR1cF9jbW1hKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcGh5c190b192aXJ0KHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlY2JybG8pKTtcbitcdGlmICh2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWNicmxvKVxuK1x0XHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcGh5c190b192aXJ0KHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlY2JybG8pKTtcbiBcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlY2JybG8gPSAwO1xuIH1cbiBcbkBAIC0zNzkyLDIxICszNzk2LDIxIEBAIGludCBrdm1fYXJjaF92Y3B1X3ByZWNyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBpZClcbiBcdHJldHVybiAwO1xuIH1cbiBcbitERUZJTkVfRlJFRShzaWVfcGFnZSwgc3RydWN0IHNpZV9wYWdlICosIGlmIChfVCkgZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKShfVCkpKVxuK1xuIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0c3RydWN0IHNpZV9wYWdlICpzaWVfcGFnZTtcbitcdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jIF9fZnJlZShrdm1fczM5MF9tbXVfY2FjaGUpID0gTlVMTDtcbitcdHN0cnVjdCBzaWVfcGFnZSAqc2llX3BhZ2UgX19mcmVlKHNpZV9wYWdlKSA9IE5VTEw7XG4gXHRpbnQgcmM7XG4gXG4gXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBzaWVfcGFnZSkgIT0gNDA5Nik7XG4tXHR2Y3B1LVx1MDAzZWFyY2gubWMgPSBrdm1fczM5MF9uZXdfbW11X2NhY2hlKCk7XG4tXHRpZiAoIXZjcHUtXHUwMDNlYXJjaC5tYylcbitcdG1jID0ga3ZtX3MzOTBfbmV3X21tdV9jYWNoZSgpO1xuK1x0aWYgKCFtYylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRzaWVfcGFnZSA9IChzdHJ1Y3Qgc2llX3BhZ2UgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XG4tXHRpZiAoIXNpZV9wYWdlKSB7XG4tXHRcdGt2bV9zMzkwX2ZyZWVfbW11X2NhY2hlKHZjcHUtXHUwMDNlYXJjaC5tYyk7XG4tXHRcdHZjcHUtXHUwMDNlYXJjaC5tYyA9IE5VTEw7XG4rXHRpZiAoIXNpZV9wYWdlKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdH1cbiBcbiBcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2sgPSBcdTAwMjZzaWVfcGFnZS1cdTAwM2VzaWVfYmxvY2s7XG4gXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWl0ZGJhID0gdmlydF90b19waHlzKFx1MDAyNnNpZV9wYWdlLVx1MDAzZWl0ZGIpO1xuQEAgLTM4NDgsMTAgKzM4NTIsOSBAQCBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2Vrdm1fdmFsaWRfcmVncyB8PSBLVk1fU1lOQ19GUFJTO1xuIFxuIFx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpIHtcbi1cdFx0cmMgPSAtRU5PTUVNO1xuIFx0XHR2Y3B1LVx1MDAzZWFyY2guZ21hcCA9IGdtYXBfbmV3X2NoaWxkKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guZ21hcCwgLTFVTCk7XG4gXHRcdGlmICghdmNwdS1cdTAwM2VhcmNoLmdtYXApXG4tXHRcdFx0Z290byBvdXRfZnJlZV9zaWVfYmxvY2s7XG4rXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXG4gXHRWTV9FVkVOVCh2Y3B1LVx1MDAzZWt2bSwgMywgXCJjcmVhdGUgY3B1ICVkIGF0IDB4JXAsIHNpZSBibG9jayBhdCAweCVwXCIsXG5AQCAtMzg1OSwyMCArMzg2MiwxOSBAQCBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0dHJhY2Vfa3ZtX3MzOTBfY3JlYXRlX3ZjcHUodmNwdS1cdTAwM2V2Y3B1X2lkLCB2Y3B1LCB2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrKTtcbiBcbiBcdHJjID0ga3ZtX3MzOTBfdmNwdV9zZXR1cCh2Y3B1KTtcbi1cdGlmIChyYylcbi1cdFx0Z290byBvdXRfdWNvbnRyb2xfdW5pbml0O1xuK1x0aWYgKHJjKSB7XG4rXHRcdGlmIChrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pKSB7XG4rXHRcdFx0c2NvcGVkX2d1YXJkKHNwaW5sb2NrLCBcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlY2hpbGRyZW5fbG9jaylcbitcdFx0XHRcdGdtYXBfcmVtb3ZlX2NoaWxkKHZjcHUtXHUwMDNlYXJjaC5nbWFwKTtcbitcdFx0XHR2Y3B1LVx1MDAzZWFyY2guZ21hcCA9IGdtYXBfcHV0KHZjcHUtXHUwMDNlYXJjaC5nbWFwKTtcbitcdFx0fVxuK1x0XHRyZXR1cm4gcmM7XG4rXHR9XG4gXG4rXHR2Y3B1LVx1MDAzZWFyY2gubWMgPSBub19mcmVlX3B0cihtYyk7XG4rXHRzaWVfcGFnZSA9IE5VTEw7XG4gXHRrdm1fczM5MF91cGRhdGVfdG9wb2xvZ3lfY2hhbmdlX3JlcG9ydCh2Y3B1LVx1MDAzZWt2bSwgMSk7XG4gXHRyZXR1cm4gMDtcbi1cbi1vdXRfdWNvbnRyb2xfdW5pbml0OlxuLVx0aWYgKGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSkpIHtcbi1cdFx0Z21hcF9yZW1vdmVfY2hpbGQodmNwdS1cdTAwM2VhcmNoLmdtYXApO1xuLVx0XHR2Y3B1LVx1MDAzZWFyY2guZ21hcCA9IGdtYXBfcHV0KHZjcHUtXHUwMDNlYXJjaC5nbWFwKTtcbi1cdH1cbi1vdXRfZnJlZV9zaWVfYmxvY2s6XG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2spKTtcbi1cdHJldHVybiByYztcbiB9XG4gXG4gaW50IGt2bV9hcmNoX3ZjcHVfcnVubmFibGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuQEAgLTUwMzksNiArNTA0MSwxMCBAQCBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICAgIGt2bV9ydW4tXHUwMDNla3ZtX2RpcnR5X3JlZ3MgXHUwMDI2IH5LVk1fU1lOQ19TMzkwX1ZBTElEX0ZJRUxEUylcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4rXHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4ga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKCkgKi9cbitcdGlmICghc21wX2xvYWRfYWNxdWlyZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaW5pdGlhbGl6ZWQpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdHZjcHVfbG9hZCh2Y3B1KTtcbiBcbiBcdGlmIChndWVzdGRiZ19leGl0X3BlbmRpbmcodmNwdSkpIHtcbkBAIC01NTIzLDYgKzU1MjksMTAgQEAgbG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuIFx0bG9uZyByO1xuIFx0dTE2IHJjLCBycmM7XG4gXG4rXHQvKiBQYWlycyB3aXRoIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4ga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKCkgKi9cbitcdGlmICghc21wX2xvYWRfYWNxdWlyZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaW5pdGlhbGl6ZWQpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdHZjcHVfbG9hZCh2Y3B1KTtcbiBcbiBcdHN3aXRjaCAoaW9jdGwpIHtcbkBAIC01Nzk0LDI0ICs1ODA0LDQ0IEBAIGludCBrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBsb25nIGNtbWFfZF9jb3VudF9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2Fsaylcbit7XG4rXHR1bmlvbiBwZ3N0ZSBwZ3N0ZTtcbitcbitcdHBnc3RlID0gcGdzdGVfZ2V0X2xvY2socHRlcCk7XG4rXHRpZiAocGdzdGUuY21tYV9kKSB7XG4rXHRcdHBnc3RlLmNtbWFfZCA9IDA7XG4rXHRcdGF0b21pYzY0X2RlYyh3YWxrLVx1MDAzZXByaXYpO1xuK1x0fVxuK1x0cGdzdGVfc2V0X3VubG9jayhwdGVwLCBwZ3N0ZSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdFx0XHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpvbGQsXG4gXHRcdFx0XHRjb25zdCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpuZXcsXG4gXHRcdFx0XHRlbnVtIGt2bV9tcl9jaGFuZ2UgY2hhbmdlKVxuIHtcbi1cdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jID0gTlVMTDtcbi1cdGludCByYyA9IDA7XG4rXHRjb25zdCBzdHJ1Y3QgZGF0X3dhbGtfb3BzIG9wcyA9IHsgLnB0ZV9lbnRyeSA9IGNtbWFfZF9jb3VudF9wdGUsIH07XG4rXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYyBfX2ZyZWUoa3ZtX3MzOTBfbW11X2NhY2hlKSA9IE5VTEw7XG4rXHRpbnQgcmMgPSAtRU5PTUVNO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNmt2bS1cdTAwM2VzbG90c19hcmNoX2xvY2spO1xuIFxuIFx0aWYgKGNoYW5nZSA9PSBLVk1fTVJfRkxBR1NfT05MWSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0bWMgPSBrdm1fczM5MF9uZXdfbW11X2NhY2hlKCk7XG4tXHRpZiAoIW1jKSB7XG4tXHRcdHJjID0gLUVOT01FTTtcbitcdGlmICghbWMpXG4gXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuK3JldHJ5OlxuIFx0c2NvcGVkX2d1YXJkKHdyaXRlX2xvY2ssIFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jaykge1xuK1x0XHRpZiAoa3ZtLVx1MDAzZWFyY2gubWlncmF0aW9uX21vZGUgXHUwMDI2XHUwMDI2IGt2bS1cdTAwM2VhcmNoLnVzZV9jbW1hIFx1MDAyNlx1MDAyNiBvbGQpIHtcbitcdFx0XHRfZGF0X3dhbGtfZ2ZuX3JhbmdlKG9sZC1cdTAwM2ViYXNlX2dmbiwgb2xkLVx1MDAzZWJhc2VfZ2ZuICsgb2xkLVx1MDAzZW5wYWdlcyxcbitcdFx0XHRcdFx0ICAgIGt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlYXNjZSwgXHUwMDI2b3BzLCBEQVRfV0FMS19JR05fSE9MRVMsXG4rXHRcdFx0XHRcdCAgICBcdTAwMjZrdm0tXHUwMDNlYXJjaC5jbW1hX2RpcnR5X3BhZ2VzKTtcbitcdFx0fVxuK1xuIFx0XHRzd2l0Y2ggKGNoYW5nZSkge1xuIFx0XHRjYXNlIEtWTV9NUl9ERUxFVEU6XG4gXHRcdFx0cmMgPSBkYXRfZGVsZXRlX3Nsb3QobWMsIGt2bS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlYXNjZSwgb2xkLVx1MDAzZWJhc2VfZ2ZuLCBvbGQtXHUwMDNlbnBhZ2VzKTtcbkBAIC01ODI3LDEzICs1ODU3LDE4IEBAIHZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRjYXNlIEtWTV9NUl9GTEFHU19PTkxZOlxuIFx0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuK1x0XHRcdHJjID0gMDtcbiBcdFx0XHRXQVJOKDEsIFwiVW5rbm93biBLVk0gTVIgQ0hBTkdFOiAlZFxcblwiLCBjaGFuZ2UpO1xuIFx0XHR9XG4gXHR9XG4rXHRpZiAocmMgPT0gLUVOT01FTSkge1xuK1x0XHRyYyA9IGt2bV9zMzkwX21tdV9jYWNoZV90b3B1cChtYyk7XG4rXHRcdGlmICghcmMpXG4rXHRcdFx0Z290byByZXRyeTtcbitcdH1cbiBvdXQ6XG4tXHRpZiAocmMpXG4rXHRpZiAoS1ZNX0JVR19PTihyYywga3ZtKSlcbiBcdFx0cHJfd2FybihcImZhaWxlZCB0byBjb21taXQgbWVtb3J5IHJlZ2lvblxcblwiKTtcbi1cdGt2bV9zMzkwX2ZyZWVfbW11X2NhY2hlKG1jKTtcbiBcdHJldHVybjtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9wcml2LmMgYi9hcmNoL3MzOTAva3ZtL3ByaXYuY1xuaW5kZXggYWQwZGRjNDMzYTczYy4uYjFiYTI0YzM0NmVmYSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rdm0vcHJpdi5jXG4rKysgYi9hcmNoL3MzOTAva3ZtL3ByaXYuY1xuQEAgLTI4OSw2ICsyODksNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9pc2tlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBzdGF0aWMgaW50IGhhbmRsZV9ycmJlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGdhZGRyO1xuK1x0dW5pb24gc2tleSBza2V5O1xuIFx0aW50IHJlZzEsIHJlZzI7XG4gXHRpbnQgcmM7XG4gXG5AQCAtMzA3LDEyICszMDgsMTIgQEAgc3RhdGljIGludCBoYW5kbGVfcnJiZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRnYWRkciA9IGt2bV9zMzkwX2xvZ2ljYWxfdG9fZWZmZWN0aXZlKHZjcHUsIGdhZGRyKTtcbiBcdGdhZGRyID0ga3ZtX3MzOTBfcmVhbF90b19hYnModmNwdSwgZ2FkZHIpO1xuIFx0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlbW11X2xvY2spXG4tXHRcdHJjID0gZGF0X3Jlc2V0X3JlZmVyZW5jZV9iaXQodmNwdS1cdTAwM2VhcmNoLmdtYXAtXHUwMDNlYXNjZSwgZ3BhX3RvX2dmbihnYWRkcikpO1xuK1x0XHRyYyA9IGRhdF9yZXNldF9yZWZlcmVuY2VfYml0KHZjcHUtXHUwMDNlYXJjaC5nbWFwLVx1MDAzZWFzY2UsIGdwYV90b19nZm4oZ2FkZHIpLCBcdTAwMjZza2V5KTtcbiBcdGlmIChyYyBcdTAwM2UgMClcbiBcdFx0cmV0dXJuIGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludCh2Y3B1LCByYyk7XG4gXHRpZiAocmMgXHUwMDNjIDApXG4gXHRcdHJldHVybiByYztcbi1cdGt2bV9zMzkwX3NldF9wc3dfY2ModmNwdSwgcmMpO1xuK1x0a3ZtX3MzOTBfc2V0X3Bzd19jYyh2Y3B1LCAoc2tleS5za2V5IFx1MDAzZVx1MDAzZSAxKSBcdTAwMjYgMyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTI2MCw4ICsxMjYxLDkgQEAgc3RhdGljIGludCBoYW5kbGVfZXNzYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdC8qIFJldHJ5IHRoZSBFU1NBIGluc3RydWN0aW9uICovXG4gXHRcdGt2bV9zMzkwX3JldHJ5X2luc3RyKHZjcHUpO1xuIFx0fSBlbHNlIHtcbi1cdFx0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlbW11X2xvY2spXG4tXHRcdFx0aSA9IF9fZG9fZXNzYSh2Y3B1LCBvcmMpO1xuK1x0XHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZXNsb3RzX2FyY2hfbG9jaylcbitcdFx0XHRzY29wZWRfZ3VhcmQocmVhZF9sb2NrLCBcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VtbXVfbG9jaylcbitcdFx0XHRcdGkgPSBfX2RvX2Vzc2EodmNwdSwgb3JjKTtcbiBcdFx0aWYgKGkgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIGk7XG4gXHRcdC8qIEFjY291bnQgZm9yIHRoZSBwb3NzaWJsZSBleHRyYSBjYnJsIGVudHJ5ICovXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9wdi5jIGIvYXJjaC9zMzkwL2t2bS9wdi5jXG5pbmRleCAxYmVhY2M4NDFjYTg1Li5iMDJlMDE1OWQzY2QyIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2t2bS9wdi5jXG4rKysgYi9hcmNoL3MzOTAva3ZtL3B2LmNcbkBAIC0yNDQsNiArMjQ0LDI0IEBAIHN0YXRpYyB2b2lkIGt2bV9zMzkwX2NsZWFyX3B2X3N0YXRlKHN0cnVjdCBrdm0gKmt2bSlcbiBcdGt2bS1cdTAwM2VhcmNoLnB2LnN0b3JfdmFyID0gTlVMTDtcbiB9XG4gXG4rc3RhdGljIHZvaWQga3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGZyZWVfc3Rvcl9iYXNlKVxuK3tcbitcdGlmIChmcmVlX3N0b3JfYmFzZSlcbitcdFx0ZnJlZV9wYWdlcyh2Y3B1LVx1MDAzZWFyY2gucHYuc3Rvcl9iYXNlLCBnZXRfb3JkZXIodXZfaW5mby5ndWVzdF9jcHVfc3Rvcl9sZW4pKTtcbitcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzaWRhX2FkZHIodmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jaykpO1xuK1x0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2Vwdl9oYW5kbGVfY3B1ID0gMDtcbitcdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlcHZfaGFuZGxlX2NvbmZpZyA9IDA7XG4rXHRtZW1zZXQoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnB2LCAwLCBzaXplb2YodmNwdS1cdTAwM2VhcmNoLnB2KSk7XG4rXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZXNkZiA9IDA7XG4rXHQvKlxuK1x0ICogVGhlIHNpZGFkIGZpZWxkIChmb3Igc2RmID09IDIpIGlzIG5vdyB0aGUgZ2JlYSBmaWVsZCAoZm9yIHNkZiA9PSAwKS5cbitcdCAqIFVzZSB0aGUgcmVzZXQgdmFsdWUgb2YgZ2JlYSB0byBhdm9pZCBsZWFraW5nIHRoZSBrZXJuZWwgcG9pbnRlciBvZlxuK1x0ICogdGhlIGp1c3QgZnJlZWQgc2lkYS5cbitcdCAqL1xuK1x0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VnYmVhID0gMTtcbitcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9UTEJfRkxVU0gsIHZjcHUpO1xuK31cbitcbiBpbnQga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYylcbiB7XG4gXHRpbnQgY2M7XG5AQCAtMjU4LDI0ICsyNzYsOSBAQCBpbnQga3ZtX3MzOTBfcHZfZGVzdHJveV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYylcbiBcdFdBUk5fT05DRShjYywgXCJwcm90dmlydCBkZXN0cm95IGNwdSBmYWlsZWQgcmMgJXggcnJjICV4XCIsICpyYywgKnJyYyk7XG4gXG4gXHQvKiBJbnRlbmRlZCBtZW1vcnkgbGVhayBmb3Igc29tZXRoaW5nIHRoYXQgc2hvdWxkIG5ldmVyIGhhcHBlbi4gKi9cbi1cdGlmICghY2MpXG4tXHRcdGZyZWVfcGFnZXModmNwdS1cdTAwM2VhcmNoLnB2LnN0b3JfYmFzZSxcbi1cdFx0XHQgICBnZXRfb3JkZXIodXZfaW5mby5ndWVzdF9jcHVfc3Rvcl9sZW4pKTtcbi1cbi1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzaWRhX2FkZHIodmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jaykpO1xuLVx0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2Vwdl9oYW5kbGVfY3B1ID0gMDtcbi1cdHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlcHZfaGFuZGxlX2NvbmZpZyA9IDA7XG4tXHRtZW1zZXQoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnB2LCAwLCBzaXplb2YodmNwdS1cdTAwM2VhcmNoLnB2KSk7XG4tXHR2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZXNkZiA9IDA7XG4tXHQvKlxuLVx0ICogVGhlIHNpZGFkIGZpZWxkIChmb3Igc2RmID09IDIpIGlzIG5vdyB0aGUgZ2JlYSBmaWVsZCAoZm9yIHNkZiA9PSAwKS5cbi1cdCAqIFVzZSB0aGUgcmVzZXQgdmFsdWUgb2YgZ2JlYSB0byBhdm9pZCBsZWFraW5nIHRoZSBrZXJuZWwgcG9pbnRlciBvZlxuLVx0ICogdGhlIGp1c3QgZnJlZWQgc2lkYS5cbi1cdCAqL1xuLVx0dmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VnYmVhID0gMTtcbi1cdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9UTEJfRkxVU0gsIHZjcHUpO1xuK1x0a3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUodmNwdSwgIWNjKTtcbiBcbi1cdHJldHVybiBjYyA/IEVJTyA6IDA7XG4rXHRyZXR1cm4gY2MgPyAtRUlPIDogMDtcbiB9XG4gXG4gaW50IGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYylcbkBAIC0zMTksOSArMzIyLDcgQEAgaW50IGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYylcbiBcdFx0ICAgICB1dmNiLmhlYWRlci5ycmMpO1xuIFxuIFx0aWYgKGNjKSB7XG4tXHRcdHUxNiBkdW1teTtcbi1cbi1cdFx0a3ZtX3MzOTBfcHZfZGVzdHJveV9jcHUodmNwdSwgXHUwMDI2ZHVtbXksIFx1MDAyNmR1bW15KTtcbitcdFx0a3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHUodmNwdSwgdHJ1ZSk7XG4gXHRcdHJldHVybiAtRUlPO1xuIFx0fVxuIFxuQEAgLTgwOSw3ICs4MTAsNyBAQCBzdGF0aWMgaW50IHVucGFja19vbmUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGFkZHIsIHU2NCB0d2VhayxcbiBcdFx0XHRyZXR1cm4gLUVBR0FJTjtcbiBcdH1cbiBcbi1cdGlmIChyZXQgXHUwMDI2XHUwMDI2IHJldCAhPSAtRUFHQUlOKVxuK1x0aWYgKHJldCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FQUdBSU4gXHUwMDI2XHUwMDI2IHJldCAhPSAtRUlOVFIpXG4gXHRcdEtWTV9VVl9FVkVOVChrdm0sIDMsIFwiUFJPVFZJUlQgVk0gVU5QQUNLOiBmYWlsZWQgYWRkciAlbGx4IHdpdGggcmMgJXggcnJjICV4XCIsXG4gXHRcdFx0ICAgICB1dmNiLmdhZGRyLCAqcmMsICpycmMpO1xuIFx0cmV0dXJuIHJldDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAwOjA2OjA2Ljc0NDAyMTcxN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNTEzMzYzMTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRGVjaXNpb24gZm9yIEtWTS9zMzkwIFBhdGNoKipcblxuT2theSwgc28gSSBoYXZlIHRoaXMgcGF0Y2ggc2VyaWVzIHRvdWNoaW5nIEtWTSBjb2RlIHNwZWNpZmljYWxseSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBzaW5jZSBpdCdzIHMzOTAsIHdoaWNoIGlzIGxlc3MgY29tbW9uIGluIHR5cGljYWwgZnV6emluZyBlbnZpcm9ubWVudHMgbGlrZSBHQ0UvUUVNVSBmb3IgeDg2LCBJIG5lZWQgdG8gYmUgbW9yZSBkZWxpYmVyYXRlLiBUaGUgcHJvbXB0IGhpZ2hsaWdodHMgYSBrZXkgZXhjbHVzaW9uOiBjb2RlIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLiBIb3dldmVyLCBTeXprYWxsZXIgKmRvZXMqIGhhdmUgczM5MHggc3VwcG9ydCwgYW5kIFFFTVUgKmRvZXMqIHN1cHBvcnQgczM5MHguIFNvLCB0aGUgcXVlc3Rpb24gaXNuJ3Qgd2hldGhlciBzMzkwIGlzIGluaGVyZW50bHkgZXhjbHVkZWQsIGJ1dCB3aGV0aGVyIHRoZXNlICpzcGVjaWZpYyogY2hhbmdlcyBhcmUgcmVhY2hhYmxlLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoZXNlIEtWTSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsbHkgc2lnbmlmaWNhbnQuIExldCdzIGRpZyBpbnRvIHRoZSBjb2RlIGNoYW5nZXMuIEknbSBzZWVpbmcgbW9kaWZpY2F0aW9ucyBpbiBgZGF0LmNgLCBgZmF1bHRpbi5jYCwgYGludGVycnVwdC5jYCwgYGt2bS1zMzkwLmNgLCBhbmQgYHB2LmNgLiBUaGVzZSBhcmVuJ3QganVzdCBjb3NtZXRpYyBjaGFuZ2VzOyB0aGV5IGFyZSBhY3R1YWxseSBtb2RpZnlpbmcgaG93IEtWTSBiZWhhdmVzIGZvciBzMzkwLiBXZSdyZSB0YWxraW5nIGFib3V0IGNoYW5nZXMgdG8gZGF0YSBzdHJ1Y3R1cmVzLCBlcnJvciBoYW5kbGluZyAoZS5nLiwgcmV0dXJuaW5nIGAtRUZBVUxUYCBpbnN0ZWFkIG9mIHBvc2l0aXZlIGNvZGVzIGluIGBrdm1fczM5MF9rZXlvcGApLCBtZW1vcnkgbWFuYWdlbWVudCAoZml4ZXMsIGd1YXJkcywgYW5kIHVzZSBvZiBgX19mcmVlYCksIGluaXRpYWxpemF0aW9uIGNoZWNrcywgYW5kIG5ldyBDUFUgZGlzcG9zYWwvY3JlYXRpb24gZnVuY3Rpb25zIChga3ZtX3MzOTBfcHZfZGlzcG9zZV9jcHVgKS4gQ2xlYXJseSwgdGhlc2UgYXJlIGZ1bmN0aW9uYWwgYWx0ZXJhdGlvbnMgdG8gS1ZNLlxuXG5HaXZlbiB0aGVzZSBhcmUgKmZ1bmN0aW9uYWwqIGNoYW5nZXMgd2l0aGluIEtWTSwgYW5kIFN5emthbGxlciBoYXMgdGhlIGNhcGFiaWxpdHkgdG8gZnV6eiBzMzkweCwgbXkgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggc2VyaWVzICppcyogd29ydGggZnV6emluZy4gS1ZNIGlzIGEgaGlnaC12YWx1ZSB0YXJnZXQgaW4gZ2VuZXJhbCwgYW5kIHRoZSBmYWN0IHRoYXQgU3l6a2FsbGVyIHN1cHBvcnRzIHRoaXMgdGFyZ2V0IGlzIGFuIGluZGljYXRpb24gdGhhdCBpdCBjYW4gYmUgZG9uZS4gSSdtIGdvaW5nIHRvIGxvb2sgYXQgdGhlIGZ1bmN0aW9ucyB0aGF0IHdlcmUgY2hhbmdlZCB0byBzZWUgaWYgYW55IGFyZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcgZm9yIGZ1enppbmcuIEZ1bmN0aW9ucyBsaWtlIGBrdm1fczM5MF9rZXlvcGAsIGBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uYCwgYGt2bV9hcmNoX3ZjcHVfY3JlYXRlYCwgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYCwgYW5kIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAsIGFuZCB0aGUgbmV3IENQVSBkaXNwb3NhbC9jcmVhdGlvbiBmdW5jdGlvbnMgYXJlIGdvb2QgY2FuZGlkYXRlcy4gSSB3aWxsIGFsc28gY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyBmb3IgS1ZNIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNldHRpbmdzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQsIGFuZCBsZXZlcmFnZSB0b29scyBsaWtlIGBkZWZhdWx0X2FwaTpncmVwcGVyYCB0byBzZWFyY2ggZm9yIEtjb25maWcgb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyMDQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDI3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDA6MDY6MTguMjU3Mzg3Nzg2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNzQyMjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vS2NvbmZpZz0xNz1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0xOC1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6MTk6Y29uZmlnIEtWTVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0yMC1cXHRkZWZfdHJpc3RhdGUgeVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ2LVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgS1ZNX1MzOTBfVUNPTlRST0xcXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiVXNlcnNwYWNlIGNvbnRyb2xsZWQgdmlydHVhbCBtYWNoaW5lc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDA6MDY6MTguMzAwMTMzNjY1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQyNDkyMDkyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEtWTSBDb25maWd1cmF0aW9uIGZvciBzMzkwIEFyY2hpdGVjdHVyZSoqXG5cbk9rYXksIHNvIHRoZSBjb25maWcgaW4gcXVlc3Rpb24gaXMgZGVmaW5pdGVseSBgS1ZNYCwgYnV0IGhhbmcgb24sIEkgYWxzbyBzZWUgYEtWTV9TMzkwX1VDT05UUk9MYCByZWZlcmVuY2VkIGluIHRoZSBwYXRjaCwgc3BlY2lmaWNhbGx5IGluIHRoZSBga3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKWAgZnVuY3Rpb24gY2FsbC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYEtWTV9TMzkwX1VDT05UUk9MYCBhY3R1YWxseSAqbmVlZHMqIHRvIGJlIGVuYWJsZWQuIE15IGluc3RpbmN0IGlzIHRoYXQgaXQgbWlnaHQuXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgYGFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNgLiBBaCwgaGVyZSBpdCBpczogYGlmIChLVk1fQlVHX09OKGt2bV9pc191Y29udHJvbCh2Y3B1LVx1MDAzZWt2bSksIHZjcHUtXHUwMDNla3ZtKSlgLiBUaGlzIGxvb2tzIGxpa2UgYSBjb25kaXRpb25hbCBiYXNlZCBvbiBgS1ZNX1MzOTBfVUNPTlRST0xgIHdpdGhpbiBhbiBpbXBvcnRhbnQgaW50ZXJydXB0IGhhbmRsaW5nIHBhdGguIFRoZSBgS1ZNX0JVR19PTmAgbWFjcm8gc3Ryb25nbHkgc3VnZ2VzdHMgd2UgbmVlZCB0aGlzIGNvbmZpZywgb3Igd2UnbGwgZ2V0IGEgZmF0YWwgZXJyb3IuXG5cbk5vdywgSSdsbCBtb3ZlIG9uIGFuZCBjaGVjayBgYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jYCB0byBzZWUgaG93IGBrdm1fYXJjaF92Y3B1X2NyZWF0ZWAgaXMgYmVpbmcgaGFuZGxlZCBpbiB0aGlzIGNvbnRleHQuIEkgZXhwZWN0IHRoaXMgd2lsbCBoZWxwIG1lIGNvbmZpcm0gYW5kIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5NzcsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDA6MDY6MjIuNzI1MDU2NDQ5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMzY2MDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9hcmNoX3ZjcHVfY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9Mzc5OT1ERUZJTkVfRlJFRShzaWVfcGFnZSwgc3RydWN0IHNpZV9wYWdlICosIGlmIChfVCkgZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKShfVCkpKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zODAwLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozODAxOmludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTM4MDIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDowNjoyMi43Njc0MjYxMDlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjQ4ODc1NTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEtWTSBTMzkwIFBhcmF2aXJ0dWFsaXphdGlvbiBDUFUgQ3JlYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IEtWTSBoYW5kbGVzIENQVSBjcmVhdGlvbiBzcGVjaWZpY2FsbHkgZm9yIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSwgcGFydGljdWxhcmx5IHRoZSBwYXJhdmlydHVhbGl6YXRpb24gYXNwZWN0cy4gVGhlIHBsYWNlIHRvIHN0YXJ0IGlzIGRlZmluaXRlbHkgYGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVgIGluIHRoZSBgYXJjaC9zMzkwL2t2bS9wdi5jYCBmaWxlLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBvciBhdCBsZWFzdCB3aGVyZSBpdCBzaG91bGQgYmUuIExldCdzIHNlZSBob3cgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIHBhcmF2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBpcyBzZXQgdXAgYW5kIHdoYXQga2luZCBvZiByZXNvdXJjZXMgYXJlIGJlaW5nIGluaXRpYWxpemVkIGF0IHRoZSBDUFUgbGV2ZWwuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgYSB2aXJ0dWFsIENQVSBpbiB0aGlzIGNvbnRleHQ6IGZyb20gaW5pdGlhbCBhbGxvY2F0aW9uLCB0byBpdHMgc3RhdGUgYW5kIHdoYXQgdGhlIGNvZGUgZG9lcyB0byBtYWtlIGl0IHJlYWR5IHRvIHJ1biBndWVzdHMuIEkgd2lsbCBsb29rIGZvciBhbnkgc3VidGxlIG9wdGltaXphdGlvbnMgYW5kIGVkZ2UgY2FzZXMsIGJlY2F1c2UgdGhhdCBpcyB3aGVyZSB0aGUgaW1wb3J0YW50IGRldGFpbHMgb2Z0ZW4gcmVzaWRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzY0MSwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAwOjA2OjI3LjAxNjMwMzc5NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDYxMTIwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fczM5MF9wdl9jcmVhdGVfY3B1XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vcHYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL3B2LmM9MjY1PWludCBrdm1fczM5MF9wdl9kZXN0cm95X2NwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiAqcmMsIHUxNiAqcnJjKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wdi5jLTI4My1cXG5hcmNoL3MzOTAva3ZtL3B2LmM6Mjg0OmludCBrdm1fczM5MF9wdl9jcmVhdGVfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2ICpyYywgdTE2ICpycmMpXFxuYXJjaC9zMzkwL2t2bS9wdi5jLTI4NS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAwOjA2OjI3LjA1NjkxODMzNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3OTAwODE3NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gS1ZNIG9uIHMzOTAgQXJjaGl0ZWN0dXJlKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aCBtZW1vcnkgcmVnaW9ucyB1bmRlciBLVk0sIHNwZWNpZmljYWxseSBvbiB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIExldCdzIHNlZS4uLiB0aGUgZnVuY3Rpb24gSSdtIGludGVyZXN0ZWQgaW4gaXMgYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYC4gSSByZWNhbGwgaXQgYmVpbmcgZGVmaW5lZCBpbiBgYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jYCwgc28gdGhhdCdzIHdoZXJlIEknbGwgc3RhcnQuIEknbSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSB0aGUga2V5IHBpZWNlIGluIGFwcGx5aW5nIHVwZGF0ZXMgcmVsYXRlZCB0byBtZW1vcnkgdG8gdGhlIHN5c3RlbSBmb3IgdGhlIHZpcnR1YWwgbWFjaGluZXMuIEl0J3MgbGlrZWx5IGhhbmRsaW5nIHRoZSBhY3R1YWwgY29tbWl0bWVudCBvZiBjaGFuZ2VzIHRvIHRoZSBndWVzdCdzIG1lbW9yeSBtYXAgb3Igc29tZSBvdGhlciBhcmNoLXNwZWNpZmljIG1lbW9yeSBtYW5hZ2VtZW50IHN0cnVjdHVyZSB3aXRoaW4gdGhlIEtWTSBmcmFtZXdvcmsuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbWVtb3J5IHJlZ2lvbiBpcyBkZXNjcmliZWQsIGhvdyB0aGUgY29tbWl0IGFjdHVhbGx5IGhhcHBlbnMgYXQgdGhlIHMzOTAgbGV2ZWwsIGFuZCB3aGF0IGltcGxpY2F0aW9ucyB0aGUgY29tbWl0IGhhcyBvbiB0aGUgcmVzdCBvZiB0aGUgS1ZNIGluZnJhc3RydWN0dXJlLiBUaGlzIG1pZ2h0IGludm9sdmUgbG9va2luZyBhdCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgTU1VLCBob3cgaXQgaGFuZGxlcyBtZW1vcnkgcHJvdGVjdGlvbiwgb3IgZXZlbiBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgcGFnZSBzaXplcyBhbmQgbWVtb3J5IHR5cGVzIG9uIHRoZSBzMzkwLiBJJ20gZXhwZWN0aW5nIGEgbG93LWxldmVsLCBwZXJmb3JtYW5jZS1jcml0aWNhbCBpbnRlcmFjdGlvbiBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDEwMywiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAwOjA2OjMwLjg0NzAwMjIzOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDAwNTUxNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01ODA3PXN0YXRpYyBsb25nIGNtbWFfZF9jb3VudF9wdGUodW5pb24gcHRlICpwdGVwLCBnZm5fdCBnZm4sIGdmbl90IG5leHQsIHN0cnVjdCBkYXRfd2FsayAqd2FsaylcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01ODE5LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1ODIwOnZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01ODIxLVxcdFxcdFxcdFxcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm9sZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDA6MDY6MzAuODg3MDY0NTA4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MzI3ODA2NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGJyZWFrZG93biBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEtWTSBTMzkwIE1pZ3JhdGlvbiBDb2RlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBteSBoZWFkIGFyb3VuZCBob3cgbWlncmF0aW9uIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBLVk0gczM5MCBhcmNoaXRlY3R1cmUuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byBga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbmAgbG9jYXRlZCBpbiBgYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jYC4gVGhhdCBmdW5jdGlvbiBuYW1lIGl0c2VsZiBpcyBhIHByZXR0eSBnb29kIGluZGljYXRvciBvZiB3aGVyZSB0aGUgbWVhdCBvZiB0aGUgbWlncmF0aW9uIGluaXRpYWxpemF0aW9uL2NvbmZpZ3VyYXRpb24gbWlnaHQgcmVzaWRlLiBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgdGhlIGNvcmUgZnVuY3Rpb24gd2hlcmUgdGhlIHByb2Nlc3MgaXMgc2V0IHVwLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGhvdyB0aGUgc3RhdGUgaXMgY2FwdHVyZWQsIHRyYW5zZmVycmVkLCBhbmQgcmVzdG9yZWQsIG9yIGF0IGxlYXN0IHRoZSBpbml0aWFsIHN0ZXBzIG9mIHRoZSBwcm9jZXNzLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkOyBwYXJ0aWN1bGFybHkgYW55IFMzOTAtc3BlY2lmaWMgc3RydWN0dXJlcywgcmVnaXN0ZXJzIG9yIGFyY2hpdGVjdHVyYWwgY29uc2lkZXJhdGlvbnMgdGhhdCBpbmZsdWVuY2UgdGhlIG1pZ3JhdGlvbiBmbG93LiBMZXQncyBnZXQgcmVhZGluZyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2NDcsIk91dHB1dFRva2VucyI6NTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDowNjozNC43MTk4NTEyMzFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwOTg5OTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0xMjcxPXN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc3RvcF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTEyOTctXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjEyOTg6c3RhdGljIGludCBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uKHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTI5OS1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjA0ND1zdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3NldF9hdHRyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMDYxLVxcdGNhc2UgS1ZNX1MzOTBfVk1fTUlHUkFUSU9OOlxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzoyMDYyOlxcdFxcdHJldCA9IGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb24oa3ZtLCBhdHRyKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMjA2My1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDA6MDY6MzQuNzYwODQ3MTMxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0ODkzMDY2MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHlvdSBkZXNjcmliZWQ6XG5cbioqRXhhbWluaW5nIHRoZSBga3ZtX3MzOTBfa2V5b3BgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBndXRzIG9mIHRoZSBLVk0gUzM5MCBjb2RlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGt2bV9zMzkwX2tleW9wYCBmdW5jdGlvbi4gSSdtIGhlYWRpbmcgc3RyYWlnaHQgdG8gYGFyY2gvczM5MC9rdm0va3ZtLXMzOTAuY2AgdG8gZmluZCBpdC4gVGhpcyBmdW5jdGlvbiBoYXMgbGlrZWx5IGJlZW4gZmxhZ2dlZCwgb3IgSSBoYXZlIGEgcXVlc3Rpb24gYWJvdXQgaXRzIG9wZXJhdGlvbiwgYW5kIG5lZWRzIHRvIGJlIGFuYWx5emVkIGluIGRldGFpbC4gSSdtIGV4cGVjdGluZyB0byBzZWUgb3BlcmF0aW9ucyByZWxhdGVkIHRvIGtleSBoYW5kbGluZyBvciBzb21lIHNlY3VyaXR5IGFzcGVjdCB3aXRoaW4gdGhlIFMzOTAgYXJjaGl0ZWN0dXJlJ3MgS1ZNIGltcGxlbWVudGF0aW9uLiBUaGlzIGNvdWxkIGJlIGFueXRoaW5nIGZyb20gY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb25zIHRvIG1hbmFnaW5nIGFjY2VzcyBjb250cm9sLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udHJvbCBmbG93LCB0aGUgZGF0YSBpdCBvcGVyYXRlcyBvbiwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBLVk0gZnJhbWV3b3JrLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIHRoZSBTMzkwIGhhcmR3YXJlLiBJJ20gYW50aWNpcGF0aW5nIHNvbWUgUzM5MC1zcGVjaWZpYyByZWdpc3RlciB1c2FnZSBvciBwZXJoYXBzIGludGVyYWN0aW9ucyB3aXRoIGhhcmR3YXJlIHNlY3VyaXR5IG1vZHVsZXMsIGFuZCBJJ20gcmVhZHkgdG8gcGVlbCBiYWNrIHRoZSBsYXllcnMgdG8gdW5kZXJzdGFuZCBob3cgaXQgYWxsIGZpdHMgdG9nZXRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MzA1LCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDA6MDY6MzguMjUwMTU2MjA5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjQyODM1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fczM5MF9rZXlvcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU1MD1zdGF0aWMgdm9pZCBfX2t2bV9zMzkwX2V4aXQodm9pZClcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NjEtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU2MjpzdGF0aWMgaW50IGt2bV9zMzkwX2tleW9wKHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jLCBzdHJ1Y3Qga3ZtICprdm0sIGludCBvcCxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTYzLVxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bmlvbiBza2V5IHNrZXkpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MjkyNj1pbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzA1OC1cXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfbW11X2NhY2hlICptYztcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzA1OTpcXHRcXHRzdHJ1Y3Qga3ZtX3MzOTBfa2V5b3Aga29wO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMDYwLVxcdFxcdHVuaW9uIHNrZXkgc2tleTtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMDcxLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMDcyOlxcdFxcdHIgPSBrdm1fczM5MF9rZXlvcChtYywga3ZtLCBrb3Aub3BlcmF0aW9uLCBrb3AuZ3Vlc3RfYWRkciwgc2tleSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMwNzMtXFx0XFx0a3ZtX3MzOTBfZnJlZV9tbXVfY2FjaGUobWMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDowNjozOC4yOTI1OTA1NThaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU4MDg0OTY2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtWTSBzMzkwIEFyY2hpdGVjdHVyZSoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGBrdm1fYXJjaF92bV9pb2N0bGAgaXMgdGhlIGtleSBlbnRyeSBwb2ludCBmb3IgYGt2bV9zMzkwX2tleW9wYC4gVGhhdCdzIHdoZXJlIHdlIHN0YXJ0LiBOb3csIHRoaW5raW5nIGFib3V0IHRoZSBjb3JlIGZ1bmN0aW9uYWxpdGllcywgbXkgYXR0ZW50aW9uIGlzIGRyYXduIHRvIGEgc3BlY2lmaWMgc2V0IG9mIGZ1bmN0aW9uczogYGt2bV9hcmNoX3ZjcHVfY3JlYXRlYCwgYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYCwgYGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25gLCBga3ZtX3MzOTBfa2V5b3BgIChvYnZpb3VzbHkhKSwgYGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVgLCBhbmQgYGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1YC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgSSBuZWVkIHRvIGRpc3NlY3QgZnVydGhlciB0byBmdWxseSBncmFzcCB0aGUgczM5MCBhcmNoaXRlY3R1cmUgd2l0aGluIEtWTS5cblxuR2l2ZW4gdGhlaXIgY29udGV4dCwgaXQncyBhbHNvIGltcG9ydGFudCB0byBoYXZlIGEgbG9vayBhdCBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gIGFuZCBga3ZtX2FyY2hfdmNwdV9pb2N0bGAgdG8gZ2V0IGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29udHJvbCBmbG93LiBJIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGUgb25lcyBJJ3ZlIGxpc3RlZC4gVGhpcyBpcyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciBhIGRlZXBlciBkaXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjEyMSwiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDowNjo0Mi44NzM0NDI5MTFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMzk2Nzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzYwMT12b2lkIGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzYxNi1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzYxNzpcXHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bigpIGFuZCBrdm1fYXJjaF92Y3B1X2lvY3RsKCkgKi9cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzYxOC1cXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5pbml0aWFsaXplZCwgdHJ1ZSk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTAwMT1zdGF0aWMgdm9pZCBzdG9yZV9yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01MDIxLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1MDIyOmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTUwMjMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDowNjo0Mi45MTQ4NDU2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5Mjk1MTE1MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0J3MgZ29pbmcgb24gd2l0aCBga3ZtX2FyY2hfdmNwdV9pb2N0bGAsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmUsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEtWTSBBcmNoaXRlY3R1cmFsIFZDUFUgaW9jdGwqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayBkb3duIGBrdm1fYXJjaF92Y3B1X2lvY3RsYC4gSW1tZWRpYXRlbHksIEkgc2VlIHRoaXMgYXMgYSBjcml0aWNhbCBlbnRyeSBwb2ludCBmb3IgYXJjaGl0ZWN0dXJhbCBpbnRlcmFjdGlvbnMgd2l0aGluIGEgS1ZNIHZpcnR1YWwgQ1BVLiBUaGlzIGZ1bmN0aW9uLCBJIHN1cm1pc2UsIGhhbmRsZXMgdGhlIGludGVyZmFjZSBiZXR3ZWVuIHRoZSBoeXBlcnZpc29yJ3MgZ2VuZXJpYyBWQ1BVIG1hbmFnZW1lbnQgYW5kIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgcmVxdWlyZW1lbnRzIG9mIHRoZSBndWVzdC4gVGhhdCBtZWFucyB0aGlzIGlzIHdoZXJlIHRoZSAqcmVhbCogbWFnaWMgaGFwcGVucywgd2hlcmUgdGhlIEtWTSBjb2RlIGFkYXB0cyB0byB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBhcmNoaXRlY3R1cmUgYW5kIGl0cyBudWFuY2VzLlxuXG5NeSBpbW1lZGlhdGUgYXNzdW1wdGlvbiBpcyB0aGF0IHRoaXMgaW9jdGwgaGFuZGxlciBhY3RzIGFzIGEgY2VudHJhbCBkaXNwYXRjaGVyLiBJdCdzIHRoZSBnYXRla2VlcGVyLCByZWNlaXZpbmcgaW9jdGwgY29tbWFuZHMgZnJvbSB0aGUgdXNlciBzcGFjZSAob3IgZnJvbSBLVk0ncyBvd24gaW50ZXJuYWwgY29tcG9uZW50cywgZm9yIHNvbWUgY29tbWFuZHMpLiBCYXNlZCBvbiB0aGUgc3BlY2lmaWMgY29tbWFuZCBjb2RlIHByb3ZpZGVkIGluIHRoZSBgaW9jdGxgIGNhbGwsIGl0IHRoZW4gZmlndXJlcyBvdXQgd2hhdCBhcmNoaXRlY3R1cmFsIGFjdGlvbiBuZWVkcyB0byBiZSB0YWtlbi4gVGhpcyBjb3VsZCByYW5nZSBmcm9tIGNvbmZpZ3VyaW5nIHNwZWNpZmljIENQVSBmZWF0dXJlcyB0byBoYW5kbGluZyBndWVzdCBtZW1vcnkgbWFuYWdlbWVudCBpbiBhbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgd2F5LlxuXG5JIGJldCBpdCBoYXMgYSBsYXJnZSBgc3dpdGNoYCBzdGF0ZW1lbnQgb3IgYSBsb29rdXAgdGFibGUsIGVzc2VudGlhbGx5IGEgXCJjYXNlXCIgc3RhdGVtZW50LCB0aGF0IG1hcHMgdGhlIGlvY3RsIGNvbW1hbmQgdG8gdGhlIHJlbGV2YW50IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmdW5jdGlvbi4gSSdtIHRoaW5raW5nIGFib3V0IHRoaW5ncyBsaWtlIGludGVyY2VwdGluZyBhbmQgZW11bGF0aW5nIHNwZWNpYWwgaW5zdHJ1Y3Rpb25zLCBtYW5hZ2luZyBjb250cm9sIHJlZ2lzdGVycywgaGFuZGxpbmcgbW9kZWwtc3BlY2lmaWMgcmVnaXN0ZXJzIChNU1JzKSwgcGVyaGFwcyBzZXR0aW5nIHVwIG5lc3RlZCBwYWdpbmcgc3RydWN0dXJlcyBpZiBhcHByb3ByaWF0ZSwgb3IgZXZlbiBtYW5hZ2luZyBzcGVjaWZpYyBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIHVuaXRzLlxuXG5GdXJ0aGVybW9yZSwgSSBleHBlY3Qgc3Ryb25nIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zIGFyZSBlbXBsb3llZCBoZXJlLiBUaGlzIGZ1bmN0aW9uIGlzIHVuZG91YnRlZGx5IG11bHRpLXRocmVhZGVkOyBpdCdzIGEgY3JpdGljYWwgc2VjdGlvbiB3aXRoaW4gS1ZNLiBJJ2QgZXhwZWN0IGxvY2tzIG9yIGF0b21pYyBvcGVyYXRpb25zIHRvIGVuc3VyZSBkYXRhIGNvbnNpc3RlbmN5LCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHNoYXJlZCBWQ1BVIHN0YXRlLiBUaGlzIHdvdWxkIGJlIG5lY2Vzc2FyeSB0byBwcm90ZWN0IHRoZSBWQ1BVIHN0YXRlIGZyb20gc2ltdWx0YW5lb3VzIGFjY2Vzc2VzIGJ5IGRpZmZlcmVudCB0aHJlYWRzIG9yIGV2ZW4gZGlmZmVyZW50IHZDUFVzLiBBbHNvLCB0aGVyZSdzIGFsd2F5cyB0aGUgY29uY2VybiBvZiBkZWFkbG9ja3Mgd2hlbiBkZWFsaW5nIHdpdGggc3luY2hyb25pemF0aW9uIGFuZCBuZXN0ZWQgb3BlcmF0aW9ucywgc28gdGhlcmUgd2lsbCBuZWVkIHRvIGJlIHdlbGwtY29uc2lkZXJlZCBsb2NrIG9yZGVyaW5nLlxuXG5BbHNvLCB0aGUgZXJyb3IgaGFuZGxpbmcsIEkgaW1hZ2luZSwgaXMgYSBjb21wbGV4IGFmZmFpciwgZ2l2ZW4gdGhlIGludHJpY2F0ZSBuYXR1cmUgb2YgdGhlIHBvc3NpYmxlIGZhaWx1cmUgbW9kZXMuIEkgbmVlZCB0byBoYW5kbGUgYm90aCBnZW5lcmFsIEtWTSBlcnJvcnMgYW5kIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBlcnJvcnMsIGFuZCB0aGVuIHRyYW5zbGF0ZSB0aGVtIGJhY2sgaW50byB1c2VyLWZyaWVuZGx5IGVycm9yIGNvZGVzIG9yIGluZm9ybWF0aW9uIHRoYXQgY2FuIGJlIGxvZ2dlZCBlZmZlY3RpdmVseS5cblxuVGhlIGRlc2lnbiBvZiBga3ZtX2FyY2hfdmNwdV9pb2N0bGAgc2hvdWxkIGJlIG1vZHVsYXIsIGNsZWFybHkuIEkgaG9wZSB0byBzZWUgaXQgaXMgd2VsbC1zdHJ1Y3R1cmVkIGluIG9yZGVyIHRvIGFsbG93IGNsZWFuIHNlcGFyYXRpb24gb2YgY29uY2VybiBhbmQgZWFzaWVyIG1haW50ZW5hbmNlLCB3aXRoIHNwZWNpZmljIGhhbmRsZXJzIGZvciBkaWZmZXJlbnQgaW9jdGwgb3BlcmF0aW9ucywgZWFjaCB0YWlsb3JlZCB0byB0aGUgYXJjaGl0ZWN0dXJhbCBuZWVkcy4gVGhpcyBmdW5jdGlvbiwgd2hlbiBkb25lIHJpZ2h0LCBpcyBhIG1hc3RlcnBpZWNlIG9mIGFic3RyYWN0aW9uLCBicmlkZ2luZyB0aGUgZ2VuZXJhbCBLVk0gY29yZSB3aXRoIHRoZSBpZGlvc3luY3Jhc2llcyBvZiB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2OTI2LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDA6MDY6NDcuODQ0MzYwNzk3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTg3ODMzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fYXJjaF92Y3B1X2lvY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9MzYwMT12b2lkIGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzYxNi1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MzYxNzpcXHQvKiBQYWlycyB3aXRoIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bigpIGFuZCBrdm1fYXJjaF92Y3B1X2lvY3RsKCkgKi9cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzYxOC1cXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5pbml0aWFsaXplZCwgdHJ1ZSk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9Mzk0OT1pbnQga3ZtX2FyY2hfdmNwdV9zaG91bGRfa2ljayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzk1NS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6Mzk1NjpzdGF0aWMgaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZ2V0X29uZV9yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zOTU3LVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBrdm1fb25lX3JlZyAqcmVnKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQwMDQtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQwMDU6c3RhdGljIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9vbmVfcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDAwNi1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga3ZtX29uZV9yZWcgKnJlZylcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MDU3LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MDU4OnN0YXRpYyB2b2lkIGt2bV9hcmNoX3ZjcHVfaW9jdGxfbm9ybWFsX3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDA1OS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDA2OS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDA3MDpzdGF0aWMgdm9pZCBrdm1fYXJjaF92Y3B1X2lvY3RsX2luaXRpYWxfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MDcxLXtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDA3Mi1cXHQvKiBJbml0aWFsIHJlc2V0IGlzIGEgc3VwZXJzZXQgb2YgdGhlIG5vcm1hbCByZXNldCAqL1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MDczOlxcdGt2bV9hcmNoX3ZjcHVfaW9jdGxfbm9ybWFsX3Jlc2V0KHZjcHUpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MDc0LVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQxMTMtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQxMTQ6c3RhdGljIHZvaWQga3ZtX2FyY2hfdmNwdV9pb2N0bF9jbGVhcl9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQxMTUte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQxMTgtXFx0LyogQ2xlYXIgcmVzZXQgaXMgYSBzdXBlcnNldCBvZiB0aGUgaW5pdGlhbCByZXNldCAqL1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MTE5OlxcdGt2bV9hcmNoX3ZjcHVfaW9jdGxfaW5pdGlhbF9yZXNldCh2Y3B1KTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDEyMC1cXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTI5LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MTMwOmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9yZWdzICpyZWdzKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTMxLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTM3LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MTM4OmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX2dldF9yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9yZWdzICpyZWdzKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTM5LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTQ1LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MTQ2OmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9zcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQxNDctXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qga3ZtX3NyZWdzICpzcmVncylcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTU3LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MTU4OmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX2dldF9zcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQxNTktXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qga3ZtX3NyZWdzICpzcmVncylcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTY5LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MTcwOmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9mcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2ZwdSAqZnB1KVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTcxLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTg0LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MTg1OmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX2dldF9mcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2ZwdSAqZnB1KVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTg2LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MTk5LVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo0MjAwOnN0YXRpYyBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfaW5pdGlhbF9wc3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBwc3dfdCBwc3cpXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQyMDEte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQyMTItXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQyMTM6aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfdHJhbnNsYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDIxNC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBrdm1fdHJhbnNsYXRpb24gKnRyKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQyMjItXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQyMjM6aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X2d1ZXN0X2RlYnVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDIyNC1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnICpkYmcpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNDI2NC1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NDI2NTppbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfbXBzdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQyNjYtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fbXBfc3RhdGUgKm1wX3N0YXRlKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTQyNzktXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjQyODA6aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X21wc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy00MjgxLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX21wX3N0YXRlICptcF9zdGF0ZSlcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz01MDAxPXN0YXRpYyB2b2lkIHN0b3JlX3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTUwMjEtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjUwMjI6aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTAyMy17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTQ4MT1zdGF0aWMgaW50IGt2bV9zMzkwX2hhbmRsZV9wdl92Y3B1X2R1bXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU1MjItXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU1MjM6bG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NTI0LVxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU1NDktXFx0XFx0XFx0YnJlYWs7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU1NTA6XFx0XFx0ciA9IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X2luaXRpYWxfcHN3KHZjcHUsIHBzdyk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU1NTEtXFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTU1NC1cXHRcXHRyID0gMDtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTU1NTpcXHRcXHRrdm1fYXJjaF92Y3B1X2lvY3RsX2NsZWFyX3Jlc2V0KHZjcHUpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NTU2LVxcdFxcdGlmIChrdm1fczM5MF9wdl9jcHVfaXNfcHJvdGVjdGVkKHZjcHUpKSB7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTU2NC1cXHRcXHRyID0gMDtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTU2NTpcXHRcXHRrdm1fYXJjaF92Y3B1X2lvY3RsX2luaXRpYWxfcmVzZXQodmNwdSk7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU1NjYtXFx0XFx0aWYgKGt2bV9zMzkwX3B2X2NwdV9pc19wcm90ZWN0ZWQodmNwdSkpIHtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NTc1LVxcdFxcdHIgPSAwO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1NTc2OlxcdFxcdGt2bV9hcmNoX3ZjcHVfaW9jdGxfbm9ybWFsX3Jlc2V0KHZjcHUpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NTc3LVxcdFxcdGlmIChrdm1fczM5MF9wdl9jcHVfaXNfcHJvdGVjdGVkKHZjcHUpKSB7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTU5My1cXHRcXHRpZiAoaW9jdGwgPT0gS1ZNX1NFVF9PTkVfUkVHKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1NTk0OlxcdFxcdFxcdHIgPSBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9vbmVfcmVnKHZjcHUsIFxcdTAwMjZyZWcpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NTk1LVxcdFxcdGVsc2VcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTU5NjpcXHRcXHRcXHRyID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfb25lX3JlZyh2Y3B1LCBcXHUwMDI2cmVnKTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTU5Ny1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDA6MDY6NDcuODkwMjQ3NzE2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4ODQ5ODAxMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTSBFbnRyeSBQb2ludHMgZm9yIFMzOTAgQXJjaGl0ZWN0dXJlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGtleSBlbnRyeSBwb2ludHMgZm9yIEtWTSBvbiB0aGUgUzM5MCBhcmNoaXRlY3R1cmUuIEluaXRpYWxseSwgSSBqb3R0ZWQgZG93biBga3ZtX2FyY2hfdmNwdV9pb2N0bGAgYW5kIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAuIEhtbSwgb24gc2Vjb25kIHRob3VnaHQsIGBrdm1fYXJjaF92Y3B1X2lvY3RsYCBpcyBhIGJpdCB0b28gZ2VuZXJpYywgYSBzdGFuZGFyZCBLVk0gQVBJIGZ1bmN0aW9uLiBJdCdzIG5vdCAqd3JvbmcqIHRvIGxpc3QgaXQsIGJ1dCBpdCBtaWdodCBub3QgYmUgdGhlIG1vc3Qgc3BlY2lmaWMgb3IgaW50ZXJlc3Rpbmcgb25lIGluIHRoaXMgY29udGV4dC5cblxuTm93LCBga3ZtX2FyY2hfdmNwdV9jcmVhdGVgIOKAkyB0aGF0J3MgYSBnb29kIG9uZSwgdGhhdCdzIGV4YWN0bHkgdGhlIGtpbmQgb2YgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGVudHJ5IHBvaW50IEknbSBhZnRlci4gU2ltaWxhcmx5LCBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gIGlzIGRlZmluaXRlbHkgcmVsZXZhbnQuIEFuZCBtb3Zpbmcgb24gdG8gUzM5MCBzcGVjaWZpY3MsIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YCBhbmQgYGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1YCBhcmUgZXhjZWxsZW50IGNob2ljZXMg4oCTIHRoZXkncmUgY29yZSB0byB0aGUgcG93ZXIgdmlydHVhbGl6YXRpb24gYXNwZWN0LiAgYGt2bV9zMzkwX2tleW9wYCBhbHNvIHNlZW1zIHJlbGV2YW50LiBUaGVuIHRoZXJlJ3MgYGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25gIC0geWVzLCB0aGF0J3MgZ29vZCB0b28sIGZvciBtaWdyYXRpb24gaGFuZGxpbmcuXG5cbkxldCdzIG5vdyBkaWcgZGVlcGVyLCBJIHdpbGwgY2hlY2sgaW4gYGFyY2gvczM5MC9rdm0vcHJpdi5jYCB0byBzZWUgaWYgSSBjYW4gZmluZCBgaGFuZGxlX3JyYmVgIG9yIGBoYW5kbGVfZXNzYWAuIEknbSB0cnlpbmcgdG8gZ2V0IGEgZnVsbCBwaWN0dXJlIG9mIHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgZHJpdmUgdGhlIFMzOTAgS1ZNIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDg3MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDowNjo1Mi43NzUyMzA1NzRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NTAyNzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhhbmRsZV9ycmJlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vcHJpdi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vcHJpdi5jPTI1Nz1zdGF0aWMgaW50IGhhbmRsZV9pc2tlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTI4OC1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzoyODk6c3RhdGljIGludCBoYW5kbGVfcnJiZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMjkwLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jPTk1OT1pbnQga3ZtX3MzOTBfaGFuZGxlX2IyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTk3OS1cXHRjYXNlIDB4MmE6XFxuYXJjaC9zMzkwL2t2bS9wcml2LmM6OTgwOlxcdFxcdHJldHVybiBoYW5kbGVfcnJiZSh2Y3B1KTtcXG5hcmNoL3MzOTAva3ZtL3ByaXYuYy05ODEtXFx0Y2FzZSAweDJiOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDowNjo1Mi44MjM3Mzg2OTNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYwNTY1ODQ1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgRnVuY3Rpb24gJ2hhbmRsZV9ycmJlJyoqXG5cbkFscmlnaHQsIGxvb2tpbmcgYXQgdGhhdCBmdW5jdGlvbiBuYW1lLCBgaGFuZGxlX3JyYmVgLCBteSBpbW1lZGlhdGUgYXNzZXNzbWVudCBpcyB0aGF0IGl0IHNob3dzIHByb21pc2UgYXMgYSBmb2N1c2VkIGZ1bmN0aW9uLiBUaGUgbmFtZSBpdHNlbGYgc3VnZ2VzdHMgYSBkaXN0aW5jdCBhbmQgbGlrZWx5IGltcG9ydGFudCByZXNwb25zaWJpbGl0eSB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBJJ20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggcG90ZW50aWFsIHNjZW5hcmlvcyB3aGVyZSBJJ2QgZXhwZWN0IHRvIHNlZSB0aGlzIGZ1bmN0aW9uIHVzZWQuIEJhc2VkIG9uIHRoZSBuYW1lIGFsb25lLCBJJ20gaW5mZXJyaW5nIGl0IHByb2JhYmx5IHBsYXlzIGEgY3J1Y2lhbCByb2xlIGluIG1hbmFnaW5nIHNvbWUgYXNwZWN0IG9mLCBwb3NzaWJseSByZWxhdGVkIHRvIHJlc291cmNlIHJlYmFsYW5jaW5nLCBkYXRhIHZhbGlkYXRpb24sIG9yIGV4dGVybmFsIGludGVyZmFjZXMuIFRoZSBcIlJSXCIgcG90ZW50aWFsbHkgc3RhbmRzIGZvciBcIlJlc291cmNlIFJlYmFsYW5jaW5nXCIgb3IgXCJSZWxpYWJsZSBSZW1vdGVcIiwgdGhlIFwiQkVcIiBpcyBsaWtlbHkgXCJCYWNrZW5kXCIgb3IgXCJCdXNpbmVzcyBFbnRpdHlcIi4gRnVydGhlciBpbnZlc3RpZ2F0aW9uIHdvdWxkIGJlIG5lZWRlZCBvZiBjb3Vyc2UsIGJ1dCB0aGUgbmFtZSBpcyBxdWl0ZSB0ZWxsaW5nIGFuZCBwcm92aWRlcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGEgZGVlcGVyIGRpdmUuIFRoZSBmYWN0IHRoYXQgc29tZW9uZSBoYXMgaWRlbnRpZmllZCB0aGlzIGZ1bmN0aW9uIHRvIHJldmlldyBpcyBhIGdvb2QgaW5kaWNhdG9yIG9mIGl0cyBzaWduaWZpY2FuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNzIyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDA6MDY6NTYuNDI5NDAwMjM5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjUyOTE3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoYW5kbGVfZXNzYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL3ByaXYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL3ByaXYuYz0xMTkxPXN0YXRpYyB2b2lkIF9lc3NhX2NsZWFyX2Nicmwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nICpjYnJsLCBpbnQgbGVuKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmMtMTIxNi1cXG5hcmNoL3MzOTAva3ZtL3ByaXYuYzoxMjE3OnN0YXRpYyBpbnQgaGFuZGxlX2Vzc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTEyMTgte1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9wcml2LmM9MTI4ND1pbnQga3ZtX3MzOTBfaGFuZGxlX2I5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTEyOTMtXFx0Y2FzZSAweGFiOlxcbmFyY2gvczM5MC9rdm0vcHJpdi5jOjEyOTQ6XFx0XFx0cmV0dXJuIGhhbmRsZV9lc3NhKHZjcHUpO1xcbmFyY2gvczM5MC9rdm0vcHJpdi5jLTEyOTUtXFx0Y2FzZSAweGFmOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDowNjo1Ni40NzE5MzQwNDhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM3MjkyMjQzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRm9jdXNpbmcgb24gSW50ZXJydXB0IEluamVjdGlvbiBpbiB0aGUgczM5MCBLVk0gQ29udGV4dCoqXG5cblJpZ2h0LCBgaGFuZGxlX2Vzc2FgIGlzIGRlZmluaXRlbHkgYW5vdGhlciBzdHJvbmcgY2FuZGlkYXRlIGZvciBhIGZvY3VzZWQgZnVuY3Rpb24gaGVyZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gY29uc2lkZXJpbmcgYWxsIHJlbGV2YW50IGVudHJ5IHBvaW50cy4gT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29kZSBub3cuIE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBhcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGluamVjdGlvbiBhbmQgY2xlYXJpbmcgbWVjaGFuaXNtcyBmb3IgZXh0ZXJuYWwgY2FsbHMgd2l0aGluIHRoZSBzMzkwIEtWTSBlbnZpcm9ubWVudC4gU3BlY2lmaWNhbGx5LCBJJ20gbG9va2luZyBmb3IgdGhlIGltcGxlbWVudGF0aW9ucyBvZiBgc2NhX2luamVjdF9leHRfY2FsbGAgYW5kIGBzY2FfY2xlYXJfZXh0X2NhbGxgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBoeXBlcnZpc29yIGludGVyYWN0cyB3aXRoIGd1ZXN0cyByZWdhcmRpbmcgZXh0ZXJuYWwgaW50ZXJydXB0cyBhbmQgZXZlbnRzLCBhbmQgc2hvdWxkIHByb3ZpZGUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBlc3NhIGlzIGhhbmRsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMjUzLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDA6MDY6NTkuODQ0ODYwMTE3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjEyOTIxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY2FfaW5qZWN0X2V4dF9jYWxsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYz00NT1zdGF0aWMgaW50IHNjYV9leHRfY2FsbF9wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50ICpzcmNfaWQpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTYyLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6NjM6c3RhdGljIGludCBzY2FfaW5qZWN0X2V4dF9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNyY19pZClcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTY0LXtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MTUwNT1zdGF0aWMgaW50IF9faW5qZWN0X2V4dGNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfaXJxICppcnEpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE1MjEtXFx0aWYgKGt2bV9zMzkwX3VzZV9zY2FfZW50cmllcygpIFxcdTAwMjZcXHUwMDI2ICFrdm1fczM5MF9wdl9jcHVfZ2V0X2hhbmRsZSh2Y3B1KSlcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjE1MjI6XFx0XFx0cmV0dXJuIHNjYV9pbmplY3RfZXh0X2NhbGwodmNwdSwgc3JjX2lkKTtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE1MjMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAwOjA2OjU5Ljg4Njk5NjUwNloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjIyNjY0OTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6XG5cbioqQ29uc2lkZXJpbmcgdGhlIEJlc3QgQXBwcm9hY2ggZm9yIEV4dGVybmFsIENhbGxzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHdlJ3JlIGhhbmRsaW5nIHRoZXNlIGV4dGVybmFsIGNhbGxzLCBhbmQgSSdtIHJlYWxpemluZyBgc2NhX2luamVjdF9leHRfY2FsbGAgaXMgc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIHdlIGNhbiBwcm9iYWJseSBkbyBiZXR0ZXIuIExldCdzIHNlZS4uLiBtYXliZSBgX19pbmplY3RfZXh0Y2FsbGAgb3IgYGt2bV9zMzkwX2luamVjdF92Y3B1YCB3b3VsZCBiZSBtb3JlIGFwcHJvcHJpYXRlLiBCdXQgaGFuZyBvbiwgYF9faW5qZWN0X2V4dGNhbGxgIGlzIGFsc28gc3RhdGljISBBbHJpZ2h0LCBzZWVtcyBsaWtlIHRoZSBvcHRpb25zIGFyZSBuYXJyb3dpbmcuIExldCdzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBga3ZtX3MzOTBfaW5qZWN0X3ZjcHVgLiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhhdCBvbmUgYW5kIHNlZSBpZiBpdCdzIHRoZSByaWdodCBmaXQgZm9yIHRoZSBqb2IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODQzLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDA6MDc6MDMuMTA5NjY0OTE2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjY1ODc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fczM5MF9pbmplY3RfdmNwdVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MTQ0Nj1zdGF0aWMgaW50IF9faW5qZWN0X3Byb2coc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfaXJxICppcnEpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE0NTEtXFx0VkNQVV9FVkVOVCh2Y3B1LCAzLCBcXFwiaW5qZWN0OiBwcm9ncmFtIGlycSBjb2RlIDB4JXhcXFwiLCBpcnEtXFx1MDAzZXUucGdtLmNvZGUpO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTQ1MjpcXHR0cmFjZV9rdm1fczM5MF9pbmplY3RfdmNwdSh2Y3B1LVxcdTAwM2V2Y3B1X2lkLCBLVk1fUzM5MF9QUk9HUkFNX0lOVCxcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE0NTMtXFx0XFx0XFx0XFx0ICAgaXJxLVxcdTAwM2V1LnBnbS5jb2RlLCAwKTtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MTQ4OD1zdGF0aWMgaW50IF9faW5qZWN0X3BmYXVsdF9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zMzkwX2lycSAqaXJxKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNDk0LVxcdFxcdCAgIGlycS1cXHUwMDNldS5leHQuZXh0X3BhcmFtczIpO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTQ5NTpcXHR0cmFjZV9rdm1fczM5MF9pbmplY3RfdmNwdSh2Y3B1LVxcdTAwM2V2Y3B1X2lkLCBLVk1fUzM5MF9JTlRfUEZBVUxUX0lOSVQsXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNDk2LVxcdFxcdFxcdFxcdCAgIGlycS1cXHUwMDNldS5leHQuZXh0X3BhcmFtcyxcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MTUwNT1zdGF0aWMgaW50IF9faW5qZWN0X2V4dGNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3MzOTBfaXJxICppcnEpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE1MTMtXFx0XFx0ICAgc3JjX2lkKTtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjE1MTQ6XFx0dHJhY2Vfa3ZtX3MzOTBfaW5qZWN0X3ZjcHUodmNwdS1cXHUwMDNldmNwdV9pZCwgS1ZNX1MzOTBfSU5UX0VYVEVSTkFMX0NBTEwsXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNTE1LVxcdFxcdFxcdFxcdCAgIHNyY19pZCwgMCk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTE1MzE9c3RhdGljIGludCBfX2luamVjdF9zZXRfcHJlZml4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zMzkwX2lycSAqaXJxKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNTM4LVxcdFxcdCAgIGlycS1cXHUwMDNldS5wcmVmaXguYWRkcmVzcyk7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxNTM5OlxcdHRyYWNlX2t2bV9zMzkwX2luamVjdF92Y3B1KHZjcHUtXFx1MDAzZXZjcHVfaWQsIEtWTV9TMzkwX1NJR1BfU0VUX1BSRUZJWCxcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE1NDAtXFx0XFx0XFx0XFx0ICAgaXJxLVxcdTAwM2V1LnByZWZpeC5hZGRyZXNzLCAwKTtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MTU1MT1zdGF0aWMgaW50IF9faW5qZWN0X3NpZ3Bfc3RvcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9pcnEgKmlycSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTU1Ny1cXHR2Y3B1LVxcdTAwM2VzdGF0LmluamVjdF9zdG9wX3NpZ25hbCsrO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTU1ODpcXHR0cmFjZV9rdm1fczM5MF9pbmplY3RfdmNwdSh2Y3B1LVxcdTAwM2V2Y3B1X2lkLCBLVk1fUzM5MF9TSUdQX1NUT1AsIDAsIDApO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTU1OS1cXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MTU3Nz1zdGF0aWMgaW50IF9faW5qZWN0X3NpZ3BfcmVzdGFydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE1ODItXFx0VkNQVV9FVkVOVCh2Y3B1LCAzLCBcXFwiJXNcXFwiLCBcXFwiaW5qZWN0OiByZXN0YXJ0IGludFxcXCIpO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTU4MzpcXHR0cmFjZV9rdm1fczM5MF9pbmplY3RfdmNwdSh2Y3B1LVxcdTAwM2V2Y3B1X2lkLCBLVk1fUzM5MF9SRVNUQVJULCAwLCAwKTtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE1ODQtXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTE1ODk9c3RhdGljIGludCBfX2luamVjdF9zaWdwX2VtZXJnZW5jeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE1OTYtXFx0XFx0ICAgaXJxLVxcdTAwM2V1LmVtZXJnLmNvZGUpO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTU5NzpcXHR0cmFjZV9rdm1fczM5MF9pbmplY3RfdmNwdSh2Y3B1LVxcdTAwM2V2Y3B1X2lkLCBLVk1fUzM5MF9JTlRfRU1FUkdFTkNZLFxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTU5OC1cXHRcXHRcXHRcXHQgICBpcnEtXFx1MDAzZXUuZW1lcmcuY29kZSwgMCk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTE2MTA9c3RhdGljIGludCBfX2luamVjdF9tY2hrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zMzkwX2lycSAqaXJxKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0xNjE3LVxcdFxcdCAgIGlycS1cXHUwMDNldS5tY2hrLm1jaWMpO1xcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM6MTYxODpcXHR0cmFjZV9rdm1fczM5MF9pbmplY3RfdmNwdSh2Y3B1LVxcdTAwM2V2Y3B1X2lkLCBLVk1fUzM5MF9NQ0hLLCAwLFxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTYxOS1cXHRcXHRcXHRcXHQgICBpcnEtXFx1MDAzZXUubWNoay5tY2ljKTtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MTY0Mj1zdGF0aWMgaW50IF9faW5qZWN0X2NrYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE2NDctXFx0VkNQVV9FVkVOVCh2Y3B1LCAzLCBcXFwiJXNcXFwiLCBcXFwiaW5qZWN0OiBjbG9jayBjb21wYXJhdG9yIGV4dGVybmFsXFxcIik7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzoxNjQ4OlxcdHRyYWNlX2t2bV9zMzkwX2luamVjdF92Y3B1KHZjcHUtXFx1MDAzZXZjcHVfaWQsIEtWTV9TMzkwX0lOVF9DTE9DS19DT01QLFxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMTY0OS1cXHRcXHRcXHRcXHQgICAwLCAwKTtcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmM9MTY1Nj1zdGF0aWMgaW50IF9faW5qZWN0X2NwdV90aW1lcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE2NjEtXFx0VkNQVV9FVkVOVCh2Y3B1LCAzLCBcXFwiJXNcXFwiLCBcXFwiaW5qZWN0OiBjcHUgdGltZXIgZXh0ZXJuYWxcXFwiKTtcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjE2NjI6XFx0dHJhY2Vfa3ZtX3MzOTBfaW5qZWN0X3ZjcHUodmNwdS1cXHUwMDNldmNwdV9pZCwgS1ZNX1MzOTBfSU5UX0NQVV9USU1FUixcXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jLTE2NjMtXFx0XFx0XFx0XFx0ICAgMCwgMCk7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTIxMDM9c3RhdGljIGludCBkb19pbmplY3RfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fczM5MF9pcnEgKmlycSlcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjE0Ny1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jOjIxNDg6aW50IGt2bV9zMzkwX2luamVjdF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zMzkwX2lycSAqaXJxKVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMjE0OS17XFxuLS1cXG5hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jPTMwNzg9dm9pZCBrdm1fczM5MF9yZWluamVjdF9tYWNoaW5lX2NoZWNrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMtMzExMy1cXHRcXHRpcnEudHlwZSA9IEtWTV9TMzkwX01DSEs7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYzozMTE0OlxcdFxcdHJjID0ga3ZtX3MzOTBfaW5qZWN0X3ZjcHUodmNwdSwgXFx1MDAyNmlycSk7XFxuYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYy0zMTE1LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDA6MDc6MDMuMTUyMzMwMDY2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDcxNzE1MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgaW5mb3JtYXRpb24sIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIEtWTS9zMzkwIEZhdWx0IEluamVjdGlvbioqXG5cbkFscmlnaHQsIGxvb2tpbmcgYXQgdGhpcywgYGt2bV9zMzkwX2luamVjdF92Y3B1YCBzZWVtcyBsaWtlIGEgc29saWQgZW50cnkgcG9pbnQgZm9yIGZvY3VzaW5nIG15IGFuYWx5c2lzLiBJdCdzIG9mdGVuIHRoZSBjYXNlIHRoYXQgaW5qZWN0aW9uIHBvaW50cyBwcm92aWRlIHRoZSBuZWNlc3NhcnkgaG9va3MgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBwcm9jZXNzLlxuXG5Ob3csIHdoZXJlIGRvIEkgZmluZCB0aGUgYWN0dWFsIGZhdWx0IGhhbmRsaW5nIGxvZ2ljPyBHaXZlbiB0aGUgY29udGV4dCBvZiBLVk0gb24gczM5MCwgSSdkIGV4cGVjdCB0byBmaW5kIHNvbWV0aGluZyByZWxldmFudCBpbiB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUuIExldCdzIGRlbHZlIGludG8gYGFyY2gvczM5MC9rdm0vZmF1bHRpbi5jYC4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuYCB3aXRoaW4gdGhhdCBmaWxlLiBUaGF0IGZ1bmN0aW9uIG5hbWUgc3VnZ2VzdHMgaXQgd2lsbCBiZSB0aGUgY29yZSBvZiB0aGUgR3Vlc3QgRnJhbWUgTnVtYmVyIChHRk4pIGZhdWx0LWluIHByb2Nlc3MsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJJ20gaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIGZvciB0aGlzIHByb2plY3QuIFRoaXMgc2hvdWxkIHJldmVhbCB0aGUgbWVjaGFuaXNtcyByZWxhdGVkIHRvIGZhdWx0IGluamVjdGlvbiB3aXRoaW4gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlJ3MgS1ZNIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTIxMywiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAwOjA3OjA2LjU5OTUwNTM4NFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1NjU3MDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9zMzkwX2ZhdWx0aW5fZ2ZuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vZmF1bHRpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rdm0vZmF1bHRpbi5jPTE1PWJvb2wga3ZtX2FyY2hfc2V0dXBfYXN5bmNfcGYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4tLVxcbmFyY2gvczM5MC9rdm0vZmF1bHRpbi5jLTE3LS8qXFxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmM6MTg6ICoga3ZtX3MzOTBfZmF1bHRpbl9nZm4oKSAtIGhhbmRsZSBhIGRhdCBmYXVsdC5cXG5hcmNoL3MzOTAva3ZtL2ZhdWx0aW4uYy0xOS0gKiBAdmNwdTogVGhlIHZDUFUgd2hvc2UgZ21hcCBpcyB0byBiZSBmaXhlZCB1cCwgb3IgTlVMTCBpZiBvcGVyYXRpbmcgb24gdGhlIFZNLlxcbi0tXFxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMtMzItICovXFxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmM6MzM6aW50IGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgZ3Vlc3RfZmF1bHQgKmYpXFxuYXJjaC9zMzkwL2t2bS9mYXVsdGluLmMtMzQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDowNzowNi43MTUxNzA0OTJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMzNTU2NDQwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBLVk0vczM5MCBDb2RlIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlc2UgY2hhbmdlcyBhbmQgYGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuYCBzZWVtcyBsaWtlIGEgZ29vZCBlbnRyeSBwb2ludC4gTGV0J3MgbWFrZSBzdXJlIEkndmUgZ290IHRoZSBsYXkgb2YgdGhlIGxhbmQgZmlyc3QuIEknbGwgc3VtbWFyaXplIHRoZXNlIGZvY3VzIGZ1bmN0aW9ucyB0aGF0IHNlZW0gcmVsZXZhbnQgdG8gdGhlIHBhdGNoOiBga3ZtX2FyY2hfdmNwdV9jcmVhdGVgLCBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gLCBga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdWAsIGBrdm1fczM5MF9wdl9kZXN0cm95X2NwdWAsIGBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uYCwgYGt2bV9zMzkwX2tleW9wYCwgYGhhbmRsZV9ycmJlYCwgYGhhbmRsZV9lc3NhYCwgYW5kIG9mIGNvdXJzZSwgYGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuYC4gVGhleSBzZWVtIGxpa2UgdGhlIG1vc3QgcmVsZXZhbnQgYXJlYXMgdG8gaW52ZXN0aWdhdGUuXG5cbk5vdywgYSBrZXkgcXVlc3Rpb246IERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYSBuZXcgZGVwZW5kZW5jeSBvciByZWx5IG9uIGBLVk1fUzM5MF9VQ09OVFJPTGA/IFllcCwgaXQgZG9lcy4gSSBzZWUgaXQgbW9kaWZpZXMgY29kZSB1c2luZyBga3ZtX2lzX3Vjb250cm9sKHZjcHUtXHUwMDNla3ZtKWAuIFNvLCBgS1ZNX1MzOTBfVUNPTlRST0xgIG5lZWRzIHRvIGJlIGluIGBFbmFibGVDb25maWdzYC4gSXQncyBwcmV0dHkgb2J2aW91cyB0aGF0IGBLVk1gIGl0c2VsZiBzaG91bGQgYmUgaW4gYEVuYWJsZUNvbmZpZ3MgdG9vLCBzaW5jZSB0aGF0J3MgdGhlIGNvcmUgS1ZNIGZlYXR1cmUgdGhpcyBpcyBidWlsdCB1cG9uLlxuXG5Ib2xkIG9uLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIEknbGwgcXVpY2tseSBjaGVjayBgYXJjaC9zMzkwL2t2bS9LY29uZmlnYCBhZ2FpbiB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgb3IgaW1wbGljYXRpb25zLiBJIHdhbnQgdG8gYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1ODA2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAwOjA3OjEyLjA1MDczODg3M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIzNDIzMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9LY29uZmlnPTE3PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTE4LVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzoxOTpjb25maWcgS1ZNXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTIwLVxcdGRlZl90cmlzdGF0ZSB5XFxuLS1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWctNDYtXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnOjQ3OmNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTFxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00OC1cXHRib29sIFxcXCJVc2Vyc3BhY2UgY29udHJvbGxlZCB2aXJ0dWFsIG1hY2hpbmVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDowNzoxMi4wOTMwODc0MzJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE3NTk4Nzg3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgZnJvbSBhbiBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqSW52ZXN0aWdhdGluZyBLVk0gRGVwZW5kZW5jaWVzIG9uIHMzOTAgQXJjaGl0ZWN0dXJlKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGluIGFuZCB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmN5IHN0cnVjdHVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2Ug4oCTIGxldCdzIGNoZWNrIHRoZSBgYXJjaC9zMzkwL2t2bS9LY29uZmlnYCBmaWxlLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBjb25kaXRpb25hbCBsb2dpYyBmb3IgS1ZNIChLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lKSB3aXRoaW4gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBJIHdhbnQgdG8gc2VlIHByZWNpc2VseSAqd2hhdCogb3RoZXIgY29uZmlndXJhdGlvbnMgb3IgZmVhdHVyZXMgYGt2bWAgcmVsaWVzIG9uIHRvIGJlIGVuYWJsZWQgb24gdGhpcyBhcmNoaXRlY3R1cmUuIFNwZWNpZmljYWxseSwgSSdtIGxvb2tpbmcgZm9yIHRoZSBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cy4gVGhlc2UgYXJlIHRoZSBjcml0aWNhbCBwaWVjZXMgb2YgaW5mb3JtYXRpb24gdGhhdCByZXZlYWwgdGhlIHByZXJlcXVpc2l0ZXMuIFVuZGVyc3RhbmRpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGlzIGtleSB0byB0cm91Ymxlc2hvb3RpbmcgS1ZNLXJlbGF0ZWQgaXNzdWVzLCBvciB0byBlbnN1cmluZyBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gaW4gYSBjdXN0b20gYnVpbGQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyByZXF1aXJlZCBzbyBJIGNhbiBlaXRoZXIgdHJvdWJsZXNob290IGEgY29uZmlndXJhdGlvbiBpc3N1ZSwgb3IgZ2V0IEtWTSB3b3JraW5nIG9uIGEgY3VzdG9tIGJ1aWxkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjY2MiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAwOjA3OjE1LjI2OTA3ODU5NVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIEtWTSBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRzb3VyY2UgXFxcInZpcnQva3ZtL0tjb25maWdcXFwiXFxuICAgNjpcXHRcXG4gICA3OlxcdG1lbnVjb25maWcgVklSVFVBTElaQVRJT05cXG4gICA4OlxcdFxcdGRlZl9ib29sIHlcXG4gICA5OlxcdFxcdHByb21wdCBcXFwiS1ZNXFxcIlxcbiAgMTA6XFx0XFx0aGVscFxcbiAgMTE6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGdldCB0byBzZWUgb3B0aW9ucyBmb3IgdXNpbmcgeW91ciBMaW51eCBob3N0IHRvIHJ1biBvdGhlclxcbiAgMTI6XFx0XFx0ICBvcGVyYXRpbmcgc3lzdGVtcyBpbnNpZGUgdmlydHVhbCBtYWNoaW5lcyAoZ3Vlc3RzKS5cXG4gIDEzOlxcdFxcdCAgVGhpcyBvcHRpb24gYWxvbmUgZG9lcyBub3QgYWRkIGFueSBrZXJuZWwgY29kZS5cXG4gIDE0OlxcdFxcbiAgMTU6XFx0XFx0ICBJZiB5b3Ugc2F5IE4sIGFsbCBvcHRpb25zIGluIHRoaXMgc3VibWVudSB3aWxsIGJlIHNraXBwZWQgYW5kIGRpc2FibGVkLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRpZiBWSVJUVUFMSVpBVElPTlxcbiAgMTg6XFx0XFxuICAxOTpcXHRjb25maWcgS1ZNXFxuICAyMDpcXHRcXHRkZWZfdHJpc3RhdGUgeVxcbiAgMjE6XFx0XFx0cHJvbXB0IFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuICAyMjpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fQ1BVX1JFTEFYX0lOVEVSQ0VQVFxcbiAgMjM6XFx0XFx0c2VsZWN0IEtWTV9BU1lOQ19QRlxcbiAgMjQ6XFx0XFx0c2VsZWN0IEtWTV9BU1lOQ19QRl9TWU5DXFxuICAyNTpcXHRcXHRzZWxlY3QgS1ZNX0NPTU1PTlxcbiAgMjY6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0lSUUNISVBcXG4gIDI3OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9JUlFfUk9VVElOR1xcbiAgMjg6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0lOVkFMSURfV0FLRVVQU1xcbiAgMjk6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX05PX1BPTExcXG4gIDMwOlxcdFxcdHNlbGVjdCBLVk1fVkZJT1xcbiAgMzE6XFx0XFx0c2VsZWN0IFZJUlRfWEZFUl9UT19HVUVTVF9XT1JLXFxuICAzMjpcXHRcXHRzZWxlY3QgS1ZNX01NVV9MT0NLTEVTU19BR0lOR1xcbiAgMzM6XFx0XFx0c2VsZWN0IEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcXG4gIDM0OlxcdFxcdGhlbHBcXG4gIDM1OlxcdFxcdCAgU3VwcG9ydCBob3N0aW5nIHBhcmF2aXJ0dWFsaXplZCBndWVzdCBtYWNoaW5lcyB1c2luZyB0aGUgU0lFXFxuICAzNjpcXHRcXHQgIHZpcnR1YWxpemF0aW9uIGNhcGFiaWxpdHkgb24gdGhlIG1haW5mcmFtZS4gVGhpcyBzaG91bGQgd29ya1xcbiAgMzc6XFx0XFx0ICBvbiBhbnkgNjRiaXQgbWFjaGluZS5cXG4gIDM4OlxcdFxcbiAgMzk6XFx0XFx0ICBUaGlzIG1vZHVsZSBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGhhcmR3YXJlIGNhcGFiaWxpdGllcyB0aHJvdWdoXFxuICA0MDpcXHRcXHQgIGEgY2hhcmFjdGVyIGRldmljZSBub2RlIG5hbWVkIC9kZXYva3ZtLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAgNDM6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBrdm0uXFxuICA0NDpcXHRcXG4gIDQ1OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDQ2OlxcdFxcbiAgNDc6XFx0Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXFxuICA0ODpcXHRcXHRib29sIFxcXCJVc2Vyc3BhY2UgY29udHJvbGxlZCB2aXJ0dWFsIG1hY2hpbmVzXFxcIlxcbiAgNDk6XFx0XFx0ZGVwZW5kcyBvbiBLVk1cXG4gIDUwOlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDA6MDc6MTUuMjY5MTcxMjY1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNzg0ODgzNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgbXkgbWluZCBpcyBqdW1waW5nIGFyb3VuZCBhIGJpdCBoZXJl4oCmXG5cbioqS1ZNIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuUmlnaHQsIHNvIEknbSBmb2N1c2luZyBvbiB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnM6IGBLVk1gIGFuZCBgS1ZNX1MzOTBfVUNPTlRST0xgLiBUaG9zZSBhcmUgdGhlIGNvcmUsIEkga25vdyB0aGF0LiBCdXQgaG9sZCBvbiwgdGhlIGBrdm1fczM5MF9wdl9jcmVhdGVfY3B1YCBmdW5jdGlvbiBuYW1l4oCmIHRoYXQgc2NyZWFtcyBQcm90ZWN0ZWQgVmlydHVhbGl6YXRpb24gKFBWKSB0byBtZSwgb24gczM5MHguIEkgbmVlZCB0byBjbGFyaWZ5OiBpcyB0aGVyZSBhIHNwZWNpZmljIGNvbmZpZyBvcHRpb24gKmRlZGljYXRlZCogdG8gdGhhdCBQViBmZWF0dXJlIHNldCwgb3IgaXMgaXQgaW1wbGljaXRseSBlbmFibGVkIHNvbWVob3c/IEkgbmVlZCB0byBrbm93IHdoZXJlIHRoZSBQViBzdXBwb3J0IGlzIGVuYWJsZWQgaW4gS1ZNIHMzOTB4LiBJIGhhdmUgdG8gdHJhY2UgaG93IHRoaXMgaXMgYmVpbmcgY29udHJvbGxlZCB3aXRoaW4gdGhlIEtWTSBlY29zeXN0ZW0gZm9yIHMzOTB4LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzU5MCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDA6MDc6MTguNDQ3NjYyMjQ1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mjc1NzkxOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9TMzkwX1BWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDA6MDc6MTguNDkwNDI5NDU0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NDgwOTg5NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipDaGVja2luZyBmb3IgUFYgQ29uZmlndXJhdGlvbiBpbiBzMzkwIEtjb25maWcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlcmUncyBhbnkgUGFyYXZpcnR1YWxpemF0aW9uIChQVikgY29uZmlndXJhdGlvbiBvcHRpb25zIGRlZmluZWQgd2l0aGluIHRoZSBgYXJjaC9zMzkwL0tjb25maWdgIGZpbGUuIFRoaXMgaXMgc3RhbmRhcmQgcHJvY2VkdXJlIGZvciBjaGVja2luZyB0aGUgYXJjaGl0ZWN0dXJlJ3MgY29uZmlndXJhdGlvbiBzcGFjZSBmb3IgdmlydHVhbGl6YXRpb24gc3VwcG9ydC4gSSdtIGxvb2tpbmcgZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gaHlwZXJ2aXNvcnMsIGd1ZXN0cywgb3IgcGFyYXZpcnR1YWxpemVkIGRyaXZlcnMuIFRoZSBwcmVzZW5jZSBvZiBQViBvcHRpb25zIHdvdWxkIHNpZ25hbCBob3cgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlIGhhbmRsZXMgaW50ZXJhY3Rpb25zIHdpdGggdmlydHVhbGl6YXRpb24gdGVjaG5vbG9naWVzIGFuZCBpZiB0aGUga2VybmVsIHByb3ZpZGVzIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24ga25vYnMgZm9yIHN1Y2ggZW52aXJvbm1lbnRzLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzg3NCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAwOjA3OjIxLjMzODUzMTQ5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzE2ODAxOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIC4qUFZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAwOjA3OjIxLjM4MTcwOTU3OVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDU0OTY4ODYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQ2hlY2tpbmcgdGhlIFByb3RlY3RlZCBNZW1vcnkgQ29uZmlndXJhdGlvbiBmb3IgczM5MCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBwcm90ZWN0ZWQgbWVtb3J5IGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSdzIGtlcm5lbC4gVGhlIGZpcnN0IHBsYWNlIEknZCBsb29rIGlzLCBuYXR1cmFsbHksIHRoZSBgS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBvbmUgaW4gYGFyY2gvczM5MC9gLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGF0IGFyY2hpdGVjdHVyZSByZXNpZGUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGBQUk9URUNURURgIHN5bWJvbCwgb3IgaG93ZXZlciBpdCdzIGRlZmluZWQgdGhlcmUsIHRvIHNlZSBob3cgaXQncyBoYW5kbGVkLiBXaGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzPyBIb3cgaXMgaXQgY29ubmVjdGVkIHRvIG90aGVyIGZlYXR1cmVzPyBBcmUgdGhlcmUgc3BlY2lmaWMgZGVmYXVsdCB2YWx1ZXMgb3IgcHJvbXB0cz8gVGhpcyBgS2NvbmZpZ2AgZmlsZSBzaG91bGQgZ2l2ZSBtZSB0aGUgZ3JvdW5kIHRydXRoIG9mIHRoZSBjb250cm9sIG92ZXIgcHJvdGVjdGVkIG1lbW9yeSBmb3IgdGhlIGFyY2hpdGVjdHVyZS4gSSdtIGhvcGluZyBpdCdzIHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IGV4cGVyaWVuY2UgdGVsbHMgbWUgdG8gcHJlcGFyZSBmb3IgcG90ZW50aWFsIGNvbXBsZXhpdGllcyByZWxhdGVkIHRvIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGFuZCBob3cgdGhlIGtlcm5lbCBpbnRlcmFjdHMgd2l0aCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgwODQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDowNzoyNC40MzY2ODExNzJaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMDE5MzI5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgLipQUk9URUNURURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAwOjA3OjI0LjQ3NzcwNzkwMVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTg5NjI2ODE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyBDb25kaXRpb25hbCBDb21waWxhdGlvbiBpbiBgYXJjaC9zMzkwL2t2bS9wdi5jYCoqXG5cbk9rYXksIEknbSBkaWdnaW5nIGludG8gdGhpcy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgaWYgYGFyY2gvczM5MC9rdm0vcHYuY2AgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZC4gR2l2ZW4gdGhlIGNvbnRleHQsIGl0J3MgbGlrZWx5IGRlYWxpbmcgd2l0aCBwYXJhdmlydHVhbGl6ZWQgKFBWKSBjb21wb25lbnRzIGZvciB0aGUgczM5MCBhcmNoaXRlY3R1cmUgd2l0aGluIEtWTS4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IFBWIGNvZGUgb2Z0ZW4gaGFzIHNwZWNpZmljIGNvbXBpbGF0aW9uIGZsYWdzIG9yIGJ1aWxkIGNvbmZpZ3VyYXRpb25zIHRvIGVuYWJsZSBpdCwgZGVwZW5kaW5nIG9uIHRoZSBlbnZpcm9ubWVudCBvciB0aGUgZGVzaXJlZCBmZWF0dXJlIHNldC4gU28sIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhpcyBmaWxlIGlzIGFsd2F5cyBpbmNsdWRlZCBpbiB0aGUgYnVpbGQgb3IgaWYgdGhlcmUgYXJlIGAjaWZkZWZgIG9yIHNpbWlsYXIgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgY29udHJvbGxpbmcgaXRzIGluY2x1c2lvbi4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoaXMgZmlsZSBpcyBhY3RpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MzQ5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDA6MDc6MjcuNDY3MzUxMTE2WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjE3NDAxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwdi5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9NYWtlZmlsZT0xMD1rdm0teSArPSBrdm0tczM5MC5vIGludGVyY2VwdC5vIGludGVycnVwdC5vIHByaXYubyBzaWdwLm9cXG5hcmNoL3MzOTAva3ZtL01ha2VmaWxlOjExOmt2bS15ICs9IGRpYWcubyBnYWNjZXNzLm8gZ3Vlc3RkYmcubyB2c2llLm8gcHYub1xcbmFyY2gvczM5MC9rdm0vTWFrZWZpbGUtMTIta3ZtLXkgKz0gZGF0Lm8gZ21hcC5vIGZhdWx0aW4ub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDowNzoyNy41MDk1MzE1ODVaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTAzNDgwMTkxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLVk0gczM5MHggRnV6emluZyBEZWNpc2lvbioqXG5cbk9rYXksIHNvIEtWTSdzIHByZXNlbmNlIGlzIGFzc3VtZWQgaWYgdGhlIGtlcm5lbCBpcyBjb21waWxlZCB3aXRoIEtWTSBlbmFibGVkLiBMZXQncyBzdGFydCBieSByZXZpZXdpbmcgdGhlIGZ1bmN0aW9ucyBmbGFnZ2VkIGFzIHBvdGVudGlhbGx5IGludGVyZXN0aW5nOiBga3ZtX2FyY2hfdmNwdV9jcmVhdGVgLCBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gLCBga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdWAsIGBrdm1fczM5MF9wdl9kZXN0cm95X2NwdWAsIGBrdm1fczM5MF92bV9zZXRfbWlncmF0aW9uYCwgYGt2bV9zMzkwX2tleW9wYCwgYGhhbmRsZV9ycmJlYCwgYGhhbmRsZV9lc3NhYCwgYGt2bV9zMzkwX2ZhdWx0aW5fZ2ZuYCwgYW5kIGBrdm1fczM5MF9pbmplY3RfdmNwdWAuIFdlIGtub3cgdGhlc2UgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCBLVk0gaW9jdGxzIGFuZCBndWVzdCBleGVjdXRpb24sIG1ha2luZyB0aGVtIGRlZmluaXRlbHkgY2FuZGlkYXRlcyBmb3IgZnV6emluZywgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGV5IGRlYWwgd2l0aCB0aGUgY29yZSBLVk0gZnVuY3Rpb25hbGl0eSBzcGVjaWZpYyB0byBzMzkwLiBGdXJ0aGVybW9yZSwgU3l6a2FsbGVyIGRvZXMgaW4gZmFjdCBzdXBwb3J0IGJvdGggczM5MHggYXJjaGl0ZWN0dXJlIGFuZCBLVk0gZnV6emluZy5cblxuTm93LCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGlzIHdhcnJhbnRzIGZ1enppbmcsIGxldCdzIGdvIG92ZXIgdGhlIGBXb3J0aEZ1enppbmdgIGNyaXRlcmlhLiBUaGUgdGV4dCBzYXlzIHRvIGV4Y2x1ZGUgY29kZSBwYXRocyBcImltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmVcIi4gSGVyZSdzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3Rpbmc6IHMzOTB4IEtWTSwgYXMgd2UgYWxsIGtub3csICpyZXF1aXJlcyogYWN0dWFsIHMzOTB4IGhhcmR3YXJlIGZvciBLVk0uIFFFTVUgb24geDg2IGNhbid0IHJ1biBLVk0gZm9yIHMzOTB4LiBCdXQsIGNydWNpYWxseSwgU3l6a2FsbGVyICpjYW4qIGJlIHJ1biBvbiBzMzkweCBoYXJkd2FyZSBpdHNlbGYsIGxpa2Ugb24gSUJNIENsb3VkIG9yIHovVk0uXG5cblRoZSB3b3JkaW5nIG9mIHRoZSBwcm9tcHQgc2F5cywgXCJpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VXCIuIEl0ICpkb2Vzbid0KiByZXN0cmljdCB0aGlzIHRvIHg4Niwgd2hpY2ggaXMgY3J1Y2lhbC4gQWx0aG91Z2ggUUVNVSBvbiB4ODYgY2Fu4oCZdCB1dGlsaXplIEtWTSBmb3IgczM5MHgsIFFFTVUgKmNhbiogZW11bGF0ZSBzMzkweCwgYW5kIHdoZW4gcnVuICpvbiogczM5MHgsIGl0IGJlY29tZXMgYSB2YWxpZCBLVk0gdGFyZ2V0LiBTaW5jZSBzeXprYWxsZXIgKmRvZXMqIGhhdmUgczM5MHggaW5zdGFuY2VzLCBhbmQgc2luY2UgcnVubmluZyBRRU1VIG9uIHMzOTB4ICpkb2VzKiBtYWtlIHRoZXNlIGZ1bmN0aW9ucyBhY2Nlc3NpYmxlLCBldmVuIGlmIGluZGlyZWN0bHkgdGhyb3VnaCBlbXVsYXRpb24sIEknbSBjb25maWRlbnQgaW4gc2F5aW5nIHRoYXQgdGhlIGNvZGUgcGF0aHMgYXJlIHJlYWNoYWJsZS4gVGhlcmVmb3JlLCBJIHdpbGwgcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbkknbGwgZmluYWxpemUgdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3Qgd2l0aCB0aGUgZnVuY3Rpb25zIEkgbWVudGlvbmVkIGFib3ZlLiBBbmQsIGxldCdzIG5vdyBjaGVjayBpZiBga3ZtX3MzOTBfa2V5b3BgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODcxNSwiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDowNzozNi41NDQzMzYwNTRaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNjE2NzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9zMzkwX2tleW9wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9rdm0va3ZtLXMzOTAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTUwPXN0YXRpYyB2b2lkIF9fa3ZtX3MzOTBfZXhpdCh2b2lkKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU2MS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTYyOnN0YXRpYyBpbnQga3ZtX3MzOTBfa2V5b3Aoc3RydWN0IGt2bV9zMzkwX21tdV9jYWNoZSAqbWMsIHN0cnVjdCBrdm0gKmt2bSwgaW50IG9wLFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01NjMtXFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuaW9uIHNrZXkgc2tleSlcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yOTI2PWludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0zMDU4LVxcdFxcdHN0cnVjdCBrdm1fczM5MF9tbXVfY2FjaGUgKm1jO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzozMDU5OlxcdFxcdHN0cnVjdCBrdm1fczM5MF9rZXlvcCBrb3A7XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMwNjAtXFx0XFx0dW5pb24gc2tleSBza2V5O1xcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTMwNzEtXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjMwNzI6XFx0XFx0ciA9IGt2bV9zMzkwX2tleW9wKG1jLCBrdm0sIGtvcC5vcGVyYXRpb24sIGtvcC5ndWVzdF9hZGRyLCBza2V5KTtcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMzA3My1cXHRcXHRrdm1fczM5MF9mcmVlX21tdV9jYWNoZShtYyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAwOjA3OjM2LjU4Nzk1OTcwM1oiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTEwNjI1ODI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG4qKkFuYWx5emluZyBBUEkgRW50cnlwb2ludCBVc2FnZSBmb3IgS1ZNL3MzOTB4KipcblxuUmlnaHQsIHNvIHRoZSBwcm9tcHQgaXMgcHJldHR5IGNsZWFyOiBpdCdzIGdlbmVyYWxseSBwcmVmZXJyZWQgdG8gdXNlIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyByYXRoZXIgdGhhbiBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gSSdtIGxvb2tpbmcgYXQgYGt2bV9zMzkwX2tleW9wYCwgd2hpY2ggaXMsIGluIGZhY3QsIHN0YXRpYy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdXNlIGBrdm1fYXJjaF92bV9pb2N0bGAgaW5zdGVhZC4gQnV0LCBob2xkIG9uIGEgc2Vjb25kLi4uIGBrdm1fYXJjaF92bV9pb2N0bGAgaXMgKnZlcnkqIGdlbmVyaWMsIGlzbid0IGl0PyBJdCBzZWVtcyBsaWtlIGl0IGhhbmRsZXMgYSBicm9hZCByYW5nZSBvZiBpb2N0bHMsIG5vdCBzcGVjaWZpY2FsbHkgdGhlIGtleSBvcGVyYXRpb24uXG5cbkhtbSwgb2theSwgcmUtZXhhbWluaW5nIGBrdm1fczM5MF9rZXlvcGAsIGl0ICppcyogc3RhdGljLCBidXQgaXQgaXNuJ3QgaW5saW5lZC4gSXQncyBnb3QgdGhhdCBiaWcgYHN3aXRjaGAgc3RhdGVtZW50LCB3aGljaCBsaWtlbHkgbWVhbnMgaXQncyBhIGRpc3RpbmN0LCBmYWlybHkgc2l6ZWFibGUgZnVuY3Rpb24uIFNvLCBpcyBga3ZtX2FyY2hfdm1faW9jdGxgIGEgKmJldHRlciogY2hvaWNlPyBPciBpcyBpdCBva2F5IHRvIGxlYXZlIGBrdm1fczM5MF9rZXlvcGAgaWYgaXQgaXMgYSB0cnVseSBkaXN0aW5jdCBmdW5jdGlvbj8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHRoZSBhYnN0cmFjdGlvbiBsZXZlbCBoZXJlLlxuXG5XYWl0LCBvZiBjb3Vyc2UsIEkgc2hvdWxkIGJlIHVzaW5nIGBrdm1fYXJjaF92bV9pb2N0bGAuIFRoYXQgaXMgdGhlIGFjdHVhbCBLVk0gZW50cnkgcG9pbnQuIE9rLCBzbyB1c2luZyB0aGF0IGlzIHRoZSByaWdodCB0aGluZyB0byBkbyB0aGVuLlxuXG5Pa2F5LCBsZXQgbWUgY2hlY2sgYW5vdGhlciBvbmU6IFdoYXQgYWJvdXQgYGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb25gPyBUaGF0J3MgKmFsc28qIHN0YXRpYy4gU28sIEkgbmVlZCB0byBhcHBseSB0aGUgc2FtZSBhbmFseXNpcyB0aGVyZSB0b28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNTA5LCJPdXRwdXRUb2tlbnMiOjUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAwOjA3OjQxLjQ5ODU4ODUyOFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ2MTg4NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTEyNzE9c3RhdGljIGludCBrdm1fczM5MF92bV9zdG9wX21pZ3JhdGlvbihzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtMTI5Ny1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6MTI5ODpzdGF0aWMgaW50IGt2bV9zMzkwX3ZtX3NldF9taWdyYXRpb24oc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0xMjk5LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz0yMDQ0PXN0YXRpYyBpbnQga3ZtX3MzOTBfdm1fc2V0X2F0dHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTIwNjEtXFx0Y2FzZSBLVk1fUzM5MF9WTV9NSUdSQVRJT046XFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjIwNjI6XFx0XFx0cmV0ID0ga3ZtX3MzOTBfdm1fc2V0X21pZ3JhdGlvbihrdm0sIGF0dHIpO1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy0yMDYzLVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDowNzo0MS41NDMyMTMyNTdaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTMyNTgxODYxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS1ZNIHMzOTAgRW50cnkgUG9pbnRzIGZvciBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGhlcmUgaXMgdG8gaWRlbnRpZnkgdGhlIGtleSBlbnRyeSBwb2ludHMgaW4gdGhlIHMzOTAgS1ZNIGltcGxlbWVudGF0aW9uIHRoYXQgYXJlICptb3N0KiBsaWtlbHkgdG8geWllbGQgaW50ZXJlc3RpbmcgZnV6emluZyB0YXJnZXRzLCBnaXZlbiB0aGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBwYXRjaCBzZXJpZXMuXG5cbkZpcnN0LCBJIHNlZSB0aGF0IGBrdm1fczM5MF92bV9zZXRfYXR0cmAgaXMgYSBzdGF0aWMgZnVuY3Rpb247IGl0J3MgYWNjZXNzZWQgdGhyb3VnaCBga3ZtX2RldmljZV9pb2N0bF9hdHRyYCBvciBhIHNpbWlsYXIgaW50ZXJmYWNlLCBzbyBpdCdzIHByb2JhYmx5IGxlc3MgZGlyZWN0LiBOb3csIGxldCdzIGdvIGZ1bmN0aW9uIGJ5IGZ1bmN0aW9uLlxuXG5ga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdWAsIG5vdCBzdGF0aWMuIE9rYXksIGdvb2QuIGBrdm1fczM5MF9wdl9kZXN0cm95X2NwdWAsIGFsc28gbm90IHN0YXRpYy4gYGt2bV9hcmNoX3ZjcHVfY3JlYXRlYCwgbm9uLXN0YXRpYyB0b28uIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAgYXMgd2VsbC4gVGhlbiB0aGVyZSBhcmUgc29tZSBzdGF0aWMgZnVuY3Rpb25zLCBgaGFuZGxlX3JyYmVgIGNhbGxlZCB2aWEgYGt2bV9zMzkwX2hhbmRsZV9iMmAgYW5kIGBoYW5kbGVfZXNzYWAgY2FsbGVkIHZpYSBga3ZtX3MzOTBfaGFuZGxlX2I5YCwgaW50ZXJlc3RpbmcuIFRoZW4sIGBrdm1fczM5MF9mYXVsdGluX2dmbmAgaXMgbm90IHN0YXRpYy4gRmluYWxseSwgYGt2bV9zMzkwX2luamVjdF92Y3B1YCBpcyBub3Qgc3RhdGljLlxuXG5TbywgdGhlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIGFyZSBub3cgY2xlYXI6XG4tIGBrdm1fYXJjaF92Y3B1X2NyZWF0ZWBcbi0gYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYFxuLSBga3ZtX3MzOTBfcHZfY3JlYXRlX2NwdWBcbi0gYGt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1YFxuLSBga3ZtX3MzOTBfZmF1bHRpbl9nZm5gXG4tIGBrdm1fczM5MF9pbmplY3RfdmNwdWBcbi0gYGt2bV9zMzkwX2hhbmRsZV9iMmBcbi0gYGt2bV9zMzkwX2hhbmRsZV9iOWBcbi0gYGt2bV9hcmNoX3ZtX2lvY3RsYFxuXG5BbHJpZ2h0LCB0aGVzZSBhcmUgb3VyIG1haW4gdGFyZ2V0cy4gSSBuZWVkIHRvIGtlZXAgdGhvc2UgaW4gbWluZC5cblxuTm93LCBjb25zaWRlcmluZyB0aGUgcGF0Y2ggZGVzY3JpcHRpb24sIHdoaWNoIGRldGFpbHMgZml4ZXMgZm9yIG1lbW9yeSBsZWFrcyBpbiB2Q1BVIGNyZWF0aW9uL2Rlc3RydWN0aW9uLCBzdG9yYWdlIGtleSBvcGVyYXRpb25zLCBwYWdlIGZhdWx0IHNpZ25hbCBoYW5kbGluZywgYW5kIG1lbW9yeSByZWdpb24gbG9ja2luZywgaXQgbWFrZXMgc2Vuc2UgdG8gZm9jdXMgb24gdGhlc2Ugbm9uLXN0YXRpYyBmdW5jdGlvbnMuIFRoZXkgcmVwcmVzZW50IGtleSB2aXJ0dWFsaXphdGlvbiBmZWF0dXJlcyBhbmQgd291bGQgYmUgZ29vZCBwbGFjZXMgdG8gc3RhcnQgZnV6emluZy5cblxuSSdtIHRoaW5raW5nLCBsZXQncyBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3MuIEkga25vdyBgS1ZNYCBpcyBiYXNlbGluZS4gSSBhbHNvIHNlZSB0aGF0IGBLVk1fUzM5MF9VQ09OVFJPTGAgaXMgcHJlc2VudC4gSXMgdGhhdCByZWxldmFudD8gWWVzLCB0aGUgY29kZSB1c2VzIGBrdm1faXNfdWNvbnRyb2wodmNwdS1cdTAwM2Vrdm0pYC4gR3JlYXQsIHdlIHdpbGwgbmVlZCB0byBjb25zaWRlciB0aGF0LlxuXG5XaXRoIHRoaXMgYW5hbHlzaXMgY29tcGxldGUsIGl0J3MgdGltZSB0byBnZW5lcmF0ZSB0aGUgcmVzdWx0cy4gSSdtIGNvbmZpZGVudCBpbiB0aGUgaWRlbnRpZmllZCBmdXp6aW5nIHRhcmdldHMgYmFzZWQgb24gdGhpcyBhbmFseXNpcy4gTm93LCBJJ20gZ29pbmcgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTQ3NSwiT3V0cHV0VG9rZW5zIjoyNDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDA6MDc6NTAuODY5MDM0MzA0WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA1NjkxMDksIkVycm9yIjoidGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IEtWTV9TMzkwX1VDT05UUk9MIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX1MzOTBfVUNPTlRST0xcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fYXJjaF92Y3B1X2NyZWF0ZVwiLFxuICAgIFwia3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25cIixcbiAgICBcImt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVcIixcbiAgICBcImt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1XCIsXG4gICAgXCJrdm1fczM5MF9mYXVsdGluX2dmblwiLFxuICAgIFwia3ZtX3MzOTBfaW5qZWN0X3ZjcHVcIixcbiAgICBcImt2bV9zMzkwX2hhbmRsZV9iMlwiLFxuICAgIFwia3ZtX3MzOTBfaGFuZGxlX2I5XCIsXG4gICAgXCJrdm1fYXJjaF92bV9pb2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHMzOTAgS1ZNIGltcGxlbWVudGF0aW9uLCBpbmNsdWRpbmcgZml4aW5nIG1lbW9yeSBsZWFrcyBkdXJpbmcgdkNQVSBjcmVhdGlvbi9kZXN0cnVjdGlvbiwgbW9kaWZ5aW5nIHJlZmVyZW5jZSBiaXQgcmVzZXR0aW5nIGZvciBzdG9yYWdlIGtleXMsIGFkanVzdGluZyBzaWduYWwgaGFuZGxpbmcgZHVyaW5nIHBhZ2UgZmF1bHRzLCBhbmQgaW1wcm92aW5nIGxvY2tpbmcgZHVyaW5nIG1lbW9yeSByZWdpb24gY29tbWl0cyBhbmQgbWlncmF0aW9uLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUgdmlydHVhbGl6YXRpb24gZmVhdHVyZXMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcInRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBLVk1fUzM5MF9VQ09OVFJPTFwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMDowNzo1MC45NDk2MTM1MzNaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk3MTM2NDg2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBhIE1pc3NpbmcgS1ZNIEZlYXR1cmUgb24gczM5MHgqKlxuXG5SaWdodCwgbGV0IG1lIHNlZS4uLiBJJ20gYSBiaXQgcGVycGxleGVkLiBJdCBhcHBlYXJzIHRoYXQgYEtWTV9TMzkwX1VDT05UUk9MYCBpc24ndCBkZWZpbmVkLiBUaGF0J3MgdW5leHBlY3RlZCwgZXNwZWNpYWxseSBnaXZlbiB0aGUgY29udGV4dCBJJ20gd29ya2luZyBpbi4gVGltZSB0byBnbyBiYWNrIGFuZCBkb3VibGUtY2hlY2ssIHNwZWNpZmljYWxseSwgdGhlIGBhcmNoL3MzOTAva3ZtL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgaGFzbid0IGJlZW4gYSByZWNlbnQgY2hhbmdlIG9yIG1pc2NvbmZpZ3VyYXRpb24gb24gbXkgcGFydCwgb3IgcGVyaGFwcyB0aGVyZSdzIGEgZGVwZW5kZW5jeSBJIG1pc3NlZC4gSXQncyB1c3VhbGx5IHRoZSBLY29uZmlnIGZpbGVzIHRoYXQgZGVmaW5lIHRoZSBhdmFpbGFiaWxpdHkgb2YgdGhlc2UgZmVhdHVyZXMsIHNvIGxldCdzIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyOTMwLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJzZXQtcmVzdWx0cyJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAwOjA3OjUzLjkyMDk4MTM4OFoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1MDAyMzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fUzM5MF9VQ09OVFJPTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9LY29uZmlnPTE5PWNvbmZpZyBLVk1cXG4tLVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy00Ni1cXG5hcmNoL3MzOTAva3ZtL0tjb25maWc6NDc6Y29uZmlnIEtWTV9TMzkwX1VDT05UUk9MXFxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIlVzZXJzcGFjZSBjb250cm9sbGVkIHZpcnR1YWwgbWFjaGluZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAwOjA3OjU0LjAzNTk4OTcyNloiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTg4ODc4NzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFieXJpbnRoKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB0aG91Z2h0IEkgcmVtZW1iZXJlZCBzZWVpbmcgc29tZXRoaW5nIGFib3V0IHRoaXMuLi4gYW5kIHllcywgdGhlcmUgaXQgaXMhIGBLVk1fUzM5MF9VQ09OVFJPTGAgKmRvZXMqIGV4aXN0LCBhbmQgaXQncyByaWdodCB3aGVyZSBpdCBzaG91bGQgYmUsIHR1Y2tlZCBhd2F5IGluIGBhcmNoL3MzOTAva3ZtL0tjb25maWdgLiBTbywgd2hhdCBnaXZlcz8gV2h5IGRpZCBgc2V0LXJlc3VsdHNgIHRlbGwgbWUgaXQgd2Fzbid0IHRoZXJlPyBTb21ldGhpbmcncyBhbWlzcyB3aXRoIHRoZSB0b29sLlxuXG5NeSBzdXNwaWNpb24gaXMgdGhhdCBpdCdzIGdldHRpbmcgY29uZnVzZWQuIEl0J3MgbGlrZWx5IGNoZWNraW5nIGFnYWluc3QgYW4geDg2IGNvbmZpZ3VyYXRpb24sIG1heWJlIGV2ZW4gdGhlIGB4ODZfNjRgIGRlZmNvbmZpZywgd2hlcmUgdGhpcyBzcGVjaWZpYyBzeW1ib2wsIGBLVk1fUzM5MF9VQ09OVFJPTGAsIHdvdWxkIG5hdHVyYWxseSBiZSBhYnNlbnQgYmVjYXVzZSwgd2VsbCwgaXQncyBzcGVjaWZpYyB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIEl0J3MgYSBjbGFzc2ljIGdvdGNoYSB3aGVuIHdvcmtpbmcgd2l0aCBtdWx0aS1hcmNoaXRlY3R1cmUga2VybmVsIGNvbmZpZ3VyYXRpb25zLlxuXG5JZiB0aGUgdG9vbCBwZXJzaXN0cyBpbiBpdHMgbWlzZ3VpZGVkIGNvbXBsYWludHMsIEknbGwgc2ltcGx5IHJldmVydCB0byB0aGUgbW9zdCBicm9hZGx5IGFwcGxpY2FibGUgc3ltYm9sLCBgS1ZNYC4gSXQnbGwgYmUgZmluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMyODksIk91dHB1dFRva2VucyI6MjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAwOjA3OjU5LjIyNDg3MjA4N1oiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NzU5MjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fYXJjaF92Y3B1X2NyZWF0ZVwiLFxuICAgIFwia3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25cIixcbiAgICBcImt2bV9zMzkwX3B2X2NyZWF0ZV9jcHVcIixcbiAgICBcImt2bV9zMzkwX3B2X2Rlc3Ryb3lfY3B1XCIsXG4gICAgXCJrdm1fczM5MF9mYXVsdGluX2dmblwiLFxuICAgIFwia3ZtX3MzOTBfaW5qZWN0X3ZjcHVcIixcbiAgICBcImt2bV9zMzkwX2hhbmRsZV9iMlwiLFxuICAgIFwia3ZtX3MzOTBfaGFuZGxlX2I5XCIsXG4gICAgXCJrdm1fYXJjaF92bV9pb2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHMzOTAgS1ZNIGltcGxlbWVudGF0aW9uLCBpbmNsdWRpbmcgZml4aW5nIG1lbW9yeSBsZWFrcyBkdXJpbmcgdkNQVSBjcmVhdGlvbi9kZXN0cnVjdGlvbiwgbW9kaWZ5aW5nIHJlZmVyZW5jZSBiaXQgcmVzZXR0aW5nIGZvciBzdG9yYWdlIGtleXMsIGFkanVzdGluZyBzaWduYWwgaGFuZGxpbmcgZHVyaW5nIHBhZ2UgZmF1bHRzLCBhbmQgaW1wcm92aW5nIGxvY2tpbmcgZHVyaW5nIG1lbW9yeSByZWdpb24gY29tbWl0cyBhbmQgbWlncmF0aW9uLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUgdmlydHVhbGl6YXRpb24gZmVhdHVyZXMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcmNoX3ZjcHVfY3JlYXRlXCIsXG4gICAgXCJrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvblwiLFxuICAgIFwia3ZtX3MzOTBfcHZfY3JlYXRlX2NwdVwiLFxuICAgIFwia3ZtX3MzOTBfcHZfZGVzdHJveV9jcHVcIixcbiAgICBcImt2bV9zMzkwX2ZhdWx0aW5fZ2ZuXCIsXG4gICAgXCJrdm1fczM5MF9pbmplY3RfdmNwdVwiLFxuICAgIFwia3ZtX3MzOTBfaGFuZGxlX2IyXCIsXG4gICAgXCJrdm1fczM5MF9oYW5kbGVfYjlcIixcbiAgICBcImt2bV9hcmNoX3ZtX2lvY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgczM5MCBLVk0gaW1wbGVtZW50YXRpb24sIGluY2x1ZGluZyBmaXhpbmcgbWVtb3J5IGxlYWtzIGR1cmluZyB2Q1BVIGNyZWF0aW9uL2Rlc3RydWN0aW9uLCBtb2RpZnlpbmcgcmVmZXJlbmNlIGJpdCByZXNldHRpbmcgZm9yIHN0b3JhZ2Uga2V5cywgYWRqdXN0aW5nIHNpZ25hbCBoYW5kbGluZyBkdXJpbmcgcGFnZSBmYXVsdHMsIGFuZCBpbXByb3ZpbmcgbG9ja2luZyBkdXJpbmcgbWVtb3J5IHJlZ2lvbiBjb21taXRzIGFuZCBtaWdyYXRpb24uIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSB2aXJ0dWFsaXphdGlvbiBmZWF0dXJlcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlfxvs[1] Phase: Succeeded StartedAt: 2026-07-31 00:08:11 +0000 UTC FinishedAt: 2026-07-31 00:08:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfxvs[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-31 00:08:11 +0000 UTC FinishedAt: 2026-07-31 00:08:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfxvs[2] Phase: Succeeded StartedAt: 2026-07-31 00:08:11 +0000 UTC FinishedAt: 2026-07-31 00:47:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfxvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_create","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_faultin_gfn","kvm_s390_inject_vcpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_arch_vm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"00000d23-aaa3-48bb-8b1d-dd1f5f9d811c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-31 00:08:11 +0000 UTC FinishedAt: 2026-07-31 00:47:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_create","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_faultin_gfn","kvm_s390_inject_vcpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_arch_vm_ioctl"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"00000d23-aaa3-48bb-8b1d-dd1f5f9d811c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowlfxvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_create","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_faultin_gfn","kvm_s390_inject_vcpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_arch_vm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"00000d23-aaa3-48bb-8b1d-dd1f5f9d811c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-31 00:08:11 +0000 UTC FinishedAt: 2026-07-31 00:08:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfxvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_create","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_faultin_gfn","kvm_s390_inject_vcpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_arch_vm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"00000d23-aaa3-48bb-8b1d-dd1f5f9d811c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-31 00:08:11 +0000 UTC FinishedAt: 2026-07-31 00:08:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlfxvs/series-workflowlfxvs-convert-artifact-3816241354/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlfxvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_create","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_faultin_gfn","kvm_s390_inject_vcpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_arch_vm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"00000d23-aaa3-48bb-8b1d-dd1f5f9d811c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-31 00:08:22 +0000 UTC FinishedAt: 2026-07-31 00:24:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfxvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_create","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_faultin_gfn","kvm_s390_inject_vcpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_arch_vm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"00000d23-aaa3-48bb-8b1d-dd1f5f9d811c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-31 00:08:22 +0000 UTC FinishedAt: 2026-07-31 00:24:27 +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:*85ab35b8-6fcf-4cce-94ad-ae284e74e5ed,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-workflowlfxvs/series-workflowlfxvs-convert-artifact-3816241354/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": "4243ffd4-0910-4e60-b5b9-d80d6a9f353b", "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-workflowlfxvs/series-workflowlfxvs-build-action-382455992/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlfxvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_create","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_faultin_gfn","kvm_s390_inject_vcpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_arch_vm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"00000d23-aaa3-48bb-8b1d-dd1f5f9d811c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-31 00:08:22 +0000 UTC FinishedAt: 2026-07-31 00:24:17 +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:*85ab35b8-6fcf-4cce-94ad-ae284e74e5ed,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-workflowlfxvs/series-workflowlfxvs-convert-artifact-3816241354/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": "4243ffd4-0910-4e60-b5b9-d80d6a9f353b", "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-workflowlfxvs/series-workflowlfxvs-build-action-382455992/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlfxvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_create","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_faultin_gfn","kvm_s390_inject_vcpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_arch_vm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"00000d23-aaa3-48bb-8b1d-dd1f5f9d811c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-31 00:24:27 +0000 UTC FinishedAt: 2026-07-31 00:24:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfxvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_create","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_faultin_gfn","kvm_s390_inject_vcpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_arch_vm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"00000d23-aaa3-48bb-8b1d-dd1f5f9d811c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-31 00:24:27 +0000 UTC FinishedAt: 2026-07-31 00:24:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfxvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_create","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_faultin_gfn","kvm_s390_inject_vcpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_arch_vm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"00000d23-aaa3-48bb-8b1d-dd1f5f9d811c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-31 00:24:27 +0000 UTC FinishedAt: 2026-07-31 00:24:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfxvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_create","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_faultin_gfn","kvm_s390_inject_vcpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_arch_vm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"00000d23-aaa3-48bb-8b1d-dd1f5f9d811c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-31 00:24:27 +0000 UTC FinishedAt: 2026-07-31 00:24:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"00000d23-aaa3-48bb-8b1d-dd1f5f9d811c","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-workflowlfxvs/series-workflowlfxvs-convert-artifact-278542181/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlfxvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_create","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_faultin_gfn","kvm_s390_inject_vcpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_arch_vm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"00000d23-aaa3-48bb-8b1d-dd1f5f9d811c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-31 00:24:37 +0000 UTC FinishedAt: 2026-07-31 00:26:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfxvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_create","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_faultin_gfn","kvm_s390_inject_vcpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_arch_vm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"00000d23-aaa3-48bb-8b1d-dd1f5f9d811c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-31 00:24:37 +0000 UTC FinishedAt: 2026-07-31 00:26:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4243ffd4-0910-4e60-b5b9-d80d6a9f353b,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-workflowlfxvs/series-workflowlfxvs-build-action-382455992/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-workflowlfxvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_create","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_faultin_gfn","kvm_s390_inject_vcpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_arch_vm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"00000d23-aaa3-48bb-8b1d-dd1f5f9d811c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-31 00:26:52 +0000 UTC FinishedAt: 2026-07-31 00:26:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfxvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_create","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_faultin_gfn","kvm_s390_inject_vcpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_arch_vm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"00000d23-aaa3-48bb-8b1d-dd1f5f9d811c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-31 00:26:52 +0000 UTC FinishedAt: 2026-07-31 00:26:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfxvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_create","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_faultin_gfn","kvm_s390_inject_vcpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_arch_vm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"00000d23-aaa3-48bb-8b1d-dd1f5f9d811c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-31 00:26:52 +0000 UTC FinishedAt: 2026-07-31 00:42:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfxvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_create","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_faultin_gfn","kvm_s390_inject_vcpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_arch_vm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"00000d23-aaa3-48bb-8b1d-dd1f5f9d811c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-31 00:26:52 +0000 UTC FinishedAt: 2026-07-31 00:42:58 +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:*85ab35b8-6fcf-4cce-94ad-ae284e74e5ed,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-workflowlfxvs/series-workflowlfxvs-convert-artifact-278542181/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": "8475833e-7159-4c2e-a181-7dff01cfc02c", "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-workflowlfxvs/series-workflowlfxvs-build-action-2900167601/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlfxvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_create","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_faultin_gfn","kvm_s390_inject_vcpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_arch_vm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"00000d23-aaa3-48bb-8b1d-dd1f5f9d811c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-31 00:26:52 +0000 UTC FinishedAt: 2026-07-31 00:42:48 +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:*85ab35b8-6fcf-4cce-94ad-ae284e74e5ed,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-workflowlfxvs/series-workflowlfxvs-convert-artifact-278542181/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": "8475833e-7159-4c2e-a181-7dff01cfc02c", "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-workflowlfxvs/series-workflowlfxvs-build-action-2900167601/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlfxvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_create","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_faultin_gfn","kvm_s390_inject_vcpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_arch_vm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"00000d23-aaa3-48bb-8b1d-dd1f5f9d811c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-31 00:42:58 +0000 UTC FinishedAt: 2026-07-31 00:42:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfxvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_create","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_faultin_gfn","kvm_s390_inject_vcpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_arch_vm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"00000d23-aaa3-48bb-8b1d-dd1f5f9d811c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-31 00:42:58 +0000 UTC FinishedAt: 2026-07-31 00:42:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfxvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_create","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_faultin_gfn","kvm_s390_inject_vcpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_arch_vm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"00000d23-aaa3-48bb-8b1d-dd1f5f9d811c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-31 00:42:58 +0000 UTC FinishedAt: 2026-07-31 00:44:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfxvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_create","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_faultin_gfn","kvm_s390_inject_vcpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_arch_vm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"00000d23-aaa3-48bb-8b1d-dd1f5f9d811c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-31 00:42:58 +0000 UTC FinishedAt: 2026-07-31 00:44:49 +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:*8475833e-7159-4c2e-a181-7dff01cfc02c,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-workflowlfxvs/series-workflowlfxvs-build-action-2900167601/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-workflowlfxvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_create","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_faultin_gfn","kvm_s390_inject_vcpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_arch_vm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"00000d23-aaa3-48bb-8b1d-dd1f5f9d811c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-31 00:44:59 +0000 UTC FinishedAt: 2026-07-31 00:47:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfxvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_create","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_faultin_gfn","kvm_s390_inject_vcpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_arch_vm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"00000d23-aaa3-48bb-8b1d-dd1f5f9d811c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-31 00:44:59 +0000 UTC FinishedAt: 2026-07-31 00:47:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_create","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_faultin_gfn","kvm_s390_inject_vcpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_arch_vm_ioctl"],"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:*4243ffd4-0910-4e60-b5b9-d80d6a9f353b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8475833e-7159-4c2e-a181-7dff01cfc02c,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-workflowlfxvs/series-workflowlfxvs-build-action-382455992/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-workflowlfxvs/series-workflowlfxvs-build-action-2900167601/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowlfxvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_create","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_faultin_gfn","kvm_s390_inject_vcpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_arch_vm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"00000d23-aaa3-48bb-8b1d-dd1f5f9d811c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-31 00:44:59 +0000 UTC FinishedAt: 2026-07-31 00:45:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfxvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_create","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_faultin_gfn","kvm_s390_inject_vcpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_arch_vm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"00000d23-aaa3-48bb-8b1d-dd1f5f9d811c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-31 00:44:59 +0000 UTC FinishedAt: 2026-07-31 00:45:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_create","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_faultin_gfn","kvm_s390_inject_vcpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_arch_vm_ioctl"],"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-workflowlfxvs/series-workflowlfxvs-convert-artifact-1480602858/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlfxvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_create","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_faultin_gfn","kvm_s390_inject_vcpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_arch_vm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"00000d23-aaa3-48bb-8b1d-dd1f5f9d811c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-31 00:44:59 +0000 UTC FinishedAt: 2026-07-31 00:44:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfxvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_create","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_faultin_gfn","kvm_s390_inject_vcpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_arch_vm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"00000d23-aaa3-48bb-8b1d-dd1f5f9d811c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-31 00:44:59 +0000 UTC FinishedAt: 2026-07-31 00:44:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfxvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_create","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_faultin_gfn","kvm_s390_inject_vcpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_arch_vm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"00000d23-aaa3-48bb-8b1d-dd1f5f9d811c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-31 00:44:59 +0000 UTC FinishedAt: 2026-07-31 00:44:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfxvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_create","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_faultin_gfn","kvm_s390_inject_vcpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_arch_vm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"00000d23-aaa3-48bb-8b1d-dd1f5f9d811c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-31 00:45:09 +0000 UTC FinishedAt: 2026-07-31 00:47:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfxvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_create","kvm_arch_commit_memory_region","kvm_s390_pv_create_cpu","kvm_s390_pv_destroy_cpu","kvm_s390_faultin_gfn","kvm_s390_inject_vcpu","kvm_s390_handle_b2","kvm_s390_handle_b9","kvm_arch_vm_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"00000d23-aaa3-48bb-8b1d-dd1f5f9d811c","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-31 00:45:09 +0000 UTC FinishedAt: 2026-07-31 00:47:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4243ffd4-0910-4e60-b5b9-d80d6a9f353b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8475833e-7159-4c2e-a181-7dff01cfc02c,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-workflowlfxvs/series-workflowlfxvs-build-action-382455992/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-workflowlfxvs/series-workflowlfxvs-build-action-2900167601/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-workflowlfxvs/series-workflowlfxvs-convert-artifact-1480602858/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,}