Name: series-workflow28dd2 Phase: Succeeded StartedAt: 2026-08-26 09:18:10 +0000 UTC FinishedAt: 2026-08-26 13:02:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28dd2[0] Phase: Succeeded StartedAt: 2026-08-26 09:18:10 +0000 UTC FinishedAt: 2026-08-26 09:22:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28dd2[0].run-triage Phase: Succeeded StartedAt: 2026-08-26 09:18:10 +0000 UTC FinishedAt: 2026-08-26 09:22:15 +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": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_AMD_SEV", "KVM_SW_PROTECTED_VM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_AMD_SEV", "KVM_SW_PROTECTED_VM" ], "series_id": "eaded774-8d60-493b-b78e-9d419d3c1540" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_gmem_get_pfn", "sev_handle_rmp_fault", "sev_snp_reload_vmsa", "kvm_handle_vncr_abort" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EX1NFViYjMzQ7LAogICAgJiMzNDtLVk1fU1dfUFJPVEVDVEVEX1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2dtZW1fZ2V0X3BmbiYjMzQ7LAogICAgJiMzNDtzZXZfaGFuZGxlX3JtcF9mYXVsdCYjMzQ7LAogICAgJiMzNDtzZXZfc25wX3JlbG9hZF92bXNhJiMzNDssCiAgICAmIzM0O2t2bV9oYW5kbGVfdm5jcl9hYm9ydCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBga3ZtX2dtZW1fZ2V0X3BmbigpYCB0byByZW1vdmUgdGhlIGBzdHJ1Y3QgcGFnZSAqKnBhZ2VgIGFyZ3VtZW50IGFuZCBkcm9wcyB0aGUgYXNzb2NpYXRlZCBwYWdlIHJlZmVyZW5jZSBjb3VudGluZyAoYGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZWAsIGBrdm1fcmVsZWFzZV9wYWdlX2NsZWFuYCwgZXRjLikgYWNyb3NzIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMgKGFybTY0LCB4ODYpLiBUaGlzIGlzIGEgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHJlZmNvdW50aW5nIGNoYW5nZS4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBhbmQgbm8gaW5mby1sZWFrcy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSB3b3VsZCBsaWtlbHkgYmUgdXNlLWFmdGVyLWZyZWUsIG1lbW9yeSBsZWFrcywgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIHNpZ25hdHVyZSBhbmQgYmVoYXZpb3Igb2YgYGt2bV9nbWVtX2dldF9wZm5gIGJ5IHJlbW92aW5nIHRoZSBgc3RydWN0IHBhZ2UgKipwYWdlYCBhcmd1bWVudCBhbmQgZHJvcHBpbmcgdGhlIGZvbGlvIHJlZmVyZW5jZSBiZWZvcmUgcmV0dXJuaW5nLiBUaGlzIGFmZmVjdHMgaG93IEtWTSBoYW5kbGVzIG1lbW9yeSBiYWNraW5nIGZvciBndWVzdF9tZW1mZCwgd2hpY2ggaXMgYSBjb3JlIGZlYXR1cmUgZm9yIGNvbmZpZGVudGlhbCBjb21wdXRpbmcgKFNFVi1TTlAsIFREWCwgQVJNIENDQSkuIFRoZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIHBhZ2UgZmF1bHRzIHdoZW4gdXNpbmcgZ3Vlc3RfbWVtZmQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6MTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwMGZjZWFlNDEwYzA1NDEwNWVlNmU5NmEzN2I0MTY2MWUzZTJhMWJmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMDk6MTk6NDIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vbW11LmMgYi9hcmNoL2FybTY0L2t2bS9tbXUuY1xuaW5kZXggOWJhODY0NTBmZTRhZi4uZDU3ZjgxODFmMWI3ZCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL21tdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9tbXUuY1xuQEAgLTE2MTMsNyAmIzQzOzE2MTMsNiBAQCBzdGF0aWMgaW50IGdtZW1fYWJvcnQoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKVxuIFx0ZW51bSBrdm1fcGd0YWJsZV9wcm90IHByb3QgPSBLVk1fUEdUQUJMRV9QUk9UX1I7XG4gXHRzdHJ1Y3Qga3ZtX3BndGFibGUgKnBndCA9IHMyZmQtXHUwMDNldmNwdS1cdTAwM2VhcmNoLmh3X21tdS1cdTAwM2VwZ3Q7XG4gXHR1bnNpZ25lZCBsb25nIG1tdV9zZXE7XG4tXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcdHN0cnVjdCBrdm0gKmt2bSA9IHMyZmQtXHUwMDNldmNwdS1cdTAwM2Vrdm07XG4gXHR2b2lkICptZW1jYWNoZSA9IE5VTEw7XG4gXHRrdm1fcGZuX3QgcGZuO1xuQEAgLTE2NDEsNyAmIzQzOzE2NDAsNyBAQCBzdGF0aWMgaW50IGdtZW1fYWJvcnQoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKVxuIFx0LyogUGFpcnMgd2l0aCB0aGUgc21wX3dtYigpIGluIGt2bV9tbXVfaW52YWxpZGF0ZV9lbmQoKS4gKi9cbiBcdHNtcF9ybWIoKTtcbiBcbi1cdHJldCA9IGt2bV9nbWVtX2dldF9wZm4oa3ZtLCBzMmZkLVx1MDAzZW1lbXNsb3QsIGdmbiwgXHUwMDI2cGZuLCBcdTAwMjZwYWdlLCBOVUxMKTtcbiYjNDM7XHRyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKGt2bSwgczJmZC1cdTAwM2VtZW1zbG90LCBnZm4sIFx1MDAyNnBmbiwgTlVMTCk7XG4gXHRpZiAocmV0KSB7XG4gXHRcdGt2bV9wcmVwYXJlX21lbW9yeV9mYXVsdF9leGl0KHMyZmQtXHUwMDNldmNwdSwgczJmZC1cdTAwM2VmYXVsdF9pcGEsIFBBR0VfU0laRSxcbiBcdFx0XHRcdFx0ICAgICAgd3JpdGVfZmF1bHQsIGV4ZWNfZmF1bHQsIGZhbHNlKTtcbkBAIC0xNjgxLDcgJiM0MzsxNjgwLDYgQEAgc3RhdGljIGludCBnbWVtX2Fib3J0KGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZClcbiBcdH1cbiBcbiBvdXRfdW5sb2NrOlxuLVx0a3ZtX3JlbGVhc2VfZmF1bHRpbl9wYWdlKGt2bSwgcGFnZSwgISFyZXQsIHByb3QgXHUwMDI2IEtWTV9QR1RBQkxFX1BST1RfVyk7XG4gXHRrdm1fZmF1bHRfdW5sb2NrKGt2bSk7XG4gXG4gXHRpZiAoKHByb3QgXHUwMDI2IEtWTV9QR1RBQkxFX1BST1RfVykgXHUwMDI2XHUwMDI2ICFyZXQpXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMgYi9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuY1xuaW5kZXggMTcxMjNmMGI2ZGFiYS4uZGQ2Mjg0MGQzNjc0MSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuY1xuQEAgLTE0MTUsNyAmIzQzOzE0MTUsNyBAQCBzdGF0aWMgaW50IGt2bV90cmFuc2xhdGVfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgKmlzX2dtZW0pXG4gXHRib29sIHdyaXRlX2ZhdWx0LCB3cml0YWJsZTtcbiBcdHVuc2lnbmVkIGxvbmcgbW11X3NlcTtcbiBcdHN0cnVjdCB2bmNyX3RsYiAqdnQ7XG4tXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiYjNDM7XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7XG4gXHR1NjQgdmEsIHBmbiwgZ2ZuO1xuIFx0aW50IHJldDtcbiBcbkBAIC0xNDcxLDcgJiM0MzsxNDcxLDcgQEAgc3RhdGljIGludCBrdm1fdHJhbnNsYXRlX3ZuY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sICppc19nbWVtKVxuIFx0XHRcdHJldHVybiAtRUZBVUxUO1xuIFx0XHR9XG4gXHR9IGVsc2Uge1xuLVx0XHRyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKHZjcHUtXHUwMDNla3ZtLCBtZW1zbG90LCBnZm4sIFx1MDAyNnBmbiwgXHUwMDI2cGFnZSwgTlVMTCk7XG4mIzQzO1x0XHRyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKHZjcHUtXHUwMDNla3ZtLCBtZW1zbG90LCBnZm4sIFx1MDAyNnBmbiwgTlVMTCk7XG4gXHRcdGlmIChyZXQpIHtcbiBcdFx0XHRrdm1fcHJlcGFyZV9tZW1vcnlfZmF1bHRfZXhpdCh2Y3B1LCB2dC1cdTAwM2V3ci5wYSwgUEFHRV9TSVpFLFxuIFx0XHRcdFx0XHQgICAgICB3cml0ZV9mYXVsdCwgZmFsc2UsIGZhbHNlKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuaW5kZXggMDY0ZWNjMzNiOTI2Ny4uOTQ3YzljZDg0MzQ1MCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbkBAIC00NjI4LDcgJiM0Mzs0NjI4LDcgQEAgc3RhdGljIGludCBrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0fVxuIFxuIFx0ciA9IGt2bV9nbWVtX2dldF9wZm4odmNwdS1cdTAwM2Vrdm0sIGZhdWx0LVx1MDAzZXNsb3QsIGZhdWx0LVx1MDAzZWdmbiwgXHUwMDI2ZmF1bHQtXHUwMDNlcGZuLFxuLVx0XHRcdCAgICAgXHUwMDI2ZmF1bHQtXHUwMDNlcmVmY291bnRlZF9wYWdlLCBcdTAwMjZtYXhfb3JkZXIpO1xuJiM0MztcdFx0XHQgICAgIFx1MDAyNm1heF9vcmRlcik7XG4gXHRpZiAocikge1xuIFx0XHRrdm1fbW11X3ByZXBhcmVfbWVtb3J5X2ZhdWx0X2V4aXQodmNwdSwgZmF1bHQpO1xuIFx0XHRyZXR1cm4gcjtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuaW5kZXggNTcwNTcyM2YxZjQxMi4uMGE4ODdmOGUwNWQzYSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbkBAIC00MDMyLDcgJiM0Mzs0MDMyLDYgQEAgc3RhdGljIHZvaWQgX19zZXZfc25wX3JlbG9hZF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhKVxuIFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cdTAwM2Vrdm07XG4gXHRnZm5fdCBnZm4gPSBncGFfdG9fZ2ZuKGdwYSk7XG4gXHR1bnNpZ25lZCBsb25nIG1tdV9zZXE7XG4tXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcdGt2bV9wZm5fdCBwZm47XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnN2bS1cdTAwM2VzZXZfZXMuc25wX3Ztc2FfbXV0ZXgpO1xuQEAgLTQwNzYsNyAmIzQzOzQwNzUsNyBAQCBzdGF0aWMgdm9pZCBfX3Nldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEpXG4gXHQgKiBUaGUgbmV3IFZNU0Egd2lsbCBiZSBwcml2YXRlIG1lbW9yeSBndWVzdCBtZW1vcnksIHNvIHJldHJpZXZlIHRoZVxuIFx0ICogUEZOIGZyb20gdGhlIGdtZW0gYmFja2VuZC5cbiBcdCAqL1xuLVx0aWYgKGt2bV9nbWVtX2dldF9wZm4odmNwdS1cdTAwM2Vrdm0sIHNsb3QsIGdmbiwgXHUwMDI2cGZuLCBcdTAwMjZwYWdlLCBOVUxMKSlcbiYjNDM7XHRpZiAoa3ZtX2dtZW1fZ2V0X3Bmbih2Y3B1LVx1MDAzZWt2bSwgc2xvdCwgZ2ZuLCBcdTAwMjZwZm4sIE5VTEwpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRyZWFkX2xvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbkBAIC00MDkyLDggJiM0Mzs0MDkxLDYgQEAgc3RhdGljIHZvaWQgX19zZXZfc25wX3JlbG9hZF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhKVxuIFx0ZWxzZVxuIFx0XHRzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLnZtc2FfcGEgPSBwZm5fdG9faHBhKHBmbik7XG4gXHRyZWFkX3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuLVxuLVx0a3ZtX3JlbGVhc2VfcGFnZV9jbGVhbihwYWdlKTtcbiB9XG4gXG4gLypcbkBAIC01MDE5LDcgJiM0Mzs1MDE2LDcgQEAgdm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpXG4gXHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90O1xuIFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cdTAwM2Vrdm07XG4gXHRpbnQgb3JkZXIsIHJtcF9sZXZlbCwgcmV0O1xuLVx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBtbXVfc2VxO1xuIFx0Ym9vbCBhc3NpZ25lZDtcbiBcdGt2bV9wZm5fdCBwZm47XG4gXHRnZm5fdCBnZm47XG5AQCAtNTA0Niw3ICYjNDM7NTA0MywxMCBAQCB2b2lkIHNldl9oYW5kbGVfcm1wX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCB1NjQgZXJyb3JfY29kZSlcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0cmV0ID0ga3ZtX2dtZW1fZ2V0X3Bmbihrdm0sIHNsb3QsIGdmbiwgXHUwMDI2cGZuLCBcdTAwMjZwYWdlLCBcdTAwMjZvcmRlcik7XG4mIzQzO1x0bW11X3NlcSA9IGt2bS1cdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXE7XG4mIzQzO1x0c21wX3JtYigpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKGt2bSwgc2xvdCwgZ2ZuLCBcdTAwMjZwZm4sIFx1MDAyNm9yZGVyKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0cHJfd2Fybl9yYXRlbGltaXRlZChcJiMzNDtTRVY6IFVuZXhwZWN0ZWQgUk1QIGZhdWx0LCBubyBiYWNraW5nIHBhZ2UgZm9yIHByaXZhdGUgR1BBIDB4JWxseFxcblwmIzM0OyxcbiBcdFx0XHRcdCAgICBncGEpO1xuQEAgLTUwNTUsOSAmIzQzOzUwNTUsMTMgQEAgdm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpXG4gXG4gXHRyZXQgPSBzbnBfbG9va3VwX3JtcGVudHJ5KHBmbiwgXHUwMDI2YXNzaWduZWQsIFx1MDAyNnJtcF9sZXZlbCk7XG4gXHRpZiAocmV0IHx8ICFhc3NpZ25lZCkge1xuLVx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwmIzM0O1NFVjogVW5leHBlY3RlZCBSTVAgZmF1bHQsIG5vIGFzc2lnbmVkIFJNUCBlbnRyeSBmb3VuZCBmb3IgR1BBIDB4JWxseCBQRk4gMHglbGx4IGVycm9yICVkXFxuXCYjMzQ7LFxuLVx0XHRcdFx0ICAgIGdwYSwgcGZuLCByZXQpO1xuLVx0XHRnb3RvIG91dF9ub190cmFjZTtcbiYjNDM7XHRcdGd1YXJkKHJlYWRfbG9jaykoXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIW1tdV9pbnZhbGlkYXRlX3JldHJ5X2dmbihrdm0sIG1tdV9zZXEsIGdmbikpXG4mIzQzO1x0XHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCYjMzQ7U0VWOiBVbmV4cGVjdGVkIFJNUCBmYXVsdCwgbm8gYXNzaWduZWQgUk1QIGVudHJ5IGZvdW5kIGZvciBHUEEgMHglbGx4IFBGTiAweCVsbHggZXJyb3IgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICAgZ3BhLCBwZm4sIHJldCk7XG4mIzQzO1xuJiM0MztcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0LypcbkBAIC01MDg1LDI2ICYjNDM7NTA4OSwzMSBAQCB2b2lkIHNldl9oYW5kbGVfcm1wX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCB1NjQgZXJyb3JfY29kZSlcbiBcdGlmIChybXBfbGV2ZWwgPT0gUEdfTEVWRUxfNEspXG4gXHRcdGdvdG8gb3V0O1xuIFxuLVx0cmV0ID0gc25wX3JtcHRhYmxlX3BzbWFzaChwZm4pO1xuLVx0aWYgKHJldCkge1xuLVx0XHQvKlxuLVx0XHQgKiBMb29rIGl0IHVwIGFnYWluLiBJZiBpdCYjMzk7cyA0SyBub3cgdGhlbiB0aGUgUFNNQVNIIG1heSBoYXZlXG4tXHRcdCAqIHJhY2VkIHdpdGggYW5vdGhlciBwcm9jZXNzIGFuZCB0aGUgaXNzdWUgaGFzIGFscmVhZHkgcmVzb2x2ZWRcbi1cdFx0ICogaXRzZWxmLlxuLVx0XHQgKi9cbi1cdFx0aWYgKCFzbnBfbG9va3VwX3JtcGVudHJ5KHBmbiwgXHUwMDI2YXNzaWduZWQsIFx1MDAyNnJtcF9sZXZlbCkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBhc3NpZ25lZCBcdTAwMjZcdTAwMjYgcm1wX2xldmVsID09IFBHX0xFVkVMXzRLKVxuJiM0MztcdHNjb3BlZF9ndWFyZChyZWFkX2xvY2ssIFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jaykge1xuJiM0MztcdFx0aWYgKG1tdV9pbnZhbGlkYXRlX3JldHJ5X2dmbihrdm0sIG1tdV9zZXEsIGdmbikpXG4gXHRcdFx0Z290byBvdXQ7XG4gXG4tXHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCYjMzQ7U0VWOiBVbmFibGUgdG8gc3BsaXQgUk1QIGVudHJ5IGZvciBHUEEgMHglbGx4IFBGTiAweCVsbHggcmV0ICVkXFxuXCYjMzQ7LFxuLVx0XHRcdFx0ICAgIGdwYSwgcGZuLCByZXQpO1xuJiM0MztcdFx0cmV0ID0gc25wX3JtcHRhYmxlX3BzbWFzaChwZm4pO1xuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBMb29rIGl0IHVwIGFnYWluLiBJZiBpdCYjMzk7cyA0SyBub3cgdGhlbiB0aGUgUFNNQVNIIG1heVxuJiM0MztcdFx0XHQgKiBoYXZlIHJhY2VkIHdpdGggYW5vdGhlciBwcm9jZXNzIGFuZCB0aGUgaXNzdWUgaGFzXG4mIzQzO1x0XHRcdCAqIGFscmVhZHkgcmVzb2x2ZWQgaXRzZWxmLiBJZiBpdCYjMzk7cyBub3QgYXNzaWduZWQsIHRoZW5cbiYjNDM7XHRcdFx0ICogdGhpcyBtdXN0IGhhdmUgcmFjZWQgd2l0aCBhbm90aGVyIHByb2Nlc3MgdGhhdCBtYWRlXG4mIzQzO1x0XHRcdCAqIHRoaXMgcGFnZSBzaGFyZWQuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpZiAoIXNucF9sb29rdXBfcm1wZW50cnkocGZuLCBcdTAwMjZhc3NpZ25lZCwgXHUwMDI2cm1wX2xldmVsKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgICgoYXNzaWduZWQgXHUwMDI2XHUwMDI2IHJtcF9sZXZlbCA9PSBQR19MRVZFTF80SykgfHwgIWFzc2lnbmVkKSlcbiYjNDM7XHRcdFx0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0XHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCYjMzQ7U0VWOiBVbmFibGUgdG8gc3BsaXQgUk1QIGVudHJ5IGZvciBHUEEgMHglbGx4IFBGTiAweCVsbHggcmV0ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgIGdwYSwgcGZuLCByZXQpO1xuJiM0MztcdFx0fVxuIFx0fVxuIFxuIFx0a3ZtX3phcF9nZm5fcmFuZ2Uoa3ZtLCBnZm4sIGdmbiAmIzQzOyBQVFJTX1BFUl9QTUQpO1xuIG91dDpcbiBcdHRyYWNlX2t2bV9ybXBfZmF1bHQodmNwdSwgZ3BhLCBwZm4sIGVycm9yX2NvZGUsIHJtcF9sZXZlbCwgcmV0KTtcbi1vdXRfbm9fdHJhY2U6XG4tXHRrdm1fcmVsZWFzZV9wYWdlX3VudXNlZChwYWdlKTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgaXNfcGZuX3JhbmdlX3NoYXJlZChrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5pbmRleCAwM2JmYzkyODY0YjZlLi41MDI0NjUxMTljYTBjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbkBAIC0yNTg2LDEzICYjNDM7MjU4NiwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wga3ZtX21lbV9pc19wcml2YXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKVxuIFxuICNpZmRlZiBDT05GSUdfS1ZNX0dVRVNUX01FTUZEXG4gaW50IGt2bV9nbWVtX2dldF9wZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxuLVx0XHQgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIHN0cnVjdCBwYWdlICoqcGFnZSxcbi1cdFx0ICAgICBpbnQgKm1heF9vcmRlcik7XG4mIzQzO1x0XHQgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIGludCAqbWF4X29yZGVyKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgaW50IGt2bV9nbWVtX2dldF9wZm4oc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRcdFx0ICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwgZ2ZuX3QgZ2ZuLFxuLVx0XHRcdFx0ICAga3ZtX3Bmbl90ICpwZm4sIHN0cnVjdCBwYWdlICoqcGFnZSxcbi1cdFx0XHRcdCAgIGludCAqbWF4X29yZGVyKVxuJiM0MztcdFx0XHRcdCAgIGt2bV9wZm5fdCAqcGZuLCBpbnQgKm1heF9vcmRlcilcbiB7XG4gXHRLVk1fQlVHX09OKDEsIGt2bSk7XG4gXHRyZXR1cm4gLUVJTztcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuaW5kZXggYjU5NjQ4NmQxODRjYS4uNTg5NzYyMTQwYzNlZiAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbkBAIC03NTEsOCAmIzQzOzc1MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fa3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3QgZmlsZSAqZmlsZSxcbiB9XG4gXG4gaW50IGt2bV9nbWVtX2dldF9wZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxuLVx0XHQgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIHN0cnVjdCBwYWdlICoqcGFnZSxcbi1cdFx0ICAgICBpbnQgKm1heF9vcmRlcilcbiYjNDM7XHRcdCAgICAgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgKnBmbiwgaW50ICptYXhfb3JkZXIpXG4ge1xuIFx0cGdvZmZfdCBpbmRleCA9IGt2bV9nbWVtX2dldF9pbmRleChzbG90LCBnZm4pO1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbkBAIC03ODAsMTEgJiM0Mzs3NzksNyBAQCBpbnQga3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXG4gI2VuZGlmXG4gXG4gXHRmb2xpb191bmxvY2soZm9saW8pO1xuLVxuLVx0aWYgKCFyKVxuLVx0XHQqcGFnZSA9IGZvbGlvX2ZpbGVfcGFnZShmb2xpbywgaW5kZXgpO1xuLVx0ZWxzZVxuLVx0XHRmb2xpb19wdXQoZm9saW8pO1xuJiM0MztcdGZvbGlvX3B1dChmb2xpbyk7XG4gXG4gXHRyZXR1cm4gcjtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6MTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EX1NFViYjMzQ7LAogICAgJiMzNDtLVk1fU1dfUFJPVEVDVEVEX1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2dtZW1fZ2V0X3BmbiYjMzQ7LAogICAgJiMzNDtzZXZfaGFuZGxlX3JtcF9mYXVsdCYjMzQ7LAogICAgJiMzNDtzZXZfc25wX3JlbG9hZF92bXNhJiMzNDssCiAgICAmIzM0O2t2bV9oYW5kbGVfdm5jcl9hYm9ydCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSBzaWduYXR1cmUgYW5kIGJlaGF2aW9yIG9mIGBrdm1fZ21lbV9nZXRfcGZuYCBieSByZW1vdmluZyB0aGUgYHN0cnVjdCBwYWdlICoqcGFnZWAgYXJndW1lbnQgYW5kIGRyb3BwaW5nIHRoZSBmb2xpbyByZWZlcmVuY2UgYmVmb3JlIHJldHVybmluZy4gVGhpcyBhZmZlY3RzIGhvdyBLVk0gaGFuZGxlcyBtZW1vcnkgYmFja2luZyBmb3IgZ3Vlc3RfbWVtZmQsIHdoaWNoIGlzIGEgY29yZSBmZWF0dXJlIGZvciBjb25maWRlbnRpYWwgY29tcHV0aW5nIChTRVYtU05QLCBURFgsIEFSTSBDQ0EpLiBUaGUgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBwYWdlIGZhdWx0cyB3aGVuIHVzaW5nIGd1ZXN0X21lbWZkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDBmY2VhZTQxMGMwNTQxMDVlZTZlOTZhMzdiNDE2NjFlM2UyYTFiZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDA5OjE5OjQyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vbW11LmMgYi9hcmNoL2FybTY0L2t2bS9tbXUuYwppbmRleCA5YmE4NjQ1MGZlNGFmLi5kNTdmODE4MWYxYjdkIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9tbXUuYwpAQCAtMTYxMyw3ICYjNDM7MTYxMyw2IEBAIHN0YXRpYyBpbnQgZ21lbV9hYm9ydChjb25zdCBzdHJ1Y3Qga3ZtX3MyX2ZhdWx0X2Rlc2MgKnMyZmQpCiAJZW51bSBrdm1fcGd0YWJsZV9wcm90IHByb3QgPSBLVk1fUEdUQUJMRV9QUk9UX1I7CiAJc3RydWN0IGt2bV9wZ3RhYmxlICpwZ3QgPSBzMmZkLSZndDt2Y3B1LSZndDthcmNoLmh3X21tdS0mZ3Q7cGd0OwogCXVuc2lnbmVkIGxvbmcgbW11X3NlcTsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlzdHJ1Y3Qga3ZtICprdm0gPSBzMmZkLSZndDt2Y3B1LSZndDtrdm07CiAJdm9pZCAqbWVtY2FjaGUgPSBOVUxMOwogCWt2bV9wZm5fdCBwZm47CkBAIC0xNjQxLDcgJiM0MzsxNjQwLDcgQEAgc3RhdGljIGludCBnbWVtX2Fib3J0KGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZCkKIAkvKiBQYWlycyB3aXRoIHRoZSBzbXBfd21iKCkgaW4ga3ZtX21tdV9pbnZhbGlkYXRlX2VuZCgpLiAqLwogCXNtcF9ybWIoKTsKIAotCXJldCA9IGt2bV9nbWVtX2dldF9wZm4oa3ZtLCBzMmZkLSZndDttZW1zbG90LCBnZm4sICZhbXA7cGZuLCAmYW1wO3BhZ2UsIE5VTEwpOwomIzQzOwlyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKGt2bSwgczJmZC0mZ3Q7bWVtc2xvdCwgZ2ZuLCAmYW1wO3BmbiwgTlVMTCk7CiAJaWYgKHJldCkgewogCQlrdm1fcHJlcGFyZV9tZW1vcnlfZmF1bHRfZXhpdChzMmZkLSZndDt2Y3B1LCBzMmZkLSZndDtmYXVsdF9pcGEsIFBBR0VfU0laRSwKIAkJCQkJICAgICAgd3JpdGVfZmF1bHQsIGV4ZWNfZmF1bHQsIGZhbHNlKTsKQEAgLTE2ODEsNyAmIzQzOzE2ODAsNiBAQCBzdGF0aWMgaW50IGdtZW1fYWJvcnQoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKQogCX0KIAogb3V0X3VubG9jazoKLQlrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2Uoa3ZtLCBwYWdlLCAhIXJldCwgcHJvdCAmYW1wOyBLVk1fUEdUQUJMRV9QUk9UX1cpOwogCWt2bV9mYXVsdF91bmxvY2soa3ZtKTsKIAogCWlmICgocHJvdCAmYW1wOyBLVk1fUEdUQUJMRV9QUk9UX1cpICZhbXA7JmFtcDsgIXJldCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jIGIvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMKaW5kZXggMTcxMjNmMGI2ZGFiYS4uZGQ2Mjg0MGQzNjc0MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMKQEAgLTE0MTUsNyAmIzQzOzE0MTUsNyBAQCBzdGF0aWMgaW50IGt2bV90cmFuc2xhdGVfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgKmlzX2dtZW0pCiAJYm9vbCB3cml0ZV9mYXVsdCwgd3JpdGFibGU7CiAJdW5zaWduZWQgbG9uZyBtbXVfc2VxOwogCXN0cnVjdCB2bmNyX3RsYiAqdnQ7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7CiYjNDM7CXN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDsKIAl1NjQgdmEsIHBmbiwgZ2ZuOwogCWludCByZXQ7CiAKQEAgLTE0NzEsNyAmIzQzOzE0NzEsNyBAQCBzdGF0aWMgaW50IGt2bV90cmFuc2xhdGVfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgKmlzX2dtZW0pCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQogCX0gZWxzZSB7Ci0JCXJldCA9IGt2bV9nbWVtX2dldF9wZm4odmNwdS0mZ3Q7a3ZtLCBtZW1zbG90LCBnZm4sICZhbXA7cGZuLCAmYW1wO3BhZ2UsIE5VTEwpOwomIzQzOwkJcmV0ID0ga3ZtX2dtZW1fZ2V0X3Bmbih2Y3B1LSZndDtrdm0sIG1lbXNsb3QsIGdmbiwgJmFtcDtwZm4sIE5VTEwpOwogCQlpZiAocmV0KSB7CiAJCQlrdm1fcHJlcGFyZV9tZW1vcnlfZmF1bHRfZXhpdCh2Y3B1LCB2dC0mZ3Q7d3IucGEsIFBBR0VfU0laRSwKIAkJCQkJICAgICAgd3JpdGVfZmF1bHQsIGZhbHNlLCBmYWxzZSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuYwppbmRleCAwNjRlY2MzM2I5MjY3Li45NDdjOWNkODQzNDUwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmMKQEAgLTQ2MjgsNyAmIzQzOzQ2MjgsNyBAQCBzdGF0aWMgaW50IGt2bV9tbXVfZmF1bHRpbl9wZm5fZ21lbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJfQogCiAJciA9IGt2bV9nbWVtX2dldF9wZm4odmNwdS0mZ3Q7a3ZtLCBmYXVsdC0mZ3Q7c2xvdCwgZmF1bHQtJmd0O2dmbiwgJmFtcDtmYXVsdC0mZ3Q7cGZuLAotCQkJICAgICAmYW1wO2ZhdWx0LSZndDtyZWZjb3VudGVkX3BhZ2UsICZhbXA7bWF4X29yZGVyKTsKJiM0MzsJCQkgICAgICZhbXA7bWF4X29yZGVyKTsKIAlpZiAocikgewogCQlrdm1fbW11X3ByZXBhcmVfbWVtb3J5X2ZhdWx0X2V4aXQodmNwdSwgZmF1bHQpOwogCQlyZXR1cm4gcjsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jCmluZGV4IDU3MDU3MjNmMWY0MTIuLjBhODg3ZjhlMDVkM2EgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuYwpAQCAtNDAzMiw3ICYjNDM7NDAzMiw2IEBAIHN0YXRpYyB2b2lkIF9fc2V2X3NucF9yZWxvYWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSkKIAlzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LSZndDtrdm07CiAJZ2ZuX3QgZ2ZuID0gZ3BhX3RvX2dmbihncGEpOwogCXVuc2lnbmVkIGxvbmcgbW11X3NlcTsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlrdm1fcGZuX3QgcGZuOwogCiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3N2bS0mZ3Q7c2V2X2VzLnNucF92bXNhX211dGV4KTsKQEAgLTQwNzYsNyAmIzQzOzQwNzUsNyBAQCBzdGF0aWMgdm9pZCBfX3Nldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEpCiAJICogVGhlIG5ldyBWTVNBIHdpbGwgYmUgcHJpdmF0ZSBtZW1vcnkgZ3Vlc3QgbWVtb3J5LCBzbyByZXRyaWV2ZSB0aGUKIAkgKiBQRk4gZnJvbSB0aGUgZ21lbSBiYWNrZW5kLgogCSAqLwotCWlmIChrdm1fZ21lbV9nZXRfcGZuKHZjcHUtJmd0O2t2bSwgc2xvdCwgZ2ZuLCAmYW1wO3BmbiwgJmFtcDtwYWdlLCBOVUxMKSkKJiM0MzsJaWYgKGt2bV9nbWVtX2dldF9wZm4odmNwdS0mZ3Q7a3ZtLCBzbG90LCBnZm4sICZhbXA7cGZuLCBOVUxMKSkKIAkJcmV0dXJuOwogCiAJcmVhZF9sb2NrKCZhbXA7a3ZtLSZndDttbXVfbG9jayk7CkBAIC00MDkyLDggJiM0Mzs0MDkxLDYgQEAgc3RhdGljIHZvaWQgX19zZXZfc25wX3JlbG9hZF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhKQogCWVsc2UKIAkJc3ZtLSZndDt2bWNiLSZndDtjb250cm9sLnZtc2FfcGEgPSBwZm5fdG9faHBhKHBmbik7CiAJcmVhZF91bmxvY2soJmFtcDtrdm0tJmd0O21tdV9sb2NrKTsKLQotCWt2bV9yZWxlYXNlX3BhZ2VfY2xlYW4ocGFnZSk7CiB9CiAKIC8qCkBAIC01MDE5LDcgJiM0Mzs1MDE2LDcgQEAgdm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpCiAJc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdDsKIAlzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LSZndDtrdm07CiAJaW50IG9yZGVyLCBybXBfbGV2ZWwsIHJldDsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKJiM0MzsJdW5zaWduZWQgbG9uZyBtbXVfc2VxOwogCWJvb2wgYXNzaWduZWQ7CiAJa3ZtX3Bmbl90IHBmbjsKIAlnZm5fdCBnZm47CkBAIC01MDQ2LDcgJiM0Mzs1MDQzLDEwIEBAIHZvaWQgc2V2X2hhbmRsZV9ybXBfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHU2NCBlcnJvcl9jb2RlKQogCQlyZXR1cm47CiAJfQogCi0JcmV0ID0ga3ZtX2dtZW1fZ2V0X3Bmbihrdm0sIHNsb3QsIGdmbiwgJmFtcDtwZm4sICZhbXA7cGFnZSwgJmFtcDtvcmRlcik7CiYjNDM7CW1tdV9zZXEgPSBrdm0tJmd0O21tdV9pbnZhbGlkYXRlX3NlcTsKJiM0MzsJc21wX3JtYigpOwomIzQzOwomIzQzOwlyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKGt2bSwgc2xvdCwgZ2ZuLCAmYW1wO3BmbiwgJmFtcDtvcmRlcik7CiAJaWYgKHJldCkgewogCQlwcl93YXJuX3JhdGVsaW1pdGVkKCYjMzQ7U0VWOiBVbmV4cGVjdGVkIFJNUCBmYXVsdCwgbm8gYmFja2luZyBwYWdlIGZvciBwcml2YXRlIEdQQSAweCVsbHhcbiYjMzQ7LAogCQkJCSAgICBncGEpOwpAQCAtNTA1NSw5ICYjNDM7NTA1NSwxMyBAQCB2b2lkIHNldl9oYW5kbGVfcm1wX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCB1NjQgZXJyb3JfY29kZSkKIAogCXJldCA9IHNucF9sb29rdXBfcm1wZW50cnkocGZuLCAmYW1wO2Fzc2lnbmVkLCAmYW1wO3JtcF9sZXZlbCk7CiAJaWYgKHJldCB8fCAhYXNzaWduZWQpIHsKLQkJcHJfd2Fybl9yYXRlbGltaXRlZCgmIzM0O1NFVjogVW5leHBlY3RlZCBSTVAgZmF1bHQsIG5vIGFzc2lnbmVkIFJNUCBlbnRyeSBmb3VuZCBmb3IgR1BBIDB4JWxseCBQRk4gMHglbGx4IGVycm9yICVkXG4mIzM0OywKLQkJCQkgICAgZ3BhLCBwZm4sIHJldCk7Ci0JCWdvdG8gb3V0X25vX3RyYWNlOwomIzQzOwkJZ3VhcmQocmVhZF9sb2NrKSgmYW1wO2t2bS0mZ3Q7bW11X2xvY2spOwomIzQzOwomIzQzOwkJaWYgKCFtbXVfaW52YWxpZGF0ZV9yZXRyeV9nZm4oa3ZtLCBtbXVfc2VxLCBnZm4pKQomIzQzOwkJCXByX3dhcm5fcmF0ZWxpbWl0ZWQoJiMzNDtTRVY6IFVuZXhwZWN0ZWQgUk1QIGZhdWx0LCBubyBhc3NpZ25lZCBSTVAgZW50cnkgZm91bmQgZm9yIEdQQSAweCVsbHggUEZOIDB4JWxseCBlcnJvciAlZFxuJiMzNDssCiYjNDM7CQkJCQkgICAgZ3BhLCBwZm4sIHJldCk7CiYjNDM7CiYjNDM7CQlyZXR1cm47CiAJfQogCiAJLyoKQEAgLTUwODUsMjYgJiM0Mzs1MDg5LDMxIEBAIHZvaWQgc2V2X2hhbmRsZV9ybXBfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHU2NCBlcnJvcl9jb2RlKQogCWlmIChybXBfbGV2ZWwgPT0gUEdfTEVWRUxfNEspCiAJCWdvdG8gb3V0OwogCi0JcmV0ID0gc25wX3JtcHRhYmxlX3BzbWFzaChwZm4pOwotCWlmIChyZXQpIHsKLQkJLyoKLQkJICogTG9vayBpdCB1cCBhZ2Fpbi4gSWYgaXQmIzM5O3MgNEsgbm93IHRoZW4gdGhlIFBTTUFTSCBtYXkgaGF2ZQotCQkgKiByYWNlZCB3aXRoIGFub3RoZXIgcHJvY2VzcyBhbmQgdGhlIGlzc3VlIGhhcyBhbHJlYWR5IHJlc29sdmVkCi0JCSAqIGl0c2VsZi4KLQkJICovCi0JCWlmICghc25wX2xvb2t1cF9ybXBlbnRyeShwZm4sICZhbXA7YXNzaWduZWQsICZhbXA7cm1wX2xldmVsKSAmYW1wOyZhbXA7Ci0JCSAgICBhc3NpZ25lZCAmYW1wOyZhbXA7IHJtcF9sZXZlbCA9PSBQR19MRVZFTF80SykKJiM0MzsJc2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgJmFtcDtrdm0tJmd0O21tdV9sb2NrKSB7CiYjNDM7CQlpZiAobW11X2ludmFsaWRhdGVfcmV0cnlfZ2ZuKGt2bSwgbW11X3NlcSwgZ2ZuKSkKIAkJCWdvdG8gb3V0OwogCi0JCXByX3dhcm5fcmF0ZWxpbWl0ZWQoJiMzNDtTRVY6IFVuYWJsZSB0byBzcGxpdCBSTVAgZW50cnkgZm9yIEdQQSAweCVsbHggUEZOIDB4JWxseCByZXQgJWRcbiYjMzQ7LAotCQkJCSAgICBncGEsIHBmbiwgcmV0KTsKJiM0MzsJCXJldCA9IHNucF9ybXB0YWJsZV9wc21hc2gocGZuKTsKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIExvb2sgaXQgdXAgYWdhaW4uIElmIGl0JiMzOTtzIDRLIG5vdyB0aGVuIHRoZSBQU01BU0ggbWF5CiYjNDM7CQkJICogaGF2ZSByYWNlZCB3aXRoIGFub3RoZXIgcHJvY2VzcyBhbmQgdGhlIGlzc3VlIGhhcwomIzQzOwkJCSAqIGFscmVhZHkgcmVzb2x2ZWQgaXRzZWxmLiBJZiBpdCYjMzk7cyBub3QgYXNzaWduZWQsIHRoZW4KJiM0MzsJCQkgKiB0aGlzIG11c3QgaGF2ZSByYWNlZCB3aXRoIGFub3RoZXIgcHJvY2VzcyB0aGF0IG1hZGUKJiM0MzsJCQkgKiB0aGlzIHBhZ2Ugc2hhcmVkLgomIzQzOwkJCSAqLwomIzQzOwkJCWlmICghc25wX2xvb2t1cF9ybXBlbnRyeShwZm4sICZhbXA7YXNzaWduZWQsICZhbXA7cm1wX2xldmVsKSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgICgoYXNzaWduZWQgJmFtcDsmYW1wOyBybXBfbGV2ZWwgPT0gUEdfTEVWRUxfNEspIHx8ICFhc3NpZ25lZCkpCiYjNDM7CQkJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkJCXByX3dhcm5fcmF0ZWxpbWl0ZWQoJiMzNDtTRVY6IFVuYWJsZSB0byBzcGxpdCBSTVAgZW50cnkgZm9yIEdQQSAweCVsbHggUEZOIDB4JWxseCByZXQgJWRcbiYjMzQ7LAomIzQzOwkJCQkJICAgIGdwYSwgcGZuLCByZXQpOwomIzQzOwkJfQogCX0KIAogCWt2bV96YXBfZ2ZuX3JhbmdlKGt2bSwgZ2ZuLCBnZm4gJiM0MzsgUFRSU19QRVJfUE1EKTsKIG91dDoKIAl0cmFjZV9rdm1fcm1wX2ZhdWx0KHZjcHUsIGdwYSwgcGZuLCBlcnJvcl9jb2RlLCBybXBfbGV2ZWwsIHJldCk7Ci1vdXRfbm9fdHJhY2U6Ci0Ja3ZtX3JlbGVhc2VfcGFnZV91bnVzZWQocGFnZSk7CiB9CiAKIHN0YXRpYyBib29sIGlzX3Bmbl9yYW5nZV9zaGFyZWQoa3ZtX3Bmbl90IHN0YXJ0LCBrdm1fcGZuX3QgZW5kKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCmluZGV4IDAzYmZjOTI4NjRiNmUuLjUwMjQ2NTExOWNhMGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKQEAgLTI1ODYsMTMgJiM0MzsyNTg2LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fbWVtX2lzX3ByaXZhdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pCiAKICNpZmRlZiBDT05GSUdfS1ZNX0dVRVNUX01FTUZECiBpbnQga3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsCi0JCSAgICAgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgKnBmbiwgc3RydWN0IHBhZ2UgKipwYWdlLAotCQkgICAgIGludCAqbWF4X29yZGVyKTsKJiM0MzsJCSAgICAgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgKnBmbiwgaW50ICptYXhfb3JkZXIpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IGt2bV9nbWVtX2dldF9wZm4oc3RydWN0IGt2bSAqa3ZtLAogCQkJCSAgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsIGdmbl90IGdmbiwKLQkJCQkgICBrdm1fcGZuX3QgKnBmbiwgc3RydWN0IHBhZ2UgKipwYWdlLAotCQkJCSAgIGludCAqbWF4X29yZGVyKQomIzQzOwkJCQkgICBrdm1fcGZuX3QgKnBmbiwgaW50ICptYXhfb3JkZXIpCiB7CiAJS1ZNX0JVR19PTigxLCBrdm0pOwogCXJldHVybiAtRUlPOwpkaWZmIC0tZ2l0IGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMKaW5kZXggYjU5NjQ4NmQxODRjYS4uNTg5NzYyMTQwYzNlZiAxMDA2NDQKLS0tIGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYwomIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jCkBAIC03NTEsOCAmIzQzOzc1MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fa3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3QgZmlsZSAqZmlsZSwKIH0KIAogaW50IGt2bV9nbWVtX2dldF9wZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LAotCQkgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIHN0cnVjdCBwYWdlICoqcGFnZSwKLQkJICAgICBpbnQgKm1heF9vcmRlcikKJiM0MzsJCSAgICAgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgKnBmbiwgaW50ICptYXhfb3JkZXIpCiB7CiAJcGdvZmZfdCBpbmRleCA9IGt2bV9nbWVtX2dldF9pbmRleChzbG90LCBnZm4pOwogCXN0cnVjdCBmb2xpbyAqZm9saW87CkBAIC03ODAsMTEgJiM0Mzs3NzksNyBAQCBpbnQga3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsCiAjZW5kaWYKIAogCWZvbGlvX3VubG9jayhmb2xpbyk7Ci0KLQlpZiAoIXIpCi0JCSpwYWdlID0gZm9saW9fZmlsZV9wYWdlKGZvbGlvLCBpbmRleCk7Ci0JZWxzZQotCQlmb2xpb19wdXQoZm9saW8pOwomIzQzOwlmb2xpb19wdXQoZm9saW8pOwogCiAJcmV0dXJuIHI7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1OTIKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA0MjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLVk0gUGF0Y2ggZm9yIEd1ZXN0IE1lbWZkIGFuZCBDb25maWRlbnRpYWwgQ29tcHV0aW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBLVk0sIGFuZCBpdCYjMzk7cyBtb2RpZnlpbmcgYGt2bV9nbWVtX2dldF9wZm5gLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGRyb3BwaW5nIHRoZSBgc3RydWN0IHBhZ2UgKipwYWdlYCBhcmd1bWVudCBhbmQsIG1vcmUgc2lnbmlmaWNhbnRseSwgbm8gbG9uZ2VyIHJldHVybmluZyBhIHJlZmVyZW5jZWQgcGFnZS4gSW5zdGVhZCwgaXQmIzM5O3MganVzdCB0aGUgcGZuLCB3aXRoIHRoZSBmb2xpbyByZWZlcmVuY2UgZHJvcHBlZCBiZWZvcmUgcmV0dXJuaW5nLiBBbHJpZ2h0LCB0aGF0JiMzOTtzIGEgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZS4gVGhlIGNvZGUgYWZmZWN0ZWQgaW5jbHVkZXMgc29tZSBjcml0aWNhbCBhcmVhczogYGFyY2gvYXJtNjQva3ZtL21tdS5jYCwgYGFyY2gvYXJtNjQva3ZtL25lc3RlZC5jYCwgYW5kIHRoZSB4ODYgZXF1aXZhbGVudCwgcGx1cyBzb21lIG90aGVyIGtleSBmaWxlcyBsaWtlIHRoZSBoZWFkZXIgYW5kIGB2aXJ0L2t2bS9ndWVzdF9tZW1mZC5jYC4KCk15IGZpcnN0IHRob3VnaHQgaXMsIGhvdyBpcyB0aGUgbWVtb3J5IGtlcHQgYWxpdmUgaWYgdGhleSBhcmUgZHJvcHBpbmcgdGhlIHJlZmVyZW5jZT8gQWgsIGl0IGxvb2tzIGxpa2UgYGd1ZXN0X21lbWZkYCBtZW1vcnkgaXMgbWFuYWdlZCB0aHJvdWdoIHRoZSBmaWxlIGRlc2NyaXB0b3IgaXRzZWxmLCBhbmQgS1ZNJiMzOTtzIG1tdV9ub3RpZmllci1saWtlIG1lY2hhbmlzbSwgb3IgcmF0aGVyIHRoZSBndWVzdF9tZW1mZCBpbnZhbGlkYXRpb24gY2FsbGJhY2tzLCBoYW5kbGVzIHRoZSB1bm1hcHBpbmcgaWYgdGhlIG1lbW9yeSBpcyBmcmVlZC4gU28sIGl0IGFwcGVhcnMgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGZvciBob3cgS1ZNIGhhbmRsZXMgYGd1ZXN0X21lbWZkYCBwYWdlcy4gVGhleSBhcmUgbm8gbG9uZ2VyIHRha2luZyBhIHBhZ2UgcmVmZXJlbmNlLgoKR2l2ZW4gdGhpcyBpcyBhIGNvcmUgY29tcG9uZW50LCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBpZiB0aGlzIGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4gT2theSwgYEtWTSBndWVzdF9tZW1mZGAgaXMgYSBrZXkgcGllY2UgZm9yIGNvbmZpZGVudGlhbCBjb21wdXRpbmcsIHJpZ2h0PyBTRVYtU05QLCBURFgsIGFuZCBBUk0gQ0NBIGFsbCB1c2UgaXQuIEFuZCwgeWVzLCBpdCYjMzk7cyByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyByZWFjaGFibGUgd2l0aGluIGEgc3RhbmRhcmQgUUVNVSBvciBHQ0Ugc2V0dXAuIEkgc2hvdWxkIGNoZWNrIGhvdyB0aGVzZSBndWVzdCBtZW1mZHMgYXJlIGNyZWF0ZWQuIEFoLCB0aGV5JiMzOTtyZSBjcmVhdGVkIHdpdGggYEtWTV9DUkVBVEVfR1VFU1RfTUVNRkRgLiBBbmQgeWVzLCB0aGlzIGlzIGF2YWlsYWJsZSBpZiBgQ09ORklHX0tWTV9HVUVTVF9NRU1GRGAgaXMgZW5hYmxlZC4gV2FpdCwgYW5kIGl0IGxvb2tzIGxpa2UgYENPTkZJR19LVk1fR1VFU1RfTUVNRkRgIGlzIHNlbGVjdGVkIGJ5IEtWTV9TV19QUk9URUNURURfVk0gb3Igb3RoZXIgY29uZmlkZW50aWFsIGNvbXB1dGluZyBjb25maWdzLiBQZXJmZWN0LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBgQ09ORklHX0tWTV9HVUVTVF9NRU1GRGAgY29uZmlnLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fR1VFU1RfTUVNRkQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0vS2NvbmZpZz0xMDM9Y29uZmlnIEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG4tLVxudmlydC9rdm0vS2NvbmZpZy0xMDUtXG52aXJ0L2t2bS9LY29uZmlnOjEwNjpjb25maWcgS1ZNX0dVRVNUX01FTUZEXG52aXJ0L2t2bS9LY29uZmlnLTEwNy0gICAgICAgc2VsZWN0IFhBUlJBWV9NVUxUSVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2MDgKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW52ZXN0aWdhdGluZyBLVk1fR1VFU1RfTUVNRkQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBLVk1fR1VFU1RfTUVNRkRgIHNlbGVjdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gdW5kZXJzdGFuZCAqd2h5KiBpdCYjMzk7cyBiZWluZyBjaG9zZW4gb3IgYmVpbmcgY29uc2lkZXJlZC4gV2hhdCYjMzk7cyB0aGUgY29udGV4dCBoZXJlPyBJcyBpdCByZWxhdGVkIHRvIGEgc3BlY2lmaWMgdnVsbmVyYWJpbGl0eSwgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBvciBuZXcgZmVhdHVyZSBpbnRyb2R1Y3Rpb24gd2l0aGluIHRoZSBLVk0gZWNvc3lzdGVtPyBNeSBleHBlcnQgaW50dWl0aW9uIGtpY2tzIGluOyBJJiMzOTttIGltbWVkaWF0ZWx5IHJ1bm5pbmcgdGhyb3VnaCBwb3NzaWJsZSB1c2UgY2FzZXMgaW4gbXkgaGVhZDogbWVtb3J5IGJhbGxvb25pbmcsIHNlY3VyZSBndWVzdCBtZW1vcnkgbWFuYWdlbWVudCwgcG90ZW50aWFsbHkgZXZlbiBzaGFyZWQgbWVtb3J5IGltcGxlbWVudGF0aW9ucy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHRyaWdnZXJpbmcgZXZlbnQgb3IgY29uZGl0aW9uIHRoYXQgbGVhZHMgdG8gdGhlIHNlbGVjdGlvbiBvZiB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbi4gV2hhdCBvdGhlciByZWxhdGVkIG9wdGlvbnMgYXJlIHBvdGVudGlhbGx5IGJlaW5nIGNvbnNpZGVyZWQ/IEkgd2lsbCBkZWx2ZSBkZWVwZXIgaW50byBkb2N1bWVudGF0aW9uLCBjb2RlLCBhbmQgcmVsYXRlZCBtYWlsaW5nIGxpc3QgZGlzY3Vzc2lvbnMuIEl0JiMzOTtzIGxpa2VseSB0aGF0IGl0JiMzOTtzIGJlaW5nIGNob3NlbiBmb3IgYSByZWFzb24sIGFuZCB0aGVyZSBpcyBjZXJ0YWlubHkgbXVjaCBmb3IgbWUgdG8gZGlzY292ZXIgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgS1ZNX0dVRVNUX01FTUZEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL0tjb25maWc9MjA9bWVudWNvbmZpZyBLVk1cbi0tXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTM4LVx0c2VsZWN0IEdVRVNUX1BFUkZfRVZFTlRTIGlmIFBFUkZfRVZFTlRTXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnOjM5Olx0c2VsZWN0IEtWTV9HVUVTVF9NRU1GRFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy00MC1cdGhlbHBcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0yMD1jb25maWcgS1ZNX1g4NlxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTQ5LVx0c2VsZWN0IEtWTV9XRVJST1IgaWYgV0VSUk9SXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1MDpcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkQgaWYgWDg2XzY0XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDY0CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMzMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKioKCk9rYXksIHNvIHRoaXMgaXMgYXV0b21hdGljYWxseSBlbmFibGVkIG9uIGJvdGggQVJNNjQgYW5kIFg4Nl82NCBLVk0sIHdoaWNoIGlzIGdvb2Qg4oCTIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGlkZW50aWZ5IHRoZSBtb3N0IHByb21pc2luZyBmdW5jdGlvbnMgZm9yIGZ1enppbmcuCgpMb29raW5nIGF0IHRoZSBwYXRjaCwgSSBzZWUgbW9kaWZpY2F0aW9ucyBpbiBhIGZldyBrZXkgYXJlYXM6IGBnbWVtX2Fib3J0YCwgYGt2bV90cmFuc2xhdGVfdm5jcmAsIGBrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW1gLCBgX19zZXZfc25wX3JlbG9hZF92bXNhYCwgYHNldl9oYW5kbGVfcm1wX2ZhdWx0YCwgYW5kIGBrdm1fZ21lbV9nZXRfcGZuYC4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGVpciBlbnRyeSBwb2ludHMgYW5kIGNhbGwgY2hhaW5zLgoKYGt2bV9nbWVtX2dldF9wZm5gIGFwcGVhcnMgdG8gYmUgYW4gQVBJIGZ1bmN0aW9uLCB3aGljaCBpcyB1c2VmdWwuIFNhbWUgZ29lcyBmb3IgYHNldl9oYW5kbGVfcm1wX2ZhdWx0YC4gSSBzaG91bGQgaW52ZXN0aWdhdGUgdGhlIGNhbGxlcnMgYW5kIGhvdyB0aGUgZGF0YSBmbG93cyBpbnRvIHRoZW0gdG8gc2VlIGhvdyB0aGV5JiMzOTtyZSBleHBvc2VkIHRvIHRoZSBndWVzdC4gTm93LCBgZ21lbV9hYm9ydGAgaXMgY2FsbGVkIGJ5IGB1c2VyX21lbV9hYm9ydGAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIHJpZ2h0PyBMZXQgbWUgZG91YmxlLWNoZWNrIGhvdyB0aGF0IHdvcmtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dtZW1fYWJvcnQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vbW11LmM9MTYwMD1zdHJ1Y3Qga3ZtX3MyX2ZhdWx0X2Rlc2Mge1xuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTE2MDctXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoxNjA4OnN0YXRpYyBpbnQgZ21lbV9hYm9ydChjb25zdCBzdHJ1Y3Qga3ZtX3MyX2ZhdWx0X2Rlc2MgKnMyZmQpXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xNjA5LXtcbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYz0yMjQ4PWludCBrdm1faGFuZGxlX2d1ZXN0X2Fib3J0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0yNDE5LVx0XHRpZiAoa3ZtX3Nsb3RfaGFzX2dtZW0obWVtc2xvdCkpXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoyNDIwOlx0XHRcdHJldCA9IGdtZW1fYWJvcnQoXHUwMDI2czJmZCk7XG5hcmNoL2FybTY0L2t2bS9tbXUuYy0yNDIxLVx0XHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkxNwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIGFzIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6CgoqKkFuYWx5emluZyBLVk0gRW50cnkgUG9pbnRzOiBBUk02NCB2cy4geDg2KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgS1ZNIGhhbmRsZXMgZ3Vlc3QgYWJvcnRzIGFuZCBtZW1vcnkgZmF1bHRzLiBJdCBsb29rcyBsaWtlIGBrdm1faGFuZGxlX2d1ZXN0X2Fib3J0YCBpcyB0aGUga2V5IGVudHJ5IHBvaW50IGZvciBBUk02NCBhcmNoaXRlY3R1cmVzLiBUaGF0IG1ha2VzIHNlbnNlLCBpdCYjMzk7cyB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gZm9yIGRlYWxpbmcgd2l0aCB0aG9zZSB1bmV4cGVjdGVkIGV2ZW50cy4gTm93LCBmb3IgeDg2LCBpdCYjMzk7cyBub3QgcXVpdGUgdGhlIHNhbWUuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGggaXMgdGhyb3VnaCBga3ZtX21tdV9mYXVsdGluX3Bmbl9nbWVtYCwgd2hpY2ggaXMgdXNlZCBieSBmdW5jdGlvbnMgbGlrZSBga3ZtX21tdV9mYXVsdGluX3BmbmAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGFuZCBtYXliZSBvdGhlcnMsIHJlbGF0ZWQgdG8gcGFnZSBmYXVsdHMgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LiBTbyBpdCBzZWVtcyBsaWtlIEFSTTY0IGFuZCB4ODYgdGFrZSBkaWZmZXJlbnQgcm91dGVzIHRvIGhhbmRsZSB0aGVzZSBzaW1pbGFyIGxvdy1sZXZlbCBpc3N1ZXMsIG9uZSB3aXRoIGEgZGVkaWNhdGVkIGFib3J0IGhhbmRsZXIgYW5kIHRoZSBvdGhlciBieSB3b3JraW5nIHRocm91Z2ggdGhlIE1NVSBmYXVsdCBoYW5kbGVycy4gSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIHg4NiBjb2RlIHRvIHBpbnBvaW50IHRoZSBleGFjdCBjYWxsaW5nIHN0cnVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX21tdV9mYXVsdGluX3Bmbl9nbWVtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvbW11LmM9NDYxMz1zdGF0aWMgdm9pZCBrdm1fbW11X2ZpbmlzaF9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ2MTktXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ2MjA6c3RhdGljIGludCBrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NjIxLVx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fcGFnZV9mYXVsdCAqZmF1bHQpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz00NjQzPXN0YXRpYyBpbnQgX19rdm1fbW11X2ZhdWx0aW5fcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ2NDgtXHRpZiAoZmF1bHQtXHUwMDNlaXNfcHJpdmF0ZSB8fCBrdm1fbWVtc2xvdF9pc19nbWVtX29ubHkoZmF1bHQtXHUwMDNlc2xvdCkpXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ2NDk6XHRcdHJldHVybiBrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW0odmNwdSwgZmF1bHQpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NjUwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTcwCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSBkZWVwIGluIEtWTSBpbnRlcm5hbHM6CgoqKkludmVzdGlnYXRpbmcgdGhlIFBhZ2UgRmF1bHQgSGFuZGxpbmcgUGF0aCBpbiBLVk0qKgoKQWxyaWdodCwgSSYjMzk7bSB0cmFjaW5nIHRocm91Z2ggdGhpcyBmYXVsdCBoYW5kbGluZyBsb2dpYy4gSSBzZWUgdGhhdCBgX19rdm1fbW11X2ZhdWx0aW5fcGZuYCBpcyBjYWxsZWQgYnkgYGt2bV9tbXVfZmF1bHRpbl9wZm5gLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCYjMzk7cyB0aGUgaW50ZXJuYWwgd29ya2VyIGZ1bmN0aW9uIGZvciB0aGUgaW5pdGlhbCBmYXVsdC1pbiBvcGVyYXRpb24uIEJ1dCB0aGlzIGhhcyBtYWRlIG1lIHRoaW5rLi4uIHdoYXQmIzM5O3MgdGhlIHJvbGUgb2YgYGt2bV9tbXVfZG9fcGFnZV9mYXVsdGAgaW4gdGhpcyB3aG9sZSBmbG93PyBJcyBpdCBhIGhpZ2hlci1sZXZlbCBlbnRyeSBwb2ludD8gSXMgaXQgY2FsbGVkIGJlZm9yZSBvciBhZnRlciB0aGlzIGBmYXVsdGluYCBzZXF1ZW5jZSwgb3IgaXMgaXQgYSBjb21wbGV0ZWx5IHNlcGFyYXRlIHBhdGg/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBmdW5jdGlvbnMsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIG92ZXJhbGwgaGFuZGxpbmcgb2YgcGFnZSBmYXVsdHMgd2l0aGluIHRoZSBLVk0gTU1VLiBJIHJlYWxseSBuZWVkIHRvIG1hcCBvdXQgdGhlIGVudGlyZSBjYWxsIGdyYXBoIHRvIGJlIHN1cmUuIFRoZXJlJiMzOTtzIGEgY2hhbmNlIHRoZXkgYXJlIGNvbXBsZXRlbHkgdW5yZWxhdGVkIGJ1dCBpdCBzZWVtcyB1bnVzdWFsLiBJdCB3b3VsZCBiZSB2YWx1YWJsZSB0byB1bmRlcnN0YW5kIHdoZXRoZXIgaXQgaXMgYSBwb3RlbnRpYWwgb3B0aW1pemF0aW9uLCBvciBpZiBvbmUgY2FsbHMgdGhlIG90aGVyLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9tbXVfZmF1bHRpbl9wZm4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS9tbXUuYz00NjEzPXN0YXRpYyB2b2lkIGt2bV9tbXVfZmluaXNoX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDYxOS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDYyMDpzdGF0aWMgaW50IGt2bV9tbXVfZmF1bHRpbl9wZm5fZ21lbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ2MjEtXHRcdFx0XHQgICAgc3RydWN0IGt2bV9wYWdlX2ZhdWx0ICpmYXVsdClcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ2NDItXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ2NDM6c3RhdGljIGludCBfX2t2bV9tbXVfZmF1bHRpbl9wZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NjQ0LVx0XHRcdFx0IHN0cnVjdCBrdm1fcGFnZV9mYXVsdCAqZmF1bHQpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NjQ4LVx0aWYgKGZhdWx0LVx1MDAzZWlzX3ByaXZhdGUgfHwga3ZtX21lbXNsb3RfaXNfZ21lbV9vbmx5KGZhdWx0LVx1MDAzZXNsb3QpKVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0NjQ5Olx0XHRyZXR1cm4ga3ZtX21tdV9mYXVsdGluX3Bmbl9nbWVtKHZjcHUsIGZhdWx0KTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDY1MC1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ2ODctXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ2ODg6c3RhdGljIGludCBrdm1fbW11X2ZhdWx0aW5fcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDY4OS1cdFx0XHQgICAgICAgc3RydWN0IGt2bV9wYWdlX2ZhdWx0ICpmYXVsdCwgdW5zaWduZWQgaW50IGFjY2Vzcylcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ3ODEtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ3ODI6XHRyZXQgPSBfX2t2bV9tbXVfZmF1bHRpbl9wZm4odmNwdSwgZmF1bHQpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NzgzLVx0aWYgKHJldCAhPSBSRVRfUEZfQ09OVElOVUUpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz00ODQwPXN0YXRpYyBpbnQgZGlyZWN0X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQgKmZhdWx0KVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDg1OC1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDg1OTpcdHIgPSBrdm1fbW11X2ZhdWx0aW5fcGZuKHZjcHUsIGZhdWx0LCBBQ0NfQUxMKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDg2MC1cdGlmIChyICE9IFJFVF9QRl9DT05USU5VRSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ5MzU9c3RhdGljIGludCBrdm1fdGRwX21tdV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ5NTAtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ5NTE6XHRyID0ga3ZtX21tdV9mYXVsdGluX3Bmbih2Y3B1LCBmYXVsdCwgQUNDX0FMTCk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ5NTItXHRpZiAociAhPSBSRVRfUEZfQ09OVElOVUUpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaD0yMjY9c3RydWN0IGt2bV9wYWdlX2ZhdWx0IHtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oLTI3OC1cbmFyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmg6Mjc5Olx0LyogT3V0cHV0cyBvZiBrdm1fbW11X2ZhdWx0aW5fcGZuKCkuICAqL1xuYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaC0yODAtXHR1bnNpZ25lZCBsb25nIG1tdV9zZXE7XG4tLVxuYXJjaC94ODYva3ZtL21tdS9wYWdpbmdfdG1wbC5oPTgwND1zdGF0aWMgaW50IEZOQU1FKHBhZ2VfZmF1bHQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9wYWdlX2ZhdWx0ICpmYXVsdClcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2luZ190bXBsLmgtODQxLVxuYXJjaC94ODYva3ZtL21tdS9wYWdpbmdfdG1wbC5oOjg0MjpcdHIgPSBrdm1fbW11X2ZhdWx0aW5fcGZuKHZjcHUsIGZhdWx0LCB3YWxrZXIucHRlX2FjY2Vzcyk7XG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2luZ190bXBsLmgtODQzLVx0aWYgKHIgIT0gUkVUX1BGX0NPTlRJTlVFKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDExMAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDMwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEtWTSBNZW1vcnkgTWFuYWdlbWVudCAtIEluaXRpYWwgVGhvdWdodHMqKgoKT2theSwgc28gSSYjMzk7dmUgc3BvdHRlZCBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IHdpdGggYGt2bV9nbWVtX2dldF9wZm5gLiBJdCYjMzk7cyByZWFjaGFibGUgZnJvbSBLVk0gcGFnZSBmYXVsdHMgd2hlbiBgZ3Vlc3RfbWVtZmRgIGlzIGluIHVzZSwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFRoZSBrZXkgZnVuY3Rpb25zIHRvIGludmVzdGlnYXRlIGFyZTogYGt2bV9nbWVtX2dldF9wZm5gLCBkZWZpbml0ZWx5LiBBbHNvLCBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCBgc2V2X2hhbmRsZV9ybXBfZmF1bHRgLCBhbmQgZm9yIEFSTTY0LCBga3ZtX2hhbmRsZV9ndWVzdF9hYm9ydGAuIFRoZW4sIG9uIHg4NiwgYGt2bV9tbXVfZG9fcGFnZV9mYXVsdGAgbG9va3MgbGlrZSBhIGdvb2QgZW50cnkgcG9pbnQgdG8gdHJhY2UgZnJvbS4gQWN0dWFsbHksIHdhaXQgLSBga3ZtX2dtZW1fZ2V0X3BmbmAgaXMgKnRoZSogQVBJIGZ1bmN0aW9uLCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBzdGFydC4KCkkmIzM5O2xsIGNoZWNrIGBrdm1fZ21lbV9nZXRfcGZuYCBpbiBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2AgZmlyc3QuIFRoZW4gSSYjMzk7bGwgY2hlY2sgYHNldl9oYW5kbGVfcm1wX2ZhdWx0YCBpbiBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AuIEFuZCBJIHNob3VsZCBhbHNvIGNvbnNpZGVyIGBrdm1fdHJhbnNsYXRlX3ZuY3JgLCB3aGljaCBpcyBpbiBgYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNgIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBzaW1pbGFyIGxvZ2ljIHRoZXJlLgoKVG8gYmUgcHJlY2lzZSwgSSB3aWxsIGZvY3VzIG9uIHRoZXNlIGtleSBmdW5jdGlvbnM6CgoqICAgYGt2bV9nbWVtX2dldF9wZm5gCiogICBgc2V2X2hhbmRsZV9ybXBfZmF1bHRgCiogICBga3ZtX3RyYW5zbGF0ZV92bmNyYAoKV2FpdCwgYGt2bV90cmFuc2xhdGVfdm5jcmAgaXMgc3RhdGljLCB3aGljaCBtYWtlcyBtZSB3b25kZXIgaWYgaXQmIzM5O3MgaW5saW5lZC4gSSBuZWVkIHRvIGJlIHN1cmUgdG8gY2hlY2sgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3RyYW5zbGF0ZV92bmNyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTE0MDc9c3RhdGljIHU2NCByZWFkX3ZuY3JfZWwyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNDExLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTQxMjpzdGF0aWMgaW50IGt2bV90cmFuc2xhdGVfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgKmlzX2dtZW0pXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNDEzLXtcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0xNTQyPWludCBrdm1faGFuZGxlX3ZuY3JfYWJvcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE1NjctXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxNTY4Olx0cmV0ID0ga3ZtX3RyYW5zbGF0ZV92bmNyKHZjcHUsIFx1MDAyNmlzX2dtZW0pO1xuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTU2OS1cdGlmIChyZXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwODIKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB3aGF0IEkmIzM5O20gbG9va2luZyBhdCwgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkRlYnVnZ2luZyBLVk0vU0VWLVNOUCBJbnRlcmFjdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byBzb21lIEtWTSBjb2RlIGFuZCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIHZpcnR1YWwgTk1JIGhhbmRsaW5nIGZvciBTRVYtU05QLiBUaGUgYGt2bV9oYW5kbGVfdm5jcl9hYm9ydGAgZnVuY3Rpb24gaXMgdGhlIGNydWNpYWwgZW50cnkgcG9pbnQgZm9yIGBrdm1fdHJhbnNsYXRlX3ZuY3JgLCB3aGljaCBpcyB3aGVyZSBJJiMzOTtsbCBiZWdpbiBteSBpbnZlc3RpZ2F0aW9uLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBnbWVtX2Fib3J0YCBmdW5jdGlvbi4gSSBrbm93IGl0JiMzOTtzIGludm9rZWQgYnkgYGt2bV9oYW5kbGVfZ3Vlc3RfYWJvcnRgLCB3aGljaCBpcyBsaWtlbHkgd2hlcmUgdGhlIGFib3J0IHNpZ25hbCBpcyBvcmlnaW5hdGluZyBmcm9tLiBJIHN1c3BlY3QgdGhlIGlzc3VlIGNvdWxkIGJlIHJlbGF0ZWQgdG8gbWVtb3J5IGFjY2VzcyBpc3N1ZXMgb3Igc29tZSBraW5kIG9mIGd1ZXN0LXNpZGUgaW50ZXJydXB0aW9uIG9yIGV4Y2VwdGlvbiB0aGF0JiMzOTtzIHRyaWdnZXJpbmcgdGhlIGFib3J0LiBOZXh0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGBfX3Nldl9zbnBfcmVsb2FkX3Ztc2FgIGFuZCB0aGUgZmxvdyB0aGF0IGludm9rZXMgaXQg4oCTIGl0IGFwcGVhcnMgdG8gYmUgY2FsbGVkIGJ5IGBzZXZfc25wX3JlbG9hZF92bXNhYCBvciBhIHJlbGF0ZWQgZnVuY3Rpb24sIHdoaWNoIHN1Z2dlc3RzIGEgcG9zc2libGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgVk0gc3RhdGUgc2F2ZS9yZXN0b3JlIG1lY2hhbmlzbSBkdXJpbmcgYW4gU0VWLVNOUCBwcm90ZWN0ZWQgb3BlcmF0aW9uLiBNeSBoeXBvdGhlc2lzIGlzIHRoYXQgdGhlcmUgbWlnaHQgYmUgYSBwcm9ibGVtIHdpdGggdGhlIHdheSB3ZSYjMzk7cmUgaGFuZGxpbmcgdGhlIFZNU0EgcmVsb2FkLCBwb3NzaWJseSBhIHJhY2UgY29uZGl0aW9uIG9yIGEgc3RhdGUgbWlzbWF0Y2ggdGhhdCYjMzk7cyB0cmlnZ2VyaW5nIHRoZSBhYm9ydC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cgdGhyb3VnaCBhbGwgb2YgdGhlc2UgY2FsbHMgdG8gZnVsbHkgdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19zZXZfc25wX3JlbG9hZF92bXNhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmM9Mzk4OD1zdGF0aWMgaW50IHNucF9iZWdpbl9wc2Moc3RydWN0IHZjcHVfc3ZtICpzdm0pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00MDI3LVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0MDI4OnN0YXRpYyB2b2lkIF9fc2V2X3NucF9yZWxvYWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSlcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDAyOS17XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00MDk5PXN0YXRpYyB2b2lkIHNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDExNy1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDExODpcdF9fc2V2X3NucF9yZWxvYWRfdm1zYSh2Y3B1LCBncGEpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00MTE5LVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDEzMD12b2lkIHNldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDEzNS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDEzNjpcdF9fc2V2X3NucF9yZWxvYWRfdm1zYSh2Y3B1LCBzZXZfZXMtXHUwMDNlc25wX2d1ZXN0X3Ztc2FfZ3BhKTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDEzNy19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTA1CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgTm9uLVN0YXRpYyBFbnRyeSBQb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGNvZGUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBgc2V2X3NucF9yZWxvYWRfdm1zYWAgaXMgdGhlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnQuIFRoYXQmIzM5O3MgbXkgc3RhcnRpbmcgcG9pbnQuIE5vdywgSSBuZWVkIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgZWxzZSBpcyBleHBvc2VkLiBMZXQmIzM5O3MgZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQgYW5kIGxpc3Qgb3V0IHRoZSBvdGhlciBub24tc3RhdGljIGVudHJ5IHBvaW50cyBzbyBJIGNhbiBzZWUgdGhlIHNjb3BlIG9mIHdoYXQgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBoZXJlLgoKQWxyaWdodCwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O3ZlIGdvdDoKCiogICBga3ZtX2dtZW1fZ2V0X3BmbmAKKiAgIGBzZXZfaGFuZGxlX3JtcF9mYXVsdGAKKiAgIGBzZXZfc25wX3JlbG9hZF92bXNhYAoqICAgYGt2bV9oYW5kbGVfdm5jcl9hYm9ydGAKKiAgIGBrdm1faGFuZGxlX2d1ZXN0X2Fib3J0YCAoc3BlY2lmaWNhbGx5IGZvciBBUk02NCwgbm90ZWQpCiogICBBbmQgZmluYWxseSwgYGt2bV9tbXVfZG9fcGFnZV9mYXVsdGAgKGZvciB4ODYpLiBIbW0uLi4gYGt2bV9tbXVfZG9fcGFnZV9mYXVsdGAuLi4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0OyBJJiMzOTttIGJldHRpbmcgdGhhdCYjMzk7cyBlaXRoZXIgYSBtYWNybyBvciBhIGZ1bmN0aW9uLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGlzIGlzIGEgbWFjcm8gb3IgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9tbXVfZG9fcGFnZV9mYXVsdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ5NzA9c3RhdGljIGludCBrdm1fdGRwX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQgKmZhdWx0KVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDk3OS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDk4MDpzdGF0aWMgaW50IGt2bV9tbXVfZG9fcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ5ODEtXHRcdFx0XHQgdTY0IGVyciwgYm9vbCBwcmVmZXRjaCwgaW50ICplbXVsYXRpb25fdHlwZSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTUwNDU9c3RhdGljIGludCBrdm1fdGRwX3BhZ2VfcHJlZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MDY0LVx0XHRjb25kX3Jlc2NoZWQoKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTA2NTpcdFx0ciA9IGt2bV9tbXVfZG9fcGFnZV9mYXVsdCh2Y3B1LCBncGEsIGVycm9yX2NvZGUsIHRydWUsIE5VTEwsIGxldmVsKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTA2Ni1cdH0gd2hpbGUgKHIgPT0gUkVUX1BGX1JFVFJZKTtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTUxMzU9dm9pZCBrdm1fYXJjaF9hc3luY19wYWdlX3JlYWR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9hc3luY19wZiAqd29yaylcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUxNTMtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUxNTQ6XHRyID0ga3ZtX21tdV9kb19wYWdlX2ZhdWx0KHZjcHUsIHdvcmstXHUwMDNlY3IyX29yX2dwYSwgd29yay1cdTAwM2VhcmNoLmVycm9yX2NvZGUsXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUxNTUtXHRcdFx0XHQgIHRydWUsIE5VTEwsIE5VTEwpO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NjU2Nz1pbnQgbm9pbmxpbmUga3ZtX21tdV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSwgdTY0IGVycm9yX2NvZGUsXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02NjAyLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2NjAzOlx0XHRyID0ga3ZtX21tdV9kb19wYWdlX2ZhdWx0KHZjcHUsIGNyMl9vcl9ncGEsIGVycm9yX2NvZGUsIGZhbHNlLFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02NjA0LVx0XHRcdFx0XHQgIFx1MDAyNmVtdWxhdGlvbl90eXBlLCBOVUxMKTtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY2MjMtXHQvKlxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2NjI0Olx0ICogTm9uZSBvZiBoYW5kbGVfbW1pb19wYWdlX2ZhdWx0KCksIGt2bV9tbXVfZG9fcGFnZV9mYXVsdCgpLCBvclxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02NjI1LVx0ICoga3ZtX21tdV93cml0ZV9wcm90ZWN0X2ZhdWx0KCkgcmV0dXJuIFJFVF9QRl9DT05USU5VRS5cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NjYyNjpcdCAqIGt2bV9tbXVfZG9fcGFnZV9mYXVsdCgpIG9ubHkgdXNlcyBSRVRfUEZfQ09OVElOVUUgaW50ZXJuYWxseSB0b1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02NjI3LVx0ICogaW5kaWNhdGUgY29udGludWluZyB0aGUgcGFnZSBmYXVsdCBoYW5kbGluZyB1bnRpbCB0byB0aGUgZmluYWxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oPTIyNj1zdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQge1xuYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaDoyMjc6XHQvKiBhcmd1bWVudHMgdG8ga3ZtX21tdV9kb19wYWdlX2ZhdWx0LiAgKi9cbmFyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmgtMjI4LVx0Y29uc3QgZ3BhX3QgYWRkcjtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oLTI5NC0gKiBSZXR1cm4gdmFsdWVzIG9mIGhhbmRsZV9tbWlvX3BhZ2VfZmF1bHQoKSwgbW11LnBhZ2VfZmF1bHQoKSwgZmFzdF9wYWdlX2ZhdWx0KCksXG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oOjI5NTogKiBhbmQgb2YgY291cnNlIGt2bV9tbXVfZG9fcGFnZV9mYXVsdCgpLlxuYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaC0yOTYtICpcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oPTMxMj1lbnVtIHtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oLTMyNS0gKiAgIFwmIzM0O1RFU1QgJXJheCwgJXJheCwgSk5aXCYjMzQ7LCBhcyBhbGwgXCYjMzQ7c3RvcCFcJiMzNDsgdmFsdWVzIGFyZSBub24temVybyxcbmFyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmg6MzI2OiAqIC0ga3ZtX21tdV9kb19wYWdlX2ZhdWx0KCkgdG8gcmV0dXJuIG90aGVyIFJFVF9QRl8qIGFzIGEgcG9zaXRpdmUgdmFsdWUuXG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oLTMyNy0gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2NDkKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB4ODYgUGFnZSBGYXVsdCBIYW5kbGVyKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gYGt2bV9tbXVfcGFnZV9mYXVsdGAsIHdoaWNoIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgaGFuZGxpbmcgcGFnZSBmYXVsdHMgb24geDg2LCB0aGUgY29yZSBvZiB0aGUgaXNzdWUuIFRoYXQgaW1tZWRpYXRlbHkgcG9pbnRzIG1lIHRvIGEgc3BlY2lmaWMgc2V0IG9mIGZ1bmN0aW9ucyBJIG5lZWQgdG8gc2NydXRpbml6ZSBtb3JlIGNsb3NlbHk6IGBrdm1fZ21lbV9nZXRfcGZuYCwgYHNldl9oYW5kbGVfcm1wX2ZhdWx0YCwgYHNldl9zbnBfcmVsb2FkX3Ztc2FgLCBga3ZtX2hhbmRsZV92bmNyX2Fib3J0YCwgYGt2bV9oYW5kbGVfZ3Vlc3RfYWJvcnRgLCBhbmQgb2YgY291cnNlLCB0aGUgaGFuZGxlciBpdHNlbGYsIGBrdm1fbW11X3BhZ2VfZmF1bHRgLiBUaGVzZSBhcmUgdGhlIGtleSBwbGF5ZXJzIGluIHRoaXMgZmF1bHQgaGFuZGxpbmcgc2NlbmFyaW8uCgpNeSBmaXJzdCBjaGVjayBpcyB0byB2ZXJpZnkgaWYgYGt2bV9nbWVtX2dldF9wZm5gIGlzIHN0YXRpYyBvciBleHBvcnRlZC4gQWgsIGdvb2QsIGl0JiMzOTtzIG5vbi1zdGF0aWMgYW5kIHJlc2lkZXMgd2l0aGluIGB2aXJ0L2t2bS9ndWVzdF9tZW1mZC5jYCwgbWVhbmluZyBJIGNhbiByZWFkaWx5IGFjY2VzcyBhbmQgZXhhbWluZSBpdC4KCk5vdywgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIHRvIHRoZSBjb25maWd1cmF0aW9ucyBzdXJyb3VuZGluZyB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLiBJIHNlZSB0aGF0IGBLVk1fR1VFU1RfTUVNRkRgIGlzIHNlbGVjdGVkIGZvciBib3RoIEFSTTY0IGFuZCB4ODZfNjQsIGJ1dCBpdCYjMzk7cyBub3QgYSB1c2VyLXNlbGVjdGFibGUgb3B0aW9uLCB3aGljaCBpcyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIuIEl0JiMzOTtzIGFjdHVhbGx5IHNlbGVjdGVkIHRocm91Z2ggYEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTYCwgb3IgYEtWTV9TV19QUk9URUNURURfVk1gLCBvciBqdXN0IGBLVk1gIGl0c2VsZiBmb3IgdGhvc2UgYXJjaGl0ZWN0dXJlcy4gSSBuZWVkIHRvIG5vdyBkZXRlcm1pbmUgaWYgYEtWTV9TV19QUk9URUNURURfVk1gIGlzIGEgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24sIGFzIHRoaXMgd291bGQgaW1wYWN0IG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSYjMzk7cyBiZWhhdmlvciBhbmQgdGhpcyBwYWdlIGZhdWx0JiMzOTtzIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTY5PWNvbmZpZyBLVk1fV0VSUk9SXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctODItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQyMAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OgoKKipFeGFtaW5pbmcgS1ZNIGFuZCBHdWVzdCBNZW1vcnkgUHJvdGVjdGlvbiBvbiB4ODYqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IGd1ZXN0IG1lbW9yeSBpcyBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSB4ODYgYXJjaGl0ZWN0dXJlIGFuZCBLVk0uIEkmIzM5O20gZm9jdXNpbmcgb24gc29mdHdhcmUtcHJvdGVjdGVkIFZNcywgYW5kIEkgc2VlIHRoYXQgYEtWTV9TV19QUk9URUNURURfVk1gIGlzIHRoZSBmbGFnIHRoYXQgZW5hYmxlcyBgZ3Vlc3RfbWVtZmRgIGZvciB0aGVzZSBWTXMuIEJ1dCB0aGVuIEkmIzM5O20gdGhpbmtpbmcsIGlzbiYjMzk7dCBgS1ZNX0dVRVNUX01FTUZEYCBhbHJlYWR5IGltcGxpY2l0bHkgc2VsZWN0ZWQgYnkgYEtWTV9YODZgIGlmIHdlJiMzOTtyZSBvbiBgWDg2XzY0YD8gVGhhdCBzZWVtcyBwb3RlbnRpYWxseSByZWR1bmRhbnQgb3IgbWF5YmUgdGhlcmUmIzM5O3MgYSBzcGVjaWZpYyBudWFuY2UgSSYjMzk7bSBtaXNzaW5nLiBUaW1lIHRvIGdvIHJpZ2h0IHRvIHRoZSBzb3VyY2UuIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGUgeDg2IGFyY2hpdGVjdHVyZSwgc3BlY2lmaWNhbGx5IGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AsIHRvIGNsYXJpZnkgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyAqcmVhbGx5KiBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IEtWTV9HVUVTVF9NRU1GRCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9LY29uZmlnPTIwPW1lbnVjb25maWcgS1ZNXG4tLVxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0zOC1cdHNlbGVjdCBHVUVTVF9QRVJGX0VWRU5UUyBpZiBQRVJGX0VWRU5UU1xuYXJjaC9hcm02NC9rdm0vS2NvbmZpZzozOTpcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkRcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctNDAtXHRoZWxwXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWc9MjA9Y29uZmlnIEtWTV9YODZcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy00OS1cdHNlbGVjdCBLVk1fV0VSUk9SIGlmIFdFUlJPUlxuYXJjaC94ODYva3ZtL0tjb25maWc6NTA6XHRzZWxlY3QgS1ZNX0dVRVNUX01FTUZEIGlmIFg4Nl82NFxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0OTQ4CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS1ZNIENvbmZpZ3VyYXRpb24gZm9yIFNFVioqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGl0IHNlZW1zIHRoYXQgaWYgd2UmIzM5O3JlIG9uIGFuIHg4Ni02NCBzeXN0ZW0sIGBLVk1fR1VFU1RfTUVNRkRgIGlzIGF1dG9tYXRpY2FsbHkgaW5jbHVkZWQgYnkgYEtWTV9YODZgLiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzLiBXZSBjYW4gYXNzdW1lIHRoYXQgaWYgYFg4Nl82NGAgaXMgc2V0IGNvcnJlY3RseSwgdGhlbiBgS1ZNX0dVRVNUX01FTUZEYCB3aWxsIGJlIGNvbmZpZ3VyZWQgYXMgcGFydCBvZiB0aGUgZXhpc3RpbmcgYEtWTV9YODZgIGNvbmZpZ3VyYXRpb24uCgpUaGVyZWZvcmUsIGZvciBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHRvIHdvcmssIHdlIHJlYWxseSBqdXN0IG5lZWQgYEtWTWAgZW5hYmxlZCwgYW5kIHRoZW4gYEtWTV9BTURgIGFzIHRoYXQgc2VlbXMgdG8gYmUgdGhlIGNyaXRpY2FsIGRlcGVuZGVuY3kgZm9yIG91ciBBTUQgaGFyZHdhcmUuCgpOb3csIHRoZSBuZXh0IHRoaW5nIHRvIHZlcmlmeSBpcyB0aGF0IGBLVk1fQU1EX1NFVmAgaXMgYWxzbyBwcm9wZXJseSBjb25maWd1cmVkIGFuZCBlbmFibGVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIFNFVi1zcGVjaWZpYyBwaWVjZXMgYXJlIGFsc28gdGFrZW4gY2FyZSBvZiBwcm9wZXJseS4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgYW5kIGNvbmZpcm0gdGhlIGBLVk1fQU1EX1NFVmAgc2V0dGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9BTURfU0VWJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTE0Nj1jb25maWcgS1ZNX0FNRFxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTM2NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQ5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBUaG91Z2h0IFByb2Nlc3Mgb24gS1ZNIENvbmZpZ3VyYXRpb24gYW5kIEZ1bmN0aW9uIFNlbGVjdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBvcHRpbWFsIGNvbmZpZ3VyYXRpb24gYW5kIGtleSBmdW5jdGlvbnMgdG8gaW5jbHVkZSBoZXJlLiBgS1ZNX0FNRF9TRVZgIGlzIGRlZmluaXRlbHkgYSBnb29kIGNob2ljZSwgYW5kIG9mIGNvdXJzZSwgdGhlIGJhc2UgYEtWTWAgY29uZmlndXJhdGlvbiBpdHNlbGYuCgpTbywgbGV0JiMzOTtzIGxpc3QgdGhvc2Ugb3V0OgpDb25maWdzOgotIGBLVk1gCi0gYEtWTV9BTURfU0VWYAoKV2FpdCwganVzdCB0byBjbGFyaWZ5LCBgS1ZNYCB3aWxsIGNvdmVyIEFSTTY0LCBzbyB0aGF0JiMzOTtzIGFsbCBJIG5lZWQgdGhlcmUuCgpOb3csIGxldCYjMzk7cyBtb3ZlIG9uIHRvIHRoZSBmdW5jdGlvbnMuIEkmIzM5O3ZlIGdvdCBhIGZldzogYGt2bV9nbWVtX2dldF9wZm5gLCBgc2V2X2hhbmRsZV9ybXBfZmF1bHRgLCBgc2V2X3NucF9yZWxvYWRfdm1zYWAsIGBrdm1faGFuZGxlX3ZuY3JfYWJvcnRgLCBga3ZtX2hhbmRsZV9ndWVzdF9hYm9ydGAsIGFuZCBga3ZtX21tdV9wYWdlX2ZhdWx0YC4KCkhtbSwgaG9sZCBvbi4gSSByZW1lbWJlciB0aGUgaW5zdHJ1Y3Rpb25zLCAmIzM0O0F2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLiYjMzQ7IFJpZ2h0LCBga3ZtX2hhbmRsZV9ndWVzdF9hYm9ydGAgYW5kIGBrdm1fbW11X3BhZ2VfZmF1bHRgIGFyZSAqdmVyeSogaG90IHBhdGhzLCBzbyB0aG9zZSBhcmUgb3V0LgoKT2theSwgbGV0JiMzOTtzIHJlLWV2YWx1YXRlLiBJIGNhbiBsaXN0IHRoZSByZW1haW5pbmcgZnVuY3Rpb25zOiBga3ZtX2dtZW1fZ2V0X3BmbmAsIGBzZXZfaGFuZGxlX3JtcF9mYXVsdGAsIGBzZXZfc25wX3JlbG9hZF92bXNhYCwgYGt2bV9oYW5kbGVfdm5jcl9hYm9ydGAuIFRob3NlIHNob3VsZCBiZSBzcGVjaWZpYyBlbm91Z2guCgpOb3csIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0IHRob3NlIHJlbWFpbmluZyBmdW5jdGlvbnMgYXJlbiYjMzk7dCBvdmVybHkgZ2VuZXJhbC4gYGt2bV9oYW5kbGVfdm5jcl9hYm9ydGAgaGFuZGxlcyBuZXN0ZWQgdmlydHVhbGl6YXRpb24gVk5DUiBhYm9ydHMg4oCTIHRoYXQmIzM5O3Mgc3BlY2lmaWMuIGBzZXZfaGFuZGxlX3JtcF9mYXVsdGAgaGFuZGxlcyBSTVAgZmF1bHRzLCBhbHNvIG5vdCBhIGdlbmVyaWMgaG90IHBhdGguIGBzZXZfc25wX3JlbG9hZF92bXNhYCBpcyBmb3IgU0VWLVNOUCBWTVNBIHJlbG9hZCwgYWdhaW4sIHNwZWNpZmljLiBBbmQgYGt2bV9nbWVtX2dldF9wZm5gIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIEkgbW9kaWZpZWQsIGNhbGxlZCB3aGVuIGZhdWx0aW5nIGluIGd1ZXN0X21lbWZkIHBhZ2VzLiBJdCYjMzk7cyBwZXJmZWN0bHkgc3BlY2lmaWMgdG8gdGhhdC4KClNvLCBteSBmaW5hbCBGb2N1c1N5bWJvbHMgc2hvdWxkIGJlOgoKLSBga3ZtX2dtZW1fZ2V0X3BmbmAKLSBgc2V2X2hhbmRsZV9ybXBfZmF1bHRgCi0gYHNldl9zbnBfcmVsb2FkX3Ztc2FgCi0gYGt2bV9oYW5kbGVfdm5jcl9hYm9ydGAKCkxldCBtZSBqdXN0IHF1aWNrbHkgY2hlY2sgdGhhdCBga3ZtX2dtZW1fZ2V0X3BmbmAgaXMgZXhwb3J0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTF9HUExcXChrdm1fZ21lbV9nZXRfcGZuXFwpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY0NTAKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipFeGFtaW5pbmcgdGhlIEd1ZXN0IE1lbWZkIEltcGxlbWVudGF0aW9uIGluIEtWTSoqCgpBbHJpZ2h0LCBzbyB0aGUgY2x1ZSBpcyB0aGF0IHdoYXRldmVyIHRoaXMgcmVsYXRlcyB0byBpc24mIzM5O3QgKmV4cG9ydGVkKiwgd2hpY2ggaXMgaW1wb3J0YW50IGNvbnRleHQuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgKm5vbi1zdGF0aWMqIGluIGB2aXJ0L2t2bS9ndWVzdF9tZW1mZC5jYCBpcyBzaWduaWZpY2FudC4gVGhhdCBzdHJvbmdseSBzdWdnZXN0cyBpdCYjMzk7cyBhIGZpbGUsIGJ1dCBzb21ldGhpbmcgbG9jYWwgdG8gdGhlIEtWTSB2aXJ0dWFsaXNhdGlvbiwgYW5kIHRoZXJlJiMzOTtzIGRlZmluaXRlbHkgc29tZSBsb2NhbCB2YXJpYWJsZSBpbnRlcmFjdGlvbiB0aGVyZS4gTXkgaW1tZWRpYXRlIGFjdGlvbiBpcyB0byBkaXZlIGludG8gYHZpcnQva3ZtL2d1ZXN0X21lbWZkLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgbm9uLXN0YXRpYyBlbGVtZW50IGlzLCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZCwgYW5kIHdoYXQgaXRzIHJlbGF0aW9uc2hpcCBpcyB0byBhbnkgZXh0ZXJuYWwgaW50ZXJmYWNlcywgY29uc2lkZXJpbmcgaXQmIzM5O3Mgbm90IGV4cG9ydGVkLiBUaW1lIHRvIGdvIHNwZWx1bmtpbmcgaW4gdGhlIGNvZGUhIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBnb2luZyBvbiBpbiB0aGF0IHNwZWNpZmljIGZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBrdm1fZ21lbV9nZXRfcGZuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0yNTgxPXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fbWVtX2lzX3ByaXZhdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pXG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI1ODctI2lmZGVmIENPTkZJR19LVk1fR1VFU1RfTUVNRkRcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoyNTg4OmludCBrdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNTg5LVx0XHQgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIGludCAqbWF4X29yZGVyKTtcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNTkwLSNlbHNlXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MjU5MTpzdGF0aWMgaW5saW5lIGludCBrdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBrdm0gKmt2bSxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNTkyLVx0XHRcdFx0ICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwgZ2ZuX3QgZ2ZuLFxuLS1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM9NzE3PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fa3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTc1Mi1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6NzUzOmludCBrdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNzU0LVx0XHQgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIGludCAqbWF4X29yZGVyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzEzMgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDEwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBhIGdsb2JhbCBmdW5jdGlvbiwgZ290IGl0LiBMZXQgbWUgc2VlLi4uIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYEtWTWAgYW5kIGBLVk1fQU1EX1NFVmAuIEhtbSwgYnV0IHdhaXQgYSBzZWNvbmQuIEkgdGhpbmsgYEtWTV9TV19QUk9URUNURURfVk1gIGNvdWxkIGFjdHVhbGx5IGJlIGluY3JlZGlibHkgdXNlZnVsIGZvciB0ZXN0aW5nIGBndWVzdF9tZW1mZGAgb24geDg2IGFyY2hpdGVjdHVyZXMsIGV2ZW4gd2l0aG91dCBTRVYgb3IgVERYLiBUaGF0IHdvdWxkIG9wZW4gdXAgYSB3aG9sZSBuZXcgYXZlbnVlIGZvciBleHBlcmltZW50YXRpb24gYW5kIHZhbGlkYXRpb24uCgpSaWdodCwgc28gbGV0JiMzOTtzIGFkZCBgS1ZNX1NXX1BST1RFQ1RFRF9WTWAgdG8gdGhlIGBFbmFibGVDb25maWdzYCBsaXN0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYWN0dWFsbHkgYSB2YWxpZCBjb25maWcsIHRob3VnaC4gR290dGEgZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyBhIHJlY29nbml6ZWQgYW5kIHN1cHBvcnRlZCBvcHRpb24gYmVmb3JlIEkgZ2V0IHRvbyBjYXJyaWVkIGF3YXkuIEkgZG9uJiMzOTt0IHdhbnQgdG8gY2hhc2UgYSBkZWFkIGVuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9Njk9Y29uZmlnIEtWTV9XRVJST1Jcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NTQ0CgkJCQkJCQlvdXRwdXQ6IDE5NgoJCQkJCQkJdGhvdWdodHM6IDE0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLVk0gUGF0Y2gqKgoKT2theSwgeWVzLCBJJiMzOTt2ZSBnb3QgaXQuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UuIFNvLCB0aGUga2V5IGhlcmUgaXMgdGhlc2UgRW5hYmxlQ29uZmlnczogYEtWTWAsIGBLVk1fQU1EX1NFVmAsIGFuZCBgS1ZNX1NXX1BST1RFQ1RFRF9WTWAuIFRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IGFsdGVycyBob3cgYGt2bV9nbWVtX2dldF9wZm5gIGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBkaXRjaGluZyB0aGUgYHN0cnVjdCBwYWdlICoqcGFnZWAgYXJndW1lbnQgYW5kLCBjcnVjaWFsbHksIGl0JiMzOTtzIGRyb3BwaW5nIHRoZSBmb2xpbyByZWZlcmVuY2UgcHJpb3IgdG8gcmV0dXJuaW5nLiBJIGNhbiBpbW1lZGlhdGVseSBzZWUgdGhlIGltcGxpY2F0aW9ucy4KClRoaXMgYWZmZWN0cyBob3cgS1ZNIG1hbmFnZXMgbWVtb3J5IGJhY2tpbmcgc3BlY2lmaWNhbGx5IGZvciBgZ3Vlc3RfbWVtZmRgLiBBbmQgd2UgYWxsIGtub3cgYGd1ZXN0X21lbWZkYCBpcyBmb3VuZGF0aW9uYWwgZm9yIGNvbmZpZGVudGlhbCBjb21wdXRpbmcuIFdlJiMzOTtyZSB0YWxraW5nIFNFVi1TTlAsIFREWCwgYW5kIEFSTSBDQ0Eg4oCTIGFsbCBvZiB0aGUgYmlnIHBsYXllcnMuIFRoZSBjaGFuZ2VzIGFyZSB0cmlnZ2VyZWQgdGhyb3VnaCBLVk0gaW9jdGxzIGFuZCBwYWdlIGZhdWx0cyB3aGVuIHV0aWxpemluZyBgZ3Vlc3RfbWVtZmRgLiBJIG5lZWQgdG8gZW5zdXJlIHRoaXMgaXMgaGFuZGxlZCBjb3JyZWN0bHkuIExldCYjMzk7cyBjYWxsIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9BTURfU0VWJiMzNDssCiAgICAmIzM0O0tWTV9TV19QUk9URUNURURfVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fZ21lbV9nZXRfcGZuJiMzNDssCiAgICAmIzM0O3Nldl9oYW5kbGVfcm1wX2ZhdWx0JiMzNDssCiAgICAmIzM0O3Nldl9zbnBfcmVsb2FkX3Ztc2EmIzM0OywKICAgICYjMzQ7a3ZtX2hhbmRsZV92bmNyX2Fib3J0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIHNpZ25hdHVyZSBhbmQgYmVoYXZpb3Igb2YgYGt2bV9nbWVtX2dldF9wZm5gIGJ5IHJlbW92aW5nIHRoZSBgc3RydWN0IHBhZ2UgKipwYWdlYCBhcmd1bWVudCBhbmQgZHJvcHBpbmcgdGhlIGZvbGlvIHJlZmVyZW5jZSBiZWZvcmUgcmV0dXJuaW5nLiBUaGlzIGFmZmVjdHMgaG93IEtWTSBoYW5kbGVzIG1lbW9yeSBiYWNraW5nIGZvciBndWVzdF9tZW1mZCwgd2hpY2ggaXMgYSBjb3JlIGZlYXR1cmUgZm9yIGNvbmZpZGVudGlhbCBjb21wdXRpbmcgKFNFVi1TTlAsIFREWCwgQVJNIENDQSkuIFRoZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIHBhZ2UgZmF1bHRzIHdoZW4gdXNpbmcgZ3Vlc3RfbWVtZmQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EX1NFViYjMzQ7LAogICAgJiMzNDtLVk1fU1dfUFJPVEVDVEVEX1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2dtZW1fZ2V0X3BmbiYjMzQ7LAogICAgJiMzNDtzZXZfaGFuZGxlX3JtcF9mYXVsdCYjMzQ7LAogICAgJiMzNDtzZXZfc25wX3JlbG9hZF92bXNhJiMzNDssCiAgICAmIzM0O2t2bV9oYW5kbGVfdm5jcl9hYm9ydCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSBzaWduYXR1cmUgYW5kIGJlaGF2aW9yIG9mIGBrdm1fZ21lbV9nZXRfcGZuYCBieSByZW1vdmluZyB0aGUgYHN0cnVjdCBwYWdlICoqcGFnZWAgYXJndW1lbnQgYW5kIGRyb3BwaW5nIHRoZSBmb2xpbyByZWZlcmVuY2UgYmVmb3JlIHJldHVybmluZy4gVGhpcyBhZmZlY3RzIGhvdyBLVk0gaGFuZGxlcyBtZW1vcnkgYmFja2luZyBmb3IgZ3Vlc3RfbWVtZmQsIHdoaWNoIGlzIGEgY29yZSBmZWF0dXJlIGZvciBjb25maWRlbnRpYWwgY29tcHV0aW5nIChTRVYtU05QLCBURFgsIEFSTSBDQ0EpLiBUaGUgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBwYWdlIGZhdWx0cyB3aGVuIHVzaW5nIGd1ZXN0X21lbWZkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOToyMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjIxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBga3ZtX2dtZW1fZ2V0X3BmbigpYCB0byByZW1vdmUgdGhlIGBzdHJ1Y3QgcGFnZSAqKnBhZ2VgIGFyZ3VtZW50IGFuZCBkcm9wcyB0aGUgYXNzb2NpYXRlZCBwYWdlIHJlZmVyZW5jZSBjb3VudGluZyAoYGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZWAsIGBrdm1fcmVsZWFzZV9wYWdlX2NsZWFuYCwgZXRjLikgYWNyb3NzIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMgKGFybTY0LCB4ODYpLiBUaGlzIGlzIGEgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHJlZmNvdW50aW5nIGNoYW5nZS4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBhbmQgbm8gaW5mby1sZWFrcy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSB3b3VsZCBsaWtlbHkgYmUgdXNlLWFmdGVyLWZyZWUsIG1lbW9yeSBsZWFrcywgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDAwZmNlYWU0MTBjMDU0MTA1ZWU2ZTk2YTM3YjQxNjYxZTNlMmExYmYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAyNiAwOToxOTo0MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL21tdS5jIGIvYXJjaC9hcm02NC9rdm0vbW11LmMKaW5kZXggOWJhODY0NTBmZTRhZi4uZDU3ZjgxODFmMWI3ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vbW11LmMKQEAgLTE2MTMsNyAmIzQzOzE2MTMsNiBAQCBzdGF0aWMgaW50IGdtZW1fYWJvcnQoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKQogCWVudW0ga3ZtX3BndGFibGVfcHJvdCBwcm90ID0gS1ZNX1BHVEFCTEVfUFJPVF9SOwogCXN0cnVjdCBrdm1fcGd0YWJsZSAqcGd0ID0gczJmZC0mZ3Q7dmNwdS0mZ3Q7YXJjaC5od19tbXUtJmd0O3BndDsKIAl1bnNpZ25lZCBsb25nIG1tdV9zZXE7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7CiAJc3RydWN0IGt2bSAqa3ZtID0gczJmZC0mZ3Q7dmNwdS0mZ3Q7a3ZtOwogCXZvaWQgKm1lbWNhY2hlID0gTlVMTDsKIAlrdm1fcGZuX3QgcGZuOwpAQCAtMTY0MSw3ICYjNDM7MTY0MCw3IEBAIHN0YXRpYyBpbnQgZ21lbV9hYm9ydChjb25zdCBzdHJ1Y3Qga3ZtX3MyX2ZhdWx0X2Rlc2MgKnMyZmQpCiAJLyogUGFpcnMgd2l0aCB0aGUgc21wX3dtYigpIGluIGt2bV9tbXVfaW52YWxpZGF0ZV9lbmQoKS4gKi8KIAlzbXBfcm1iKCk7CiAKLQlyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKGt2bSwgczJmZC0mZ3Q7bWVtc2xvdCwgZ2ZuLCAmYW1wO3BmbiwgJmFtcDtwYWdlLCBOVUxMKTsKJiM0MzsJcmV0ID0ga3ZtX2dtZW1fZ2V0X3Bmbihrdm0sIHMyZmQtJmd0O21lbXNsb3QsIGdmbiwgJmFtcDtwZm4sIE5VTEwpOwogCWlmIChyZXQpIHsKIAkJa3ZtX3ByZXBhcmVfbWVtb3J5X2ZhdWx0X2V4aXQoczJmZC0mZ3Q7dmNwdSwgczJmZC0mZ3Q7ZmF1bHRfaXBhLCBQQUdFX1NJWkUsCiAJCQkJCSAgICAgIHdyaXRlX2ZhdWx0LCBleGVjX2ZhdWx0LCBmYWxzZSk7CkBAIC0xNjgxLDcgJiM0MzsxNjgwLDYgQEAgc3RhdGljIGludCBnbWVtX2Fib3J0KGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZCkKIAl9CiAKIG91dF91bmxvY2s6Ci0Ja3ZtX3JlbGVhc2VfZmF1bHRpbl9wYWdlKGt2bSwgcGFnZSwgISFyZXQsIHByb3QgJmFtcDsgS1ZNX1BHVEFCTEVfUFJPVF9XKTsKIAlrdm1fZmF1bHRfdW5sb2NrKGt2bSk7CiAKIAlpZiAoKHByb3QgJmFtcDsgS1ZNX1BHVEFCTEVfUFJPVF9XKSAmYW1wOyZhbXA7ICFyZXQpCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYyBiL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jCmluZGV4IDE3MTIzZjBiNmRhYmEuLmRkNjI4NDBkMzY3NDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jCkBAIC0xNDE1LDcgJiM0MzsxNDE1LDcgQEAgc3RhdGljIGludCBrdm1fdHJhbnNsYXRlX3ZuY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sICppc19nbWVtKQogCWJvb2wgd3JpdGVfZmF1bHQsIHdyaXRhYmxlOwogCXVuc2lnbmVkIGxvbmcgbW11X3NlcTsKIAlzdHJ1Y3Qgdm5jcl90bGIgKnZ0OwotCXN0cnVjdCBwYWdlICpwYWdlOwomIzQzOwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7CiAJdTY0IHZhLCBwZm4sIGdmbjsKIAlpbnQgcmV0OwogCkBAIC0xNDcxLDcgJiM0MzsxNDcxLDcgQEAgc3RhdGljIGludCBrdm1fdHJhbnNsYXRlX3ZuY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sICppc19nbWVtKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KIAl9IGVsc2UgewotCQlyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKHZjcHUtJmd0O2t2bSwgbWVtc2xvdCwgZ2ZuLCAmYW1wO3BmbiwgJmFtcDtwYWdlLCBOVUxMKTsKJiM0MzsJCXJldCA9IGt2bV9nbWVtX2dldF9wZm4odmNwdS0mZ3Q7a3ZtLCBtZW1zbG90LCBnZm4sICZhbXA7cGZuLCBOVUxMKTsKIAkJaWYgKHJldCkgewogCQkJa3ZtX3ByZXBhcmVfbWVtb3J5X2ZhdWx0X2V4aXQodmNwdSwgdnQtJmd0O3dyLnBhLCBQQUdFX1NJWkUsCiAJCQkJCSAgICAgIHdyaXRlX2ZhdWx0LCBmYWxzZSwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmMKaW5kZXggMDY0ZWNjMzNiOTI2Ny4uOTQ3YzljZDg0MzQ1MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jCkBAIC00NjI4LDcgJiM0Mzs0NjI4LDcgQEAgc3RhdGljIGludCBrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCX0KIAogCXIgPSBrdm1fZ21lbV9nZXRfcGZuKHZjcHUtJmd0O2t2bSwgZmF1bHQtJmd0O3Nsb3QsIGZhdWx0LSZndDtnZm4sICZhbXA7ZmF1bHQtJmd0O3BmbiwKLQkJCSAgICAgJmFtcDtmYXVsdC0mZ3Q7cmVmY291bnRlZF9wYWdlLCAmYW1wO21heF9vcmRlcik7CiYjNDM7CQkJICAgICAmYW1wO21heF9vcmRlcik7CiAJaWYgKHIpIHsKIAkJa3ZtX21tdV9wcmVwYXJlX21lbW9yeV9mYXVsdF9leGl0KHZjcHUsIGZhdWx0KTsKIAkJcmV0dXJuIHI7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuYwppbmRleCA1NzA1NzIzZjFmNDEyLi4wYTg4N2Y4ZTA1ZDNhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMKQEAgLTQwMzIsNyAmIzQzOzQwMzIsNiBAQCBzdGF0aWMgdm9pZCBfX3Nldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEpCiAJc3RydWN0IGt2bSAqa3ZtID0gdmNwdS0mZ3Q7a3ZtOwogCWdmbl90IGdmbiA9IGdwYV90b19nZm4oZ3BhKTsKIAl1bnNpZ25lZCBsb25nIG1tdV9zZXE7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7CiAJa3ZtX3Bmbl90IHBmbjsKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtzdm0tJmd0O3Nldl9lcy5zbnBfdm1zYV9tdXRleCk7CkBAIC00MDc2LDcgJiM0Mzs0MDc1LDcgQEAgc3RhdGljIHZvaWQgX19zZXZfc25wX3JlbG9hZF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhKQogCSAqIFRoZSBuZXcgVk1TQSB3aWxsIGJlIHByaXZhdGUgbWVtb3J5IGd1ZXN0IG1lbW9yeSwgc28gcmV0cmlldmUgdGhlCiAJICogUEZOIGZyb20gdGhlIGdtZW0gYmFja2VuZC4KIAkgKi8KLQlpZiAoa3ZtX2dtZW1fZ2V0X3Bmbih2Y3B1LSZndDtrdm0sIHNsb3QsIGdmbiwgJmFtcDtwZm4sICZhbXA7cGFnZSwgTlVMTCkpCiYjNDM7CWlmIChrdm1fZ21lbV9nZXRfcGZuKHZjcHUtJmd0O2t2bSwgc2xvdCwgZ2ZuLCAmYW1wO3BmbiwgTlVMTCkpCiAJCXJldHVybjsKIAogCXJlYWRfbG9jaygmYW1wO2t2bS0mZ3Q7bW11X2xvY2spOwpAQCAtNDA5Miw4ICYjNDM7NDA5MSw2IEBAIHN0YXRpYyB2b2lkIF9fc2V2X3NucF9yZWxvYWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSkKIAllbHNlCiAJCXN2bS0mZ3Q7dm1jYi0mZ3Q7Y29udHJvbC52bXNhX3BhID0gcGZuX3RvX2hwYShwZm4pOwogCXJlYWRfdW5sb2NrKCZhbXA7a3ZtLSZndDttbXVfbG9jayk7Ci0KLQlrdm1fcmVsZWFzZV9wYWdlX2NsZWFuKHBhZ2UpOwogfQogCiAvKgpAQCAtNTAxOSw3ICYjNDM7NTAxNiw3IEBAIHZvaWQgc2V2X2hhbmRsZV9ybXBfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHU2NCBlcnJvcl9jb2RlKQogCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7CiAJc3RydWN0IGt2bSAqa3ZtID0gdmNwdS0mZ3Q7a3ZtOwogCWludCBvcmRlciwgcm1wX2xldmVsLCByZXQ7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbW11X3NlcTsKIAlib29sIGFzc2lnbmVkOwogCWt2bV9wZm5fdCBwZm47CiAJZ2ZuX3QgZ2ZuOwpAQCAtNTA0Niw3ICYjNDM7NTA0MywxMCBAQCB2b2lkIHNldl9oYW5kbGVfcm1wX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCB1NjQgZXJyb3JfY29kZSkKIAkJcmV0dXJuOwogCX0KIAotCXJldCA9IGt2bV9nbWVtX2dldF9wZm4oa3ZtLCBzbG90LCBnZm4sICZhbXA7cGZuLCAmYW1wO3BhZ2UsICZhbXA7b3JkZXIpOwomIzQzOwltbXVfc2VxID0ga3ZtLSZndDttbXVfaW52YWxpZGF0ZV9zZXE7CiYjNDM7CXNtcF9ybWIoKTsKJiM0MzsKJiM0MzsJcmV0ID0ga3ZtX2dtZW1fZ2V0X3Bmbihrdm0sIHNsb3QsIGdmbiwgJmFtcDtwZm4sICZhbXA7b3JkZXIpOwogCWlmIChyZXQpIHsKIAkJcHJfd2Fybl9yYXRlbGltaXRlZCgmIzM0O1NFVjogVW5leHBlY3RlZCBSTVAgZmF1bHQsIG5vIGJhY2tpbmcgcGFnZSBmb3IgcHJpdmF0ZSBHUEEgMHglbGx4XG4mIzM0OywKIAkJCQkgICAgZ3BhKTsKQEAgLTUwNTUsOSAmIzQzOzUwNTUsMTMgQEAgdm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpCiAKIAlyZXQgPSBzbnBfbG9va3VwX3JtcGVudHJ5KHBmbiwgJmFtcDthc3NpZ25lZCwgJmFtcDtybXBfbGV2ZWwpOwogCWlmIChyZXQgfHwgIWFzc2lnbmVkKSB7Ci0JCXByX3dhcm5fcmF0ZWxpbWl0ZWQoJiMzNDtTRVY6IFVuZXhwZWN0ZWQgUk1QIGZhdWx0LCBubyBhc3NpZ25lZCBSTVAgZW50cnkgZm91bmQgZm9yIEdQQSAweCVsbHggUEZOIDB4JWxseCBlcnJvciAlZFxuJiMzNDssCi0JCQkJICAgIGdwYSwgcGZuLCByZXQpOwotCQlnb3RvIG91dF9ub190cmFjZTsKJiM0MzsJCWd1YXJkKHJlYWRfbG9jaykoJmFtcDtrdm0tJmd0O21tdV9sb2NrKTsKJiM0MzsKJiM0MzsJCWlmICghbW11X2ludmFsaWRhdGVfcmV0cnlfZ2ZuKGt2bSwgbW11X3NlcSwgZ2ZuKSkKJiM0MzsJCQlwcl93YXJuX3JhdGVsaW1pdGVkKCYjMzQ7U0VWOiBVbmV4cGVjdGVkIFJNUCBmYXVsdCwgbm8gYXNzaWduZWQgUk1QIGVudHJ5IGZvdW5kIGZvciBHUEEgMHglbGx4IFBGTiAweCVsbHggZXJyb3IgJWRcbiYjMzQ7LAomIzQzOwkJCQkJICAgIGdwYSwgcGZuLCByZXQpOwomIzQzOwomIzQzOwkJcmV0dXJuOwogCX0KIAogCS8qCkBAIC01MDg1LDI2ICYjNDM7NTA4OSwzMSBAQCB2b2lkIHNldl9oYW5kbGVfcm1wX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCB1NjQgZXJyb3JfY29kZSkKIAlpZiAocm1wX2xldmVsID09IFBHX0xFVkVMXzRLKQogCQlnb3RvIG91dDsKIAotCXJldCA9IHNucF9ybXB0YWJsZV9wc21hc2gocGZuKTsKLQlpZiAocmV0KSB7Ci0JCS8qCi0JCSAqIExvb2sgaXQgdXAgYWdhaW4uIElmIGl0JiMzOTtzIDRLIG5vdyB0aGVuIHRoZSBQU01BU0ggbWF5IGhhdmUKLQkJICogcmFjZWQgd2l0aCBhbm90aGVyIHByb2Nlc3MgYW5kIHRoZSBpc3N1ZSBoYXMgYWxyZWFkeSByZXNvbHZlZAotCQkgKiBpdHNlbGYuCi0JCSAqLwotCQlpZiAoIXNucF9sb29rdXBfcm1wZW50cnkocGZuLCAmYW1wO2Fzc2lnbmVkLCAmYW1wO3JtcF9sZXZlbCkgJmFtcDsmYW1wOwotCQkgICAgYXNzaWduZWQgJmFtcDsmYW1wOyBybXBfbGV2ZWwgPT0gUEdfTEVWRUxfNEspCiYjNDM7CXNjb3BlZF9ndWFyZChyZWFkX2xvY2ssICZhbXA7a3ZtLSZndDttbXVfbG9jaykgewomIzQzOwkJaWYgKG1tdV9pbnZhbGlkYXRlX3JldHJ5X2dmbihrdm0sIG1tdV9zZXEsIGdmbikpCiAJCQlnb3RvIG91dDsKIAotCQlwcl93YXJuX3JhdGVsaW1pdGVkKCYjMzQ7U0VWOiBVbmFibGUgdG8gc3BsaXQgUk1QIGVudHJ5IGZvciBHUEEgMHglbGx4IFBGTiAweCVsbHggcmV0ICVkXG4mIzM0OywKLQkJCQkgICAgZ3BhLCBwZm4sIHJldCk7CiYjNDM7CQlyZXQgPSBzbnBfcm1wdGFibGVfcHNtYXNoKHBmbik7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBMb29rIGl0IHVwIGFnYWluLiBJZiBpdCYjMzk7cyA0SyBub3cgdGhlbiB0aGUgUFNNQVNIIG1heQomIzQzOwkJCSAqIGhhdmUgcmFjZWQgd2l0aCBhbm90aGVyIHByb2Nlc3MgYW5kIHRoZSBpc3N1ZSBoYXMKJiM0MzsJCQkgKiBhbHJlYWR5IHJlc29sdmVkIGl0c2VsZi4gSWYgaXQmIzM5O3Mgbm90IGFzc2lnbmVkLCB0aGVuCiYjNDM7CQkJICogdGhpcyBtdXN0IGhhdmUgcmFjZWQgd2l0aCBhbm90aGVyIHByb2Nlc3MgdGhhdCBtYWRlCiYjNDM7CQkJICogdGhpcyBwYWdlIHNoYXJlZC4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAoIXNucF9sb29rdXBfcm1wZW50cnkocGZuLCAmYW1wO2Fzc2lnbmVkLCAmYW1wO3JtcF9sZXZlbCkgJmFtcDsmYW1wOwomIzQzOwkJCSAgICAoKGFzc2lnbmVkICZhbXA7JmFtcDsgcm1wX2xldmVsID09IFBHX0xFVkVMXzRLKSB8fCAhYXNzaWduZWQpKQomIzQzOwkJCQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJCQlwcl93YXJuX3JhdGVsaW1pdGVkKCYjMzQ7U0VWOiBVbmFibGUgdG8gc3BsaXQgUk1QIGVudHJ5IGZvciBHUEEgMHglbGx4IFBGTiAweCVsbHggcmV0ICVkXG4mIzM0OywKJiM0MzsJCQkJCSAgICBncGEsIHBmbiwgcmV0KTsKJiM0MzsJCX0KIAl9CiAKIAlrdm1femFwX2dmbl9yYW5nZShrdm0sIGdmbiwgZ2ZuICYjNDM7IFBUUlNfUEVSX1BNRCk7CiBvdXQ6CiAJdHJhY2Vfa3ZtX3JtcF9mYXVsdCh2Y3B1LCBncGEsIHBmbiwgZXJyb3JfY29kZSwgcm1wX2xldmVsLCByZXQpOwotb3V0X25vX3RyYWNlOgotCWt2bV9yZWxlYXNlX3BhZ2VfdW51c2VkKHBhZ2UpOwogfQogCiBzdGF0aWMgYm9vbCBpc19wZm5fcmFuZ2Vfc2hhcmVkKGt2bV9wZm5fdCBzdGFydCwga3ZtX3Bmbl90IGVuZCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAppbmRleCAwM2JmYzkyODY0YjZlLi41MDI0NjUxMTljYTBjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCkBAIC0yNTg2LDEzICYjNDM7MjU4NiwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wga3ZtX21lbV9pc19wcml2YXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKQogCiAjaWZkZWYgQ09ORklHX0tWTV9HVUVTVF9NRU1GRAogaW50IGt2bV9nbWVtX2dldF9wZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LAotCQkgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIHN0cnVjdCBwYWdlICoqcGFnZSwKLQkJICAgICBpbnQgKm1heF9vcmRlcik7CiYjNDM7CQkgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIGludCAqbWF4X29yZGVyKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBrdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBrdm0gKmt2bSwKIAkJCQkgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LCBnZm5fdCBnZm4sCi0JCQkJICAga3ZtX3Bmbl90ICpwZm4sIHN0cnVjdCBwYWdlICoqcGFnZSwKLQkJCQkgICBpbnQgKm1heF9vcmRlcikKJiM0MzsJCQkJICAga3ZtX3Bmbl90ICpwZm4sIGludCAqbWF4X29yZGVyKQogewogCUtWTV9CVUdfT04oMSwga3ZtKTsKIAlyZXR1cm4gLUVJTzsKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jCmluZGV4IGI1OTY0ODZkMTg0Y2EuLjU4OTc2MjE0MGMzZWYgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMKJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYwpAQCAtNzUxLDggJiM0Mzs3NTEsNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX2t2bV9nbWVtX2dldF9wZm4oc3RydWN0IGZpbGUgKmZpbGUsCiB9CiAKIGludCBrdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwKLQkJICAgICBnZm5fdCBnZm4sIGt2bV9wZm5fdCAqcGZuLCBzdHJ1Y3QgcGFnZSAqKnBhZ2UsCi0JCSAgICAgaW50ICptYXhfb3JkZXIpCiYjNDM7CQkgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIGludCAqbWF4X29yZGVyKQogewogCXBnb2ZmX3QgaW5kZXggPSBrdm1fZ21lbV9nZXRfaW5kZXgoc2xvdCwgZ2ZuKTsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvOwpAQCAtNzgwLDExICYjNDM7Nzc5LDcgQEAgaW50IGt2bV9nbWVtX2dldF9wZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LAogI2VuZGlmCiAKIAlmb2xpb191bmxvY2soZm9saW8pOwotCi0JaWYgKCFyKQotCQkqcGFnZSA9IGZvbGlvX2ZpbGVfcGFnZShmb2xpbywgaW5kZXgpOwotCWVsc2UKLQkJZm9saW9fcHV0KGZvbGlvKTsKJiM0MzsJZm9saW9fcHV0KGZvbGlvKTsKIAogCXJldHVybiByOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU4OQoJCQkJCQkJb3V0cHV0OiAxNzkKCQkJCQkJCXRob3VnaHRzOiAxMjcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmFjdG9yaW5nIEtWTSBHdWVzdCBNZW1vcnkgUGFnZSBIYW5kbGluZyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgcmVmYWN0b3JpbmcgaG93IEtWTSBtYW5hZ2VzIGd1ZXN0IG1lbW9yeSBwYWdlcy4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGBrdm1fZ21lbV9nZXRfcGZuKClgIGlzIHRoZSB0YXJnZXQsIHNwZWNpZmljYWxseSB0aGUgcmVtb3ZhbCBvZiB0aGUgYHN0cnVjdCBwYWdlICoqcGFnZWAgYXJndW1lbnQuIFRoaXMgaW1wYWN0cyBzZXZlcmFsIGFyY2hpdGVjdHVyZXMgKGFybTY0LCB4ODYpLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGlkZWEgaXMgdG8gY2hhbmdlIGhvdyB0aGUgcGFnZSByZWZlcmVuY2UgaXMgaGFuZGxlZCwgbW92aW5nIGF3YXkgZnJvbSByZXR1cm5pbmcgaXQgZGlyZWN0bHkgZnJvbSBga3ZtX2dtZW1fZ2V0X3BmbigpYCBhbmQgaW5zdGVhZCB1c2luZyBgZm9saW9fcHV0KGZvbGlvKTtgIHdpdGhpbiB0aGUgZnVuY3Rpb24gaXRzZWxmLiBUaGlzIGxpa2VseSBtZWFucyB0aGUgY2FsbGluZyBmdW5jdGlvbnMgbm8gbG9uZ2VyIG5lZWQgdG8gZXhwbGljaXRseSByZWxlYXNlIHRoZSBwYWdlLgoKTXkgcHJpbWFyeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBXaXRoIHRoaXMga2luZCBvZiBjaGFuZ2UsIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHVuaW50ZW5kZWQgaW5mb3JtYXRpb24gbGVha3Mgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIGFzIGEgcmVzdWx0IG9mIHRoZSByZWZhY3RvcmluZy4gTG9va2luZyBhdCB0aGUgY2hhbmdlcywgdGhlcmUgYXJlbiYjMzk7dCBhbnkgbmV3IHN0cnVjdHVyZXMgYmVpbmcgc2VudCB0byB1c2Vyc3BhY2UuIFRoZXJlJiMzOTtzIG5vIGluZGljYXRpb24gb2YgYW55IG5ldyBhbGxvY2F0aW9ucyB0aGF0IG1pZ2h0IGludHJvZHVjZSB1bmluaXRpYWxpemVkIGRhdGEuIFRoaXMgaXMgc3F1YXJlbHkgYSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcmVmY291bnRpbmcgY2hhbmdlLiBUaGUgbW9zdCBsaWtlbHkgcmlza3MgYXJlIHVzZS1hZnRlci1mcmVlIG9yIHJlZmNvdW50IGJ1Z3MsIHNvIHRoaXMgaXMgd2hlcmUgSSBuZWVkIHRvIGZvY3VzLiBJJiMzOTttIHJlbHlpbmcgb24gS0FTQU4gdG8gY2F0Y2ggdGhlc2UuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBjb2RlIHJldmlldyBvZiB0aGUgZGlmZi4gVGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBjaGFuZ2VzIGFyZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiB0aGUgYHBhZ2VgIGFyZ3VtZW50IGlzIGdvbmUuIE9rYXksIEkgc2VlIHdoZXJlIHRoaXMgYHBhZ2VgIGFyZ3VtZW50IHdhcyBwcmV2aW91c2x5IGJlaW5nIHBvcHVsYXRlZCwgYGZvbGlvX2ZpbGVfcGFnZShmb2xpbywgaW5kZXgpYC4gTm93LCB0aGF0IGNhbGwgc2l0ZSBpcyByZXBsYWNlZCB3aXRoIHRoZSBgZm9saW9fcHV0KGZvbGlvKWAgY2FsbC4gVGhlIGNvcnJlc3BvbmRpbmcgYGt2bV9yZWxlYXNlX3BhZ2VfKmAgY2FsbHMgYXJlIGdvbmUsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNlZSB0aGVzZSBjaGFuZ2VzIGluIGBhcmNoL2FybTY0L2t2bS9tbXUuY2AsIGBhcmNoL2FybTY0L2t2bS9uZXN0ZWQuY2AgYW5kIGluIHZhcmlvdXMgeDg2IGZpbGVzIHN1Y2ggYXMgYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLCBhbmQgYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgLgoKQSBrZXkgdGhpbmcgaXMgdGhhdCBpbiB4ODYsIHRoZXJlIHdhcyBhIGBmYXVsdC0mZ3Q7cmVmY291bnRlZF9wYWdlYCB2YXJpYWJsZSB0aGF0IHdhcyBiZWluZyBwYXNzZWQuIEJ1dCBub3cgdGhlIGZ1bmN0aW9uIGRvZXNuJiMzOTt0IHJldHVybiB0aGUgcGFnZSwgc28gaXMgYGZhdWx0LSZndDtyZWZjb3VudGVkX3BhZ2VgIHByb3Blcmx5IGhhbmRsZWQ/IElmIGl0JiMzOTtzIE5VTEwsIHRoZW4gdGhlIGBrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2VgIHdpbGwganVzdCBkbyBub3RoaW5nLCBzbyB0aGlzIGxvb2tzIHNhZmUsIGV2ZW4gaWYgaXQgbGVhZHMgdG8gYW4gaXNzdWUgaW4gdGVybXMgb2YgYSBsZWFrLiAgSXQgc2hvdWxkIGJlIGluaXRpYWxpemVkIHRvIE5VTEwgaW4gYGt2bV9tbXVfZG9fcGFnZV9mYXVsdGAuIE5vIGRlZXAgZGl2ZSBpcyBuZWNlc3NhcnkgaGVyZSwgZXZlbiBpZiBpdCBpbnRyb2R1Y2VzIGEgYnVnLCBpdCYjMzk7cyBqdXN0IGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIG1lbW9yeSBsZWFrIGFuZCBLQVNBTiBzaG91bGQgaGFuZGxlLiBUaGUgc2FtZSB0aGluZyBmb3IgdGhlIHJlc3Qgb2YgdGhlIGNhc2VzIHdoZXJlIGBrdm1fcmVsZWFzZV9wYWdlXypgIGNhbGxzIHdlcmUgcmVtb3ZlZC4KCkZpbmFsbHksIGxvb2tpbmcgYXQgYHZpcnQva3ZtL2d1ZXN0X21lbWZkLmNgLCBpdCBjb25maXJtcyB0aGUgcmVmYWN0b3JpbmcgaXMgYWJvdXQgaG93IGBndWVzdF9tZW1mZGAgbWFuYWdlcyBwYWdlIHJlZmVyZW5jZXMuIEluc3RlYWQgb2YgY2hlY2tpbmcgaWYgYHJgIGFuZCBhc3NpZ25pbmcgdGhlIHBhZ2UsIHRoZSBwYXRjaCBjYWxscyBgZm9saW9fcHV0KGZvbGlvKTtgIGRpcmVjdGx5LgoKT3ZlcmFsbCwgdGhpcyBpcyBhIGNsZWFuIHJlZmFjdG9yaW5nLCBzcGVjaWZpY2FsbHkgaW4gcGFnZSByZWZlcmVuY2UgY291bnRpbmcgZm9yIGd1ZXN0IG1lbW9yeSwgZXNwZWNpYWxseSBmb3IgYGd1ZXN0X21lbWZkYC4gVGhlcmUmIzM5O3Mgbm8gZXZpZGVuY2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgb3IgdXNhZ2UgZnJvbSB0aGlzIHBhdGNoLiBCYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJJiMzOTttIGNvbmZpZGVudCBLQVNBTiBhbmQga21lbWxlYWsgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IGlzc3VlcyByZWxhdGVkIHRvIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBsZWFrcy4gU28sIEkgd2lsbCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgIGFuZCBwcm92aWRlIHRoZSByZWFzb25pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBga3ZtX2dtZW1fZ2V0X3BmbigpYCB0byByZW1vdmUgdGhlIGBzdHJ1Y3QgcGFnZSAqKnBhZ2VgIGFyZ3VtZW50IGFuZCBkcm9wcyB0aGUgYXNzb2NpYXRlZCBwYWdlIHJlZmVyZW5jZSBjb3VudGluZyAoYGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZWAsIGBrdm1fcmVsZWFzZV9wYWdlX2NsZWFuYCwgZXRjLikgYWNyb3NzIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMgKGFybTY0LCB4ODYpLiBUaGlzIGlzIGEgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHJlZmNvdW50aW5nIGNoYW5nZS4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBhbmQgbm8gaW5mby1sZWFrcy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSB3b3VsZCBsaWtlbHkgYmUgdXNlLWFmdGVyLWZyZWUsIG1lbW9yeSBsZWFrcywgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgYGt2bV9nbWVtX2dldF9wZm4oKWAgdG8gcmVtb3ZlIHRoZSBgc3RydWN0IHBhZ2UgKipwYWdlYCBhcmd1bWVudCBhbmQgZHJvcHMgdGhlIGFzc29jaWF0ZWQgcGFnZSByZWZlcmVuY2UgY291bnRpbmcgKGBrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2VgLCBga3ZtX3JlbGVhc2VfcGFnZV9jbGVhbmAsIGV0Yy4pIGFjcm9zcyBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzIChhcm02NCwgeDg2KS4gVGhpcyBpcyBhIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCByZWZjb3VudGluZyBjaGFuZ2UuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgYW5kIG5vIGluZm8tbGVha3MuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2Ugd291bGQgbGlrZWx5IGJlIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOToxOTo0My41OTY1NDk2MDRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA1MDA2OTU2MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fQU1EX1NFVlwiLFxuICAgIFwiS1ZNX1NXX1BST1RFQ1RFRF9WTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9nbWVtX2dldF9wZm5cIixcbiAgICBcInNldl9oYW5kbGVfcm1wX2ZhdWx0XCIsXG4gICAgXCJzZXZfc25wX3JlbG9hZF92bXNhXCIsXG4gICAgXCJrdm1faGFuZGxlX3ZuY3JfYWJvcnRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBga3ZtX2dtZW1fZ2V0X3BmbigpYCB0byByZW1vdmUgdGhlIGBzdHJ1Y3QgcGFnZSAqKnBhZ2VgIGFyZ3VtZW50IGFuZCBkcm9wcyB0aGUgYXNzb2NpYXRlZCBwYWdlIHJlZmVyZW5jZSBjb3VudGluZyAoYGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZWAsIGBrdm1fcmVsZWFzZV9wYWdlX2NsZWFuYCwgZXRjLikgYWNyb3NzIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMgKGFybTY0LCB4ODYpLiBUaGlzIGlzIGEgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHJlZmNvdW50aW5nIGNoYW5nZS4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBhbmQgbm8gaW5mby1sZWFrcy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSB3b3VsZCBsaWtlbHkgYmUgdXNlLWFmdGVyLWZyZWUsIG1lbW9yeSBsZWFrcywgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgc2lnbmF0dXJlIGFuZCBiZWhhdmlvciBvZiBga3ZtX2dtZW1fZ2V0X3BmbmAgYnkgcmVtb3ZpbmcgdGhlIGBzdHJ1Y3QgcGFnZSAqKnBhZ2VgIGFyZ3VtZW50IGFuZCBkcm9wcGluZyB0aGUgZm9saW8gcmVmZXJlbmNlIGJlZm9yZSByZXR1cm5pbmcuIFRoaXMgYWZmZWN0cyBob3cgS1ZNIGhhbmRsZXMgbWVtb3J5IGJhY2tpbmcgZm9yIGd1ZXN0X21lbWZkLCB3aGljaCBpcyBhIGNvcmUgZmVhdHVyZSBmb3IgY29uZmlkZW50aWFsIGNvbXB1dGluZyAoU0VWLVNOUCwgVERYLCBBUk0gQ0NBKS4gVGhlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgcGFnZSBmYXVsdHMgd2hlbiB1c2luZyBndWVzdF9tZW1mZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6MTk6NDMuNTk2NTU1NjE0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTEwMTg2MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwMGZjZWFlNDEwYzA1NDEwNWVlNmU5NmEzN2I0MTY2MWUzZTJhMWJmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDI2IDA5OjE5OjQyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL21tdS5jIGIvYXJjaC9hcm02NC9rdm0vbW11LmNcXG5pbmRleCA5YmE4NjQ1MGZlNGFmLi5kNTdmODE4MWYxYjdkIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL21tdS5jXFxuKysrIGIvYXJjaC9hcm02NC9rdm0vbW11LmNcXG5AQCAtMTYxMyw3ICsxNjEzLDYgQEAgc3RhdGljIGludCBnbWVtX2Fib3J0KGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZClcXG4gXFx0ZW51bSBrdm1fcGd0YWJsZV9wcm90IHByb3QgPSBLVk1fUEdUQUJMRV9QUk9UX1I7XFxuIFxcdHN0cnVjdCBrdm1fcGd0YWJsZSAqcGd0ID0gczJmZC1cXHUwMDNldmNwdS1cXHUwMDNlYXJjaC5od19tbXUtXFx1MDAzZXBndDtcXG4gXFx0dW5zaWduZWQgbG9uZyBtbXVfc2VxO1xcbi1cXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4gXFx0c3RydWN0IGt2bSAqa3ZtID0gczJmZC1cXHUwMDNldmNwdS1cXHUwMDNla3ZtO1xcbiBcXHR2b2lkICptZW1jYWNoZSA9IE5VTEw7XFxuIFxcdGt2bV9wZm5fdCBwZm47XFxuQEAgLTE2NDEsNyArMTY0MCw3IEBAIHN0YXRpYyBpbnQgZ21lbV9hYm9ydChjb25zdCBzdHJ1Y3Qga3ZtX3MyX2ZhdWx0X2Rlc2MgKnMyZmQpXFxuIFxcdC8qIFBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpbiBrdm1fbW11X2ludmFsaWRhdGVfZW5kKCkuICovXFxuIFxcdHNtcF9ybWIoKTtcXG4gXFxuLVxcdHJldCA9IGt2bV9nbWVtX2dldF9wZm4oa3ZtLCBzMmZkLVxcdTAwM2VtZW1zbG90LCBnZm4sIFxcdTAwMjZwZm4sIFxcdTAwMjZwYWdlLCBOVUxMKTtcXG4rXFx0cmV0ID0ga3ZtX2dtZW1fZ2V0X3Bmbihrdm0sIHMyZmQtXFx1MDAzZW1lbXNsb3QsIGdmbiwgXFx1MDAyNnBmbiwgTlVMTCk7XFxuIFxcdGlmIChyZXQpIHtcXG4gXFx0XFx0a3ZtX3ByZXBhcmVfbWVtb3J5X2ZhdWx0X2V4aXQoczJmZC1cXHUwMDNldmNwdSwgczJmZC1cXHUwMDNlZmF1bHRfaXBhLCBQQUdFX1NJWkUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIHdyaXRlX2ZhdWx0LCBleGVjX2ZhdWx0LCBmYWxzZSk7XFxuQEAgLTE2ODEsNyArMTY4MCw2IEBAIHN0YXRpYyBpbnQgZ21lbV9hYm9ydChjb25zdCBzdHJ1Y3Qga3ZtX3MyX2ZhdWx0X2Rlc2MgKnMyZmQpXFxuIFxcdH1cXG4gXFxuIG91dF91bmxvY2s6XFxuLVxcdGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZShrdm0sIHBhZ2UsICEhcmV0LCBwcm90IFxcdTAwMjYgS1ZNX1BHVEFCTEVfUFJPVF9XKTtcXG4gXFx0a3ZtX2ZhdWx0X3VubG9jayhrdm0pO1xcbiBcXG4gXFx0aWYgKChwcm90IFxcdTAwMjYgS1ZNX1BHVEFCTEVfUFJPVF9XKSBcXHUwMDI2XFx1MDAyNiAhcmV0KVxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYyBiL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jXFxuaW5kZXggMTcxMjNmMGI2ZGFiYS4uZGQ2Mjg0MGQzNjc0MSAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuY1xcbisrKyBiL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jXFxuQEAgLTE0MTUsNyArMTQxNSw3IEBAIHN0YXRpYyBpbnQga3ZtX3RyYW5zbGF0ZV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCAqaXNfZ21lbSlcXG4gXFx0Ym9vbCB3cml0ZV9mYXVsdCwgd3JpdGFibGU7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbW11X3NlcTtcXG4gXFx0c3RydWN0IHZuY3JfdGxiICp2dDtcXG4tXFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuK1xcdHN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDtcXG4gXFx0dTY0IHZhLCBwZm4sIGdmbjtcXG4gXFx0aW50IHJldDtcXG4gXFxuQEAgLTE0NzEsNyArMTQ3MSw3IEBAIHN0YXRpYyBpbnQga3ZtX3RyYW5zbGF0ZV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCAqaXNfZ21lbSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcdFxcdH1cXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0cmV0ID0ga3ZtX2dtZW1fZ2V0X3Bmbih2Y3B1LVxcdTAwM2Vrdm0sIG1lbXNsb3QsIGdmbiwgXFx1MDAyNnBmbiwgXFx1MDAyNnBhZ2UsIE5VTEwpO1xcbitcXHRcXHRyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKHZjcHUtXFx1MDAzZWt2bSwgbWVtc2xvdCwgZ2ZuLCBcXHUwMDI2cGZuLCBOVUxMKTtcXG4gXFx0XFx0aWYgKHJldCkge1xcbiBcXHRcXHRcXHRrdm1fcHJlcGFyZV9tZW1vcnlfZmF1bHRfZXhpdCh2Y3B1LCB2dC1cXHUwMDNld3IucGEsIFBBR0VfU0laRSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgd3JpdGVfZmF1bHQsIGZhbHNlLCBmYWxzZSk7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXFxuaW5kZXggMDY0ZWNjMzNiOTI2Ny4uOTQ3YzljZDg0MzQ1MCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXFxuKysrIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xcbkBAIC00NjI4LDcgKzQ2MjgsNyBAQCBzdGF0aWMgaW50IGt2bV9tbXVfZmF1bHRpbl9wZm5fZ21lbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIFxcdH1cXG4gXFxuIFxcdHIgPSBrdm1fZ21lbV9nZXRfcGZuKHZjcHUtXFx1MDAzZWt2bSwgZmF1bHQtXFx1MDAzZXNsb3QsIGZhdWx0LVxcdTAwM2VnZm4sIFxcdTAwMjZmYXVsdC1cXHUwMDNlcGZuLFxcbi1cXHRcXHRcXHQgICAgIFxcdTAwMjZmYXVsdC1cXHUwMDNlcmVmY291bnRlZF9wYWdlLCBcXHUwMDI2bWF4X29yZGVyKTtcXG4rXFx0XFx0XFx0ICAgICBcXHUwMDI2bWF4X29yZGVyKTtcXG4gXFx0aWYgKHIpIHtcXG4gXFx0XFx0a3ZtX21tdV9wcmVwYXJlX21lbW9yeV9mYXVsdF9leGl0KHZjcHUsIGZhdWx0KTtcXG4gXFx0XFx0cmV0dXJuIHI7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXFxuaW5kZXggNTcwNTcyM2YxZjQxMi4uMGE4ODdmOGUwNWQzYSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xcbkBAIC00MDMyLDcgKzQwMzIsNiBAQCBzdGF0aWMgdm9pZCBfX3Nldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEpXFxuIFxcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXFx1MDAzZWt2bTtcXG4gXFx0Z2ZuX3QgZ2ZuID0gZ3BhX3RvX2dmbihncGEpO1xcbiBcXHR1bnNpZ25lZCBsb25nIG1tdV9zZXE7XFxuLVxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbiBcXHRrdm1fcGZuX3QgcGZuO1xcbiBcXG4gXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2c3ZtLVxcdTAwM2VzZXZfZXMuc25wX3Ztc2FfbXV0ZXgpO1xcbkBAIC00MDc2LDcgKzQwNzUsNyBAQCBzdGF0aWMgdm9pZCBfX3Nldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEpXFxuIFxcdCAqIFRoZSBuZXcgVk1TQSB3aWxsIGJlIHByaXZhdGUgbWVtb3J5IGd1ZXN0IG1lbW9yeSwgc28gcmV0cmlldmUgdGhlXFxuIFxcdCAqIFBGTiBmcm9tIHRoZSBnbWVtIGJhY2tlbmQuXFxuIFxcdCAqL1xcbi1cXHRpZiAoa3ZtX2dtZW1fZ2V0X3Bmbih2Y3B1LVxcdTAwM2Vrdm0sIHNsb3QsIGdmbiwgXFx1MDAyNnBmbiwgXFx1MDAyNnBhZ2UsIE5VTEwpKVxcbitcXHRpZiAoa3ZtX2dtZW1fZ2V0X3Bmbih2Y3B1LVxcdTAwM2Vrdm0sIHNsb3QsIGdmbiwgXFx1MDAyNnBmbiwgTlVMTCkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdHJlYWRfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuQEAgLTQwOTIsOCArNDA5MSw2IEBAIHN0YXRpYyB2b2lkIF9fc2V2X3NucF9yZWxvYWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSlcXG4gXFx0ZWxzZVxcbiBcXHRcXHRzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZWNvbnRyb2wudm1zYV9wYSA9IHBmbl90b19ocGEocGZuKTtcXG4gXFx0cmVhZF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbi1cXG4tXFx0a3ZtX3JlbGVhc2VfcGFnZV9jbGVhbihwYWdlKTtcXG4gfVxcbiBcXG4gLypcXG5AQCAtNTAxOSw3ICs1MDE2LDcgQEAgdm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpXFxuIFxcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7XFxuIFxcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXFx1MDAzZWt2bTtcXG4gXFx0aW50IG9yZGVyLCBybXBfbGV2ZWwsIHJldDtcXG4tXFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbW11X3NlcTtcXG4gXFx0Ym9vbCBhc3NpZ25lZDtcXG4gXFx0a3ZtX3Bmbl90IHBmbjtcXG4gXFx0Z2ZuX3QgZ2ZuO1xcbkBAIC01MDQ2LDcgKzUwNDMsMTAgQEAgdm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpXFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4tXFx0cmV0ID0ga3ZtX2dtZW1fZ2V0X3Bmbihrdm0sIHNsb3QsIGdmbiwgXFx1MDAyNnBmbiwgXFx1MDAyNnBhZ2UsIFxcdTAwMjZvcmRlcik7XFxuK1xcdG1tdV9zZXEgPSBrdm0tXFx1MDAzZW1tdV9pbnZhbGlkYXRlX3NlcTtcXG4rXFx0c21wX3JtYigpO1xcbitcXG4rXFx0cmV0ID0ga3ZtX2dtZW1fZ2V0X3Bmbihrdm0sIHNsb3QsIGdmbiwgXFx1MDAyNnBmbiwgXFx1MDAyNm9yZGVyKTtcXG4gXFx0aWYgKHJldCkge1xcbiBcXHRcXHRwcl93YXJuX3JhdGVsaW1pdGVkKFxcXCJTRVY6IFVuZXhwZWN0ZWQgUk1QIGZhdWx0LCBubyBiYWNraW5nIHBhZ2UgZm9yIHByaXZhdGUgR1BBIDB4JWxseFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0ICAgIGdwYSk7XFxuQEAgLTUwNTUsOSArNTA1NSwxMyBAQCB2b2lkIHNldl9oYW5kbGVfcm1wX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCB1NjQgZXJyb3JfY29kZSlcXG4gXFxuIFxcdHJldCA9IHNucF9sb29rdXBfcm1wZW50cnkocGZuLCBcXHUwMDI2YXNzaWduZWQsIFxcdTAwMjZybXBfbGV2ZWwpO1xcbiBcXHRpZiAocmV0IHx8ICFhc3NpZ25lZCkge1xcbi1cXHRcXHRwcl93YXJuX3JhdGVsaW1pdGVkKFxcXCJTRVY6IFVuZXhwZWN0ZWQgUk1QIGZhdWx0LCBubyBhc3NpZ25lZCBSTVAgZW50cnkgZm91bmQgZm9yIEdQQSAweCVsbHggUEZOIDB4JWxseCBlcnJvciAlZFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0ICAgIGdwYSwgcGZuLCByZXQpO1xcbi1cXHRcXHRnb3RvIG91dF9ub190cmFjZTtcXG4rXFx0XFx0Z3VhcmQocmVhZF9sb2NrKShcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuK1xcbitcXHRcXHRpZiAoIW1tdV9pbnZhbGlkYXRlX3JldHJ5X2dmbihrdm0sIG1tdV9zZXEsIGdmbikpXFxuK1xcdFxcdFxcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXFxcIlNFVjogVW5leHBlY3RlZCBSTVAgZmF1bHQsIG5vIGFzc2lnbmVkIFJNUCBlbnRyeSBmb3VuZCBmb3IgR1BBIDB4JWxseCBQRk4gMHglbGx4IGVycm9yICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgZ3BhLCBwZm4sIHJldCk7XFxuK1xcbitcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuIFxcdC8qXFxuQEAgLTUwODUsMjYgKzUwODksMzEgQEAgdm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpXFxuIFxcdGlmIChybXBfbGV2ZWwgPT0gUEdfTEVWRUxfNEspXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4tXFx0cmV0ID0gc25wX3JtcHRhYmxlX3BzbWFzaChwZm4pO1xcbi1cXHRpZiAocmV0KSB7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIExvb2sgaXQgdXAgYWdhaW4uIElmIGl0J3MgNEsgbm93IHRoZW4gdGhlIFBTTUFTSCBtYXkgaGF2ZVxcbi1cXHRcXHQgKiByYWNlZCB3aXRoIGFub3RoZXIgcHJvY2VzcyBhbmQgdGhlIGlzc3VlIGhhcyBhbHJlYWR5IHJlc29sdmVkXFxuLVxcdFxcdCAqIGl0c2VsZi5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdGlmICghc25wX2xvb2t1cF9ybXBlbnRyeShwZm4sIFxcdTAwMjZhc3NpZ25lZCwgXFx1MDAyNnJtcF9sZXZlbCkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgIGFzc2lnbmVkIFxcdTAwMjZcXHUwMDI2IHJtcF9sZXZlbCA9PSBQR19MRVZFTF80SylcXG4rXFx0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spIHtcXG4rXFx0XFx0aWYgKG1tdV9pbnZhbGlkYXRlX3JldHJ5X2dmbihrdm0sIG1tdV9zZXEsIGdmbikpXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4tXFx0XFx0cHJfd2Fybl9yYXRlbGltaXRlZChcXFwiU0VWOiBVbmFibGUgdG8gc3BsaXQgUk1QIGVudHJ5IGZvciBHUEEgMHglbGx4IFBGTiAweCVsbHggcmV0ICVkXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHQgICAgZ3BhLCBwZm4sIHJldCk7XFxuK1xcdFxcdHJldCA9IHNucF9ybXB0YWJsZV9wc21hc2gocGZuKTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBMb29rIGl0IHVwIGFnYWluLiBJZiBpdCdzIDRLIG5vdyB0aGVuIHRoZSBQU01BU0ggbWF5XFxuK1xcdFxcdFxcdCAqIGhhdmUgcmFjZWQgd2l0aCBhbm90aGVyIHByb2Nlc3MgYW5kIHRoZSBpc3N1ZSBoYXNcXG4rXFx0XFx0XFx0ICogYWxyZWFkeSByZXNvbHZlZCBpdHNlbGYuIElmIGl0J3Mgbm90IGFzc2lnbmVkLCB0aGVuXFxuK1xcdFxcdFxcdCAqIHRoaXMgbXVzdCBoYXZlIHJhY2VkIHdpdGggYW5vdGhlciBwcm9jZXNzIHRoYXQgbWFkZVxcbitcXHRcXHRcXHQgKiB0aGlzIHBhZ2Ugc2hhcmVkLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0aWYgKCFzbnBfbG9va3VwX3JtcGVudHJ5KHBmbiwgXFx1MDAyNmFzc2lnbmVkLCBcXHUwMDI2cm1wX2xldmVsKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICAgKChhc3NpZ25lZCBcXHUwMDI2XFx1MDAyNiBybXBfbGV2ZWwgPT0gUEdfTEVWRUxfNEspIHx8ICFhc3NpZ25lZCkpXFxuK1xcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0XFx0XFx0cHJfd2Fybl9yYXRlbGltaXRlZChcXFwiU0VWOiBVbmFibGUgdG8gc3BsaXQgUk1QIGVudHJ5IGZvciBHUEEgMHglbGx4IFBGTiAweCVsbHggcmV0ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgZ3BhLCBwZm4sIHJldCk7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0a3ZtX3phcF9nZm5fcmFuZ2Uoa3ZtLCBnZm4sIGdmbiArIFBUUlNfUEVSX1BNRCk7XFxuIG91dDpcXG4gXFx0dHJhY2Vfa3ZtX3JtcF9mYXVsdCh2Y3B1LCBncGEsIHBmbiwgZXJyb3JfY29kZSwgcm1wX2xldmVsLCByZXQpO1xcbi1vdXRfbm9fdHJhY2U6XFxuLVxcdGt2bV9yZWxlYXNlX3BhZ2VfdW51c2VkKHBhZ2UpO1xcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCBpc19wZm5fcmFuZ2Vfc2hhcmVkKGt2bV9wZm5fdCBzdGFydCwga3ZtX3Bmbl90IGVuZClcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXFxuaW5kZXggMDNiZmM5Mjg2NGI2ZS4uNTAyNDY1MTE5Y2EwYyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcXG5AQCAtMjU4NiwxMyArMjU4NiwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wga3ZtX21lbV9pc19wcml2YXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKVxcbiBcXG4gI2lmZGVmIENPTkZJR19LVk1fR1VFU1RfTUVNRkRcXG4gaW50IGt2bV9nbWVtX2dldF9wZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxcbi1cXHRcXHQgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIHN0cnVjdCBwYWdlICoqcGFnZSxcXG4tXFx0XFx0ICAgICBpbnQgKm1heF9vcmRlcik7XFxuK1xcdFxcdCAgICAgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgKnBmbiwgaW50ICptYXhfb3JkZXIpO1xcbiAjZWxzZVxcbiBzdGF0aWMgaW5saW5lIGludCBrdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwgZ2ZuX3QgZ2ZuLFxcbi1cXHRcXHRcXHRcXHQgICBrdm1fcGZuX3QgKnBmbiwgc3RydWN0IHBhZ2UgKipwYWdlLFxcbi1cXHRcXHRcXHRcXHQgICBpbnQgKm1heF9vcmRlcilcXG4rXFx0XFx0XFx0XFx0ICAga3ZtX3Bmbl90ICpwZm4sIGludCAqbWF4X29yZGVyKVxcbiB7XFxuIFxcdEtWTV9CVUdfT04oMSwga3ZtKTtcXG4gXFx0cmV0dXJuIC1FSU87XFxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXFxuaW5kZXggYjU5NjQ4NmQxODRjYS4uNTg5NzYyMTQwYzNlZiAxMDA2NDRcXG4tLS0gYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXFxuKysrIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xcbkBAIC03NTEsOCArNzUxLDcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19rdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBmaWxlICpmaWxlLFxcbiB9XFxuIFxcbiBpbnQga3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXFxuLVxcdFxcdCAgICAgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgKnBmbiwgc3RydWN0IHBhZ2UgKipwYWdlLFxcbi1cXHRcXHQgICAgIGludCAqbWF4X29yZGVyKVxcbitcXHRcXHQgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIGludCAqbWF4X29yZGVyKVxcbiB7XFxuIFxcdHBnb2ZmX3QgaW5kZXggPSBrdm1fZ21lbV9nZXRfaW5kZXgoc2xvdCwgZ2ZuKTtcXG4gXFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG5AQCAtNzgwLDExICs3NzksNyBAQCBpbnQga3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXFxuICNlbmRpZlxcbiBcXG4gXFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4tXFxuLVxcdGlmICghcilcXG4tXFx0XFx0KnBhZ2UgPSBmb2xpb19maWxlX3BhZ2UoZm9saW8sIGluZGV4KTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbitcXHRmb2xpb19wdXQoZm9saW8pO1xcbiBcXG4gXFx0cmV0dXJuIHI7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6MTk6NDQuMDQ4MzQyODQzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTI0MzQ1Mjc3NDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0FNRF9TRVZcIixcbiAgICBcIktWTV9TV19QUk9URUNURURfVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fZ21lbV9nZXRfcGZuXCIsXG4gICAgXCJzZXZfaGFuZGxlX3JtcF9mYXVsdFwiLFxuICAgIFwic2V2X3NucF9yZWxvYWRfdm1zYVwiLFxuICAgIFwia3ZtX2hhbmRsZV92bmNyX2Fib3J0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgc2lnbmF0dXJlIGFuZCBiZWhhdmlvciBvZiBga3ZtX2dtZW1fZ2V0X3BmbmAgYnkgcmVtb3ZpbmcgdGhlIGBzdHJ1Y3QgcGFnZSAqKnBhZ2VgIGFyZ3VtZW50IGFuZCBkcm9wcGluZyB0aGUgZm9saW8gcmVmZXJlbmNlIGJlZm9yZSByZXR1cm5pbmcuIFRoaXMgYWZmZWN0cyBob3cgS1ZNIGhhbmRsZXMgbWVtb3J5IGJhY2tpbmcgZm9yIGd1ZXN0X21lbWZkLCB3aGljaCBpcyBhIGNvcmUgZmVhdHVyZSBmb3IgY29uZmlkZW50aWFsIGNvbXB1dGluZyAoU0VWLVNOUCwgVERYLCBBUk0gQ0NBKS4gVGhlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgcGFnZSBmYXVsdHMgd2hlbiB1c2luZyBndWVzdF9tZW1mZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDBmY2VhZTQxMGMwNTQxMDVlZTZlOTZhMzdiNDE2NjFlM2UyYTFiZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDA5OjE5OjQyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vbW11LmMgYi9hcmNoL2FybTY0L2t2bS9tbXUuY1xuaW5kZXggOWJhODY0NTBmZTRhZi4uZDU3ZjgxODFmMWI3ZCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL21tdS5jXG4rKysgYi9hcmNoL2FybTY0L2t2bS9tbXUuY1xuQEAgLTE2MTMsNyArMTYxMyw2IEBAIHN0YXRpYyBpbnQgZ21lbV9hYm9ydChjb25zdCBzdHJ1Y3Qga3ZtX3MyX2ZhdWx0X2Rlc2MgKnMyZmQpXG4gXHRlbnVtIGt2bV9wZ3RhYmxlX3Byb3QgcHJvdCA9IEtWTV9QR1RBQkxFX1BST1RfUjtcbiBcdHN0cnVjdCBrdm1fcGd0YWJsZSAqcGd0ID0gczJmZC1cdTAwM2V2Y3B1LVx1MDAzZWFyY2guaHdfbW11LVx1MDAzZXBndDtcbiBcdHVuc2lnbmVkIGxvbmcgbW11X3NlcTtcbi1cdHN0cnVjdCBwYWdlICpwYWdlO1xuIFx0c3RydWN0IGt2bSAqa3ZtID0gczJmZC1cdTAwM2V2Y3B1LVx1MDAzZWt2bTtcbiBcdHZvaWQgKm1lbWNhY2hlID0gTlVMTDtcbiBcdGt2bV9wZm5fdCBwZm47XG5AQCAtMTY0MSw3ICsxNjQwLDcgQEAgc3RhdGljIGludCBnbWVtX2Fib3J0KGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZClcbiBcdC8qIFBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpbiBrdm1fbW11X2ludmFsaWRhdGVfZW5kKCkuICovXG4gXHRzbXBfcm1iKCk7XG4gXG4tXHRyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKGt2bSwgczJmZC1cdTAwM2VtZW1zbG90LCBnZm4sIFx1MDAyNnBmbiwgXHUwMDI2cGFnZSwgTlVMTCk7XG4rXHRyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKGt2bSwgczJmZC1cdTAwM2VtZW1zbG90LCBnZm4sIFx1MDAyNnBmbiwgTlVMTCk7XG4gXHRpZiAocmV0KSB7XG4gXHRcdGt2bV9wcmVwYXJlX21lbW9yeV9mYXVsdF9leGl0KHMyZmQtXHUwMDNldmNwdSwgczJmZC1cdTAwM2VmYXVsdF9pcGEsIFBBR0VfU0laRSxcbiBcdFx0XHRcdFx0ICAgICAgd3JpdGVfZmF1bHQsIGV4ZWNfZmF1bHQsIGZhbHNlKTtcbkBAIC0xNjgxLDcgKzE2ODAsNiBAQCBzdGF0aWMgaW50IGdtZW1fYWJvcnQoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKVxuIFx0fVxuIFxuIG91dF91bmxvY2s6XG4tXHRrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2Uoa3ZtLCBwYWdlLCAhIXJldCwgcHJvdCBcdTAwMjYgS1ZNX1BHVEFCTEVfUFJPVF9XKTtcbiBcdGt2bV9mYXVsdF91bmxvY2soa3ZtKTtcbiBcbiBcdGlmICgocHJvdCBcdTAwMjYgS1ZNX1BHVEFCTEVfUFJPVF9XKSBcdTAwMjZcdTAwMjYgIXJldClcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYyBiL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jXG5pbmRleCAxNzEyM2YwYjZkYWJhLi5kZDYyODQwZDM2NzQxIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNcbisrKyBiL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jXG5AQCAtMTQxNSw3ICsxNDE1LDcgQEAgc3RhdGljIGludCBrdm1fdHJhbnNsYXRlX3ZuY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sICppc19nbWVtKVxuIFx0Ym9vbCB3cml0ZV9mYXVsdCwgd3JpdGFibGU7XG4gXHR1bnNpZ25lZCBsb25nIG1tdV9zZXE7XG4gXHRzdHJ1Y3Qgdm5jcl90bGIgKnZ0O1xuLVx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4rXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7XG4gXHR1NjQgdmEsIHBmbiwgZ2ZuO1xuIFx0aW50IHJldDtcbiBcbkBAIC0xNDcxLDcgKzE0NzEsNyBAQCBzdGF0aWMgaW50IGt2bV90cmFuc2xhdGVfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgKmlzX2dtZW0pXG4gXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4tXHRcdHJldCA9IGt2bV9nbWVtX2dldF9wZm4odmNwdS1cdTAwM2Vrdm0sIG1lbXNsb3QsIGdmbiwgXHUwMDI2cGZuLCBcdTAwMjZwYWdlLCBOVUxMKTtcbitcdFx0cmV0ID0ga3ZtX2dtZW1fZ2V0X3Bmbih2Y3B1LVx1MDAzZWt2bSwgbWVtc2xvdCwgZ2ZuLCBcdTAwMjZwZm4sIE5VTEwpO1xuIFx0XHRpZiAocmV0KSB7XG4gXHRcdFx0a3ZtX3ByZXBhcmVfbWVtb3J5X2ZhdWx0X2V4aXQodmNwdSwgdnQtXHUwMDNld3IucGEsIFBBR0VfU0laRSxcbiBcdFx0XHRcdFx0ICAgICAgd3JpdGVfZmF1bHQsIGZhbHNlLCBmYWxzZSk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbmluZGV4IDA2NGVjYzMzYjkyNjcuLjk0N2M5Y2Q4NDM0NTAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG5AQCAtNDYyOCw3ICs0NjI4LDcgQEAgc3RhdGljIGludCBrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0fVxuIFxuIFx0ciA9IGt2bV9nbWVtX2dldF9wZm4odmNwdS1cdTAwM2Vrdm0sIGZhdWx0LVx1MDAzZXNsb3QsIGZhdWx0LVx1MDAzZWdmbiwgXHUwMDI2ZmF1bHQtXHUwMDNlcGZuLFxuLVx0XHRcdCAgICAgXHUwMDI2ZmF1bHQtXHUwMDNlcmVmY291bnRlZF9wYWdlLCBcdTAwMjZtYXhfb3JkZXIpO1xuK1x0XHRcdCAgICAgXHUwMDI2bWF4X29yZGVyKTtcbiBcdGlmIChyKSB7XG4gXHRcdGt2bV9tbXVfcHJlcGFyZV9tZW1vcnlfZmF1bHRfZXhpdCh2Y3B1LCBmYXVsdCk7XG4gXHRcdHJldHVybiByO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5pbmRleCA1NzA1NzIzZjFmNDEyLi4wYTg4N2Y4ZTA1ZDNhIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuQEAgLTQwMzIsNyArNDAzMiw2IEBAIHN0YXRpYyB2b2lkIF9fc2V2X3NucF9yZWxvYWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSlcbiBcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXHUwMDNla3ZtO1xuIFx0Z2ZuX3QgZ2ZuID0gZ3BhX3RvX2dmbihncGEpO1xuIFx0dW5zaWduZWQgbG9uZyBtbXVfc2VxO1xuLVx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXHRrdm1fcGZuX3QgcGZuO1xuIFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZzdm0tXHUwMDNlc2V2X2VzLnNucF92bXNhX211dGV4KTtcbkBAIC00MDc2LDcgKzQwNzUsNyBAQCBzdGF0aWMgdm9pZCBfX3Nldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEpXG4gXHQgKiBUaGUgbmV3IFZNU0Egd2lsbCBiZSBwcml2YXRlIG1lbW9yeSBndWVzdCBtZW1vcnksIHNvIHJldHJpZXZlIHRoZVxuIFx0ICogUEZOIGZyb20gdGhlIGdtZW0gYmFja2VuZC5cbiBcdCAqL1xuLVx0aWYgKGt2bV9nbWVtX2dldF9wZm4odmNwdS1cdTAwM2Vrdm0sIHNsb3QsIGdmbiwgXHUwMDI2cGZuLCBcdTAwMjZwYWdlLCBOVUxMKSlcbitcdGlmIChrdm1fZ21lbV9nZXRfcGZuKHZjcHUtXHUwMDNla3ZtLCBzbG90LCBnZm4sIFx1MDAyNnBmbiwgTlVMTCkpXG4gXHRcdHJldHVybjtcbiBcbiBcdHJlYWRfbG9jayhcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuQEAgLTQwOTIsOCArNDA5MSw2IEBAIHN0YXRpYyB2b2lkIF9fc2V2X3NucF9yZWxvYWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSlcbiBcdGVsc2VcbiBcdFx0c3ZtLVx1MDAzZXZtY2ItXHUwMDNlY29udHJvbC52bXNhX3BhID0gcGZuX3RvX2hwYShwZm4pO1xuIFx0cmVhZF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbi1cbi1cdGt2bV9yZWxlYXNlX3BhZ2VfY2xlYW4ocGFnZSk7XG4gfVxuIFxuIC8qXG5AQCAtNTAxOSw3ICs1MDE2LDcgQEAgdm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpXG4gXHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90O1xuIFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cdTAwM2Vrdm07XG4gXHRpbnQgb3JkZXIsIHJtcF9sZXZlbCwgcmV0O1xuLVx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4rXHR1bnNpZ25lZCBsb25nIG1tdV9zZXE7XG4gXHRib29sIGFzc2lnbmVkO1xuIFx0a3ZtX3Bmbl90IHBmbjtcbiBcdGdmbl90IGdmbjtcbkBAIC01MDQ2LDcgKzUwNDMsMTAgQEAgdm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdHJldCA9IGt2bV9nbWVtX2dldF9wZm4oa3ZtLCBzbG90LCBnZm4sIFx1MDAyNnBmbiwgXHUwMDI2cGFnZSwgXHUwMDI2b3JkZXIpO1xuK1x0bW11X3NlcSA9IGt2bS1cdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXE7XG4rXHRzbXBfcm1iKCk7XG4rXG4rXHRyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKGt2bSwgc2xvdCwgZ2ZuLCBcdTAwMjZwZm4sIFx1MDAyNm9yZGVyKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0cHJfd2Fybl9yYXRlbGltaXRlZChcIlNFVjogVW5leHBlY3RlZCBSTVAgZmF1bHQsIG5vIGJhY2tpbmcgcGFnZSBmb3IgcHJpdmF0ZSBHUEEgMHglbGx4XFxuXCIsXG4gXHRcdFx0XHQgICAgZ3BhKTtcbkBAIC01MDU1LDkgKzUwNTUsMTMgQEAgdm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpXG4gXG4gXHRyZXQgPSBzbnBfbG9va3VwX3JtcGVudHJ5KHBmbiwgXHUwMDI2YXNzaWduZWQsIFx1MDAyNnJtcF9sZXZlbCk7XG4gXHRpZiAocmV0IHx8ICFhc3NpZ25lZCkge1xuLVx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwiU0VWOiBVbmV4cGVjdGVkIFJNUCBmYXVsdCwgbm8gYXNzaWduZWQgUk1QIGVudHJ5IGZvdW5kIGZvciBHUEEgMHglbGx4IFBGTiAweCVsbHggZXJyb3IgJWRcXG5cIixcbi1cdFx0XHRcdCAgICBncGEsIHBmbiwgcmV0KTtcbi1cdFx0Z290byBvdXRfbm9fdHJhY2U7XG4rXHRcdGd1YXJkKHJlYWRfbG9jaykoXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbitcbitcdFx0aWYgKCFtbXVfaW52YWxpZGF0ZV9yZXRyeV9nZm4oa3ZtLCBtbXVfc2VxLCBnZm4pKVxuK1x0XHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCJTRVY6IFVuZXhwZWN0ZWQgUk1QIGZhdWx0LCBubyBhc3NpZ25lZCBSTVAgZW50cnkgZm91bmQgZm9yIEdQQSAweCVsbHggUEZOIDB4JWxseCBlcnJvciAlZFxcblwiLFxuK1x0XHRcdFx0XHQgICAgZ3BhLCBwZm4sIHJldCk7XG4rXG4rXHRcdHJldHVybjtcbiBcdH1cbiBcbiBcdC8qXG5AQCAtNTA4NSwyNiArNTA4OSwzMSBAQCB2b2lkIHNldl9oYW5kbGVfcm1wX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCB1NjQgZXJyb3JfY29kZSlcbiBcdGlmIChybXBfbGV2ZWwgPT0gUEdfTEVWRUxfNEspXG4gXHRcdGdvdG8gb3V0O1xuIFxuLVx0cmV0ID0gc25wX3JtcHRhYmxlX3BzbWFzaChwZm4pO1xuLVx0aWYgKHJldCkge1xuLVx0XHQvKlxuLVx0XHQgKiBMb29rIGl0IHVwIGFnYWluLiBJZiBpdCdzIDRLIG5vdyB0aGVuIHRoZSBQU01BU0ggbWF5IGhhdmVcbi1cdFx0ICogcmFjZWQgd2l0aCBhbm90aGVyIHByb2Nlc3MgYW5kIHRoZSBpc3N1ZSBoYXMgYWxyZWFkeSByZXNvbHZlZFxuLVx0XHQgKiBpdHNlbGYuXG4tXHRcdCAqL1xuLVx0XHRpZiAoIXNucF9sb29rdXBfcm1wZW50cnkocGZuLCBcdTAwMjZhc3NpZ25lZCwgXHUwMDI2cm1wX2xldmVsKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIGFzc2lnbmVkIFx1MDAyNlx1MDAyNiBybXBfbGV2ZWwgPT0gUEdfTEVWRUxfNEspXG4rXHRzY29wZWRfZ3VhcmQocmVhZF9sb2NrLCBcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spIHtcbitcdFx0aWYgKG1tdV9pbnZhbGlkYXRlX3JldHJ5X2dmbihrdm0sIG1tdV9zZXEsIGdmbikpXG4gXHRcdFx0Z290byBvdXQ7XG4gXG4tXHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCJTRVY6IFVuYWJsZSB0byBzcGxpdCBSTVAgZW50cnkgZm9yIEdQQSAweCVsbHggUEZOIDB4JWxseCByZXQgJWRcXG5cIixcbi1cdFx0XHRcdCAgICBncGEsIHBmbiwgcmV0KTtcbitcdFx0cmV0ID0gc25wX3JtcHRhYmxlX3BzbWFzaChwZm4pO1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBMb29rIGl0IHVwIGFnYWluLiBJZiBpdCdzIDRLIG5vdyB0aGVuIHRoZSBQU01BU0ggbWF5XG4rXHRcdFx0ICogaGF2ZSByYWNlZCB3aXRoIGFub3RoZXIgcHJvY2VzcyBhbmQgdGhlIGlzc3VlIGhhc1xuK1x0XHRcdCAqIGFscmVhZHkgcmVzb2x2ZWQgaXRzZWxmLiBJZiBpdCdzIG5vdCBhc3NpZ25lZCwgdGhlblxuK1x0XHRcdCAqIHRoaXMgbXVzdCBoYXZlIHJhY2VkIHdpdGggYW5vdGhlciBwcm9jZXNzIHRoYXQgbWFkZVxuK1x0XHRcdCAqIHRoaXMgcGFnZSBzaGFyZWQuXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKCFzbnBfbG9va3VwX3JtcGVudHJ5KHBmbiwgXHUwMDI2YXNzaWduZWQsIFx1MDAyNnJtcF9sZXZlbCkgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgICgoYXNzaWduZWQgXHUwMDI2XHUwMDI2IHJtcF9sZXZlbCA9PSBQR19MRVZFTF80SykgfHwgIWFzc2lnbmVkKSlcbitcdFx0XHRcdGdvdG8gb3V0O1xuK1xuK1x0XHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCJTRVY6IFVuYWJsZSB0byBzcGxpdCBSTVAgZW50cnkgZm9yIEdQQSAweCVsbHggUEZOIDB4JWxseCByZXQgJWRcXG5cIixcbitcdFx0XHRcdFx0ICAgIGdwYSwgcGZuLCByZXQpO1xuK1x0XHR9XG4gXHR9XG4gXG4gXHRrdm1femFwX2dmbl9yYW5nZShrdm0sIGdmbiwgZ2ZuICsgUFRSU19QRVJfUE1EKTtcbiBvdXQ6XG4gXHR0cmFjZV9rdm1fcm1wX2ZhdWx0KHZjcHUsIGdwYSwgcGZuLCBlcnJvcl9jb2RlLCBybXBfbGV2ZWwsIHJldCk7XG4tb3V0X25vX3RyYWNlOlxuLVx0a3ZtX3JlbGVhc2VfcGFnZV91bnVzZWQocGFnZSk7XG4gfVxuIFxuIHN0YXRpYyBib29sIGlzX3Bmbl9yYW5nZV9zaGFyZWQoa3ZtX3Bmbl90IHN0YXJ0LCBrdm1fcGZuX3QgZW5kKVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuaW5kZXggMDNiZmM5Mjg2NGI2ZS4uNTAyNDY1MTE5Y2EwYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuKysrIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5AQCAtMjU4NiwxMyArMjU4NiwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wga3ZtX21lbV9pc19wcml2YXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKVxuIFxuICNpZmRlZiBDT05GSUdfS1ZNX0dVRVNUX01FTUZEXG4gaW50IGt2bV9nbWVtX2dldF9wZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxuLVx0XHQgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIHN0cnVjdCBwYWdlICoqcGFnZSxcbi1cdFx0ICAgICBpbnQgKm1heF9vcmRlcik7XG4rXHRcdCAgICAgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgKnBmbiwgaW50ICptYXhfb3JkZXIpO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBpbnQga3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdFx0XHQgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LCBnZm5fdCBnZm4sXG4tXHRcdFx0XHQgICBrdm1fcGZuX3QgKnBmbiwgc3RydWN0IHBhZ2UgKipwYWdlLFxuLVx0XHRcdFx0ICAgaW50ICptYXhfb3JkZXIpXG4rXHRcdFx0XHQgICBrdm1fcGZuX3QgKnBmbiwgaW50ICptYXhfb3JkZXIpXG4ge1xuIFx0S1ZNX0JVR19PTigxLCBrdm0pO1xuIFx0cmV0dXJuIC1FSU87XG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbmluZGV4IGI1OTY0ODZkMTg0Y2EuLjU4OTc2MjE0MGMzZWYgMTAwNjQ0XG4tLS0gYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXG4rKysgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXG5AQCAtNzUxLDggKzc1MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fa3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3QgZmlsZSAqZmlsZSxcbiB9XG4gXG4gaW50IGt2bV9nbWVtX2dldF9wZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxuLVx0XHQgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIHN0cnVjdCBwYWdlICoqcGFnZSxcbi1cdFx0ICAgICBpbnQgKm1heF9vcmRlcilcbitcdFx0ICAgICBnZm5fdCBnZm4sIGt2bV9wZm5fdCAqcGZuLCBpbnQgKm1heF9vcmRlcilcbiB7XG4gXHRwZ29mZl90IGluZGV4ID0ga3ZtX2dtZW1fZ2V0X2luZGV4KHNsb3QsIGdmbik7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuQEAgLTc4MCwxMSArNzc5LDcgQEAgaW50IGt2bV9nbWVtX2dldF9wZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxuICNlbmRpZlxuIFxuIFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbi1cbi1cdGlmICghcilcbi1cdFx0KnBhZ2UgPSBmb2xpb19maWxlX3BhZ2UoZm9saW8sIGluZGV4KTtcbi1cdGVsc2Vcbi1cdFx0Zm9saW9fcHV0KGZvbGlvKTtcbitcdGZvbGlvX3B1dChmb2xpbyk7XG4gXG4gXHRyZXR1cm4gcjtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOToxOTo0NC4wNDgzNDQ0NjNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTc3MzczMjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS1ZNIFBhdGNoIGZvciBHdWVzdCBNZW1mZCBhbmQgQ29uZmlkZW50aWFsIENvbXB1dGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIEtWTSwgYW5kIGl0J3MgbW9kaWZ5aW5nIGBrdm1fZ21lbV9nZXRfcGZuYC4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIGRyb3BwaW5nIHRoZSBgc3RydWN0IHBhZ2UgKipwYWdlYCBhcmd1bWVudCBhbmQsIG1vcmUgc2lnbmlmaWNhbnRseSwgbm8gbG9uZ2VyIHJldHVybmluZyBhIHJlZmVyZW5jZWQgcGFnZS4gSW5zdGVhZCwgaXQncyBqdXN0IHRoZSBwZm4sIHdpdGggdGhlIGZvbGlvIHJlZmVyZW5jZSBkcm9wcGVkIGJlZm9yZSByZXR1cm5pbmcuIEFscmlnaHQsIHRoYXQncyBhIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2UuIFRoZSBjb2RlIGFmZmVjdGVkIGluY2x1ZGVzIHNvbWUgY3JpdGljYWwgYXJlYXM6IGBhcmNoL2FybTY0L2t2bS9tbXUuY2AsIGBhcmNoL2FybTY0L2t2bS9uZXN0ZWQuY2AsIGFuZCB0aGUgeDg2IGVxdWl2YWxlbnQsIHBsdXMgc29tZSBvdGhlciBrZXkgZmlsZXMgbGlrZSB0aGUgaGVhZGVyIGFuZCBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2AuXG5cbk15IGZpcnN0IHRob3VnaHQgaXMsIGhvdyBpcyB0aGUgbWVtb3J5IGtlcHQgYWxpdmUgaWYgdGhleSBhcmUgZHJvcHBpbmcgdGhlIHJlZmVyZW5jZT8gQWgsIGl0IGxvb2tzIGxpa2UgYGd1ZXN0X21lbWZkYCBtZW1vcnkgaXMgbWFuYWdlZCB0aHJvdWdoIHRoZSBmaWxlIGRlc2NyaXB0b3IgaXRzZWxmLCBhbmQgS1ZNJ3MgbW11X25vdGlmaWVyLWxpa2UgbWVjaGFuaXNtLCBvciByYXRoZXIgdGhlIGd1ZXN0X21lbWZkIGludmFsaWRhdGlvbiBjYWxsYmFja3MsIGhhbmRsZXMgdGhlIHVubWFwcGluZyBpZiB0aGUgbWVtb3J5IGlzIGZyZWVkLiBTbywgaXQgYXBwZWFycyB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZm9yIGhvdyBLVk0gaGFuZGxlcyBgZ3Vlc3RfbWVtZmRgIHBhZ2VzLiBUaGV5IGFyZSBubyBsb25nZXIgdGFraW5nIGEgcGFnZSByZWZlcmVuY2UuXG5cbkdpdmVuIHRoaXMgaXMgYSBjb3JlIGNvbXBvbmVudCwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgaWYgdGhpcyBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuIE9rYXksIGBLVk0gZ3Vlc3RfbWVtZmRgIGlzIGEga2V5IHBpZWNlIGZvciBjb25maWRlbnRpYWwgY29tcHV0aW5nLCByaWdodD8gU0VWLVNOUCwgVERYLCBhbmQgQVJNIENDQSBhbGwgdXNlIGl0LiBBbmQsIHllcywgaXQncyByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyByZWFjaGFibGUgd2l0aGluIGEgc3RhbmRhcmQgUUVNVSBvciBHQ0Ugc2V0dXAuIEkgc2hvdWxkIGNoZWNrIGhvdyB0aGVzZSBndWVzdCBtZW1mZHMgYXJlIGNyZWF0ZWQuIEFoLCB0aGV5J3JlIGNyZWF0ZWQgd2l0aCBgS1ZNX0NSRUFURV9HVUVTVF9NRU1GRGAuIEFuZCB5ZXMsIHRoaXMgaXMgYXZhaWxhYmxlIGlmIGBDT05GSUdfS1ZNX0dVRVNUX01FTUZEYCBpcyBlbmFibGVkLiBXYWl0LCBhbmQgaXQgbG9va3MgbGlrZSBgQ09ORklHX0tWTV9HVUVTVF9NRU1GRGAgaXMgc2VsZWN0ZWQgYnkgS1ZNX1NXX1BST1RFQ1RFRF9WTSBvciBvdGhlciBjb25maWRlbnRpYWwgY29tcHV0aW5nIGNvbmZpZ3MuIFBlcmZlY3QsIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBDT05GSUdfS1ZNX0dVRVNUX01FTUZEYCBjb25maWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1OTIsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOToxOTo1MS42MjU3MjAyMTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwNjU5NDg2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0dVRVNUX01FTUZEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL0tjb25maWc9MTAzPWNvbmZpZyBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbi0tXFxudmlydC9rdm0vS2NvbmZpZy0xMDUtXFxudmlydC9rdm0vS2NvbmZpZzoxMDY6Y29uZmlnIEtWTV9HVUVTVF9NRU1GRFxcbnZpcnQva3ZtL0tjb25maWctMTA3LSAgICAgICBzZWxlY3QgWEFSUkFZX01VTFRJXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjE5OjUzLjQzMjMyMTQ1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU3NDAzNzk4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgS1ZNX0dVRVNUX01FTUZEKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYEtWTV9HVUVTVF9NRU1GRGAgc2VsZWN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byB1bmRlcnN0YW5kICp3aHkqIGl0J3MgYmVpbmcgY2hvc2VuIG9yIGJlaW5nIGNvbnNpZGVyZWQuIFdoYXQncyB0aGUgY29udGV4dCBoZXJlPyBJcyBpdCByZWxhdGVkIHRvIGEgc3BlY2lmaWMgdnVsbmVyYWJpbGl0eSwgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBvciBuZXcgZmVhdHVyZSBpbnRyb2R1Y3Rpb24gd2l0aGluIHRoZSBLVk0gZWNvc3lzdGVtPyBNeSBleHBlcnQgaW50dWl0aW9uIGtpY2tzIGluOyBJJ20gaW1tZWRpYXRlbHkgcnVubmluZyB0aHJvdWdoIHBvc3NpYmxlIHVzZSBjYXNlcyBpbiBteSBoZWFkOiBtZW1vcnkgYmFsbG9vbmluZywgc2VjdXJlIGd1ZXN0IG1lbW9yeSBtYW5hZ2VtZW50LCBwb3RlbnRpYWxseSBldmVuIHNoYXJlZCBtZW1vcnkgaW1wbGVtZW50YXRpb25zLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgdHJpZ2dlcmluZyBldmVudCBvciBjb25kaXRpb24gdGhhdCBsZWFkcyB0byB0aGUgc2VsZWN0aW9uIG9mIHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uLiBXaGF0IG90aGVyIHJlbGF0ZWQgb3B0aW9ucyBhcmUgcG90ZW50aWFsbHkgYmVpbmcgY29uc2lkZXJlZD8gSSB3aWxsIGRlbHZlIGRlZXBlciBpbnRvIGRvY3VtZW50YXRpb24sIGNvZGUsIGFuZCByZWxhdGVkIG1haWxpbmcgbGlzdCBkaXNjdXNzaW9ucy4gSXQncyBsaWtlbHkgdGhhdCBpdCdzIGJlaW5nIGNob3NlbiBmb3IgYSByZWFzb24sIGFuZCB0aGVyZSBpcyBjZXJ0YWlubHkgbXVjaCBmb3IgbWUgdG8gZGlzY292ZXIgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjYwOCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjE5OjU3LjAwNjM2MjQyNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODQxODQwODI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBLVk1fR1VFU1RfTUVNRkRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vS2NvbmZpZz0yMD1tZW51Y29uZmlnIEtWTVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0zOC1cXHRzZWxlY3QgR1VFU1RfUEVSRl9FVkVOVFMgaWYgUEVSRl9FVkVOVFNcXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnOjM5OlxcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkRcXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTQwLVxcdGhlbHBcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTIwPWNvbmZpZyBLVk1fWDg2XFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy00OS1cXHRzZWxlY3QgS1ZNX1dFUlJPUiBpZiBXRVJST1JcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1MDpcXHRzZWxlY3QgS1ZNX0dVRVNUX01FTUZEIGlmIFg4Nl82NFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOToxOTo1OC44NDgyMTMxMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1MzkyMDYxMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIGlzIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCBvbiBib3RoIEFSTTY0IGFuZCBYODZfNjQgS1ZNLCB3aGljaCBpcyBnb29kIOKAkyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gTXkgZmlyc3Qgc3RlcCBpcyB0byBpZGVudGlmeSB0aGUgbW9zdCBwcm9taXNpbmcgZnVuY3Rpb25zIGZvciBmdXp6aW5nLlxuXG5Mb29raW5nIGF0IHRoZSBwYXRjaCwgSSBzZWUgbW9kaWZpY2F0aW9ucyBpbiBhIGZldyBrZXkgYXJlYXM6IGBnbWVtX2Fib3J0YCwgYGt2bV90cmFuc2xhdGVfdm5jcmAsIGBrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW1gLCBgX19zZXZfc25wX3JlbG9hZF92bXNhYCwgYHNldl9oYW5kbGVfcm1wX2ZhdWx0YCwgYW5kIGBrdm1fZ21lbV9nZXRfcGZuYC4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGVpciBlbnRyeSBwb2ludHMgYW5kIGNhbGwgY2hhaW5zLlxuXG5ga3ZtX2dtZW1fZ2V0X3BmbmAgYXBwZWFycyB0byBiZSBhbiBBUEkgZnVuY3Rpb24sIHdoaWNoIGlzIHVzZWZ1bC4gU2FtZSBnb2VzIGZvciBgc2V2X2hhbmRsZV9ybXBfZmF1bHRgLiBJIHNob3VsZCBpbnZlc3RpZ2F0ZSB0aGUgY2FsbGVycyBhbmQgaG93IHRoZSBkYXRhIGZsb3dzIGludG8gdGhlbSB0byBzZWUgaG93IHRoZXkncmUgZXhwb3NlZCB0byB0aGUgZ3Vlc3QuIE5vdywgYGdtZW1fYWJvcnRgIGlzIGNhbGxlZCBieSBgdXNlcl9tZW1fYWJvcnRgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCByaWdodD8gTGV0IG1lIGRvdWJsZS1jaGVjayBob3cgdGhhdCB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA2NCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOToyMDowNS4zODc0MjE3MjhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5MDQ4MzgzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnbWVtX2Fib3J0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva3ZtL21tdS5jPTE2MDA9c3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjIHtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTE2MDctXFxuYXJjaC9hcm02NC9rdm0vbW11LmM6MTYwODpzdGF0aWMgaW50IGdtZW1fYWJvcnQoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTE2MDkte1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmM9MjI0OD1pbnQga3ZtX2hhbmRsZV9ndWVzdF9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0yNDE5LVxcdFxcdGlmIChrdm1fc2xvdF9oYXNfZ21lbShtZW1zbG90KSlcXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoyNDIwOlxcdFxcdFxcdHJldCA9IGdtZW1fYWJvcnQoXFx1MDAyNnMyZmQpO1xcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTI0MjEtXFx0XFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOToyMDowNy4wNzc5MTI2MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MTUzNzI0NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBhcyBhbiBleHBlcnQgaW4gdGhpcyBhcmVhOlxuXG4qKkFuYWx5emluZyBLVk0gRW50cnkgUG9pbnRzOiBBUk02NCB2cy4geDg2KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IEtWTSBoYW5kbGVzIGd1ZXN0IGFib3J0cyBhbmQgbWVtb3J5IGZhdWx0cy4gSXQgbG9va3MgbGlrZSBga3ZtX2hhbmRsZV9ndWVzdF9hYm9ydGAgaXMgdGhlIGtleSBlbnRyeSBwb2ludCBmb3IgQVJNNjQgYXJjaGl0ZWN0dXJlcy4gVGhhdCBtYWtlcyBzZW5zZSwgaXQncyB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gZm9yIGRlYWxpbmcgd2l0aCB0aG9zZSB1bmV4cGVjdGVkIGV2ZW50cy4gTm93LCBmb3IgeDg2LCBpdCdzIG5vdCBxdWl0ZSB0aGUgc2FtZS4gSXQgbG9va3MgbGlrZSB0aGUgcGF0aCBpcyB0aHJvdWdoIGBrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW1gLCB3aGljaCBpcyB1c2VkIGJ5IGZ1bmN0aW9ucyBsaWtlIGBrdm1fbW11X2ZhdWx0aW5fcGZuYCBvciBzb21ldGhpbmcgc2ltaWxhciwgYW5kIG1heWJlIG90aGVycywgcmVsYXRlZCB0byBwYWdlIGZhdWx0cyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQuIFNvIGl0IHNlZW1zIGxpa2UgQVJNNjQgYW5kIHg4NiB0YWtlIGRpZmZlcmVudCByb3V0ZXMgdG8gaGFuZGxlIHRoZXNlIHNpbWlsYXIgbG93LWxldmVsIGlzc3Vlcywgb25lIHdpdGggYSBkZWRpY2F0ZWQgYWJvcnQgaGFuZGxlciBhbmQgdGhlIG90aGVyIGJ5IHdvcmtpbmcgdGhyb3VnaCB0aGUgTU1VIGZhdWx0IGhhbmRsZXJzLiBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSB4ODYgY29kZSB0byBwaW5wb2ludCB0aGUgZXhhY3QgY2FsbGluZyBzdHJ1Y3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5MTcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOToyMDoxMC44OTMyODc4NTNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDg5ODA2NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX21tdV9mYXVsdGluX3Bmbl9nbWVtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9tbXUvbW11LmM9NDYxMz1zdGF0aWMgdm9pZCBrdm1fbW11X2ZpbmlzaF9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDYxOS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ2MjA6c3RhdGljIGludCBrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDYyMS1cXHRcXHRcXHRcXHQgICAgc3RydWN0IGt2bV9wYWdlX2ZhdWx0ICpmYXVsdClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NDY0Mz1zdGF0aWMgaW50IF9fa3ZtX21tdV9mYXVsdGluX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ2NDgtXFx0aWYgKGZhdWx0LVxcdTAwM2Vpc19wcml2YXRlIHx8IGt2bV9tZW1zbG90X2lzX2dtZW1fb25seShmYXVsdC1cXHUwMDNlc2xvdCkpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0NjQ5OlxcdFxcdHJldHVybiBrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW0odmNwdSwgZmF1bHQpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDY1MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6MjA6MTIuNjAyMjc2OTg0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNjQ5NTEzOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFscmVhZHkgZGVlcCBpbiBLVk0gaW50ZXJuYWxzOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFBhZ2UgRmF1bHQgSGFuZGxpbmcgUGF0aCBpbiBLVk0qKlxuXG5BbHJpZ2h0LCBJJ20gdHJhY2luZyB0aHJvdWdoIHRoaXMgZmF1bHQgaGFuZGxpbmcgbG9naWMuIEkgc2VlIHRoYXQgYF9fa3ZtX21tdV9mYXVsdGluX3BmbmAgaXMgY2FsbGVkIGJ5IGBrdm1fbW11X2ZhdWx0aW5fcGZuYC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQncyB0aGUgaW50ZXJuYWwgd29ya2VyIGZ1bmN0aW9uIGZvciB0aGUgaW5pdGlhbCBmYXVsdC1pbiBvcGVyYXRpb24uIEJ1dCB0aGlzIGhhcyBtYWRlIG1lIHRoaW5rLi4uIHdoYXQncyB0aGUgcm9sZSBvZiBga3ZtX21tdV9kb19wYWdlX2ZhdWx0YCBpbiB0aGlzIHdob2xlIGZsb3c/IElzIGl0IGEgaGlnaGVyLWxldmVsIGVudHJ5IHBvaW50PyBJcyBpdCBjYWxsZWQgYmVmb3JlIG9yIGFmdGVyIHRoaXMgYGZhdWx0aW5gIHNlcXVlbmNlLCBvciBpcyBpdCBhIGNvbXBsZXRlbHkgc2VwYXJhdGUgcGF0aD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucywgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgb3ZlcmFsbCBoYW5kbGluZyBvZiBwYWdlIGZhdWx0cyB3aXRoaW4gdGhlIEtWTSBNTVUuIEkgcmVhbGx5IG5lZWQgdG8gbWFwIG91dCB0aGUgZW50aXJlIGNhbGwgZ3JhcGggdG8gYmUgc3VyZS4gVGhlcmUncyBhIGNoYW5jZSB0aGV5IGFyZSBjb21wbGV0ZWx5IHVucmVsYXRlZCBidXQgaXQgc2VlbXMgdW51c3VhbC4gSXQgd291bGQgYmUgdmFsdWFibGUgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIGl0IGlzIGEgcG90ZW50aWFsIG9wdGltaXphdGlvbiwgb3IgaWYgb25lIGNhbGxzIHRoZSBvdGhlci4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1NzAsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOToyMDoxNi43NjcyMzEwOTJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Nzk3NDU2NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX21tdV9mYXVsdGluX3BmblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ2MTM9c3RhdGljIHZvaWQga3ZtX21tdV9maW5pc2hfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ2MTktXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0NjIwOnN0YXRpYyBpbnQga3ZtX21tdV9mYXVsdGluX3Bmbl9nbWVtKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ2MjEtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fcGFnZV9mYXVsdCAqZmF1bHQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ2NDItXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0NjQzOnN0YXRpYyBpbnQgX19rdm1fbW11X2ZhdWx0aW5fcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ2NDQtXFx0XFx0XFx0XFx0IHN0cnVjdCBrdm1fcGFnZV9mYXVsdCAqZmF1bHQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ2NDgtXFx0aWYgKGZhdWx0LVxcdTAwM2Vpc19wcml2YXRlIHx8IGt2bV9tZW1zbG90X2lzX2dtZW1fb25seShmYXVsdC1cXHUwMDNlc2xvdCkpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0NjQ5OlxcdFxcdHJldHVybiBrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW0odmNwdSwgZmF1bHQpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDY1MC1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDY4Ny1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ2ODg6c3RhdGljIGludCBrdm1fbW11X2ZhdWx0aW5fcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ2ODktXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBrdm1fcGFnZV9mYXVsdCAqZmF1bHQsIHVuc2lnbmVkIGludCBhY2Nlc3MpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ3ODEtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0NzgyOlxcdHJldCA9IF9fa3ZtX21tdV9mYXVsdGluX3Bmbih2Y3B1LCBmYXVsdCk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NzgzLVxcdGlmIChyZXQgIT0gUkVUX1BGX0NPTlRJTlVFKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz00ODQwPXN0YXRpYyBpbnQgZGlyZWN0X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQgKmZhdWx0KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00ODU4LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDg1OTpcXHRyID0ga3ZtX21tdV9mYXVsdGluX3Bmbih2Y3B1LCBmYXVsdCwgQUNDX0FMTCk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00ODYwLVxcdGlmIChyICE9IFJFVF9QRl9DT05USU5VRSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NDkzNT1zdGF0aWMgaW50IGt2bV90ZHBfbW11X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00OTUwLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDk1MTpcXHRyID0ga3ZtX21tdV9mYXVsdGluX3Bmbih2Y3B1LCBmYXVsdCwgQUNDX0FMTCk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00OTUyLVxcdGlmIChyICE9IFJFVF9QRl9DT05USU5VRSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmg9MjI2PXN0cnVjdCBrdm1fcGFnZV9mYXVsdCB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oLTI3OC1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oOjI3OTpcXHQvKiBPdXRwdXRzIG9mIGt2bV9tbXVfZmF1bHRpbl9wZm4oKS4gICovXFxuYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaC0yODAtXFx0dW5zaWduZWQgbG9uZyBtbXVfc2VxO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9wYWdpbmdfdG1wbC5oPTgwND1zdGF0aWMgaW50IEZOQU1FKHBhZ2VfZmF1bHQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9wYWdlX2ZhdWx0ICpmYXVsdClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnaW5nX3RtcGwuaC04NDEtXFxuYXJjaC94ODYva3ZtL21tdS9wYWdpbmdfdG1wbC5oOjg0MjpcXHRyID0ga3ZtX21tdV9mYXVsdGluX3Bmbih2Y3B1LCBmYXVsdCwgd2Fsa2VyLnB0ZV9hY2Nlc3MpO1xcbmFyY2gveDg2L2t2bS9tbXUvcGFnaW5nX3RtcGwuaC04NDMtXFx0aWYgKHIgIT0gUkVUX1BGX0NPTlRJTlVFKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOToyMDoxOC40NDY5ODE5NjRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM4OTQyNjcyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEtWTSBNZW1vcnkgTWFuYWdlbWVudCAtIEluaXRpYWwgVGhvdWdodHMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHNwb3R0ZWQgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSB3aXRoIGBrdm1fZ21lbV9nZXRfcGZuYC4gSXQncyByZWFjaGFibGUgZnJvbSBLVk0gcGFnZSBmYXVsdHMgd2hlbiBgZ3Vlc3RfbWVtZmRgIGlzIGluIHVzZSwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFRoZSBrZXkgZnVuY3Rpb25zIHRvIGludmVzdGlnYXRlIGFyZTogYGt2bV9nbWVtX2dldF9wZm5gLCBkZWZpbml0ZWx5LiBBbHNvLCBJJ2xsIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IGBzZXZfaGFuZGxlX3JtcF9mYXVsdGAsIGFuZCBmb3IgQVJNNjQsIGBrdm1faGFuZGxlX2d1ZXN0X2Fib3J0YC4gVGhlbiwgb24geDg2LCBga3ZtX21tdV9kb19wYWdlX2ZhdWx0YCBsb29rcyBsaWtlIGEgZ29vZCBlbnRyeSBwb2ludCB0byB0cmFjZSBmcm9tLiBBY3R1YWxseSwgd2FpdCAtIGBrdm1fZ21lbV9nZXRfcGZuYCBpcyAqdGhlKiBBUEkgZnVuY3Rpb24sIHNvIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuXG5cbkknbGwgY2hlY2sgYGt2bV9nbWVtX2dldF9wZm5gIGluIGB2aXJ0L2t2bS9ndWVzdF9tZW1mZC5jYCBmaXJzdC4gVGhlbiBJJ2xsIGNoZWNrIGBzZXZfaGFuZGxlX3JtcF9mYXVsdGAgaW4gYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgLiBBbmQgSSBzaG91bGQgYWxzbyBjb25zaWRlciBga3ZtX3RyYW5zbGF0ZV92bmNyYCwgd2hpY2ggaXMgaW4gYGFyY2gvYXJtNjQva3ZtL25lc3RlZC5jYCB0byBzZWUgaWYgdGhlcmUncyBzaW1pbGFyIGxvZ2ljIHRoZXJlLlxuXG5UbyBiZSBwcmVjaXNlLCBJIHdpbGwgZm9jdXMgb24gdGhlc2Uga2V5IGZ1bmN0aW9uczpcblxuKiAgIGBrdm1fZ21lbV9nZXRfcGZuYFxuKiAgIGBzZXZfaGFuZGxlX3JtcF9mYXVsdGBcbiogICBga3ZtX3RyYW5zbGF0ZV92bmNyYFxuXG5XYWl0LCBga3ZtX3RyYW5zbGF0ZV92bmNyYCBpcyBzdGF0aWMsIHdoaWNoIG1ha2VzIG1lIHdvbmRlciBpZiBpdCdzIGlubGluZWQuIEkgbmVlZCB0byBiZSBzdXJlIHRvIGNoZWNrIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTEwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjIwOjI1LjgzNjQxMjI0M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwODMzNjA5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fdHJhbnNsYXRlX3ZuY3JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MTQwNz1zdGF0aWMgdTY0IHJlYWRfdm5jcl9lbDIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTQxMS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxNDEyOnN0YXRpYyBpbnQga3ZtX3RyYW5zbGF0ZV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCAqaXNfZ21lbSlcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNDEzLXtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTE1NDI9aW50IGt2bV9oYW5kbGVfdm5jcl9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNTY3LVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjE1Njg6XFx0cmV0ID0ga3ZtX3RyYW5zbGF0ZV92bmNyKHZjcHUsIFxcdTAwMjZpc19nbWVtKTtcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNTY5LVxcdGlmIChyZXQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6MjA6MjcuNDQ0NzU0OTY5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwODg1MTY1MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB3aGF0IEknbSBsb29raW5nIGF0LCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipEZWJ1Z2dpbmcgS1ZNL1NFVi1TTlAgSW50ZXJhY3Rpb25zKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHNvbWUgS1ZNIGNvZGUgYW5kIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgdmlydHVhbCBOTUkgaGFuZGxpbmcgZm9yIFNFVi1TTlAuIFRoZSBga3ZtX2hhbmRsZV92bmNyX2Fib3J0YCBmdW5jdGlvbiBpcyB0aGUgY3J1Y2lhbCBlbnRyeSBwb2ludCBmb3IgYGt2bV90cmFuc2xhdGVfdm5jcmAsIHdoaWNoIGlzIHdoZXJlIEknbGwgYmVnaW4gbXkgaW52ZXN0aWdhdGlvbi4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBgZ21lbV9hYm9ydGAgZnVuY3Rpb24uIEkga25vdyBpdCdzIGludm9rZWQgYnkgYGt2bV9oYW5kbGVfZ3Vlc3RfYWJvcnRgLCB3aGljaCBpcyBsaWtlbHkgd2hlcmUgdGhlIGFib3J0IHNpZ25hbCBpcyBvcmlnaW5hdGluZyBmcm9tLiBJIHN1c3BlY3QgdGhlIGlzc3VlIGNvdWxkIGJlIHJlbGF0ZWQgdG8gbWVtb3J5IGFjY2VzcyBpc3N1ZXMgb3Igc29tZSBraW5kIG9mIGd1ZXN0LXNpZGUgaW50ZXJydXB0aW9uIG9yIGV4Y2VwdGlvbiB0aGF0J3MgdHJpZ2dlcmluZyB0aGUgYWJvcnQuIE5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgYF9fc2V2X3NucF9yZWxvYWRfdm1zYWAgYW5kIHRoZSBmbG93IHRoYXQgaW52b2tlcyBpdCDigJMgaXQgYXBwZWFycyB0byBiZSBjYWxsZWQgYnkgYHNldl9zbnBfcmVsb2FkX3Ztc2FgIG9yIGEgcmVsYXRlZCBmdW5jdGlvbiwgd2hpY2ggc3VnZ2VzdHMgYSBwb3NzaWJsZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBWTSBzdGF0ZSBzYXZlL3Jlc3RvcmUgbWVjaGFuaXNtIGR1cmluZyBhbiBTRVYtU05QIHByb3RlY3RlZCBvcGVyYXRpb24uIE15IGh5cG90aGVzaXMgaXMgdGhhdCB0aGVyZSBtaWdodCBiZSBhIHByb2JsZW0gd2l0aCB0aGUgd2F5IHdlJ3JlIGhhbmRsaW5nIHRoZSBWTVNBIHJlbG9hZCwgcG9zc2libHkgYSByYWNlIGNvbmRpdGlvbiBvciBhIHN0YXRlIG1pc21hdGNoIHRoYXQncyB0cmlnZ2VyaW5nIHRoZSBhYm9ydC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cgdGhyb3VnaCBhbGwgb2YgdGhlc2UgY2FsbHMgdG8gZnVsbHkgdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA4MiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjIwOjMyLjUzMzI3Mzk5NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxNTgxNTYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3Nldl9zbnBfcmVsb2FkX3Ztc2FcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0zOTg4PXN0YXRpYyBpbnQgc25wX2JlZ2luX3BzYyhzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDAyNy1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQwMjg6c3RhdGljIHZvaWQgX19zZXZfc25wX3JlbG9hZF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDAyOS17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQwOTk9c3RhdGljIHZvaWQgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQxMTctXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0MTE4OlxcdF9fc2V2X3NucF9yZWxvYWRfdm1zYSh2Y3B1LCBncGEpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDExOS1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDEzMD12b2lkIHNldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00MTM1LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDEzNjpcXHRfX3Nldl9zbnBfcmVsb2FkX3Ztc2EodmNwdSwgc2V2X2VzLVxcdTAwM2VzbnBfZ3Vlc3Rfdm1zYV9ncGEpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDEzNy19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjIwOjM0LjI0OTA5NjI0NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjExMDIxMTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgTm9uLVN0YXRpYyBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBjb2RlLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgYHNldl9zbnBfcmVsb2FkX3Ztc2FgIGlzIHRoZSBub24tc3RhdGljIGVudHJ5IHBvaW50LiBUaGF0J3MgbXkgc3RhcnRpbmcgcG9pbnQuIE5vdywgSSBuZWVkIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgZWxzZSBpcyBleHBvc2VkLiBMZXQncyBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZCBhbmQgbGlzdCBvdXQgdGhlIG90aGVyIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIHNvIEkgY2FuIHNlZSB0aGUgc2NvcGUgb2Ygd2hhdCB3ZSdyZSB3b3JraW5nIHdpdGggaGVyZS5cblxuQWxyaWdodCwgaGVyZSdzIHdoYXQgSSd2ZSBnb3Q6XG5cbiogICBga3ZtX2dtZW1fZ2V0X3BmbmBcbiogICBgc2V2X2hhbmRsZV9ybXBfZmF1bHRgXG4qICAgYHNldl9zbnBfcmVsb2FkX3Ztc2FgXG4qICAgYGt2bV9oYW5kbGVfdm5jcl9hYm9ydGBcbiogICBga3ZtX2hhbmRsZV9ndWVzdF9hYm9ydGAgKHNwZWNpZmljYWxseSBmb3IgQVJNNjQsIG5vdGVkKVxuKiAgIEFuZCBmaW5hbGx5LCBga3ZtX21tdV9kb19wYWdlX2ZhdWx0YCAoZm9yIHg4NikuIEhtbS4uLiBga3ZtX21tdV9kb19wYWdlX2ZhdWx0YC4uLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQ7IEknbSBiZXR0aW5nIHRoYXQncyBlaXRoZXIgYSBtYWNybyBvciBhIGZ1bmN0aW9uLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGlzIGlzIGEgbWFjcm8gb3IgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTA1LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjIwOjM5LjQ2MDEyMDI1M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4NjMyNTc0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fbW11X2RvX3BhZ2VfZmF1bHRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL21tdS9tbXUuYz00OTcwPXN0YXRpYyBpbnQga3ZtX3RkcF9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9wYWdlX2ZhdWx0ICpmYXVsdClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDk3OS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ5ODA6c3RhdGljIGludCBrdm1fbW11X2RvX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDk4MS1cXHRcXHRcXHRcXHQgdTY0IGVyciwgYm9vbCBwcmVmZXRjaCwgaW50ICplbXVsYXRpb25fdHlwZSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NTA0NT1zdGF0aWMgaW50IGt2bV90ZHBfcGFnZV9wcmVmYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTA2NC1cXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUwNjU6XFx0XFx0ciA9IGt2bV9tbXVfZG9fcGFnZV9mYXVsdCh2Y3B1LCBncGEsIGVycm9yX2NvZGUsIHRydWUsIE5VTEwsIGxldmVsKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUwNjYtXFx0fSB3aGlsZSAociA9PSBSRVRfUEZfUkVUUlkpO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz01MTM1PXZvaWQga3ZtX2FyY2hfYXN5bmNfcGFnZV9yZWFkeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fYXN5bmNfcGYgKndvcmspXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUxNTMtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MTU0OlxcdHIgPSBrdm1fbW11X2RvX3BhZ2VfZmF1bHQodmNwdSwgd29yay1cXHUwMDNlY3IyX29yX2dwYSwgd29yay1cXHUwMDNlYXJjaC5lcnJvcl9jb2RlLFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTE1NS1cXHRcXHRcXHRcXHQgIHRydWUsIE5VTEwsIE5VTEwpO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz02NTY3PWludCBub2lubGluZSBrdm1fbW11X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLCB1NjQgZXJyb3JfY29kZSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjYwMi1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjY2MDM6XFx0XFx0ciA9IGt2bV9tbXVfZG9fcGFnZV9mYXVsdCh2Y3B1LCBjcjJfb3JfZ3BhLCBlcnJvcl9jb2RlLCBmYWxzZSxcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY2MDQtXFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2ZW11bGF0aW9uX3R5cGUsIE5VTEwpO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02NjIzLVxcdC8qXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2NjI0OlxcdCAqIE5vbmUgb2YgaGFuZGxlX21taW9fcGFnZV9mYXVsdCgpLCBrdm1fbW11X2RvX3BhZ2VfZmF1bHQoKSwgb3JcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY2MjUtXFx0ICoga3ZtX21tdV93cml0ZV9wcm90ZWN0X2ZhdWx0KCkgcmV0dXJuIFJFVF9QRl9DT05USU5VRS5cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjY2MjY6XFx0ICoga3ZtX21tdV9kb19wYWdlX2ZhdWx0KCkgb25seSB1c2VzIFJFVF9QRl9DT05USU5VRSBpbnRlcm5hbGx5IHRvXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02NjI3LVxcdCAqIGluZGljYXRlIGNvbnRpbnVpbmcgdGhlIHBhZ2UgZmF1bHQgaGFuZGxpbmcgdW50aWwgdG8gdGhlIGZpbmFsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oPTIyNj1zdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQge1xcbmFyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmg6MjI3OlxcdC8qIGFyZ3VtZW50cyB0byBrdm1fbW11X2RvX3BhZ2VfZmF1bHQuICAqL1xcbmFyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmgtMjI4LVxcdGNvbnN0IGdwYV90IGFkZHI7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oLTI5NC0gKiBSZXR1cm4gdmFsdWVzIG9mIGhhbmRsZV9tbWlvX3BhZ2VfZmF1bHQoKSwgbW11LnBhZ2VfZmF1bHQoKSwgZmFzdF9wYWdlX2ZhdWx0KCksXFxuYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaDoyOTU6ICogYW5kIG9mIGNvdXJzZSBrdm1fbW11X2RvX3BhZ2VfZmF1bHQoKS5cXG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oLTI5Ni0gKlxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaD0zMTI9ZW51bSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oLTMyNS0gKiAgIFxcXCJURVNUICVyYXgsICVyYXgsIEpOWlxcXCIsIGFzIGFsbCBcXFwic3RvcCFcXFwiIHZhbHVlcyBhcmUgbm9uLXplcm8sXFxuYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaDozMjY6ICogLSBrdm1fbW11X2RvX3BhZ2VfZmF1bHQoKSB0byByZXR1cm4gb3RoZXIgUkVUX1BGXyogYXMgYSBwb3NpdGl2ZSB2YWx1ZS5cXG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oLTMyNy0gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6MjA6NDEuMDQ2NDYwNjdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI2OTI3MzMzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHg4NiBQYWdlIEZhdWx0IEhhbmRsZXIqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gYGt2bV9tbXVfcGFnZV9mYXVsdGAsIHdoaWNoIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgaGFuZGxpbmcgcGFnZSBmYXVsdHMgb24geDg2LCB0aGUgY29yZSBvZiB0aGUgaXNzdWUuIFRoYXQgaW1tZWRpYXRlbHkgcG9pbnRzIG1lIHRvIGEgc3BlY2lmaWMgc2V0IG9mIGZ1bmN0aW9ucyBJIG5lZWQgdG8gc2NydXRpbml6ZSBtb3JlIGNsb3NlbHk6IGBrdm1fZ21lbV9nZXRfcGZuYCwgYHNldl9oYW5kbGVfcm1wX2ZhdWx0YCwgYHNldl9zbnBfcmVsb2FkX3Ztc2FgLCBga3ZtX2hhbmRsZV92bmNyX2Fib3J0YCwgYGt2bV9oYW5kbGVfZ3Vlc3RfYWJvcnRgLCBhbmQgb2YgY291cnNlLCB0aGUgaGFuZGxlciBpdHNlbGYsIGBrdm1fbW11X3BhZ2VfZmF1bHRgLiBUaGVzZSBhcmUgdGhlIGtleSBwbGF5ZXJzIGluIHRoaXMgZmF1bHQgaGFuZGxpbmcgc2NlbmFyaW8uXG5cbk15IGZpcnN0IGNoZWNrIGlzIHRvIHZlcmlmeSBpZiBga3ZtX2dtZW1fZ2V0X3BmbmAgaXMgc3RhdGljIG9yIGV4cG9ydGVkLiBBaCwgZ29vZCwgaXQncyBub24tc3RhdGljIGFuZCByZXNpZGVzIHdpdGhpbiBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2AsIG1lYW5pbmcgSSBjYW4gcmVhZGlseSBhY2Nlc3MgYW5kIGV4YW1pbmUgaXQuXG5cbk5vdywgbGV0J3MgY2lyY2xlIGJhY2sgdG8gdGhlIGNvbmZpZ3VyYXRpb25zIHN1cnJvdW5kaW5nIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMuIEkgc2VlIHRoYXQgYEtWTV9HVUVTVF9NRU1GRGAgaXMgc2VsZWN0ZWQgZm9yIGJvdGggQVJNNjQgYW5kIHg4Nl82NCwgYnV0IGl0J3Mgbm90IGEgdXNlci1zZWxlY3RhYmxlIG9wdGlvbiwgd2hpY2ggaXMgaW1wb3J0YW50IHRvIHJlbWVtYmVyLiBJdCdzIGFjdHVhbGx5IHNlbGVjdGVkIHRocm91Z2ggYEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTYCwgb3IgYEtWTV9TV19QUk9URUNURURfVk1gLCBvciBqdXN0IGBLVk1gIGl0c2VsZiBmb3IgdGhvc2UgYXJjaGl0ZWN0dXJlcy4gSSBuZWVkIHRvIG5vdyBkZXRlcm1pbmUgaWYgYEtWTV9TV19QUk9URUNURURfVk1gIGlzIGEgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24sIGFzIHRoaXMgd291bGQgaW1wYWN0IG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSdzIGJlaGF2aW9yIGFuZCB0aGlzIHBhZ2UgZmF1bHQncyBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzY0OSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOToyMDo0Ny4zMTU3MzY2MzFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzI1ODYzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9Njk9Y29uZmlnIEtWTV9XRVJST1JcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOToyMDo0OS4wNDgzMjkxOTFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE1NTQxODI2MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDpcblxuKipFeGFtaW5pbmcgS1ZNIGFuZCBHdWVzdCBNZW1vcnkgUHJvdGVjdGlvbiBvbiB4ODYqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBndWVzdCBtZW1vcnkgaXMgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgeDg2IGFyY2hpdGVjdHVyZSBhbmQgS1ZNLiBJJ20gZm9jdXNpbmcgb24gc29mdHdhcmUtcHJvdGVjdGVkIFZNcywgYW5kIEkgc2VlIHRoYXQgYEtWTV9TV19QUk9URUNURURfVk1gIGlzIHRoZSBmbGFnIHRoYXQgZW5hYmxlcyBgZ3Vlc3RfbWVtZmRgIGZvciB0aGVzZSBWTXMuIEJ1dCB0aGVuIEknbSB0aGlua2luZywgaXNuJ3QgYEtWTV9HVUVTVF9NRU1GRGAgYWxyZWFkeSBpbXBsaWNpdGx5IHNlbGVjdGVkIGJ5IGBLVk1fWDg2YCBpZiB3ZSdyZSBvbiBgWDg2XzY0YD8gVGhhdCBzZWVtcyBwb3RlbnRpYWxseSByZWR1bmRhbnQgb3IgbWF5YmUgdGhlcmUncyBhIHNwZWNpZmljIG51YW5jZSBJJ20gbWlzc2luZy4gVGltZSB0byBnbyByaWdodCB0byB0aGUgc291cmNlLiBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgdGhlIHg4NiBhcmNoaXRlY3R1cmUsIHNwZWNpZmljYWxseSBgYXJjaC94ODYva3ZtL0tjb25maWdgLCB0byBjbGFyaWZ5IHRoZSBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyAqcmVhbGx5KiBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0MjAsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOToyMTowMC42MDI1MTUzMzdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDQ0NjcyMzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IEtWTV9HVUVTVF9NRU1GRFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2t2bS9LY29uZmlnPTIwPW1lbnVjb25maWcgS1ZNXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTM4LVxcdHNlbGVjdCBHVUVTVF9QRVJGX0VWRU5UUyBpZiBQRVJGX0VWRU5UU1xcbmFyY2gvYXJtNjQva3ZtL0tjb25maWc6Mzk6XFx0c2VsZWN0IEtWTV9HVUVTVF9NRU1GRFxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctNDAtXFx0aGVscFxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MjA9Y29uZmlnIEtWTV9YODZcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTQ5LVxcdHNlbGVjdCBLVk1fV0VSUk9SIGlmIFdFUlJPUlxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjUwOlxcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkQgaWYgWDg2XzY0XFxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjIxOjAyLjI0Njk5MTMxMVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTAyMzYyMDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktWTSBDb25maWd1cmF0aW9uIGZvciBTRVYqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGl0IHNlZW1zIHRoYXQgaWYgd2UncmUgb24gYW4geDg2LTY0IHN5c3RlbSwgYEtWTV9HVUVTVF9NRU1GRGAgaXMgYXV0b21hdGljYWxseSBpbmNsdWRlZCBieSBgS1ZNX1g4NmAuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MuIFdlIGNhbiBhc3N1bWUgdGhhdCBpZiBgWDg2XzY0YCBpcyBzZXQgY29ycmVjdGx5LCB0aGVuIGBLVk1fR1VFU1RfTUVNRkRgIHdpbGwgYmUgY29uZmlndXJlZCBhcyBwYXJ0IG9mIHRoZSBleGlzdGluZyBgS1ZNX1g4NmAgY29uZmlndXJhdGlvbi5cblxuVGhlcmVmb3JlLCBmb3IgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSB0byB3b3JrLCB3ZSByZWFsbHkganVzdCBuZWVkIGBLVk1gIGVuYWJsZWQsIGFuZCB0aGVuIGBLVk1fQU1EYCBhcyB0aGF0IHNlZW1zIHRvIGJlIHRoZSBjcml0aWNhbCBkZXBlbmRlbmN5IGZvciBvdXIgQU1EIGhhcmR3YXJlLlxuXG5Ob3csIHRoZSBuZXh0IHRoaW5nIHRvIHZlcmlmeSBpcyB0aGF0IGBLVk1fQU1EX1NFVmAgaXMgYWxzbyBwcm9wZXJseSBjb25maWd1cmVkIGFuZCBlbmFibGVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIFNFVi1zcGVjaWZpYyBwaWVjZXMgYXJlIGFsc28gdGFrZW4gY2FyZSBvZiBwcm9wZXJseS4gTGV0J3MgZGlnIGludG8gdGhhdCBhbmQgY29uZmlybSB0aGUgYEtWTV9BTURfU0VWYCBzZXR0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDk0OCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjIxOjA4LjM0OTM1NjcxOVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5Nzg1NDE2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0FNRF9TRVZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTQ2PWNvbmZpZyBLVk1fQU1EXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOToyMToxMC4wNDcyMTYzOVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDkzMjQ5MDMzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBUaG91Z2h0IFByb2Nlc3Mgb24gS1ZNIENvbmZpZ3VyYXRpb24gYW5kIEZ1bmN0aW9uIFNlbGVjdGlvbioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgb3B0aW1hbCBjb25maWd1cmF0aW9uIGFuZCBrZXkgZnVuY3Rpb25zIHRvIGluY2x1ZGUgaGVyZS4gYEtWTV9BTURfU0VWYCBpcyBkZWZpbml0ZWx5IGEgZ29vZCBjaG9pY2UsIGFuZCBvZiBjb3Vyc2UsIHRoZSBiYXNlIGBLVk1gIGNvbmZpZ3VyYXRpb24gaXRzZWxmLlxuXG5TbywgbGV0J3MgbGlzdCB0aG9zZSBvdXQ6XG5Db25maWdzOlxuLSBgS1ZNYFxuLSBgS1ZNX0FNRF9TRVZgXG5cbldhaXQsIGp1c3QgdG8gY2xhcmlmeSwgYEtWTWAgd2lsbCBjb3ZlciBBUk02NCwgc28gdGhhdCdzIGFsbCBJIG5lZWQgdGhlcmUuXG5cbk5vdywgbGV0J3MgbW92ZSBvbiB0byB0aGUgZnVuY3Rpb25zLiBJJ3ZlIGdvdCBhIGZldzogYGt2bV9nbWVtX2dldF9wZm5gLCBgc2V2X2hhbmRsZV9ybXBfZmF1bHRgLCBgc2V2X3NucF9yZWxvYWRfdm1zYWAsIGBrdm1faGFuZGxlX3ZuY3JfYWJvcnRgLCBga3ZtX2hhbmRsZV9ndWVzdF9hYm9ydGAsIGFuZCBga3ZtX21tdV9wYWdlX2ZhdWx0YC5cblxuSG1tLCBob2xkIG9uLiBJIHJlbWVtYmVyIHRoZSBpbnN0cnVjdGlvbnMsIFwiQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXCIgUmlnaHQsIGBrdm1faGFuZGxlX2d1ZXN0X2Fib3J0YCBhbmQgYGt2bV9tbXVfcGFnZV9mYXVsdGAgYXJlICp2ZXJ5KiBob3QgcGF0aHMsIHNvIHRob3NlIGFyZSBvdXQuXG5cbk9rYXksIGxldCdzIHJlLWV2YWx1YXRlLiBJIGNhbiBsaXN0IHRoZSByZW1haW5pbmcgZnVuY3Rpb25zOiBga3ZtX2dtZW1fZ2V0X3BmbmAsIGBzZXZfaGFuZGxlX3JtcF9mYXVsdGAsIGBzZXZfc25wX3JlbG9hZF92bXNhYCwgYGt2bV9oYW5kbGVfdm5jcl9hYm9ydGAuIFRob3NlIHNob3VsZCBiZSBzcGVjaWZpYyBlbm91Z2guXG5cbk5vdywgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgdGhvc2UgcmVtYWluaW5nIGZ1bmN0aW9ucyBhcmVuJ3Qgb3Zlcmx5IGdlbmVyYWwuIGBrdm1faGFuZGxlX3ZuY3JfYWJvcnRgIGhhbmRsZXMgbmVzdGVkIHZpcnR1YWxpemF0aW9uIFZOQ1IgYWJvcnRzIOKAkyB0aGF0J3Mgc3BlY2lmaWMuIGBzZXZfaGFuZGxlX3JtcF9mYXVsdGAgaGFuZGxlcyBSTVAgZmF1bHRzLCBhbHNvIG5vdCBhIGdlbmVyaWMgaG90IHBhdGguIGBzZXZfc25wX3JlbG9hZF92bXNhYCBpcyBmb3IgU0VWLVNOUCBWTVNBIHJlbG9hZCwgYWdhaW4sIHNwZWNpZmljLiBBbmQgYGt2bV9nbWVtX2dldF9wZm5gIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIEkgbW9kaWZpZWQsIGNhbGxlZCB3aGVuIGZhdWx0aW5nIGluIGd1ZXN0X21lbWZkIHBhZ2VzLiBJdCdzIHBlcmZlY3RseSBzcGVjaWZpYyB0byB0aGF0LlxuXG5TbywgbXkgZmluYWwgRm9jdXNTeW1ib2xzIHNob3VsZCBiZTpcblxuLSBga3ZtX2dtZW1fZ2V0X3BmbmBcbi0gYHNldl9oYW5kbGVfcm1wX2ZhdWx0YFxuLSBgc2V2X3NucF9yZWxvYWRfdm1zYWBcbi0gYGt2bV9oYW5kbGVfdm5jcl9hYm9ydGBcblxuTGV0IG1lIGp1c3QgcXVpY2tseSBjaGVjayB0aGF0IGBrdm1fZ21lbV9nZXRfcGZuYCBpcyBleHBvcnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzNjUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6MjE6MjAuOTc5NzA5MzU1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjkzNTk5NzQ0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MX0dQTFxcXFwoa3ZtX2dtZW1fZ2V0X3BmblxcXFwpXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOToyMToyMy4yNzMzMTc5MTlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgyOTIwODAyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqRXhhbWluaW5nIHRoZSBHdWVzdCBNZW1mZCBJbXBsZW1lbnRhdGlvbiBpbiBLVk0qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY2x1ZSBpcyB0aGF0IHdoYXRldmVyIHRoaXMgcmVsYXRlcyB0byBpc24ndCAqZXhwb3J0ZWQqLCB3aGljaCBpcyBpbXBvcnRhbnQgY29udGV4dC4gVGhlIGZhY3QgdGhhdCBpdCdzICpub24tc3RhdGljKiBpbiBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2AgaXMgc2lnbmlmaWNhbnQuIFRoYXQgc3Ryb25nbHkgc3VnZ2VzdHMgaXQncyBhIGZpbGUsIGJ1dCBzb21ldGhpbmcgbG9jYWwgdG8gdGhlIEtWTSB2aXJ0dWFsaXNhdGlvbiwgYW5kIHRoZXJlJ3MgZGVmaW5pdGVseSBzb21lIGxvY2FsIHZhcmlhYmxlIGludGVyYWN0aW9uIHRoZXJlLiBNeSBpbW1lZGlhdGUgYWN0aW9uIGlzIHRvIGRpdmUgaW50byBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBub24tc3RhdGljIGVsZW1lbnQgaXMsIGhvdyBpdCdzIGJlaW5nIHVzZWQsIGFuZCB3aGF0IGl0cyByZWxhdGlvbnNoaXAgaXMgdG8gYW55IGV4dGVybmFsIGludGVyZmFjZXMsIGNvbnNpZGVyaW5nIGl0J3Mgbm90IGV4cG9ydGVkLiBUaW1lIHRvIGdvIHNwZWx1bmtpbmcgaW4gdGhlIGNvZGUhIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgZ29pbmcgb24gaW4gdGhhdCBzcGVjaWZpYyBmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjQ1MCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjIxOjI4LjEwMjUyODYzNloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1OTkxNTk1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQga3ZtX2dtZW1fZ2V0X3BmblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MjU4MT1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX21lbV9pc19wcml2YXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKVxcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI1ODctI2lmZGVmIENPTkZJR19LVk1fR1VFU1RfTUVNRkRcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MjU4ODppbnQga3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI1ODktXFx0XFx0ICAgICBnZm5fdCBnZm4sIGt2bV9wZm5fdCAqcGZuLCBpbnQgKm1heF9vcmRlcik7XFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI1OTAtI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MjU5MTpzdGF0aWMgaW5saW5lIGludCBrdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBrdm0gKmt2bSxcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjU5Mi1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LCBnZm5fdCBnZm4sXFxuLS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jPTcxNz1zdGF0aWMgc3RydWN0IGZvbGlvICpfX2t2bV9nbWVtX2dldF9wZm4oc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTc1Mi1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjc1MzppbnQga3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy03NTQtXFx0XFx0ICAgICBnZm5fdCBnZm4sIGt2bV9wZm5fdCAqcGZuLCBpbnQgKm1heF9vcmRlcilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6MjE6MjkuNzYyNDQ5ODc5WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4OTM0MjEzNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBhIGdsb2JhbCBmdW5jdGlvbiwgZ290IGl0LiBMZXQgbWUgc2VlLi4uIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYEtWTWAgYW5kIGBLVk1fQU1EX1NFVmAuIEhtbSwgYnV0IHdhaXQgYSBzZWNvbmQuIEkgdGhpbmsgYEtWTV9TV19QUk9URUNURURfVk1gIGNvdWxkIGFjdHVhbGx5IGJlIGluY3JlZGlibHkgdXNlZnVsIGZvciB0ZXN0aW5nIGBndWVzdF9tZW1mZGAgb24geDg2IGFyY2hpdGVjdHVyZXMsIGV2ZW4gd2l0aG91dCBTRVYgb3IgVERYLiBUaGF0IHdvdWxkIG9wZW4gdXAgYSB3aG9sZSBuZXcgYXZlbnVlIGZvciBleHBlcmltZW50YXRpb24gYW5kIHZhbGlkYXRpb24uXG5cblJpZ2h0LCBzbyBsZXQncyBhZGQgYEtWTV9TV19QUk9URUNURURfVk1gIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGFjdHVhbGx5IGEgdmFsaWQgY29uZmlnLCB0aG91Z2guIEdvdHRhIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgYSByZWNvZ25pemVkIGFuZCBzdXBwb3J0ZWQgb3B0aW9uIGJlZm9yZSBJIGdldCB0b28gY2FycmllZCBhd2F5LiBJIGRvbid0IHdhbnQgdG8gY2hhc2UgYSBkZWFkIGVuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcxMzIsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6MjE6MzUuNjU1ODczMzk3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkwODE3NTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTY5PWNvbmZpZyBLVk1fV0VSUk9SXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6MjE6MzcuMzQ2Njk3NjY5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwOTcyNzI2MDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBQYXRjaCoqXG5cbk9rYXksIHllcywgSSd2ZSBnb3QgaXQuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UuIFNvLCB0aGUga2V5IGhlcmUgaXMgdGhlc2UgRW5hYmxlQ29uZmlnczogYEtWTWAsIGBLVk1fQU1EX1NFVmAsIGFuZCBgS1ZNX1NXX1BST1RFQ1RFRF9WTWAuIFRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IGFsdGVycyBob3cgYGt2bV9nbWVtX2dldF9wZm5gIGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCBpdCdzIGRpdGNoaW5nIHRoZSBgc3RydWN0IHBhZ2UgKipwYWdlYCBhcmd1bWVudCBhbmQsIGNydWNpYWxseSwgaXQncyBkcm9wcGluZyB0aGUgZm9saW8gcmVmZXJlbmNlIHByaW9yIHRvIHJldHVybmluZy4gSSBjYW4gaW1tZWRpYXRlbHkgc2VlIHRoZSBpbXBsaWNhdGlvbnMuXG5cblRoaXMgYWZmZWN0cyBob3cgS1ZNIG1hbmFnZXMgbWVtb3J5IGJhY2tpbmcgc3BlY2lmaWNhbGx5IGZvciBgZ3Vlc3RfbWVtZmRgLiBBbmQgd2UgYWxsIGtub3cgYGd1ZXN0X21lbWZkYCBpcyBmb3VuZGF0aW9uYWwgZm9yIGNvbmZpZGVudGlhbCBjb21wdXRpbmcuIFdlJ3JlIHRhbGtpbmcgU0VWLVNOUCwgVERYLCBhbmQgQVJNIENDQSDigJMgYWxsIG9mIHRoZSBiaWcgcGxheWVycy4gVGhlIGNoYW5nZXMgYXJlIHRyaWdnZXJlZCB0aHJvdWdoIEtWTSBpb2N0bHMgYW5kIHBhZ2UgZmF1bHRzIHdoZW4gdXRpbGl6aW5nIGBndWVzdF9tZW1mZGAuIEkgbmVlZCB0byBlbnN1cmUgdGhpcyBpcyBoYW5kbGVkIGNvcnJlY3RseS4gTGV0J3MgY2FsbCBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc1NDQsIk91dHB1dFRva2VucyI6MTk2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjIxOjQ4LjMxOTQyNTg2MloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MTkxNTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9BTURfU0VWXCIsXG4gICAgXCJLVk1fU1dfUFJPVEVDVEVEX1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2dtZW1fZ2V0X3BmblwiLFxuICAgIFwic2V2X2hhbmRsZV9ybXBfZmF1bHRcIixcbiAgICBcInNldl9zbnBfcmVsb2FkX3Ztc2FcIixcbiAgICBcImt2bV9oYW5kbGVfdm5jcl9hYm9ydFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIHNpZ25hdHVyZSBhbmQgYmVoYXZpb3Igb2YgYGt2bV9nbWVtX2dldF9wZm5gIGJ5IHJlbW92aW5nIHRoZSBgc3RydWN0IHBhZ2UgKipwYWdlYCBhcmd1bWVudCBhbmQgZHJvcHBpbmcgdGhlIGZvbGlvIHJlZmVyZW5jZSBiZWZvcmUgcmV0dXJuaW5nLiBUaGlzIGFmZmVjdHMgaG93IEtWTSBoYW5kbGVzIG1lbW9yeSBiYWNraW5nIGZvciBndWVzdF9tZW1mZCwgd2hpY2ggaXMgYSBjb3JlIGZlYXR1cmUgZm9yIGNvbmZpZGVudGlhbCBjb21wdXRpbmcgKFNFVi1TTlAsIFREWCwgQVJNIENDQSkuIFRoZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIHBhZ2UgZmF1bHRzIHdoZW4gdXNpbmcgZ3Vlc3RfbWVtZmQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fQU1EX1NFVlwiLFxuICAgIFwiS1ZNX1NXX1BST1RFQ1RFRF9WTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9nbWVtX2dldF9wZm5cIixcbiAgICBcInNldl9oYW5kbGVfcm1wX2ZhdWx0XCIsXG4gICAgXCJzZXZfc25wX3JlbG9hZF92bXNhXCIsXG4gICAgXCJrdm1faGFuZGxlX3ZuY3JfYWJvcnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIHRoZSBzaWduYXR1cmUgYW5kIGJlaGF2aW9yIG9mIGBrdm1fZ21lbV9nZXRfcGZuYCBieSByZW1vdmluZyB0aGUgYHN0cnVjdCBwYWdlICoqcGFnZWAgYXJndW1lbnQgYW5kIGRyb3BwaW5nIHRoZSBmb2xpbyByZWZlcmVuY2UgYmVmb3JlIHJldHVybmluZy4gVGhpcyBhZmZlY3RzIGhvdyBLVk0gaGFuZGxlcyBtZW1vcnkgYmFja2luZyBmb3IgZ3Vlc3RfbWVtZmQsIHdoaWNoIGlzIGEgY29yZSBmZWF0dXJlIGZvciBjb25maWRlbnRpYWwgY29tcHV0aW5nIChTRVYtU05QLCBURFgsIEFSTSBDQ0EpLiBUaGUgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBwYWdlIGZhdWx0cyB3aGVuIHVzaW5nIGd1ZXN0X21lbWZkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOToyMTo0OC4zOTM2MjM2MDlaIiwiU2VxIjozMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzAzNjEzMTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6MjE6NDguMzk0MTE1NzY5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE1NzAzMTE3NjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgYGt2bV9nbWVtX2dldF9wZm4oKWAgdG8gcmVtb3ZlIHRoZSBgc3RydWN0IHBhZ2UgKipwYWdlYCBhcmd1bWVudCBhbmQgZHJvcHMgdGhlIGFzc29jaWF0ZWQgcGFnZSByZWZlcmVuY2UgY291bnRpbmcgKGBrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2VgLCBga3ZtX3JlbGVhc2VfcGFnZV9jbGVhbmAsIGV0Yy4pIGFjcm9zcyBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzIChhcm02NCwgeDg2KS4gVGhpcyBpcyBhIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCByZWZjb3VudGluZyBjaGFuZ2UuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgYW5kIG5vIGluZm8tbGVha3MuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2Ugd291bGQgbGlrZWx5IGJlIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDAwZmNlYWU0MTBjMDU0MTA1ZWU2ZTk2YTM3YjQxNjYxZTNlMmExYmZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAwOToxOTo0MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL21tdS5jIGIvYXJjaC9hcm02NC9rdm0vbW11LmNcbmluZGV4IDliYTg2NDUwZmU0YWYuLmQ1N2Y4MTgxZjFiN2QgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9tbXUuY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vbW11LmNcbkBAIC0xNjEzLDcgKzE2MTMsNiBAQCBzdGF0aWMgaW50IGdtZW1fYWJvcnQoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKVxuIFx0ZW51bSBrdm1fcGd0YWJsZV9wcm90IHByb3QgPSBLVk1fUEdUQUJMRV9QUk9UX1I7XG4gXHRzdHJ1Y3Qga3ZtX3BndGFibGUgKnBndCA9IHMyZmQtXHUwMDNldmNwdS1cdTAwM2VhcmNoLmh3X21tdS1cdTAwM2VwZ3Q7XG4gXHR1bnNpZ25lZCBsb25nIG1tdV9zZXE7XG4tXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcdHN0cnVjdCBrdm0gKmt2bSA9IHMyZmQtXHUwMDNldmNwdS1cdTAwM2Vrdm07XG4gXHR2b2lkICptZW1jYWNoZSA9IE5VTEw7XG4gXHRrdm1fcGZuX3QgcGZuO1xuQEAgLTE2NDEsNyArMTY0MCw3IEBAIHN0YXRpYyBpbnQgZ21lbV9hYm9ydChjb25zdCBzdHJ1Y3Qga3ZtX3MyX2ZhdWx0X2Rlc2MgKnMyZmQpXG4gXHQvKiBQYWlycyB3aXRoIHRoZSBzbXBfd21iKCkgaW4ga3ZtX21tdV9pbnZhbGlkYXRlX2VuZCgpLiAqL1xuIFx0c21wX3JtYigpO1xuIFxuLVx0cmV0ID0ga3ZtX2dtZW1fZ2V0X3Bmbihrdm0sIHMyZmQtXHUwMDNlbWVtc2xvdCwgZ2ZuLCBcdTAwMjZwZm4sIFx1MDAyNnBhZ2UsIE5VTEwpO1xuK1x0cmV0ID0ga3ZtX2dtZW1fZ2V0X3Bmbihrdm0sIHMyZmQtXHUwMDNlbWVtc2xvdCwgZ2ZuLCBcdTAwMjZwZm4sIE5VTEwpO1xuIFx0aWYgKHJldCkge1xuIFx0XHRrdm1fcHJlcGFyZV9tZW1vcnlfZmF1bHRfZXhpdChzMmZkLVx1MDAzZXZjcHUsIHMyZmQtXHUwMDNlZmF1bHRfaXBhLCBQQUdFX1NJWkUsXG4gXHRcdFx0XHRcdCAgICAgIHdyaXRlX2ZhdWx0LCBleGVjX2ZhdWx0LCBmYWxzZSk7XG5AQCAtMTY4MSw3ICsxNjgwLDYgQEAgc3RhdGljIGludCBnbWVtX2Fib3J0KGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZClcbiBcdH1cbiBcbiBvdXRfdW5sb2NrOlxuLVx0a3ZtX3JlbGVhc2VfZmF1bHRpbl9wYWdlKGt2bSwgcGFnZSwgISFyZXQsIHByb3QgXHUwMDI2IEtWTV9QR1RBQkxFX1BST1RfVyk7XG4gXHRrdm1fZmF1bHRfdW5sb2NrKGt2bSk7XG4gXG4gXHRpZiAoKHByb3QgXHUwMDI2IEtWTV9QR1RBQkxFX1BST1RfVykgXHUwMDI2XHUwMDI2ICFyZXQpXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMgYi9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuY1xuaW5kZXggMTcxMjNmMGI2ZGFiYS4uZGQ2Mjg0MGQzNjc0MSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jXG4rKysgYi9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuY1xuQEAgLTE0MTUsNyArMTQxNSw3IEBAIHN0YXRpYyBpbnQga3ZtX3RyYW5zbGF0ZV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCAqaXNfZ21lbSlcbiBcdGJvb2wgd3JpdGVfZmF1bHQsIHdyaXRhYmxlO1xuIFx0dW5zaWduZWQgbG9uZyBtbXVfc2VxO1xuIFx0c3RydWN0IHZuY3JfdGxiICp2dDtcbi1cdHN0cnVjdCBwYWdlICpwYWdlO1xuK1x0c3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMO1xuIFx0dTY0IHZhLCBwZm4sIGdmbjtcbiBcdGludCByZXQ7XG4gXG5AQCAtMTQ3MSw3ICsxNDcxLDcgQEAgc3RhdGljIGludCBrdm1fdHJhbnNsYXRlX3ZuY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sICppc19nbWVtKVxuIFx0XHRcdHJldHVybiAtRUZBVUxUO1xuIFx0XHR9XG4gXHR9IGVsc2Uge1xuLVx0XHRyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKHZjcHUtXHUwMDNla3ZtLCBtZW1zbG90LCBnZm4sIFx1MDAyNnBmbiwgXHUwMDI2cGFnZSwgTlVMTCk7XG4rXHRcdHJldCA9IGt2bV9nbWVtX2dldF9wZm4odmNwdS1cdTAwM2Vrdm0sIG1lbXNsb3QsIGdmbiwgXHUwMDI2cGZuLCBOVUxMKTtcbiBcdFx0aWYgKHJldCkge1xuIFx0XHRcdGt2bV9wcmVwYXJlX21lbW9yeV9mYXVsdF9leGl0KHZjcHUsIHZ0LVx1MDAzZXdyLnBhLCBQQUdFX1NJWkUsXG4gXHRcdFx0XHRcdCAgICAgIHdyaXRlX2ZhdWx0LCBmYWxzZSwgZmFsc2UpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG5pbmRleCAwNjRlY2MzM2I5MjY3Li45NDdjOWNkODQzNDUwIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuKysrIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuQEAgLTQ2MjgsNyArNDYyOCw3IEBAIHN0YXRpYyBpbnQga3ZtX21tdV9mYXVsdGluX3Bmbl9nbWVtKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdH1cbiBcbiBcdHIgPSBrdm1fZ21lbV9nZXRfcGZuKHZjcHUtXHUwMDNla3ZtLCBmYXVsdC1cdTAwM2VzbG90LCBmYXVsdC1cdTAwM2VnZm4sIFx1MDAyNmZhdWx0LVx1MDAzZXBmbixcbi1cdFx0XHQgICAgIFx1MDAyNmZhdWx0LVx1MDAzZXJlZmNvdW50ZWRfcGFnZSwgXHUwMDI2bWF4X29yZGVyKTtcbitcdFx0XHQgICAgIFx1MDAyNm1heF9vcmRlcik7XG4gXHRpZiAocikge1xuIFx0XHRrdm1fbW11X3ByZXBhcmVfbWVtb3J5X2ZhdWx0X2V4aXQodmNwdSwgZmF1bHQpO1xuIFx0XHRyZXR1cm4gcjtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuaW5kZXggNTcwNTcyM2YxZjQxMi4uMGE4ODdmOGUwNWQzYSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbkBAIC00MDMyLDcgKzQwMzIsNiBAQCBzdGF0aWMgdm9pZCBfX3Nldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEpXG4gXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbiBcdGdmbl90IGdmbiA9IGdwYV90b19nZm4oZ3BhKTtcbiBcdHVuc2lnbmVkIGxvbmcgbW11X3NlcTtcbi1cdHN0cnVjdCBwYWdlICpwYWdlO1xuIFx0a3ZtX3Bmbl90IHBmbjtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2c3ZtLVx1MDAzZXNldl9lcy5zbnBfdm1zYV9tdXRleCk7XG5AQCAtNDA3Niw3ICs0MDc1LDcgQEAgc3RhdGljIHZvaWQgX19zZXZfc25wX3JlbG9hZF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhKVxuIFx0ICogVGhlIG5ldyBWTVNBIHdpbGwgYmUgcHJpdmF0ZSBtZW1vcnkgZ3Vlc3QgbWVtb3J5LCBzbyByZXRyaWV2ZSB0aGVcbiBcdCAqIFBGTiBmcm9tIHRoZSBnbWVtIGJhY2tlbmQuXG4gXHQgKi9cbi1cdGlmIChrdm1fZ21lbV9nZXRfcGZuKHZjcHUtXHUwMDNla3ZtLCBzbG90LCBnZm4sIFx1MDAyNnBmbiwgXHUwMDI2cGFnZSwgTlVMTCkpXG4rXHRpZiAoa3ZtX2dtZW1fZ2V0X3Bmbih2Y3B1LVx1MDAzZWt2bSwgc2xvdCwgZ2ZuLCBcdTAwMjZwZm4sIE5VTEwpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRyZWFkX2xvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbkBAIC00MDkyLDggKzQwOTEsNiBAQCBzdGF0aWMgdm9pZCBfX3Nldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEpXG4gXHRlbHNlXG4gXHRcdHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wudm1zYV9wYSA9IHBmbl90b19ocGEocGZuKTtcbiBcdHJlYWRfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4tXG4tXHRrdm1fcmVsZWFzZV9wYWdlX2NsZWFuKHBhZ2UpO1xuIH1cbiBcbiAvKlxuQEAgLTUwMTksNyArNTAxNiw3IEBAIHZvaWQgc2V2X2hhbmRsZV9ybXBfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHU2NCBlcnJvcl9jb2RlKVxuIFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdDtcbiBcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXHUwMDNla3ZtO1xuIFx0aW50IG9yZGVyLCBybXBfbGV2ZWwsIHJldDtcbi1cdHN0cnVjdCBwYWdlICpwYWdlO1xuK1x0dW5zaWduZWQgbG9uZyBtbXVfc2VxO1xuIFx0Ym9vbCBhc3NpZ25lZDtcbiBcdGt2bV9wZm5fdCBwZm47XG4gXHRnZm5fdCBnZm47XG5AQCAtNTA0Niw3ICs1MDQzLDEwIEBAIHZvaWQgc2V2X2hhbmRsZV9ybXBfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHU2NCBlcnJvcl9jb2RlKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKGt2bSwgc2xvdCwgZ2ZuLCBcdTAwMjZwZm4sIFx1MDAyNnBhZ2UsIFx1MDAyNm9yZGVyKTtcbitcdG1tdV9zZXEgPSBrdm0tXHUwMDNlbW11X2ludmFsaWRhdGVfc2VxO1xuK1x0c21wX3JtYigpO1xuK1xuK1x0cmV0ID0ga3ZtX2dtZW1fZ2V0X3Bmbihrdm0sIHNsb3QsIGdmbiwgXHUwMDI2cGZuLCBcdTAwMjZvcmRlcik7XG4gXHRpZiAocmV0KSB7XG4gXHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCJTRVY6IFVuZXhwZWN0ZWQgUk1QIGZhdWx0LCBubyBiYWNraW5nIHBhZ2UgZm9yIHByaXZhdGUgR1BBIDB4JWxseFxcblwiLFxuIFx0XHRcdFx0ICAgIGdwYSk7XG5AQCAtNTA1NSw5ICs1MDU1LDEzIEBAIHZvaWQgc2V2X2hhbmRsZV9ybXBfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHU2NCBlcnJvcl9jb2RlKVxuIFxuIFx0cmV0ID0gc25wX2xvb2t1cF9ybXBlbnRyeShwZm4sIFx1MDAyNmFzc2lnbmVkLCBcdTAwMjZybXBfbGV2ZWwpO1xuIFx0aWYgKHJldCB8fCAhYXNzaWduZWQpIHtcbi1cdFx0cHJfd2Fybl9yYXRlbGltaXRlZChcIlNFVjogVW5leHBlY3RlZCBSTVAgZmF1bHQsIG5vIGFzc2lnbmVkIFJNUCBlbnRyeSBmb3VuZCBmb3IgR1BBIDB4JWxseCBQRk4gMHglbGx4IGVycm9yICVkXFxuXCIsXG4tXHRcdFx0XHQgICAgZ3BhLCBwZm4sIHJldCk7XG4tXHRcdGdvdG8gb3V0X25vX3RyYWNlO1xuK1x0XHRndWFyZChyZWFkX2xvY2spKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4rXG4rXHRcdGlmICghbW11X2ludmFsaWRhdGVfcmV0cnlfZ2ZuKGt2bSwgbW11X3NlcSwgZ2ZuKSlcbitcdFx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwiU0VWOiBVbmV4cGVjdGVkIFJNUCBmYXVsdCwgbm8gYXNzaWduZWQgUk1QIGVudHJ5IGZvdW5kIGZvciBHUEEgMHglbGx4IFBGTiAweCVsbHggZXJyb3IgJWRcXG5cIixcbitcdFx0XHRcdFx0ICAgIGdwYSwgcGZuLCByZXQpO1xuK1xuK1x0XHRyZXR1cm47XG4gXHR9XG4gXG4gXHQvKlxuQEAgLTUwODUsMjYgKzUwODksMzEgQEAgdm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpXG4gXHRpZiAocm1wX2xldmVsID09IFBHX0xFVkVMXzRLKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdHJldCA9IHNucF9ybXB0YWJsZV9wc21hc2gocGZuKTtcbi1cdGlmIChyZXQpIHtcbi1cdFx0Lypcbi1cdFx0ICogTG9vayBpdCB1cCBhZ2Fpbi4gSWYgaXQncyA0SyBub3cgdGhlbiB0aGUgUFNNQVNIIG1heSBoYXZlXG4tXHRcdCAqIHJhY2VkIHdpdGggYW5vdGhlciBwcm9jZXNzIGFuZCB0aGUgaXNzdWUgaGFzIGFscmVhZHkgcmVzb2x2ZWRcbi1cdFx0ICogaXRzZWxmLlxuLVx0XHQgKi9cbi1cdFx0aWYgKCFzbnBfbG9va3VwX3JtcGVudHJ5KHBmbiwgXHUwMDI2YXNzaWduZWQsIFx1MDAyNnJtcF9sZXZlbCkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBhc3NpZ25lZCBcdTAwMjZcdTAwMjYgcm1wX2xldmVsID09IFBHX0xFVkVMXzRLKVxuK1x0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKSB7XG4rXHRcdGlmIChtbXVfaW52YWxpZGF0ZV9yZXRyeV9nZm4oa3ZtLCBtbXVfc2VxLCBnZm4pKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFxuLVx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwiU0VWOiBVbmFibGUgdG8gc3BsaXQgUk1QIGVudHJ5IGZvciBHUEEgMHglbGx4IFBGTiAweCVsbHggcmV0ICVkXFxuXCIsXG4tXHRcdFx0XHQgICAgZ3BhLCBwZm4sIHJldCk7XG4rXHRcdHJldCA9IHNucF9ybXB0YWJsZV9wc21hc2gocGZuKTtcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogTG9vayBpdCB1cCBhZ2Fpbi4gSWYgaXQncyA0SyBub3cgdGhlbiB0aGUgUFNNQVNIIG1heVxuK1x0XHRcdCAqIGhhdmUgcmFjZWQgd2l0aCBhbm90aGVyIHByb2Nlc3MgYW5kIHRoZSBpc3N1ZSBoYXNcbitcdFx0XHQgKiBhbHJlYWR5IHJlc29sdmVkIGl0c2VsZi4gSWYgaXQncyBub3QgYXNzaWduZWQsIHRoZW5cbitcdFx0XHQgKiB0aGlzIG11c3QgaGF2ZSByYWNlZCB3aXRoIGFub3RoZXIgcHJvY2VzcyB0aGF0IG1hZGVcbitcdFx0XHQgKiB0aGlzIHBhZ2Ugc2hhcmVkLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmICghc25wX2xvb2t1cF9ybXBlbnRyeShwZm4sIFx1MDAyNmFzc2lnbmVkLCBcdTAwMjZybXBfbGV2ZWwpIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICAoKGFzc2lnbmVkIFx1MDAyNlx1MDAyNiBybXBfbGV2ZWwgPT0gUEdfTEVWRUxfNEspIHx8ICFhc3NpZ25lZCkpXG4rXHRcdFx0XHRnb3RvIG91dDtcbitcbitcdFx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwiU0VWOiBVbmFibGUgdG8gc3BsaXQgUk1QIGVudHJ5IGZvciBHUEEgMHglbGx4IFBGTiAweCVsbHggcmV0ICVkXFxuXCIsXG4rXHRcdFx0XHRcdCAgICBncGEsIHBmbiwgcmV0KTtcbitcdFx0fVxuIFx0fVxuIFxuIFx0a3ZtX3phcF9nZm5fcmFuZ2Uoa3ZtLCBnZm4sIGdmbiArIFBUUlNfUEVSX1BNRCk7XG4gb3V0OlxuIFx0dHJhY2Vfa3ZtX3JtcF9mYXVsdCh2Y3B1LCBncGEsIHBmbiwgZXJyb3JfY29kZSwgcm1wX2xldmVsLCByZXQpO1xuLW91dF9ub190cmFjZTpcbi1cdGt2bV9yZWxlYXNlX3BhZ2VfdW51c2VkKHBhZ2UpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBpc19wZm5fcmFuZ2Vfc2hhcmVkKGt2bV9wZm5fdCBzdGFydCwga3ZtX3Bmbl90IGVuZClcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbmluZGV4IDAzYmZjOTI4NjRiNmUuLjUwMjQ2NTExOWNhMGMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbisrKyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuQEAgLTI1ODYsMTMgKzI1ODYsMTEgQEAgc3RhdGljIGlubGluZSBib29sIGt2bV9tZW1faXNfcHJpdmF0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbilcbiBcbiAjaWZkZWYgQ09ORklHX0tWTV9HVUVTVF9NRU1GRFxuIGludCBrdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbi1cdFx0ICAgICBnZm5fdCBnZm4sIGt2bV9wZm5fdCAqcGZuLCBzdHJ1Y3QgcGFnZSAqKnBhZ2UsXG4tXHRcdCAgICAgaW50ICptYXhfb3JkZXIpO1xuK1x0XHQgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIGludCAqbWF4X29yZGVyKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgaW50IGt2bV9nbWVtX2dldF9wZm4oc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRcdFx0ICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwgZ2ZuX3QgZ2ZuLFxuLVx0XHRcdFx0ICAga3ZtX3Bmbl90ICpwZm4sIHN0cnVjdCBwYWdlICoqcGFnZSxcbi1cdFx0XHRcdCAgIGludCAqbWF4X29yZGVyKVxuK1x0XHRcdFx0ICAga3ZtX3Bmbl90ICpwZm4sIGludCAqbWF4X29yZGVyKVxuIHtcbiBcdEtWTV9CVUdfT04oMSwga3ZtKTtcbiBcdHJldHVybiAtRUlPO1xuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXG5pbmRleCBiNTk2NDg2ZDE4NGNhLi41ODk3NjIxNDBjM2VmIDEwMDY0NFxuLS0tIGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuKysrIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuQEAgLTc1MSw4ICs3NTEsNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX2t2bV9nbWVtX2dldF9wZm4oc3RydWN0IGZpbGUgKmZpbGUsXG4gfVxuIFxuIGludCBrdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbi1cdFx0ICAgICBnZm5fdCBnZm4sIGt2bV9wZm5fdCAqcGZuLCBzdHJ1Y3QgcGFnZSAqKnBhZ2UsXG4tXHRcdCAgICAgaW50ICptYXhfb3JkZXIpXG4rXHRcdCAgICAgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgKnBmbiwgaW50ICptYXhfb3JkZXIpXG4ge1xuIFx0cGdvZmZfdCBpbmRleCA9IGt2bV9nbWVtX2dldF9pbmRleChzbG90LCBnZm4pO1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbkBAIC03ODAsMTEgKzc3OSw3IEBAIGludCBrdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbiAjZW5kaWZcbiBcbiBcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4tXG4tXHRpZiAoIXIpXG4tXHRcdCpwYWdlID0gZm9saW9fZmlsZV9wYWdlKGZvbGlvLCBpbmRleCk7XG4tXHRlbHNlXG4tXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4rXHRmb2xpb19wdXQoZm9saW8pO1xuIFxuIFx0cmV0dXJuIHI7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6MjE6NDguMzk0MTE2NDc4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1NzAzMDk4NDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmFjdG9yaW5nIEtWTSBHdWVzdCBNZW1vcnkgUGFnZSBIYW5kbGluZyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSByZWZhY3RvcmluZyBob3cgS1ZNIG1hbmFnZXMgZ3Vlc3QgbWVtb3J5IHBhZ2VzLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYGt2bV9nbWVtX2dldF9wZm4oKWAgaXMgdGhlIHRhcmdldCwgc3BlY2lmaWNhbGx5IHRoZSByZW1vdmFsIG9mIHRoZSBgc3RydWN0IHBhZ2UgKipwYWdlYCBhcmd1bWVudC4gVGhpcyBpbXBhY3RzIHNldmVyYWwgYXJjaGl0ZWN0dXJlcyAoYXJtNjQsIHg4NikuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgaWRlYSBpcyB0byBjaGFuZ2UgaG93IHRoZSBwYWdlIHJlZmVyZW5jZSBpcyBoYW5kbGVkLCBtb3ZpbmcgYXdheSBmcm9tIHJldHVybmluZyBpdCBkaXJlY3RseSBmcm9tIGBrdm1fZ21lbV9nZXRfcGZuKClgIGFuZCBpbnN0ZWFkIHVzaW5nIGBmb2xpb19wdXQoZm9saW8pO2Agd2l0aGluIHRoZSBmdW5jdGlvbiBpdHNlbGYuIFRoaXMgbGlrZWx5IG1lYW5zIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucyBubyBsb25nZXIgbmVlZCB0byBleHBsaWNpdGx5IHJlbGVhc2UgdGhlIHBhZ2UuXG5cbk15IHByaW1hcnkgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gV2l0aCB0aGlzIGtpbmQgb2YgY2hhbmdlLCBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyB1bmludGVuZGVkIGluZm9ybWF0aW9uIGxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBhcyBhIHJlc3VsdCBvZiB0aGUgcmVmYWN0b3JpbmcuIExvb2tpbmcgYXQgdGhlIGNoYW5nZXMsIHRoZXJlIGFyZW4ndCBhbnkgbmV3IHN0cnVjdHVyZXMgYmVpbmcgc2VudCB0byB1c2Vyc3BhY2UuIFRoZXJlJ3Mgbm8gaW5kaWNhdGlvbiBvZiBhbnkgbmV3IGFsbG9jYXRpb25zIHRoYXQgbWlnaHQgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhpcyBpcyBzcXVhcmVseSBhIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCByZWZjb3VudGluZyBjaGFuZ2UuIFRoZSBtb3N0IGxpa2VseSByaXNrcyBhcmUgdXNlLWFmdGVyLWZyZWUgb3IgcmVmY291bnQgYnVncywgc28gdGhpcyBpcyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMuIEknbSByZWx5aW5nIG9uIEtBU0FOIHRvIGNhdGNoIHRoZXNlLlxuXG5MZXQncyBkbyBhIHF1aWNrIGNvZGUgcmV2aWV3IG9mIHRoZSBkaWZmLiBUaGUgZnVuY3Rpb24gc2lnbmF0dXJlIGNoYW5nZXMgYXJlIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IHRoZSBgcGFnZWAgYXJndW1lbnQgaXMgZ29uZS4gT2theSwgSSBzZWUgd2hlcmUgdGhpcyBgcGFnZWAgYXJndW1lbnQgd2FzIHByZXZpb3VzbHkgYmVpbmcgcG9wdWxhdGVkLCBgZm9saW9fZmlsZV9wYWdlKGZvbGlvLCBpbmRleClgLiBOb3csIHRoYXQgY2FsbCBzaXRlIGlzIHJlcGxhY2VkIHdpdGggdGhlIGBmb2xpb19wdXQoZm9saW8pYCBjYWxsLiBUaGUgY29ycmVzcG9uZGluZyBga3ZtX3JlbGVhc2VfcGFnZV8qYCBjYWxscyBhcmUgZ29uZSwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2VlIHRoZXNlIGNoYW5nZXMgaW4gYGFyY2gvYXJtNjQva3ZtL21tdS5jYCwgYGFyY2gvYXJtNjQva3ZtL25lc3RlZC5jYCBhbmQgaW4gdmFyaW91cyB4ODYgZmlsZXMgc3VjaCBhcyBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AsIGFuZCBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AuXG5cbkEga2V5IHRoaW5nIGlzIHRoYXQgaW4geDg2LCB0aGVyZSB3YXMgYSBgZmF1bHQtXHUwMDNlcmVmY291bnRlZF9wYWdlYCB2YXJpYWJsZSB0aGF0IHdhcyBiZWluZyBwYXNzZWQuIEJ1dCBub3cgdGhlIGZ1bmN0aW9uIGRvZXNuJ3QgcmV0dXJuIHRoZSBwYWdlLCBzbyBpcyBgZmF1bHQtXHUwMDNlcmVmY291bnRlZF9wYWdlYCBwcm9wZXJseSBoYW5kbGVkPyBJZiBpdCdzIE5VTEwsIHRoZW4gdGhlIGBrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2VgIHdpbGwganVzdCBkbyBub3RoaW5nLCBzbyB0aGlzIGxvb2tzIHNhZmUsIGV2ZW4gaWYgaXQgbGVhZHMgdG8gYW4gaXNzdWUgaW4gdGVybXMgb2YgYSBsZWFrLiAgSXQgc2hvdWxkIGJlIGluaXRpYWxpemVkIHRvIE5VTEwgaW4gYGt2bV9tbXVfZG9fcGFnZV9mYXVsdGAuIE5vIGRlZXAgZGl2ZSBpcyBuZWNlc3NhcnkgaGVyZSwgZXZlbiBpZiBpdCBpbnRyb2R1Y2VzIGEgYnVnLCBpdCdzIGp1c3QgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3IgbWVtb3J5IGxlYWsgYW5kIEtBU0FOIHNob3VsZCBoYW5kbGUuIFRoZSBzYW1lIHRoaW5nIGZvciB0aGUgcmVzdCBvZiB0aGUgY2FzZXMgd2hlcmUgYGt2bV9yZWxlYXNlX3BhZ2VfKmAgY2FsbHMgd2VyZSByZW1vdmVkLlxuXG5GaW5hbGx5LCBsb29raW5nIGF0IGB2aXJ0L2t2bS9ndWVzdF9tZW1mZC5jYCwgaXQgY29uZmlybXMgdGhlIHJlZmFjdG9yaW5nIGlzIGFib3V0IGhvdyBgZ3Vlc3RfbWVtZmRgIG1hbmFnZXMgcGFnZSByZWZlcmVuY2VzLiBJbnN0ZWFkIG9mIGNoZWNraW5nIGlmIGByYCBhbmQgYXNzaWduaW5nIHRoZSBwYWdlLCB0aGUgcGF0Y2ggY2FsbHMgYGZvbGlvX3B1dChmb2xpbyk7YCBkaXJlY3RseS5cblxuT3ZlcmFsbCwgdGhpcyBpcyBhIGNsZWFuIHJlZmFjdG9yaW5nLCBzcGVjaWZpY2FsbHkgaW4gcGFnZSByZWZlcmVuY2UgY291bnRpbmcgZm9yIGd1ZXN0IG1lbW9yeSwgZXNwZWNpYWxseSBmb3IgYGd1ZXN0X21lbWZkYC4gVGhlcmUncyBubyBldmlkZW5jZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSBvciB1c2FnZSBmcm9tIHRoaXMgcGF0Y2guIEJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIEknbSBjb25maWRlbnQgS0FTQU4gYW5kIGttZW1sZWFrIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBpc3N1ZXMgcmVsYXRlZCB0byB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVha3MuIFNvLCBJIHdpbGwgc2V0IGBOZWVkc0tNU0FOPWZhbHNlYCBhbmQgcHJvdmlkZSB0aGUgcmVhc29uaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTg5LCJPdXRwdXRUb2tlbnMiOjE3OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOToyMjowNC4wOTcyMTc1NDNaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBga3ZtX2dtZW1fZ2V0X3BmbigpYCB0byByZW1vdmUgdGhlIGBzdHJ1Y3QgcGFnZSAqKnBhZ2VgIGFyZ3VtZW50IGFuZCBkcm9wcyB0aGUgYXNzb2NpYXRlZCBwYWdlIHJlZmVyZW5jZSBjb3VudGluZyAoYGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZWAsIGBrdm1fcmVsZWFzZV9wYWdlX2NsZWFuYCwgZXRjLikgYWNyb3NzIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMgKGFybTY0LCB4ODYpLiBUaGlzIGlzIGEgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHJlZmNvdW50aW5nIGNoYW5nZS4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBhbmQgbm8gaW5mby1sZWFrcy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSB3b3VsZCBsaWtlbHkgYmUgdXNlLWFmdGVyLWZyZWUsIG1lbW9yeSBsZWFrcywgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGBrdm1fZ21lbV9nZXRfcGZuKClgIHRvIHJlbW92ZSB0aGUgYHN0cnVjdCBwYWdlICoqcGFnZWAgYXJndW1lbnQgYW5kIGRyb3BzIHRoZSBhc3NvY2lhdGVkIHBhZ2UgcmVmZXJlbmNlIGNvdW50aW5nIChga3ZtX3JlbGVhc2VfZmF1bHRpbl9wYWdlYCwgYGt2bV9yZWxlYXNlX3BhZ2VfY2xlYW5gLCBldGMuKSBhY3Jvc3MgbXVsdGlwbGUgYXJjaGl0ZWN0dXJlcyAoYXJtNjQsIHg4NikuIFRoaXMgaXMgYSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcmVmY291bnRpbmcgY2hhbmdlLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBubyBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIGFuZCBubyBpbmZvLWxlYWtzLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlIHdvdWxkIGxpa2VseSBiZSB1c2UtYWZ0ZXItZnJlZSwgbWVtb3J5IGxlYWtzLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBvdGhlciBzdGFuZGFyZCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow28dd2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-26 09:18:10 +0000 UTC FinishedAt: 2026-08-26 09:22:05 +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": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_AMD_SEV", "KVM_SW_PROTECTED_VM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_AMD_SEV", "KVM_SW_PROTECTED_VM" ], "series_id": "eaded774-8d60-493b-b78e-9d419d3c1540" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_gmem_get_pfn", "sev_handle_rmp_fault", "sev_snp_reload_vmsa", "kvm_handle_vncr_abort" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EX1NFViYjMzQ7LAogICAgJiMzNDtLVk1fU1dfUFJPVEVDVEVEX1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2dtZW1fZ2V0X3BmbiYjMzQ7LAogICAgJiMzNDtzZXZfaGFuZGxlX3JtcF9mYXVsdCYjMzQ7LAogICAgJiMzNDtzZXZfc25wX3JlbG9hZF92bXNhJiMzNDssCiAgICAmIzM0O2t2bV9oYW5kbGVfdm5jcl9hYm9ydCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBga3ZtX2dtZW1fZ2V0X3BmbigpYCB0byByZW1vdmUgdGhlIGBzdHJ1Y3QgcGFnZSAqKnBhZ2VgIGFyZ3VtZW50IGFuZCBkcm9wcyB0aGUgYXNzb2NpYXRlZCBwYWdlIHJlZmVyZW5jZSBjb3VudGluZyAoYGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZWAsIGBrdm1fcmVsZWFzZV9wYWdlX2NsZWFuYCwgZXRjLikgYWNyb3NzIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMgKGFybTY0LCB4ODYpLiBUaGlzIGlzIGEgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHJlZmNvdW50aW5nIGNoYW5nZS4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBhbmQgbm8gaW5mby1sZWFrcy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSB3b3VsZCBsaWtlbHkgYmUgdXNlLWFmdGVyLWZyZWUsIG1lbW9yeSBsZWFrcywgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIHNpZ25hdHVyZSBhbmQgYmVoYXZpb3Igb2YgYGt2bV9nbWVtX2dldF9wZm5gIGJ5IHJlbW92aW5nIHRoZSBgc3RydWN0IHBhZ2UgKipwYWdlYCBhcmd1bWVudCBhbmQgZHJvcHBpbmcgdGhlIGZvbGlvIHJlZmVyZW5jZSBiZWZvcmUgcmV0dXJuaW5nLiBUaGlzIGFmZmVjdHMgaG93IEtWTSBoYW5kbGVzIG1lbW9yeSBiYWNraW5nIGZvciBndWVzdF9tZW1mZCwgd2hpY2ggaXMgYSBjb3JlIGZlYXR1cmUgZm9yIGNvbmZpZGVudGlhbCBjb21wdXRpbmcgKFNFVi1TTlAsIFREWCwgQVJNIENDQSkuIFRoZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIHBhZ2UgZmF1bHRzIHdoZW4gdXNpbmcgZ3Vlc3RfbWVtZmQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6MTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwMGZjZWFlNDEwYzA1NDEwNWVlNmU5NmEzN2I0MTY2MWUzZTJhMWJmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMDk6MTk6NDIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vbW11LmMgYi9hcmNoL2FybTY0L2t2bS9tbXUuY1xuaW5kZXggOWJhODY0NTBmZTRhZi4uZDU3ZjgxODFmMWI3ZCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL21tdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9tbXUuY1xuQEAgLTE2MTMsNyAmIzQzOzE2MTMsNiBAQCBzdGF0aWMgaW50IGdtZW1fYWJvcnQoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKVxuIFx0ZW51bSBrdm1fcGd0YWJsZV9wcm90IHByb3QgPSBLVk1fUEdUQUJMRV9QUk9UX1I7XG4gXHRzdHJ1Y3Qga3ZtX3BndGFibGUgKnBndCA9IHMyZmQtXHUwMDNldmNwdS1cdTAwM2VhcmNoLmh3X21tdS1cdTAwM2VwZ3Q7XG4gXHR1bnNpZ25lZCBsb25nIG1tdV9zZXE7XG4tXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcdHN0cnVjdCBrdm0gKmt2bSA9IHMyZmQtXHUwMDNldmNwdS1cdTAwM2Vrdm07XG4gXHR2b2lkICptZW1jYWNoZSA9IE5VTEw7XG4gXHRrdm1fcGZuX3QgcGZuO1xuQEAgLTE2NDEsNyAmIzQzOzE2NDAsNyBAQCBzdGF0aWMgaW50IGdtZW1fYWJvcnQoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKVxuIFx0LyogUGFpcnMgd2l0aCB0aGUgc21wX3dtYigpIGluIGt2bV9tbXVfaW52YWxpZGF0ZV9lbmQoKS4gKi9cbiBcdHNtcF9ybWIoKTtcbiBcbi1cdHJldCA9IGt2bV9nbWVtX2dldF9wZm4oa3ZtLCBzMmZkLVx1MDAzZW1lbXNsb3QsIGdmbiwgXHUwMDI2cGZuLCBcdTAwMjZwYWdlLCBOVUxMKTtcbiYjNDM7XHRyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKGt2bSwgczJmZC1cdTAwM2VtZW1zbG90LCBnZm4sIFx1MDAyNnBmbiwgTlVMTCk7XG4gXHRpZiAocmV0KSB7XG4gXHRcdGt2bV9wcmVwYXJlX21lbW9yeV9mYXVsdF9leGl0KHMyZmQtXHUwMDNldmNwdSwgczJmZC1cdTAwM2VmYXVsdF9pcGEsIFBBR0VfU0laRSxcbiBcdFx0XHRcdFx0ICAgICAgd3JpdGVfZmF1bHQsIGV4ZWNfZmF1bHQsIGZhbHNlKTtcbkBAIC0xNjgxLDcgJiM0MzsxNjgwLDYgQEAgc3RhdGljIGludCBnbWVtX2Fib3J0KGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZClcbiBcdH1cbiBcbiBvdXRfdW5sb2NrOlxuLVx0a3ZtX3JlbGVhc2VfZmF1bHRpbl9wYWdlKGt2bSwgcGFnZSwgISFyZXQsIHByb3QgXHUwMDI2IEtWTV9QR1RBQkxFX1BST1RfVyk7XG4gXHRrdm1fZmF1bHRfdW5sb2NrKGt2bSk7XG4gXG4gXHRpZiAoKHByb3QgXHUwMDI2IEtWTV9QR1RBQkxFX1BST1RfVykgXHUwMDI2XHUwMDI2ICFyZXQpXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMgYi9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuY1xuaW5kZXggMTcxMjNmMGI2ZGFiYS4uZGQ2Mjg0MGQzNjc0MSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuY1xuQEAgLTE0MTUsNyAmIzQzOzE0MTUsNyBAQCBzdGF0aWMgaW50IGt2bV90cmFuc2xhdGVfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgKmlzX2dtZW0pXG4gXHRib29sIHdyaXRlX2ZhdWx0LCB3cml0YWJsZTtcbiBcdHVuc2lnbmVkIGxvbmcgbW11X3NlcTtcbiBcdHN0cnVjdCB2bmNyX3RsYiAqdnQ7XG4tXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiYjNDM7XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7XG4gXHR1NjQgdmEsIHBmbiwgZ2ZuO1xuIFx0aW50IHJldDtcbiBcbkBAIC0xNDcxLDcgJiM0MzsxNDcxLDcgQEAgc3RhdGljIGludCBrdm1fdHJhbnNsYXRlX3ZuY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sICppc19nbWVtKVxuIFx0XHRcdHJldHVybiAtRUZBVUxUO1xuIFx0XHR9XG4gXHR9IGVsc2Uge1xuLVx0XHRyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKHZjcHUtXHUwMDNla3ZtLCBtZW1zbG90LCBnZm4sIFx1MDAyNnBmbiwgXHUwMDI2cGFnZSwgTlVMTCk7XG4mIzQzO1x0XHRyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKHZjcHUtXHUwMDNla3ZtLCBtZW1zbG90LCBnZm4sIFx1MDAyNnBmbiwgTlVMTCk7XG4gXHRcdGlmIChyZXQpIHtcbiBcdFx0XHRrdm1fcHJlcGFyZV9tZW1vcnlfZmF1bHRfZXhpdCh2Y3B1LCB2dC1cdTAwM2V3ci5wYSwgUEFHRV9TSVpFLFxuIFx0XHRcdFx0XHQgICAgICB3cml0ZV9mYXVsdCwgZmFsc2UsIGZhbHNlKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuaW5kZXggMDY0ZWNjMzNiOTI2Ny4uOTQ3YzljZDg0MzQ1MCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbkBAIC00NjI4LDcgJiM0Mzs0NjI4LDcgQEAgc3RhdGljIGludCBrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0fVxuIFxuIFx0ciA9IGt2bV9nbWVtX2dldF9wZm4odmNwdS1cdTAwM2Vrdm0sIGZhdWx0LVx1MDAzZXNsb3QsIGZhdWx0LVx1MDAzZWdmbiwgXHUwMDI2ZmF1bHQtXHUwMDNlcGZuLFxuLVx0XHRcdCAgICAgXHUwMDI2ZmF1bHQtXHUwMDNlcmVmY291bnRlZF9wYWdlLCBcdTAwMjZtYXhfb3JkZXIpO1xuJiM0MztcdFx0XHQgICAgIFx1MDAyNm1heF9vcmRlcik7XG4gXHRpZiAocikge1xuIFx0XHRrdm1fbW11X3ByZXBhcmVfbWVtb3J5X2ZhdWx0X2V4aXQodmNwdSwgZmF1bHQpO1xuIFx0XHRyZXR1cm4gcjtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuaW5kZXggNTcwNTcyM2YxZjQxMi4uMGE4ODdmOGUwNWQzYSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbkBAIC00MDMyLDcgJiM0Mzs0MDMyLDYgQEAgc3RhdGljIHZvaWQgX19zZXZfc25wX3JlbG9hZF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhKVxuIFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cdTAwM2Vrdm07XG4gXHRnZm5fdCBnZm4gPSBncGFfdG9fZ2ZuKGdwYSk7XG4gXHR1bnNpZ25lZCBsb25nIG1tdV9zZXE7XG4tXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcdGt2bV9wZm5fdCBwZm47XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnN2bS1cdTAwM2VzZXZfZXMuc25wX3Ztc2FfbXV0ZXgpO1xuQEAgLTQwNzYsNyAmIzQzOzQwNzUsNyBAQCBzdGF0aWMgdm9pZCBfX3Nldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEpXG4gXHQgKiBUaGUgbmV3IFZNU0Egd2lsbCBiZSBwcml2YXRlIG1lbW9yeSBndWVzdCBtZW1vcnksIHNvIHJldHJpZXZlIHRoZVxuIFx0ICogUEZOIGZyb20gdGhlIGdtZW0gYmFja2VuZC5cbiBcdCAqL1xuLVx0aWYgKGt2bV9nbWVtX2dldF9wZm4odmNwdS1cdTAwM2Vrdm0sIHNsb3QsIGdmbiwgXHUwMDI2cGZuLCBcdTAwMjZwYWdlLCBOVUxMKSlcbiYjNDM7XHRpZiAoa3ZtX2dtZW1fZ2V0X3Bmbih2Y3B1LVx1MDAzZWt2bSwgc2xvdCwgZ2ZuLCBcdTAwMjZwZm4sIE5VTEwpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRyZWFkX2xvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbkBAIC00MDkyLDggJiM0Mzs0MDkxLDYgQEAgc3RhdGljIHZvaWQgX19zZXZfc25wX3JlbG9hZF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhKVxuIFx0ZWxzZVxuIFx0XHRzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLnZtc2FfcGEgPSBwZm5fdG9faHBhKHBmbik7XG4gXHRyZWFkX3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuLVxuLVx0a3ZtX3JlbGVhc2VfcGFnZV9jbGVhbihwYWdlKTtcbiB9XG4gXG4gLypcbkBAIC01MDE5LDcgJiM0Mzs1MDE2LDcgQEAgdm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpXG4gXHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90O1xuIFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cdTAwM2Vrdm07XG4gXHRpbnQgb3JkZXIsIHJtcF9sZXZlbCwgcmV0O1xuLVx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBtbXVfc2VxO1xuIFx0Ym9vbCBhc3NpZ25lZDtcbiBcdGt2bV9wZm5fdCBwZm47XG4gXHRnZm5fdCBnZm47XG5AQCAtNTA0Niw3ICYjNDM7NTA0MywxMCBAQCB2b2lkIHNldl9oYW5kbGVfcm1wX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCB1NjQgZXJyb3JfY29kZSlcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0cmV0ID0ga3ZtX2dtZW1fZ2V0X3Bmbihrdm0sIHNsb3QsIGdmbiwgXHUwMDI2cGZuLCBcdTAwMjZwYWdlLCBcdTAwMjZvcmRlcik7XG4mIzQzO1x0bW11X3NlcSA9IGt2bS1cdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXE7XG4mIzQzO1x0c21wX3JtYigpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKGt2bSwgc2xvdCwgZ2ZuLCBcdTAwMjZwZm4sIFx1MDAyNm9yZGVyKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0cHJfd2Fybl9yYXRlbGltaXRlZChcJiMzNDtTRVY6IFVuZXhwZWN0ZWQgUk1QIGZhdWx0LCBubyBiYWNraW5nIHBhZ2UgZm9yIHByaXZhdGUgR1BBIDB4JWxseFxcblwmIzM0OyxcbiBcdFx0XHRcdCAgICBncGEpO1xuQEAgLTUwNTUsOSAmIzQzOzUwNTUsMTMgQEAgdm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpXG4gXG4gXHRyZXQgPSBzbnBfbG9va3VwX3JtcGVudHJ5KHBmbiwgXHUwMDI2YXNzaWduZWQsIFx1MDAyNnJtcF9sZXZlbCk7XG4gXHRpZiAocmV0IHx8ICFhc3NpZ25lZCkge1xuLVx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwmIzM0O1NFVjogVW5leHBlY3RlZCBSTVAgZmF1bHQsIG5vIGFzc2lnbmVkIFJNUCBlbnRyeSBmb3VuZCBmb3IgR1BBIDB4JWxseCBQRk4gMHglbGx4IGVycm9yICVkXFxuXCYjMzQ7LFxuLVx0XHRcdFx0ICAgIGdwYSwgcGZuLCByZXQpO1xuLVx0XHRnb3RvIG91dF9ub190cmFjZTtcbiYjNDM7XHRcdGd1YXJkKHJlYWRfbG9jaykoXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIW1tdV9pbnZhbGlkYXRlX3JldHJ5X2dmbihrdm0sIG1tdV9zZXEsIGdmbikpXG4mIzQzO1x0XHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCYjMzQ7U0VWOiBVbmV4cGVjdGVkIFJNUCBmYXVsdCwgbm8gYXNzaWduZWQgUk1QIGVudHJ5IGZvdW5kIGZvciBHUEEgMHglbGx4IFBGTiAweCVsbHggZXJyb3IgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICAgZ3BhLCBwZm4sIHJldCk7XG4mIzQzO1xuJiM0MztcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0LypcbkBAIC01MDg1LDI2ICYjNDM7NTA4OSwzMSBAQCB2b2lkIHNldl9oYW5kbGVfcm1wX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCB1NjQgZXJyb3JfY29kZSlcbiBcdGlmIChybXBfbGV2ZWwgPT0gUEdfTEVWRUxfNEspXG4gXHRcdGdvdG8gb3V0O1xuIFxuLVx0cmV0ID0gc25wX3JtcHRhYmxlX3BzbWFzaChwZm4pO1xuLVx0aWYgKHJldCkge1xuLVx0XHQvKlxuLVx0XHQgKiBMb29rIGl0IHVwIGFnYWluLiBJZiBpdCYjMzk7cyA0SyBub3cgdGhlbiB0aGUgUFNNQVNIIG1heSBoYXZlXG4tXHRcdCAqIHJhY2VkIHdpdGggYW5vdGhlciBwcm9jZXNzIGFuZCB0aGUgaXNzdWUgaGFzIGFscmVhZHkgcmVzb2x2ZWRcbi1cdFx0ICogaXRzZWxmLlxuLVx0XHQgKi9cbi1cdFx0aWYgKCFzbnBfbG9va3VwX3JtcGVudHJ5KHBmbiwgXHUwMDI2YXNzaWduZWQsIFx1MDAyNnJtcF9sZXZlbCkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBhc3NpZ25lZCBcdTAwMjZcdTAwMjYgcm1wX2xldmVsID09IFBHX0xFVkVMXzRLKVxuJiM0MztcdHNjb3BlZF9ndWFyZChyZWFkX2xvY2ssIFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jaykge1xuJiM0MztcdFx0aWYgKG1tdV9pbnZhbGlkYXRlX3JldHJ5X2dmbihrdm0sIG1tdV9zZXEsIGdmbikpXG4gXHRcdFx0Z290byBvdXQ7XG4gXG4tXHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCYjMzQ7U0VWOiBVbmFibGUgdG8gc3BsaXQgUk1QIGVudHJ5IGZvciBHUEEgMHglbGx4IFBGTiAweCVsbHggcmV0ICVkXFxuXCYjMzQ7LFxuLVx0XHRcdFx0ICAgIGdwYSwgcGZuLCByZXQpO1xuJiM0MztcdFx0cmV0ID0gc25wX3JtcHRhYmxlX3BzbWFzaChwZm4pO1xuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBMb29rIGl0IHVwIGFnYWluLiBJZiBpdCYjMzk7cyA0SyBub3cgdGhlbiB0aGUgUFNNQVNIIG1heVxuJiM0MztcdFx0XHQgKiBoYXZlIHJhY2VkIHdpdGggYW5vdGhlciBwcm9jZXNzIGFuZCB0aGUgaXNzdWUgaGFzXG4mIzQzO1x0XHRcdCAqIGFscmVhZHkgcmVzb2x2ZWQgaXRzZWxmLiBJZiBpdCYjMzk7cyBub3QgYXNzaWduZWQsIHRoZW5cbiYjNDM7XHRcdFx0ICogdGhpcyBtdXN0IGhhdmUgcmFjZWQgd2l0aCBhbm90aGVyIHByb2Nlc3MgdGhhdCBtYWRlXG4mIzQzO1x0XHRcdCAqIHRoaXMgcGFnZSBzaGFyZWQuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpZiAoIXNucF9sb29rdXBfcm1wZW50cnkocGZuLCBcdTAwMjZhc3NpZ25lZCwgXHUwMDI2cm1wX2xldmVsKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgICgoYXNzaWduZWQgXHUwMDI2XHUwMDI2IHJtcF9sZXZlbCA9PSBQR19MRVZFTF80SykgfHwgIWFzc2lnbmVkKSlcbiYjNDM7XHRcdFx0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0XHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCYjMzQ7U0VWOiBVbmFibGUgdG8gc3BsaXQgUk1QIGVudHJ5IGZvciBHUEEgMHglbGx4IFBGTiAweCVsbHggcmV0ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgIGdwYSwgcGZuLCByZXQpO1xuJiM0MztcdFx0fVxuIFx0fVxuIFxuIFx0a3ZtX3phcF9nZm5fcmFuZ2Uoa3ZtLCBnZm4sIGdmbiAmIzQzOyBQVFJTX1BFUl9QTUQpO1xuIG91dDpcbiBcdHRyYWNlX2t2bV9ybXBfZmF1bHQodmNwdSwgZ3BhLCBwZm4sIGVycm9yX2NvZGUsIHJtcF9sZXZlbCwgcmV0KTtcbi1vdXRfbm9fdHJhY2U6XG4tXHRrdm1fcmVsZWFzZV9wYWdlX3VudXNlZChwYWdlKTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgaXNfcGZuX3JhbmdlX3NoYXJlZChrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5pbmRleCAwM2JmYzkyODY0YjZlLi41MDI0NjUxMTljYTBjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbkBAIC0yNTg2LDEzICYjNDM7MjU4NiwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wga3ZtX21lbV9pc19wcml2YXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKVxuIFxuICNpZmRlZiBDT05GSUdfS1ZNX0dVRVNUX01FTUZEXG4gaW50IGt2bV9nbWVtX2dldF9wZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxuLVx0XHQgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIHN0cnVjdCBwYWdlICoqcGFnZSxcbi1cdFx0ICAgICBpbnQgKm1heF9vcmRlcik7XG4mIzQzO1x0XHQgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIGludCAqbWF4X29yZGVyKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgaW50IGt2bV9nbWVtX2dldF9wZm4oc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRcdFx0ICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwgZ2ZuX3QgZ2ZuLFxuLVx0XHRcdFx0ICAga3ZtX3Bmbl90ICpwZm4sIHN0cnVjdCBwYWdlICoqcGFnZSxcbi1cdFx0XHRcdCAgIGludCAqbWF4X29yZGVyKVxuJiM0MztcdFx0XHRcdCAgIGt2bV9wZm5fdCAqcGZuLCBpbnQgKm1heF9vcmRlcilcbiB7XG4gXHRLVk1fQlVHX09OKDEsIGt2bSk7XG4gXHRyZXR1cm4gLUVJTztcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuaW5kZXggYjU5NjQ4NmQxODRjYS4uNTg5NzYyMTQwYzNlZiAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbkBAIC03NTEsOCAmIzQzOzc1MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fa3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3QgZmlsZSAqZmlsZSxcbiB9XG4gXG4gaW50IGt2bV9nbWVtX2dldF9wZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxuLVx0XHQgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIHN0cnVjdCBwYWdlICoqcGFnZSxcbi1cdFx0ICAgICBpbnQgKm1heF9vcmRlcilcbiYjNDM7XHRcdCAgICAgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgKnBmbiwgaW50ICptYXhfb3JkZXIpXG4ge1xuIFx0cGdvZmZfdCBpbmRleCA9IGt2bV9nbWVtX2dldF9pbmRleChzbG90LCBnZm4pO1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbkBAIC03ODAsMTEgJiM0Mzs3NzksNyBAQCBpbnQga3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXG4gI2VuZGlmXG4gXG4gXHRmb2xpb191bmxvY2soZm9saW8pO1xuLVxuLVx0aWYgKCFyKVxuLVx0XHQqcGFnZSA9IGZvbGlvX2ZpbGVfcGFnZShmb2xpbywgaW5kZXgpO1xuLVx0ZWxzZVxuLVx0XHRmb2xpb19wdXQoZm9saW8pO1xuJiM0MztcdGZvbGlvX3B1dChmb2xpbyk7XG4gXG4gXHRyZXR1cm4gcjtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6MTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EX1NFViYjMzQ7LAogICAgJiMzNDtLVk1fU1dfUFJPVEVDVEVEX1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2dtZW1fZ2V0X3BmbiYjMzQ7LAogICAgJiMzNDtzZXZfaGFuZGxlX3JtcF9mYXVsdCYjMzQ7LAogICAgJiMzNDtzZXZfc25wX3JlbG9hZF92bXNhJiMzNDssCiAgICAmIzM0O2t2bV9oYW5kbGVfdm5jcl9hYm9ydCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSBzaWduYXR1cmUgYW5kIGJlaGF2aW9yIG9mIGBrdm1fZ21lbV9nZXRfcGZuYCBieSByZW1vdmluZyB0aGUgYHN0cnVjdCBwYWdlICoqcGFnZWAgYXJndW1lbnQgYW5kIGRyb3BwaW5nIHRoZSBmb2xpbyByZWZlcmVuY2UgYmVmb3JlIHJldHVybmluZy4gVGhpcyBhZmZlY3RzIGhvdyBLVk0gaGFuZGxlcyBtZW1vcnkgYmFja2luZyBmb3IgZ3Vlc3RfbWVtZmQsIHdoaWNoIGlzIGEgY29yZSBmZWF0dXJlIGZvciBjb25maWRlbnRpYWwgY29tcHV0aW5nIChTRVYtU05QLCBURFgsIEFSTSBDQ0EpLiBUaGUgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBwYWdlIGZhdWx0cyB3aGVuIHVzaW5nIGd1ZXN0X21lbWZkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDBmY2VhZTQxMGMwNTQxMDVlZTZlOTZhMzdiNDE2NjFlM2UyYTFiZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDA5OjE5OjQyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vbW11LmMgYi9hcmNoL2FybTY0L2t2bS9tbXUuYwppbmRleCA5YmE4NjQ1MGZlNGFmLi5kNTdmODE4MWYxYjdkIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9tbXUuYwpAQCAtMTYxMyw3ICYjNDM7MTYxMyw2IEBAIHN0YXRpYyBpbnQgZ21lbV9hYm9ydChjb25zdCBzdHJ1Y3Qga3ZtX3MyX2ZhdWx0X2Rlc2MgKnMyZmQpCiAJZW51bSBrdm1fcGd0YWJsZV9wcm90IHByb3QgPSBLVk1fUEdUQUJMRV9QUk9UX1I7CiAJc3RydWN0IGt2bV9wZ3RhYmxlICpwZ3QgPSBzMmZkLSZndDt2Y3B1LSZndDthcmNoLmh3X21tdS0mZ3Q7cGd0OwogCXVuc2lnbmVkIGxvbmcgbW11X3NlcTsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlzdHJ1Y3Qga3ZtICprdm0gPSBzMmZkLSZndDt2Y3B1LSZndDtrdm07CiAJdm9pZCAqbWVtY2FjaGUgPSBOVUxMOwogCWt2bV9wZm5fdCBwZm47CkBAIC0xNjQxLDcgJiM0MzsxNjQwLDcgQEAgc3RhdGljIGludCBnbWVtX2Fib3J0KGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZCkKIAkvKiBQYWlycyB3aXRoIHRoZSBzbXBfd21iKCkgaW4ga3ZtX21tdV9pbnZhbGlkYXRlX2VuZCgpLiAqLwogCXNtcF9ybWIoKTsKIAotCXJldCA9IGt2bV9nbWVtX2dldF9wZm4oa3ZtLCBzMmZkLSZndDttZW1zbG90LCBnZm4sICZhbXA7cGZuLCAmYW1wO3BhZ2UsIE5VTEwpOwomIzQzOwlyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKGt2bSwgczJmZC0mZ3Q7bWVtc2xvdCwgZ2ZuLCAmYW1wO3BmbiwgTlVMTCk7CiAJaWYgKHJldCkgewogCQlrdm1fcHJlcGFyZV9tZW1vcnlfZmF1bHRfZXhpdChzMmZkLSZndDt2Y3B1LCBzMmZkLSZndDtmYXVsdF9pcGEsIFBBR0VfU0laRSwKIAkJCQkJICAgICAgd3JpdGVfZmF1bHQsIGV4ZWNfZmF1bHQsIGZhbHNlKTsKQEAgLTE2ODEsNyAmIzQzOzE2ODAsNiBAQCBzdGF0aWMgaW50IGdtZW1fYWJvcnQoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKQogCX0KIAogb3V0X3VubG9jazoKLQlrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2Uoa3ZtLCBwYWdlLCAhIXJldCwgcHJvdCAmYW1wOyBLVk1fUEdUQUJMRV9QUk9UX1cpOwogCWt2bV9mYXVsdF91bmxvY2soa3ZtKTsKIAogCWlmICgocHJvdCAmYW1wOyBLVk1fUEdUQUJMRV9QUk9UX1cpICZhbXA7JmFtcDsgIXJldCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jIGIvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMKaW5kZXggMTcxMjNmMGI2ZGFiYS4uZGQ2Mjg0MGQzNjc0MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMKQEAgLTE0MTUsNyAmIzQzOzE0MTUsNyBAQCBzdGF0aWMgaW50IGt2bV90cmFuc2xhdGVfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgKmlzX2dtZW0pCiAJYm9vbCB3cml0ZV9mYXVsdCwgd3JpdGFibGU7CiAJdW5zaWduZWQgbG9uZyBtbXVfc2VxOwogCXN0cnVjdCB2bmNyX3RsYiAqdnQ7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7CiYjNDM7CXN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDsKIAl1NjQgdmEsIHBmbiwgZ2ZuOwogCWludCByZXQ7CiAKQEAgLTE0NzEsNyAmIzQzOzE0NzEsNyBAQCBzdGF0aWMgaW50IGt2bV90cmFuc2xhdGVfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgKmlzX2dtZW0pCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQogCX0gZWxzZSB7Ci0JCXJldCA9IGt2bV9nbWVtX2dldF9wZm4odmNwdS0mZ3Q7a3ZtLCBtZW1zbG90LCBnZm4sICZhbXA7cGZuLCAmYW1wO3BhZ2UsIE5VTEwpOwomIzQzOwkJcmV0ID0ga3ZtX2dtZW1fZ2V0X3Bmbih2Y3B1LSZndDtrdm0sIG1lbXNsb3QsIGdmbiwgJmFtcDtwZm4sIE5VTEwpOwogCQlpZiAocmV0KSB7CiAJCQlrdm1fcHJlcGFyZV9tZW1vcnlfZmF1bHRfZXhpdCh2Y3B1LCB2dC0mZ3Q7d3IucGEsIFBBR0VfU0laRSwKIAkJCQkJICAgICAgd3JpdGVfZmF1bHQsIGZhbHNlLCBmYWxzZSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuYwppbmRleCAwNjRlY2MzM2I5MjY3Li45NDdjOWNkODQzNDUwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmMKQEAgLTQ2MjgsNyAmIzQzOzQ2MjgsNyBAQCBzdGF0aWMgaW50IGt2bV9tbXVfZmF1bHRpbl9wZm5fZ21lbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJfQogCiAJciA9IGt2bV9nbWVtX2dldF9wZm4odmNwdS0mZ3Q7a3ZtLCBmYXVsdC0mZ3Q7c2xvdCwgZmF1bHQtJmd0O2dmbiwgJmFtcDtmYXVsdC0mZ3Q7cGZuLAotCQkJICAgICAmYW1wO2ZhdWx0LSZndDtyZWZjb3VudGVkX3BhZ2UsICZhbXA7bWF4X29yZGVyKTsKJiM0MzsJCQkgICAgICZhbXA7bWF4X29yZGVyKTsKIAlpZiAocikgewogCQlrdm1fbW11X3ByZXBhcmVfbWVtb3J5X2ZhdWx0X2V4aXQodmNwdSwgZmF1bHQpOwogCQlyZXR1cm4gcjsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jCmluZGV4IDU3MDU3MjNmMWY0MTIuLjBhODg3ZjhlMDVkM2EgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuYwpAQCAtNDAzMiw3ICYjNDM7NDAzMiw2IEBAIHN0YXRpYyB2b2lkIF9fc2V2X3NucF9yZWxvYWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSkKIAlzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LSZndDtrdm07CiAJZ2ZuX3QgZ2ZuID0gZ3BhX3RvX2dmbihncGEpOwogCXVuc2lnbmVkIGxvbmcgbW11X3NlcTsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlrdm1fcGZuX3QgcGZuOwogCiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3N2bS0mZ3Q7c2V2X2VzLnNucF92bXNhX211dGV4KTsKQEAgLTQwNzYsNyAmIzQzOzQwNzUsNyBAQCBzdGF0aWMgdm9pZCBfX3Nldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEpCiAJICogVGhlIG5ldyBWTVNBIHdpbGwgYmUgcHJpdmF0ZSBtZW1vcnkgZ3Vlc3QgbWVtb3J5LCBzbyByZXRyaWV2ZSB0aGUKIAkgKiBQRk4gZnJvbSB0aGUgZ21lbSBiYWNrZW5kLgogCSAqLwotCWlmIChrdm1fZ21lbV9nZXRfcGZuKHZjcHUtJmd0O2t2bSwgc2xvdCwgZ2ZuLCAmYW1wO3BmbiwgJmFtcDtwYWdlLCBOVUxMKSkKJiM0MzsJaWYgKGt2bV9nbWVtX2dldF9wZm4odmNwdS0mZ3Q7a3ZtLCBzbG90LCBnZm4sICZhbXA7cGZuLCBOVUxMKSkKIAkJcmV0dXJuOwogCiAJcmVhZF9sb2NrKCZhbXA7a3ZtLSZndDttbXVfbG9jayk7CkBAIC00MDkyLDggJiM0Mzs0MDkxLDYgQEAgc3RhdGljIHZvaWQgX19zZXZfc25wX3JlbG9hZF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhKQogCWVsc2UKIAkJc3ZtLSZndDt2bWNiLSZndDtjb250cm9sLnZtc2FfcGEgPSBwZm5fdG9faHBhKHBmbik7CiAJcmVhZF91bmxvY2soJmFtcDtrdm0tJmd0O21tdV9sb2NrKTsKLQotCWt2bV9yZWxlYXNlX3BhZ2VfY2xlYW4ocGFnZSk7CiB9CiAKIC8qCkBAIC01MDE5LDcgJiM0Mzs1MDE2LDcgQEAgdm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpCiAJc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdDsKIAlzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LSZndDtrdm07CiAJaW50IG9yZGVyLCBybXBfbGV2ZWwsIHJldDsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKJiM0MzsJdW5zaWduZWQgbG9uZyBtbXVfc2VxOwogCWJvb2wgYXNzaWduZWQ7CiAJa3ZtX3Bmbl90IHBmbjsKIAlnZm5fdCBnZm47CkBAIC01MDQ2LDcgJiM0Mzs1MDQzLDEwIEBAIHZvaWQgc2V2X2hhbmRsZV9ybXBfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHU2NCBlcnJvcl9jb2RlKQogCQlyZXR1cm47CiAJfQogCi0JcmV0ID0ga3ZtX2dtZW1fZ2V0X3Bmbihrdm0sIHNsb3QsIGdmbiwgJmFtcDtwZm4sICZhbXA7cGFnZSwgJmFtcDtvcmRlcik7CiYjNDM7CW1tdV9zZXEgPSBrdm0tJmd0O21tdV9pbnZhbGlkYXRlX3NlcTsKJiM0MzsJc21wX3JtYigpOwomIzQzOwomIzQzOwlyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKGt2bSwgc2xvdCwgZ2ZuLCAmYW1wO3BmbiwgJmFtcDtvcmRlcik7CiAJaWYgKHJldCkgewogCQlwcl93YXJuX3JhdGVsaW1pdGVkKCYjMzQ7U0VWOiBVbmV4cGVjdGVkIFJNUCBmYXVsdCwgbm8gYmFja2luZyBwYWdlIGZvciBwcml2YXRlIEdQQSAweCVsbHhcbiYjMzQ7LAogCQkJCSAgICBncGEpOwpAQCAtNTA1NSw5ICYjNDM7NTA1NSwxMyBAQCB2b2lkIHNldl9oYW5kbGVfcm1wX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCB1NjQgZXJyb3JfY29kZSkKIAogCXJldCA9IHNucF9sb29rdXBfcm1wZW50cnkocGZuLCAmYW1wO2Fzc2lnbmVkLCAmYW1wO3JtcF9sZXZlbCk7CiAJaWYgKHJldCB8fCAhYXNzaWduZWQpIHsKLQkJcHJfd2Fybl9yYXRlbGltaXRlZCgmIzM0O1NFVjogVW5leHBlY3RlZCBSTVAgZmF1bHQsIG5vIGFzc2lnbmVkIFJNUCBlbnRyeSBmb3VuZCBmb3IgR1BBIDB4JWxseCBQRk4gMHglbGx4IGVycm9yICVkXG4mIzM0OywKLQkJCQkgICAgZ3BhLCBwZm4sIHJldCk7Ci0JCWdvdG8gb3V0X25vX3RyYWNlOwomIzQzOwkJZ3VhcmQocmVhZF9sb2NrKSgmYW1wO2t2bS0mZ3Q7bW11X2xvY2spOwomIzQzOwomIzQzOwkJaWYgKCFtbXVfaW52YWxpZGF0ZV9yZXRyeV9nZm4oa3ZtLCBtbXVfc2VxLCBnZm4pKQomIzQzOwkJCXByX3dhcm5fcmF0ZWxpbWl0ZWQoJiMzNDtTRVY6IFVuZXhwZWN0ZWQgUk1QIGZhdWx0LCBubyBhc3NpZ25lZCBSTVAgZW50cnkgZm91bmQgZm9yIEdQQSAweCVsbHggUEZOIDB4JWxseCBlcnJvciAlZFxuJiMzNDssCiYjNDM7CQkJCQkgICAgZ3BhLCBwZm4sIHJldCk7CiYjNDM7CiYjNDM7CQlyZXR1cm47CiAJfQogCiAJLyoKQEAgLTUwODUsMjYgJiM0Mzs1MDg5LDMxIEBAIHZvaWQgc2V2X2hhbmRsZV9ybXBfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHU2NCBlcnJvcl9jb2RlKQogCWlmIChybXBfbGV2ZWwgPT0gUEdfTEVWRUxfNEspCiAJCWdvdG8gb3V0OwogCi0JcmV0ID0gc25wX3JtcHRhYmxlX3BzbWFzaChwZm4pOwotCWlmIChyZXQpIHsKLQkJLyoKLQkJICogTG9vayBpdCB1cCBhZ2Fpbi4gSWYgaXQmIzM5O3MgNEsgbm93IHRoZW4gdGhlIFBTTUFTSCBtYXkgaGF2ZQotCQkgKiByYWNlZCB3aXRoIGFub3RoZXIgcHJvY2VzcyBhbmQgdGhlIGlzc3VlIGhhcyBhbHJlYWR5IHJlc29sdmVkCi0JCSAqIGl0c2VsZi4KLQkJICovCi0JCWlmICghc25wX2xvb2t1cF9ybXBlbnRyeShwZm4sICZhbXA7YXNzaWduZWQsICZhbXA7cm1wX2xldmVsKSAmYW1wOyZhbXA7Ci0JCSAgICBhc3NpZ25lZCAmYW1wOyZhbXA7IHJtcF9sZXZlbCA9PSBQR19MRVZFTF80SykKJiM0MzsJc2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgJmFtcDtrdm0tJmd0O21tdV9sb2NrKSB7CiYjNDM7CQlpZiAobW11X2ludmFsaWRhdGVfcmV0cnlfZ2ZuKGt2bSwgbW11X3NlcSwgZ2ZuKSkKIAkJCWdvdG8gb3V0OwogCi0JCXByX3dhcm5fcmF0ZWxpbWl0ZWQoJiMzNDtTRVY6IFVuYWJsZSB0byBzcGxpdCBSTVAgZW50cnkgZm9yIEdQQSAweCVsbHggUEZOIDB4JWxseCByZXQgJWRcbiYjMzQ7LAotCQkJCSAgICBncGEsIHBmbiwgcmV0KTsKJiM0MzsJCXJldCA9IHNucF9ybXB0YWJsZV9wc21hc2gocGZuKTsKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIExvb2sgaXQgdXAgYWdhaW4uIElmIGl0JiMzOTtzIDRLIG5vdyB0aGVuIHRoZSBQU01BU0ggbWF5CiYjNDM7CQkJICogaGF2ZSByYWNlZCB3aXRoIGFub3RoZXIgcHJvY2VzcyBhbmQgdGhlIGlzc3VlIGhhcwomIzQzOwkJCSAqIGFscmVhZHkgcmVzb2x2ZWQgaXRzZWxmLiBJZiBpdCYjMzk7cyBub3QgYXNzaWduZWQsIHRoZW4KJiM0MzsJCQkgKiB0aGlzIG11c3QgaGF2ZSByYWNlZCB3aXRoIGFub3RoZXIgcHJvY2VzcyB0aGF0IG1hZGUKJiM0MzsJCQkgKiB0aGlzIHBhZ2Ugc2hhcmVkLgomIzQzOwkJCSAqLwomIzQzOwkJCWlmICghc25wX2xvb2t1cF9ybXBlbnRyeShwZm4sICZhbXA7YXNzaWduZWQsICZhbXA7cm1wX2xldmVsKSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgICgoYXNzaWduZWQgJmFtcDsmYW1wOyBybXBfbGV2ZWwgPT0gUEdfTEVWRUxfNEspIHx8ICFhc3NpZ25lZCkpCiYjNDM7CQkJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkJCXByX3dhcm5fcmF0ZWxpbWl0ZWQoJiMzNDtTRVY6IFVuYWJsZSB0byBzcGxpdCBSTVAgZW50cnkgZm9yIEdQQSAweCVsbHggUEZOIDB4JWxseCByZXQgJWRcbiYjMzQ7LAomIzQzOwkJCQkJICAgIGdwYSwgcGZuLCByZXQpOwomIzQzOwkJfQogCX0KIAogCWt2bV96YXBfZ2ZuX3JhbmdlKGt2bSwgZ2ZuLCBnZm4gJiM0MzsgUFRSU19QRVJfUE1EKTsKIG91dDoKIAl0cmFjZV9rdm1fcm1wX2ZhdWx0KHZjcHUsIGdwYSwgcGZuLCBlcnJvcl9jb2RlLCBybXBfbGV2ZWwsIHJldCk7Ci1vdXRfbm9fdHJhY2U6Ci0Ja3ZtX3JlbGVhc2VfcGFnZV91bnVzZWQocGFnZSk7CiB9CiAKIHN0YXRpYyBib29sIGlzX3Bmbl9yYW5nZV9zaGFyZWQoa3ZtX3Bmbl90IHN0YXJ0LCBrdm1fcGZuX3QgZW5kKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCmluZGV4IDAzYmZjOTI4NjRiNmUuLjUwMjQ2NTExOWNhMGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKQEAgLTI1ODYsMTMgJiM0MzsyNTg2LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fbWVtX2lzX3ByaXZhdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pCiAKICNpZmRlZiBDT05GSUdfS1ZNX0dVRVNUX01FTUZECiBpbnQga3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsCi0JCSAgICAgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgKnBmbiwgc3RydWN0IHBhZ2UgKipwYWdlLAotCQkgICAgIGludCAqbWF4X29yZGVyKTsKJiM0MzsJCSAgICAgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgKnBmbiwgaW50ICptYXhfb3JkZXIpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IGt2bV9nbWVtX2dldF9wZm4oc3RydWN0IGt2bSAqa3ZtLAogCQkJCSAgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsIGdmbl90IGdmbiwKLQkJCQkgICBrdm1fcGZuX3QgKnBmbiwgc3RydWN0IHBhZ2UgKipwYWdlLAotCQkJCSAgIGludCAqbWF4X29yZGVyKQomIzQzOwkJCQkgICBrdm1fcGZuX3QgKnBmbiwgaW50ICptYXhfb3JkZXIpCiB7CiAJS1ZNX0JVR19PTigxLCBrdm0pOwogCXJldHVybiAtRUlPOwpkaWZmIC0tZ2l0IGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMKaW5kZXggYjU5NjQ4NmQxODRjYS4uNTg5NzYyMTQwYzNlZiAxMDA2NDQKLS0tIGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYwomIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jCkBAIC03NTEsOCAmIzQzOzc1MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fa3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3QgZmlsZSAqZmlsZSwKIH0KIAogaW50IGt2bV9nbWVtX2dldF9wZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LAotCQkgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIHN0cnVjdCBwYWdlICoqcGFnZSwKLQkJICAgICBpbnQgKm1heF9vcmRlcikKJiM0MzsJCSAgICAgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgKnBmbiwgaW50ICptYXhfb3JkZXIpCiB7CiAJcGdvZmZfdCBpbmRleCA9IGt2bV9nbWVtX2dldF9pbmRleChzbG90LCBnZm4pOwogCXN0cnVjdCBmb2xpbyAqZm9saW87CkBAIC03ODAsMTEgJiM0Mzs3NzksNyBAQCBpbnQga3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsCiAjZW5kaWYKIAogCWZvbGlvX3VubG9jayhmb2xpbyk7Ci0KLQlpZiAoIXIpCi0JCSpwYWdlID0gZm9saW9fZmlsZV9wYWdlKGZvbGlvLCBpbmRleCk7Ci0JZWxzZQotCQlmb2xpb19wdXQoZm9saW8pOwomIzQzOwlmb2xpb19wdXQoZm9saW8pOwogCiAJcmV0dXJuIHI7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1OTIKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA0MjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLVk0gUGF0Y2ggZm9yIEd1ZXN0IE1lbWZkIGFuZCBDb25maWRlbnRpYWwgQ29tcHV0aW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBLVk0sIGFuZCBpdCYjMzk7cyBtb2RpZnlpbmcgYGt2bV9nbWVtX2dldF9wZm5gLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGRyb3BwaW5nIHRoZSBgc3RydWN0IHBhZ2UgKipwYWdlYCBhcmd1bWVudCBhbmQsIG1vcmUgc2lnbmlmaWNhbnRseSwgbm8gbG9uZ2VyIHJldHVybmluZyBhIHJlZmVyZW5jZWQgcGFnZS4gSW5zdGVhZCwgaXQmIzM5O3MganVzdCB0aGUgcGZuLCB3aXRoIHRoZSBmb2xpbyByZWZlcmVuY2UgZHJvcHBlZCBiZWZvcmUgcmV0dXJuaW5nLiBBbHJpZ2h0LCB0aGF0JiMzOTtzIGEgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZS4gVGhlIGNvZGUgYWZmZWN0ZWQgaW5jbHVkZXMgc29tZSBjcml0aWNhbCBhcmVhczogYGFyY2gvYXJtNjQva3ZtL21tdS5jYCwgYGFyY2gvYXJtNjQva3ZtL25lc3RlZC5jYCwgYW5kIHRoZSB4ODYgZXF1aXZhbGVudCwgcGx1cyBzb21lIG90aGVyIGtleSBmaWxlcyBsaWtlIHRoZSBoZWFkZXIgYW5kIGB2aXJ0L2t2bS9ndWVzdF9tZW1mZC5jYC4KCk15IGZpcnN0IHRob3VnaHQgaXMsIGhvdyBpcyB0aGUgbWVtb3J5IGtlcHQgYWxpdmUgaWYgdGhleSBhcmUgZHJvcHBpbmcgdGhlIHJlZmVyZW5jZT8gQWgsIGl0IGxvb2tzIGxpa2UgYGd1ZXN0X21lbWZkYCBtZW1vcnkgaXMgbWFuYWdlZCB0aHJvdWdoIHRoZSBmaWxlIGRlc2NyaXB0b3IgaXRzZWxmLCBhbmQgS1ZNJiMzOTtzIG1tdV9ub3RpZmllci1saWtlIG1lY2hhbmlzbSwgb3IgcmF0aGVyIHRoZSBndWVzdF9tZW1mZCBpbnZhbGlkYXRpb24gY2FsbGJhY2tzLCBoYW5kbGVzIHRoZSB1bm1hcHBpbmcgaWYgdGhlIG1lbW9yeSBpcyBmcmVlZC4gU28sIGl0IGFwcGVhcnMgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGZvciBob3cgS1ZNIGhhbmRsZXMgYGd1ZXN0X21lbWZkYCBwYWdlcy4gVGhleSBhcmUgbm8gbG9uZ2VyIHRha2luZyBhIHBhZ2UgcmVmZXJlbmNlLgoKR2l2ZW4gdGhpcyBpcyBhIGNvcmUgY29tcG9uZW50LCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBpZiB0aGlzIGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4gT2theSwgYEtWTSBndWVzdF9tZW1mZGAgaXMgYSBrZXkgcGllY2UgZm9yIGNvbmZpZGVudGlhbCBjb21wdXRpbmcsIHJpZ2h0PyBTRVYtU05QLCBURFgsIGFuZCBBUk0gQ0NBIGFsbCB1c2UgaXQuIEFuZCwgeWVzLCBpdCYjMzk7cyByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyByZWFjaGFibGUgd2l0aGluIGEgc3RhbmRhcmQgUUVNVSBvciBHQ0Ugc2V0dXAuIEkgc2hvdWxkIGNoZWNrIGhvdyB0aGVzZSBndWVzdCBtZW1mZHMgYXJlIGNyZWF0ZWQuIEFoLCB0aGV5JiMzOTtyZSBjcmVhdGVkIHdpdGggYEtWTV9DUkVBVEVfR1VFU1RfTUVNRkRgLiBBbmQgeWVzLCB0aGlzIGlzIGF2YWlsYWJsZSBpZiBgQ09ORklHX0tWTV9HVUVTVF9NRU1GRGAgaXMgZW5hYmxlZC4gV2FpdCwgYW5kIGl0IGxvb2tzIGxpa2UgYENPTkZJR19LVk1fR1VFU1RfTUVNRkRgIGlzIHNlbGVjdGVkIGJ5IEtWTV9TV19QUk9URUNURURfVk0gb3Igb3RoZXIgY29uZmlkZW50aWFsIGNvbXB1dGluZyBjb25maWdzLiBQZXJmZWN0LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBgQ09ORklHX0tWTV9HVUVTVF9NRU1GRGAgY29uZmlnLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fR1VFU1RfTUVNRkQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0vS2NvbmZpZz0xMDM9Y29uZmlnIEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG4tLVxudmlydC9rdm0vS2NvbmZpZy0xMDUtXG52aXJ0L2t2bS9LY29uZmlnOjEwNjpjb25maWcgS1ZNX0dVRVNUX01FTUZEXG52aXJ0L2t2bS9LY29uZmlnLTEwNy0gICAgICAgc2VsZWN0IFhBUlJBWV9NVUxUSVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2MDgKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW52ZXN0aWdhdGluZyBLVk1fR1VFU1RfTUVNRkQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBLVk1fR1VFU1RfTUVNRkRgIHNlbGVjdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gdW5kZXJzdGFuZCAqd2h5KiBpdCYjMzk7cyBiZWluZyBjaG9zZW4gb3IgYmVpbmcgY29uc2lkZXJlZC4gV2hhdCYjMzk7cyB0aGUgY29udGV4dCBoZXJlPyBJcyBpdCByZWxhdGVkIHRvIGEgc3BlY2lmaWMgdnVsbmVyYWJpbGl0eSwgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBvciBuZXcgZmVhdHVyZSBpbnRyb2R1Y3Rpb24gd2l0aGluIHRoZSBLVk0gZWNvc3lzdGVtPyBNeSBleHBlcnQgaW50dWl0aW9uIGtpY2tzIGluOyBJJiMzOTttIGltbWVkaWF0ZWx5IHJ1bm5pbmcgdGhyb3VnaCBwb3NzaWJsZSB1c2UgY2FzZXMgaW4gbXkgaGVhZDogbWVtb3J5IGJhbGxvb25pbmcsIHNlY3VyZSBndWVzdCBtZW1vcnkgbWFuYWdlbWVudCwgcG90ZW50aWFsbHkgZXZlbiBzaGFyZWQgbWVtb3J5IGltcGxlbWVudGF0aW9ucy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHRyaWdnZXJpbmcgZXZlbnQgb3IgY29uZGl0aW9uIHRoYXQgbGVhZHMgdG8gdGhlIHNlbGVjdGlvbiBvZiB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbi4gV2hhdCBvdGhlciByZWxhdGVkIG9wdGlvbnMgYXJlIHBvdGVudGlhbGx5IGJlaW5nIGNvbnNpZGVyZWQ/IEkgd2lsbCBkZWx2ZSBkZWVwZXIgaW50byBkb2N1bWVudGF0aW9uLCBjb2RlLCBhbmQgcmVsYXRlZCBtYWlsaW5nIGxpc3QgZGlzY3Vzc2lvbnMuIEl0JiMzOTtzIGxpa2VseSB0aGF0IGl0JiMzOTtzIGJlaW5nIGNob3NlbiBmb3IgYSByZWFzb24sIGFuZCB0aGVyZSBpcyBjZXJ0YWlubHkgbXVjaCBmb3IgbWUgdG8gZGlzY292ZXIgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgS1ZNX0dVRVNUX01FTUZEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL0tjb25maWc9MjA9bWVudWNvbmZpZyBLVk1cbi0tXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTM4LVx0c2VsZWN0IEdVRVNUX1BFUkZfRVZFTlRTIGlmIFBFUkZfRVZFTlRTXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnOjM5Olx0c2VsZWN0IEtWTV9HVUVTVF9NRU1GRFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy00MC1cdGhlbHBcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0yMD1jb25maWcgS1ZNX1g4NlxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTQ5LVx0c2VsZWN0IEtWTV9XRVJST1IgaWYgV0VSUk9SXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1MDpcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkQgaWYgWDg2XzY0XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDY0CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMzMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKioKCk9rYXksIHNvIHRoaXMgaXMgYXV0b21hdGljYWxseSBlbmFibGVkIG9uIGJvdGggQVJNNjQgYW5kIFg4Nl82NCBLVk0sIHdoaWNoIGlzIGdvb2Qg4oCTIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGlkZW50aWZ5IHRoZSBtb3N0IHByb21pc2luZyBmdW5jdGlvbnMgZm9yIGZ1enppbmcuCgpMb29raW5nIGF0IHRoZSBwYXRjaCwgSSBzZWUgbW9kaWZpY2F0aW9ucyBpbiBhIGZldyBrZXkgYXJlYXM6IGBnbWVtX2Fib3J0YCwgYGt2bV90cmFuc2xhdGVfdm5jcmAsIGBrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW1gLCBgX19zZXZfc25wX3JlbG9hZF92bXNhYCwgYHNldl9oYW5kbGVfcm1wX2ZhdWx0YCwgYW5kIGBrdm1fZ21lbV9nZXRfcGZuYC4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGVpciBlbnRyeSBwb2ludHMgYW5kIGNhbGwgY2hhaW5zLgoKYGt2bV9nbWVtX2dldF9wZm5gIGFwcGVhcnMgdG8gYmUgYW4gQVBJIGZ1bmN0aW9uLCB3aGljaCBpcyB1c2VmdWwuIFNhbWUgZ29lcyBmb3IgYHNldl9oYW5kbGVfcm1wX2ZhdWx0YC4gSSBzaG91bGQgaW52ZXN0aWdhdGUgdGhlIGNhbGxlcnMgYW5kIGhvdyB0aGUgZGF0YSBmbG93cyBpbnRvIHRoZW0gdG8gc2VlIGhvdyB0aGV5JiMzOTtyZSBleHBvc2VkIHRvIHRoZSBndWVzdC4gTm93LCBgZ21lbV9hYm9ydGAgaXMgY2FsbGVkIGJ5IGB1c2VyX21lbV9hYm9ydGAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIHJpZ2h0PyBMZXQgbWUgZG91YmxlLWNoZWNrIGhvdyB0aGF0IHdvcmtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dtZW1fYWJvcnQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vbW11LmM9MTYwMD1zdHJ1Y3Qga3ZtX3MyX2ZhdWx0X2Rlc2Mge1xuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTE2MDctXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoxNjA4OnN0YXRpYyBpbnQgZ21lbV9hYm9ydChjb25zdCBzdHJ1Y3Qga3ZtX3MyX2ZhdWx0X2Rlc2MgKnMyZmQpXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xNjA5LXtcbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYz0yMjQ4PWludCBrdm1faGFuZGxlX2d1ZXN0X2Fib3J0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0yNDE5LVx0XHRpZiAoa3ZtX3Nsb3RfaGFzX2dtZW0obWVtc2xvdCkpXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoyNDIwOlx0XHRcdHJldCA9IGdtZW1fYWJvcnQoXHUwMDI2czJmZCk7XG5hcmNoL2FybTY0L2t2bS9tbXUuYy0yNDIxLVx0XHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkxNwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIGFzIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6CgoqKkFuYWx5emluZyBLVk0gRW50cnkgUG9pbnRzOiBBUk02NCB2cy4geDg2KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgS1ZNIGhhbmRsZXMgZ3Vlc3QgYWJvcnRzIGFuZCBtZW1vcnkgZmF1bHRzLiBJdCBsb29rcyBsaWtlIGBrdm1faGFuZGxlX2d1ZXN0X2Fib3J0YCBpcyB0aGUga2V5IGVudHJ5IHBvaW50IGZvciBBUk02NCBhcmNoaXRlY3R1cmVzLiBUaGF0IG1ha2VzIHNlbnNlLCBpdCYjMzk7cyB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gZm9yIGRlYWxpbmcgd2l0aCB0aG9zZSB1bmV4cGVjdGVkIGV2ZW50cy4gTm93LCBmb3IgeDg2LCBpdCYjMzk7cyBub3QgcXVpdGUgdGhlIHNhbWUuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGggaXMgdGhyb3VnaCBga3ZtX21tdV9mYXVsdGluX3Bmbl9nbWVtYCwgd2hpY2ggaXMgdXNlZCBieSBmdW5jdGlvbnMgbGlrZSBga3ZtX21tdV9mYXVsdGluX3BmbmAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGFuZCBtYXliZSBvdGhlcnMsIHJlbGF0ZWQgdG8gcGFnZSBmYXVsdHMgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LiBTbyBpdCBzZWVtcyBsaWtlIEFSTTY0IGFuZCB4ODYgdGFrZSBkaWZmZXJlbnQgcm91dGVzIHRvIGhhbmRsZSB0aGVzZSBzaW1pbGFyIGxvdy1sZXZlbCBpc3N1ZXMsIG9uZSB3aXRoIGEgZGVkaWNhdGVkIGFib3J0IGhhbmRsZXIgYW5kIHRoZSBvdGhlciBieSB3b3JraW5nIHRocm91Z2ggdGhlIE1NVSBmYXVsdCBoYW5kbGVycy4gSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIHg4NiBjb2RlIHRvIHBpbnBvaW50IHRoZSBleGFjdCBjYWxsaW5nIHN0cnVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX21tdV9mYXVsdGluX3Bmbl9nbWVtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvbW11LmM9NDYxMz1zdGF0aWMgdm9pZCBrdm1fbW11X2ZpbmlzaF9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ2MTktXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ2MjA6c3RhdGljIGludCBrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NjIxLVx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fcGFnZV9mYXVsdCAqZmF1bHQpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz00NjQzPXN0YXRpYyBpbnQgX19rdm1fbW11X2ZhdWx0aW5fcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ2NDgtXHRpZiAoZmF1bHQtXHUwMDNlaXNfcHJpdmF0ZSB8fCBrdm1fbWVtc2xvdF9pc19nbWVtX29ubHkoZmF1bHQtXHUwMDNlc2xvdCkpXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ2NDk6XHRcdHJldHVybiBrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW0odmNwdSwgZmF1bHQpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NjUwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTcwCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSBkZWVwIGluIEtWTSBpbnRlcm5hbHM6CgoqKkludmVzdGlnYXRpbmcgdGhlIFBhZ2UgRmF1bHQgSGFuZGxpbmcgUGF0aCBpbiBLVk0qKgoKQWxyaWdodCwgSSYjMzk7bSB0cmFjaW5nIHRocm91Z2ggdGhpcyBmYXVsdCBoYW5kbGluZyBsb2dpYy4gSSBzZWUgdGhhdCBgX19rdm1fbW11X2ZhdWx0aW5fcGZuYCBpcyBjYWxsZWQgYnkgYGt2bV9tbXVfZmF1bHRpbl9wZm5gLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCYjMzk7cyB0aGUgaW50ZXJuYWwgd29ya2VyIGZ1bmN0aW9uIGZvciB0aGUgaW5pdGlhbCBmYXVsdC1pbiBvcGVyYXRpb24uIEJ1dCB0aGlzIGhhcyBtYWRlIG1lIHRoaW5rLi4uIHdoYXQmIzM5O3MgdGhlIHJvbGUgb2YgYGt2bV9tbXVfZG9fcGFnZV9mYXVsdGAgaW4gdGhpcyB3aG9sZSBmbG93PyBJcyBpdCBhIGhpZ2hlci1sZXZlbCBlbnRyeSBwb2ludD8gSXMgaXQgY2FsbGVkIGJlZm9yZSBvciBhZnRlciB0aGlzIGBmYXVsdGluYCBzZXF1ZW5jZSwgb3IgaXMgaXQgYSBjb21wbGV0ZWx5IHNlcGFyYXRlIHBhdGg/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBmdW5jdGlvbnMsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIG92ZXJhbGwgaGFuZGxpbmcgb2YgcGFnZSBmYXVsdHMgd2l0aGluIHRoZSBLVk0gTU1VLiBJIHJlYWxseSBuZWVkIHRvIG1hcCBvdXQgdGhlIGVudGlyZSBjYWxsIGdyYXBoIHRvIGJlIHN1cmUuIFRoZXJlJiMzOTtzIGEgY2hhbmNlIHRoZXkgYXJlIGNvbXBsZXRlbHkgdW5yZWxhdGVkIGJ1dCBpdCBzZWVtcyB1bnVzdWFsLiBJdCB3b3VsZCBiZSB2YWx1YWJsZSB0byB1bmRlcnN0YW5kIHdoZXRoZXIgaXQgaXMgYSBwb3RlbnRpYWwgb3B0aW1pemF0aW9uLCBvciBpZiBvbmUgY2FsbHMgdGhlIG90aGVyLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9tbXVfZmF1bHRpbl9wZm4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS9tbXUuYz00NjEzPXN0YXRpYyB2b2lkIGt2bV9tbXVfZmluaXNoX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDYxOS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDYyMDpzdGF0aWMgaW50IGt2bV9tbXVfZmF1bHRpbl9wZm5fZ21lbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ2MjEtXHRcdFx0XHQgICAgc3RydWN0IGt2bV9wYWdlX2ZhdWx0ICpmYXVsdClcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ2NDItXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ2NDM6c3RhdGljIGludCBfX2t2bV9tbXVfZmF1bHRpbl9wZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NjQ0LVx0XHRcdFx0IHN0cnVjdCBrdm1fcGFnZV9mYXVsdCAqZmF1bHQpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NjQ4LVx0aWYgKGZhdWx0LVx1MDAzZWlzX3ByaXZhdGUgfHwga3ZtX21lbXNsb3RfaXNfZ21lbV9vbmx5KGZhdWx0LVx1MDAzZXNsb3QpKVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0NjQ5Olx0XHRyZXR1cm4ga3ZtX21tdV9mYXVsdGluX3Bmbl9nbWVtKHZjcHUsIGZhdWx0KTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDY1MC1cbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ2ODctXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ2ODg6c3RhdGljIGludCBrdm1fbW11X2ZhdWx0aW5fcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDY4OS1cdFx0XHQgICAgICAgc3RydWN0IGt2bV9wYWdlX2ZhdWx0ICpmYXVsdCwgdW5zaWduZWQgaW50IGFjY2Vzcylcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ3ODEtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ3ODI6XHRyZXQgPSBfX2t2bV9tbXVfZmF1bHRpbl9wZm4odmNwdSwgZmF1bHQpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NzgzLVx0aWYgKHJldCAhPSBSRVRfUEZfQ09OVElOVUUpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz00ODQwPXN0YXRpYyBpbnQgZGlyZWN0X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQgKmZhdWx0KVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDg1OC1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDg1OTpcdHIgPSBrdm1fbW11X2ZhdWx0aW5fcGZuKHZjcHUsIGZhdWx0LCBBQ0NfQUxMKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDg2MC1cdGlmIChyICE9IFJFVF9QRl9DT05USU5VRSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ5MzU9c3RhdGljIGludCBrdm1fdGRwX21tdV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ5NTAtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ5NTE6XHRyID0ga3ZtX21tdV9mYXVsdGluX3Bmbih2Y3B1LCBmYXVsdCwgQUNDX0FMTCk7XG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ5NTItXHRpZiAociAhPSBSRVRfUEZfQ09OVElOVUUpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaD0yMjY9c3RydWN0IGt2bV9wYWdlX2ZhdWx0IHtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oLTI3OC1cbmFyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmg6Mjc5Olx0LyogT3V0cHV0cyBvZiBrdm1fbW11X2ZhdWx0aW5fcGZuKCkuICAqL1xuYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaC0yODAtXHR1bnNpZ25lZCBsb25nIG1tdV9zZXE7XG4tLVxuYXJjaC94ODYva3ZtL21tdS9wYWdpbmdfdG1wbC5oPTgwND1zdGF0aWMgaW50IEZOQU1FKHBhZ2VfZmF1bHQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9wYWdlX2ZhdWx0ICpmYXVsdClcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2luZ190bXBsLmgtODQxLVxuYXJjaC94ODYva3ZtL21tdS9wYWdpbmdfdG1wbC5oOjg0MjpcdHIgPSBrdm1fbW11X2ZhdWx0aW5fcGZuKHZjcHUsIGZhdWx0LCB3YWxrZXIucHRlX2FjY2Vzcyk7XG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2luZ190bXBsLmgtODQzLVx0aWYgKHIgIT0gUkVUX1BGX0NPTlRJTlVFKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDExMAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDMwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEtWTSBNZW1vcnkgTWFuYWdlbWVudCAtIEluaXRpYWwgVGhvdWdodHMqKgoKT2theSwgc28gSSYjMzk7dmUgc3BvdHRlZCBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IHdpdGggYGt2bV9nbWVtX2dldF9wZm5gLiBJdCYjMzk7cyByZWFjaGFibGUgZnJvbSBLVk0gcGFnZSBmYXVsdHMgd2hlbiBgZ3Vlc3RfbWVtZmRgIGlzIGluIHVzZSwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFRoZSBrZXkgZnVuY3Rpb25zIHRvIGludmVzdGlnYXRlIGFyZTogYGt2bV9nbWVtX2dldF9wZm5gLCBkZWZpbml0ZWx5LiBBbHNvLCBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCBgc2V2X2hhbmRsZV9ybXBfZmF1bHRgLCBhbmQgZm9yIEFSTTY0LCBga3ZtX2hhbmRsZV9ndWVzdF9hYm9ydGAuIFRoZW4sIG9uIHg4NiwgYGt2bV9tbXVfZG9fcGFnZV9mYXVsdGAgbG9va3MgbGlrZSBhIGdvb2QgZW50cnkgcG9pbnQgdG8gdHJhY2UgZnJvbS4gQWN0dWFsbHksIHdhaXQgLSBga3ZtX2dtZW1fZ2V0X3BmbmAgaXMgKnRoZSogQVBJIGZ1bmN0aW9uLCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBzdGFydC4KCkkmIzM5O2xsIGNoZWNrIGBrdm1fZ21lbV9nZXRfcGZuYCBpbiBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2AgZmlyc3QuIFRoZW4gSSYjMzk7bGwgY2hlY2sgYHNldl9oYW5kbGVfcm1wX2ZhdWx0YCBpbiBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AuIEFuZCBJIHNob3VsZCBhbHNvIGNvbnNpZGVyIGBrdm1fdHJhbnNsYXRlX3ZuY3JgLCB3aGljaCBpcyBpbiBgYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNgIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBzaW1pbGFyIGxvZ2ljIHRoZXJlLgoKVG8gYmUgcHJlY2lzZSwgSSB3aWxsIGZvY3VzIG9uIHRoZXNlIGtleSBmdW5jdGlvbnM6CgoqICAgYGt2bV9nbWVtX2dldF9wZm5gCiogICBgc2V2X2hhbmRsZV9ybXBfZmF1bHRgCiogICBga3ZtX3RyYW5zbGF0ZV92bmNyYAoKV2FpdCwgYGt2bV90cmFuc2xhdGVfdm5jcmAgaXMgc3RhdGljLCB3aGljaCBtYWtlcyBtZSB3b25kZXIgaWYgaXQmIzM5O3MgaW5saW5lZC4gSSBuZWVkIHRvIGJlIHN1cmUgdG8gY2hlY2sgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3RyYW5zbGF0ZV92bmNyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTE0MDc9c3RhdGljIHU2NCByZWFkX3ZuY3JfZWwyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNDExLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTQxMjpzdGF0aWMgaW50IGt2bV90cmFuc2xhdGVfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgKmlzX2dtZW0pXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNDEzLXtcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0xNTQyPWludCBrdm1faGFuZGxlX3ZuY3JfYWJvcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE1NjctXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxNTY4Olx0cmV0ID0ga3ZtX3RyYW5zbGF0ZV92bmNyKHZjcHUsIFx1MDAyNmlzX2dtZW0pO1xuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTU2OS1cdGlmIChyZXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwODIKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB3aGF0IEkmIzM5O20gbG9va2luZyBhdCwgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkRlYnVnZ2luZyBLVk0vU0VWLVNOUCBJbnRlcmFjdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byBzb21lIEtWTSBjb2RlIGFuZCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIHZpcnR1YWwgTk1JIGhhbmRsaW5nIGZvciBTRVYtU05QLiBUaGUgYGt2bV9oYW5kbGVfdm5jcl9hYm9ydGAgZnVuY3Rpb24gaXMgdGhlIGNydWNpYWwgZW50cnkgcG9pbnQgZm9yIGBrdm1fdHJhbnNsYXRlX3ZuY3JgLCB3aGljaCBpcyB3aGVyZSBJJiMzOTtsbCBiZWdpbiBteSBpbnZlc3RpZ2F0aW9uLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBnbWVtX2Fib3J0YCBmdW5jdGlvbi4gSSBrbm93IGl0JiMzOTtzIGludm9rZWQgYnkgYGt2bV9oYW5kbGVfZ3Vlc3RfYWJvcnRgLCB3aGljaCBpcyBsaWtlbHkgd2hlcmUgdGhlIGFib3J0IHNpZ25hbCBpcyBvcmlnaW5hdGluZyBmcm9tLiBJIHN1c3BlY3QgdGhlIGlzc3VlIGNvdWxkIGJlIHJlbGF0ZWQgdG8gbWVtb3J5IGFjY2VzcyBpc3N1ZXMgb3Igc29tZSBraW5kIG9mIGd1ZXN0LXNpZGUgaW50ZXJydXB0aW9uIG9yIGV4Y2VwdGlvbiB0aGF0JiMzOTtzIHRyaWdnZXJpbmcgdGhlIGFib3J0LiBOZXh0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGBfX3Nldl9zbnBfcmVsb2FkX3Ztc2FgIGFuZCB0aGUgZmxvdyB0aGF0IGludm9rZXMgaXQg4oCTIGl0IGFwcGVhcnMgdG8gYmUgY2FsbGVkIGJ5IGBzZXZfc25wX3JlbG9hZF92bXNhYCBvciBhIHJlbGF0ZWQgZnVuY3Rpb24sIHdoaWNoIHN1Z2dlc3RzIGEgcG9zc2libGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgVk0gc3RhdGUgc2F2ZS9yZXN0b3JlIG1lY2hhbmlzbSBkdXJpbmcgYW4gU0VWLVNOUCBwcm90ZWN0ZWQgb3BlcmF0aW9uLiBNeSBoeXBvdGhlc2lzIGlzIHRoYXQgdGhlcmUgbWlnaHQgYmUgYSBwcm9ibGVtIHdpdGggdGhlIHdheSB3ZSYjMzk7cmUgaGFuZGxpbmcgdGhlIFZNU0EgcmVsb2FkLCBwb3NzaWJseSBhIHJhY2UgY29uZGl0aW9uIG9yIGEgc3RhdGUgbWlzbWF0Y2ggdGhhdCYjMzk7cyB0cmlnZ2VyaW5nIHRoZSBhYm9ydC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cgdGhyb3VnaCBhbGwgb2YgdGhlc2UgY2FsbHMgdG8gZnVsbHkgdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19zZXZfc25wX3JlbG9hZF92bXNhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmM9Mzk4OD1zdGF0aWMgaW50IHNucF9iZWdpbl9wc2Moc3RydWN0IHZjcHVfc3ZtICpzdm0pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00MDI3LVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0MDI4OnN0YXRpYyB2b2lkIF9fc2V2X3NucF9yZWxvYWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSlcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDAyOS17XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00MDk5PXN0YXRpYyB2b2lkIHNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDExNy1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDExODpcdF9fc2V2X3NucF9yZWxvYWRfdm1zYSh2Y3B1LCBncGEpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00MTE5LVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDEzMD12b2lkIHNldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDEzNS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDEzNjpcdF9fc2V2X3NucF9yZWxvYWRfdm1zYSh2Y3B1LCBzZXZfZXMtXHUwMDNlc25wX2d1ZXN0X3Ztc2FfZ3BhKTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDEzNy19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTA1CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgTm9uLVN0YXRpYyBFbnRyeSBQb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGNvZGUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBgc2V2X3NucF9yZWxvYWRfdm1zYWAgaXMgdGhlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnQuIFRoYXQmIzM5O3MgbXkgc3RhcnRpbmcgcG9pbnQuIE5vdywgSSBuZWVkIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgZWxzZSBpcyBleHBvc2VkLiBMZXQmIzM5O3MgZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQgYW5kIGxpc3Qgb3V0IHRoZSBvdGhlciBub24tc3RhdGljIGVudHJ5IHBvaW50cyBzbyBJIGNhbiBzZWUgdGhlIHNjb3BlIG9mIHdoYXQgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBoZXJlLgoKQWxyaWdodCwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O3ZlIGdvdDoKCiogICBga3ZtX2dtZW1fZ2V0X3BmbmAKKiAgIGBzZXZfaGFuZGxlX3JtcF9mYXVsdGAKKiAgIGBzZXZfc25wX3JlbG9hZF92bXNhYAoqICAgYGt2bV9oYW5kbGVfdm5jcl9hYm9ydGAKKiAgIGBrdm1faGFuZGxlX2d1ZXN0X2Fib3J0YCAoc3BlY2lmaWNhbGx5IGZvciBBUk02NCwgbm90ZWQpCiogICBBbmQgZmluYWxseSwgYGt2bV9tbXVfZG9fcGFnZV9mYXVsdGAgKGZvciB4ODYpLiBIbW0uLi4gYGt2bV9tbXVfZG9fcGFnZV9mYXVsdGAuLi4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0OyBJJiMzOTttIGJldHRpbmcgdGhhdCYjMzk7cyBlaXRoZXIgYSBtYWNybyBvciBhIGZ1bmN0aW9uLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGlzIGlzIGEgbWFjcm8gb3IgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9tbXVfZG9fcGFnZV9mYXVsdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ5NzA9c3RhdGljIGludCBrdm1fdGRwX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQgKmZhdWx0KVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDk3OS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDk4MDpzdGF0aWMgaW50IGt2bV9tbXVfZG9fcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ5ODEtXHRcdFx0XHQgdTY0IGVyciwgYm9vbCBwcmVmZXRjaCwgaW50ICplbXVsYXRpb25fdHlwZSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTUwNDU9c3RhdGljIGludCBrdm1fdGRwX3BhZ2VfcHJlZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MDY0LVx0XHRjb25kX3Jlc2NoZWQoKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTA2NTpcdFx0ciA9IGt2bV9tbXVfZG9fcGFnZV9mYXVsdCh2Y3B1LCBncGEsIGVycm9yX2NvZGUsIHRydWUsIE5VTEwsIGxldmVsKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTA2Ni1cdH0gd2hpbGUgKHIgPT0gUkVUX1BGX1JFVFJZKTtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTUxMzU9dm9pZCBrdm1fYXJjaF9hc3luY19wYWdlX3JlYWR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9hc3luY19wZiAqd29yaylcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUxNTMtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUxNTQ6XHRyID0ga3ZtX21tdV9kb19wYWdlX2ZhdWx0KHZjcHUsIHdvcmstXHUwMDNlY3IyX29yX2dwYSwgd29yay1cdTAwM2VhcmNoLmVycm9yX2NvZGUsXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUxNTUtXHRcdFx0XHQgIHRydWUsIE5VTEwsIE5VTEwpO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NjU2Nz1pbnQgbm9pbmxpbmUga3ZtX21tdV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSwgdTY0IGVycm9yX2NvZGUsXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02NjAyLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2NjAzOlx0XHRyID0ga3ZtX21tdV9kb19wYWdlX2ZhdWx0KHZjcHUsIGNyMl9vcl9ncGEsIGVycm9yX2NvZGUsIGZhbHNlLFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02NjA0LVx0XHRcdFx0XHQgIFx1MDAyNmVtdWxhdGlvbl90eXBlLCBOVUxMKTtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY2MjMtXHQvKlxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2NjI0Olx0ICogTm9uZSBvZiBoYW5kbGVfbW1pb19wYWdlX2ZhdWx0KCksIGt2bV9tbXVfZG9fcGFnZV9mYXVsdCgpLCBvclxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02NjI1LVx0ICoga3ZtX21tdV93cml0ZV9wcm90ZWN0X2ZhdWx0KCkgcmV0dXJuIFJFVF9QRl9DT05USU5VRS5cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NjYyNjpcdCAqIGt2bV9tbXVfZG9fcGFnZV9mYXVsdCgpIG9ubHkgdXNlcyBSRVRfUEZfQ09OVElOVUUgaW50ZXJuYWxseSB0b1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02NjI3LVx0ICogaW5kaWNhdGUgY29udGludWluZyB0aGUgcGFnZSBmYXVsdCBoYW5kbGluZyB1bnRpbCB0byB0aGUgZmluYWxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oPTIyNj1zdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQge1xuYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaDoyMjc6XHQvKiBhcmd1bWVudHMgdG8ga3ZtX21tdV9kb19wYWdlX2ZhdWx0LiAgKi9cbmFyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmgtMjI4LVx0Y29uc3QgZ3BhX3QgYWRkcjtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oLTI5NC0gKiBSZXR1cm4gdmFsdWVzIG9mIGhhbmRsZV9tbWlvX3BhZ2VfZmF1bHQoKSwgbW11LnBhZ2VfZmF1bHQoKSwgZmFzdF9wYWdlX2ZhdWx0KCksXG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oOjI5NTogKiBhbmQgb2YgY291cnNlIGt2bV9tbXVfZG9fcGFnZV9mYXVsdCgpLlxuYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaC0yOTYtICpcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oPTMxMj1lbnVtIHtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oLTMyNS0gKiAgIFwmIzM0O1RFU1QgJXJheCwgJXJheCwgSk5aXCYjMzQ7LCBhcyBhbGwgXCYjMzQ7c3RvcCFcJiMzNDsgdmFsdWVzIGFyZSBub24temVybyxcbmFyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmg6MzI2OiAqIC0ga3ZtX21tdV9kb19wYWdlX2ZhdWx0KCkgdG8gcmV0dXJuIG90aGVyIFJFVF9QRl8qIGFzIGEgcG9zaXRpdmUgdmFsdWUuXG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oLTMyNy0gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2NDkKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB4ODYgUGFnZSBGYXVsdCBIYW5kbGVyKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gYGt2bV9tbXVfcGFnZV9mYXVsdGAsIHdoaWNoIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgaGFuZGxpbmcgcGFnZSBmYXVsdHMgb24geDg2LCB0aGUgY29yZSBvZiB0aGUgaXNzdWUuIFRoYXQgaW1tZWRpYXRlbHkgcG9pbnRzIG1lIHRvIGEgc3BlY2lmaWMgc2V0IG9mIGZ1bmN0aW9ucyBJIG5lZWQgdG8gc2NydXRpbml6ZSBtb3JlIGNsb3NlbHk6IGBrdm1fZ21lbV9nZXRfcGZuYCwgYHNldl9oYW5kbGVfcm1wX2ZhdWx0YCwgYHNldl9zbnBfcmVsb2FkX3Ztc2FgLCBga3ZtX2hhbmRsZV92bmNyX2Fib3J0YCwgYGt2bV9oYW5kbGVfZ3Vlc3RfYWJvcnRgLCBhbmQgb2YgY291cnNlLCB0aGUgaGFuZGxlciBpdHNlbGYsIGBrdm1fbW11X3BhZ2VfZmF1bHRgLiBUaGVzZSBhcmUgdGhlIGtleSBwbGF5ZXJzIGluIHRoaXMgZmF1bHQgaGFuZGxpbmcgc2NlbmFyaW8uCgpNeSBmaXJzdCBjaGVjayBpcyB0byB2ZXJpZnkgaWYgYGt2bV9nbWVtX2dldF9wZm5gIGlzIHN0YXRpYyBvciBleHBvcnRlZC4gQWgsIGdvb2QsIGl0JiMzOTtzIG5vbi1zdGF0aWMgYW5kIHJlc2lkZXMgd2l0aGluIGB2aXJ0L2t2bS9ndWVzdF9tZW1mZC5jYCwgbWVhbmluZyBJIGNhbiByZWFkaWx5IGFjY2VzcyBhbmQgZXhhbWluZSBpdC4KCk5vdywgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIHRvIHRoZSBjb25maWd1cmF0aW9ucyBzdXJyb3VuZGluZyB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLiBJIHNlZSB0aGF0IGBLVk1fR1VFU1RfTUVNRkRgIGlzIHNlbGVjdGVkIGZvciBib3RoIEFSTTY0IGFuZCB4ODZfNjQsIGJ1dCBpdCYjMzk7cyBub3QgYSB1c2VyLXNlbGVjdGFibGUgb3B0aW9uLCB3aGljaCBpcyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIuIEl0JiMzOTtzIGFjdHVhbGx5IHNlbGVjdGVkIHRocm91Z2ggYEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTYCwgb3IgYEtWTV9TV19QUk9URUNURURfVk1gLCBvciBqdXN0IGBLVk1gIGl0c2VsZiBmb3IgdGhvc2UgYXJjaGl0ZWN0dXJlcy4gSSBuZWVkIHRvIG5vdyBkZXRlcm1pbmUgaWYgYEtWTV9TV19QUk9URUNURURfVk1gIGlzIGEgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24sIGFzIHRoaXMgd291bGQgaW1wYWN0IG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSYjMzk7cyBiZWhhdmlvciBhbmQgdGhpcyBwYWdlIGZhdWx0JiMzOTtzIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTY5PWNvbmZpZyBLVk1fV0VSUk9SXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctODItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQyMAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OgoKKipFeGFtaW5pbmcgS1ZNIGFuZCBHdWVzdCBNZW1vcnkgUHJvdGVjdGlvbiBvbiB4ODYqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IGd1ZXN0IG1lbW9yeSBpcyBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSB4ODYgYXJjaGl0ZWN0dXJlIGFuZCBLVk0uIEkmIzM5O20gZm9jdXNpbmcgb24gc29mdHdhcmUtcHJvdGVjdGVkIFZNcywgYW5kIEkgc2VlIHRoYXQgYEtWTV9TV19QUk9URUNURURfVk1gIGlzIHRoZSBmbGFnIHRoYXQgZW5hYmxlcyBgZ3Vlc3RfbWVtZmRgIGZvciB0aGVzZSBWTXMuIEJ1dCB0aGVuIEkmIzM5O20gdGhpbmtpbmcsIGlzbiYjMzk7dCBgS1ZNX0dVRVNUX01FTUZEYCBhbHJlYWR5IGltcGxpY2l0bHkgc2VsZWN0ZWQgYnkgYEtWTV9YODZgIGlmIHdlJiMzOTtyZSBvbiBgWDg2XzY0YD8gVGhhdCBzZWVtcyBwb3RlbnRpYWxseSByZWR1bmRhbnQgb3IgbWF5YmUgdGhlcmUmIzM5O3MgYSBzcGVjaWZpYyBudWFuY2UgSSYjMzk7bSBtaXNzaW5nLiBUaW1lIHRvIGdvIHJpZ2h0IHRvIHRoZSBzb3VyY2UuIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGUgeDg2IGFyY2hpdGVjdHVyZSwgc3BlY2lmaWNhbGx5IGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AsIHRvIGNsYXJpZnkgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyAqcmVhbGx5KiBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IEtWTV9HVUVTVF9NRU1GRCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9LY29uZmlnPTIwPW1lbnVjb25maWcgS1ZNXG4tLVxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0zOC1cdHNlbGVjdCBHVUVTVF9QRVJGX0VWRU5UUyBpZiBQRVJGX0VWRU5UU1xuYXJjaC9hcm02NC9rdm0vS2NvbmZpZzozOTpcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkRcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctNDAtXHRoZWxwXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWc9MjA9Y29uZmlnIEtWTV9YODZcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy00OS1cdHNlbGVjdCBLVk1fV0VSUk9SIGlmIFdFUlJPUlxuYXJjaC94ODYva3ZtL0tjb25maWc6NTA6XHRzZWxlY3QgS1ZNX0dVRVNUX01FTUZEIGlmIFg4Nl82NFxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0OTQ4CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS1ZNIENvbmZpZ3VyYXRpb24gZm9yIFNFVioqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGl0IHNlZW1zIHRoYXQgaWYgd2UmIzM5O3JlIG9uIGFuIHg4Ni02NCBzeXN0ZW0sIGBLVk1fR1VFU1RfTUVNRkRgIGlzIGF1dG9tYXRpY2FsbHkgaW5jbHVkZWQgYnkgYEtWTV9YODZgLiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzLiBXZSBjYW4gYXNzdW1lIHRoYXQgaWYgYFg4Nl82NGAgaXMgc2V0IGNvcnJlY3RseSwgdGhlbiBgS1ZNX0dVRVNUX01FTUZEYCB3aWxsIGJlIGNvbmZpZ3VyZWQgYXMgcGFydCBvZiB0aGUgZXhpc3RpbmcgYEtWTV9YODZgIGNvbmZpZ3VyYXRpb24uCgpUaGVyZWZvcmUsIGZvciBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHRvIHdvcmssIHdlIHJlYWxseSBqdXN0IG5lZWQgYEtWTWAgZW5hYmxlZCwgYW5kIHRoZW4gYEtWTV9BTURgIGFzIHRoYXQgc2VlbXMgdG8gYmUgdGhlIGNyaXRpY2FsIGRlcGVuZGVuY3kgZm9yIG91ciBBTUQgaGFyZHdhcmUuCgpOb3csIHRoZSBuZXh0IHRoaW5nIHRvIHZlcmlmeSBpcyB0aGF0IGBLVk1fQU1EX1NFVmAgaXMgYWxzbyBwcm9wZXJseSBjb25maWd1cmVkIGFuZCBlbmFibGVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIFNFVi1zcGVjaWZpYyBwaWVjZXMgYXJlIGFsc28gdGFrZW4gY2FyZSBvZiBwcm9wZXJseS4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgYW5kIGNvbmZpcm0gdGhlIGBLVk1fQU1EX1NFVmAgc2V0dGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9BTURfU0VWJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTE0Nj1jb25maWcgS1ZNX0FNRFxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTM2NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQ5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBUaG91Z2h0IFByb2Nlc3Mgb24gS1ZNIENvbmZpZ3VyYXRpb24gYW5kIEZ1bmN0aW9uIFNlbGVjdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBvcHRpbWFsIGNvbmZpZ3VyYXRpb24gYW5kIGtleSBmdW5jdGlvbnMgdG8gaW5jbHVkZSBoZXJlLiBgS1ZNX0FNRF9TRVZgIGlzIGRlZmluaXRlbHkgYSBnb29kIGNob2ljZSwgYW5kIG9mIGNvdXJzZSwgdGhlIGJhc2UgYEtWTWAgY29uZmlndXJhdGlvbiBpdHNlbGYuCgpTbywgbGV0JiMzOTtzIGxpc3QgdGhvc2Ugb3V0OgpDb25maWdzOgotIGBLVk1gCi0gYEtWTV9BTURfU0VWYAoKV2FpdCwganVzdCB0byBjbGFyaWZ5LCBgS1ZNYCB3aWxsIGNvdmVyIEFSTTY0LCBzbyB0aGF0JiMzOTtzIGFsbCBJIG5lZWQgdGhlcmUuCgpOb3csIGxldCYjMzk7cyBtb3ZlIG9uIHRvIHRoZSBmdW5jdGlvbnMuIEkmIzM5O3ZlIGdvdCBhIGZldzogYGt2bV9nbWVtX2dldF9wZm5gLCBgc2V2X2hhbmRsZV9ybXBfZmF1bHRgLCBgc2V2X3NucF9yZWxvYWRfdm1zYWAsIGBrdm1faGFuZGxlX3ZuY3JfYWJvcnRgLCBga3ZtX2hhbmRsZV9ndWVzdF9hYm9ydGAsIGFuZCBga3ZtX21tdV9wYWdlX2ZhdWx0YC4KCkhtbSwgaG9sZCBvbi4gSSByZW1lbWJlciB0aGUgaW5zdHJ1Y3Rpb25zLCAmIzM0O0F2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLiYjMzQ7IFJpZ2h0LCBga3ZtX2hhbmRsZV9ndWVzdF9hYm9ydGAgYW5kIGBrdm1fbW11X3BhZ2VfZmF1bHRgIGFyZSAqdmVyeSogaG90IHBhdGhzLCBzbyB0aG9zZSBhcmUgb3V0LgoKT2theSwgbGV0JiMzOTtzIHJlLWV2YWx1YXRlLiBJIGNhbiBsaXN0IHRoZSByZW1haW5pbmcgZnVuY3Rpb25zOiBga3ZtX2dtZW1fZ2V0X3BmbmAsIGBzZXZfaGFuZGxlX3JtcF9mYXVsdGAsIGBzZXZfc25wX3JlbG9hZF92bXNhYCwgYGt2bV9oYW5kbGVfdm5jcl9hYm9ydGAuIFRob3NlIHNob3VsZCBiZSBzcGVjaWZpYyBlbm91Z2guCgpOb3csIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0IHRob3NlIHJlbWFpbmluZyBmdW5jdGlvbnMgYXJlbiYjMzk7dCBvdmVybHkgZ2VuZXJhbC4gYGt2bV9oYW5kbGVfdm5jcl9hYm9ydGAgaGFuZGxlcyBuZXN0ZWQgdmlydHVhbGl6YXRpb24gVk5DUiBhYm9ydHMg4oCTIHRoYXQmIzM5O3Mgc3BlY2lmaWMuIGBzZXZfaGFuZGxlX3JtcF9mYXVsdGAgaGFuZGxlcyBSTVAgZmF1bHRzLCBhbHNvIG5vdCBhIGdlbmVyaWMgaG90IHBhdGguIGBzZXZfc25wX3JlbG9hZF92bXNhYCBpcyBmb3IgU0VWLVNOUCBWTVNBIHJlbG9hZCwgYWdhaW4sIHNwZWNpZmljLiBBbmQgYGt2bV9nbWVtX2dldF9wZm5gIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIEkgbW9kaWZpZWQsIGNhbGxlZCB3aGVuIGZhdWx0aW5nIGluIGd1ZXN0X21lbWZkIHBhZ2VzLiBJdCYjMzk7cyBwZXJmZWN0bHkgc3BlY2lmaWMgdG8gdGhhdC4KClNvLCBteSBmaW5hbCBGb2N1c1N5bWJvbHMgc2hvdWxkIGJlOgoKLSBga3ZtX2dtZW1fZ2V0X3BmbmAKLSBgc2V2X2hhbmRsZV9ybXBfZmF1bHRgCi0gYHNldl9zbnBfcmVsb2FkX3Ztc2FgCi0gYGt2bV9oYW5kbGVfdm5jcl9hYm9ydGAKCkxldCBtZSBqdXN0IHF1aWNrbHkgY2hlY2sgdGhhdCBga3ZtX2dtZW1fZ2V0X3BmbmAgaXMgZXhwb3J0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTF9HUExcXChrdm1fZ21lbV9nZXRfcGZuXFwpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY0NTAKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipFeGFtaW5pbmcgdGhlIEd1ZXN0IE1lbWZkIEltcGxlbWVudGF0aW9uIGluIEtWTSoqCgpBbHJpZ2h0LCBzbyB0aGUgY2x1ZSBpcyB0aGF0IHdoYXRldmVyIHRoaXMgcmVsYXRlcyB0byBpc24mIzM5O3QgKmV4cG9ydGVkKiwgd2hpY2ggaXMgaW1wb3J0YW50IGNvbnRleHQuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgKm5vbi1zdGF0aWMqIGluIGB2aXJ0L2t2bS9ndWVzdF9tZW1mZC5jYCBpcyBzaWduaWZpY2FudC4gVGhhdCBzdHJvbmdseSBzdWdnZXN0cyBpdCYjMzk7cyBhIGZpbGUsIGJ1dCBzb21ldGhpbmcgbG9jYWwgdG8gdGhlIEtWTSB2aXJ0dWFsaXNhdGlvbiwgYW5kIHRoZXJlJiMzOTtzIGRlZmluaXRlbHkgc29tZSBsb2NhbCB2YXJpYWJsZSBpbnRlcmFjdGlvbiB0aGVyZS4gTXkgaW1tZWRpYXRlIGFjdGlvbiBpcyB0byBkaXZlIGludG8gYHZpcnQva3ZtL2d1ZXN0X21lbWZkLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgbm9uLXN0YXRpYyBlbGVtZW50IGlzLCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZCwgYW5kIHdoYXQgaXRzIHJlbGF0aW9uc2hpcCBpcyB0byBhbnkgZXh0ZXJuYWwgaW50ZXJmYWNlcywgY29uc2lkZXJpbmcgaXQmIzM5O3Mgbm90IGV4cG9ydGVkLiBUaW1lIHRvIGdvIHNwZWx1bmtpbmcgaW4gdGhlIGNvZGUhIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBnb2luZyBvbiBpbiB0aGF0IHNwZWNpZmljIGZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBrdm1fZ21lbV9nZXRfcGZuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0yNTgxPXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fbWVtX2lzX3ByaXZhdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pXG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI1ODctI2lmZGVmIENPTkZJR19LVk1fR1VFU1RfTUVNRkRcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoyNTg4OmludCBrdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNTg5LVx0XHQgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIGludCAqbWF4X29yZGVyKTtcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNTkwLSNlbHNlXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MjU5MTpzdGF0aWMgaW5saW5lIGludCBrdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBrdm0gKmt2bSxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNTkyLVx0XHRcdFx0ICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwgZ2ZuX3QgZ2ZuLFxuLS1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM9NzE3PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fa3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTc1Mi1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6NzUzOmludCBrdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNzU0LVx0XHQgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIGludCAqbWF4X29yZGVyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzEzMgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDEwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBhIGdsb2JhbCBmdW5jdGlvbiwgZ290IGl0LiBMZXQgbWUgc2VlLi4uIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYEtWTWAgYW5kIGBLVk1fQU1EX1NFVmAuIEhtbSwgYnV0IHdhaXQgYSBzZWNvbmQuIEkgdGhpbmsgYEtWTV9TV19QUk9URUNURURfVk1gIGNvdWxkIGFjdHVhbGx5IGJlIGluY3JlZGlibHkgdXNlZnVsIGZvciB0ZXN0aW5nIGBndWVzdF9tZW1mZGAgb24geDg2IGFyY2hpdGVjdHVyZXMsIGV2ZW4gd2l0aG91dCBTRVYgb3IgVERYLiBUaGF0IHdvdWxkIG9wZW4gdXAgYSB3aG9sZSBuZXcgYXZlbnVlIGZvciBleHBlcmltZW50YXRpb24gYW5kIHZhbGlkYXRpb24uCgpSaWdodCwgc28gbGV0JiMzOTtzIGFkZCBgS1ZNX1NXX1BST1RFQ1RFRF9WTWAgdG8gdGhlIGBFbmFibGVDb25maWdzYCBsaXN0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYWN0dWFsbHkgYSB2YWxpZCBjb25maWcsIHRob3VnaC4gR290dGEgZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyBhIHJlY29nbml6ZWQgYW5kIHN1cHBvcnRlZCBvcHRpb24gYmVmb3JlIEkgZ2V0IHRvbyBjYXJyaWVkIGF3YXkuIEkgZG9uJiMzOTt0IHdhbnQgdG8gY2hhc2UgYSBkZWFkIGVuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9Njk9Y29uZmlnIEtWTV9XRVJST1Jcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NTQ0CgkJCQkJCQlvdXRwdXQ6IDE5NgoJCQkJCQkJdGhvdWdodHM6IDE0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLVk0gUGF0Y2gqKgoKT2theSwgeWVzLCBJJiMzOTt2ZSBnb3QgaXQuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UuIFNvLCB0aGUga2V5IGhlcmUgaXMgdGhlc2UgRW5hYmxlQ29uZmlnczogYEtWTWAsIGBLVk1fQU1EX1NFVmAsIGFuZCBgS1ZNX1NXX1BST1RFQ1RFRF9WTWAuIFRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IGFsdGVycyBob3cgYGt2bV9nbWVtX2dldF9wZm5gIGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBkaXRjaGluZyB0aGUgYHN0cnVjdCBwYWdlICoqcGFnZWAgYXJndW1lbnQgYW5kLCBjcnVjaWFsbHksIGl0JiMzOTtzIGRyb3BwaW5nIHRoZSBmb2xpbyByZWZlcmVuY2UgcHJpb3IgdG8gcmV0dXJuaW5nLiBJIGNhbiBpbW1lZGlhdGVseSBzZWUgdGhlIGltcGxpY2F0aW9ucy4KClRoaXMgYWZmZWN0cyBob3cgS1ZNIG1hbmFnZXMgbWVtb3J5IGJhY2tpbmcgc3BlY2lmaWNhbGx5IGZvciBgZ3Vlc3RfbWVtZmRgLiBBbmQgd2UgYWxsIGtub3cgYGd1ZXN0X21lbWZkYCBpcyBmb3VuZGF0aW9uYWwgZm9yIGNvbmZpZGVudGlhbCBjb21wdXRpbmcuIFdlJiMzOTtyZSB0YWxraW5nIFNFVi1TTlAsIFREWCwgYW5kIEFSTSBDQ0Eg4oCTIGFsbCBvZiB0aGUgYmlnIHBsYXllcnMuIFRoZSBjaGFuZ2VzIGFyZSB0cmlnZ2VyZWQgdGhyb3VnaCBLVk0gaW9jdGxzIGFuZCBwYWdlIGZhdWx0cyB3aGVuIHV0aWxpemluZyBgZ3Vlc3RfbWVtZmRgLiBJIG5lZWQgdG8gZW5zdXJlIHRoaXMgaXMgaGFuZGxlZCBjb3JyZWN0bHkuIExldCYjMzk7cyBjYWxsIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9BTURfU0VWJiMzNDssCiAgICAmIzM0O0tWTV9TV19QUk9URUNURURfVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fZ21lbV9nZXRfcGZuJiMzNDssCiAgICAmIzM0O3Nldl9oYW5kbGVfcm1wX2ZhdWx0JiMzNDssCiAgICAmIzM0O3Nldl9zbnBfcmVsb2FkX3Ztc2EmIzM0OywKICAgICYjMzQ7a3ZtX2hhbmRsZV92bmNyX2Fib3J0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIHNpZ25hdHVyZSBhbmQgYmVoYXZpb3Igb2YgYGt2bV9nbWVtX2dldF9wZm5gIGJ5IHJlbW92aW5nIHRoZSBgc3RydWN0IHBhZ2UgKipwYWdlYCBhcmd1bWVudCBhbmQgZHJvcHBpbmcgdGhlIGZvbGlvIHJlZmVyZW5jZSBiZWZvcmUgcmV0dXJuaW5nLiBUaGlzIGFmZmVjdHMgaG93IEtWTSBoYW5kbGVzIG1lbW9yeSBiYWNraW5nIGZvciBndWVzdF9tZW1mZCwgd2hpY2ggaXMgYSBjb3JlIGZlYXR1cmUgZm9yIGNvbmZpZGVudGlhbCBjb21wdXRpbmcgKFNFVi1TTlAsIFREWCwgQVJNIENDQSkuIFRoZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIHBhZ2UgZmF1bHRzIHdoZW4gdXNpbmcgZ3Vlc3RfbWVtZmQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EX1NFViYjMzQ7LAogICAgJiMzNDtLVk1fU1dfUFJPVEVDVEVEX1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2dtZW1fZ2V0X3BmbiYjMzQ7LAogICAgJiMzNDtzZXZfaGFuZGxlX3JtcF9mYXVsdCYjMzQ7LAogICAgJiMzNDtzZXZfc25wX3JlbG9hZF92bXNhJiMzNDssCiAgICAmIzM0O2t2bV9oYW5kbGVfdm5jcl9hYm9ydCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSBzaWduYXR1cmUgYW5kIGJlaGF2aW9yIG9mIGBrdm1fZ21lbV9nZXRfcGZuYCBieSByZW1vdmluZyB0aGUgYHN0cnVjdCBwYWdlICoqcGFnZWAgYXJndW1lbnQgYW5kIGRyb3BwaW5nIHRoZSBmb2xpbyByZWZlcmVuY2UgYmVmb3JlIHJldHVybmluZy4gVGhpcyBhZmZlY3RzIGhvdyBLVk0gaGFuZGxlcyBtZW1vcnkgYmFja2luZyBmb3IgZ3Vlc3RfbWVtZmQsIHdoaWNoIGlzIGEgY29yZSBmZWF0dXJlIGZvciBjb25maWRlbnRpYWwgY29tcHV0aW5nIChTRVYtU05QLCBURFgsIEFSTSBDQ0EpLiBUaGUgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBwYWdlIGZhdWx0cyB3aGVuIHVzaW5nIGd1ZXN0X21lbWZkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwOToyMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjIxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBga3ZtX2dtZW1fZ2V0X3BmbigpYCB0byByZW1vdmUgdGhlIGBzdHJ1Y3QgcGFnZSAqKnBhZ2VgIGFyZ3VtZW50IGFuZCBkcm9wcyB0aGUgYXNzb2NpYXRlZCBwYWdlIHJlZmVyZW5jZSBjb3VudGluZyAoYGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZWAsIGBrdm1fcmVsZWFzZV9wYWdlX2NsZWFuYCwgZXRjLikgYWNyb3NzIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMgKGFybTY0LCB4ODYpLiBUaGlzIGlzIGEgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHJlZmNvdW50aW5nIGNoYW5nZS4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBhbmQgbm8gaW5mby1sZWFrcy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSB3b3VsZCBsaWtlbHkgYmUgdXNlLWFmdGVyLWZyZWUsIG1lbW9yeSBsZWFrcywgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDAwZmNlYWU0MTBjMDU0MTA1ZWU2ZTk2YTM3YjQxNjYxZTNlMmExYmYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAyNiAwOToxOTo0MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL21tdS5jIGIvYXJjaC9hcm02NC9rdm0vbW11LmMKaW5kZXggOWJhODY0NTBmZTRhZi4uZDU3ZjgxODFmMWI3ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vbW11LmMKQEAgLTE2MTMsNyAmIzQzOzE2MTMsNiBAQCBzdGF0aWMgaW50IGdtZW1fYWJvcnQoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKQogCWVudW0ga3ZtX3BndGFibGVfcHJvdCBwcm90ID0gS1ZNX1BHVEFCTEVfUFJPVF9SOwogCXN0cnVjdCBrdm1fcGd0YWJsZSAqcGd0ID0gczJmZC0mZ3Q7dmNwdS0mZ3Q7YXJjaC5od19tbXUtJmd0O3BndDsKIAl1bnNpZ25lZCBsb25nIG1tdV9zZXE7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7CiAJc3RydWN0IGt2bSAqa3ZtID0gczJmZC0mZ3Q7dmNwdS0mZ3Q7a3ZtOwogCXZvaWQgKm1lbWNhY2hlID0gTlVMTDsKIAlrdm1fcGZuX3QgcGZuOwpAQCAtMTY0MSw3ICYjNDM7MTY0MCw3IEBAIHN0YXRpYyBpbnQgZ21lbV9hYm9ydChjb25zdCBzdHJ1Y3Qga3ZtX3MyX2ZhdWx0X2Rlc2MgKnMyZmQpCiAJLyogUGFpcnMgd2l0aCB0aGUgc21wX3dtYigpIGluIGt2bV9tbXVfaW52YWxpZGF0ZV9lbmQoKS4gKi8KIAlzbXBfcm1iKCk7CiAKLQlyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKGt2bSwgczJmZC0mZ3Q7bWVtc2xvdCwgZ2ZuLCAmYW1wO3BmbiwgJmFtcDtwYWdlLCBOVUxMKTsKJiM0MzsJcmV0ID0ga3ZtX2dtZW1fZ2V0X3Bmbihrdm0sIHMyZmQtJmd0O21lbXNsb3QsIGdmbiwgJmFtcDtwZm4sIE5VTEwpOwogCWlmIChyZXQpIHsKIAkJa3ZtX3ByZXBhcmVfbWVtb3J5X2ZhdWx0X2V4aXQoczJmZC0mZ3Q7dmNwdSwgczJmZC0mZ3Q7ZmF1bHRfaXBhLCBQQUdFX1NJWkUsCiAJCQkJCSAgICAgIHdyaXRlX2ZhdWx0LCBleGVjX2ZhdWx0LCBmYWxzZSk7CkBAIC0xNjgxLDcgJiM0MzsxNjgwLDYgQEAgc3RhdGljIGludCBnbWVtX2Fib3J0KGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZCkKIAl9CiAKIG91dF91bmxvY2s6Ci0Ja3ZtX3JlbGVhc2VfZmF1bHRpbl9wYWdlKGt2bSwgcGFnZSwgISFyZXQsIHByb3QgJmFtcDsgS1ZNX1BHVEFCTEVfUFJPVF9XKTsKIAlrdm1fZmF1bHRfdW5sb2NrKGt2bSk7CiAKIAlpZiAoKHByb3QgJmFtcDsgS1ZNX1BHVEFCTEVfUFJPVF9XKSAmYW1wOyZhbXA7ICFyZXQpCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYyBiL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jCmluZGV4IDE3MTIzZjBiNmRhYmEuLmRkNjI4NDBkMzY3NDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jCkBAIC0xNDE1LDcgJiM0MzsxNDE1LDcgQEAgc3RhdGljIGludCBrdm1fdHJhbnNsYXRlX3ZuY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sICppc19nbWVtKQogCWJvb2wgd3JpdGVfZmF1bHQsIHdyaXRhYmxlOwogCXVuc2lnbmVkIGxvbmcgbW11X3NlcTsKIAlzdHJ1Y3Qgdm5jcl90bGIgKnZ0OwotCXN0cnVjdCBwYWdlICpwYWdlOwomIzQzOwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7CiAJdTY0IHZhLCBwZm4sIGdmbjsKIAlpbnQgcmV0OwogCkBAIC0xNDcxLDcgJiM0MzsxNDcxLDcgQEAgc3RhdGljIGludCBrdm1fdHJhbnNsYXRlX3ZuY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sICppc19nbWVtKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KIAl9IGVsc2UgewotCQlyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKHZjcHUtJmd0O2t2bSwgbWVtc2xvdCwgZ2ZuLCAmYW1wO3BmbiwgJmFtcDtwYWdlLCBOVUxMKTsKJiM0MzsJCXJldCA9IGt2bV9nbWVtX2dldF9wZm4odmNwdS0mZ3Q7a3ZtLCBtZW1zbG90LCBnZm4sICZhbXA7cGZuLCBOVUxMKTsKIAkJaWYgKHJldCkgewogCQkJa3ZtX3ByZXBhcmVfbWVtb3J5X2ZhdWx0X2V4aXQodmNwdSwgdnQtJmd0O3dyLnBhLCBQQUdFX1NJWkUsCiAJCQkJCSAgICAgIHdyaXRlX2ZhdWx0LCBmYWxzZSwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmMKaW5kZXggMDY0ZWNjMzNiOTI2Ny4uOTQ3YzljZDg0MzQ1MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jCkBAIC00NjI4LDcgJiM0Mzs0NjI4LDcgQEAgc3RhdGljIGludCBrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCX0KIAogCXIgPSBrdm1fZ21lbV9nZXRfcGZuKHZjcHUtJmd0O2t2bSwgZmF1bHQtJmd0O3Nsb3QsIGZhdWx0LSZndDtnZm4sICZhbXA7ZmF1bHQtJmd0O3BmbiwKLQkJCSAgICAgJmFtcDtmYXVsdC0mZ3Q7cmVmY291bnRlZF9wYWdlLCAmYW1wO21heF9vcmRlcik7CiYjNDM7CQkJICAgICAmYW1wO21heF9vcmRlcik7CiAJaWYgKHIpIHsKIAkJa3ZtX21tdV9wcmVwYXJlX21lbW9yeV9mYXVsdF9leGl0KHZjcHUsIGZhdWx0KTsKIAkJcmV0dXJuIHI7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuYwppbmRleCA1NzA1NzIzZjFmNDEyLi4wYTg4N2Y4ZTA1ZDNhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMKQEAgLTQwMzIsNyAmIzQzOzQwMzIsNiBAQCBzdGF0aWMgdm9pZCBfX3Nldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEpCiAJc3RydWN0IGt2bSAqa3ZtID0gdmNwdS0mZ3Q7a3ZtOwogCWdmbl90IGdmbiA9IGdwYV90b19nZm4oZ3BhKTsKIAl1bnNpZ25lZCBsb25nIG1tdV9zZXE7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7CiAJa3ZtX3Bmbl90IHBmbjsKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtzdm0tJmd0O3Nldl9lcy5zbnBfdm1zYV9tdXRleCk7CkBAIC00MDc2LDcgJiM0Mzs0MDc1LDcgQEAgc3RhdGljIHZvaWQgX19zZXZfc25wX3JlbG9hZF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhKQogCSAqIFRoZSBuZXcgVk1TQSB3aWxsIGJlIHByaXZhdGUgbWVtb3J5IGd1ZXN0IG1lbW9yeSwgc28gcmV0cmlldmUgdGhlCiAJICogUEZOIGZyb20gdGhlIGdtZW0gYmFja2VuZC4KIAkgKi8KLQlpZiAoa3ZtX2dtZW1fZ2V0X3Bmbih2Y3B1LSZndDtrdm0sIHNsb3QsIGdmbiwgJmFtcDtwZm4sICZhbXA7cGFnZSwgTlVMTCkpCiYjNDM7CWlmIChrdm1fZ21lbV9nZXRfcGZuKHZjcHUtJmd0O2t2bSwgc2xvdCwgZ2ZuLCAmYW1wO3BmbiwgTlVMTCkpCiAJCXJldHVybjsKIAogCXJlYWRfbG9jaygmYW1wO2t2bS0mZ3Q7bW11X2xvY2spOwpAQCAtNDA5Miw4ICYjNDM7NDA5MSw2IEBAIHN0YXRpYyB2b2lkIF9fc2V2X3NucF9yZWxvYWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSkKIAllbHNlCiAJCXN2bS0mZ3Q7dm1jYi0mZ3Q7Y29udHJvbC52bXNhX3BhID0gcGZuX3RvX2hwYShwZm4pOwogCXJlYWRfdW5sb2NrKCZhbXA7a3ZtLSZndDttbXVfbG9jayk7Ci0KLQlrdm1fcmVsZWFzZV9wYWdlX2NsZWFuKHBhZ2UpOwogfQogCiAvKgpAQCAtNTAxOSw3ICYjNDM7NTAxNiw3IEBAIHZvaWQgc2V2X2hhbmRsZV9ybXBfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHU2NCBlcnJvcl9jb2RlKQogCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7CiAJc3RydWN0IGt2bSAqa3ZtID0gdmNwdS0mZ3Q7a3ZtOwogCWludCBvcmRlciwgcm1wX2xldmVsLCByZXQ7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbW11X3NlcTsKIAlib29sIGFzc2lnbmVkOwogCWt2bV9wZm5fdCBwZm47CiAJZ2ZuX3QgZ2ZuOwpAQCAtNTA0Niw3ICYjNDM7NTA0MywxMCBAQCB2b2lkIHNldl9oYW5kbGVfcm1wX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCB1NjQgZXJyb3JfY29kZSkKIAkJcmV0dXJuOwogCX0KIAotCXJldCA9IGt2bV9nbWVtX2dldF9wZm4oa3ZtLCBzbG90LCBnZm4sICZhbXA7cGZuLCAmYW1wO3BhZ2UsICZhbXA7b3JkZXIpOwomIzQzOwltbXVfc2VxID0ga3ZtLSZndDttbXVfaW52YWxpZGF0ZV9zZXE7CiYjNDM7CXNtcF9ybWIoKTsKJiM0MzsKJiM0MzsJcmV0ID0ga3ZtX2dtZW1fZ2V0X3Bmbihrdm0sIHNsb3QsIGdmbiwgJmFtcDtwZm4sICZhbXA7b3JkZXIpOwogCWlmIChyZXQpIHsKIAkJcHJfd2Fybl9yYXRlbGltaXRlZCgmIzM0O1NFVjogVW5leHBlY3RlZCBSTVAgZmF1bHQsIG5vIGJhY2tpbmcgcGFnZSBmb3IgcHJpdmF0ZSBHUEEgMHglbGx4XG4mIzM0OywKIAkJCQkgICAgZ3BhKTsKQEAgLTUwNTUsOSAmIzQzOzUwNTUsMTMgQEAgdm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpCiAKIAlyZXQgPSBzbnBfbG9va3VwX3JtcGVudHJ5KHBmbiwgJmFtcDthc3NpZ25lZCwgJmFtcDtybXBfbGV2ZWwpOwogCWlmIChyZXQgfHwgIWFzc2lnbmVkKSB7Ci0JCXByX3dhcm5fcmF0ZWxpbWl0ZWQoJiMzNDtTRVY6IFVuZXhwZWN0ZWQgUk1QIGZhdWx0LCBubyBhc3NpZ25lZCBSTVAgZW50cnkgZm91bmQgZm9yIEdQQSAweCVsbHggUEZOIDB4JWxseCBlcnJvciAlZFxuJiMzNDssCi0JCQkJICAgIGdwYSwgcGZuLCByZXQpOwotCQlnb3RvIG91dF9ub190cmFjZTsKJiM0MzsJCWd1YXJkKHJlYWRfbG9jaykoJmFtcDtrdm0tJmd0O21tdV9sb2NrKTsKJiM0MzsKJiM0MzsJCWlmICghbW11X2ludmFsaWRhdGVfcmV0cnlfZ2ZuKGt2bSwgbW11X3NlcSwgZ2ZuKSkKJiM0MzsJCQlwcl93YXJuX3JhdGVsaW1pdGVkKCYjMzQ7U0VWOiBVbmV4cGVjdGVkIFJNUCBmYXVsdCwgbm8gYXNzaWduZWQgUk1QIGVudHJ5IGZvdW5kIGZvciBHUEEgMHglbGx4IFBGTiAweCVsbHggZXJyb3IgJWRcbiYjMzQ7LAomIzQzOwkJCQkJICAgIGdwYSwgcGZuLCByZXQpOwomIzQzOwomIzQzOwkJcmV0dXJuOwogCX0KIAogCS8qCkBAIC01MDg1LDI2ICYjNDM7NTA4OSwzMSBAQCB2b2lkIHNldl9oYW5kbGVfcm1wX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCB1NjQgZXJyb3JfY29kZSkKIAlpZiAocm1wX2xldmVsID09IFBHX0xFVkVMXzRLKQogCQlnb3RvIG91dDsKIAotCXJldCA9IHNucF9ybXB0YWJsZV9wc21hc2gocGZuKTsKLQlpZiAocmV0KSB7Ci0JCS8qCi0JCSAqIExvb2sgaXQgdXAgYWdhaW4uIElmIGl0JiMzOTtzIDRLIG5vdyB0aGVuIHRoZSBQU01BU0ggbWF5IGhhdmUKLQkJICogcmFjZWQgd2l0aCBhbm90aGVyIHByb2Nlc3MgYW5kIHRoZSBpc3N1ZSBoYXMgYWxyZWFkeSByZXNvbHZlZAotCQkgKiBpdHNlbGYuCi0JCSAqLwotCQlpZiAoIXNucF9sb29rdXBfcm1wZW50cnkocGZuLCAmYW1wO2Fzc2lnbmVkLCAmYW1wO3JtcF9sZXZlbCkgJmFtcDsmYW1wOwotCQkgICAgYXNzaWduZWQgJmFtcDsmYW1wOyBybXBfbGV2ZWwgPT0gUEdfTEVWRUxfNEspCiYjNDM7CXNjb3BlZF9ndWFyZChyZWFkX2xvY2ssICZhbXA7a3ZtLSZndDttbXVfbG9jaykgewomIzQzOwkJaWYgKG1tdV9pbnZhbGlkYXRlX3JldHJ5X2dmbihrdm0sIG1tdV9zZXEsIGdmbikpCiAJCQlnb3RvIG91dDsKIAotCQlwcl93YXJuX3JhdGVsaW1pdGVkKCYjMzQ7U0VWOiBVbmFibGUgdG8gc3BsaXQgUk1QIGVudHJ5IGZvciBHUEEgMHglbGx4IFBGTiAweCVsbHggcmV0ICVkXG4mIzM0OywKLQkJCQkgICAgZ3BhLCBwZm4sIHJldCk7CiYjNDM7CQlyZXQgPSBzbnBfcm1wdGFibGVfcHNtYXNoKHBmbik7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBMb29rIGl0IHVwIGFnYWluLiBJZiBpdCYjMzk7cyA0SyBub3cgdGhlbiB0aGUgUFNNQVNIIG1heQomIzQzOwkJCSAqIGhhdmUgcmFjZWQgd2l0aCBhbm90aGVyIHByb2Nlc3MgYW5kIHRoZSBpc3N1ZSBoYXMKJiM0MzsJCQkgKiBhbHJlYWR5IHJlc29sdmVkIGl0c2VsZi4gSWYgaXQmIzM5O3Mgbm90IGFzc2lnbmVkLCB0aGVuCiYjNDM7CQkJICogdGhpcyBtdXN0IGhhdmUgcmFjZWQgd2l0aCBhbm90aGVyIHByb2Nlc3MgdGhhdCBtYWRlCiYjNDM7CQkJICogdGhpcyBwYWdlIHNoYXJlZC4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAoIXNucF9sb29rdXBfcm1wZW50cnkocGZuLCAmYW1wO2Fzc2lnbmVkLCAmYW1wO3JtcF9sZXZlbCkgJmFtcDsmYW1wOwomIzQzOwkJCSAgICAoKGFzc2lnbmVkICZhbXA7JmFtcDsgcm1wX2xldmVsID09IFBHX0xFVkVMXzRLKSB8fCAhYXNzaWduZWQpKQomIzQzOwkJCQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJCQlwcl93YXJuX3JhdGVsaW1pdGVkKCYjMzQ7U0VWOiBVbmFibGUgdG8gc3BsaXQgUk1QIGVudHJ5IGZvciBHUEEgMHglbGx4IFBGTiAweCVsbHggcmV0ICVkXG4mIzM0OywKJiM0MzsJCQkJCSAgICBncGEsIHBmbiwgcmV0KTsKJiM0MzsJCX0KIAl9CiAKIAlrdm1femFwX2dmbl9yYW5nZShrdm0sIGdmbiwgZ2ZuICYjNDM7IFBUUlNfUEVSX1BNRCk7CiBvdXQ6CiAJdHJhY2Vfa3ZtX3JtcF9mYXVsdCh2Y3B1LCBncGEsIHBmbiwgZXJyb3JfY29kZSwgcm1wX2xldmVsLCByZXQpOwotb3V0X25vX3RyYWNlOgotCWt2bV9yZWxlYXNlX3BhZ2VfdW51c2VkKHBhZ2UpOwogfQogCiBzdGF0aWMgYm9vbCBpc19wZm5fcmFuZ2Vfc2hhcmVkKGt2bV9wZm5fdCBzdGFydCwga3ZtX3Bmbl90IGVuZCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAppbmRleCAwM2JmYzkyODY0YjZlLi41MDI0NjUxMTljYTBjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCkBAIC0yNTg2LDEzICYjNDM7MjU4NiwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wga3ZtX21lbV9pc19wcml2YXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKQogCiAjaWZkZWYgQ09ORklHX0tWTV9HVUVTVF9NRU1GRAogaW50IGt2bV9nbWVtX2dldF9wZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LAotCQkgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIHN0cnVjdCBwYWdlICoqcGFnZSwKLQkJICAgICBpbnQgKm1heF9vcmRlcik7CiYjNDM7CQkgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIGludCAqbWF4X29yZGVyKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBrdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBrdm0gKmt2bSwKIAkJCQkgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LCBnZm5fdCBnZm4sCi0JCQkJICAga3ZtX3Bmbl90ICpwZm4sIHN0cnVjdCBwYWdlICoqcGFnZSwKLQkJCQkgICBpbnQgKm1heF9vcmRlcikKJiM0MzsJCQkJICAga3ZtX3Bmbl90ICpwZm4sIGludCAqbWF4X29yZGVyKQogewogCUtWTV9CVUdfT04oMSwga3ZtKTsKIAlyZXR1cm4gLUVJTzsKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jCmluZGV4IGI1OTY0ODZkMTg0Y2EuLjU4OTc2MjE0MGMzZWYgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMKJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYwpAQCAtNzUxLDggJiM0Mzs3NTEsNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX2t2bV9nbWVtX2dldF9wZm4oc3RydWN0IGZpbGUgKmZpbGUsCiB9CiAKIGludCBrdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwKLQkJICAgICBnZm5fdCBnZm4sIGt2bV9wZm5fdCAqcGZuLCBzdHJ1Y3QgcGFnZSAqKnBhZ2UsCi0JCSAgICAgaW50ICptYXhfb3JkZXIpCiYjNDM7CQkgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIGludCAqbWF4X29yZGVyKQogewogCXBnb2ZmX3QgaW5kZXggPSBrdm1fZ21lbV9nZXRfaW5kZXgoc2xvdCwgZ2ZuKTsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvOwpAQCAtNzgwLDExICYjNDM7Nzc5LDcgQEAgaW50IGt2bV9nbWVtX2dldF9wZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LAogI2VuZGlmCiAKIAlmb2xpb191bmxvY2soZm9saW8pOwotCi0JaWYgKCFyKQotCQkqcGFnZSA9IGZvbGlvX2ZpbGVfcGFnZShmb2xpbywgaW5kZXgpOwotCWVsc2UKLQkJZm9saW9fcHV0KGZvbGlvKTsKJiM0MzsJZm9saW9fcHV0KGZvbGlvKTsKIAogCXJldHVybiByOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDk6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU4OQoJCQkJCQkJb3V0cHV0OiAxNzkKCQkJCQkJCXRob3VnaHRzOiAxMjcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmFjdG9yaW5nIEtWTSBHdWVzdCBNZW1vcnkgUGFnZSBIYW5kbGluZyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgcmVmYWN0b3JpbmcgaG93IEtWTSBtYW5hZ2VzIGd1ZXN0IG1lbW9yeSBwYWdlcy4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGBrdm1fZ21lbV9nZXRfcGZuKClgIGlzIHRoZSB0YXJnZXQsIHNwZWNpZmljYWxseSB0aGUgcmVtb3ZhbCBvZiB0aGUgYHN0cnVjdCBwYWdlICoqcGFnZWAgYXJndW1lbnQuIFRoaXMgaW1wYWN0cyBzZXZlcmFsIGFyY2hpdGVjdHVyZXMgKGFybTY0LCB4ODYpLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGlkZWEgaXMgdG8gY2hhbmdlIGhvdyB0aGUgcGFnZSByZWZlcmVuY2UgaXMgaGFuZGxlZCwgbW92aW5nIGF3YXkgZnJvbSByZXR1cm5pbmcgaXQgZGlyZWN0bHkgZnJvbSBga3ZtX2dtZW1fZ2V0X3BmbigpYCBhbmQgaW5zdGVhZCB1c2luZyBgZm9saW9fcHV0KGZvbGlvKTtgIHdpdGhpbiB0aGUgZnVuY3Rpb24gaXRzZWxmLiBUaGlzIGxpa2VseSBtZWFucyB0aGUgY2FsbGluZyBmdW5jdGlvbnMgbm8gbG9uZ2VyIG5lZWQgdG8gZXhwbGljaXRseSByZWxlYXNlIHRoZSBwYWdlLgoKTXkgcHJpbWFyeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBXaXRoIHRoaXMga2luZCBvZiBjaGFuZ2UsIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHVuaW50ZW5kZWQgaW5mb3JtYXRpb24gbGVha3Mgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIGFzIGEgcmVzdWx0IG9mIHRoZSByZWZhY3RvcmluZy4gTG9va2luZyBhdCB0aGUgY2hhbmdlcywgdGhlcmUgYXJlbiYjMzk7dCBhbnkgbmV3IHN0cnVjdHVyZXMgYmVpbmcgc2VudCB0byB1c2Vyc3BhY2UuIFRoZXJlJiMzOTtzIG5vIGluZGljYXRpb24gb2YgYW55IG5ldyBhbGxvY2F0aW9ucyB0aGF0IG1pZ2h0IGludHJvZHVjZSB1bmluaXRpYWxpemVkIGRhdGEuIFRoaXMgaXMgc3F1YXJlbHkgYSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcmVmY291bnRpbmcgY2hhbmdlLiBUaGUgbW9zdCBsaWtlbHkgcmlza3MgYXJlIHVzZS1hZnRlci1mcmVlIG9yIHJlZmNvdW50IGJ1Z3MsIHNvIHRoaXMgaXMgd2hlcmUgSSBuZWVkIHRvIGZvY3VzLiBJJiMzOTttIHJlbHlpbmcgb24gS0FTQU4gdG8gY2F0Y2ggdGhlc2UuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBjb2RlIHJldmlldyBvZiB0aGUgZGlmZi4gVGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBjaGFuZ2VzIGFyZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiB0aGUgYHBhZ2VgIGFyZ3VtZW50IGlzIGdvbmUuIE9rYXksIEkgc2VlIHdoZXJlIHRoaXMgYHBhZ2VgIGFyZ3VtZW50IHdhcyBwcmV2aW91c2x5IGJlaW5nIHBvcHVsYXRlZCwgYGZvbGlvX2ZpbGVfcGFnZShmb2xpbywgaW5kZXgpYC4gTm93LCB0aGF0IGNhbGwgc2l0ZSBpcyByZXBsYWNlZCB3aXRoIHRoZSBgZm9saW9fcHV0KGZvbGlvKWAgY2FsbC4gVGhlIGNvcnJlc3BvbmRpbmcgYGt2bV9yZWxlYXNlX3BhZ2VfKmAgY2FsbHMgYXJlIGdvbmUsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNlZSB0aGVzZSBjaGFuZ2VzIGluIGBhcmNoL2FybTY0L2t2bS9tbXUuY2AsIGBhcmNoL2FybTY0L2t2bS9uZXN0ZWQuY2AgYW5kIGluIHZhcmlvdXMgeDg2IGZpbGVzIHN1Y2ggYXMgYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLCBhbmQgYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgLgoKQSBrZXkgdGhpbmcgaXMgdGhhdCBpbiB4ODYsIHRoZXJlIHdhcyBhIGBmYXVsdC0mZ3Q7cmVmY291bnRlZF9wYWdlYCB2YXJpYWJsZSB0aGF0IHdhcyBiZWluZyBwYXNzZWQuIEJ1dCBub3cgdGhlIGZ1bmN0aW9uIGRvZXNuJiMzOTt0IHJldHVybiB0aGUgcGFnZSwgc28gaXMgYGZhdWx0LSZndDtyZWZjb3VudGVkX3BhZ2VgIHByb3Blcmx5IGhhbmRsZWQ/IElmIGl0JiMzOTtzIE5VTEwsIHRoZW4gdGhlIGBrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2VgIHdpbGwganVzdCBkbyBub3RoaW5nLCBzbyB0aGlzIGxvb2tzIHNhZmUsIGV2ZW4gaWYgaXQgbGVhZHMgdG8gYW4gaXNzdWUgaW4gdGVybXMgb2YgYSBsZWFrLiAgSXQgc2hvdWxkIGJlIGluaXRpYWxpemVkIHRvIE5VTEwgaW4gYGt2bV9tbXVfZG9fcGFnZV9mYXVsdGAuIE5vIGRlZXAgZGl2ZSBpcyBuZWNlc3NhcnkgaGVyZSwgZXZlbiBpZiBpdCBpbnRyb2R1Y2VzIGEgYnVnLCBpdCYjMzk7cyBqdXN0IGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIG1lbW9yeSBsZWFrIGFuZCBLQVNBTiBzaG91bGQgaGFuZGxlLiBUaGUgc2FtZSB0aGluZyBmb3IgdGhlIHJlc3Qgb2YgdGhlIGNhc2VzIHdoZXJlIGBrdm1fcmVsZWFzZV9wYWdlXypgIGNhbGxzIHdlcmUgcmVtb3ZlZC4KCkZpbmFsbHksIGxvb2tpbmcgYXQgYHZpcnQva3ZtL2d1ZXN0X21lbWZkLmNgLCBpdCBjb25maXJtcyB0aGUgcmVmYWN0b3JpbmcgaXMgYWJvdXQgaG93IGBndWVzdF9tZW1mZGAgbWFuYWdlcyBwYWdlIHJlZmVyZW5jZXMuIEluc3RlYWQgb2YgY2hlY2tpbmcgaWYgYHJgIGFuZCBhc3NpZ25pbmcgdGhlIHBhZ2UsIHRoZSBwYXRjaCBjYWxscyBgZm9saW9fcHV0KGZvbGlvKTtgIGRpcmVjdGx5LgoKT3ZlcmFsbCwgdGhpcyBpcyBhIGNsZWFuIHJlZmFjdG9yaW5nLCBzcGVjaWZpY2FsbHkgaW4gcGFnZSByZWZlcmVuY2UgY291bnRpbmcgZm9yIGd1ZXN0IG1lbW9yeSwgZXNwZWNpYWxseSBmb3IgYGd1ZXN0X21lbWZkYC4gVGhlcmUmIzM5O3Mgbm8gZXZpZGVuY2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgb3IgdXNhZ2UgZnJvbSB0aGlzIHBhdGNoLiBCYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJJiMzOTttIGNvbmZpZGVudCBLQVNBTiBhbmQga21lbWxlYWsgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IGlzc3VlcyByZWxhdGVkIHRvIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBsZWFrcy4gU28sIEkgd2lsbCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgIGFuZCBwcm92aWRlIHRoZSByZWFzb25pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA5OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBga3ZtX2dtZW1fZ2V0X3BmbigpYCB0byByZW1vdmUgdGhlIGBzdHJ1Y3QgcGFnZSAqKnBhZ2VgIGFyZ3VtZW50IGFuZCBkcm9wcyB0aGUgYXNzb2NpYXRlZCBwYWdlIHJlZmVyZW5jZSBjb3VudGluZyAoYGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZWAsIGBrdm1fcmVsZWFzZV9wYWdlX2NsZWFuYCwgZXRjLikgYWNyb3NzIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMgKGFybTY0LCB4ODYpLiBUaGlzIGlzIGEgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHJlZmNvdW50aW5nIGNoYW5nZS4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBhbmQgbm8gaW5mby1sZWFrcy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSB3b3VsZCBsaWtlbHkgYmUgdXNlLWFmdGVyLWZyZWUsIG1lbW9yeSBsZWFrcywgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgYGt2bV9nbWVtX2dldF9wZm4oKWAgdG8gcmVtb3ZlIHRoZSBgc3RydWN0IHBhZ2UgKipwYWdlYCBhcmd1bWVudCBhbmQgZHJvcHMgdGhlIGFzc29jaWF0ZWQgcGFnZSByZWZlcmVuY2UgY291bnRpbmcgKGBrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2VgLCBga3ZtX3JlbGVhc2VfcGFnZV9jbGVhbmAsIGV0Yy4pIGFjcm9zcyBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzIChhcm02NCwgeDg2KS4gVGhpcyBpcyBhIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCByZWZjb3VudGluZyBjaGFuZ2UuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgYW5kIG5vIGluZm8tbGVha3MuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2Ugd291bGQgbGlrZWx5IGJlIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOToxOTo0My41OTY1NDk2MDRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA1MDA2OTU2MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fQU1EX1NFVlwiLFxuICAgIFwiS1ZNX1NXX1BST1RFQ1RFRF9WTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9nbWVtX2dldF9wZm5cIixcbiAgICBcInNldl9oYW5kbGVfcm1wX2ZhdWx0XCIsXG4gICAgXCJzZXZfc25wX3JlbG9hZF92bXNhXCIsXG4gICAgXCJrdm1faGFuZGxlX3ZuY3JfYWJvcnRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBga3ZtX2dtZW1fZ2V0X3BmbigpYCB0byByZW1vdmUgdGhlIGBzdHJ1Y3QgcGFnZSAqKnBhZ2VgIGFyZ3VtZW50IGFuZCBkcm9wcyB0aGUgYXNzb2NpYXRlZCBwYWdlIHJlZmVyZW5jZSBjb3VudGluZyAoYGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZWAsIGBrdm1fcmVsZWFzZV9wYWdlX2NsZWFuYCwgZXRjLikgYWNyb3NzIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMgKGFybTY0LCB4ODYpLiBUaGlzIGlzIGEgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHJlZmNvdW50aW5nIGNoYW5nZS4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBhbmQgbm8gaW5mby1sZWFrcy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSB3b3VsZCBsaWtlbHkgYmUgdXNlLWFmdGVyLWZyZWUsIG1lbW9yeSBsZWFrcywgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgc2lnbmF0dXJlIGFuZCBiZWhhdmlvciBvZiBga3ZtX2dtZW1fZ2V0X3BmbmAgYnkgcmVtb3ZpbmcgdGhlIGBzdHJ1Y3QgcGFnZSAqKnBhZ2VgIGFyZ3VtZW50IGFuZCBkcm9wcGluZyB0aGUgZm9saW8gcmVmZXJlbmNlIGJlZm9yZSByZXR1cm5pbmcuIFRoaXMgYWZmZWN0cyBob3cgS1ZNIGhhbmRsZXMgbWVtb3J5IGJhY2tpbmcgZm9yIGd1ZXN0X21lbWZkLCB3aGljaCBpcyBhIGNvcmUgZmVhdHVyZSBmb3IgY29uZmlkZW50aWFsIGNvbXB1dGluZyAoU0VWLVNOUCwgVERYLCBBUk0gQ0NBKS4gVGhlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgcGFnZSBmYXVsdHMgd2hlbiB1c2luZyBndWVzdF9tZW1mZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6MTk6NDMuNTk2NTU1NjE0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTEwMTg2MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwMGZjZWFlNDEwYzA1NDEwNWVlNmU5NmEzN2I0MTY2MWUzZTJhMWJmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDI2IDA5OjE5OjQyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL21tdS5jIGIvYXJjaC9hcm02NC9rdm0vbW11LmNcXG5pbmRleCA5YmE4NjQ1MGZlNGFmLi5kNTdmODE4MWYxYjdkIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL21tdS5jXFxuKysrIGIvYXJjaC9hcm02NC9rdm0vbW11LmNcXG5AQCAtMTYxMyw3ICsxNjEzLDYgQEAgc3RhdGljIGludCBnbWVtX2Fib3J0KGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZClcXG4gXFx0ZW51bSBrdm1fcGd0YWJsZV9wcm90IHByb3QgPSBLVk1fUEdUQUJMRV9QUk9UX1I7XFxuIFxcdHN0cnVjdCBrdm1fcGd0YWJsZSAqcGd0ID0gczJmZC1cXHUwMDNldmNwdS1cXHUwMDNlYXJjaC5od19tbXUtXFx1MDAzZXBndDtcXG4gXFx0dW5zaWduZWQgbG9uZyBtbXVfc2VxO1xcbi1cXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4gXFx0c3RydWN0IGt2bSAqa3ZtID0gczJmZC1cXHUwMDNldmNwdS1cXHUwMDNla3ZtO1xcbiBcXHR2b2lkICptZW1jYWNoZSA9IE5VTEw7XFxuIFxcdGt2bV9wZm5fdCBwZm47XFxuQEAgLTE2NDEsNyArMTY0MCw3IEBAIHN0YXRpYyBpbnQgZ21lbV9hYm9ydChjb25zdCBzdHJ1Y3Qga3ZtX3MyX2ZhdWx0X2Rlc2MgKnMyZmQpXFxuIFxcdC8qIFBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpbiBrdm1fbW11X2ludmFsaWRhdGVfZW5kKCkuICovXFxuIFxcdHNtcF9ybWIoKTtcXG4gXFxuLVxcdHJldCA9IGt2bV9nbWVtX2dldF9wZm4oa3ZtLCBzMmZkLVxcdTAwM2VtZW1zbG90LCBnZm4sIFxcdTAwMjZwZm4sIFxcdTAwMjZwYWdlLCBOVUxMKTtcXG4rXFx0cmV0ID0ga3ZtX2dtZW1fZ2V0X3Bmbihrdm0sIHMyZmQtXFx1MDAzZW1lbXNsb3QsIGdmbiwgXFx1MDAyNnBmbiwgTlVMTCk7XFxuIFxcdGlmIChyZXQpIHtcXG4gXFx0XFx0a3ZtX3ByZXBhcmVfbWVtb3J5X2ZhdWx0X2V4aXQoczJmZC1cXHUwMDNldmNwdSwgczJmZC1cXHUwMDNlZmF1bHRfaXBhLCBQQUdFX1NJWkUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIHdyaXRlX2ZhdWx0LCBleGVjX2ZhdWx0LCBmYWxzZSk7XFxuQEAgLTE2ODEsNyArMTY4MCw2IEBAIHN0YXRpYyBpbnQgZ21lbV9hYm9ydChjb25zdCBzdHJ1Y3Qga3ZtX3MyX2ZhdWx0X2Rlc2MgKnMyZmQpXFxuIFxcdH1cXG4gXFxuIG91dF91bmxvY2s6XFxuLVxcdGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZShrdm0sIHBhZ2UsICEhcmV0LCBwcm90IFxcdTAwMjYgS1ZNX1BHVEFCTEVfUFJPVF9XKTtcXG4gXFx0a3ZtX2ZhdWx0X3VubG9jayhrdm0pO1xcbiBcXG4gXFx0aWYgKChwcm90IFxcdTAwMjYgS1ZNX1BHVEFCTEVfUFJPVF9XKSBcXHUwMDI2XFx1MDAyNiAhcmV0KVxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYyBiL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jXFxuaW5kZXggMTcxMjNmMGI2ZGFiYS4uZGQ2Mjg0MGQzNjc0MSAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuY1xcbisrKyBiL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jXFxuQEAgLTE0MTUsNyArMTQxNSw3IEBAIHN0YXRpYyBpbnQga3ZtX3RyYW5zbGF0ZV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCAqaXNfZ21lbSlcXG4gXFx0Ym9vbCB3cml0ZV9mYXVsdCwgd3JpdGFibGU7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbW11X3NlcTtcXG4gXFx0c3RydWN0IHZuY3JfdGxiICp2dDtcXG4tXFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuK1xcdHN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDtcXG4gXFx0dTY0IHZhLCBwZm4sIGdmbjtcXG4gXFx0aW50IHJldDtcXG4gXFxuQEAgLTE0NzEsNyArMTQ3MSw3IEBAIHN0YXRpYyBpbnQga3ZtX3RyYW5zbGF0ZV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCAqaXNfZ21lbSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcdFxcdH1cXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0cmV0ID0ga3ZtX2dtZW1fZ2V0X3Bmbih2Y3B1LVxcdTAwM2Vrdm0sIG1lbXNsb3QsIGdmbiwgXFx1MDAyNnBmbiwgXFx1MDAyNnBhZ2UsIE5VTEwpO1xcbitcXHRcXHRyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKHZjcHUtXFx1MDAzZWt2bSwgbWVtc2xvdCwgZ2ZuLCBcXHUwMDI2cGZuLCBOVUxMKTtcXG4gXFx0XFx0aWYgKHJldCkge1xcbiBcXHRcXHRcXHRrdm1fcHJlcGFyZV9tZW1vcnlfZmF1bHRfZXhpdCh2Y3B1LCB2dC1cXHUwMDNld3IucGEsIFBBR0VfU0laRSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgd3JpdGVfZmF1bHQsIGZhbHNlLCBmYWxzZSk7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXFxuaW5kZXggMDY0ZWNjMzNiOTI2Ny4uOTQ3YzljZDg0MzQ1MCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXFxuKysrIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xcbkBAIC00NjI4LDcgKzQ2MjgsNyBAQCBzdGF0aWMgaW50IGt2bV9tbXVfZmF1bHRpbl9wZm5fZ21lbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIFxcdH1cXG4gXFxuIFxcdHIgPSBrdm1fZ21lbV9nZXRfcGZuKHZjcHUtXFx1MDAzZWt2bSwgZmF1bHQtXFx1MDAzZXNsb3QsIGZhdWx0LVxcdTAwM2VnZm4sIFxcdTAwMjZmYXVsdC1cXHUwMDNlcGZuLFxcbi1cXHRcXHRcXHQgICAgIFxcdTAwMjZmYXVsdC1cXHUwMDNlcmVmY291bnRlZF9wYWdlLCBcXHUwMDI2bWF4X29yZGVyKTtcXG4rXFx0XFx0XFx0ICAgICBcXHUwMDI2bWF4X29yZGVyKTtcXG4gXFx0aWYgKHIpIHtcXG4gXFx0XFx0a3ZtX21tdV9wcmVwYXJlX21lbW9yeV9mYXVsdF9leGl0KHZjcHUsIGZhdWx0KTtcXG4gXFx0XFx0cmV0dXJuIHI7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXFxuaW5kZXggNTcwNTcyM2YxZjQxMi4uMGE4ODdmOGUwNWQzYSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xcbkBAIC00MDMyLDcgKzQwMzIsNiBAQCBzdGF0aWMgdm9pZCBfX3Nldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEpXFxuIFxcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXFx1MDAzZWt2bTtcXG4gXFx0Z2ZuX3QgZ2ZuID0gZ3BhX3RvX2dmbihncGEpO1xcbiBcXHR1bnNpZ25lZCBsb25nIG1tdV9zZXE7XFxuLVxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbiBcXHRrdm1fcGZuX3QgcGZuO1xcbiBcXG4gXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2c3ZtLVxcdTAwM2VzZXZfZXMuc25wX3Ztc2FfbXV0ZXgpO1xcbkBAIC00MDc2LDcgKzQwNzUsNyBAQCBzdGF0aWMgdm9pZCBfX3Nldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEpXFxuIFxcdCAqIFRoZSBuZXcgVk1TQSB3aWxsIGJlIHByaXZhdGUgbWVtb3J5IGd1ZXN0IG1lbW9yeSwgc28gcmV0cmlldmUgdGhlXFxuIFxcdCAqIFBGTiBmcm9tIHRoZSBnbWVtIGJhY2tlbmQuXFxuIFxcdCAqL1xcbi1cXHRpZiAoa3ZtX2dtZW1fZ2V0X3Bmbih2Y3B1LVxcdTAwM2Vrdm0sIHNsb3QsIGdmbiwgXFx1MDAyNnBmbiwgXFx1MDAyNnBhZ2UsIE5VTEwpKVxcbitcXHRpZiAoa3ZtX2dtZW1fZ2V0X3Bmbih2Y3B1LVxcdTAwM2Vrdm0sIHNsb3QsIGdmbiwgXFx1MDAyNnBmbiwgTlVMTCkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdHJlYWRfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuQEAgLTQwOTIsOCArNDA5MSw2IEBAIHN0YXRpYyB2b2lkIF9fc2V2X3NucF9yZWxvYWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSlcXG4gXFx0ZWxzZVxcbiBcXHRcXHRzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZWNvbnRyb2wudm1zYV9wYSA9IHBmbl90b19ocGEocGZuKTtcXG4gXFx0cmVhZF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbi1cXG4tXFx0a3ZtX3JlbGVhc2VfcGFnZV9jbGVhbihwYWdlKTtcXG4gfVxcbiBcXG4gLypcXG5AQCAtNTAxOSw3ICs1MDE2LDcgQEAgdm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpXFxuIFxcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7XFxuIFxcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXFx1MDAzZWt2bTtcXG4gXFx0aW50IG9yZGVyLCBybXBfbGV2ZWwsIHJldDtcXG4tXFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbW11X3NlcTtcXG4gXFx0Ym9vbCBhc3NpZ25lZDtcXG4gXFx0a3ZtX3Bmbl90IHBmbjtcXG4gXFx0Z2ZuX3QgZ2ZuO1xcbkBAIC01MDQ2LDcgKzUwNDMsMTAgQEAgdm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpXFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4tXFx0cmV0ID0ga3ZtX2dtZW1fZ2V0X3Bmbihrdm0sIHNsb3QsIGdmbiwgXFx1MDAyNnBmbiwgXFx1MDAyNnBhZ2UsIFxcdTAwMjZvcmRlcik7XFxuK1xcdG1tdV9zZXEgPSBrdm0tXFx1MDAzZW1tdV9pbnZhbGlkYXRlX3NlcTtcXG4rXFx0c21wX3JtYigpO1xcbitcXG4rXFx0cmV0ID0ga3ZtX2dtZW1fZ2V0X3Bmbihrdm0sIHNsb3QsIGdmbiwgXFx1MDAyNnBmbiwgXFx1MDAyNm9yZGVyKTtcXG4gXFx0aWYgKHJldCkge1xcbiBcXHRcXHRwcl93YXJuX3JhdGVsaW1pdGVkKFxcXCJTRVY6IFVuZXhwZWN0ZWQgUk1QIGZhdWx0LCBubyBiYWNraW5nIHBhZ2UgZm9yIHByaXZhdGUgR1BBIDB4JWxseFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0ICAgIGdwYSk7XFxuQEAgLTUwNTUsOSArNTA1NSwxMyBAQCB2b2lkIHNldl9oYW5kbGVfcm1wX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCB1NjQgZXJyb3JfY29kZSlcXG4gXFxuIFxcdHJldCA9IHNucF9sb29rdXBfcm1wZW50cnkocGZuLCBcXHUwMDI2YXNzaWduZWQsIFxcdTAwMjZybXBfbGV2ZWwpO1xcbiBcXHRpZiAocmV0IHx8ICFhc3NpZ25lZCkge1xcbi1cXHRcXHRwcl93YXJuX3JhdGVsaW1pdGVkKFxcXCJTRVY6IFVuZXhwZWN0ZWQgUk1QIGZhdWx0LCBubyBhc3NpZ25lZCBSTVAgZW50cnkgZm91bmQgZm9yIEdQQSAweCVsbHggUEZOIDB4JWxseCBlcnJvciAlZFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0ICAgIGdwYSwgcGZuLCByZXQpO1xcbi1cXHRcXHRnb3RvIG91dF9ub190cmFjZTtcXG4rXFx0XFx0Z3VhcmQocmVhZF9sb2NrKShcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuK1xcbitcXHRcXHRpZiAoIW1tdV9pbnZhbGlkYXRlX3JldHJ5X2dmbihrdm0sIG1tdV9zZXEsIGdmbikpXFxuK1xcdFxcdFxcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXFxcIlNFVjogVW5leHBlY3RlZCBSTVAgZmF1bHQsIG5vIGFzc2lnbmVkIFJNUCBlbnRyeSBmb3VuZCBmb3IgR1BBIDB4JWxseCBQRk4gMHglbGx4IGVycm9yICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgZ3BhLCBwZm4sIHJldCk7XFxuK1xcbitcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuIFxcdC8qXFxuQEAgLTUwODUsMjYgKzUwODksMzEgQEAgdm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpXFxuIFxcdGlmIChybXBfbGV2ZWwgPT0gUEdfTEVWRUxfNEspXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4tXFx0cmV0ID0gc25wX3JtcHRhYmxlX3BzbWFzaChwZm4pO1xcbi1cXHRpZiAocmV0KSB7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIExvb2sgaXQgdXAgYWdhaW4uIElmIGl0J3MgNEsgbm93IHRoZW4gdGhlIFBTTUFTSCBtYXkgaGF2ZVxcbi1cXHRcXHQgKiByYWNlZCB3aXRoIGFub3RoZXIgcHJvY2VzcyBhbmQgdGhlIGlzc3VlIGhhcyBhbHJlYWR5IHJlc29sdmVkXFxuLVxcdFxcdCAqIGl0c2VsZi5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdGlmICghc25wX2xvb2t1cF9ybXBlbnRyeShwZm4sIFxcdTAwMjZhc3NpZ25lZCwgXFx1MDAyNnJtcF9sZXZlbCkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgIGFzc2lnbmVkIFxcdTAwMjZcXHUwMDI2IHJtcF9sZXZlbCA9PSBQR19MRVZFTF80SylcXG4rXFx0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spIHtcXG4rXFx0XFx0aWYgKG1tdV9pbnZhbGlkYXRlX3JldHJ5X2dmbihrdm0sIG1tdV9zZXEsIGdmbikpXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4tXFx0XFx0cHJfd2Fybl9yYXRlbGltaXRlZChcXFwiU0VWOiBVbmFibGUgdG8gc3BsaXQgUk1QIGVudHJ5IGZvciBHUEEgMHglbGx4IFBGTiAweCVsbHggcmV0ICVkXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHQgICAgZ3BhLCBwZm4sIHJldCk7XFxuK1xcdFxcdHJldCA9IHNucF9ybXB0YWJsZV9wc21hc2gocGZuKTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBMb29rIGl0IHVwIGFnYWluLiBJZiBpdCdzIDRLIG5vdyB0aGVuIHRoZSBQU01BU0ggbWF5XFxuK1xcdFxcdFxcdCAqIGhhdmUgcmFjZWQgd2l0aCBhbm90aGVyIHByb2Nlc3MgYW5kIHRoZSBpc3N1ZSBoYXNcXG4rXFx0XFx0XFx0ICogYWxyZWFkeSByZXNvbHZlZCBpdHNlbGYuIElmIGl0J3Mgbm90IGFzc2lnbmVkLCB0aGVuXFxuK1xcdFxcdFxcdCAqIHRoaXMgbXVzdCBoYXZlIHJhY2VkIHdpdGggYW5vdGhlciBwcm9jZXNzIHRoYXQgbWFkZVxcbitcXHRcXHRcXHQgKiB0aGlzIHBhZ2Ugc2hhcmVkLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0aWYgKCFzbnBfbG9va3VwX3JtcGVudHJ5KHBmbiwgXFx1MDAyNmFzc2lnbmVkLCBcXHUwMDI2cm1wX2xldmVsKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICAgKChhc3NpZ25lZCBcXHUwMDI2XFx1MDAyNiBybXBfbGV2ZWwgPT0gUEdfTEVWRUxfNEspIHx8ICFhc3NpZ25lZCkpXFxuK1xcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0XFx0XFx0cHJfd2Fybl9yYXRlbGltaXRlZChcXFwiU0VWOiBVbmFibGUgdG8gc3BsaXQgUk1QIGVudHJ5IGZvciBHUEEgMHglbGx4IFBGTiAweCVsbHggcmV0ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgZ3BhLCBwZm4sIHJldCk7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0a3ZtX3phcF9nZm5fcmFuZ2Uoa3ZtLCBnZm4sIGdmbiArIFBUUlNfUEVSX1BNRCk7XFxuIG91dDpcXG4gXFx0dHJhY2Vfa3ZtX3JtcF9mYXVsdCh2Y3B1LCBncGEsIHBmbiwgZXJyb3JfY29kZSwgcm1wX2xldmVsLCByZXQpO1xcbi1vdXRfbm9fdHJhY2U6XFxuLVxcdGt2bV9yZWxlYXNlX3BhZ2VfdW51c2VkKHBhZ2UpO1xcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCBpc19wZm5fcmFuZ2Vfc2hhcmVkKGt2bV9wZm5fdCBzdGFydCwga3ZtX3Bmbl90IGVuZClcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXFxuaW5kZXggMDNiZmM5Mjg2NGI2ZS4uNTAyNDY1MTE5Y2EwYyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcXG5AQCAtMjU4NiwxMyArMjU4NiwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wga3ZtX21lbV9pc19wcml2YXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKVxcbiBcXG4gI2lmZGVmIENPTkZJR19LVk1fR1VFU1RfTUVNRkRcXG4gaW50IGt2bV9nbWVtX2dldF9wZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxcbi1cXHRcXHQgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIHN0cnVjdCBwYWdlICoqcGFnZSxcXG4tXFx0XFx0ICAgICBpbnQgKm1heF9vcmRlcik7XFxuK1xcdFxcdCAgICAgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgKnBmbiwgaW50ICptYXhfb3JkZXIpO1xcbiAjZWxzZVxcbiBzdGF0aWMgaW5saW5lIGludCBrdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwgZ2ZuX3QgZ2ZuLFxcbi1cXHRcXHRcXHRcXHQgICBrdm1fcGZuX3QgKnBmbiwgc3RydWN0IHBhZ2UgKipwYWdlLFxcbi1cXHRcXHRcXHRcXHQgICBpbnQgKm1heF9vcmRlcilcXG4rXFx0XFx0XFx0XFx0ICAga3ZtX3Bmbl90ICpwZm4sIGludCAqbWF4X29yZGVyKVxcbiB7XFxuIFxcdEtWTV9CVUdfT04oMSwga3ZtKTtcXG4gXFx0cmV0dXJuIC1FSU87XFxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXFxuaW5kZXggYjU5NjQ4NmQxODRjYS4uNTg5NzYyMTQwYzNlZiAxMDA2NDRcXG4tLS0gYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXFxuKysrIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xcbkBAIC03NTEsOCArNzUxLDcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19rdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBmaWxlICpmaWxlLFxcbiB9XFxuIFxcbiBpbnQga3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXFxuLVxcdFxcdCAgICAgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgKnBmbiwgc3RydWN0IHBhZ2UgKipwYWdlLFxcbi1cXHRcXHQgICAgIGludCAqbWF4X29yZGVyKVxcbitcXHRcXHQgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIGludCAqbWF4X29yZGVyKVxcbiB7XFxuIFxcdHBnb2ZmX3QgaW5kZXggPSBrdm1fZ21lbV9nZXRfaW5kZXgoc2xvdCwgZ2ZuKTtcXG4gXFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG5AQCAtNzgwLDExICs3NzksNyBAQCBpbnQga3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXFxuICNlbmRpZlxcbiBcXG4gXFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4tXFxuLVxcdGlmICghcilcXG4tXFx0XFx0KnBhZ2UgPSBmb2xpb19maWxlX3BhZ2UoZm9saW8sIGluZGV4KTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbitcXHRmb2xpb19wdXQoZm9saW8pO1xcbiBcXG4gXFx0cmV0dXJuIHI7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6MTk6NDQuMDQ4MzQyODQzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTI0MzQ1Mjc3NDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0FNRF9TRVZcIixcbiAgICBcIktWTV9TV19QUk9URUNURURfVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fZ21lbV9nZXRfcGZuXCIsXG4gICAgXCJzZXZfaGFuZGxlX3JtcF9mYXVsdFwiLFxuICAgIFwic2V2X3NucF9yZWxvYWRfdm1zYVwiLFxuICAgIFwia3ZtX2hhbmRsZV92bmNyX2Fib3J0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgc2lnbmF0dXJlIGFuZCBiZWhhdmlvciBvZiBga3ZtX2dtZW1fZ2V0X3BmbmAgYnkgcmVtb3ZpbmcgdGhlIGBzdHJ1Y3QgcGFnZSAqKnBhZ2VgIGFyZ3VtZW50IGFuZCBkcm9wcGluZyB0aGUgZm9saW8gcmVmZXJlbmNlIGJlZm9yZSByZXR1cm5pbmcuIFRoaXMgYWZmZWN0cyBob3cgS1ZNIGhhbmRsZXMgbWVtb3J5IGJhY2tpbmcgZm9yIGd1ZXN0X21lbWZkLCB3aGljaCBpcyBhIGNvcmUgZmVhdHVyZSBmb3IgY29uZmlkZW50aWFsIGNvbXB1dGluZyAoU0VWLVNOUCwgVERYLCBBUk0gQ0NBKS4gVGhlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgcGFnZSBmYXVsdHMgd2hlbiB1c2luZyBndWVzdF9tZW1mZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDBmY2VhZTQxMGMwNTQxMDVlZTZlOTZhMzdiNDE2NjFlM2UyYTFiZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDA5OjE5OjQyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vbW11LmMgYi9hcmNoL2FybTY0L2t2bS9tbXUuY1xuaW5kZXggOWJhODY0NTBmZTRhZi4uZDU3ZjgxODFmMWI3ZCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL21tdS5jXG4rKysgYi9hcmNoL2FybTY0L2t2bS9tbXUuY1xuQEAgLTE2MTMsNyArMTYxMyw2IEBAIHN0YXRpYyBpbnQgZ21lbV9hYm9ydChjb25zdCBzdHJ1Y3Qga3ZtX3MyX2ZhdWx0X2Rlc2MgKnMyZmQpXG4gXHRlbnVtIGt2bV9wZ3RhYmxlX3Byb3QgcHJvdCA9IEtWTV9QR1RBQkxFX1BST1RfUjtcbiBcdHN0cnVjdCBrdm1fcGd0YWJsZSAqcGd0ID0gczJmZC1cdTAwM2V2Y3B1LVx1MDAzZWFyY2guaHdfbW11LVx1MDAzZXBndDtcbiBcdHVuc2lnbmVkIGxvbmcgbW11X3NlcTtcbi1cdHN0cnVjdCBwYWdlICpwYWdlO1xuIFx0c3RydWN0IGt2bSAqa3ZtID0gczJmZC1cdTAwM2V2Y3B1LVx1MDAzZWt2bTtcbiBcdHZvaWQgKm1lbWNhY2hlID0gTlVMTDtcbiBcdGt2bV9wZm5fdCBwZm47XG5AQCAtMTY0MSw3ICsxNjQwLDcgQEAgc3RhdGljIGludCBnbWVtX2Fib3J0KGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZClcbiBcdC8qIFBhaXJzIHdpdGggdGhlIHNtcF93bWIoKSBpbiBrdm1fbW11X2ludmFsaWRhdGVfZW5kKCkuICovXG4gXHRzbXBfcm1iKCk7XG4gXG4tXHRyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKGt2bSwgczJmZC1cdTAwM2VtZW1zbG90LCBnZm4sIFx1MDAyNnBmbiwgXHUwMDI2cGFnZSwgTlVMTCk7XG4rXHRyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKGt2bSwgczJmZC1cdTAwM2VtZW1zbG90LCBnZm4sIFx1MDAyNnBmbiwgTlVMTCk7XG4gXHRpZiAocmV0KSB7XG4gXHRcdGt2bV9wcmVwYXJlX21lbW9yeV9mYXVsdF9leGl0KHMyZmQtXHUwMDNldmNwdSwgczJmZC1cdTAwM2VmYXVsdF9pcGEsIFBBR0VfU0laRSxcbiBcdFx0XHRcdFx0ICAgICAgd3JpdGVfZmF1bHQsIGV4ZWNfZmF1bHQsIGZhbHNlKTtcbkBAIC0xNjgxLDcgKzE2ODAsNiBAQCBzdGF0aWMgaW50IGdtZW1fYWJvcnQoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKVxuIFx0fVxuIFxuIG91dF91bmxvY2s6XG4tXHRrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2Uoa3ZtLCBwYWdlLCAhIXJldCwgcHJvdCBcdTAwMjYgS1ZNX1BHVEFCTEVfUFJPVF9XKTtcbiBcdGt2bV9mYXVsdF91bmxvY2soa3ZtKTtcbiBcbiBcdGlmICgocHJvdCBcdTAwMjYgS1ZNX1BHVEFCTEVfUFJPVF9XKSBcdTAwMjZcdTAwMjYgIXJldClcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYyBiL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jXG5pbmRleCAxNzEyM2YwYjZkYWJhLi5kZDYyODQwZDM2NzQxIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNcbisrKyBiL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jXG5AQCAtMTQxNSw3ICsxNDE1LDcgQEAgc3RhdGljIGludCBrdm1fdHJhbnNsYXRlX3ZuY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sICppc19nbWVtKVxuIFx0Ym9vbCB3cml0ZV9mYXVsdCwgd3JpdGFibGU7XG4gXHR1bnNpZ25lZCBsb25nIG1tdV9zZXE7XG4gXHRzdHJ1Y3Qgdm5jcl90bGIgKnZ0O1xuLVx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4rXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7XG4gXHR1NjQgdmEsIHBmbiwgZ2ZuO1xuIFx0aW50IHJldDtcbiBcbkBAIC0xNDcxLDcgKzE0NzEsNyBAQCBzdGF0aWMgaW50IGt2bV90cmFuc2xhdGVfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgKmlzX2dtZW0pXG4gXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4tXHRcdHJldCA9IGt2bV9nbWVtX2dldF9wZm4odmNwdS1cdTAwM2Vrdm0sIG1lbXNsb3QsIGdmbiwgXHUwMDI2cGZuLCBcdTAwMjZwYWdlLCBOVUxMKTtcbitcdFx0cmV0ID0ga3ZtX2dtZW1fZ2V0X3Bmbih2Y3B1LVx1MDAzZWt2bSwgbWVtc2xvdCwgZ2ZuLCBcdTAwMjZwZm4sIE5VTEwpO1xuIFx0XHRpZiAocmV0KSB7XG4gXHRcdFx0a3ZtX3ByZXBhcmVfbWVtb3J5X2ZhdWx0X2V4aXQodmNwdSwgdnQtXHUwMDNld3IucGEsIFBBR0VfU0laRSxcbiBcdFx0XHRcdFx0ICAgICAgd3JpdGVfZmF1bHQsIGZhbHNlLCBmYWxzZSk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbmluZGV4IDA2NGVjYzMzYjkyNjcuLjk0N2M5Y2Q4NDM0NTAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG5AQCAtNDYyOCw3ICs0NjI4LDcgQEAgc3RhdGljIGludCBrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0fVxuIFxuIFx0ciA9IGt2bV9nbWVtX2dldF9wZm4odmNwdS1cdTAwM2Vrdm0sIGZhdWx0LVx1MDAzZXNsb3QsIGZhdWx0LVx1MDAzZWdmbiwgXHUwMDI2ZmF1bHQtXHUwMDNlcGZuLFxuLVx0XHRcdCAgICAgXHUwMDI2ZmF1bHQtXHUwMDNlcmVmY291bnRlZF9wYWdlLCBcdTAwMjZtYXhfb3JkZXIpO1xuK1x0XHRcdCAgICAgXHUwMDI2bWF4X29yZGVyKTtcbiBcdGlmIChyKSB7XG4gXHRcdGt2bV9tbXVfcHJlcGFyZV9tZW1vcnlfZmF1bHRfZXhpdCh2Y3B1LCBmYXVsdCk7XG4gXHRcdHJldHVybiByO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5pbmRleCA1NzA1NzIzZjFmNDEyLi4wYTg4N2Y4ZTA1ZDNhIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuQEAgLTQwMzIsNyArNDAzMiw2IEBAIHN0YXRpYyB2b2lkIF9fc2V2X3NucF9yZWxvYWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSlcbiBcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXHUwMDNla3ZtO1xuIFx0Z2ZuX3QgZ2ZuID0gZ3BhX3RvX2dmbihncGEpO1xuIFx0dW5zaWduZWQgbG9uZyBtbXVfc2VxO1xuLVx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXHRrdm1fcGZuX3QgcGZuO1xuIFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZzdm0tXHUwMDNlc2V2X2VzLnNucF92bXNhX211dGV4KTtcbkBAIC00MDc2LDcgKzQwNzUsNyBAQCBzdGF0aWMgdm9pZCBfX3Nldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEpXG4gXHQgKiBUaGUgbmV3IFZNU0Egd2lsbCBiZSBwcml2YXRlIG1lbW9yeSBndWVzdCBtZW1vcnksIHNvIHJldHJpZXZlIHRoZVxuIFx0ICogUEZOIGZyb20gdGhlIGdtZW0gYmFja2VuZC5cbiBcdCAqL1xuLVx0aWYgKGt2bV9nbWVtX2dldF9wZm4odmNwdS1cdTAwM2Vrdm0sIHNsb3QsIGdmbiwgXHUwMDI2cGZuLCBcdTAwMjZwYWdlLCBOVUxMKSlcbitcdGlmIChrdm1fZ21lbV9nZXRfcGZuKHZjcHUtXHUwMDNla3ZtLCBzbG90LCBnZm4sIFx1MDAyNnBmbiwgTlVMTCkpXG4gXHRcdHJldHVybjtcbiBcbiBcdHJlYWRfbG9jayhcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuQEAgLTQwOTIsOCArNDA5MSw2IEBAIHN0YXRpYyB2b2lkIF9fc2V2X3NucF9yZWxvYWRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSlcbiBcdGVsc2VcbiBcdFx0c3ZtLVx1MDAzZXZtY2ItXHUwMDNlY29udHJvbC52bXNhX3BhID0gcGZuX3RvX2hwYShwZm4pO1xuIFx0cmVhZF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbi1cbi1cdGt2bV9yZWxlYXNlX3BhZ2VfY2xlYW4ocGFnZSk7XG4gfVxuIFxuIC8qXG5AQCAtNTAxOSw3ICs1MDE2LDcgQEAgdm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpXG4gXHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90O1xuIFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cdTAwM2Vrdm07XG4gXHRpbnQgb3JkZXIsIHJtcF9sZXZlbCwgcmV0O1xuLVx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4rXHR1bnNpZ25lZCBsb25nIG1tdV9zZXE7XG4gXHRib29sIGFzc2lnbmVkO1xuIFx0a3ZtX3Bmbl90IHBmbjtcbiBcdGdmbl90IGdmbjtcbkBAIC01MDQ2LDcgKzUwNDMsMTAgQEAgdm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdHJldCA9IGt2bV9nbWVtX2dldF9wZm4oa3ZtLCBzbG90LCBnZm4sIFx1MDAyNnBmbiwgXHUwMDI2cGFnZSwgXHUwMDI2b3JkZXIpO1xuK1x0bW11X3NlcSA9IGt2bS1cdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXE7XG4rXHRzbXBfcm1iKCk7XG4rXG4rXHRyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKGt2bSwgc2xvdCwgZ2ZuLCBcdTAwMjZwZm4sIFx1MDAyNm9yZGVyKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0cHJfd2Fybl9yYXRlbGltaXRlZChcIlNFVjogVW5leHBlY3RlZCBSTVAgZmF1bHQsIG5vIGJhY2tpbmcgcGFnZSBmb3IgcHJpdmF0ZSBHUEEgMHglbGx4XFxuXCIsXG4gXHRcdFx0XHQgICAgZ3BhKTtcbkBAIC01MDU1LDkgKzUwNTUsMTMgQEAgdm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpXG4gXG4gXHRyZXQgPSBzbnBfbG9va3VwX3JtcGVudHJ5KHBmbiwgXHUwMDI2YXNzaWduZWQsIFx1MDAyNnJtcF9sZXZlbCk7XG4gXHRpZiAocmV0IHx8ICFhc3NpZ25lZCkge1xuLVx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwiU0VWOiBVbmV4cGVjdGVkIFJNUCBmYXVsdCwgbm8gYXNzaWduZWQgUk1QIGVudHJ5IGZvdW5kIGZvciBHUEEgMHglbGx4IFBGTiAweCVsbHggZXJyb3IgJWRcXG5cIixcbi1cdFx0XHRcdCAgICBncGEsIHBmbiwgcmV0KTtcbi1cdFx0Z290byBvdXRfbm9fdHJhY2U7XG4rXHRcdGd1YXJkKHJlYWRfbG9jaykoXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbitcbitcdFx0aWYgKCFtbXVfaW52YWxpZGF0ZV9yZXRyeV9nZm4oa3ZtLCBtbXVfc2VxLCBnZm4pKVxuK1x0XHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCJTRVY6IFVuZXhwZWN0ZWQgUk1QIGZhdWx0LCBubyBhc3NpZ25lZCBSTVAgZW50cnkgZm91bmQgZm9yIEdQQSAweCVsbHggUEZOIDB4JWxseCBlcnJvciAlZFxcblwiLFxuK1x0XHRcdFx0XHQgICAgZ3BhLCBwZm4sIHJldCk7XG4rXG4rXHRcdHJldHVybjtcbiBcdH1cbiBcbiBcdC8qXG5AQCAtNTA4NSwyNiArNTA4OSwzMSBAQCB2b2lkIHNldl9oYW5kbGVfcm1wX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCB1NjQgZXJyb3JfY29kZSlcbiBcdGlmIChybXBfbGV2ZWwgPT0gUEdfTEVWRUxfNEspXG4gXHRcdGdvdG8gb3V0O1xuIFxuLVx0cmV0ID0gc25wX3JtcHRhYmxlX3BzbWFzaChwZm4pO1xuLVx0aWYgKHJldCkge1xuLVx0XHQvKlxuLVx0XHQgKiBMb29rIGl0IHVwIGFnYWluLiBJZiBpdCdzIDRLIG5vdyB0aGVuIHRoZSBQU01BU0ggbWF5IGhhdmVcbi1cdFx0ICogcmFjZWQgd2l0aCBhbm90aGVyIHByb2Nlc3MgYW5kIHRoZSBpc3N1ZSBoYXMgYWxyZWFkeSByZXNvbHZlZFxuLVx0XHQgKiBpdHNlbGYuXG4tXHRcdCAqL1xuLVx0XHRpZiAoIXNucF9sb29rdXBfcm1wZW50cnkocGZuLCBcdTAwMjZhc3NpZ25lZCwgXHUwMDI2cm1wX2xldmVsKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIGFzc2lnbmVkIFx1MDAyNlx1MDAyNiBybXBfbGV2ZWwgPT0gUEdfTEVWRUxfNEspXG4rXHRzY29wZWRfZ3VhcmQocmVhZF9sb2NrLCBcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spIHtcbitcdFx0aWYgKG1tdV9pbnZhbGlkYXRlX3JldHJ5X2dmbihrdm0sIG1tdV9zZXEsIGdmbikpXG4gXHRcdFx0Z290byBvdXQ7XG4gXG4tXHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCJTRVY6IFVuYWJsZSB0byBzcGxpdCBSTVAgZW50cnkgZm9yIEdQQSAweCVsbHggUEZOIDB4JWxseCByZXQgJWRcXG5cIixcbi1cdFx0XHRcdCAgICBncGEsIHBmbiwgcmV0KTtcbitcdFx0cmV0ID0gc25wX3JtcHRhYmxlX3BzbWFzaChwZm4pO1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBMb29rIGl0IHVwIGFnYWluLiBJZiBpdCdzIDRLIG5vdyB0aGVuIHRoZSBQU01BU0ggbWF5XG4rXHRcdFx0ICogaGF2ZSByYWNlZCB3aXRoIGFub3RoZXIgcHJvY2VzcyBhbmQgdGhlIGlzc3VlIGhhc1xuK1x0XHRcdCAqIGFscmVhZHkgcmVzb2x2ZWQgaXRzZWxmLiBJZiBpdCdzIG5vdCBhc3NpZ25lZCwgdGhlblxuK1x0XHRcdCAqIHRoaXMgbXVzdCBoYXZlIHJhY2VkIHdpdGggYW5vdGhlciBwcm9jZXNzIHRoYXQgbWFkZVxuK1x0XHRcdCAqIHRoaXMgcGFnZSBzaGFyZWQuXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKCFzbnBfbG9va3VwX3JtcGVudHJ5KHBmbiwgXHUwMDI2YXNzaWduZWQsIFx1MDAyNnJtcF9sZXZlbCkgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgICgoYXNzaWduZWQgXHUwMDI2XHUwMDI2IHJtcF9sZXZlbCA9PSBQR19MRVZFTF80SykgfHwgIWFzc2lnbmVkKSlcbitcdFx0XHRcdGdvdG8gb3V0O1xuK1xuK1x0XHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCJTRVY6IFVuYWJsZSB0byBzcGxpdCBSTVAgZW50cnkgZm9yIEdQQSAweCVsbHggUEZOIDB4JWxseCByZXQgJWRcXG5cIixcbitcdFx0XHRcdFx0ICAgIGdwYSwgcGZuLCByZXQpO1xuK1x0XHR9XG4gXHR9XG4gXG4gXHRrdm1femFwX2dmbl9yYW5nZShrdm0sIGdmbiwgZ2ZuICsgUFRSU19QRVJfUE1EKTtcbiBvdXQ6XG4gXHR0cmFjZV9rdm1fcm1wX2ZhdWx0KHZjcHUsIGdwYSwgcGZuLCBlcnJvcl9jb2RlLCBybXBfbGV2ZWwsIHJldCk7XG4tb3V0X25vX3RyYWNlOlxuLVx0a3ZtX3JlbGVhc2VfcGFnZV91bnVzZWQocGFnZSk7XG4gfVxuIFxuIHN0YXRpYyBib29sIGlzX3Bmbl9yYW5nZV9zaGFyZWQoa3ZtX3Bmbl90IHN0YXJ0LCBrdm1fcGZuX3QgZW5kKVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuaW5kZXggMDNiZmM5Mjg2NGI2ZS4uNTAyNDY1MTE5Y2EwYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuKysrIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5AQCAtMjU4NiwxMyArMjU4NiwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wga3ZtX21lbV9pc19wcml2YXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKVxuIFxuICNpZmRlZiBDT05GSUdfS1ZNX0dVRVNUX01FTUZEXG4gaW50IGt2bV9nbWVtX2dldF9wZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxuLVx0XHQgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIHN0cnVjdCBwYWdlICoqcGFnZSxcbi1cdFx0ICAgICBpbnQgKm1heF9vcmRlcik7XG4rXHRcdCAgICAgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgKnBmbiwgaW50ICptYXhfb3JkZXIpO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBpbnQga3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdFx0XHQgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LCBnZm5fdCBnZm4sXG4tXHRcdFx0XHQgICBrdm1fcGZuX3QgKnBmbiwgc3RydWN0IHBhZ2UgKipwYWdlLFxuLVx0XHRcdFx0ICAgaW50ICptYXhfb3JkZXIpXG4rXHRcdFx0XHQgICBrdm1fcGZuX3QgKnBmbiwgaW50ICptYXhfb3JkZXIpXG4ge1xuIFx0S1ZNX0JVR19PTigxLCBrdm0pO1xuIFx0cmV0dXJuIC1FSU87XG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbmluZGV4IGI1OTY0ODZkMTg0Y2EuLjU4OTc2MjE0MGMzZWYgMTAwNjQ0XG4tLS0gYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXG4rKysgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXG5AQCAtNzUxLDggKzc1MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fa3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3QgZmlsZSAqZmlsZSxcbiB9XG4gXG4gaW50IGt2bV9nbWVtX2dldF9wZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxuLVx0XHQgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIHN0cnVjdCBwYWdlICoqcGFnZSxcbi1cdFx0ICAgICBpbnQgKm1heF9vcmRlcilcbitcdFx0ICAgICBnZm5fdCBnZm4sIGt2bV9wZm5fdCAqcGZuLCBpbnQgKm1heF9vcmRlcilcbiB7XG4gXHRwZ29mZl90IGluZGV4ID0ga3ZtX2dtZW1fZ2V0X2luZGV4KHNsb3QsIGdmbik7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuQEAgLTc4MCwxMSArNzc5LDcgQEAgaW50IGt2bV9nbWVtX2dldF9wZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxuICNlbmRpZlxuIFxuIFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbi1cbi1cdGlmICghcilcbi1cdFx0KnBhZ2UgPSBmb2xpb19maWxlX3BhZ2UoZm9saW8sIGluZGV4KTtcbi1cdGVsc2Vcbi1cdFx0Zm9saW9fcHV0KGZvbGlvKTtcbitcdGZvbGlvX3B1dChmb2xpbyk7XG4gXG4gXHRyZXR1cm4gcjtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOToxOTo0NC4wNDgzNDQ0NjNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTc3MzczMjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS1ZNIFBhdGNoIGZvciBHdWVzdCBNZW1mZCBhbmQgQ29uZmlkZW50aWFsIENvbXB1dGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIEtWTSwgYW5kIGl0J3MgbW9kaWZ5aW5nIGBrdm1fZ21lbV9nZXRfcGZuYC4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIGRyb3BwaW5nIHRoZSBgc3RydWN0IHBhZ2UgKipwYWdlYCBhcmd1bWVudCBhbmQsIG1vcmUgc2lnbmlmaWNhbnRseSwgbm8gbG9uZ2VyIHJldHVybmluZyBhIHJlZmVyZW5jZWQgcGFnZS4gSW5zdGVhZCwgaXQncyBqdXN0IHRoZSBwZm4sIHdpdGggdGhlIGZvbGlvIHJlZmVyZW5jZSBkcm9wcGVkIGJlZm9yZSByZXR1cm5pbmcuIEFscmlnaHQsIHRoYXQncyBhIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2UuIFRoZSBjb2RlIGFmZmVjdGVkIGluY2x1ZGVzIHNvbWUgY3JpdGljYWwgYXJlYXM6IGBhcmNoL2FybTY0L2t2bS9tbXUuY2AsIGBhcmNoL2FybTY0L2t2bS9uZXN0ZWQuY2AsIGFuZCB0aGUgeDg2IGVxdWl2YWxlbnQsIHBsdXMgc29tZSBvdGhlciBrZXkgZmlsZXMgbGlrZSB0aGUgaGVhZGVyIGFuZCBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2AuXG5cbk15IGZpcnN0IHRob3VnaHQgaXMsIGhvdyBpcyB0aGUgbWVtb3J5IGtlcHQgYWxpdmUgaWYgdGhleSBhcmUgZHJvcHBpbmcgdGhlIHJlZmVyZW5jZT8gQWgsIGl0IGxvb2tzIGxpa2UgYGd1ZXN0X21lbWZkYCBtZW1vcnkgaXMgbWFuYWdlZCB0aHJvdWdoIHRoZSBmaWxlIGRlc2NyaXB0b3IgaXRzZWxmLCBhbmQgS1ZNJ3MgbW11X25vdGlmaWVyLWxpa2UgbWVjaGFuaXNtLCBvciByYXRoZXIgdGhlIGd1ZXN0X21lbWZkIGludmFsaWRhdGlvbiBjYWxsYmFja3MsIGhhbmRsZXMgdGhlIHVubWFwcGluZyBpZiB0aGUgbWVtb3J5IGlzIGZyZWVkLiBTbywgaXQgYXBwZWFycyB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZm9yIGhvdyBLVk0gaGFuZGxlcyBgZ3Vlc3RfbWVtZmRgIHBhZ2VzLiBUaGV5IGFyZSBubyBsb25nZXIgdGFraW5nIGEgcGFnZSByZWZlcmVuY2UuXG5cbkdpdmVuIHRoaXMgaXMgYSBjb3JlIGNvbXBvbmVudCwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgaWYgdGhpcyBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuIE9rYXksIGBLVk0gZ3Vlc3RfbWVtZmRgIGlzIGEga2V5IHBpZWNlIGZvciBjb25maWRlbnRpYWwgY29tcHV0aW5nLCByaWdodD8gU0VWLVNOUCwgVERYLCBhbmQgQVJNIENDQSBhbGwgdXNlIGl0LiBBbmQsIHllcywgaXQncyByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyByZWFjaGFibGUgd2l0aGluIGEgc3RhbmRhcmQgUUVNVSBvciBHQ0Ugc2V0dXAuIEkgc2hvdWxkIGNoZWNrIGhvdyB0aGVzZSBndWVzdCBtZW1mZHMgYXJlIGNyZWF0ZWQuIEFoLCB0aGV5J3JlIGNyZWF0ZWQgd2l0aCBgS1ZNX0NSRUFURV9HVUVTVF9NRU1GRGAuIEFuZCB5ZXMsIHRoaXMgaXMgYXZhaWxhYmxlIGlmIGBDT05GSUdfS1ZNX0dVRVNUX01FTUZEYCBpcyBlbmFibGVkLiBXYWl0LCBhbmQgaXQgbG9va3MgbGlrZSBgQ09ORklHX0tWTV9HVUVTVF9NRU1GRGAgaXMgc2VsZWN0ZWQgYnkgS1ZNX1NXX1BST1RFQ1RFRF9WTSBvciBvdGhlciBjb25maWRlbnRpYWwgY29tcHV0aW5nIGNvbmZpZ3MuIFBlcmZlY3QsIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBDT05GSUdfS1ZNX0dVRVNUX01FTUZEYCBjb25maWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1OTIsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOToxOTo1MS42MjU3MjAyMTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwNjU5NDg2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0dVRVNUX01FTUZEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL0tjb25maWc9MTAzPWNvbmZpZyBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbi0tXFxudmlydC9rdm0vS2NvbmZpZy0xMDUtXFxudmlydC9rdm0vS2NvbmZpZzoxMDY6Y29uZmlnIEtWTV9HVUVTVF9NRU1GRFxcbnZpcnQva3ZtL0tjb25maWctMTA3LSAgICAgICBzZWxlY3QgWEFSUkFZX01VTFRJXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjE5OjUzLjQzMjMyMTQ1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU3NDAzNzk4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgS1ZNX0dVRVNUX01FTUZEKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYEtWTV9HVUVTVF9NRU1GRGAgc2VsZWN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byB1bmRlcnN0YW5kICp3aHkqIGl0J3MgYmVpbmcgY2hvc2VuIG9yIGJlaW5nIGNvbnNpZGVyZWQuIFdoYXQncyB0aGUgY29udGV4dCBoZXJlPyBJcyBpdCByZWxhdGVkIHRvIGEgc3BlY2lmaWMgdnVsbmVyYWJpbGl0eSwgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBvciBuZXcgZmVhdHVyZSBpbnRyb2R1Y3Rpb24gd2l0aGluIHRoZSBLVk0gZWNvc3lzdGVtPyBNeSBleHBlcnQgaW50dWl0aW9uIGtpY2tzIGluOyBJJ20gaW1tZWRpYXRlbHkgcnVubmluZyB0aHJvdWdoIHBvc3NpYmxlIHVzZSBjYXNlcyBpbiBteSBoZWFkOiBtZW1vcnkgYmFsbG9vbmluZywgc2VjdXJlIGd1ZXN0IG1lbW9yeSBtYW5hZ2VtZW50LCBwb3RlbnRpYWxseSBldmVuIHNoYXJlZCBtZW1vcnkgaW1wbGVtZW50YXRpb25zLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgdHJpZ2dlcmluZyBldmVudCBvciBjb25kaXRpb24gdGhhdCBsZWFkcyB0byB0aGUgc2VsZWN0aW9uIG9mIHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uLiBXaGF0IG90aGVyIHJlbGF0ZWQgb3B0aW9ucyBhcmUgcG90ZW50aWFsbHkgYmVpbmcgY29uc2lkZXJlZD8gSSB3aWxsIGRlbHZlIGRlZXBlciBpbnRvIGRvY3VtZW50YXRpb24sIGNvZGUsIGFuZCByZWxhdGVkIG1haWxpbmcgbGlzdCBkaXNjdXNzaW9ucy4gSXQncyBsaWtlbHkgdGhhdCBpdCdzIGJlaW5nIGNob3NlbiBmb3IgYSByZWFzb24sIGFuZCB0aGVyZSBpcyBjZXJ0YWlubHkgbXVjaCBmb3IgbWUgdG8gZGlzY292ZXIgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjYwOCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjE5OjU3LjAwNjM2MjQyNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODQxODQwODI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBLVk1fR1VFU1RfTUVNRkRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vS2NvbmZpZz0yMD1tZW51Y29uZmlnIEtWTVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0zOC1cXHRzZWxlY3QgR1VFU1RfUEVSRl9FVkVOVFMgaWYgUEVSRl9FVkVOVFNcXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnOjM5OlxcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkRcXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTQwLVxcdGhlbHBcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTIwPWNvbmZpZyBLVk1fWDg2XFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy00OS1cXHRzZWxlY3QgS1ZNX1dFUlJPUiBpZiBXRVJST1JcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1MDpcXHRzZWxlY3QgS1ZNX0dVRVNUX01FTUZEIGlmIFg4Nl82NFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOToxOTo1OC44NDgyMTMxMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1MzkyMDYxMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIGlzIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCBvbiBib3RoIEFSTTY0IGFuZCBYODZfNjQgS1ZNLCB3aGljaCBpcyBnb29kIOKAkyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gTXkgZmlyc3Qgc3RlcCBpcyB0byBpZGVudGlmeSB0aGUgbW9zdCBwcm9taXNpbmcgZnVuY3Rpb25zIGZvciBmdXp6aW5nLlxuXG5Mb29raW5nIGF0IHRoZSBwYXRjaCwgSSBzZWUgbW9kaWZpY2F0aW9ucyBpbiBhIGZldyBrZXkgYXJlYXM6IGBnbWVtX2Fib3J0YCwgYGt2bV90cmFuc2xhdGVfdm5jcmAsIGBrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW1gLCBgX19zZXZfc25wX3JlbG9hZF92bXNhYCwgYHNldl9oYW5kbGVfcm1wX2ZhdWx0YCwgYW5kIGBrdm1fZ21lbV9nZXRfcGZuYC4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGVpciBlbnRyeSBwb2ludHMgYW5kIGNhbGwgY2hhaW5zLlxuXG5ga3ZtX2dtZW1fZ2V0X3BmbmAgYXBwZWFycyB0byBiZSBhbiBBUEkgZnVuY3Rpb24sIHdoaWNoIGlzIHVzZWZ1bC4gU2FtZSBnb2VzIGZvciBgc2V2X2hhbmRsZV9ybXBfZmF1bHRgLiBJIHNob3VsZCBpbnZlc3RpZ2F0ZSB0aGUgY2FsbGVycyBhbmQgaG93IHRoZSBkYXRhIGZsb3dzIGludG8gdGhlbSB0byBzZWUgaG93IHRoZXkncmUgZXhwb3NlZCB0byB0aGUgZ3Vlc3QuIE5vdywgYGdtZW1fYWJvcnRgIGlzIGNhbGxlZCBieSBgdXNlcl9tZW1fYWJvcnRgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCByaWdodD8gTGV0IG1lIGRvdWJsZS1jaGVjayBob3cgdGhhdCB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA2NCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOToyMDowNS4zODc0MjE3MjhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5MDQ4MzgzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnbWVtX2Fib3J0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva3ZtL21tdS5jPTE2MDA9c3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjIHtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTE2MDctXFxuYXJjaC9hcm02NC9rdm0vbW11LmM6MTYwODpzdGF0aWMgaW50IGdtZW1fYWJvcnQoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTE2MDkte1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmM9MjI0OD1pbnQga3ZtX2hhbmRsZV9ndWVzdF9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0yNDE5LVxcdFxcdGlmIChrdm1fc2xvdF9oYXNfZ21lbShtZW1zbG90KSlcXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoyNDIwOlxcdFxcdFxcdHJldCA9IGdtZW1fYWJvcnQoXFx1MDAyNnMyZmQpO1xcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTI0MjEtXFx0XFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOToyMDowNy4wNzc5MTI2MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MTUzNzI0NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBhcyBhbiBleHBlcnQgaW4gdGhpcyBhcmVhOlxuXG4qKkFuYWx5emluZyBLVk0gRW50cnkgUG9pbnRzOiBBUk02NCB2cy4geDg2KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IEtWTSBoYW5kbGVzIGd1ZXN0IGFib3J0cyBhbmQgbWVtb3J5IGZhdWx0cy4gSXQgbG9va3MgbGlrZSBga3ZtX2hhbmRsZV9ndWVzdF9hYm9ydGAgaXMgdGhlIGtleSBlbnRyeSBwb2ludCBmb3IgQVJNNjQgYXJjaGl0ZWN0dXJlcy4gVGhhdCBtYWtlcyBzZW5zZSwgaXQncyB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gZm9yIGRlYWxpbmcgd2l0aCB0aG9zZSB1bmV4cGVjdGVkIGV2ZW50cy4gTm93LCBmb3IgeDg2LCBpdCdzIG5vdCBxdWl0ZSB0aGUgc2FtZS4gSXQgbG9va3MgbGlrZSB0aGUgcGF0aCBpcyB0aHJvdWdoIGBrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW1gLCB3aGljaCBpcyB1c2VkIGJ5IGZ1bmN0aW9ucyBsaWtlIGBrdm1fbW11X2ZhdWx0aW5fcGZuYCBvciBzb21ldGhpbmcgc2ltaWxhciwgYW5kIG1heWJlIG90aGVycywgcmVsYXRlZCB0byBwYWdlIGZhdWx0cyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQuIFNvIGl0IHNlZW1zIGxpa2UgQVJNNjQgYW5kIHg4NiB0YWtlIGRpZmZlcmVudCByb3V0ZXMgdG8gaGFuZGxlIHRoZXNlIHNpbWlsYXIgbG93LWxldmVsIGlzc3Vlcywgb25lIHdpdGggYSBkZWRpY2F0ZWQgYWJvcnQgaGFuZGxlciBhbmQgdGhlIG90aGVyIGJ5IHdvcmtpbmcgdGhyb3VnaCB0aGUgTU1VIGZhdWx0IGhhbmRsZXJzLiBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSB4ODYgY29kZSB0byBwaW5wb2ludCB0aGUgZXhhY3QgY2FsbGluZyBzdHJ1Y3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5MTcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOToyMDoxMC44OTMyODc4NTNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDg5ODA2NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX21tdV9mYXVsdGluX3Bmbl9nbWVtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9tbXUvbW11LmM9NDYxMz1zdGF0aWMgdm9pZCBrdm1fbW11X2ZpbmlzaF9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDYxOS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ2MjA6c3RhdGljIGludCBrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDYyMS1cXHRcXHRcXHRcXHQgICAgc3RydWN0IGt2bV9wYWdlX2ZhdWx0ICpmYXVsdClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NDY0Mz1zdGF0aWMgaW50IF9fa3ZtX21tdV9mYXVsdGluX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ2NDgtXFx0aWYgKGZhdWx0LVxcdTAwM2Vpc19wcml2YXRlIHx8IGt2bV9tZW1zbG90X2lzX2dtZW1fb25seShmYXVsdC1cXHUwMDNlc2xvdCkpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0NjQ5OlxcdFxcdHJldHVybiBrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW0odmNwdSwgZmF1bHQpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDY1MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6MjA6MTIuNjAyMjc2OTg0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNjQ5NTEzOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFscmVhZHkgZGVlcCBpbiBLVk0gaW50ZXJuYWxzOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFBhZ2UgRmF1bHQgSGFuZGxpbmcgUGF0aCBpbiBLVk0qKlxuXG5BbHJpZ2h0LCBJJ20gdHJhY2luZyB0aHJvdWdoIHRoaXMgZmF1bHQgaGFuZGxpbmcgbG9naWMuIEkgc2VlIHRoYXQgYF9fa3ZtX21tdV9mYXVsdGluX3BmbmAgaXMgY2FsbGVkIGJ5IGBrdm1fbW11X2ZhdWx0aW5fcGZuYC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQncyB0aGUgaW50ZXJuYWwgd29ya2VyIGZ1bmN0aW9uIGZvciB0aGUgaW5pdGlhbCBmYXVsdC1pbiBvcGVyYXRpb24uIEJ1dCB0aGlzIGhhcyBtYWRlIG1lIHRoaW5rLi4uIHdoYXQncyB0aGUgcm9sZSBvZiBga3ZtX21tdV9kb19wYWdlX2ZhdWx0YCBpbiB0aGlzIHdob2xlIGZsb3c/IElzIGl0IGEgaGlnaGVyLWxldmVsIGVudHJ5IHBvaW50PyBJcyBpdCBjYWxsZWQgYmVmb3JlIG9yIGFmdGVyIHRoaXMgYGZhdWx0aW5gIHNlcXVlbmNlLCBvciBpcyBpdCBhIGNvbXBsZXRlbHkgc2VwYXJhdGUgcGF0aD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucywgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgb3ZlcmFsbCBoYW5kbGluZyBvZiBwYWdlIGZhdWx0cyB3aXRoaW4gdGhlIEtWTSBNTVUuIEkgcmVhbGx5IG5lZWQgdG8gbWFwIG91dCB0aGUgZW50aXJlIGNhbGwgZ3JhcGggdG8gYmUgc3VyZS4gVGhlcmUncyBhIGNoYW5jZSB0aGV5IGFyZSBjb21wbGV0ZWx5IHVucmVsYXRlZCBidXQgaXQgc2VlbXMgdW51c3VhbC4gSXQgd291bGQgYmUgdmFsdWFibGUgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIGl0IGlzIGEgcG90ZW50aWFsIG9wdGltaXphdGlvbiwgb3IgaWYgb25lIGNhbGxzIHRoZSBvdGhlci4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1NzAsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOToyMDoxNi43NjcyMzEwOTJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Nzk3NDU2NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX21tdV9mYXVsdGluX3BmblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ2MTM9c3RhdGljIHZvaWQga3ZtX21tdV9maW5pc2hfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ2MTktXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0NjIwOnN0YXRpYyBpbnQga3ZtX21tdV9mYXVsdGluX3Bmbl9nbWVtKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ2MjEtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fcGFnZV9mYXVsdCAqZmF1bHQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ2NDItXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0NjQzOnN0YXRpYyBpbnQgX19rdm1fbW11X2ZhdWx0aW5fcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ2NDQtXFx0XFx0XFx0XFx0IHN0cnVjdCBrdm1fcGFnZV9mYXVsdCAqZmF1bHQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ2NDgtXFx0aWYgKGZhdWx0LVxcdTAwM2Vpc19wcml2YXRlIHx8IGt2bV9tZW1zbG90X2lzX2dtZW1fb25seShmYXVsdC1cXHUwMDNlc2xvdCkpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0NjQ5OlxcdFxcdHJldHVybiBrdm1fbW11X2ZhdWx0aW5fcGZuX2dtZW0odmNwdSwgZmF1bHQpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDY1MC1cXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDY4Ny1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ2ODg6c3RhdGljIGludCBrdm1fbW11X2ZhdWx0aW5fcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ2ODktXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBrdm1fcGFnZV9mYXVsdCAqZmF1bHQsIHVuc2lnbmVkIGludCBhY2Nlc3MpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ3ODEtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0NzgyOlxcdHJldCA9IF9fa3ZtX21tdV9mYXVsdGluX3Bmbih2Y3B1LCBmYXVsdCk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NzgzLVxcdGlmIChyZXQgIT0gUkVUX1BGX0NPTlRJTlVFKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz00ODQwPXN0YXRpYyBpbnQgZGlyZWN0X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQgKmZhdWx0KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00ODU4LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDg1OTpcXHRyID0ga3ZtX21tdV9mYXVsdGluX3Bmbih2Y3B1LCBmYXVsdCwgQUNDX0FMTCk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00ODYwLVxcdGlmIChyICE9IFJFVF9QRl9DT05USU5VRSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NDkzNT1zdGF0aWMgaW50IGt2bV90ZHBfbW11X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00OTUwLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDk1MTpcXHRyID0ga3ZtX21tdV9mYXVsdGluX3Bmbih2Y3B1LCBmYXVsdCwgQUNDX0FMTCk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00OTUyLVxcdGlmIChyICE9IFJFVF9QRl9DT05USU5VRSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmg9MjI2PXN0cnVjdCBrdm1fcGFnZV9mYXVsdCB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oLTI3OC1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oOjI3OTpcXHQvKiBPdXRwdXRzIG9mIGt2bV9tbXVfZmF1bHRpbl9wZm4oKS4gICovXFxuYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaC0yODAtXFx0dW5zaWduZWQgbG9uZyBtbXVfc2VxO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9wYWdpbmdfdG1wbC5oPTgwND1zdGF0aWMgaW50IEZOQU1FKHBhZ2VfZmF1bHQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9wYWdlX2ZhdWx0ICpmYXVsdClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnaW5nX3RtcGwuaC04NDEtXFxuYXJjaC94ODYva3ZtL21tdS9wYWdpbmdfdG1wbC5oOjg0MjpcXHRyID0ga3ZtX21tdV9mYXVsdGluX3Bmbih2Y3B1LCBmYXVsdCwgd2Fsa2VyLnB0ZV9hY2Nlc3MpO1xcbmFyY2gveDg2L2t2bS9tbXUvcGFnaW5nX3RtcGwuaC04NDMtXFx0aWYgKHIgIT0gUkVUX1BGX0NPTlRJTlVFKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOToyMDoxOC40NDY5ODE5NjRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM4OTQyNjcyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEtWTSBNZW1vcnkgTWFuYWdlbWVudCAtIEluaXRpYWwgVGhvdWdodHMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHNwb3R0ZWQgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSB3aXRoIGBrdm1fZ21lbV9nZXRfcGZuYC4gSXQncyByZWFjaGFibGUgZnJvbSBLVk0gcGFnZSBmYXVsdHMgd2hlbiBgZ3Vlc3RfbWVtZmRgIGlzIGluIHVzZSwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFRoZSBrZXkgZnVuY3Rpb25zIHRvIGludmVzdGlnYXRlIGFyZTogYGt2bV9nbWVtX2dldF9wZm5gLCBkZWZpbml0ZWx5LiBBbHNvLCBJJ2xsIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IGBzZXZfaGFuZGxlX3JtcF9mYXVsdGAsIGFuZCBmb3IgQVJNNjQsIGBrdm1faGFuZGxlX2d1ZXN0X2Fib3J0YC4gVGhlbiwgb24geDg2LCBga3ZtX21tdV9kb19wYWdlX2ZhdWx0YCBsb29rcyBsaWtlIGEgZ29vZCBlbnRyeSBwb2ludCB0byB0cmFjZSBmcm9tLiBBY3R1YWxseSwgd2FpdCAtIGBrdm1fZ21lbV9nZXRfcGZuYCBpcyAqdGhlKiBBUEkgZnVuY3Rpb24sIHNvIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuXG5cbkknbGwgY2hlY2sgYGt2bV9nbWVtX2dldF9wZm5gIGluIGB2aXJ0L2t2bS9ndWVzdF9tZW1mZC5jYCBmaXJzdC4gVGhlbiBJJ2xsIGNoZWNrIGBzZXZfaGFuZGxlX3JtcF9mYXVsdGAgaW4gYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgLiBBbmQgSSBzaG91bGQgYWxzbyBjb25zaWRlciBga3ZtX3RyYW5zbGF0ZV92bmNyYCwgd2hpY2ggaXMgaW4gYGFyY2gvYXJtNjQva3ZtL25lc3RlZC5jYCB0byBzZWUgaWYgdGhlcmUncyBzaW1pbGFyIGxvZ2ljIHRoZXJlLlxuXG5UbyBiZSBwcmVjaXNlLCBJIHdpbGwgZm9jdXMgb24gdGhlc2Uga2V5IGZ1bmN0aW9uczpcblxuKiAgIGBrdm1fZ21lbV9nZXRfcGZuYFxuKiAgIGBzZXZfaGFuZGxlX3JtcF9mYXVsdGBcbiogICBga3ZtX3RyYW5zbGF0ZV92bmNyYFxuXG5XYWl0LCBga3ZtX3RyYW5zbGF0ZV92bmNyYCBpcyBzdGF0aWMsIHdoaWNoIG1ha2VzIG1lIHdvbmRlciBpZiBpdCdzIGlubGluZWQuIEkgbmVlZCB0byBiZSBzdXJlIHRvIGNoZWNrIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTEwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjIwOjI1LjgzNjQxMjI0M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwODMzNjA5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fdHJhbnNsYXRlX3ZuY3JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MTQwNz1zdGF0aWMgdTY0IHJlYWRfdm5jcl9lbDIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTQxMS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxNDEyOnN0YXRpYyBpbnQga3ZtX3RyYW5zbGF0ZV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCAqaXNfZ21lbSlcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNDEzLXtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTE1NDI9aW50IGt2bV9oYW5kbGVfdm5jcl9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNTY3LVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjE1Njg6XFx0cmV0ID0ga3ZtX3RyYW5zbGF0ZV92bmNyKHZjcHUsIFxcdTAwMjZpc19nbWVtKTtcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNTY5LVxcdGlmIChyZXQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6MjA6MjcuNDQ0NzU0OTY5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwODg1MTY1MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB3aGF0IEknbSBsb29raW5nIGF0LCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipEZWJ1Z2dpbmcgS1ZNL1NFVi1TTlAgSW50ZXJhY3Rpb25zKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHNvbWUgS1ZNIGNvZGUgYW5kIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgdmlydHVhbCBOTUkgaGFuZGxpbmcgZm9yIFNFVi1TTlAuIFRoZSBga3ZtX2hhbmRsZV92bmNyX2Fib3J0YCBmdW5jdGlvbiBpcyB0aGUgY3J1Y2lhbCBlbnRyeSBwb2ludCBmb3IgYGt2bV90cmFuc2xhdGVfdm5jcmAsIHdoaWNoIGlzIHdoZXJlIEknbGwgYmVnaW4gbXkgaW52ZXN0aWdhdGlvbi4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBgZ21lbV9hYm9ydGAgZnVuY3Rpb24uIEkga25vdyBpdCdzIGludm9rZWQgYnkgYGt2bV9oYW5kbGVfZ3Vlc3RfYWJvcnRgLCB3aGljaCBpcyBsaWtlbHkgd2hlcmUgdGhlIGFib3J0IHNpZ25hbCBpcyBvcmlnaW5hdGluZyBmcm9tLiBJIHN1c3BlY3QgdGhlIGlzc3VlIGNvdWxkIGJlIHJlbGF0ZWQgdG8gbWVtb3J5IGFjY2VzcyBpc3N1ZXMgb3Igc29tZSBraW5kIG9mIGd1ZXN0LXNpZGUgaW50ZXJydXB0aW9uIG9yIGV4Y2VwdGlvbiB0aGF0J3MgdHJpZ2dlcmluZyB0aGUgYWJvcnQuIE5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgYF9fc2V2X3NucF9yZWxvYWRfdm1zYWAgYW5kIHRoZSBmbG93IHRoYXQgaW52b2tlcyBpdCDigJMgaXQgYXBwZWFycyB0byBiZSBjYWxsZWQgYnkgYHNldl9zbnBfcmVsb2FkX3Ztc2FgIG9yIGEgcmVsYXRlZCBmdW5jdGlvbiwgd2hpY2ggc3VnZ2VzdHMgYSBwb3NzaWJsZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBWTSBzdGF0ZSBzYXZlL3Jlc3RvcmUgbWVjaGFuaXNtIGR1cmluZyBhbiBTRVYtU05QIHByb3RlY3RlZCBvcGVyYXRpb24uIE15IGh5cG90aGVzaXMgaXMgdGhhdCB0aGVyZSBtaWdodCBiZSBhIHByb2JsZW0gd2l0aCB0aGUgd2F5IHdlJ3JlIGhhbmRsaW5nIHRoZSBWTVNBIHJlbG9hZCwgcG9zc2libHkgYSByYWNlIGNvbmRpdGlvbiBvciBhIHN0YXRlIG1pc21hdGNoIHRoYXQncyB0cmlnZ2VyaW5nIHRoZSBhYm9ydC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cgdGhyb3VnaCBhbGwgb2YgdGhlc2UgY2FsbHMgdG8gZnVsbHkgdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA4MiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjIwOjMyLjUzMzI3Mzk5NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxNTgxNTYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3Nldl9zbnBfcmVsb2FkX3Ztc2FcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0zOTg4PXN0YXRpYyBpbnQgc25wX2JlZ2luX3BzYyhzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDAyNy1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQwMjg6c3RhdGljIHZvaWQgX19zZXZfc25wX3JlbG9hZF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDAyOS17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQwOTk9c3RhdGljIHZvaWQgc2V2X3NucF9pbml0X3Byb3RlY3RlZF9ndWVzdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQxMTctXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0MTE4OlxcdF9fc2V2X3NucF9yZWxvYWRfdm1zYSh2Y3B1LCBncGEpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDExOS1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDEzMD12b2lkIHNldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00MTM1LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDEzNjpcXHRfX3Nldl9zbnBfcmVsb2FkX3Ztc2EodmNwdSwgc2V2X2VzLVxcdTAwM2VzbnBfZ3Vlc3Rfdm1zYV9ncGEpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDEzNy19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjIwOjM0LjI0OTA5NjI0NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjExMDIxMTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgTm9uLVN0YXRpYyBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBjb2RlLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgYHNldl9zbnBfcmVsb2FkX3Ztc2FgIGlzIHRoZSBub24tc3RhdGljIGVudHJ5IHBvaW50LiBUaGF0J3MgbXkgc3RhcnRpbmcgcG9pbnQuIE5vdywgSSBuZWVkIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgZWxzZSBpcyBleHBvc2VkLiBMZXQncyBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZCBhbmQgbGlzdCBvdXQgdGhlIG90aGVyIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIHNvIEkgY2FuIHNlZSB0aGUgc2NvcGUgb2Ygd2hhdCB3ZSdyZSB3b3JraW5nIHdpdGggaGVyZS5cblxuQWxyaWdodCwgaGVyZSdzIHdoYXQgSSd2ZSBnb3Q6XG5cbiogICBga3ZtX2dtZW1fZ2V0X3BmbmBcbiogICBgc2V2X2hhbmRsZV9ybXBfZmF1bHRgXG4qICAgYHNldl9zbnBfcmVsb2FkX3Ztc2FgXG4qICAgYGt2bV9oYW5kbGVfdm5jcl9hYm9ydGBcbiogICBga3ZtX2hhbmRsZV9ndWVzdF9hYm9ydGAgKHNwZWNpZmljYWxseSBmb3IgQVJNNjQsIG5vdGVkKVxuKiAgIEFuZCBmaW5hbGx5LCBga3ZtX21tdV9kb19wYWdlX2ZhdWx0YCAoZm9yIHg4NikuIEhtbS4uLiBga3ZtX21tdV9kb19wYWdlX2ZhdWx0YC4uLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQ7IEknbSBiZXR0aW5nIHRoYXQncyBlaXRoZXIgYSBtYWNybyBvciBhIGZ1bmN0aW9uLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGlzIGlzIGEgbWFjcm8gb3IgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTA1LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjIwOjM5LjQ2MDEyMDI1M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4NjMyNTc0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fbW11X2RvX3BhZ2VfZmF1bHRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL21tdS9tbXUuYz00OTcwPXN0YXRpYyBpbnQga3ZtX3RkcF9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9wYWdlX2ZhdWx0ICpmYXVsdClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDk3OS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ5ODA6c3RhdGljIGludCBrdm1fbW11X2RvX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDk4MS1cXHRcXHRcXHRcXHQgdTY0IGVyciwgYm9vbCBwcmVmZXRjaCwgaW50ICplbXVsYXRpb25fdHlwZSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NTA0NT1zdGF0aWMgaW50IGt2bV90ZHBfcGFnZV9wcmVmYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTA2NC1cXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUwNjU6XFx0XFx0ciA9IGt2bV9tbXVfZG9fcGFnZV9mYXVsdCh2Y3B1LCBncGEsIGVycm9yX2NvZGUsIHRydWUsIE5VTEwsIGxldmVsKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUwNjYtXFx0fSB3aGlsZSAociA9PSBSRVRfUEZfUkVUUlkpO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz01MTM1PXZvaWQga3ZtX2FyY2hfYXN5bmNfcGFnZV9yZWFkeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fYXN5bmNfcGYgKndvcmspXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUxNTMtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MTU0OlxcdHIgPSBrdm1fbW11X2RvX3BhZ2VfZmF1bHQodmNwdSwgd29yay1cXHUwMDNlY3IyX29yX2dwYSwgd29yay1cXHUwMDNlYXJjaC5lcnJvcl9jb2RlLFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTE1NS1cXHRcXHRcXHRcXHQgIHRydWUsIE5VTEwsIE5VTEwpO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz02NTY3PWludCBub2lubGluZSBrdm1fbW11X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLCB1NjQgZXJyb3JfY29kZSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjYwMi1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjY2MDM6XFx0XFx0ciA9IGt2bV9tbXVfZG9fcGFnZV9mYXVsdCh2Y3B1LCBjcjJfb3JfZ3BhLCBlcnJvcl9jb2RlLCBmYWxzZSxcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY2MDQtXFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2ZW11bGF0aW9uX3R5cGUsIE5VTEwpO1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02NjIzLVxcdC8qXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2NjI0OlxcdCAqIE5vbmUgb2YgaGFuZGxlX21taW9fcGFnZV9mYXVsdCgpLCBrdm1fbW11X2RvX3BhZ2VfZmF1bHQoKSwgb3JcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY2MjUtXFx0ICoga3ZtX21tdV93cml0ZV9wcm90ZWN0X2ZhdWx0KCkgcmV0dXJuIFJFVF9QRl9DT05USU5VRS5cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjY2MjY6XFx0ICoga3ZtX21tdV9kb19wYWdlX2ZhdWx0KCkgb25seSB1c2VzIFJFVF9QRl9DT05USU5VRSBpbnRlcm5hbGx5IHRvXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02NjI3LVxcdCAqIGluZGljYXRlIGNvbnRpbnVpbmcgdGhlIHBhZ2UgZmF1bHQgaGFuZGxpbmcgdW50aWwgdG8gdGhlIGZpbmFsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oPTIyNj1zdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQge1xcbmFyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmg6MjI3OlxcdC8qIGFyZ3VtZW50cyB0byBrdm1fbW11X2RvX3BhZ2VfZmF1bHQuICAqL1xcbmFyY2gveDg2L2t2bS9tbXUvbW11X2ludGVybmFsLmgtMjI4LVxcdGNvbnN0IGdwYV90IGFkZHI7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oLTI5NC0gKiBSZXR1cm4gdmFsdWVzIG9mIGhhbmRsZV9tbWlvX3BhZ2VfZmF1bHQoKSwgbW11LnBhZ2VfZmF1bHQoKSwgZmFzdF9wYWdlX2ZhdWx0KCksXFxuYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaDoyOTU6ICogYW5kIG9mIGNvdXJzZSBrdm1fbW11X2RvX3BhZ2VfZmF1bHQoKS5cXG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oLTI5Ni0gKlxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaD0zMTI9ZW51bSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oLTMyNS0gKiAgIFxcXCJURVNUICVyYXgsICVyYXgsIEpOWlxcXCIsIGFzIGFsbCBcXFwic3RvcCFcXFwiIHZhbHVlcyBhcmUgbm9uLXplcm8sXFxuYXJjaC94ODYva3ZtL21tdS9tbXVfaW50ZXJuYWwuaDozMjY6ICogLSBrdm1fbW11X2RvX3BhZ2VfZmF1bHQoKSB0byByZXR1cm4gb3RoZXIgUkVUX1BGXyogYXMgYSBwb3NpdGl2ZSB2YWx1ZS5cXG5hcmNoL3g4Ni9rdm0vbW11L21tdV9pbnRlcm5hbC5oLTMyNy0gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6MjA6NDEuMDQ2NDYwNjdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI2OTI3MzMzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHg4NiBQYWdlIEZhdWx0IEhhbmRsZXIqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gYGt2bV9tbXVfcGFnZV9mYXVsdGAsIHdoaWNoIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgaGFuZGxpbmcgcGFnZSBmYXVsdHMgb24geDg2LCB0aGUgY29yZSBvZiB0aGUgaXNzdWUuIFRoYXQgaW1tZWRpYXRlbHkgcG9pbnRzIG1lIHRvIGEgc3BlY2lmaWMgc2V0IG9mIGZ1bmN0aW9ucyBJIG5lZWQgdG8gc2NydXRpbml6ZSBtb3JlIGNsb3NlbHk6IGBrdm1fZ21lbV9nZXRfcGZuYCwgYHNldl9oYW5kbGVfcm1wX2ZhdWx0YCwgYHNldl9zbnBfcmVsb2FkX3Ztc2FgLCBga3ZtX2hhbmRsZV92bmNyX2Fib3J0YCwgYGt2bV9oYW5kbGVfZ3Vlc3RfYWJvcnRgLCBhbmQgb2YgY291cnNlLCB0aGUgaGFuZGxlciBpdHNlbGYsIGBrdm1fbW11X3BhZ2VfZmF1bHRgLiBUaGVzZSBhcmUgdGhlIGtleSBwbGF5ZXJzIGluIHRoaXMgZmF1bHQgaGFuZGxpbmcgc2NlbmFyaW8uXG5cbk15IGZpcnN0IGNoZWNrIGlzIHRvIHZlcmlmeSBpZiBga3ZtX2dtZW1fZ2V0X3BmbmAgaXMgc3RhdGljIG9yIGV4cG9ydGVkLiBBaCwgZ29vZCwgaXQncyBub24tc3RhdGljIGFuZCByZXNpZGVzIHdpdGhpbiBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2AsIG1lYW5pbmcgSSBjYW4gcmVhZGlseSBhY2Nlc3MgYW5kIGV4YW1pbmUgaXQuXG5cbk5vdywgbGV0J3MgY2lyY2xlIGJhY2sgdG8gdGhlIGNvbmZpZ3VyYXRpb25zIHN1cnJvdW5kaW5nIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMuIEkgc2VlIHRoYXQgYEtWTV9HVUVTVF9NRU1GRGAgaXMgc2VsZWN0ZWQgZm9yIGJvdGggQVJNNjQgYW5kIHg4Nl82NCwgYnV0IGl0J3Mgbm90IGEgdXNlci1zZWxlY3RhYmxlIG9wdGlvbiwgd2hpY2ggaXMgaW1wb3J0YW50IHRvIHJlbWVtYmVyLiBJdCdzIGFjdHVhbGx5IHNlbGVjdGVkIHRocm91Z2ggYEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTYCwgb3IgYEtWTV9TV19QUk9URUNURURfVk1gLCBvciBqdXN0IGBLVk1gIGl0c2VsZiBmb3IgdGhvc2UgYXJjaGl0ZWN0dXJlcy4gSSBuZWVkIHRvIG5vdyBkZXRlcm1pbmUgaWYgYEtWTV9TV19QUk9URUNURURfVk1gIGlzIGEgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24sIGFzIHRoaXMgd291bGQgaW1wYWN0IG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSdzIGJlaGF2aW9yIGFuZCB0aGlzIHBhZ2UgZmF1bHQncyBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzY0OSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOToyMDo0Ny4zMTU3MzY2MzFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzI1ODYzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9Njk9Y29uZmlnIEtWTV9XRVJST1JcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOToyMDo0OS4wNDgzMjkxOTFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE1NTQxODI2MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDpcblxuKipFeGFtaW5pbmcgS1ZNIGFuZCBHdWVzdCBNZW1vcnkgUHJvdGVjdGlvbiBvbiB4ODYqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBndWVzdCBtZW1vcnkgaXMgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgeDg2IGFyY2hpdGVjdHVyZSBhbmQgS1ZNLiBJJ20gZm9jdXNpbmcgb24gc29mdHdhcmUtcHJvdGVjdGVkIFZNcywgYW5kIEkgc2VlIHRoYXQgYEtWTV9TV19QUk9URUNURURfVk1gIGlzIHRoZSBmbGFnIHRoYXQgZW5hYmxlcyBgZ3Vlc3RfbWVtZmRgIGZvciB0aGVzZSBWTXMuIEJ1dCB0aGVuIEknbSB0aGlua2luZywgaXNuJ3QgYEtWTV9HVUVTVF9NRU1GRGAgYWxyZWFkeSBpbXBsaWNpdGx5IHNlbGVjdGVkIGJ5IGBLVk1fWDg2YCBpZiB3ZSdyZSBvbiBgWDg2XzY0YD8gVGhhdCBzZWVtcyBwb3RlbnRpYWxseSByZWR1bmRhbnQgb3IgbWF5YmUgdGhlcmUncyBhIHNwZWNpZmljIG51YW5jZSBJJ20gbWlzc2luZy4gVGltZSB0byBnbyByaWdodCB0byB0aGUgc291cmNlLiBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgdGhlIHg4NiBhcmNoaXRlY3R1cmUsIHNwZWNpZmljYWxseSBgYXJjaC94ODYva3ZtL0tjb25maWdgLCB0byBjbGFyaWZ5IHRoZSBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyAqcmVhbGx5KiBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0MjAsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOToyMTowMC42MDI1MTUzMzdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDQ0NjcyMzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IEtWTV9HVUVTVF9NRU1GRFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2t2bS9LY29uZmlnPTIwPW1lbnVjb25maWcgS1ZNXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTM4LVxcdHNlbGVjdCBHVUVTVF9QRVJGX0VWRU5UUyBpZiBQRVJGX0VWRU5UU1xcbmFyY2gvYXJtNjQva3ZtL0tjb25maWc6Mzk6XFx0c2VsZWN0IEtWTV9HVUVTVF9NRU1GRFxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctNDAtXFx0aGVscFxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MjA9Y29uZmlnIEtWTV9YODZcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTQ5LVxcdHNlbGVjdCBLVk1fV0VSUk9SIGlmIFdFUlJPUlxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjUwOlxcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkQgaWYgWDg2XzY0XFxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjIxOjAyLjI0Njk5MTMxMVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTAyMzYyMDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktWTSBDb25maWd1cmF0aW9uIGZvciBTRVYqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGl0IHNlZW1zIHRoYXQgaWYgd2UncmUgb24gYW4geDg2LTY0IHN5c3RlbSwgYEtWTV9HVUVTVF9NRU1GRGAgaXMgYXV0b21hdGljYWxseSBpbmNsdWRlZCBieSBgS1ZNX1g4NmAuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MuIFdlIGNhbiBhc3N1bWUgdGhhdCBpZiBgWDg2XzY0YCBpcyBzZXQgY29ycmVjdGx5LCB0aGVuIGBLVk1fR1VFU1RfTUVNRkRgIHdpbGwgYmUgY29uZmlndXJlZCBhcyBwYXJ0IG9mIHRoZSBleGlzdGluZyBgS1ZNX1g4NmAgY29uZmlndXJhdGlvbi5cblxuVGhlcmVmb3JlLCBmb3IgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSB0byB3b3JrLCB3ZSByZWFsbHkganVzdCBuZWVkIGBLVk1gIGVuYWJsZWQsIGFuZCB0aGVuIGBLVk1fQU1EYCBhcyB0aGF0IHNlZW1zIHRvIGJlIHRoZSBjcml0aWNhbCBkZXBlbmRlbmN5IGZvciBvdXIgQU1EIGhhcmR3YXJlLlxuXG5Ob3csIHRoZSBuZXh0IHRoaW5nIHRvIHZlcmlmeSBpcyB0aGF0IGBLVk1fQU1EX1NFVmAgaXMgYWxzbyBwcm9wZXJseSBjb25maWd1cmVkIGFuZCBlbmFibGVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIFNFVi1zcGVjaWZpYyBwaWVjZXMgYXJlIGFsc28gdGFrZW4gY2FyZSBvZiBwcm9wZXJseS4gTGV0J3MgZGlnIGludG8gdGhhdCBhbmQgY29uZmlybSB0aGUgYEtWTV9BTURfU0VWYCBzZXR0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDk0OCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjIxOjA4LjM0OTM1NjcxOVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5Nzg1NDE2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0FNRF9TRVZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTQ2PWNvbmZpZyBLVk1fQU1EXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOToyMToxMC4wNDcyMTYzOVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDkzMjQ5MDMzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBUaG91Z2h0IFByb2Nlc3Mgb24gS1ZNIENvbmZpZ3VyYXRpb24gYW5kIEZ1bmN0aW9uIFNlbGVjdGlvbioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgb3B0aW1hbCBjb25maWd1cmF0aW9uIGFuZCBrZXkgZnVuY3Rpb25zIHRvIGluY2x1ZGUgaGVyZS4gYEtWTV9BTURfU0VWYCBpcyBkZWZpbml0ZWx5IGEgZ29vZCBjaG9pY2UsIGFuZCBvZiBjb3Vyc2UsIHRoZSBiYXNlIGBLVk1gIGNvbmZpZ3VyYXRpb24gaXRzZWxmLlxuXG5TbywgbGV0J3MgbGlzdCB0aG9zZSBvdXQ6XG5Db25maWdzOlxuLSBgS1ZNYFxuLSBgS1ZNX0FNRF9TRVZgXG5cbldhaXQsIGp1c3QgdG8gY2xhcmlmeSwgYEtWTWAgd2lsbCBjb3ZlciBBUk02NCwgc28gdGhhdCdzIGFsbCBJIG5lZWQgdGhlcmUuXG5cbk5vdywgbGV0J3MgbW92ZSBvbiB0byB0aGUgZnVuY3Rpb25zLiBJJ3ZlIGdvdCBhIGZldzogYGt2bV9nbWVtX2dldF9wZm5gLCBgc2V2X2hhbmRsZV9ybXBfZmF1bHRgLCBgc2V2X3NucF9yZWxvYWRfdm1zYWAsIGBrdm1faGFuZGxlX3ZuY3JfYWJvcnRgLCBga3ZtX2hhbmRsZV9ndWVzdF9hYm9ydGAsIGFuZCBga3ZtX21tdV9wYWdlX2ZhdWx0YC5cblxuSG1tLCBob2xkIG9uLiBJIHJlbWVtYmVyIHRoZSBpbnN0cnVjdGlvbnMsIFwiQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXCIgUmlnaHQsIGBrdm1faGFuZGxlX2d1ZXN0X2Fib3J0YCBhbmQgYGt2bV9tbXVfcGFnZV9mYXVsdGAgYXJlICp2ZXJ5KiBob3QgcGF0aHMsIHNvIHRob3NlIGFyZSBvdXQuXG5cbk9rYXksIGxldCdzIHJlLWV2YWx1YXRlLiBJIGNhbiBsaXN0IHRoZSByZW1haW5pbmcgZnVuY3Rpb25zOiBga3ZtX2dtZW1fZ2V0X3BmbmAsIGBzZXZfaGFuZGxlX3JtcF9mYXVsdGAsIGBzZXZfc25wX3JlbG9hZF92bXNhYCwgYGt2bV9oYW5kbGVfdm5jcl9hYm9ydGAuIFRob3NlIHNob3VsZCBiZSBzcGVjaWZpYyBlbm91Z2guXG5cbk5vdywgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgdGhvc2UgcmVtYWluaW5nIGZ1bmN0aW9ucyBhcmVuJ3Qgb3Zlcmx5IGdlbmVyYWwuIGBrdm1faGFuZGxlX3ZuY3JfYWJvcnRgIGhhbmRsZXMgbmVzdGVkIHZpcnR1YWxpemF0aW9uIFZOQ1IgYWJvcnRzIOKAkyB0aGF0J3Mgc3BlY2lmaWMuIGBzZXZfaGFuZGxlX3JtcF9mYXVsdGAgaGFuZGxlcyBSTVAgZmF1bHRzLCBhbHNvIG5vdCBhIGdlbmVyaWMgaG90IHBhdGguIGBzZXZfc25wX3JlbG9hZF92bXNhYCBpcyBmb3IgU0VWLVNOUCBWTVNBIHJlbG9hZCwgYWdhaW4sIHNwZWNpZmljLiBBbmQgYGt2bV9nbWVtX2dldF9wZm5gIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIEkgbW9kaWZpZWQsIGNhbGxlZCB3aGVuIGZhdWx0aW5nIGluIGd1ZXN0X21lbWZkIHBhZ2VzLiBJdCdzIHBlcmZlY3RseSBzcGVjaWZpYyB0byB0aGF0LlxuXG5TbywgbXkgZmluYWwgRm9jdXNTeW1ib2xzIHNob3VsZCBiZTpcblxuLSBga3ZtX2dtZW1fZ2V0X3BmbmBcbi0gYHNldl9oYW5kbGVfcm1wX2ZhdWx0YFxuLSBgc2V2X3NucF9yZWxvYWRfdm1zYWBcbi0gYGt2bV9oYW5kbGVfdm5jcl9hYm9ydGBcblxuTGV0IG1lIGp1c3QgcXVpY2tseSBjaGVjayB0aGF0IGBrdm1fZ21lbV9nZXRfcGZuYCBpcyBleHBvcnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzNjUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6MjE6MjAuOTc5NzA5MzU1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjkzNTk5NzQ0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MX0dQTFxcXFwoa3ZtX2dtZW1fZ2V0X3BmblxcXFwpXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOToyMToyMy4yNzMzMTc5MTlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgyOTIwODAyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqRXhhbWluaW5nIHRoZSBHdWVzdCBNZW1mZCBJbXBsZW1lbnRhdGlvbiBpbiBLVk0qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY2x1ZSBpcyB0aGF0IHdoYXRldmVyIHRoaXMgcmVsYXRlcyB0byBpc24ndCAqZXhwb3J0ZWQqLCB3aGljaCBpcyBpbXBvcnRhbnQgY29udGV4dC4gVGhlIGZhY3QgdGhhdCBpdCdzICpub24tc3RhdGljKiBpbiBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2AgaXMgc2lnbmlmaWNhbnQuIFRoYXQgc3Ryb25nbHkgc3VnZ2VzdHMgaXQncyBhIGZpbGUsIGJ1dCBzb21ldGhpbmcgbG9jYWwgdG8gdGhlIEtWTSB2aXJ0dWFsaXNhdGlvbiwgYW5kIHRoZXJlJ3MgZGVmaW5pdGVseSBzb21lIGxvY2FsIHZhcmlhYmxlIGludGVyYWN0aW9uIHRoZXJlLiBNeSBpbW1lZGlhdGUgYWN0aW9uIGlzIHRvIGRpdmUgaW50byBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBub24tc3RhdGljIGVsZW1lbnQgaXMsIGhvdyBpdCdzIGJlaW5nIHVzZWQsIGFuZCB3aGF0IGl0cyByZWxhdGlvbnNoaXAgaXMgdG8gYW55IGV4dGVybmFsIGludGVyZmFjZXMsIGNvbnNpZGVyaW5nIGl0J3Mgbm90IGV4cG9ydGVkLiBUaW1lIHRvIGdvIHNwZWx1bmtpbmcgaW4gdGhlIGNvZGUhIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgZ29pbmcgb24gaW4gdGhhdCBzcGVjaWZpYyBmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjQ1MCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjIxOjI4LjEwMjUyODYzNloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1OTkxNTk1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQga3ZtX2dtZW1fZ2V0X3BmblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MjU4MT1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX21lbV9pc19wcml2YXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKVxcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI1ODctI2lmZGVmIENPTkZJR19LVk1fR1VFU1RfTUVNRkRcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MjU4ODppbnQga3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI1ODktXFx0XFx0ICAgICBnZm5fdCBnZm4sIGt2bV9wZm5fdCAqcGZuLCBpbnQgKm1heF9vcmRlcik7XFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI1OTAtI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MjU5MTpzdGF0aWMgaW5saW5lIGludCBrdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBrdm0gKmt2bSxcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjU5Mi1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LCBnZm5fdCBnZm4sXFxuLS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jPTcxNz1zdGF0aWMgc3RydWN0IGZvbGlvICpfX2t2bV9nbWVtX2dldF9wZm4oc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTc1Mi1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjc1MzppbnQga3ZtX2dtZW1fZ2V0X3BmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy03NTQtXFx0XFx0ICAgICBnZm5fdCBnZm4sIGt2bV9wZm5fdCAqcGZuLCBpbnQgKm1heF9vcmRlcilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6MjE6MjkuNzYyNDQ5ODc5WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4OTM0MjEzNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBhIGdsb2JhbCBmdW5jdGlvbiwgZ290IGl0LiBMZXQgbWUgc2VlLi4uIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYEtWTWAgYW5kIGBLVk1fQU1EX1NFVmAuIEhtbSwgYnV0IHdhaXQgYSBzZWNvbmQuIEkgdGhpbmsgYEtWTV9TV19QUk9URUNURURfVk1gIGNvdWxkIGFjdHVhbGx5IGJlIGluY3JlZGlibHkgdXNlZnVsIGZvciB0ZXN0aW5nIGBndWVzdF9tZW1mZGAgb24geDg2IGFyY2hpdGVjdHVyZXMsIGV2ZW4gd2l0aG91dCBTRVYgb3IgVERYLiBUaGF0IHdvdWxkIG9wZW4gdXAgYSB3aG9sZSBuZXcgYXZlbnVlIGZvciBleHBlcmltZW50YXRpb24gYW5kIHZhbGlkYXRpb24uXG5cblJpZ2h0LCBzbyBsZXQncyBhZGQgYEtWTV9TV19QUk9URUNURURfVk1gIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGFjdHVhbGx5IGEgdmFsaWQgY29uZmlnLCB0aG91Z2guIEdvdHRhIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgYSByZWNvZ25pemVkIGFuZCBzdXBwb3J0ZWQgb3B0aW9uIGJlZm9yZSBJIGdldCB0b28gY2FycmllZCBhd2F5LiBJIGRvbid0IHdhbnQgdG8gY2hhc2UgYSBkZWFkIGVuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcxMzIsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6MjE6MzUuNjU1ODczMzk3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkwODE3NTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTY5PWNvbmZpZyBLVk1fV0VSUk9SXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6MjE6MzcuMzQ2Njk3NjY5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwOTcyNzI2MDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBQYXRjaCoqXG5cbk9rYXksIHllcywgSSd2ZSBnb3QgaXQuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UuIFNvLCB0aGUga2V5IGhlcmUgaXMgdGhlc2UgRW5hYmxlQ29uZmlnczogYEtWTWAsIGBLVk1fQU1EX1NFVmAsIGFuZCBgS1ZNX1NXX1BST1RFQ1RFRF9WTWAuIFRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IGFsdGVycyBob3cgYGt2bV9nbWVtX2dldF9wZm5gIGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCBpdCdzIGRpdGNoaW5nIHRoZSBgc3RydWN0IHBhZ2UgKipwYWdlYCBhcmd1bWVudCBhbmQsIGNydWNpYWxseSwgaXQncyBkcm9wcGluZyB0aGUgZm9saW8gcmVmZXJlbmNlIHByaW9yIHRvIHJldHVybmluZy4gSSBjYW4gaW1tZWRpYXRlbHkgc2VlIHRoZSBpbXBsaWNhdGlvbnMuXG5cblRoaXMgYWZmZWN0cyBob3cgS1ZNIG1hbmFnZXMgbWVtb3J5IGJhY2tpbmcgc3BlY2lmaWNhbGx5IGZvciBgZ3Vlc3RfbWVtZmRgLiBBbmQgd2UgYWxsIGtub3cgYGd1ZXN0X21lbWZkYCBpcyBmb3VuZGF0aW9uYWwgZm9yIGNvbmZpZGVudGlhbCBjb21wdXRpbmcuIFdlJ3JlIHRhbGtpbmcgU0VWLVNOUCwgVERYLCBhbmQgQVJNIENDQSDigJMgYWxsIG9mIHRoZSBiaWcgcGxheWVycy4gVGhlIGNoYW5nZXMgYXJlIHRyaWdnZXJlZCB0aHJvdWdoIEtWTSBpb2N0bHMgYW5kIHBhZ2UgZmF1bHRzIHdoZW4gdXRpbGl6aW5nIGBndWVzdF9tZW1mZGAuIEkgbmVlZCB0byBlbnN1cmUgdGhpcyBpcyBoYW5kbGVkIGNvcnJlY3RseS4gTGV0J3MgY2FsbCBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc1NDQsIk91dHB1dFRva2VucyI6MTk2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA5OjIxOjQ4LjMxOTQyNTg2MloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MTkxNTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9BTURfU0VWXCIsXG4gICAgXCJLVk1fU1dfUFJPVEVDVEVEX1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2dtZW1fZ2V0X3BmblwiLFxuICAgIFwic2V2X2hhbmRsZV9ybXBfZmF1bHRcIixcbiAgICBcInNldl9zbnBfcmVsb2FkX3Ztc2FcIixcbiAgICBcImt2bV9oYW5kbGVfdm5jcl9hYm9ydFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIHNpZ25hdHVyZSBhbmQgYmVoYXZpb3Igb2YgYGt2bV9nbWVtX2dldF9wZm5gIGJ5IHJlbW92aW5nIHRoZSBgc3RydWN0IHBhZ2UgKipwYWdlYCBhcmd1bWVudCBhbmQgZHJvcHBpbmcgdGhlIGZvbGlvIHJlZmVyZW5jZSBiZWZvcmUgcmV0dXJuaW5nLiBUaGlzIGFmZmVjdHMgaG93IEtWTSBoYW5kbGVzIG1lbW9yeSBiYWNraW5nIGZvciBndWVzdF9tZW1mZCwgd2hpY2ggaXMgYSBjb3JlIGZlYXR1cmUgZm9yIGNvbmZpZGVudGlhbCBjb21wdXRpbmcgKFNFVi1TTlAsIFREWCwgQVJNIENDQSkuIFRoZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIHBhZ2UgZmF1bHRzIHdoZW4gdXNpbmcgZ3Vlc3RfbWVtZmQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fQU1EX1NFVlwiLFxuICAgIFwiS1ZNX1NXX1BST1RFQ1RFRF9WTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9nbWVtX2dldF9wZm5cIixcbiAgICBcInNldl9oYW5kbGVfcm1wX2ZhdWx0XCIsXG4gICAgXCJzZXZfc25wX3JlbG9hZF92bXNhXCIsXG4gICAgXCJrdm1faGFuZGxlX3ZuY3JfYWJvcnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIHRoZSBzaWduYXR1cmUgYW5kIGJlaGF2aW9yIG9mIGBrdm1fZ21lbV9nZXRfcGZuYCBieSByZW1vdmluZyB0aGUgYHN0cnVjdCBwYWdlICoqcGFnZWAgYXJndW1lbnQgYW5kIGRyb3BwaW5nIHRoZSBmb2xpbyByZWZlcmVuY2UgYmVmb3JlIHJldHVybmluZy4gVGhpcyBhZmZlY3RzIGhvdyBLVk0gaGFuZGxlcyBtZW1vcnkgYmFja2luZyBmb3IgZ3Vlc3RfbWVtZmQsIHdoaWNoIGlzIGEgY29yZSBmZWF0dXJlIGZvciBjb25maWRlbnRpYWwgY29tcHV0aW5nIChTRVYtU05QLCBURFgsIEFSTSBDQ0EpLiBUaGUgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBwYWdlIGZhdWx0cyB3aGVuIHVzaW5nIGd1ZXN0X21lbWZkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOToyMTo0OC4zOTM2MjM2MDlaIiwiU2VxIjozMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzAzNjEzMTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6MjE6NDguMzk0MTE1NzY5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE1NzAzMTE3NjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgYGt2bV9nbWVtX2dldF9wZm4oKWAgdG8gcmVtb3ZlIHRoZSBgc3RydWN0IHBhZ2UgKipwYWdlYCBhcmd1bWVudCBhbmQgZHJvcHMgdGhlIGFzc29jaWF0ZWQgcGFnZSByZWZlcmVuY2UgY291bnRpbmcgKGBrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2VgLCBga3ZtX3JlbGVhc2VfcGFnZV9jbGVhbmAsIGV0Yy4pIGFjcm9zcyBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzIChhcm02NCwgeDg2KS4gVGhpcyBpcyBhIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCByZWZjb3VudGluZyBjaGFuZ2UuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgYW5kIG5vIGluZm8tbGVha3MuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2Ugd291bGQgbGlrZWx5IGJlIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDAwZmNlYWU0MTBjMDU0MTA1ZWU2ZTk2YTM3YjQxNjYxZTNlMmExYmZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAwOToxOTo0MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL21tdS5jIGIvYXJjaC9hcm02NC9rdm0vbW11LmNcbmluZGV4IDliYTg2NDUwZmU0YWYuLmQ1N2Y4MTgxZjFiN2QgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9tbXUuY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vbW11LmNcbkBAIC0xNjEzLDcgKzE2MTMsNiBAQCBzdGF0aWMgaW50IGdtZW1fYWJvcnQoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKVxuIFx0ZW51bSBrdm1fcGd0YWJsZV9wcm90IHByb3QgPSBLVk1fUEdUQUJMRV9QUk9UX1I7XG4gXHRzdHJ1Y3Qga3ZtX3BndGFibGUgKnBndCA9IHMyZmQtXHUwMDNldmNwdS1cdTAwM2VhcmNoLmh3X21tdS1cdTAwM2VwZ3Q7XG4gXHR1bnNpZ25lZCBsb25nIG1tdV9zZXE7XG4tXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcdHN0cnVjdCBrdm0gKmt2bSA9IHMyZmQtXHUwMDNldmNwdS1cdTAwM2Vrdm07XG4gXHR2b2lkICptZW1jYWNoZSA9IE5VTEw7XG4gXHRrdm1fcGZuX3QgcGZuO1xuQEAgLTE2NDEsNyArMTY0MCw3IEBAIHN0YXRpYyBpbnQgZ21lbV9hYm9ydChjb25zdCBzdHJ1Y3Qga3ZtX3MyX2ZhdWx0X2Rlc2MgKnMyZmQpXG4gXHQvKiBQYWlycyB3aXRoIHRoZSBzbXBfd21iKCkgaW4ga3ZtX21tdV9pbnZhbGlkYXRlX2VuZCgpLiAqL1xuIFx0c21wX3JtYigpO1xuIFxuLVx0cmV0ID0ga3ZtX2dtZW1fZ2V0X3Bmbihrdm0sIHMyZmQtXHUwMDNlbWVtc2xvdCwgZ2ZuLCBcdTAwMjZwZm4sIFx1MDAyNnBhZ2UsIE5VTEwpO1xuK1x0cmV0ID0ga3ZtX2dtZW1fZ2V0X3Bmbihrdm0sIHMyZmQtXHUwMDNlbWVtc2xvdCwgZ2ZuLCBcdTAwMjZwZm4sIE5VTEwpO1xuIFx0aWYgKHJldCkge1xuIFx0XHRrdm1fcHJlcGFyZV9tZW1vcnlfZmF1bHRfZXhpdChzMmZkLVx1MDAzZXZjcHUsIHMyZmQtXHUwMDNlZmF1bHRfaXBhLCBQQUdFX1NJWkUsXG4gXHRcdFx0XHRcdCAgICAgIHdyaXRlX2ZhdWx0LCBleGVjX2ZhdWx0LCBmYWxzZSk7XG5AQCAtMTY4MSw3ICsxNjgwLDYgQEAgc3RhdGljIGludCBnbWVtX2Fib3J0KGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZClcbiBcdH1cbiBcbiBvdXRfdW5sb2NrOlxuLVx0a3ZtX3JlbGVhc2VfZmF1bHRpbl9wYWdlKGt2bSwgcGFnZSwgISFyZXQsIHByb3QgXHUwMDI2IEtWTV9QR1RBQkxFX1BST1RfVyk7XG4gXHRrdm1fZmF1bHRfdW5sb2NrKGt2bSk7XG4gXG4gXHRpZiAoKHByb3QgXHUwMDI2IEtWTV9QR1RBQkxFX1BST1RfVykgXHUwMDI2XHUwMDI2ICFyZXQpXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMgYi9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuY1xuaW5kZXggMTcxMjNmMGI2ZGFiYS4uZGQ2Mjg0MGQzNjc0MSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jXG4rKysgYi9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuY1xuQEAgLTE0MTUsNyArMTQxNSw3IEBAIHN0YXRpYyBpbnQga3ZtX3RyYW5zbGF0ZV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCAqaXNfZ21lbSlcbiBcdGJvb2wgd3JpdGVfZmF1bHQsIHdyaXRhYmxlO1xuIFx0dW5zaWduZWQgbG9uZyBtbXVfc2VxO1xuIFx0c3RydWN0IHZuY3JfdGxiICp2dDtcbi1cdHN0cnVjdCBwYWdlICpwYWdlO1xuK1x0c3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMO1xuIFx0dTY0IHZhLCBwZm4sIGdmbjtcbiBcdGludCByZXQ7XG4gXG5AQCAtMTQ3MSw3ICsxNDcxLDcgQEAgc3RhdGljIGludCBrdm1fdHJhbnNsYXRlX3ZuY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sICppc19nbWVtKVxuIFx0XHRcdHJldHVybiAtRUZBVUxUO1xuIFx0XHR9XG4gXHR9IGVsc2Uge1xuLVx0XHRyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKHZjcHUtXHUwMDNla3ZtLCBtZW1zbG90LCBnZm4sIFx1MDAyNnBmbiwgXHUwMDI2cGFnZSwgTlVMTCk7XG4rXHRcdHJldCA9IGt2bV9nbWVtX2dldF9wZm4odmNwdS1cdTAwM2Vrdm0sIG1lbXNsb3QsIGdmbiwgXHUwMDI2cGZuLCBOVUxMKTtcbiBcdFx0aWYgKHJldCkge1xuIFx0XHRcdGt2bV9wcmVwYXJlX21lbW9yeV9mYXVsdF9leGl0KHZjcHUsIHZ0LVx1MDAzZXdyLnBhLCBQQUdFX1NJWkUsXG4gXHRcdFx0XHRcdCAgICAgIHdyaXRlX2ZhdWx0LCBmYWxzZSwgZmFsc2UpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG5pbmRleCAwNjRlY2MzM2I5MjY3Li45NDdjOWNkODQzNDUwIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuKysrIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuQEAgLTQ2MjgsNyArNDYyOCw3IEBAIHN0YXRpYyBpbnQga3ZtX21tdV9mYXVsdGluX3Bmbl9nbWVtKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdH1cbiBcbiBcdHIgPSBrdm1fZ21lbV9nZXRfcGZuKHZjcHUtXHUwMDNla3ZtLCBmYXVsdC1cdTAwM2VzbG90LCBmYXVsdC1cdTAwM2VnZm4sIFx1MDAyNmZhdWx0LVx1MDAzZXBmbixcbi1cdFx0XHQgICAgIFx1MDAyNmZhdWx0LVx1MDAzZXJlZmNvdW50ZWRfcGFnZSwgXHUwMDI2bWF4X29yZGVyKTtcbitcdFx0XHQgICAgIFx1MDAyNm1heF9vcmRlcik7XG4gXHRpZiAocikge1xuIFx0XHRrdm1fbW11X3ByZXBhcmVfbWVtb3J5X2ZhdWx0X2V4aXQodmNwdSwgZmF1bHQpO1xuIFx0XHRyZXR1cm4gcjtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuaW5kZXggNTcwNTcyM2YxZjQxMi4uMGE4ODdmOGUwNWQzYSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbkBAIC00MDMyLDcgKzQwMzIsNiBAQCBzdGF0aWMgdm9pZCBfX3Nldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEpXG4gXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbiBcdGdmbl90IGdmbiA9IGdwYV90b19nZm4oZ3BhKTtcbiBcdHVuc2lnbmVkIGxvbmcgbW11X3NlcTtcbi1cdHN0cnVjdCBwYWdlICpwYWdlO1xuIFx0a3ZtX3Bmbl90IHBmbjtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2c3ZtLVx1MDAzZXNldl9lcy5zbnBfdm1zYV9tdXRleCk7XG5AQCAtNDA3Niw3ICs0MDc1LDcgQEAgc3RhdGljIHZvaWQgX19zZXZfc25wX3JlbG9hZF92bXNhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhKVxuIFx0ICogVGhlIG5ldyBWTVNBIHdpbGwgYmUgcHJpdmF0ZSBtZW1vcnkgZ3Vlc3QgbWVtb3J5LCBzbyByZXRyaWV2ZSB0aGVcbiBcdCAqIFBGTiBmcm9tIHRoZSBnbWVtIGJhY2tlbmQuXG4gXHQgKi9cbi1cdGlmIChrdm1fZ21lbV9nZXRfcGZuKHZjcHUtXHUwMDNla3ZtLCBzbG90LCBnZm4sIFx1MDAyNnBmbiwgXHUwMDI2cGFnZSwgTlVMTCkpXG4rXHRpZiAoa3ZtX2dtZW1fZ2V0X3Bmbih2Y3B1LVx1MDAzZWt2bSwgc2xvdCwgZ2ZuLCBcdTAwMjZwZm4sIE5VTEwpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRyZWFkX2xvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbkBAIC00MDkyLDggKzQwOTEsNiBAQCBzdGF0aWMgdm9pZCBfX3Nldl9zbnBfcmVsb2FkX3Ztc2Eoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEpXG4gXHRlbHNlXG4gXHRcdHN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2wudm1zYV9wYSA9IHBmbl90b19ocGEocGZuKTtcbiBcdHJlYWRfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4tXG4tXHRrdm1fcmVsZWFzZV9wYWdlX2NsZWFuKHBhZ2UpO1xuIH1cbiBcbiAvKlxuQEAgLTUwMTksNyArNTAxNiw3IEBAIHZvaWQgc2V2X2hhbmRsZV9ybXBfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHU2NCBlcnJvcl9jb2RlKVxuIFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdDtcbiBcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXHUwMDNla3ZtO1xuIFx0aW50IG9yZGVyLCBybXBfbGV2ZWwsIHJldDtcbi1cdHN0cnVjdCBwYWdlICpwYWdlO1xuK1x0dW5zaWduZWQgbG9uZyBtbXVfc2VxO1xuIFx0Ym9vbCBhc3NpZ25lZDtcbiBcdGt2bV9wZm5fdCBwZm47XG4gXHRnZm5fdCBnZm47XG5AQCAtNTA0Niw3ICs1MDQzLDEwIEBAIHZvaWQgc2V2X2hhbmRsZV9ybXBfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHU2NCBlcnJvcl9jb2RlKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRyZXQgPSBrdm1fZ21lbV9nZXRfcGZuKGt2bSwgc2xvdCwgZ2ZuLCBcdTAwMjZwZm4sIFx1MDAyNnBhZ2UsIFx1MDAyNm9yZGVyKTtcbitcdG1tdV9zZXEgPSBrdm0tXHUwMDNlbW11X2ludmFsaWRhdGVfc2VxO1xuK1x0c21wX3JtYigpO1xuK1xuK1x0cmV0ID0ga3ZtX2dtZW1fZ2V0X3Bmbihrdm0sIHNsb3QsIGdmbiwgXHUwMDI2cGZuLCBcdTAwMjZvcmRlcik7XG4gXHRpZiAocmV0KSB7XG4gXHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCJTRVY6IFVuZXhwZWN0ZWQgUk1QIGZhdWx0LCBubyBiYWNraW5nIHBhZ2UgZm9yIHByaXZhdGUgR1BBIDB4JWxseFxcblwiLFxuIFx0XHRcdFx0ICAgIGdwYSk7XG5AQCAtNTA1NSw5ICs1MDU1LDEzIEBAIHZvaWQgc2V2X2hhbmRsZV9ybXBfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHU2NCBlcnJvcl9jb2RlKVxuIFxuIFx0cmV0ID0gc25wX2xvb2t1cF9ybXBlbnRyeShwZm4sIFx1MDAyNmFzc2lnbmVkLCBcdTAwMjZybXBfbGV2ZWwpO1xuIFx0aWYgKHJldCB8fCAhYXNzaWduZWQpIHtcbi1cdFx0cHJfd2Fybl9yYXRlbGltaXRlZChcIlNFVjogVW5leHBlY3RlZCBSTVAgZmF1bHQsIG5vIGFzc2lnbmVkIFJNUCBlbnRyeSBmb3VuZCBmb3IgR1BBIDB4JWxseCBQRk4gMHglbGx4IGVycm9yICVkXFxuXCIsXG4tXHRcdFx0XHQgICAgZ3BhLCBwZm4sIHJldCk7XG4tXHRcdGdvdG8gb3V0X25vX3RyYWNlO1xuK1x0XHRndWFyZChyZWFkX2xvY2spKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4rXG4rXHRcdGlmICghbW11X2ludmFsaWRhdGVfcmV0cnlfZ2ZuKGt2bSwgbW11X3NlcSwgZ2ZuKSlcbitcdFx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwiU0VWOiBVbmV4cGVjdGVkIFJNUCBmYXVsdCwgbm8gYXNzaWduZWQgUk1QIGVudHJ5IGZvdW5kIGZvciBHUEEgMHglbGx4IFBGTiAweCVsbHggZXJyb3IgJWRcXG5cIixcbitcdFx0XHRcdFx0ICAgIGdwYSwgcGZuLCByZXQpO1xuK1xuK1x0XHRyZXR1cm47XG4gXHR9XG4gXG4gXHQvKlxuQEAgLTUwODUsMjYgKzUwODksMzEgQEAgdm9pZCBzZXZfaGFuZGxlX3JtcF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgdTY0IGVycm9yX2NvZGUpXG4gXHRpZiAocm1wX2xldmVsID09IFBHX0xFVkVMXzRLKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdHJldCA9IHNucF9ybXB0YWJsZV9wc21hc2gocGZuKTtcbi1cdGlmIChyZXQpIHtcbi1cdFx0Lypcbi1cdFx0ICogTG9vayBpdCB1cCBhZ2Fpbi4gSWYgaXQncyA0SyBub3cgdGhlbiB0aGUgUFNNQVNIIG1heSBoYXZlXG4tXHRcdCAqIHJhY2VkIHdpdGggYW5vdGhlciBwcm9jZXNzIGFuZCB0aGUgaXNzdWUgaGFzIGFscmVhZHkgcmVzb2x2ZWRcbi1cdFx0ICogaXRzZWxmLlxuLVx0XHQgKi9cbi1cdFx0aWYgKCFzbnBfbG9va3VwX3JtcGVudHJ5KHBmbiwgXHUwMDI2YXNzaWduZWQsIFx1MDAyNnJtcF9sZXZlbCkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBhc3NpZ25lZCBcdTAwMjZcdTAwMjYgcm1wX2xldmVsID09IFBHX0xFVkVMXzRLKVxuK1x0c2NvcGVkX2d1YXJkKHJlYWRfbG9jaywgXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKSB7XG4rXHRcdGlmIChtbXVfaW52YWxpZGF0ZV9yZXRyeV9nZm4oa3ZtLCBtbXVfc2VxLCBnZm4pKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFxuLVx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwiU0VWOiBVbmFibGUgdG8gc3BsaXQgUk1QIGVudHJ5IGZvciBHUEEgMHglbGx4IFBGTiAweCVsbHggcmV0ICVkXFxuXCIsXG4tXHRcdFx0XHQgICAgZ3BhLCBwZm4sIHJldCk7XG4rXHRcdHJldCA9IHNucF9ybXB0YWJsZV9wc21hc2gocGZuKTtcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogTG9vayBpdCB1cCBhZ2Fpbi4gSWYgaXQncyA0SyBub3cgdGhlbiB0aGUgUFNNQVNIIG1heVxuK1x0XHRcdCAqIGhhdmUgcmFjZWQgd2l0aCBhbm90aGVyIHByb2Nlc3MgYW5kIHRoZSBpc3N1ZSBoYXNcbitcdFx0XHQgKiBhbHJlYWR5IHJlc29sdmVkIGl0c2VsZi4gSWYgaXQncyBub3QgYXNzaWduZWQsIHRoZW5cbitcdFx0XHQgKiB0aGlzIG11c3QgaGF2ZSByYWNlZCB3aXRoIGFub3RoZXIgcHJvY2VzcyB0aGF0IG1hZGVcbitcdFx0XHQgKiB0aGlzIHBhZ2Ugc2hhcmVkLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmICghc25wX2xvb2t1cF9ybXBlbnRyeShwZm4sIFx1MDAyNmFzc2lnbmVkLCBcdTAwMjZybXBfbGV2ZWwpIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICAoKGFzc2lnbmVkIFx1MDAyNlx1MDAyNiBybXBfbGV2ZWwgPT0gUEdfTEVWRUxfNEspIHx8ICFhc3NpZ25lZCkpXG4rXHRcdFx0XHRnb3RvIG91dDtcbitcbitcdFx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwiU0VWOiBVbmFibGUgdG8gc3BsaXQgUk1QIGVudHJ5IGZvciBHUEEgMHglbGx4IFBGTiAweCVsbHggcmV0ICVkXFxuXCIsXG4rXHRcdFx0XHRcdCAgICBncGEsIHBmbiwgcmV0KTtcbitcdFx0fVxuIFx0fVxuIFxuIFx0a3ZtX3phcF9nZm5fcmFuZ2Uoa3ZtLCBnZm4sIGdmbiArIFBUUlNfUEVSX1BNRCk7XG4gb3V0OlxuIFx0dHJhY2Vfa3ZtX3JtcF9mYXVsdCh2Y3B1LCBncGEsIHBmbiwgZXJyb3JfY29kZSwgcm1wX2xldmVsLCByZXQpO1xuLW91dF9ub190cmFjZTpcbi1cdGt2bV9yZWxlYXNlX3BhZ2VfdW51c2VkKHBhZ2UpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBpc19wZm5fcmFuZ2Vfc2hhcmVkKGt2bV9wZm5fdCBzdGFydCwga3ZtX3Bmbl90IGVuZClcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbmluZGV4IDAzYmZjOTI4NjRiNmUuLjUwMjQ2NTExOWNhMGMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbisrKyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuQEAgLTI1ODYsMTMgKzI1ODYsMTEgQEAgc3RhdGljIGlubGluZSBib29sIGt2bV9tZW1faXNfcHJpdmF0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbilcbiBcbiAjaWZkZWYgQ09ORklHX0tWTV9HVUVTVF9NRU1GRFxuIGludCBrdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbi1cdFx0ICAgICBnZm5fdCBnZm4sIGt2bV9wZm5fdCAqcGZuLCBzdHJ1Y3QgcGFnZSAqKnBhZ2UsXG4tXHRcdCAgICAgaW50ICptYXhfb3JkZXIpO1xuK1x0XHQgICAgIGdmbl90IGdmbiwga3ZtX3Bmbl90ICpwZm4sIGludCAqbWF4X29yZGVyKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgaW50IGt2bV9nbWVtX2dldF9wZm4oc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRcdFx0ICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwgZ2ZuX3QgZ2ZuLFxuLVx0XHRcdFx0ICAga3ZtX3Bmbl90ICpwZm4sIHN0cnVjdCBwYWdlICoqcGFnZSxcbi1cdFx0XHRcdCAgIGludCAqbWF4X29yZGVyKVxuK1x0XHRcdFx0ICAga3ZtX3Bmbl90ICpwZm4sIGludCAqbWF4X29yZGVyKVxuIHtcbiBcdEtWTV9CVUdfT04oMSwga3ZtKTtcbiBcdHJldHVybiAtRUlPO1xuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXG5pbmRleCBiNTk2NDg2ZDE4NGNhLi41ODk3NjIxNDBjM2VmIDEwMDY0NFxuLS0tIGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuKysrIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuQEAgLTc1MSw4ICs3NTEsNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX2t2bV9nbWVtX2dldF9wZm4oc3RydWN0IGZpbGUgKmZpbGUsXG4gfVxuIFxuIGludCBrdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbi1cdFx0ICAgICBnZm5fdCBnZm4sIGt2bV9wZm5fdCAqcGZuLCBzdHJ1Y3QgcGFnZSAqKnBhZ2UsXG4tXHRcdCAgICAgaW50ICptYXhfb3JkZXIpXG4rXHRcdCAgICAgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgKnBmbiwgaW50ICptYXhfb3JkZXIpXG4ge1xuIFx0cGdvZmZfdCBpbmRleCA9IGt2bV9nbWVtX2dldF9pbmRleChzbG90LCBnZm4pO1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbkBAIC03ODAsMTEgKzc3OSw3IEBAIGludCBrdm1fZ21lbV9nZXRfcGZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbiAjZW5kaWZcbiBcbiBcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4tXG4tXHRpZiAoIXIpXG4tXHRcdCpwYWdlID0gZm9saW9fZmlsZV9wYWdlKGZvbGlvLCBpbmRleCk7XG4tXHRlbHNlXG4tXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4rXHRmb2xpb19wdXQoZm9saW8pO1xuIFxuIFx0cmV0dXJuIHI7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDk6MjE6NDguMzk0MTE2NDc4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1NzAzMDk4NDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmFjdG9yaW5nIEtWTSBHdWVzdCBNZW1vcnkgUGFnZSBIYW5kbGluZyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSByZWZhY3RvcmluZyBob3cgS1ZNIG1hbmFnZXMgZ3Vlc3QgbWVtb3J5IHBhZ2VzLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYGt2bV9nbWVtX2dldF9wZm4oKWAgaXMgdGhlIHRhcmdldCwgc3BlY2lmaWNhbGx5IHRoZSByZW1vdmFsIG9mIHRoZSBgc3RydWN0IHBhZ2UgKipwYWdlYCBhcmd1bWVudC4gVGhpcyBpbXBhY3RzIHNldmVyYWwgYXJjaGl0ZWN0dXJlcyAoYXJtNjQsIHg4NikuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgaWRlYSBpcyB0byBjaGFuZ2UgaG93IHRoZSBwYWdlIHJlZmVyZW5jZSBpcyBoYW5kbGVkLCBtb3ZpbmcgYXdheSBmcm9tIHJldHVybmluZyBpdCBkaXJlY3RseSBmcm9tIGBrdm1fZ21lbV9nZXRfcGZuKClgIGFuZCBpbnN0ZWFkIHVzaW5nIGBmb2xpb19wdXQoZm9saW8pO2Agd2l0aGluIHRoZSBmdW5jdGlvbiBpdHNlbGYuIFRoaXMgbGlrZWx5IG1lYW5zIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucyBubyBsb25nZXIgbmVlZCB0byBleHBsaWNpdGx5IHJlbGVhc2UgdGhlIHBhZ2UuXG5cbk15IHByaW1hcnkgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gV2l0aCB0aGlzIGtpbmQgb2YgY2hhbmdlLCBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyB1bmludGVuZGVkIGluZm9ybWF0aW9uIGxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBhcyBhIHJlc3VsdCBvZiB0aGUgcmVmYWN0b3JpbmcuIExvb2tpbmcgYXQgdGhlIGNoYW5nZXMsIHRoZXJlIGFyZW4ndCBhbnkgbmV3IHN0cnVjdHVyZXMgYmVpbmcgc2VudCB0byB1c2Vyc3BhY2UuIFRoZXJlJ3Mgbm8gaW5kaWNhdGlvbiBvZiBhbnkgbmV3IGFsbG9jYXRpb25zIHRoYXQgbWlnaHQgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhpcyBpcyBzcXVhcmVseSBhIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCByZWZjb3VudGluZyBjaGFuZ2UuIFRoZSBtb3N0IGxpa2VseSByaXNrcyBhcmUgdXNlLWFmdGVyLWZyZWUgb3IgcmVmY291bnQgYnVncywgc28gdGhpcyBpcyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMuIEknbSByZWx5aW5nIG9uIEtBU0FOIHRvIGNhdGNoIHRoZXNlLlxuXG5MZXQncyBkbyBhIHF1aWNrIGNvZGUgcmV2aWV3IG9mIHRoZSBkaWZmLiBUaGUgZnVuY3Rpb24gc2lnbmF0dXJlIGNoYW5nZXMgYXJlIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IHRoZSBgcGFnZWAgYXJndW1lbnQgaXMgZ29uZS4gT2theSwgSSBzZWUgd2hlcmUgdGhpcyBgcGFnZWAgYXJndW1lbnQgd2FzIHByZXZpb3VzbHkgYmVpbmcgcG9wdWxhdGVkLCBgZm9saW9fZmlsZV9wYWdlKGZvbGlvLCBpbmRleClgLiBOb3csIHRoYXQgY2FsbCBzaXRlIGlzIHJlcGxhY2VkIHdpdGggdGhlIGBmb2xpb19wdXQoZm9saW8pYCBjYWxsLiBUaGUgY29ycmVzcG9uZGluZyBga3ZtX3JlbGVhc2VfcGFnZV8qYCBjYWxscyBhcmUgZ29uZSwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2VlIHRoZXNlIGNoYW5nZXMgaW4gYGFyY2gvYXJtNjQva3ZtL21tdS5jYCwgYGFyY2gvYXJtNjQva3ZtL25lc3RlZC5jYCBhbmQgaW4gdmFyaW91cyB4ODYgZmlsZXMgc3VjaCBhcyBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AsIGFuZCBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AuXG5cbkEga2V5IHRoaW5nIGlzIHRoYXQgaW4geDg2LCB0aGVyZSB3YXMgYSBgZmF1bHQtXHUwMDNlcmVmY291bnRlZF9wYWdlYCB2YXJpYWJsZSB0aGF0IHdhcyBiZWluZyBwYXNzZWQuIEJ1dCBub3cgdGhlIGZ1bmN0aW9uIGRvZXNuJ3QgcmV0dXJuIHRoZSBwYWdlLCBzbyBpcyBgZmF1bHQtXHUwMDNlcmVmY291bnRlZF9wYWdlYCBwcm9wZXJseSBoYW5kbGVkPyBJZiBpdCdzIE5VTEwsIHRoZW4gdGhlIGBrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2VgIHdpbGwganVzdCBkbyBub3RoaW5nLCBzbyB0aGlzIGxvb2tzIHNhZmUsIGV2ZW4gaWYgaXQgbGVhZHMgdG8gYW4gaXNzdWUgaW4gdGVybXMgb2YgYSBsZWFrLiAgSXQgc2hvdWxkIGJlIGluaXRpYWxpemVkIHRvIE5VTEwgaW4gYGt2bV9tbXVfZG9fcGFnZV9mYXVsdGAuIE5vIGRlZXAgZGl2ZSBpcyBuZWNlc3NhcnkgaGVyZSwgZXZlbiBpZiBpdCBpbnRyb2R1Y2VzIGEgYnVnLCBpdCdzIGp1c3QgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3IgbWVtb3J5IGxlYWsgYW5kIEtBU0FOIHNob3VsZCBoYW5kbGUuIFRoZSBzYW1lIHRoaW5nIGZvciB0aGUgcmVzdCBvZiB0aGUgY2FzZXMgd2hlcmUgYGt2bV9yZWxlYXNlX3BhZ2VfKmAgY2FsbHMgd2VyZSByZW1vdmVkLlxuXG5GaW5hbGx5LCBsb29raW5nIGF0IGB2aXJ0L2t2bS9ndWVzdF9tZW1mZC5jYCwgaXQgY29uZmlybXMgdGhlIHJlZmFjdG9yaW5nIGlzIGFib3V0IGhvdyBgZ3Vlc3RfbWVtZmRgIG1hbmFnZXMgcGFnZSByZWZlcmVuY2VzLiBJbnN0ZWFkIG9mIGNoZWNraW5nIGlmIGByYCBhbmQgYXNzaWduaW5nIHRoZSBwYWdlLCB0aGUgcGF0Y2ggY2FsbHMgYGZvbGlvX3B1dChmb2xpbyk7YCBkaXJlY3RseS5cblxuT3ZlcmFsbCwgdGhpcyBpcyBhIGNsZWFuIHJlZmFjdG9yaW5nLCBzcGVjaWZpY2FsbHkgaW4gcGFnZSByZWZlcmVuY2UgY291bnRpbmcgZm9yIGd1ZXN0IG1lbW9yeSwgZXNwZWNpYWxseSBmb3IgYGd1ZXN0X21lbWZkYC4gVGhlcmUncyBubyBldmlkZW5jZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSBvciB1c2FnZSBmcm9tIHRoaXMgcGF0Y2guIEJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIEknbSBjb25maWRlbnQgS0FTQU4gYW5kIGttZW1sZWFrIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBpc3N1ZXMgcmVsYXRlZCB0byB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVha3MuIFNvLCBJIHdpbGwgc2V0IGBOZWVkc0tNU0FOPWZhbHNlYCBhbmQgcHJvdmlkZSB0aGUgcmVhc29uaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTg5LCJPdXRwdXRUb2tlbnMiOjE3OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwOToyMjowNC4wOTcyMTc1NDNaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBga3ZtX2dtZW1fZ2V0X3BmbigpYCB0byByZW1vdmUgdGhlIGBzdHJ1Y3QgcGFnZSAqKnBhZ2VgIGFyZ3VtZW50IGFuZCBkcm9wcyB0aGUgYXNzb2NpYXRlZCBwYWdlIHJlZmVyZW5jZSBjb3VudGluZyAoYGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZWAsIGBrdm1fcmVsZWFzZV9wYWdlX2NsZWFuYCwgZXRjLikgYWNyb3NzIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMgKGFybTY0LCB4ODYpLiBUaGlzIGlzIGEgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHJlZmNvdW50aW5nIGNoYW5nZS4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBhbmQgbm8gaW5mby1sZWFrcy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSB3b3VsZCBsaWtlbHkgYmUgdXNlLWFmdGVyLWZyZWUsIG1lbW9yeSBsZWFrcywgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGBrdm1fZ21lbV9nZXRfcGZuKClgIHRvIHJlbW92ZSB0aGUgYHN0cnVjdCBwYWdlICoqcGFnZWAgYXJndW1lbnQgYW5kIGRyb3BzIHRoZSBhc3NvY2lhdGVkIHBhZ2UgcmVmZXJlbmNlIGNvdW50aW5nIChga3ZtX3JlbGVhc2VfZmF1bHRpbl9wYWdlYCwgYGt2bV9yZWxlYXNlX3BhZ2VfY2xlYW5gLCBldGMuKSBhY3Jvc3MgbXVsdGlwbGUgYXJjaGl0ZWN0dXJlcyAoYXJtNjQsIHg4NikuIFRoaXMgaXMgYSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcmVmY291bnRpbmcgY2hhbmdlLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBubyBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIGFuZCBubyBpbmZvLWxlYWtzLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlIHdvdWxkIGxpa2VseSBiZSB1c2UtYWZ0ZXItZnJlZSwgbWVtb3J5IGxlYWtzLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBvdGhlciBzdGFuZGFyZCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow28dd2[1] Phase: Succeeded StartedAt: 2026-08-26 09:22:15 +0000 UTC FinishedAt: 2026-08-26 09:22:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28dd2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-26 09:22:15 +0000 UTC FinishedAt: 2026-08-26 09:22:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28dd2[2] Phase: Succeeded StartedAt: 2026-08-26 09:22:15 +0000 UTC FinishedAt: 2026-08-26 13:02:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28dd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"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_gmem_get_pfn","sev_handle_rmp_fault","sev_snp_reload_vmsa","kvm_handle_vncr_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"eaded774-8d60-493b-b78e-9d419d3c1540","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-26 09:22:15 +0000 UTC FinishedAt: 2026-08-26 13:02:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"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_gmem_get_pfn","sev_handle_rmp_fault","sev_snp_reload_vmsa","kvm_handle_vncr_abort"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"eaded774-8d60-493b-b78e-9d419d3c1540","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-workflow28dd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"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_gmem_get_pfn","sev_handle_rmp_fault","sev_snp_reload_vmsa","kvm_handle_vncr_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"eaded774-8d60-493b-b78e-9d419d3c1540","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-26 09:22:15 +0000 UTC FinishedAt: 2026-08-26 09:22:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28dd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"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_gmem_get_pfn","sev_handle_rmp_fault","sev_snp_reload_vmsa","kvm_handle_vncr_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"eaded774-8d60-493b-b78e-9d419d3c1540","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-26 09:22:15 +0000 UTC FinishedAt: 2026-08-26 09:22:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"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-workflow28dd2/series-workflow28dd2-convert-artifact-719658262/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow28dd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"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_gmem_get_pfn","sev_handle_rmp_fault","sev_snp_reload_vmsa","kvm_handle_vncr_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"eaded774-8d60-493b-b78e-9d419d3c1540","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-26 09:22:25 +0000 UTC FinishedAt: 2026-08-26 09:39:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28dd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"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_gmem_get_pfn","sev_handle_rmp_fault","sev_snp_reload_vmsa","kvm_handle_vncr_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"eaded774-8d60-493b-b78e-9d419d3c1540","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-26 09:22:25 +0000 UTC FinishedAt: 2026-08-26 09:39: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:*cfb29172-e364-497d-b58b-512df3c5ee7f,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-workflow28dd2/series-workflow28dd2-convert-artifact-719658262/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": "300ffc5d-92ad-4229-aced-f8769d50f720", "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-workflow28dd2/series-workflow28dd2-build-action-1405111468/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow28dd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"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_gmem_get_pfn","sev_handle_rmp_fault","sev_snp_reload_vmsa","kvm_handle_vncr_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"eaded774-8d60-493b-b78e-9d419d3c1540","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-26 09:22:25 +0000 UTC FinishedAt: 2026-08-26 09:39:07 +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:*cfb29172-e364-497d-b58b-512df3c5ee7f,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-workflow28dd2/series-workflow28dd2-convert-artifact-719658262/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": "300ffc5d-92ad-4229-aced-f8769d50f720", "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-workflow28dd2/series-workflow28dd2-build-action-1405111468/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow28dd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"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_gmem_get_pfn","sev_handle_rmp_fault","sev_snp_reload_vmsa","kvm_handle_vncr_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"eaded774-8d60-493b-b78e-9d419d3c1540","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-26 09:39:17 +0000 UTC FinishedAt: 2026-08-26 09:39:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28dd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"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_gmem_get_pfn","sev_handle_rmp_fault","sev_snp_reload_vmsa","kvm_handle_vncr_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"eaded774-8d60-493b-b78e-9d419d3c1540","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-26 09:39:17 +0000 UTC FinishedAt: 2026-08-26 09:39:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28dd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"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_gmem_get_pfn","sev_handle_rmp_fault","sev_snp_reload_vmsa","kvm_handle_vncr_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"eaded774-8d60-493b-b78e-9d419d3c1540","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-26 09:39:17 +0000 UTC FinishedAt: 2026-08-26 09:39:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28dd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"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_gmem_get_pfn","sev_handle_rmp_fault","sev_snp_reload_vmsa","kvm_handle_vncr_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"eaded774-8d60-493b-b78e-9d419d3c1540","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-26 09:39:17 +0000 UTC FinishedAt: 2026-08-26 09:39:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"eaded774-8d60-493b-b78e-9d419d3c1540","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-workflow28dd2/series-workflow28dd2-convert-artifact-440927401/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow28dd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"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_gmem_get_pfn","sev_handle_rmp_fault","sev_snp_reload_vmsa","kvm_handle_vncr_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"eaded774-8d60-493b-b78e-9d419d3c1540","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-26 09:39:27 +0000 UTC FinishedAt: 2026-08-26 09:41:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28dd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"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_gmem_get_pfn","sev_handle_rmp_fault","sev_snp_reload_vmsa","kvm_handle_vncr_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"eaded774-8d60-493b-b78e-9d419d3c1540","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-26 09:39:27 +0000 UTC FinishedAt: 2026-08-26 09:41:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*300ffc5d-92ad-4229-aced-f8769d50f720,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-workflow28dd2/series-workflow28dd2-build-action-1405111468/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-workflow28dd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"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_gmem_get_pfn","sev_handle_rmp_fault","sev_snp_reload_vmsa","kvm_handle_vncr_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"eaded774-8d60-493b-b78e-9d419d3c1540","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-26 09:41:30 +0000 UTC FinishedAt: 2026-08-26 09:41:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28dd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"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_gmem_get_pfn","sev_handle_rmp_fault","sev_snp_reload_vmsa","kvm_handle_vncr_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"eaded774-8d60-493b-b78e-9d419d3c1540","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-26 09:41:30 +0000 UTC FinishedAt: 2026-08-26 09:41:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28dd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"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_gmem_get_pfn","sev_handle_rmp_fault","sev_snp_reload_vmsa","kvm_handle_vncr_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"eaded774-8d60-493b-b78e-9d419d3c1540","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-26 09:41:30 +0000 UTC FinishedAt: 2026-08-26 09:57:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28dd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"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_gmem_get_pfn","sev_handle_rmp_fault","sev_snp_reload_vmsa","kvm_handle_vncr_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"eaded774-8d60-493b-b78e-9d419d3c1540","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-26 09:41:30 +0000 UTC FinishedAt: 2026-08-26 09:57:17 +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:*cfb29172-e364-497d-b58b-512df3c5ee7f,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-workflow28dd2/series-workflow28dd2-convert-artifact-440927401/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": "12c69371-849f-460e-8ee1-21a0511e74ac", "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-workflow28dd2/series-workflow28dd2-build-action-2297383301/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow28dd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"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_gmem_get_pfn","sev_handle_rmp_fault","sev_snp_reload_vmsa","kvm_handle_vncr_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"eaded774-8d60-493b-b78e-9d419d3c1540","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-26 09:41:30 +0000 UTC FinishedAt: 2026-08-26 09:57:07 +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:*cfb29172-e364-497d-b58b-512df3c5ee7f,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-workflow28dd2/series-workflow28dd2-convert-artifact-440927401/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": "12c69371-849f-460e-8ee1-21a0511e74ac", "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-workflow28dd2/series-workflow28dd2-build-action-2297383301/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow28dd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"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_gmem_get_pfn","sev_handle_rmp_fault","sev_snp_reload_vmsa","kvm_handle_vncr_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"eaded774-8d60-493b-b78e-9d419d3c1540","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-26 09:57:17 +0000 UTC FinishedAt: 2026-08-26 09:57:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28dd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"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_gmem_get_pfn","sev_handle_rmp_fault","sev_snp_reload_vmsa","kvm_handle_vncr_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"eaded774-8d60-493b-b78e-9d419d3c1540","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-26 09:57:17 +0000 UTC FinishedAt: 2026-08-26 09:57:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28dd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"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_gmem_get_pfn","sev_handle_rmp_fault","sev_snp_reload_vmsa","kvm_handle_vncr_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"eaded774-8d60-493b-b78e-9d419d3c1540","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-26 09:57:17 +0000 UTC FinishedAt: 2026-08-26 09:59:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28dd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"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_gmem_get_pfn","sev_handle_rmp_fault","sev_snp_reload_vmsa","kvm_handle_vncr_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"eaded774-8d60-493b-b78e-9d419d3c1540","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-26 09:57:17 +0000 UTC FinishedAt: 2026-08-26 09:59:00 +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:*12c69371-849f-460e-8ee1-21a0511e74ac,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-workflow28dd2/series-workflow28dd2-build-action-2297383301/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-workflow28dd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"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_gmem_get_pfn","sev_handle_rmp_fault","sev_snp_reload_vmsa","kvm_handle_vncr_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"eaded774-8d60-493b-b78e-9d419d3c1540","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-26 09:59:10 +0000 UTC FinishedAt: 2026-08-26 13:02:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28dd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"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_gmem_get_pfn","sev_handle_rmp_fault","sev_snp_reload_vmsa","kvm_handle_vncr_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"eaded774-8d60-493b-b78e-9d419d3c1540","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-26 09:59:10 +0000 UTC FinishedAt: 2026-08-26 13:02:29 +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_gmem_get_pfn","sev_handle_rmp_fault","sev_snp_reload_vmsa","kvm_handle_vncr_abort"],"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:*300ffc5d-92ad-4229-aced-f8769d50f720,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*12c69371-849f-460e-8ee1-21a0511e74ac,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-workflow28dd2/series-workflow28dd2-build-action-1405111468/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-workflow28dd2/series-workflow28dd2-build-action-2297383301/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow28dd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"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_gmem_get_pfn","sev_handle_rmp_fault","sev_snp_reload_vmsa","kvm_handle_vncr_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"eaded774-8d60-493b-b78e-9d419d3c1540","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-26 09:59:10 +0000 UTC FinishedAt: 2026-08-26 09:59:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28dd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"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_gmem_get_pfn","sev_handle_rmp_fault","sev_snp_reload_vmsa","kvm_handle_vncr_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"eaded774-8d60-493b-b78e-9d419d3c1540","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-26 09:59:10 +0000 UTC FinishedAt: 2026-08-26 09:59:15 +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_gmem_get_pfn","sev_handle_rmp_fault","sev_snp_reload_vmsa","kvm_handle_vncr_abort"],"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-workflow28dd2/series-workflow28dd2-convert-artifact-1741224446/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow28dd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"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_gmem_get_pfn","sev_handle_rmp_fault","sev_snp_reload_vmsa","kvm_handle_vncr_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"eaded774-8d60-493b-b78e-9d419d3c1540","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-26 09:59:10 +0000 UTC FinishedAt: 2026-08-26 09:59:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28dd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"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_gmem_get_pfn","sev_handle_rmp_fault","sev_snp_reload_vmsa","kvm_handle_vncr_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"eaded774-8d60-493b-b78e-9d419d3c1540","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-26 09:59:10 +0000 UTC FinishedAt: 2026-08-26 09:59:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28dd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"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_gmem_get_pfn","sev_handle_rmp_fault","sev_snp_reload_vmsa","kvm_handle_vncr_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"eaded774-8d60-493b-b78e-9d419d3c1540","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-26 09:59:10 +0000 UTC FinishedAt: 2026-08-26 09:59:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28dd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"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_gmem_get_pfn","sev_handle_rmp_fault","sev_snp_reload_vmsa","kvm_handle_vncr_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"eaded774-8d60-493b-b78e-9d419d3c1540","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-26 09:59:20 +0000 UTC FinishedAt: 2026-08-26 13:02:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow28dd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"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_gmem_get_pfn","sev_handle_rmp_fault","sev_snp_reload_vmsa","kvm_handle_vncr_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD_SEV","KVM_SW_PROTECTED_VM"],"series_id":"eaded774-8d60-493b-b78e-9d419d3c1540","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-26 09:59:20 +0000 UTC FinishedAt: 2026-08-26 13:02:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*300ffc5d-92ad-4229-aced-f8769d50f720,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*12c69371-849f-460e-8ee1-21a0511e74ac,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-workflow28dd2/series-workflow28dd2-build-action-1405111468/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-workflow28dd2/series-workflow28dd2-build-action-2297383301/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-workflow28dd2/series-workflow28dd2-convert-artifact-1741224446/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,}