Name: series-workflow8b87c Phase: Succeeded StartedAt: 2026-08-26 16:51:21 +0000 UTC FinishedAt: 2026-08-26 20:51:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8b87c[0] Phase: Succeeded StartedAt: 2026-08-26 16:51:21 +0000 UTC FinishedAt: 2026-08-26 17:04:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8b87c[0].run-triage Phase: Succeeded StartedAt: 2026-08-26 16:51:21 +0000 UTC FinishedAt: 2026-08-26 17:04:52 +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" ], "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" ], "series_id": "f9bde65e-70a3-49d7-ad87-48528c7b94bf" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_arch_vcpu_pre_fault_memory", "kvm_tdp_mmu_map_private_pfn" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkmIzM0OywKICAgICYjMzQ7a3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgTU1VIHJlbG9hZCBhbmQgY2FjaGUgdG9wLXVwIGZ1bmN0aW9ucyBpbnNpZGUgdGhlIHJldHJ5IGxvb3BzIGZvciBLVk0gcGFnZSBmYXVsdCBoYW5kbGluZyAoYGt2bV90ZHBfcGFnZV9wcmVmYXVsdGAgYW5kIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gKS4gVGhpcyBmaXhlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBhIGNvbmN1cnJlbnQgaW52YWxpZGF0aW9uIGNvdWxkIGNhdXNlIHRoZSBsb29wIHRvIHJldHJ5IHdpdGhvdXQgcmVsb2FkaW5nIHRoZSBNTVUgcm9vdCwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBhbiBvYnNvbGV0ZSByb290IGJlaW5nIHVzZWQuIFRoZSBgZmF1bHRgIHN0cnVjdHVyZSBpcyBmdWxseSB6ZXJvLWluaXRpYWxpemVkIGZvciBhbnkgdW5zcGVjaWZpZWQgZmllbGRzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBwYXRjaC4gQW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBhcmlzaW5nIGZyb20gb2Jzb2xldGUgcm9vdHMgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBLVk0gTU1VIHBhZ2UgZmF1bHQgaGFuZGxpbmcsIHNwZWNpZmljYWxseSBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBhbmQgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAuIEl0IG1vdmVzIE1NVSByZWxvYWQgYW5kIGNhY2hlIHRvcC11cCBvcGVyYXRpb25zIGluc2lkZSB0aGUgcmV0cnkgbG9vcCB0byBoYW5kbGUgY29uY3VycmVudCBpbnZhbGlkYXRpb25zIGNvcnJlY3RseS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIEtWTSBNTVUgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTY6NTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0ZGIwNmRhNGQwMWMwMjczYWY3OGQ3Yzg0NGEwY2QwYjc4NjM1OTBmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTY6NTM6NDAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbmluZGV4IDA2NGVjYzMzYjkyNjcuLjc5YzQ1MGQ2NzdiNDAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG5AQCAtNTA2MSw2ICYjNDM7NTA2MSwxMCBAQCBzdGF0aWMgaW50IGt2bV90ZHBfcGFnZV9wcmVmYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSxcbiBcdFx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfVk1fREVBRCwgdmNwdSkpXG4gXHRcdFx0cmV0dXJuIC1FSU87XG4gXG4mIzQzO1x0XHRyID0ga3ZtX21tdV9yZWxvYWQodmNwdSk7XG4mIzQzO1x0XHRpZiAocilcbiYjNDM7XHRcdFx0cmV0dXJuIHI7XG4mIzQzO1xuIFx0XHRjb25kX3Jlc2NoZWQoKTtcbiBcdFx0ciA9IGt2bV9tbXVfZG9fcGFnZV9mYXVsdCh2Y3B1LCBncGEsIGVycm9yX2NvZGUsIHRydWUsIE5VTEwsIGxldmVsKTtcbiBcdH0gd2hpbGUgKHIgPT0gUkVUX1BGX1JFVFJZKTtcbkBAIC01MTAxLDE0ICYjNDM7NTEwNSw2IEBAIGxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdGlmIChrdm1faXNfZ2ZuX2FsaWFzKHZjcHUtXHUwMDNla3ZtLCBncGFfdG9fZ2ZuKHJhbmdlLVx1MDAzZWdwYSkpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdC8qXG4tXHQgKiByZWxvYWQgaXMgZWZmaWNpZW50IHdoZW4gY2FsbGVkIHJlcGVhdGVkbHksIHNvIHdlIGNhbiBkbyBpdCBvblxuLVx0ICogZXZlcnkgaXRlcmF0aW9uLlxuLVx0ICovXG4tXHRyID0ga3ZtX21tdV9yZWxvYWQodmNwdSk7XG4tXHRpZiAocilcbi1cdFx0cmV0dXJuIHI7XG4tXG4gXHRkaXJlY3RfYml0cyA9IDA7XG4gXHRpZiAoa3ZtX2FyY2hfaGFzX3ByaXZhdGVfbWVtKHZjcHUtXHUwMDNla3ZtKSBcdTAwMjZcdTAwMjZcbiBcdCAgICBrdm1fbWVtX2lzX3ByaXZhdGUodmNwdS1cdTAwM2Vrdm0sIGdwYV90b19nZm4ocmFuZ2UtXHUwMDNlZ3BhKSkpXG5AQCAtNTIxMywxNCAmIzQzOzUyMDksNiBAQCBpbnQga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuKVxuIFx0aWYgKGt2bV9nZm5faXNfd3JpdGVfdHJhY2tlZChrdm0sIGZhdWx0LnNsb3QsIGZhdWx0LmdmbikpXG4gXHRcdHJldHVybiAtRVBFUk07XG4gXG4tXHRyID0ga3ZtX21tdV9yZWxvYWQodmNwdSk7XG4tXHRpZiAocilcbi1cdFx0cmV0dXJuIHI7XG4tXG4tXHRyID0gbW11X3RvcHVwX21lbW9yeV9jYWNoZXModmNwdSwgZmFsc2UpO1xuLVx0aWYgKHIpXG4tXHRcdHJldHVybiByO1xuLVxuIFx0ZG8ge1xuIFx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4gXHRcdFx0cmV0dXJuIC1FSU5UUjtcbkBAIC01MjI4LDEwICYjNDM7NTIxNiwzOCBAQCBpbnQga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuKVxuIFx0XHRpZiAoa3ZtX3Rlc3RfcmVxdWVzdChLVk1fUkVRX1ZNX0RFQUQsIHZjcHUpKVxuIFx0XHRcdHJldHVybiAtRUlPO1xuIFxuJiM0MztcdFx0ciA9IGt2bV9tbXVfcmVsb2FkKHZjcHUpO1xuJiM0MztcdFx0aWYgKHIpXG4mIzQzO1x0XHRcdHJldHVybiByO1xuJiM0MztcbiYjNDM7XHRcdHIgPSBtbXVfdG9wdXBfbWVtb3J5X2NhY2hlcyh2Y3B1LCBmYWxzZSk7XG4mIzQzO1x0XHRpZiAocilcbiYjNDM7XHRcdFx0cmV0dXJuIHI7XG4mIzQzO1xuIFx0XHRjb25kX3Jlc2NoZWQoKTtcbiBcbiBcdFx0Z3VhcmQocmVhZF9sb2NrKShcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuIFxuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEJlY2F1c2Ugc2xvdHNfbG9jayBpcyBoZWxkLCBpdCBzaG91bGQgYmUgaW1wb3NzaWJsZSBmb3IgKmFueSpcbiYjNDM7XHRcdCAqIHJvb3RzIHRvIGJlIGludmFsaWRhdGVkIGFmdGVyIHRoZSBpbml0aWFsIE1NVSByZWxvYWQuICBXQVJOLFxuJiM0MztcdFx0ICogYnV0IGNvbnRpbnVlIG9uOyB0aGUgYWJvdmUgTU1VIHJlbG9hZCB3aWxsIGRvIHRoZSByaWdodCB0aGluZ1xuJiM0MztcdFx0ICogaWYgdGhlIGN1cnJlbnQgcm9vdCBpcyBhY3R1YWxseSBpbnZhbGlkLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRXQVJOX09OX09OQ0Uoa3ZtX3Rlc3RfcmVxdWVzdChLVk1fUkVRX01NVV9GUkVFX09CU09MRVRFX1JPT1RTLCB2Y3B1KSk7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFNuYXBzaG90IHRoZSBpbnZhbGlkYXRpb24gc2VxdWVuY2UgY291bnRlciBhZnRlciBhY3F1aXJpbmdcbiYjNDM7XHRcdCAqIG1tdV9sb2NrLCBhcyBndWVzdF9tZW1mZCBndWFyYW50ZWVzIHRoZSB2YWxpZGl0eSBvZiB0aGUgcGZuLFxuJiM0MztcdFx0ICogaS5lLiBhbnkgY29uY3VycmVudCBpbnZhbGlkYXRpb25zIGFyZSBndWFyYW50ZWVkIHRvIGJlXG4mIzQzO1x0XHQgKiBpcnJlbGV2YW50LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRmYXVsdC5tbXVfc2VxID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlbW11X2ludmFsaWRhdGVfc2VxO1xuJiM0MztcdFx0aWYgKGlzX3BhZ2VfZmF1bHRfc3RhbGUodmNwdSwgXHUwMDI2ZmF1bHQpKSB7XG4mIzQzO1x0XHRcdHIgPSBSRVRfUEZfUkVUUlk7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0ciA9IGt2bV90ZHBfbW11X21hcCh2Y3B1LCBcdTAwMjZmYXVsdCk7XG4gXHR9IHdoaWxlIChyID09IFJFVF9QRl9SRVRSWSk7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTY6NTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSYjMzQ7LAogICAgJiMzNDtrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIE1NVSBwYWdlIGZhdWx0IGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgYW5kIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gLiBJdCBtb3ZlcyBNTVUgcmVsb2FkIGFuZCBjYWNoZSB0b3AtdXAgb3BlcmF0aW9ucyBpbnNpZGUgdGhlIHJldHJ5IGxvb3AgdG8gaGFuZGxlIGNvbmN1cnJlbnQgaW52YWxpZGF0aW9ucyBjb3JyZWN0bHkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBLVk0gTU1VIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNGRiMDZkYTRkMDFjMDI3M2FmNzhkN2M4NDRhMGNkMGI3ODYzNTkwZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDE2OjUzOjQwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmMKaW5kZXggMDY0ZWNjMzNiOTI2Ny4uNzljNDUwZDY3N2I0MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jCkBAIC01MDYxLDYgJiM0Mzs1MDYxLDEwIEBAIHN0YXRpYyBpbnQga3ZtX3RkcF9wYWdlX3ByZWZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLAogCQlpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9WTV9ERUFELCB2Y3B1KSkKIAkJCXJldHVybiAtRUlPOwogCiYjNDM7CQlyID0ga3ZtX21tdV9yZWxvYWQodmNwdSk7CiYjNDM7CQlpZiAocikKJiM0MzsJCQlyZXR1cm4gcjsKJiM0MzsKIAkJY29uZF9yZXNjaGVkKCk7CiAJCXIgPSBrdm1fbW11X2RvX3BhZ2VfZmF1bHQodmNwdSwgZ3BhLCBlcnJvcl9jb2RlLCB0cnVlLCBOVUxMLCBsZXZlbCk7CiAJfSB3aGlsZSAociA9PSBSRVRfUEZfUkVUUlkpOwpAQCAtNTEwMSwxNCAmIzQzOzUxMDUsNiBAQCBsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJaWYgKGt2bV9pc19nZm5fYWxpYXModmNwdS0mZ3Q7a3ZtLCBncGFfdG9fZ2ZuKHJhbmdlLSZndDtncGEpKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQkvKgotCSAqIHJlbG9hZCBpcyBlZmZpY2llbnQgd2hlbiBjYWxsZWQgcmVwZWF0ZWRseSwgc28gd2UgY2FuIGRvIGl0IG9uCi0JICogZXZlcnkgaXRlcmF0aW9uLgotCSAqLwotCXIgPSBrdm1fbW11X3JlbG9hZCh2Y3B1KTsKLQlpZiAocikKLQkJcmV0dXJuIHI7Ci0KIAlkaXJlY3RfYml0cyA9IDA7CiAJaWYgKGt2bV9hcmNoX2hhc19wcml2YXRlX21lbSh2Y3B1LSZndDtrdm0pICZhbXA7JmFtcDsKIAkgICAga3ZtX21lbV9pc19wcml2YXRlKHZjcHUtJmd0O2t2bSwgZ3BhX3RvX2dmbihyYW5nZS0mZ3Q7Z3BhKSkpCkBAIC01MjEzLDE0ICYjNDM7NTIwOSw2IEBAIGludCBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4pCiAJaWYgKGt2bV9nZm5faXNfd3JpdGVfdHJhY2tlZChrdm0sIGZhdWx0LnNsb3QsIGZhdWx0LmdmbikpCiAJCXJldHVybiAtRVBFUk07CiAKLQlyID0ga3ZtX21tdV9yZWxvYWQodmNwdSk7Ci0JaWYgKHIpCi0JCXJldHVybiByOwotCi0JciA9IG1tdV90b3B1cF9tZW1vcnlfY2FjaGVzKHZjcHUsIGZhbHNlKTsKLQlpZiAocikKLQkJcmV0dXJuIHI7Ci0KIAlkbyB7CiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJCXJldHVybiAtRUlOVFI7CkBAIC01MjI4LDEwICYjNDM7NTIxNiwzOCBAQCBpbnQga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuKQogCQlpZiAoa3ZtX3Rlc3RfcmVxdWVzdChLVk1fUkVRX1ZNX0RFQUQsIHZjcHUpKQogCQkJcmV0dXJuIC1FSU87CiAKJiM0MzsJCXIgPSBrdm1fbW11X3JlbG9hZCh2Y3B1KTsKJiM0MzsJCWlmIChyKQomIzQzOwkJCXJldHVybiByOwomIzQzOwomIzQzOwkJciA9IG1tdV90b3B1cF9tZW1vcnlfY2FjaGVzKHZjcHUsIGZhbHNlKTsKJiM0MzsJCWlmIChyKQomIzQzOwkJCXJldHVybiByOwomIzQzOwogCQljb25kX3Jlc2NoZWQoKTsKIAogCQlndWFyZChyZWFkX2xvY2spKCZhbXA7a3ZtLSZndDttbXVfbG9jayk7CiAKJiM0MzsJCS8qCiYjNDM7CQkgKiBCZWNhdXNlIHNsb3RzX2xvY2sgaXMgaGVsZCwgaXQgc2hvdWxkIGJlIGltcG9zc2libGUgZm9yICphbnkqCiYjNDM7CQkgKiByb290cyB0byBiZSBpbnZhbGlkYXRlZCBhZnRlciB0aGUgaW5pdGlhbCBNTVUgcmVsb2FkLiAgV0FSTiwKJiM0MzsJCSAqIGJ1dCBjb250aW51ZSBvbjsgdGhlIGFib3ZlIE1NVSByZWxvYWQgd2lsbCBkbyB0aGUgcmlnaHQgdGhpbmcKJiM0MzsJCSAqIGlmIHRoZSBjdXJyZW50IHJvb3QgaXMgYWN0dWFsbHkgaW52YWxpZC4KJiM0MzsJCSAqLwomIzQzOwkJV0FSTl9PTl9PTkNFKGt2bV90ZXN0X3JlcXVlc3QoS1ZNX1JFUV9NTVVfRlJFRV9PQlNPTEVURV9ST09UUywgdmNwdSkpOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIFNuYXBzaG90IHRoZSBpbnZhbGlkYXRpb24gc2VxdWVuY2UgY291bnRlciBhZnRlciBhY3F1aXJpbmcKJiM0MzsJCSAqIG1tdV9sb2NrLCBhcyBndWVzdF9tZW1mZCBndWFyYW50ZWVzIHRoZSB2YWxpZGl0eSBvZiB0aGUgcGZuLAomIzQzOwkJICogaS5lLiBhbnkgY29uY3VycmVudCBpbnZhbGlkYXRpb25zIGFyZSBndWFyYW50ZWVkIHRvIGJlCiYjNDM7CQkgKiBpcnJlbGV2YW50LgomIzQzOwkJICovCiYjNDM7CQlmYXVsdC5tbXVfc2VxID0gdmNwdS0mZ3Q7a3ZtLSZndDttbXVfaW52YWxpZGF0ZV9zZXE7CiYjNDM7CQlpZiAoaXNfcGFnZV9mYXVsdF9zdGFsZSh2Y3B1LCAmYW1wO2ZhdWx0KSkgewomIzQzOwkJCXIgPSBSRVRfUEZfUkVUUlk7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiAJCXIgPSBrdm1fdGRwX21tdV9tYXAodmNwdSwgJmFtcDtmYXVsdCk7CiAJfSB3aGlsZSAociA9PSBSRVRfUEZfUkVUUlkpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NDMKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiAzMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS1ZNIE1NVSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0JiMzOTtzIGRpdmluZyBpbnRvIGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYCwgd2hpY2ggYWx3YXlzIHBpcXVlcyBteSBpbnRlcmVzdC4gSXQgc2VlbXMgdG8gYmUgdG91Y2hpbmcgc2V2ZXJhbCBrZXkgZnVuY3Rpb25zOiBga3ZtX3RkcF9wYWdlX3ByZWZhdWx0YCwgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAsIGFuZCBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBsb29rcyBsaWtlIG1vdmluZyBga3ZtX21tdV9yZWxvYWQodmNwdSlgIGluc2lkZSB0aGUgcmV0cnkgbG9vcCB3aXRoaW4gYGt2bV90ZHBfcGFnZV9wcmVmYXVsdGAgYW5kIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gLiBUaGF0JiMzOTtzIGEgc2lnbmlmaWNhbnQgYWx0ZXJhdGlvbiwgaW5kaWNhdGluZyBhIHBvdGVudGlhbCByZWZpbmVtZW50IGluIGhvdyB0aGUgTU1VIGhhbmRsZXMgcGFnZSBmYXVsdHMuIEFkZGluZyBgbW11X3RvcHVwX21lbW9yeV9jYWNoZXNgIGluc2lkZSB0aGF0IHNhbWUgbG9vcCBpbiBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYCBzdWdnZXN0cyBzb21lIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBvciBjYWNoZSBtYW5hZ2VtZW50IGlzIGhhcHBlbmluZyBkdXJpbmcgZmF1bHQgaGFuZGxpbmcuIFBsdXMsIHRoZXJlJiMzOTtzIGEgbmV3IGBpc19wYWdlX2ZhdWx0X3N0YWxlKHZjcHUsICZhbXA7ZmF1bHQpYCBjaGVjayBiZWluZyBpbnRyb2R1Y2VkLCB3aGljaCBwcm9iYWJseSBkZWFscyB3aXRoIHJlZHVuZGFudCBvciBvdXRkYXRlZCBwYWdlIGZhdWx0IGluZm9ybWF0aW9uLgoKRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgY2hhbmdlIHRvIHRoZSBLVk0gTU1VLiBHaXZlbiB0aGUgbmF0dXJlIG9mIHRoZXNlIG1vZGlmaWNhdGlvbnMsIGl0JiMzOTtzIGRlZmluaXRlbHkgd29ydGggZ2l2aW5nIHRoaXMgcGF0Y2ggYSB0aG9yb3VnaCBmdXp6aW5nLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZm9jdXMgb24gc3BlY2lmaWMgc3ltYm9scy4gSSBzdXNwZWN0IGBrdm1fdGRwX3BhZ2VfcHJlZmF1bHRgIG1pZ2h0IGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYWx0aG91Z2ggYmVpbmcgc3RhdGljIGNvdWxkIG1ha2UgaXQgbGVzcyBvZiBhIGRpcmVjdCB0YXJnZXQgZm9yIGZ1enppbmcuIEhvd2V2ZXIsIGJvdGggYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgYW5kIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gIGFyZSBleHBvcnRlZCBhbmQgdGhlcmVmb3JlIHZlcnkgaW50ZXJlc3RpbmcuCgpUaW1lIHRvIGRlbHZlIGludG8gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgIGFuZCBkaWcgZGVlcGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvbW11LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS9tbXUuYz01MDQ1PXN0YXRpYyBpbnQga3ZtX3RkcF9wYWdlX3ByZWZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTA5Mi1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTA5Mzpsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUwOTQtXHRcdFx0XHQgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTA1CgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gKioKCk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgd29ya2luZ3Mgb2YgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAuIEl0JiMzOTtzIGJlZW4gYSB3aGlsZSBzaW5jZSBJIGR1ZyBkZWVwIGludG8gdGhlIGRldGFpbHMgb2YgdGhlIFREUCBNTVUuIEkga25vdyB0aGlzIGZ1bmN0aW9uIGlzIGNydWNpYWwgZm9yIGhhbmRsaW5nIHByaXZhdGUgcGFnZSBmcmFtZSBudW1iZXJzIHdpdGhpbiB0aGUgS1ZNIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBoYXBwZW5zIGhlcmUgd2hlbiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgcHJpdmF0ZSBQRk4gYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgc2hhZG93IHBhZ2UgdGFibGVzLiBXaGF0IHNwZWNpZmljIG1hcHBpbmdzIGFyZSBiZWluZyBlc3RhYmxpc2hlZCBvciBtb2RpZmllZD8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBkaXJlY3QgbWFwcGluZywgYSBzaGFkb3cgbWFwcGluZywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEkgc2hvdWxkIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gYW55IHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIHVzZWQgd2l0aGluIHRoaXMgZnVuY3Rpb24gYmVjYXVzZSB0aGV5IGFyZSBjcml0aWNhbCBmb3IgZW5zdXJpbmcgZGF0YSBpbnRlZ3JpdHkgYW5kIGF2b2lkaW5nIHJhY2UgY29uZGl0aW9ucywgZXNwZWNpYWxseSBjb25zaWRlcmluZyBpdHMgcm9sZSBpbiB0aGUgY3JpdGljYWwgcGF0aCBvZiBtZW1vcnkgYWNjZXNzLiBJcyB0aGVyZSBhbnl0aGluZyB1bnVzdWFsIGFib3V0IHRoZSBoYW5kbGluZyBvZiB0aGUgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSBpbiB0aGlzIHBhcnRpY3VsYXIgY29udGV4dCwgbGlrZSBzcGVjaWFsIGNvbnNpZGVyYXRpb25zIGZvciBodWdlIHBhZ2VzIG9yIG5lc3RlZCB2aXJ0dWFsaXphdGlvbj8gSSB3aWxsIG5lZWQgdG8gbG9vayB1cCBzb21lIGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIGxpa2UgYGt2bV9tbXVfcGFnZWAgYW5kIGl0cyByZWxhdGlvbiB0byB0aGUgYWN0dWFsIHBoeXNpY2FsIHBhZ2VzIHRvIGRldGVybWluZSBob3cgZXhhY3RseSB0aGUgZnVuY3Rpb24gaXMgZG9pbmcgaXRzIG1hcHBpbmcuIEkgc2hvdWxkIGFsc28gY2hlY2sgaWYgYW55IHJlY2VudCBwYXRjaGVzIGhhdmUgYWx0ZXJlZCBpdHMgYmVoYXZpb3IsIGFzIHRoaXMgYXJlYSBpcyBvZnRlbiBhIHBvaW50IG9mIG9uZ29pbmcgZGV2ZWxvcG1lbnQgYW5kIG9wdGltaXphdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvbW11LmM9NTE2Mz1zdGF0aWMgdm9pZCBrdm1fYXNzZXJ0X2dtZW1faW52YWxpZGF0ZV9sb2NrX2hlbGQoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUxNzQtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUxNzU6aW50IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbilcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTE3Ni17XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MjU4LX1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTI1OTpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTI2MC0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTQ2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIE1lbW9yeSBGYXVsdCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBzb21ldGhpbmcgaW50ZXJlc3RpbmcuIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLi4uIHRoYXQmIzM5O3Mgbm90IHN0YXRpYy4gQW5kIG5laXRoZXIgaXMgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAuIFRoYXQmIzM5O3MgYSBrZXkgb2JzZXJ2YXRpb24sIHJpZ2h0PyBJdCBtZWFucyB0aGVzZSBmdW5jdGlvbnMgbWlnaHQgYmUgYWNjZXNzaWJsZSBmcm9tIG91dHNpZGUgdGhlIGltbWVkaWF0ZSBzY29wZSwgd2hpY2ggaGFzIGltcGxpY2F0aW9ucyBmb3IgaG93IHRoZXkmIzM5O3JlIHVzZWQgYW5kIGhvdyB3ZSBtaWdodCBpbnRlcmFjdCB3aXRoIHRoZW0uIEl0IGFkZHMgZmxleGliaWxpdHksIGJ1dCBhbHNvIHJlcXVpcmVzIGNhcmVmdWwgY29uc2lkZXJhdGlvbiBvZiBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIGFuZCBhY2Nlc3MgY29udHJvbHMuCgpUaGUgbmV4dCBsb2dpY2FsIHN0ZXAsIGJlZm9yZSBkaXZpbmcgZGVlcGVyIGludG8gdGhlaXIgaW1wbGVtZW50YXRpb24sIGlzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGlzIGFjdHVhbGx5IGV4cG9ydGVkLiBUaGF0IHdpbGwgZ2l2ZSBhIGNsZWFyIGluZGljYXRpb24gb2YgaXRzIGludGVuZGVkIHZpc2liaWxpdHkgYW5kIHB1cnBvc2UuIEV4cG9ydGVkIGZ1bmN0aW9ucyBhcmUgZGVzaWduZWQgZm9yIGJyb2FkZXIgdXNlLCB3aGlsZSBpbnRlcm5hbCBvbmVzIGFyZSB0aWdodGx5IGNvbnRyb2xsZWQuIExldCBtZSBqdXN0IGNoZWNrIHRoZSBzeW1ib2wgdGFibGUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9zMzkwL3MzOTAuYz01NzgxPXZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpvbGQsXG4tLVxuYXJjaC9zMzkwL2t2bS9zMzkwL3MzOTAuYy01Nzg4LS8qKlxuYXJjaC9zMzkwL2t2bS9zMzkwL3MzOTAuYzo1Nzg5OiAqIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSgpIC0tIHByZS1mYXVsdCBhbmQgbGluayBnbWFwIGRhdCB0YWJsZXNcbmFyY2gvczM5MC9rdm0vczM5MC9zMzkwLmMtNTc5MC0gKiBAdmNwdTogdGhlIHZjcHUgdGhhdCBzaGFsbCBhcHBlYXIgdG8gaGF2ZSBnZW5lcmF0ZWQgdGhlIGZhdWx0LWluLlxuLS1cbmFyY2gvczM5MC9rdm0vczM5MC9zMzkwLmMtNTgwNy0gKi9cbmFyY2gvczM5MC9rdm0vczM5MC9zMzkwLmM6NTgwODpsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXG5hcmNoL3MzOTAva3ZtL3MzOTAvczM5MC5jLTU4MDkte1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NTA0NT1zdGF0aWMgaW50IGt2bV90ZHBfcGFnZV9wcmVmYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUwOTItXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUwOTM6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MDk0LVx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0xNjk4PXN0YXRpYyBpbnQgdGR4X3NlcHRfbWFwX2xlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgZW51bSBwZ19sZXZlbCBsZXZlbCxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTE3MTAtXHQvKlxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoxNzExOlx0ICogRW5zdXJlIHByZV9mYXVsdF9hbGxvd2VkIGlzIHJlYWQgYnkga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KClcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMTcxMi1cdCAqIGJlZm9yZSBrdm1fdGR4LVx1MDAzZXN0YXRlLiAgVXNlcnNwYWNlIG11c3Qgbm90IGJlIGFsbG93ZWQgdG8gcHJlLWZhdWx0XG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTI2NDI9dm9pZCBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGVfcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpO1xuLS1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNjQ1LSNpZmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjI2NDY6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI2NDctXHRcdFx0XHQgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSk7XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz00MzUzPXN0YXRpYyBpbnQga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy00Mzc3LVxudmlydC9rdm0va3ZtX21haW4uYzo0Mzc4Olx0XHRyID0ga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHZjcHUsIHJhbmdlKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDM3OS1cdFx0aWYgKFdBUk5fT05fT05DRShyID09IDAgfHwgciA9PSAtRUlPKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODA4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqS1ZNIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBLVk0uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlZCwgc3BlY2lmaWNhbGx5IHRoZSBgS1ZNYCBzZXR0aW5nIGl0c2VsZi4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUsIHRoZSBmb3VuZGF0aW9uLiBOb3csIEkgbmVlZCB0byBnZXQgaW50byB0aGUgd2VlZHMgYSBiaXQuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgcHJlLWZhdWx0aW5nIG1lbW9yeS4gSSYjMzk7bSByZWFzb25hYmx5IGNlcnRhaW4gdGhlcmUmIzM5O3MgYSBjb25maWd1cmF0aW9uIG9wdGlvbiByZWxhdGluZyB0byB0aGF0LCBzb21ldGhpbmcgYWxvbmcgdGhlIGxpbmVzIG9mIGBDT05GSUdfS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWWAgb3IgcG90ZW50aWFsbHkgc29tZXRoaW5nIHdpdGggYSBzbGlnaHRseSBkaWZmZXJlbnQgbmFtZS4gVGltZSB0byBnbyBkaWdnaW5nIHRocm91Z2ggdGhlIGNvZGUgb3IgdGhlIGRvY3VtZW50YXRpb24gdG8gY29uZmlybSBhbmQgdmVyaWZ5IHRoZSBzcGVjaWZpY3Mgb2YgdGhhdCBzZXR0aW5nLiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgcHJlLWZhdWx0aW5nIGlzIGhhbmRsZWQgd2l0aGluIHRoaXMgS1ZNIHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vS2NvbmZpZz0xOT1jb25maWcgS1ZNXG4tLVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTMyLVx0c2VsZWN0IEtWTV9NTVVfTE9DS0xFU1NfQUdJTkdcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzozMzpcdHNlbGVjdCBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMzQtXHRoZWxwXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWc9MjA9Y29uZmlnIEtWTV9YODZcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy00Ny1cdHNlbGVjdCBLVk1fR0VORVJJQ19IQVJEV0FSRV9FTkFCTElOR1xuYXJjaC94ODYva3ZtL0tjb25maWc6NDg6XHRzZWxlY3QgS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxuYXJjaC94ODYva3ZtL0tjb25maWctNDktXHRzZWxlY3QgS1ZNX1dFUlJPUiBpZiBXRVJST1Jcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MjY0Mj12b2lkIGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZV9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSk7XG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI2NDQtXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MjY0NTojaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNjQ2LWxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG52aXJ0L2t2bS9LY29uZmlnPTY4PWNvbmZpZyBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1Rcbi0tXG52aXJ0L2t2bS9LY29uZmlnLTcwLVxudmlydC9rdm0vS2NvbmZpZzo3MTpjb25maWcgS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxudmlydC9rdm0vS2NvbmZpZy03Mi0gICAgICAgYm9vbFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9NDMyNz1zdGF0aWMgaW50IGt2bV92Y3B1X2lvY3RsX2dldF9zdGF0c19mZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy00MzUxLVxudmlydC9rdm0va3ZtX21haW4uYzo0MzUyOiNpZmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxudmlydC9rdm0va3ZtX21haW4uYy00MzUzLXN0YXRpYyBpbnQga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxudmlydC9rdm0va3ZtX21haW4uYz00NDI1PXN0YXRpYyBsb25nIGt2bV92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNDY1MC1cdH1cbnZpcnQva3ZtL2t2bV9tYWluLmM6NDY1MTojaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDY1Mi1cdGNhc2UgS1ZNX1BSRV9GQVVMVF9NRU1PUlk6IHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc0NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byB0aGUgS1ZNIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gd2UmIzM5O3JlIGZvY3VzaW5nIG9uIEtWTSwgdGhhdCYjMzk7cyB0aGUgY29yZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7UmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGFuZCB0aGUgY3JpdGljYWwgcGFyYW1ldGVycyB0aGF0IGdvdmVybiB0aGUgZW52aXJvbm1lbnQuJiMzNDsgSSYjMzk7bSB0aGlua2luZyBzcGVjaWZpY2FsbHkgYWJvdXQgdGhlIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gIHNldHRpbmcgcmlnaHQgb2ZmIHRoZSBiYXQuIEl0JiMzOTtzIHVzdWFsbHkgdGhlIGNydXggb2YgaG93IHRoZSBndWVzdCYjMzk7cyBtZW1vcnkgaXMgbWFuYWdlZCBhbmQgaG93IHZpcnR1YWwgYWRkcmVzc2VzIGFyZSB0cmFuc2xhdGVkLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBrbm93bGVkZ2Ugb2YgaXQuIExldCYjMzk7cyBzZWUgaG93IGl0JiMzOTtzIGRlZmluZWQgYW5kIGNvbmZpZ3VyZWQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCBkb2N1bWVudGF0aW9uIHRvIHJlZnJlc2ggbXkga25vd2xlZGdlIGFuZCBjb25maXJtIG15IGFzc3VtcHRpb25zIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS5oPTMzMT1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX3NoYWRvd19yb290X2FsbG9jYXRlZChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL21tdS5oLTM0MS1cbmFyY2gveDg2L2t2bS9tbXUuaDozNDI6aW50IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbik7XG5hcmNoL3g4Ni9rdm0vbW11LmgtMzQzLVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NTE2Mz1zdGF0aWMgdm9pZCBrdm1fYXNzZXJ0X2dtZW1faW52YWxpZGF0ZV9sb2NrX2hlbGQoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUxNzQtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUxNzU6aW50IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbilcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTE3Ni17XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MjU4LX1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTI1OTpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTI2MC0jZW5kaWZcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTMxODA9c3RhdGljIGludCB0ZHhfZ21lbV9wb3N0X3BvcHVsYXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuLFxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzE5Mi1cdGt2bV90ZHgtXHUwMDNlcGFnZV9hZGRfc3JjID0gc3JjX3BhZ2U7XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjMxOTM6XHRyZXQgPSBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4oYXJnLVx1MDAzZXZjcHUsIGdmbiwgcGZuKTtcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzE5NC1cdGt2bV90ZHgtXHUwMDNlcGFnZV9hZGRfc3JjID0gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU4MgoJCQkJCQkJb3V0cHV0OiAxNTEKCQkJCQkJCXRob3VnaHRzOiA0NjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEtWTSBNTVUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBmb2N1cyBsYW5kcyBvbiBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYC4gVGhhdCYjMzk7cyBURFgtc3BlY2lmaWMsIGFzIEkgcmVjYWxsLCBhbmQgdGhhdCYjMzk7cyBjcml0aWNhbCBiZWNhdXNlIFREWCAqcmVxdWlyZXMqIGBLVk1fSU5URUxgLCB3aGljaCBnaXZlcyBtZSBhIHN0YXJ0aW5nIHBvaW50LiBEaWdnaW5nIGRlZXBlciwgSSBzZWUgaXQmIzM5O3MgdXNlZCBpbiBgdGR4X2dtZW1fcG9zdF9wb3B1bGF0ZWAsIHNvbGlkaWZ5aW5nIGl0cyByZWxldmFuY2UgaW4gdGhpcyBjb250ZXh0LgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YC4gSSB0cmFjZSBpdDogYGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLCB0aGVuIHRoZSBga3ZtX3ZjcHVfaW9jdGxgIHBhdGggd2l0aCBgS1ZNX1BSRV9GQVVMVF9NRU1PUllgLiBCaW5nby4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IHJlc2lkZXMuCgpTbywgdGhlIGtleSBzeW1ib2xzIGhlcmUgYXJlIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGFuZCBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYC4gSSBrbm93IHRoZSBiYXNlIGNvbmZpZyBpcyBkZWZpbml0ZWx5IGBLVk1gLgoKSSBhbHNvIGJyaWVmbHkgY2hlY2tlZCBga3ZtX3RkcF9wYWdlX3ByZWZhdWx0YCBhbmQgaXQmIzM5O3Mgc3RhdGljIGluIGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYC4gU28sIEkmIzM5O2xsIGV4Y2x1ZGUgaXQgZnJvbSB0aGUgZmluYWwgbGlzdC4KCk5leHQsIEkgbmVlZCB0byB2ZXJpZnkgcmVhY2hhYmlsaXR5LiBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYCBpcyBleHBvcnRlZCBpbnRlcm5hbGx5IHRvIEtWTSBhbmQgdXNlZCBieSBgdGR4X2dtZW1fcG9zdF9wb3B1bGF0ZWAsIHdoaWNoIGlzIGdvb2QuIENhbiB3ZSB0cmlnZ2VyIFREWCBpbiBRRU1VPyBZZXMsIHdlIGNhbiBlbXVsYXRlIGl0IG9yIGZ1enogaXQuCgpXYWl0IGEgc2Vjb25kLi4uIFREWCB0ZWNobmljYWxseSBuZWVkcyBoYXJkd2FyZSBzdXBwb3J0LiBCdXQgc3l6a2FsbGVyIGZ1enplcyBLVk0gaW9jdGxzIGRpcmVjdGx5LCBzbyBpZiB0aGUgaW9jdGwgaXMgYXZhaWxhYmxlLCB3ZSBjYW4gcmVhY2ggaXQhIFRoYXQmIzM5O3MgYW4gaW1wb3J0YW50IGRldGFpbC4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIG5vdGUgdGhhdCBpbiBteSByZWFzb25pbmcuCgpNeSBmaW5hbCBsaXN0IG9mIHN5bWJvbHMgdG8gZm9jdXMgb24gaXM6CiogICBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YAoqICAgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAKClRoZSByZXF1aXJlZCBjb25maWcgaXMgYEtWTWAuCgpUaGUgcGF0Y2gmIzM5O3MgY2hhbmdlcyByZXZvbHZlIGFyb3VuZCB0aGUgTU1VIHBhZ2UgZmF1bHQgaGFuZGxpbmcsIHNwZWNpZmljYWxseSBhcm91bmQgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgYW5kIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIG1vdmluZyBNTVUgcmVsb2FkIGFuZCBjYWNoZSB0b3AtdXAgb3BlcmF0aW9ucyBpbnNpZGUgdGhlIHJldHJ5IGxvb3AgdG8gY29ycmVjdGx5IGhhbmRsZSBjb25jdXJyZW50IGludmFsaWRhdGlvbnMuIFRoaXMgaXMgY29yZSBLVk0gTU1VIGxvZ2ljIGFuZCBhZmZlY3RzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkmIzM0OywKICAgICYjMzQ7a3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBNTVUgcGFnZSBmYXVsdCBoYW5kbGluZywgc3BlY2lmaWNhbGx5IGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGFuZCBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYC4gSXQgbW92ZXMgTU1VIHJlbG9hZCBhbmQgY2FjaGUgdG9wLXVwIG9wZXJhdGlvbnMgaW5zaWRlIHRoZSByZXRyeSBsb29wIHRvIGhhbmRsZSBjb25jdXJyZW50IGludmFsaWRhdGlvbnMgY29ycmVjdGx5LiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGNvcmUgS1ZNIE1NVSBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5JiMzNDssCiAgICAmIzM0O2t2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBLVk0gTU1VIHBhZ2UgZmF1bHQgaGFuZGxpbmcsIHNwZWNpZmljYWxseSBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBhbmQgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAuIEl0IG1vdmVzIE1NVSByZWxvYWQgYW5kIGNhY2hlIHRvcC11cCBvcGVyYXRpb25zIGluc2lkZSB0aGUgcmV0cnkgbG9vcCB0byBoYW5kbGUgY29uY3VycmVudCBpbnZhbGlkYXRpb25zIGNvcnJlY3RseS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIEtWTSBNTVUgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjAzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgTU1VIHJlbG9hZCBhbmQgY2FjaGUgdG9wLXVwIGZ1bmN0aW9ucyBpbnNpZGUgdGhlIHJldHJ5IGxvb3BzIGZvciBLVk0gcGFnZSBmYXVsdCBoYW5kbGluZyAoYGt2bV90ZHBfcGFnZV9wcmVmYXVsdGAgYW5kIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gKS4gVGhpcyBmaXhlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBhIGNvbmN1cnJlbnQgaW52YWxpZGF0aW9uIGNvdWxkIGNhdXNlIHRoZSBsb29wIHRvIHJldHJ5IHdpdGhvdXQgcmVsb2FkaW5nIHRoZSBNTVUgcm9vdCwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBhbiBvYnNvbGV0ZSByb290IGJlaW5nIHVzZWQuIFRoZSBgZmF1bHRgIHN0cnVjdHVyZSBpcyBmdWxseSB6ZXJvLWluaXRpYWxpemVkIGZvciBhbnkgdW5zcGVjaWZpZWQgZmllbGRzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBwYXRjaC4gQW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBhcmlzaW5nIGZyb20gb2Jzb2xldGUgcm9vdHMgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0ZGIwNmRhNGQwMWMwMjczYWY3OGQ3Yzg0NGEwY2QwYjc4NjM1OTBmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMjYgMTY6NTM6NDAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuYwppbmRleCAwNjRlY2MzM2I5MjY3Li43OWM0NTBkNjc3YjQwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmMKQEAgLTUwNjEsNiAmIzQzOzUwNjEsMTAgQEAgc3RhdGljIGludCBrdm1fdGRwX3BhZ2VfcHJlZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsCiAJCWlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX1ZNX0RFQUQsIHZjcHUpKQogCQkJcmV0dXJuIC1FSU87CiAKJiM0MzsJCXIgPSBrdm1fbW11X3JlbG9hZCh2Y3B1KTsKJiM0MzsJCWlmIChyKQomIzQzOwkJCXJldHVybiByOwomIzQzOwogCQljb25kX3Jlc2NoZWQoKTsKIAkJciA9IGt2bV9tbXVfZG9fcGFnZV9mYXVsdCh2Y3B1LCBncGEsIGVycm9yX2NvZGUsIHRydWUsIE5VTEwsIGxldmVsKTsKIAl9IHdoaWxlIChyID09IFJFVF9QRl9SRVRSWSk7CkBAIC01MTAxLDE0ICYjNDM7NTEwNSw2IEBAIGxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAlpZiAoa3ZtX2lzX2dmbl9hbGlhcyh2Y3B1LSZndDtrdm0sIGdwYV90b19nZm4ocmFuZ2UtJmd0O2dwYSkpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCS8qCi0JICogcmVsb2FkIGlzIGVmZmljaWVudCB3aGVuIGNhbGxlZCByZXBlYXRlZGx5LCBzbyB3ZSBjYW4gZG8gaXQgb24KLQkgKiBldmVyeSBpdGVyYXRpb24uCi0JICovCi0JciA9IGt2bV9tbXVfcmVsb2FkKHZjcHUpOwotCWlmIChyKQotCQlyZXR1cm4gcjsKLQogCWRpcmVjdF9iaXRzID0gMDsKIAlpZiAoa3ZtX2FyY2hfaGFzX3ByaXZhdGVfbWVtKHZjcHUtJmd0O2t2bSkgJmFtcDsmYW1wOwogCSAgICBrdm1fbWVtX2lzX3ByaXZhdGUodmNwdS0mZ3Q7a3ZtLCBncGFfdG9fZ2ZuKHJhbmdlLSZndDtncGEpKSkKQEAgLTUyMTMsMTQgJiM0Mzs1MjA5LDYgQEAgaW50IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbikKIAlpZiAoa3ZtX2dmbl9pc193cml0ZV90cmFja2VkKGt2bSwgZmF1bHQuc2xvdCwgZmF1bHQuZ2ZuKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAotCXIgPSBrdm1fbW11X3JlbG9hZCh2Y3B1KTsKLQlpZiAocikKLQkJcmV0dXJuIHI7Ci0KLQlyID0gbW11X3RvcHVwX21lbW9yeV9jYWNoZXModmNwdSwgZmFsc2UpOwotCWlmIChyKQotCQlyZXR1cm4gcjsKLQogCWRvIHsKIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQogCQkJcmV0dXJuIC1FSU5UUjsKQEAgLTUyMjgsMTAgJiM0Mzs1MjE2LDM4IEBAIGludCBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4pCiAJCWlmIChrdm1fdGVzdF9yZXF1ZXN0KEtWTV9SRVFfVk1fREVBRCwgdmNwdSkpCiAJCQlyZXR1cm4gLUVJTzsKIAomIzQzOwkJciA9IGt2bV9tbXVfcmVsb2FkKHZjcHUpOwomIzQzOwkJaWYgKHIpCiYjNDM7CQkJcmV0dXJuIHI7CiYjNDM7CiYjNDM7CQlyID0gbW11X3RvcHVwX21lbW9yeV9jYWNoZXModmNwdSwgZmFsc2UpOwomIzQzOwkJaWYgKHIpCiYjNDM7CQkJcmV0dXJuIHI7CiYjNDM7CiAJCWNvbmRfcmVzY2hlZCgpOwogCiAJCWd1YXJkKHJlYWRfbG9jaykoJmFtcDtrdm0tJmd0O21tdV9sb2NrKTsKIAomIzQzOwkJLyoKJiM0MzsJCSAqIEJlY2F1c2Ugc2xvdHNfbG9jayBpcyBoZWxkLCBpdCBzaG91bGQgYmUgaW1wb3NzaWJsZSBmb3IgKmFueSoKJiM0MzsJCSAqIHJvb3RzIHRvIGJlIGludmFsaWRhdGVkIGFmdGVyIHRoZSBpbml0aWFsIE1NVSByZWxvYWQuICBXQVJOLAomIzQzOwkJICogYnV0IGNvbnRpbnVlIG9uOyB0aGUgYWJvdmUgTU1VIHJlbG9hZCB3aWxsIGRvIHRoZSByaWdodCB0aGluZwomIzQzOwkJICogaWYgdGhlIGN1cnJlbnQgcm9vdCBpcyBhY3R1YWxseSBpbnZhbGlkLgomIzQzOwkJICovCiYjNDM7CQlXQVJOX09OX09OQ0Uoa3ZtX3Rlc3RfcmVxdWVzdChLVk1fUkVRX01NVV9GUkVFX09CU09MRVRFX1JPT1RTLCB2Y3B1KSk7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogU25hcHNob3QgdGhlIGludmFsaWRhdGlvbiBzZXF1ZW5jZSBjb3VudGVyIGFmdGVyIGFjcXVpcmluZwomIzQzOwkJICogbW11X2xvY2ssIGFzIGd1ZXN0X21lbWZkIGd1YXJhbnRlZXMgdGhlIHZhbGlkaXR5IG9mIHRoZSBwZm4sCiYjNDM7CQkgKiBpLmUuIGFueSBjb25jdXJyZW50IGludmFsaWRhdGlvbnMgYXJlIGd1YXJhbnRlZWQgdG8gYmUKJiM0MzsJCSAqIGlycmVsZXZhbnQuCiYjNDM7CQkgKi8KJiM0MzsJCWZhdWx0Lm1tdV9zZXEgPSB2Y3B1LSZndDtrdm0tJmd0O21tdV9pbnZhbGlkYXRlX3NlcTsKJiM0MzsJCWlmIChpc19wYWdlX2ZhdWx0X3N0YWxlKHZjcHUsICZhbXA7ZmF1bHQpKSB7CiYjNDM7CQkJciA9IFJFVF9QRl9SRVRSWTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKIAkJciA9IGt2bV90ZHBfbW11X21hcCh2Y3B1LCAmYW1wO2ZhdWx0KTsKIAl9IHdoaWxlIChyID09IFJFVF9QRl9SRVRSWSk7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NDAKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiAyNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS1ZNIE1NVSBQYXRjaCBmb3IgUG90ZW50aWFsIE1lbW9yeSBSaXNrcyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGRpdmVzIGludG8gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLCBzcGVjaWZpY2FsbHkuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gYWN0aW9uIGlzIHNoaWZ0aW5nIGBrdm1fbW11X3JlbG9hZCh2Y3B1KWAgYW5kIGBtbXVfdG9wdXBfbWVtb3J5X2NhY2hlcyh2Y3B1LCBmYWxzZSlgIGludG8gdGhlIHJldHJ5IGxvb3BzIHdpdGhpbiBga3ZtX3RkcF9wYWdlX3ByZWZhdWx0YCBhbmQgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAuIFRoYXQmIzM5O3MgaW50ZXJlc3Rpbmc7IHBvdGVudGlhbGx5IG9wdGltaXppbmcgcGVyZm9ybWFuY2UgYnkgcmVsb2FkaW5nIGFuZCB0b3BwaW5nIHVwIG1vcmUgZnJlcXVlbnRseSBkdXJpbmcgcGFnZSBmYXVsdHMuIEl0IGFsc28gYWRkcyBhIGBXQVJOX09OX09OQ0VgIGFuZCB1cGRhdGVzIGEgYGZhdWx0Lm1tdV9zZXFgIGNvdW50ZXIgYW5kIGNoZWNrcyBpZiBhIHBhZ2UgZmF1bHQgaXMgc3RhbGUgd2l0aGluIHRoZSBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYCBsb29wLgoKTXkgaW1tZWRpYXRlIGNvbmNlcm4sIHRob3VnaCwgaXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIEkgbmVlZCB0byBiZSBzdXJlIHRoaXMgcmVmYWN0b3JpbmcgaGFzbiYjMzk7dCBpbmFkdmVydGVudGx5IGNyZWF0ZWQgYSBzY2VuYXJpbyB3aGVyZSB3ZSYjMzk7cmUgcmVhZGluZyBmcm9tIG1lbW9yeSB0aGF0IGhhc24mIzM5O3QgYmVlbiBwcm9wZXJseSBpbml0aWFsaXplZCwgbGVhZGluZyB0byBhbGwgc29ydHMgb2YgdW5wcmVkaWN0YWJsZSBiZWhhdmlvci4gTGV0IG1lIHNlZS4uLiBJbiBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYCwgdGhlIGBmYXVsdGAgdmFyaWFibGUgaXMgYSBgc3RydWN0IGt2bV9wYWdlX2ZhdWx0YC4gVGhlIGNvZGUgdXBkYXRlcyBgZmF1bHQubW11X3NlcWAgaW5zaWRlIHRoZSBsb29wLiBUaGUgcXVlc3Rpb24gaXMsIGlzIHRoZXJlIGFueSBjaGFuY2UgdGhlIGNvZGUgcmVhZHMgZnJvbSBhbnkgcGFydHMgb2YgdGhlIGBmYXVsdGAgc3RydWN0IHRoYXQgKmhhdmVuJiMzOTt0KiBiZWVuIGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyB1c2VkLCBlc3BlY2lhbGx5IGlmIHRoZSBsb29wIGlzIGhpdCBtdWx0aXBsZSB0aW1lcz8gUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAgYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvbW11LmM9NTE2Mz1zdGF0aWMgdm9pZCBrdm1fYXNzZXJ0X2dtZW1faW52YWxpZGF0ZV9sb2NrX2hlbGQoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUxNzQtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUxNzU6aW50IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbilcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTE3Ni17XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MjU4LX1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTI1OTpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTI2MC0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg3OQoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHByb2Nlc3NpbmcgdGhlIHByb3ZpZGVkIHRleHQ6CgoqKkRpdmluZyBpbnRvIHRoZSBLVk0gVERQIE1NVSBNYXBwaW5nIEZ1bmN0aW9uKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gVGltZSB0byBjcmFjayBvcGVuIHRoZSBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIFRyYW5zbGF0aW9uIExvb2thc2lkZSBCdWZmZXIgKFRMQikgaXMgYmVpbmcgaGFuZGxlZCBmb3IgVHJhbnNwYXJlbnQgUGFnZSBTaGFyaW5nIChUUFMpIGluIHRoZSBLVk0gKEtlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUpIGNvbnRleHQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIHg4NiBhcmNoaXRlY3R1cmUuIFRoaXMgZnVuY3Rpb24sIHJlc2lkaW5nIGluIGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYCwgaXMgbGlrZWx5IGNyaXRpY2FsIGZvciBtYW5hZ2luZyBwcml2YXRlIHBhZ2UgZnJhbWUgbnVtYmVycyAoUEZOcykgcmVsYXRlZCB0byBUUFMuIEl0JiMzOTtzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciBlc3RhYmxpc2hpbmcgdGhlIG1hcHBpbmdzIGJldHdlZW4gZ3Vlc3QgdmlydHVhbCBhZGRyZXNzZXMgYW5kIGhvc3QgcGh5c2ljYWwgYWRkcmVzc2VzLCBlbnN1cmluZyBtZW1vcnkgY29uc2lzdGVuY3kgYW5kIHBlcmZvcm1hbmNlIHdpdGhpbiB0aGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gZGVhbCB3aXRoIHRoZSBjb21wbGV4aXRpZXMgb2YgbmVzdGVkIHBhZ2luZywgYW5kIGxpa2VseSBpbmNvcnBvcmF0ZXMgb3B0aW1pemF0aW9ucyByZWxhdGVkIHRvIHNoYWRvdyBwYWdlIHRhYmxlcyBhbmQgYWRkcmVzcyB0cmFuc2xhdGlvbiBjYWNoaW5nLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgdGhlIGxvY2tpbmcgbWVjaGFuaXNtcyB1c2VkIChpZiBhbnkpLCBhbmQgYW55IGNvbnNpZGVyYXRpb25zIG1hZGUgZm9yIHBlcmZvcm1hbmNlIHR1bmluZy4gTGV0JiMzOTtzIHNlZSBob3cgaXQmIzM5O3MgaW1wbGVtZW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS9tbXUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUxNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUxNzU6XHRpbnQga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuKVxuNTE3NjpcdHtcbjUxNzc6XHRcdHN0cnVjdCBrdm1fcGFnZV9mYXVsdCBmYXVsdCA9IHtcbjUxNzg6XHRcdFx0LmFkZHIgPSBnZm5fdG9fZ3BhKGdmbiksXG41MTc5Olx0XHRcdC5lcnJvcl9jb2RlID0gUEZFUlJfR1VFU1RfRklOQUxfTUFTSyB8IFBGRVJSX1BSSVZBVEVfQUNDRVNTLFxuNTE4MDpcdFx0XHQucHJlZmV0Y2ggPSB0cnVlLFxuNTE4MTpcdFx0XHQuaXNfdGRwID0gdHJ1ZSxcbjUxODI6XHRcdFx0Lm54X2h1Z2VfcGFnZV93b3JrYXJvdW5kX2VuYWJsZWQgPSBpc19ueF9odWdlX3BhZ2VfZW5hYmxlZCh2Y3B1LVx1MDAzZWt2bSksXG41MTgzOlx0XG41MTg0Olx0XHRcdC5tYXhfbGV2ZWwgPSBQR19MRVZFTF80SyxcbjUxODU6XHRcdFx0LnJlcV9sZXZlbCA9IFBHX0xFVkVMXzRLLFxuNTE4NjpcdFx0XHQuZ29hbF9sZXZlbCA9IFBHX0xFVkVMXzRLLFxuNTE4NzpcdFx0XHQuaXNfcHJpdmF0ZSA9IHRydWUsXG41MTg4Olx0XG41MTg5Olx0XHRcdC5nZm4gPSBnZm4sXG41MTkwOlx0XHRcdC5zbG90ID0ga3ZtX3ZjcHVfZ2ZuX3RvX21lbXNsb3QodmNwdSwgZ2ZuKSxcbjUxOTE6XHRcdFx0LnBmbiA9IHBmbixcbjUxOTI6XHRcdFx0Lm1hcF93cml0YWJsZSA9IHRydWUsXG41MTkzOlx0XHR9O1xuNTE5NDpcdFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cdTAwM2Vrdm07XG41MTk1Olx0XHRpbnQgcjtcbjUxOTY6XHRcbjUxOTc6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuNTE5ODpcdFxuNTE5OTpcdFx0LypcbjUyMDA6XHRcdCAqIE1hcHBpbmcgYSBwcmUtZGV0ZXJtaW5lZCBwcml2YXRlIHBmbiBpcyBpbnRlbmRlZCBvbmx5IGZvciB1c2Ugd2hlblxuNTIwMTpcdFx0ICogcG9wdWxhdGluZyBhIGd1ZXN0X21lbWZkIGluc3RhbmNlLiAgQXNzZXJ0IHRoYXQgdGhlIHNsb3QgaXMgYmFja2VkXG41MjAyOlx0XHQgKiBieSBndWVzdF9tZW1mZCBhbmQgdGhhdCB0aGUgZ21lbSBpbnN0YW5jZSYjMzk7cyBpbnZhbGlkYXRlX2xvY2sgaXMgaGVsZC5cbjUyMDM6XHRcdCAqL1xuNTIwNDpcdFx0a3ZtX2Fzc2VydF9nbWVtX2ludmFsaWRhdGVfbG9ja19oZWxkKGZhdWx0LnNsb3QpO1xuNTIwNTpcdFxuNTIwNjpcdFx0aWYgKEtWTV9CVUdfT04oIXRkcF9tbXVfZW5hYmxlZCwga3ZtKSlcbjUyMDc6XHRcdFx0cmV0dXJuIC1FSU87XG41MjA4Olx0XG41MjA5Olx0XHRpZiAoa3ZtX2dmbl9pc193cml0ZV90cmFja2VkKGt2bSwgZmF1bHQuc2xvdCwgZmF1bHQuZ2ZuKSlcbjUyMTA6XHRcdFx0cmV0dXJuIC1FUEVSTTtcbjUyMTE6XHRcbjUyMTI6XHRcdGRvIHtcbjUyMTM6XHRcdFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuNTIxNDpcdFx0XHRcdHJldHVybiAtRUlOVFI7XG41MjE1Olx0XG41MjE2Olx0XHRcdGlmIChrdm1fdGVzdF9yZXF1ZXN0KEtWTV9SRVFfVk1fREVBRCwgdmNwdSkpXG41MjE3Olx0XHRcdFx0cmV0dXJuIC1FSU87XG41MjE4Olx0XG41MjE5Olx0XHRcdHIgPSBrdm1fbW11X3JlbG9hZCh2Y3B1KTtcbjUyMjA6XHRcdFx0aWYgKHIpXG41MjIxOlx0XHRcdFx0cmV0dXJuIHI7XG41MjIyOlx0XG41MjIzOlx0XHRcdHIgPSBtbXVfdG9wdXBfbWVtb3J5X2NhY2hlcyh2Y3B1LCBmYWxzZSk7XG41MjI0Olx0XHRcdGlmIChyKVxuNTIyNTpcdFx0XHRcdHJldHVybiByO1xuNTIyNjpcdFxuNTIyNzpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbjUyMjg6XHRcbjUyMjk6XHRcdFx0Z3VhcmQocmVhZF9sb2NrKShcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuNTIzMDpcdFxuNTIzMTpcdFx0XHQvKlxuNTIzMjpcdFx0XHQgKiBCZWNhdXNlIHNsb3RzX2xvY2sgaXMgaGVsZCwgaXQgc2hvdWxkIGJlIGltcG9zc2libGUgZm9yICphbnkqXG41MjMzOlx0XHRcdCAqIHJvb3RzIHRvIGJlIGludmFsaWRhdGVkIGFmdGVyIHRoZSBpbml0aWFsIE1NVSByZWxvYWQuICBXQVJOLFxuNTIzNDpcdFx0XHQgKiBidXQgY29udGludWUgb247IHRoZSBhYm92ZSBNTVUgcmVsb2FkIHdpbGwgZG8gdGhlIHJpZ2h0IHRoaW5nXG41MjM1Olx0XHRcdCAqIGlmIHRoZSBjdXJyZW50IHJvb3QgaXMgYWN0dWFsbHkgaW52YWxpZC5cbjUyMzY6XHRcdFx0ICovXG41MjM3Olx0XHRcdFdBUk5fT05fT05DRShrdm1fdGVzdF9yZXF1ZXN0KEtWTV9SRVFfTU1VX0ZSRUVfT0JTT0xFVEVfUk9PVFMsIHZjcHUpKTtcbjUyMzg6XHRcbjUyMzk6XHRcdFx0LypcbjUyNDA6XHRcdFx0ICogU25hcHNob3QgdGhlIGludmFsaWRhdGlvbiBzZXF1ZW5jZSBjb3VudGVyIGFmdGVyIGFjcXVpcmluZ1xuNTI0MTpcdFx0XHQgKiBtbXVfbG9jaywgYXMgZ3Vlc3RfbWVtZmQgZ3VhcmFudGVlcyB0aGUgdmFsaWRpdHkgb2YgdGhlIHBmbixcbjUyNDI6XHRcdFx0ICogaS5lLiBhbnkgY29uY3VycmVudCBpbnZhbGlkYXRpb25zIGFyZSBndWFyYW50ZWVkIHRvIGJlXG41MjQzOlx0XHRcdCAqIGlycmVsZXZhbnQuXG41MjQ0Olx0XHRcdCAqL1xuNTI0NTpcdFx0XHRmYXVsdC5tbXVfc2VxID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlbW11X2ludmFsaWRhdGVfc2VxO1xuNTI0NjpcdFx0XHRpZiAoaXNfcGFnZV9mYXVsdF9zdGFsZSh2Y3B1LCBcdTAwMjZmYXVsdCkpIHtcbjUyNDc6XHRcdFx0XHRyID0gUkVUX1BGX1JFVFJZO1xuNTI0ODpcdFx0XHRcdGNvbnRpbnVlO1xuNTI0OTpcdFx0XHR9XG41MjUwOlx0XG41MjUxOlx0XHRcdHIgPSBrdm1fdGRwX21tdV9tYXAodmNwdSwgXHUwMDI2ZmF1bHQpO1xuNTI1MjpcdFx0fSB3aGlsZSAociA9PSBSRVRfUEZfUkVUUlkpO1xuNTI1MzpcdFxuNTI1NDpcdFx0aWYgKHIgIT0gUkVUX1BGX0ZJWEVEKVxuNTI1NTpcdFx0XHRyZXR1cm4gLUVJTztcbjUyNTY6XHRcbjUyNTc6XHRcdHJldHVybiAwO1xuNTI1ODpcdH1cbjUyNTk6XHRFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKTtcbjUyNjA6XHQjZW5kaWZcbjUyNjE6XHRcbjUyNjI6XHRzdGF0aWMgdm9pZCBub25wYWdpbmdfaW5pdF9jb250ZXh0KHN0cnVjdCBrdm1fbW11ICpjb250ZXh0KVxuNTI2MzpcdHtcbjUyNjQ6XHRcdGNvbnRleHQtXHUwMDNlcGFnZV9mYXVsdCA9IG5vbnBhZ2luZ19wYWdlX2ZhdWx0O1xuNTI2NTpcdFx0Y29udGV4dC1cdTAwM2VzeW5jX3NwdGUgPSBOVUxMO1xuNTI2NjpcdH1cbjUyNjc6XHRcbjUyNjg6XHRzdGF0aWMgaW5saW5lIGJvb2wgaXNfcm9vdF91c2FibGUoc3RydWN0IGt2bV9tbXVfcm9vdF9pbmZvICpyb290LCBncGFfdCBwZ2QsXG41MjY5Olx0XHRcdFx0XHQgIHVuaW9uIGt2bV9tbXVfcGFnZV9yb2xlIHJvbGUpXG41MjcwOlx0e1xuNTI3MTpcdFx0c3RydWN0IGt2bV9tbXVfcGFnZSAqc3A7XG41MjcyOlx0XG41MjczOlx0XHRpZiAoIVZBTElEX1BBR0Uocm9vdC1cdTAwM2VocGEpKVxuNTI3NDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3ODkKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgSW5pdGlhbGl6YXRpb24gYW5kIFJlbG9hZCBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSB0aGF0IHRoZSBgZmF1bHRgIHZhcmlhYmxlIGdldHMgYSBmdWxsIGluaXRpYWxpemF0aW9uIHJpZ2h0IG9mZiB0aGUgYmF0IHdpdGggdGhlIGB7IC4uLiB9YC4gVGhhdCYjMzk7cyBnb29kLiBJdCBlbnN1cmVzIGFsbCB0aGUgZmllbGRzIGFyZSB6ZXJvZWQgb3V0LCBzbyB3ZSBkb24mIzM5O3QgaGF2ZSB0byB3b3JyeSBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBhdCB0aGF0IHBvaW50LiBNYWtlcyB0aGluZ3MgY2xlYW5lci4KClRoZSBwYXRjaCBpdHNlbGYgc2VlbXMgdG8gYmUgbW92aW5nIGBrdm1fbW11X3JlbG9hZGAgYW5kIGBtbXVfdG9wdXBfbWVtb3J5X2NhY2hlc2AgKmludG8qIHRoZSByZXRyeSBsb29wLiBBaGEsIEkgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nLiBUaGV5JiMzOTtyZSBkb2luZyB0aGlzIHRvIGFkZHJlc3MgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgYSBzY2VuYXJpbyB3aGVyZSBga3ZtX21tdV9yZWxvYWRgIG1pZ2h0IGFjdHVhbGx5IG5lZWQgdG8gYmUgcmUtZXhlY3V0ZWQgaWYgdGhlIGxvb3AgaGFzIHRvIHJldHJ5LiBJIGFncmVlIHdpdGggdGhhdCBhc3Nlc3NtZW50LiBJdCYjMzk7cyB0aGUgcmlnaHQgZml4IHRvIGVuc3VyZSBjb25zaXN0ZW5jeS4gR2l2ZW4gdGhhdCwgdGhlcmUmIzM5O3Mgbm8gd2F5IHdlIGNvdWxkIGhhdmUgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuCgpOb3csIGxldCBtZSBzaGlmdCBnZWFycyBhbmQgdGFrZSBhIGxvb2sgYXQgaG93IGBrdm1fdGRwX3BhZ2VfcHJlZmF1bHRgIGZpdHMgaW50byB0aGlzIHdob2xlIHBpY3R1cmUuIFRpbWUgdG8gZGlnIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvbW11LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MDQwOlx0XG41MDQxOlx0XHRyZXR1cm4gcjtcbjUwNDI6XHR9XG41MDQzOlx0XG41MDQ0Olx0XG41MDQ1Olx0c3RhdGljIGludCBrdm1fdGRwX3BhZ2VfcHJlZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsXG41MDQ2Olx0XHRcdFx0XHQgdTY0IGVycm9yX2NvZGUsIHU4ICpsZXZlbClcbjUwNDc6XHR7XG41MDQ4Olx0XHRpbnQgcjtcbjUwNDk6XHRcbjUwNTA6XHRcdC8qXG41MDUxOlx0XHQgKiBSZXN0cmljdCB0byBURFAgcGFnZSBmYXVsdCwgc2luY2UgdGhhdCYjMzk7cyB0aGUgb25seSBjYXNlIHdoZXJlIHRoZSBNTVVcbjUwNTI6XHRcdCAqIGlzIGluZGV4ZWQgYnkgR1BBLlxuNTA1MzpcdFx0ICovXG41MDU0Olx0XHRpZiAodmNwdS1cdTAwM2VhcmNoLm1tdS1cdTAwM2VwYWdlX2ZhdWx0ICE9IGt2bV90ZHBfcGFnZV9mYXVsdClcbjUwNTU6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuNTA1NjpcdFxuNTA1NzpcdFx0ZG8ge1xuNTA1ODpcdFx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG41MDU5Olx0XHRcdFx0cmV0dXJuIC1FSU5UUjtcbjUwNjA6XHRcbjUwNjE6XHRcdFx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfVk1fREVBRCwgdmNwdSkpXG41MDYyOlx0XHRcdFx0cmV0dXJuIC1FSU87XG41MDYzOlx0XG41MDY0Olx0XHRcdHIgPSBrdm1fbW11X3JlbG9hZCh2Y3B1KTtcbjUwNjU6XHRcdFx0aWYgKHIpXG41MDY2Olx0XHRcdFx0cmV0dXJuIHI7XG41MDY3Olx0XG41MDY4Olx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuNTA2OTpcdFx0XHRyID0ga3ZtX21tdV9kb19wYWdlX2ZhdWx0KHZjcHUsIGdwYSwgZXJyb3JfY29kZSwgdHJ1ZSwgTlVMTCwgbGV2ZWwpO1xuNTA3MDpcdFx0fSB3aGlsZSAociA9PSBSRVRfUEZfUkVUUlkpO1xuNTA3MTpcdFxuNTA3MjpcdFx0aWYgKHIgXHUwMDNjIDApXG41MDczOlx0XHRcdHJldHVybiByO1xuNTA3NDpcdFxuNTA3NTpcdFx0c3dpdGNoIChyKSB7XG41MDc2Olx0XHRjYXNlIFJFVF9QRl9GSVhFRDpcbjUwNzc6XHRcdGNhc2UgUkVUX1BGX1NQVVJJT1VTOlxuNTA3ODpcdFx0Y2FzZSBSRVRfUEZfV1JJVEVfUFJPVEVDVEVEOlxuNTA3OTpcdFx0XHRyZXR1cm4gMDtcbjUwODA6XHRcbjUwODE6XHRcdGNhc2UgUkVUX1BGX0VNVUxBVEU6XG41MDgyOlx0XHRcdHJldHVybiAtRU5PRU5UO1xuNTA4MzpcdFxuNTA4NDpcdFx0Y2FzZSBSRVRfUEZfUkVUUlk6XG41MDg1Olx0XHRjYXNlIFJFVF9QRl9DT05USU5VRTpcbjUwODY6XHRcdGNhc2UgUkVUX1BGX0lOVkFMSUQ6XG41MDg3Olx0XHRkZWZhdWx0OlxuNTA4ODpcdFx0XHRXQVJOX09OQ0UoMSwgXCYjMzQ7Y291bGQgbm90IGZpeCBwYWdlIGZhdWx0IGR1cmluZyBwcmVmYXVsdFwmIzM0Oyk7XG41MDg5Olx0XHRcdHJldHVybiAtRUlPO1xuNTA5MDpcdFx0fVxuNTA5MTpcdH1cbjUwOTI6XHRcbjUwOTM6XHRsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG41MDk0Olx0XHRcdFx0XHQgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSlcbjUwOTU6XHR7XG41MDk2Olx0XHR1NjQgZXJyb3JfY29kZSA9IFBGRVJSX0dVRVNUX0ZJTkFMX01BU0s7XG41MDk3Olx0XHR1OCBsZXZlbCA9IFBHX0xFVkVMXzRLO1xuNTA5ODpcdFx0dTY0IGRpcmVjdF9iaXRzO1xuNTA5OTpcdFx0dTY0IGVuZDtcbjUxMDA6XHRcdGludCByO1xuNTEwMTpcdFxuNTEwMjpcdFx0aWYgKCF2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnByZV9mYXVsdF9hbGxvd2VkKVxuNTEwMzpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG41MTA0Olx0XG41MTA1Olx0XHRpZiAoa3ZtX2lzX2dmbl9hbGlhcyh2Y3B1LVx1MDAzZWt2bSwgZ3BhX3RvX2dmbihyYW5nZS1cdTAwM2VncGEpKSlcbjUxMDY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG41MTA3Olx0XG41MTA4Olx0XHRkaXJlY3RfYml0cyA9IDA7XG41MTA5Olx0XHRpZiAoa3ZtX2FyY2hfaGFzX3ByaXZhdGVfbWVtKHZjcHUtXHUwMDNla3ZtKSBcdTAwMjZcdTAwMjZcbjUxMTA6XHRcdCAgICBrdm1fbWVtX2lzX3ByaXZhdGUodmNwdS1cdTAwM2Vrdm0sIGdwYV90b19nZm4ocmFuZ2UtXHUwMDNlZ3BhKSkpXG41MTExOlx0XHRcdGVycm9yX2NvZGUgfD0gUEZFUlJfUFJJVkFURV9BQ0NFU1M7XG41MTEyOlx0XHRlbHNlXG41MTEzOlx0XHRcdGRpcmVjdF9iaXRzID0gZ2ZuX3RvX2dwYShrdm1fZ2ZuX2RpcmVjdF9iaXRzKHZjcHUtXHUwMDNla3ZtKSk7XG41MTE0Olx0XG41MTE1Olx0XHQvKlxuNTExNjpcdFx0ICogU2hhZG93IHBhZ2luZyB1c2VzIEdWQSBmb3Iga3ZtIHBhZ2UgZmF1bHQsIHNvIHJlc3RyaWN0IHRvXG41MTE3Olx0XHQgKiB0d28tZGltZW5zaW9uYWwgcGFnaW5nLlxuNTExODpcdFx0ICovXG41MTE5Olx0XHRyID0ga3ZtX3RkcF9wYWdlX3ByZWZhdWx0KHZjcHUsIHJhbmdlLVx1MDAzZWdwYSB8IGRpcmVjdF9iaXRzLCBlcnJvcl9jb2RlLCBcdTAwMjZsZXZlbCk7XG41MTIwOlx0XHRpZiAociBcdTAwM2MgMClcbjUxMjE6XHRcdFx0cmV0dXJuIHI7XG41MTIyOlx0XG41MTIzOlx0XHQvKlxuNTEyNDpcdFx0ICogSWYgdGhlIG1hcHBpbmcgdGhhdCBjb3ZlcnMgcmFuZ2UtXHUwMDNlZ3BhIGNhbiB1c2UgYSBodWdlIHBhZ2UsIGl0XG41MTI1Olx0XHQgKiBtYXkgc3RhcnQgYmVsb3cgaXQgb3IgZW5kIGFmdGVyIHJhbmdlLVx1MDAzZWdwYSAmIzQzOyByYW5nZS1cdTAwM2VzaXplLlxuNTEyNjpcdFx0ICovXG41MTI3Olx0XHRlbmQgPSAocmFuZ2UtXHUwMDNlZ3BhIFx1MDAyNiBLVk1fSFBBR0VfTUFTSyhsZXZlbCkpICYjNDM7IEtWTV9IUEFHRV9TSVpFKGxldmVsKTtcbjUxMjg6XHRcdHJldHVybiBtaW4ocmFuZ2UtXHUwMDNlc2l6ZSwgZW5kIC0gcmFuZ2UtXHUwMDNlZ3BhKTtcbjUxMjk6XHR9XG41MTMwOlx0XG41MTMxOlx0dm9pZCBrdm1fYXJjaF9hc3luY19wYWdlX3JlYWR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9hc3luY19wZiAqd29yaylcbjUxMzI6XHR7XG41MTMzOlx0XHRpbnQgcjtcbjUxMzQ6XHRcbjUxMzU6XHRcdGlmIChXQVJOX09OX09OQ0Uod29yay1cdTAwM2VhcmNoLmVycm9yX2NvZGUgXHUwMDI2IFBGRVJSX1BSSVZBVEVfQUNDRVNTKSlcbjUxMzY6XHRcdFx0cmV0dXJuO1xuNTEzNzpcdFxuNTEzODpcdFx0aWYgKCh2Y3B1LVx1MDAzZWFyY2gubW11LVx1MDAzZXJvb3Rfcm9sZS5kaXJlY3QgIT0gd29yay1cdTAwM2VhcmNoLmRpcmVjdF9tYXApIHx8XG41MTM5Olx0XHQgICAgICB3b3JrLVx1MDAzZXdha2V1cF9hbGwpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2OTkKCQkJCQkJCW91dHB1dDogMTY0CgkJCQkJCQl0aG91Z2h0czogMjQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBLVk0gTU1VIFJlbG9hZCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGZpeGluZyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBpbiBga3ZtX21tdV9yZWxvYWRgLiBUaGUgY29yZSBpc3N1ZSBpcyB0aGF0IGBrdm1fbW11X3JlbG9hZGAgd2FzIGJlaW5nIGNhbGxlZCBvdXRzaWRlIHRoZSByZXRyeSBsb29wLCB3aGljaCwgaWYgdGhlIGxvb3AgcmV0cmllZCwgY291bGQgcmVzdWx0IGluIHRoZSBsb29wIHVzaW5nIGFuIG91dGRhdGVkIE1NVSByb290IG9yIHBvdGVudGlhbGx5IGFuIGludmFsaWQgc3RhdGUuIEkgaW5pdGlhbGx5IHRob3VnaHQgdGhlcmUgbWlnaHQgYmUgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUsIGJ1dCBhZnRlciB0aGlua2luZyBhYm91dCBpdCwgdGhhdCYjMzk7cyBub3QgdGhlIGNhc2UuIGBrdm1fbW11X3JlbG9hZGAgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdXAgdGhlIE1NVSByb290LCBzbyB0aGUgcHJvYmxlbSBpcyB0aGF0IGlmIGl0JiMzOTtzICpub3QqIGNhbGxlZCB3aXRoaW4gdGhlIGxvb3AgYW5kIHRoZSByb290IGJlY29tZXMgb2Jzb2xldGUgZHVlIHRvIGFuIGludmFsaWRhdGlvbiBkdXJpbmcgdGhlIGxvb3AsIHdlIGNvdWxkIGhhdmUgYSByZXRyeSB0aGF0JiMzOTtzIG9wZXJhdGluZyBvbiBzdGFsZSBkYXRhLiBUaGUgcmVzdWx0aW5nIGJlaGF2aW9yIGlzIGEgbG9naWMgYnVnIHRoYXQgY291bGQgbGVhZCB0byBuYXN0eSBpc3N1ZXMg4oCTIHVzZS1hZnRlci1mcmVlLCBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSwgb3IgcG9zc2libHkgYW4gaW5maW5pdGUgbG9vcC4gQnV0IGRlZmluaXRlbHkgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKSSB0aGVuIGhhZCB0byBkb3VibGUgY2hlY2sgYWJvdXQgdGhlIGBmYXVsdGAgc3RydWN0IHRvIHNlZSBpZiB0aGUgcGF0Y2ggaW50cm9kdWNlZCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEJ1dCwgbm8sIGBzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQgZmF1bHQgPSB7IC4uLiB9O2AgbWVhbnMgdGhhdCBhbnkgbWlzc2luZyBmaWVsZHMgaW4gdGhlIGluaXRpYWxpemVyIGxpc3QgYXJlIHplcm8taW5pdGlhbGl6ZWQuIFNvLCBpdCYjMzk7cyBmdWxseSBpbml0aWFsaXplZC4KClRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBuZWVkIEtNU0FOLiBJdCBzaG91bGQgYmUgZGV0ZWN0YWJsZSBieSBLQVNBTi9MT0NLREVQL3N0YW5kYXJkIHRlc3Rpbmcgb3Igd291bGQgaGF2ZSBiZWVuIGZvdW5kIGluIHRlc3RpbmcgdGhhdCBmaXhlZCBhIGtub3duIGJ1Zy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgTU1VIHJlbG9hZCBhbmQgY2FjaGUgdG9wLXVwIGZ1bmN0aW9ucyBpbnNpZGUgdGhlIHJldHJ5IGxvb3BzIGZvciBLVk0gcGFnZSBmYXVsdCBoYW5kbGluZyAoYGt2bV90ZHBfcGFnZV9wcmVmYXVsdGAgYW5kIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gKS4gVGhpcyBmaXhlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBhIGNvbmN1cnJlbnQgaW52YWxpZGF0aW9uIGNvdWxkIGNhdXNlIHRoZSBsb29wIHRvIHJldHJ5IHdpdGhvdXQgcmVsb2FkaW5nIHRoZSBNTVUgcm9vdCwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBhbiBvYnNvbGV0ZSByb290IGJlaW5nIHVzZWQuIFRoZSBgZmF1bHRgIHN0cnVjdHVyZSBpcyBmdWxseSB6ZXJvLWluaXRpYWxpemVkIGZvciBhbnkgdW5zcGVjaWZpZWQgZmllbGRzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBwYXRjaC4gQW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBhcmlzaW5nIGZyb20gb2Jzb2xldGUgcm9vdHMgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgTU1VIHJlbG9hZCBhbmQgY2FjaGUgdG9wLXVwIGZ1bmN0aW9ucyBpbnNpZGUgdGhlIHJldHJ5IGxvb3BzIGZvciBLVk0gcGFnZSBmYXVsdCBoYW5kbGluZyAoYGt2bV90ZHBfcGFnZV9wcmVmYXVsdGAgYW5kIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gKS4gVGhpcyBmaXhlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBhIGNvbmN1cnJlbnQgaW52YWxpZGF0aW9uIGNvdWxkIGNhdXNlIHRoZSBsb29wIHRvIHJldHJ5IHdpdGhvdXQgcmVsb2FkaW5nIHRoZSBNTVUgcm9vdCwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBhbiBvYnNvbGV0ZSByb290IGJlaW5nIHVzZWQuIFRoZSBgZmF1bHRgIHN0cnVjdHVyZSBpcyBmdWxseSB6ZXJvLWluaXRpYWxpemVkIGZvciBhbnkgdW5zcGVjaWZpZWQgZmllbGRzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBwYXRjaC4gQW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBhcmlzaW5nIGZyb20gb2Jzb2xldGUgcm9vdHMgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjo1Mzo0MS44Njk4OTgzNDVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTg1MTIxMzM4MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5XCIsXG4gICAgXCJrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIE1NVSByZWxvYWQgYW5kIGNhY2hlIHRvcC11cCBmdW5jdGlvbnMgaW5zaWRlIHRoZSByZXRyeSBsb29wcyBmb3IgS1ZNIHBhZ2UgZmF1bHQgaGFuZGxpbmcgKGBrdm1fdGRwX3BhZ2VfcHJlZmF1bHRgIGFuZCBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYCkuIFRoaXMgZml4ZXMgYSBsb2dpYyBidWcgd2hlcmUgYSBjb25jdXJyZW50IGludmFsaWRhdGlvbiBjb3VsZCBjYXVzZSB0aGUgbG9vcCB0byByZXRyeSB3aXRob3V0IHJlbG9hZGluZyB0aGUgTU1VIHJvb3QsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYW4gb2Jzb2xldGUgcm9vdCBiZWluZyB1c2VkLiBUaGUgYGZhdWx0YCBzdHJ1Y3R1cmUgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZCBmb3IgYW55IHVuc3BlY2lmaWVkIGZpZWxkcy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgcGF0Y2guIEFueSBtZW1vcnkgY29ycnVwdGlvbiBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgYXJpc2luZyBmcm9tIG9ic29sZXRlIHJvb3RzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0gTU1VIHBhZ2UgZmF1bHQgaGFuZGxpbmcsIHNwZWNpZmljYWxseSBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBhbmQgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAuIEl0IG1vdmVzIE1NVSByZWxvYWQgYW5kIGNhY2hlIHRvcC11cCBvcGVyYXRpb25zIGluc2lkZSB0aGUgcmV0cnkgbG9vcCB0byBoYW5kbGUgY29uY3VycmVudCBpbnZhbGlkYXRpb25zIGNvcnJlY3RseS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIEtWTSBNTVUgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjUzOjQxLjg2OTkwMzkxNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYwMTU0ODc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNGRiMDZkYTRkMDFjMDI3M2FmNzhkN2M4NDRhMGNkMGI3ODYzNTkwZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxNjo1Mzo0MCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xcbmluZGV4IDA2NGVjYzMzYjkyNjcuLjc5YzQ1MGQ2NzdiNDAgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcXG5AQCAtNTA2MSw2ICs1MDYxLDEwIEBAIHN0YXRpYyBpbnQga3ZtX3RkcF9wYWdlX3ByZWZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLFxcbiBcXHRcXHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9WTV9ERUFELCB2Y3B1KSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcbitcXHRcXHRyID0ga3ZtX21tdV9yZWxvYWQodmNwdSk7XFxuK1xcdFxcdGlmIChyKVxcbitcXHRcXHRcXHRyZXR1cm4gcjtcXG4rXFxuIFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbiBcXHRcXHRyID0ga3ZtX21tdV9kb19wYWdlX2ZhdWx0KHZjcHUsIGdwYSwgZXJyb3JfY29kZSwgdHJ1ZSwgTlVMTCwgbGV2ZWwpO1xcbiBcXHR9IHdoaWxlIChyID09IFJFVF9QRl9SRVRSWSk7XFxuQEAgLTUxMDEsMTQgKzUxMDUsNiBAQCBsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIFxcdGlmIChrdm1faXNfZ2ZuX2FsaWFzKHZjcHUtXFx1MDAzZWt2bSwgZ3BhX3RvX2dmbihyYW5nZS1cXHUwMDNlZ3BhKSkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0LypcXG4tXFx0ICogcmVsb2FkIGlzIGVmZmljaWVudCB3aGVuIGNhbGxlZCByZXBlYXRlZGx5LCBzbyB3ZSBjYW4gZG8gaXQgb25cXG4tXFx0ICogZXZlcnkgaXRlcmF0aW9uLlxcbi1cXHQgKi9cXG4tXFx0ciA9IGt2bV9tbXVfcmVsb2FkKHZjcHUpO1xcbi1cXHRpZiAocilcXG4tXFx0XFx0cmV0dXJuIHI7XFxuLVxcbiBcXHRkaXJlY3RfYml0cyA9IDA7XFxuIFxcdGlmIChrdm1fYXJjaF9oYXNfcHJpdmF0ZV9tZW0odmNwdS1cXHUwMDNla3ZtKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAga3ZtX21lbV9pc19wcml2YXRlKHZjcHUtXFx1MDAzZWt2bSwgZ3BhX3RvX2dmbihyYW5nZS1cXHUwMDNlZ3BhKSkpXFxuQEAgLTUyMTMsMTQgKzUyMDksNiBAQCBpbnQga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuKVxcbiBcXHRpZiAoa3ZtX2dmbl9pc193cml0ZV90cmFja2VkKGt2bSwgZmF1bHQuc2xvdCwgZmF1bHQuZ2ZuKSlcXG4gXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gXFxuLVxcdHIgPSBrdm1fbW11X3JlbG9hZCh2Y3B1KTtcXG4tXFx0aWYgKHIpXFxuLVxcdFxcdHJldHVybiByO1xcbi1cXG4tXFx0ciA9IG1tdV90b3B1cF9tZW1vcnlfY2FjaGVzKHZjcHUsIGZhbHNlKTtcXG4tXFx0aWYgKHIpXFxuLVxcdFxcdHJldHVybiByO1xcbi1cXG4gXFx0ZG8ge1xcbiBcXHRcXHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVFI7XFxuQEAgLTUyMjgsMTAgKzUyMTYsMzggQEAgaW50IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbilcXG4gXFx0XFx0aWYgKGt2bV90ZXN0X3JlcXVlc3QoS1ZNX1JFUV9WTV9ERUFELCB2Y3B1KSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcbitcXHRcXHRyID0ga3ZtX21tdV9yZWxvYWQodmNwdSk7XFxuK1xcdFxcdGlmIChyKVxcbitcXHRcXHRcXHRyZXR1cm4gcjtcXG4rXFxuK1xcdFxcdHIgPSBtbXVfdG9wdXBfbWVtb3J5X2NhY2hlcyh2Y3B1LCBmYWxzZSk7XFxuK1xcdFxcdGlmIChyKVxcbitcXHRcXHRcXHRyZXR1cm4gcjtcXG4rXFxuIFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbiBcXG4gXFx0XFx0Z3VhcmQocmVhZF9sb2NrKShcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuIFxcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBCZWNhdXNlIHNsb3RzX2xvY2sgaXMgaGVsZCwgaXQgc2hvdWxkIGJlIGltcG9zc2libGUgZm9yICphbnkqXFxuK1xcdFxcdCAqIHJvb3RzIHRvIGJlIGludmFsaWRhdGVkIGFmdGVyIHRoZSBpbml0aWFsIE1NVSByZWxvYWQuICBXQVJOLFxcbitcXHRcXHQgKiBidXQgY29udGludWUgb247IHRoZSBhYm92ZSBNTVUgcmVsb2FkIHdpbGwgZG8gdGhlIHJpZ2h0IHRoaW5nXFxuK1xcdFxcdCAqIGlmIHRoZSBjdXJyZW50IHJvb3QgaXMgYWN0dWFsbHkgaW52YWxpZC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdFdBUk5fT05fT05DRShrdm1fdGVzdF9yZXF1ZXN0KEtWTV9SRVFfTU1VX0ZSRUVfT0JTT0xFVEVfUk9PVFMsIHZjcHUpKTtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFNuYXBzaG90IHRoZSBpbnZhbGlkYXRpb24gc2VxdWVuY2UgY291bnRlciBhZnRlciBhY3F1aXJpbmdcXG4rXFx0XFx0ICogbW11X2xvY2ssIGFzIGd1ZXN0X21lbWZkIGd1YXJhbnRlZXMgdGhlIHZhbGlkaXR5IG9mIHRoZSBwZm4sXFxuK1xcdFxcdCAqIGkuZS4gYW55IGNvbmN1cnJlbnQgaW52YWxpZGF0aW9ucyBhcmUgZ3VhcmFudGVlZCB0byBiZVxcbitcXHRcXHQgKiBpcnJlbGV2YW50LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0ZmF1bHQubW11X3NlcSA9IHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlbW11X2ludmFsaWRhdGVfc2VxO1xcbitcXHRcXHRpZiAoaXNfcGFnZV9mYXVsdF9zdGFsZSh2Y3B1LCBcXHUwMDI2ZmF1bHQpKSB7XFxuK1xcdFxcdFxcdHIgPSBSRVRfUEZfUkVUUlk7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRyID0ga3ZtX3RkcF9tbXVfbWFwKHZjcHUsIFxcdTAwMjZmYXVsdCk7XFxuIFxcdH0gd2hpbGUgKHIgPT0gUkVUX1BGX1JFVFJZKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjUzOjQyLjMzMTAwNDU4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTg3MDk1ODgwMTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeVwiLFxuICAgIFwia3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIE1NVSBwYWdlIGZhdWx0IGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgYW5kIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gLiBJdCBtb3ZlcyBNTVUgcmVsb2FkIGFuZCBjYWNoZSB0b3AtdXAgb3BlcmF0aW9ucyBpbnNpZGUgdGhlIHJldHJ5IGxvb3AgdG8gaGFuZGxlIGNvbmN1cnJlbnQgaW52YWxpZGF0aW9ucyBjb3JyZWN0bHkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBLVk0gTU1VIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0ZGIwNmRhNGQwMWMwMjczYWY3OGQ3Yzg0NGEwY2QwYjc4NjM1OTBmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTY6NTM6NDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuaW5kZXggMDY0ZWNjMzNiOTI2Ny4uNzljNDUwZDY3N2I0MCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbkBAIC01MDYxLDYgKzUwNjEsMTAgQEAgc3RhdGljIGludCBrdm1fdGRwX3BhZ2VfcHJlZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsXG4gXHRcdGlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX1ZNX0RFQUQsIHZjcHUpKVxuIFx0XHRcdHJldHVybiAtRUlPO1xuIFxuK1x0XHRyID0ga3ZtX21tdV9yZWxvYWQodmNwdSk7XG4rXHRcdGlmIChyKVxuK1x0XHRcdHJldHVybiByO1xuK1xuIFx0XHRjb25kX3Jlc2NoZWQoKTtcbiBcdFx0ciA9IGt2bV9tbXVfZG9fcGFnZV9mYXVsdCh2Y3B1LCBncGEsIGVycm9yX2NvZGUsIHRydWUsIE5VTEwsIGxldmVsKTtcbiBcdH0gd2hpbGUgKHIgPT0gUkVUX1BGX1JFVFJZKTtcbkBAIC01MTAxLDE0ICs1MTA1LDYgQEAgbG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0aWYgKGt2bV9pc19nZm5fYWxpYXModmNwdS1cdTAwM2Vrdm0sIGdwYV90b19nZm4ocmFuZ2UtXHUwMDNlZ3BhKSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0Lypcbi1cdCAqIHJlbG9hZCBpcyBlZmZpY2llbnQgd2hlbiBjYWxsZWQgcmVwZWF0ZWRseSwgc28gd2UgY2FuIGRvIGl0IG9uXG4tXHQgKiBldmVyeSBpdGVyYXRpb24uXG4tXHQgKi9cbi1cdHIgPSBrdm1fbW11X3JlbG9hZCh2Y3B1KTtcbi1cdGlmIChyKVxuLVx0XHRyZXR1cm4gcjtcbi1cbiBcdGRpcmVjdF9iaXRzID0gMDtcbiBcdGlmIChrdm1fYXJjaF9oYXNfcHJpdmF0ZV9tZW0odmNwdS1cdTAwM2Vrdm0pIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGt2bV9tZW1faXNfcHJpdmF0ZSh2Y3B1LVx1MDAzZWt2bSwgZ3BhX3RvX2dmbihyYW5nZS1cdTAwM2VncGEpKSlcbkBAIC01MjEzLDE0ICs1MjA5LDYgQEAgaW50IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbilcbiBcdGlmIChrdm1fZ2ZuX2lzX3dyaXRlX3RyYWNrZWQoa3ZtLCBmYXVsdC5zbG90LCBmYXVsdC5nZm4pKVxuIFx0XHRyZXR1cm4gLUVQRVJNO1xuIFxuLVx0ciA9IGt2bV9tbXVfcmVsb2FkKHZjcHUpO1xuLVx0aWYgKHIpXG4tXHRcdHJldHVybiByO1xuLVxuLVx0ciA9IG1tdV90b3B1cF9tZW1vcnlfY2FjaGVzKHZjcHUsIGZhbHNlKTtcbi1cdGlmIChyKVxuLVx0XHRyZXR1cm4gcjtcbi1cbiBcdGRvIHtcbiBcdFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuIFx0XHRcdHJldHVybiAtRUlOVFI7XG5AQCAtNTIyOCwxMCArNTIxNiwzOCBAQCBpbnQga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuKVxuIFx0XHRpZiAoa3ZtX3Rlc3RfcmVxdWVzdChLVk1fUkVRX1ZNX0RFQUQsIHZjcHUpKVxuIFx0XHRcdHJldHVybiAtRUlPO1xuIFxuK1x0XHRyID0ga3ZtX21tdV9yZWxvYWQodmNwdSk7XG4rXHRcdGlmIChyKVxuK1x0XHRcdHJldHVybiByO1xuK1xuK1x0XHRyID0gbW11X3RvcHVwX21lbW9yeV9jYWNoZXModmNwdSwgZmFsc2UpO1xuK1x0XHRpZiAocilcbitcdFx0XHRyZXR1cm4gcjtcbitcbiBcdFx0Y29uZF9yZXNjaGVkKCk7XG4gXG4gXHRcdGd1YXJkKHJlYWRfbG9jaykoXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbiBcbitcdFx0LypcbitcdFx0ICogQmVjYXVzZSBzbG90c19sb2NrIGlzIGhlbGQsIGl0IHNob3VsZCBiZSBpbXBvc3NpYmxlIGZvciAqYW55KlxuK1x0XHQgKiByb290cyB0byBiZSBpbnZhbGlkYXRlZCBhZnRlciB0aGUgaW5pdGlhbCBNTVUgcmVsb2FkLiAgV0FSTixcbitcdFx0ICogYnV0IGNvbnRpbnVlIG9uOyB0aGUgYWJvdmUgTU1VIHJlbG9hZCB3aWxsIGRvIHRoZSByaWdodCB0aGluZ1xuK1x0XHQgKiBpZiB0aGUgY3VycmVudCByb290IGlzIGFjdHVhbGx5IGludmFsaWQuXG4rXHRcdCAqL1xuK1x0XHRXQVJOX09OX09OQ0Uoa3ZtX3Rlc3RfcmVxdWVzdChLVk1fUkVRX01NVV9GUkVFX09CU09MRVRFX1JPT1RTLCB2Y3B1KSk7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIFNuYXBzaG90IHRoZSBpbnZhbGlkYXRpb24gc2VxdWVuY2UgY291bnRlciBhZnRlciBhY3F1aXJpbmdcbitcdFx0ICogbW11X2xvY2ssIGFzIGd1ZXN0X21lbWZkIGd1YXJhbnRlZXMgdGhlIHZhbGlkaXR5IG9mIHRoZSBwZm4sXG4rXHRcdCAqIGkuZS4gYW55IGNvbmN1cnJlbnQgaW52YWxpZGF0aW9ucyBhcmUgZ3VhcmFudGVlZCB0byBiZVxuK1x0XHQgKiBpcnJlbGV2YW50LlxuK1x0XHQgKi9cbitcdFx0ZmF1bHQubW11X3NlcSA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZW1tdV9pbnZhbGlkYXRlX3NlcTtcbitcdFx0aWYgKGlzX3BhZ2VfZmF1bHRfc3RhbGUodmNwdSwgXHUwMDI2ZmF1bHQpKSB7XG4rXHRcdFx0ciA9IFJFVF9QRl9SRVRSWTtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuIFx0XHRyID0ga3ZtX3RkcF9tbXVfbWFwKHZjcHUsIFx1MDAyNmZhdWx0KTtcbiBcdH0gd2hpbGUgKHIgPT0gUkVUX1BGX1JFVFJZKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjUzOjQyLjMzMTAwNjcyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njk0MTQ5NzI1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLVk0gTU1VIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgZGl2aW5nIGludG8gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLCB3aGljaCBhbHdheXMgcGlxdWVzIG15IGludGVyZXN0LiBJdCBzZWVtcyB0byBiZSB0b3VjaGluZyBzZXZlcmFsIGtleSBmdW5jdGlvbnM6IGBrdm1fdGRwX3BhZ2VfcHJlZmF1bHRgLCBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCwgYW5kIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGxvb2tzIGxpa2UgbW92aW5nIGBrdm1fbW11X3JlbG9hZCh2Y3B1KWAgaW5zaWRlIHRoZSByZXRyeSBsb29wIHdpdGhpbiBga3ZtX3RkcF9wYWdlX3ByZWZhdWx0YCBhbmQgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAuIFRoYXQncyBhIHNpZ25pZmljYW50IGFsdGVyYXRpb24sIGluZGljYXRpbmcgYSBwb3RlbnRpYWwgcmVmaW5lbWVudCBpbiBob3cgdGhlIE1NVSBoYW5kbGVzIHBhZ2UgZmF1bHRzLiBBZGRpbmcgYG1tdV90b3B1cF9tZW1vcnlfY2FjaGVzYCBpbnNpZGUgdGhhdCBzYW1lIGxvb3AgaW4gYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAgc3VnZ2VzdHMgc29tZSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gb3IgY2FjaGUgbWFuYWdlbWVudCBpcyBoYXBwZW5pbmcgZHVyaW5nIGZhdWx0IGhhbmRsaW5nLiBQbHVzLCB0aGVyZSdzIGEgbmV3IGBpc19wYWdlX2ZhdWx0X3N0YWxlKHZjcHUsIFx1MDAyNmZhdWx0KWAgY2hlY2sgYmVpbmcgaW50cm9kdWNlZCwgd2hpY2ggcHJvYmFibHkgZGVhbHMgd2l0aCByZWR1bmRhbnQgb3Igb3V0ZGF0ZWQgcGFnZSBmYXVsdCBpbmZvcm1hdGlvbi5cblxuRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgY2hhbmdlIHRvIHRoZSBLVk0gTU1VLiBHaXZlbiB0aGUgbmF0dXJlIG9mIHRoZXNlIG1vZGlmaWNhdGlvbnMsIGl0J3MgZGVmaW5pdGVseSB3b3J0aCBnaXZpbmcgdGhpcyBwYXRjaCBhIHRob3JvdWdoIGZ1enppbmcuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBmb2N1cyBvbiBzcGVjaWZpYyBzeW1ib2xzLiBJIHN1c3BlY3QgYGt2bV90ZHBfcGFnZV9wcmVmYXVsdGAgbWlnaHQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBhbHRob3VnaCBiZWluZyBzdGF0aWMgY291bGQgbWFrZSBpdCBsZXNzIG9mIGEgZGlyZWN0IHRhcmdldCBmb3IgZnV6emluZy4gSG93ZXZlciwgYm90aCBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBhbmQgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAgYXJlIGV4cG9ydGVkIGFuZCB0aGVyZWZvcmUgdmVyeSBpbnRlcmVzdGluZy5cblxuVGltZSB0byBkZWx2ZSBpbnRvIGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYCBhbmQgZGlnIGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk0MywiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjUzOjQ5LjI3MjUwNjUzMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODQ4NTk4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL21tdS9tbXUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jPTUwNDU9c3RhdGljIGludCBrdm1fdGRwX3BhZ2VfcHJlZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUwOTItXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MDkzOmxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUwOTQtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjUzOjQ5LjM3MDk5NjQ0NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1MzExNDM4NjkyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gKipcblxuT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSB3b3JraW5ncyBvZiBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYC4gSXQncyBiZWVuIGEgd2hpbGUgc2luY2UgSSBkdWcgZGVlcCBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBURFAgTU1VLiBJIGtub3cgdGhpcyBmdW5jdGlvbiBpcyBjcnVjaWFsIGZvciBoYW5kbGluZyBwcml2YXRlIHBhZ2UgZnJhbWUgbnVtYmVycyB3aXRoaW4gdGhlIEtWTSBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgaGFwcGVucyBoZXJlIHdoZW4gd2UncmUgZGVhbGluZyB3aXRoIGEgcHJpdmF0ZSBQRk4gYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgc2hhZG93IHBhZ2UgdGFibGVzLiBXaGF0IHNwZWNpZmljIG1hcHBpbmdzIGFyZSBiZWluZyBlc3RhYmxpc2hlZCBvciBtb2RpZmllZD8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBkaXJlY3QgbWFwcGluZywgYSBzaGFkb3cgbWFwcGluZywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEkgc2hvdWxkIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gYW55IHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIHVzZWQgd2l0aGluIHRoaXMgZnVuY3Rpb24gYmVjYXVzZSB0aGV5IGFyZSBjcml0aWNhbCBmb3IgZW5zdXJpbmcgZGF0YSBpbnRlZ3JpdHkgYW5kIGF2b2lkaW5nIHJhY2UgY29uZGl0aW9ucywgZXNwZWNpYWxseSBjb25zaWRlcmluZyBpdHMgcm9sZSBpbiB0aGUgY3JpdGljYWwgcGF0aCBvZiBtZW1vcnkgYWNjZXNzLiBJcyB0aGVyZSBhbnl0aGluZyB1bnVzdWFsIGFib3V0IHRoZSBoYW5kbGluZyBvZiB0aGUgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSBpbiB0aGlzIHBhcnRpY3VsYXIgY29udGV4dCwgbGlrZSBzcGVjaWFsIGNvbnNpZGVyYXRpb25zIGZvciBodWdlIHBhZ2VzIG9yIG5lc3RlZCB2aXJ0dWFsaXphdGlvbj8gSSB3aWxsIG5lZWQgdG8gbG9vayB1cCBzb21lIGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIGxpa2UgYGt2bV9tbXVfcGFnZWAgYW5kIGl0cyByZWxhdGlvbiB0byB0aGUgYWN0dWFsIHBoeXNpY2FsIHBhZ2VzIHRvIGRldGVybWluZSBob3cgZXhhY3RseSB0aGUgZnVuY3Rpb24gaXMgZG9pbmcgaXRzIG1hcHBpbmcuIEkgc2hvdWxkIGFsc28gY2hlY2sgaWYgYW55IHJlY2VudCBwYXRjaGVzIGhhdmUgYWx0ZXJlZCBpdHMgYmVoYXZpb3IsIGFzIHRoaXMgYXJlYSBpcyBvZnRlbiBhIHBvaW50IG9mIG9uZ29pbmcgZGV2ZWxvcG1lbnQgYW5kIG9wdGltaXphdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkwNSwiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjAzOjAyLjQ4NTM4NTk1OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjU3NTI1NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9tbXUvbW11LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL21tdS9tbXUuYz01MTYzPXN0YXRpYyB2b2lkIGt2bV9hc3NlcnRfZ21lbV9pbnZhbGlkYXRlX2xvY2tfaGVsZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MTc0LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTE3NTppbnQga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuKVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTE3Ni17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUyNTgtfVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTI1OTpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUyNjAtI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjAzOjAyLjk1MTE0Mjg2M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0Mzc1NDg5MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIE1lbW9yeSBGYXVsdCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSB0YWtpbmcgYSBsb29rIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgc29tZXRoaW5nIGludGVyZXN0aW5nLiBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YC4uLiB0aGF0J3Mgbm90IHN0YXRpYy4gQW5kIG5laXRoZXIgaXMgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAuIFRoYXQncyBhIGtleSBvYnNlcnZhdGlvbiwgcmlnaHQ/IEl0IG1lYW5zIHRoZXNlIGZ1bmN0aW9ucyBtaWdodCBiZSBhY2Nlc3NpYmxlIGZyb20gb3V0c2lkZSB0aGUgaW1tZWRpYXRlIHNjb3BlLCB3aGljaCBoYXMgaW1wbGljYXRpb25zIGZvciBob3cgdGhleSdyZSB1c2VkIGFuZCBob3cgd2UgbWlnaHQgaW50ZXJhY3Qgd2l0aCB0aGVtLiBJdCBhZGRzIGZsZXhpYmlsaXR5LCBidXQgYWxzbyByZXF1aXJlcyBjYXJlZnVsIGNvbnNpZGVyYXRpb24gb2YgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBhbmQgYWNjZXNzIGNvbnRyb2xzLlxuXG5UaGUgbmV4dCBsb2dpY2FsIHN0ZXAsIGJlZm9yZSBkaXZpbmcgZGVlcGVyIGludG8gdGhlaXIgaW1wbGVtZW50YXRpb24sIGlzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGlzIGFjdHVhbGx5IGV4cG9ydGVkLiBUaGF0IHdpbGwgZ2l2ZSBhIGNsZWFyIGluZGljYXRpb24gb2YgaXRzIGludGVuZGVkIHZpc2liaWxpdHkgYW5kIHB1cnBvc2UuIEV4cG9ydGVkIGZ1bmN0aW9ucyBhcmUgZGVzaWduZWQgZm9yIGJyb2FkZXIgdXNlLCB3aGlsZSBpbnRlcm5hbCBvbmVzIGFyZSB0aWdodGx5IGNvbnRyb2xsZWQuIExldCBtZSBqdXN0IGNoZWNrIHRoZSBzeW1ib2wgdGFibGUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU0NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjAzOjA3LjM4ODY5NDQyMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTgyNTc5ODY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9zMzkwL3MzOTAuYz01NzgxPXZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpvbGQsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3MzOTAvczM5MC5jLTU3ODgtLyoqXFxuYXJjaC9zMzkwL2t2bS9zMzkwL3MzOTAuYzo1Nzg5OiAqIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSgpIC0tIHByZS1mYXVsdCBhbmQgbGluayBnbWFwIGRhdCB0YWJsZXNcXG5hcmNoL3MzOTAva3ZtL3MzOTAvczM5MC5jLTU3OTAtICogQHZjcHU6IHRoZSB2Y3B1IHRoYXQgc2hhbGwgYXBwZWFyIHRvIGhhdmUgZ2VuZXJhdGVkIHRoZSBmYXVsdC1pbi5cXG4tLVxcbmFyY2gvczM5MC9rdm0vczM5MC9zMzkwLmMtNTgwNy0gKi9cXG5hcmNoL3MzOTAva3ZtL3MzOTAvczM5MC5jOjU4MDg6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKVxcbmFyY2gvczM5MC9rdm0vczM5MC9zMzkwLmMtNTgwOS17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTUwNDU9c3RhdGljIGludCBrdm1fdGRwX3BhZ2VfcHJlZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUwOTItXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MDkzOmxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUwOTQtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTE2OTg9c3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVsLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0xNzEwLVxcdC8qXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoxNzExOlxcdCAqIEVuc3VyZSBwcmVfZmF1bHRfYWxsb3dlZCBpcyByZWFkIGJ5IGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSgpXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0xNzEyLVxcdCAqIGJlZm9yZSBrdm1fdGR4LVxcdTAwM2VzdGF0ZS4gIFVzZXJzcGFjZSBtdXN0IG5vdCBiZSBhbGxvd2VkIHRvIHByZS1mYXVsdFxcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTI2NDI9dm9pZCBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGVfcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI2NDUtI2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjI2NDY6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNjQ3LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKTtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9NDM1Mz1zdGF0aWMgaW50IGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy00Mzc3LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6NDM3ODpcXHRcXHRyID0ga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHZjcHUsIHJhbmdlKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQzNzktXFx0XFx0aWYgKFdBUk5fT05fT05DRShyID09IDAgfHwgciA9PSAtRUlPKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDM6MDguOTcxMjc4NzM2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU1ODMyOTIxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqS1ZNIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuUmlnaHQsIHNvIHdlJ3JlIHRhbGtpbmcgS1ZNLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZWQsIHNwZWNpZmljYWxseSB0aGUgYEtWTWAgc2V0dGluZyBpdHNlbGYuIFRoYXQncyB0aGUgYmFzZWxpbmUsIHRoZSBmb3VuZGF0aW9uLiBOb3csIEkgbmVlZCB0byBnZXQgaW50byB0aGUgd2VlZHMgYSBiaXQuIEknbSB0aGlua2luZyBhYm91dCBwcmUtZmF1bHRpbmcgbWVtb3J5LiBJJ20gcmVhc29uYWJseSBjZXJ0YWluIHRoZXJlJ3MgYSBjb25maWd1cmF0aW9uIG9wdGlvbiByZWxhdGluZyB0byB0aGF0LCBzb21ldGhpbmcgYWxvbmcgdGhlIGxpbmVzIG9mIGBDT05GSUdfS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWWAgb3IgcG90ZW50aWFsbHkgc29tZXRoaW5nIHdpdGggYSBzbGlnaHRseSBkaWZmZXJlbnQgbmFtZS4gVGltZSB0byBnbyBkaWdnaW5nIHRocm91Z2ggdGhlIGNvZGUgb3IgdGhlIGRvY3VtZW50YXRpb24gdG8gY29uZmlybSBhbmQgdmVyaWZ5IHRoZSBzcGVjaWZpY3Mgb2YgdGhhdCBzZXR0aW5nLiBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBwcmUtZmF1bHRpbmcgaXMgaGFuZGxlZCB3aXRoaW4gdGhpcyBLVk0gc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4MDgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowMzoxMi41Mjk2MDk5MjlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDAwNzMyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9LY29uZmlnPTE5PWNvbmZpZyBLVk1cXG4tLVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0zMi1cXHRzZWxlY3QgS1ZNX01NVV9MT0NLTEVTU19BR0lOR1xcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzozMzpcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0zNC1cXHRoZWxwXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0yMD1jb25maWcgS1ZNX1g4Nlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNDctXFx0c2VsZWN0IEtWTV9HRU5FUklDX0hBUkRXQVJFX0VOQUJMSU5HXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NDg6XFx0c2VsZWN0IEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy00OS1cXHRzZWxlY3QgS1ZNX1dFUlJPUiBpZiBXRVJST1JcXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0yNjQyPXZvaWQga3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKTtcXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNjQ0LVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoyNjQ1OiNpZmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNjQ2LWxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbnZpcnQva3ZtL0tjb25maWc9Njg9Y29uZmlnIEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxcbi0tXFxudmlydC9rdm0vS2NvbmZpZy03MC1cXG52aXJ0L2t2bS9LY29uZmlnOjcxOmNvbmZpZyBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXFxudmlydC9rdm0vS2NvbmZpZy03Mi0gICAgICAgYm9vbFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz00MzI3PXN0YXRpYyBpbnQga3ZtX3ZjcHVfaW9jdGxfZ2V0X3N0YXRzX2ZkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDM1MS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjQzNTI6I2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXFxudmlydC9rdm0va3ZtX21haW4uYy00MzUzLXN0YXRpYyBpbnQga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTQ0MjU9c3RhdGljIGxvbmcga3ZtX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ2NTAtXFx0fVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6NDY1MTojaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ2NTItXFx0Y2FzZSBLVk1fUFJFX0ZBVUxUX01FTU9SWToge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowMzoxNC4xNjk2ODc1MTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMzNTQ4MTA4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gdGhlIEtWTSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gd2UncmUgZm9jdXNpbmcgb24gS1ZNLCB0aGF0J3MgdGhlIGNvcmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIlJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGFuZCB0aGUgY3JpdGljYWwgcGFyYW1ldGVycyB0aGF0IGdvdmVybiB0aGUgZW52aXJvbm1lbnQuXCIgSSdtIHRoaW5raW5nIHNwZWNpZmljYWxseSBhYm91dCB0aGUgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAgc2V0dGluZyByaWdodCBvZmYgdGhlIGJhdC4gSXQncyB1c3VhbGx5IHRoZSBjcnV4IG9mIGhvdyB0aGUgZ3Vlc3QncyBtZW1vcnkgaXMgbWFuYWdlZCBhbmQgaG93IHZpcnR1YWwgYWRkcmVzc2VzIGFyZSB0cmFuc2xhdGVkLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBrbm93bGVkZ2Ugb2YgaXQuIExldCdzIHNlZSBob3cgaXQncyBkZWZpbmVkIGFuZCBjb25maWd1cmVkLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZSBhbmQgZG9jdW1lbnRhdGlvbiB0byByZWZyZXNoIG15IGtub3dsZWRnZSBhbmQgY29uZmlybSBteSBhc3N1bXB0aW9ucyFcblxuXG4iLCJJbnB1dFRva2VucyI6Njc0NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjAzOjE3LjUwNTE3MDMwOFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0ODI4MDkwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9tbXUuaD0zMzE9c3RhdGljIGlubGluZSBib29sIGt2bV9zaGFkb3dfcm9vdF9hbGxvY2F0ZWQoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS5oLTM0MS1cXG5hcmNoL3g4Ni9rdm0vbW11Lmg6MzQyOmludCBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4pO1xcbmFyY2gveDg2L2t2bS9tbXUuaC0zNDMtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTUxNjM9c3RhdGljIHZvaWQga3ZtX2Fzc2VydF9nbWVtX2ludmFsaWRhdGVfbG9ja19oZWxkKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUxNzQtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MTc1OmludCBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4pXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MTc2LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTI1OC19XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MjU5OkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4pO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTI2MC0jZW5kaWZcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MzE4MD1zdGF0aWMgaW50IHRkeF9nbWVtX3Bvc3RfcG9wdWxhdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTMxOTItXFx0a3ZtX3RkeC1cXHUwMDNlcGFnZV9hZGRfc3JjID0gc3JjX3BhZ2U7XFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzozMTkzOlxcdHJldCA9IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihhcmctXFx1MDAzZXZjcHUsIGdmbiwgcGZuKTtcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTMxOTQtXFx0a3ZtX3RkeC1cXHUwMDNlcGFnZV9hZGRfc3JjID0gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDM6MTguOTUzNDU0OTcyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMzkyOTM0MzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBLVk0gTU1VIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IGZvY3VzIGxhbmRzIG9uIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gLiBUaGF0J3MgVERYLXNwZWNpZmljLCBhcyBJIHJlY2FsbCwgYW5kIHRoYXQncyBjcml0aWNhbCBiZWNhdXNlIFREWCAqcmVxdWlyZXMqIGBLVk1fSU5URUxgLCB3aGljaCBnaXZlcyBtZSBhIHN0YXJ0aW5nIHBvaW50LiBEaWdnaW5nIGRlZXBlciwgSSBzZWUgaXQncyB1c2VkIGluIGB0ZHhfZ21lbV9wb3N0X3BvcHVsYXRlYCwgc29saWRpZnlpbmcgaXRzIHJlbGV2YW5jZSBpbiB0aGlzIGNvbnRleHQuXG5cbk5vdywgbGV0J3MgbG9vayBhdCBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YC4gSSB0cmFjZSBpdDogYGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLCB0aGVuIHRoZSBga3ZtX3ZjcHVfaW9jdGxgIHBhdGggd2l0aCBgS1ZNX1BSRV9GQVVMVF9NRU1PUllgLiBCaW5nby4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IHJlc2lkZXMuXG5cblNvLCB0aGUga2V5IHN5bWJvbHMgaGVyZSBhcmUgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgYW5kIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gLiBJIGtub3cgdGhlIGJhc2UgY29uZmlnIGlzIGRlZmluaXRlbHkgYEtWTWAuXG5cbkkgYWxzbyBicmllZmx5IGNoZWNrZWQgYGt2bV90ZHBfcGFnZV9wcmVmYXVsdGAgYW5kIGl0J3Mgc3RhdGljIGluIGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYC4gU28sIEknbGwgZXhjbHVkZSBpdCBmcm9tIHRoZSBmaW5hbCBsaXN0LlxuXG5OZXh0LCBJIG5lZWQgdG8gdmVyaWZ5IHJlYWNoYWJpbGl0eS4gYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAgaXMgZXhwb3J0ZWQgaW50ZXJuYWxseSB0byBLVk0gYW5kIHVzZWQgYnkgYHRkeF9nbWVtX3Bvc3RfcG9wdWxhdGVgLCB3aGljaCBpcyBnb29kLiBDYW4gd2UgdHJpZ2dlciBURFggaW4gUUVNVT8gWWVzLCB3ZSBjYW4gZW11bGF0ZSBpdCBvciBmdXp6IGl0LlxuXG5XYWl0IGEgc2Vjb25kLi4uIFREWCB0ZWNobmljYWxseSBuZWVkcyBoYXJkd2FyZSBzdXBwb3J0LiBCdXQgc3l6a2FsbGVyIGZ1enplcyBLVk0gaW9jdGxzIGRpcmVjdGx5LCBzbyBpZiB0aGUgaW9jdGwgaXMgYXZhaWxhYmxlLCB3ZSBjYW4gcmVhY2ggaXQhIFRoYXQncyBhbiBpbXBvcnRhbnQgZGV0YWlsLiBJJ2xsIG1ha2Ugc3VyZSB0byBub3RlIHRoYXQgaW4gbXkgcmVhc29uaW5nLlxuXG5NeSBmaW5hbCBsaXN0IG9mIHN5bWJvbHMgdG8gZm9jdXMgb24gaXM6XG4qICAgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWBcbiogICBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYFxuXG5UaGUgcmVxdWlyZWQgY29uZmlnIGlzIGBLVk1gLlxuXG5UaGUgcGF0Y2gncyBjaGFuZ2VzIHJldm9sdmUgYXJvdW5kIHRoZSBNTVUgcGFnZSBmYXVsdCBoYW5kbGluZywgc3BlY2lmaWNhbGx5IGFyb3VuZCBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBhbmQgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAuIEl0IGxvb2tzIGxpa2UgdGhleSdyZSBtb3ZpbmcgTU1VIHJlbG9hZCBhbmQgY2FjaGUgdG9wLXVwIG9wZXJhdGlvbnMgaW5zaWRlIHRoZSByZXRyeSBsb29wIHRvIGNvcnJlY3RseSBoYW5kbGUgY29uY3VycmVudCBpbnZhbGlkYXRpb25zLiBUaGlzIGlzIGNvcmUgS1ZNIE1NVSBsb2dpYyBhbmQgYWZmZWN0cyBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCBzaG91bGQgYmUgZnV6emVkIVxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTgyLCJPdXRwdXRUb2tlbnMiOjE1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowMzoyOS4zNDYzOTExWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA0OTAzOTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeVwiLFxuICAgIFwia3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIE1NVSBwYWdlIGZhdWx0IGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgYW5kIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gLiBJdCBtb3ZlcyBNTVUgcmVsb2FkIGFuZCBjYWNoZSB0b3AtdXAgb3BlcmF0aW9ucyBpbnNpZGUgdGhlIHJldHJ5IGxvb3AgdG8gaGFuZGxlIGNvbmN1cnJlbnQgaW52YWxpZGF0aW9ucyBjb3JyZWN0bHkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBLVk0gTU1VIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeVwiLFxuICAgIFwia3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIE1NVSBwYWdlIGZhdWx0IGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgYW5kIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gLiBJdCBtb3ZlcyBNTVUgcmVsb2FkIGFuZCBjYWNoZSB0b3AtdXAgb3BlcmF0aW9ucyBpbnNpZGUgdGhlIHJldHJ5IGxvb3AgdG8gaGFuZGxlIGNvbmN1cnJlbnQgaW52YWxpZGF0aW9ucyBjb3JyZWN0bHkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBLVk0gTU1VIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowMzoyOS40MjY4OTMxMjRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwOTU1MTI5MzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDM6MjkuNDI3NDA2MDY0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjcwOTU0NjExNjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb3ZlcyBNTVUgcmVsb2FkIGFuZCBjYWNoZSB0b3AtdXAgZnVuY3Rpb25zIGluc2lkZSB0aGUgcmV0cnkgbG9vcHMgZm9yIEtWTSBwYWdlIGZhdWx0IGhhbmRsaW5nIChga3ZtX3RkcF9wYWdlX3ByZWZhdWx0YCBhbmQgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmApLiBUaGlzIGZpeGVzIGEgbG9naWMgYnVnIHdoZXJlIGEgY29uY3VycmVudCBpbnZhbGlkYXRpb24gY291bGQgY2F1c2UgdGhlIGxvb3AgdG8gcmV0cnkgd2l0aG91dCByZWxvYWRpbmcgdGhlIE1NVSByb290LCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGFuIG9ic29sZXRlIHJvb3QgYmVpbmcgdXNlZC4gVGhlIGBmYXVsdGAgc3RydWN0dXJlIGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgZm9yIGFueSB1bnNwZWNpZmllZCBmaWVsZHMuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGlzIHBhdGNoLiBBbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIGFyaXNpbmcgZnJvbSBvYnNvbGV0ZSByb290cyB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGRiMDZkYTRkMDFjMDI3M2FmNzhkN2M4NDRhMGNkMGI3ODYzNTkwZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDE2OjUzOjQwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbmluZGV4IDA2NGVjYzMzYjkyNjcuLjc5YzQ1MGQ2NzdiNDAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG5AQCAtNTA2MSw2ICs1MDYxLDEwIEBAIHN0YXRpYyBpbnQga3ZtX3RkcF9wYWdlX3ByZWZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLFxuIFx0XHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9WTV9ERUFELCB2Y3B1KSlcbiBcdFx0XHRyZXR1cm4gLUVJTztcbiBcbitcdFx0ciA9IGt2bV9tbXVfcmVsb2FkKHZjcHUpO1xuK1x0XHRpZiAocilcbitcdFx0XHRyZXR1cm4gcjtcbitcbiBcdFx0Y29uZF9yZXNjaGVkKCk7XG4gXHRcdHIgPSBrdm1fbW11X2RvX3BhZ2VfZmF1bHQodmNwdSwgZ3BhLCBlcnJvcl9jb2RlLCB0cnVlLCBOVUxMLCBsZXZlbCk7XG4gXHR9IHdoaWxlIChyID09IFJFVF9QRl9SRVRSWSk7XG5AQCAtNTEwMSwxNCArNTEwNSw2IEBAIGxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdGlmIChrdm1faXNfZ2ZuX2FsaWFzKHZjcHUtXHUwMDNla3ZtLCBncGFfdG9fZ2ZuKHJhbmdlLVx1MDAzZWdwYSkpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdC8qXG4tXHQgKiByZWxvYWQgaXMgZWZmaWNpZW50IHdoZW4gY2FsbGVkIHJlcGVhdGVkbHksIHNvIHdlIGNhbiBkbyBpdCBvblxuLVx0ICogZXZlcnkgaXRlcmF0aW9uLlxuLVx0ICovXG4tXHRyID0ga3ZtX21tdV9yZWxvYWQodmNwdSk7XG4tXHRpZiAocilcbi1cdFx0cmV0dXJuIHI7XG4tXG4gXHRkaXJlY3RfYml0cyA9IDA7XG4gXHRpZiAoa3ZtX2FyY2hfaGFzX3ByaXZhdGVfbWVtKHZjcHUtXHUwMDNla3ZtKSBcdTAwMjZcdTAwMjZcbiBcdCAgICBrdm1fbWVtX2lzX3ByaXZhdGUodmNwdS1cdTAwM2Vrdm0sIGdwYV90b19nZm4ocmFuZ2UtXHUwMDNlZ3BhKSkpXG5AQCAtNTIxMywxNCArNTIwOSw2IEBAIGludCBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4pXG4gXHRpZiAoa3ZtX2dmbl9pc193cml0ZV90cmFja2VkKGt2bSwgZmF1bHQuc2xvdCwgZmF1bHQuZ2ZuKSlcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbiBcbi1cdHIgPSBrdm1fbW11X3JlbG9hZCh2Y3B1KTtcbi1cdGlmIChyKVxuLVx0XHRyZXR1cm4gcjtcbi1cbi1cdHIgPSBtbXVfdG9wdXBfbWVtb3J5X2NhY2hlcyh2Y3B1LCBmYWxzZSk7XG4tXHRpZiAocilcbi1cdFx0cmV0dXJuIHI7XG4tXG4gXHRkbyB7XG4gXHRcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSlcbiBcdFx0XHRyZXR1cm4gLUVJTlRSO1xuQEAgLTUyMjgsMTAgKzUyMTYsMzggQEAgaW50IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbilcbiBcdFx0aWYgKGt2bV90ZXN0X3JlcXVlc3QoS1ZNX1JFUV9WTV9ERUFELCB2Y3B1KSlcbiBcdFx0XHRyZXR1cm4gLUVJTztcbiBcbitcdFx0ciA9IGt2bV9tbXVfcmVsb2FkKHZjcHUpO1xuK1x0XHRpZiAocilcbitcdFx0XHRyZXR1cm4gcjtcbitcbitcdFx0ciA9IG1tdV90b3B1cF9tZW1vcnlfY2FjaGVzKHZjcHUsIGZhbHNlKTtcbitcdFx0aWYgKHIpXG4rXHRcdFx0cmV0dXJuIHI7XG4rXG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFxuIFx0XHRndWFyZChyZWFkX2xvY2spKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4gXG4rXHRcdC8qXG4rXHRcdCAqIEJlY2F1c2Ugc2xvdHNfbG9jayBpcyBoZWxkLCBpdCBzaG91bGQgYmUgaW1wb3NzaWJsZSBmb3IgKmFueSpcbitcdFx0ICogcm9vdHMgdG8gYmUgaW52YWxpZGF0ZWQgYWZ0ZXIgdGhlIGluaXRpYWwgTU1VIHJlbG9hZC4gIFdBUk4sXG4rXHRcdCAqIGJ1dCBjb250aW51ZSBvbjsgdGhlIGFib3ZlIE1NVSByZWxvYWQgd2lsbCBkbyB0aGUgcmlnaHQgdGhpbmdcbitcdFx0ICogaWYgdGhlIGN1cnJlbnQgcm9vdCBpcyBhY3R1YWxseSBpbnZhbGlkLlxuK1x0XHQgKi9cbitcdFx0V0FSTl9PTl9PTkNFKGt2bV90ZXN0X3JlcXVlc3QoS1ZNX1JFUV9NTVVfRlJFRV9PQlNPTEVURV9ST09UUywgdmNwdSkpO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBTbmFwc2hvdCB0aGUgaW52YWxpZGF0aW9uIHNlcXVlbmNlIGNvdW50ZXIgYWZ0ZXIgYWNxdWlyaW5nXG4rXHRcdCAqIG1tdV9sb2NrLCBhcyBndWVzdF9tZW1mZCBndWFyYW50ZWVzIHRoZSB2YWxpZGl0eSBvZiB0aGUgcGZuLFxuK1x0XHQgKiBpLmUuIGFueSBjb25jdXJyZW50IGludmFsaWRhdGlvbnMgYXJlIGd1YXJhbnRlZWQgdG8gYmVcbitcdFx0ICogaXJyZWxldmFudC5cbitcdFx0ICovXG4rXHRcdGZhdWx0Lm1tdV9zZXEgPSB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXE7XG4rXHRcdGlmIChpc19wYWdlX2ZhdWx0X3N0YWxlKHZjcHUsIFx1MDAyNmZhdWx0KSkge1xuK1x0XHRcdHIgPSBSRVRfUEZfUkVUUlk7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbiBcdFx0ciA9IGt2bV90ZHBfbW11X21hcCh2Y3B1LCBcdTAwMjZmYXVsdCk7XG4gXHR9IHdoaWxlIChyID09IFJFVF9QRl9SRVRSWSk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowMzoyOS40Mjc0MDc0MjRaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzcwNjk4MTQ0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLVk0gTU1VIFBhdGNoIGZvciBQb3RlbnRpYWwgTWVtb3J5IFJpc2tzKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBkaXZlcyBpbnRvIGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYCwgc3BlY2lmaWNhbGx5LiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIGFjdGlvbiBpcyBzaGlmdGluZyBga3ZtX21tdV9yZWxvYWQodmNwdSlgIGFuZCBgbW11X3RvcHVwX21lbW9yeV9jYWNoZXModmNwdSwgZmFsc2UpYCBpbnRvIHRoZSByZXRyeSBsb29wcyB3aXRoaW4gYGt2bV90ZHBfcGFnZV9wcmVmYXVsdGAgYW5kIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gLiBUaGF0J3MgaW50ZXJlc3Rpbmc7IHBvdGVudGlhbGx5IG9wdGltaXppbmcgcGVyZm9ybWFuY2UgYnkgcmVsb2FkaW5nIGFuZCB0b3BwaW5nIHVwIG1vcmUgZnJlcXVlbnRseSBkdXJpbmcgcGFnZSBmYXVsdHMuIEl0IGFsc28gYWRkcyBhIGBXQVJOX09OX09OQ0VgIGFuZCB1cGRhdGVzIGEgYGZhdWx0Lm1tdV9zZXFgIGNvdW50ZXIgYW5kIGNoZWNrcyBpZiBhIHBhZ2UgZmF1bHQgaXMgc3RhbGUgd2l0aGluIHRoZSBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYCBsb29wLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiwgdGhvdWdoLCBpcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gSSBuZWVkIHRvIGJlIHN1cmUgdGhpcyByZWZhY3RvcmluZyBoYXNuJ3QgaW5hZHZlcnRlbnRseSBjcmVhdGVkIGEgc2NlbmFyaW8gd2hlcmUgd2UncmUgcmVhZGluZyBmcm9tIG1lbW9yeSB0aGF0IGhhc24ndCBiZWVuIHByb3Blcmx5IGluaXRpYWxpemVkLCBsZWFkaW5nIHRvIGFsbCBzb3J0cyBvZiB1bnByZWRpY3RhYmxlIGJlaGF2aW9yLiBMZXQgbWUgc2VlLi4uIEluIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gLCB0aGUgYGZhdWx0YCB2YXJpYWJsZSBpcyBhIGBzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHRgLiBUaGUgY29kZSB1cGRhdGVzIGBmYXVsdC5tbXVfc2VxYCBpbnNpZGUgdGhlIGxvb3AuIFRoZSBxdWVzdGlvbiBpcywgaXMgdGhlcmUgYW55IGNoYW5jZSB0aGUgY29kZSByZWFkcyBmcm9tIGFueSBwYXJ0cyBvZiB0aGUgYGZhdWx0YCBzdHJ1Y3QgdGhhdCAqaGF2ZW4ndCogYmVlbiBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgdXNlZCwgZXNwZWNpYWxseSBpZiB0aGUgbG9vcCBpcyBoaXQgbXVsdGlwbGUgdGltZXM/IFJpZ2h0LCBsZXQncyBkaXZlIGludG8gYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAgYW5kIHNlZSB3aGF0J3MgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NDAsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowMzozNy4xMzQzOTIwNTZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MjAxNjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9tbXUvbW11LmM9NTE2Mz1zdGF0aWMgdm9pZCBrdm1fYXNzZXJ0X2dtZW1faW52YWxpZGF0ZV9sb2NrX2hlbGQoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTE3NC1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUxNzU6aW50IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbilcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUxNzYte1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MjU4LX1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUyNTk6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3Bmbik7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MjYwLSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowMzozNy4xODE1OTU3MDNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU2NDAyNTE1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgcHJvdmlkZWQgdGV4dDpcblxuKipEaXZpbmcgaW50byB0aGUgS1ZNIFREUCBNTVUgTWFwcGluZyBGdW5jdGlvbioqXG5cbk9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhlIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgVHJhbnNsYXRpb24gTG9va2FzaWRlIEJ1ZmZlciAoVExCKSBpcyBiZWluZyBoYW5kbGVkIGZvciBUcmFuc3BhcmVudCBQYWdlIFNoYXJpbmcgKFRQUykgaW4gdGhlIEtWTSAoS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSkgY29udGV4dCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgeDg2IGFyY2hpdGVjdHVyZS4gVGhpcyBmdW5jdGlvbiwgcmVzaWRpbmcgaW4gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLCBpcyBsaWtlbHkgY3JpdGljYWwgZm9yIG1hbmFnaW5nIHByaXZhdGUgcGFnZSBmcmFtZSBudW1iZXJzIChQRk5zKSByZWxhdGVkIHRvIFRQUy4gSXQncyBwcm9iYWJseSByZXNwb25zaWJsZSBmb3IgZXN0YWJsaXNoaW5nIHRoZSBtYXBwaW5ncyBiZXR3ZWVuIGd1ZXN0IHZpcnR1YWwgYWRkcmVzc2VzIGFuZCBob3N0IHBoeXNpY2FsIGFkZHJlc3NlcywgZW5zdXJpbmcgbWVtb3J5IGNvbnNpc3RlbmN5IGFuZCBwZXJmb3JtYW5jZSB3aXRoaW4gdGhlIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBJJ20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gZGVhbCB3aXRoIHRoZSBjb21wbGV4aXRpZXMgb2YgbmVzdGVkIHBhZ2luZywgYW5kIGxpa2VseSBpbmNvcnBvcmF0ZXMgb3B0aW1pemF0aW9ucyByZWxhdGVkIHRvIHNoYWRvdyBwYWdlIHRhYmxlcyBhbmQgYWRkcmVzcyB0cmFuc2xhdGlvbiBjYWNoaW5nLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0aGUgbG9ja2luZyBtZWNoYW5pc21zIHVzZWQgKGlmIGFueSksIGFuZCBhbnkgY29uc2lkZXJhdGlvbnMgbWFkZSBmb3IgcGVyZm9ybWFuY2UgdHVuaW5nLiBMZXQncyBzZWUgaG93IGl0J3MgaW1wbGVtZW50ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NzksIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowMzo0MS43NDU2MjMwNDJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ2ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9tbXUvbW11LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTE3NSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUxNzU6XFx0aW50IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbilcXG41MTc2OlxcdHtcXG41MTc3OlxcdFxcdHN0cnVjdCBrdm1fcGFnZV9mYXVsdCBmYXVsdCA9IHtcXG41MTc4OlxcdFxcdFxcdC5hZGRyID0gZ2ZuX3RvX2dwYShnZm4pLFxcbjUxNzk6XFx0XFx0XFx0LmVycm9yX2NvZGUgPSBQRkVSUl9HVUVTVF9GSU5BTF9NQVNLIHwgUEZFUlJfUFJJVkFURV9BQ0NFU1MsXFxuNTE4MDpcXHRcXHRcXHQucHJlZmV0Y2ggPSB0cnVlLFxcbjUxODE6XFx0XFx0XFx0LmlzX3RkcCA9IHRydWUsXFxuNTE4MjpcXHRcXHRcXHQubnhfaHVnZV9wYWdlX3dvcmthcm91bmRfZW5hYmxlZCA9IGlzX254X2h1Z2VfcGFnZV9lbmFibGVkKHZjcHUtXFx1MDAzZWt2bSksXFxuNTE4MzpcXHRcXG41MTg0OlxcdFxcdFxcdC5tYXhfbGV2ZWwgPSBQR19MRVZFTF80SyxcXG41MTg1OlxcdFxcdFxcdC5yZXFfbGV2ZWwgPSBQR19MRVZFTF80SyxcXG41MTg2OlxcdFxcdFxcdC5nb2FsX2xldmVsID0gUEdfTEVWRUxfNEssXFxuNTE4NzpcXHRcXHRcXHQuaXNfcHJpdmF0ZSA9IHRydWUsXFxuNTE4ODpcXHRcXG41MTg5OlxcdFxcdFxcdC5nZm4gPSBnZm4sXFxuNTE5MDpcXHRcXHRcXHQuc2xvdCA9IGt2bV92Y3B1X2dmbl90b19tZW1zbG90KHZjcHUsIGdmbiksXFxuNTE5MTpcXHRcXHRcXHQucGZuID0gcGZuLFxcbjUxOTI6XFx0XFx0XFx0Lm1hcF93cml0YWJsZSA9IHRydWUsXFxuNTE5MzpcXHRcXHR9O1xcbjUxOTQ6XFx0XFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cXHUwMDNla3ZtO1xcbjUxOTU6XFx0XFx0aW50IHI7XFxuNTE5NjpcXHRcXG41MTk3OlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuNTE5ODpcXHRcXG41MTk5OlxcdFxcdC8qXFxuNTIwMDpcXHRcXHQgKiBNYXBwaW5nIGEgcHJlLWRldGVybWluZWQgcHJpdmF0ZSBwZm4gaXMgaW50ZW5kZWQgb25seSBmb3IgdXNlIHdoZW5cXG41MjAxOlxcdFxcdCAqIHBvcHVsYXRpbmcgYSBndWVzdF9tZW1mZCBpbnN0YW5jZS4gIEFzc2VydCB0aGF0IHRoZSBzbG90IGlzIGJhY2tlZFxcbjUyMDI6XFx0XFx0ICogYnkgZ3Vlc3RfbWVtZmQgYW5kIHRoYXQgdGhlIGdtZW0gaW5zdGFuY2UncyBpbnZhbGlkYXRlX2xvY2sgaXMgaGVsZC5cXG41MjAzOlxcdFxcdCAqL1xcbjUyMDQ6XFx0XFx0a3ZtX2Fzc2VydF9nbWVtX2ludmFsaWRhdGVfbG9ja19oZWxkKGZhdWx0LnNsb3QpO1xcbjUyMDU6XFx0XFxuNTIwNjpcXHRcXHRpZiAoS1ZNX0JVR19PTighdGRwX21tdV9lbmFibGVkLCBrdm0pKVxcbjUyMDc6XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuNTIwODpcXHRcXG41MjA5OlxcdFxcdGlmIChrdm1fZ2ZuX2lzX3dyaXRlX3RyYWNrZWQoa3ZtLCBmYXVsdC5zbG90LCBmYXVsdC5nZm4pKVxcbjUyMTA6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG41MjExOlxcdFxcbjUyMTI6XFx0XFx0ZG8ge1xcbjUyMTM6XFx0XFx0XFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxcbjUyMTQ6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5UUjtcXG41MjE1OlxcdFxcbjUyMTY6XFx0XFx0XFx0aWYgKGt2bV90ZXN0X3JlcXVlc3QoS1ZNX1JFUV9WTV9ERUFELCB2Y3B1KSlcXG41MjE3OlxcdFxcdFxcdFxcdHJldHVybiAtRUlPO1xcbjUyMTg6XFx0XFxuNTIxOTpcXHRcXHRcXHRyID0ga3ZtX21tdV9yZWxvYWQodmNwdSk7XFxuNTIyMDpcXHRcXHRcXHRpZiAocilcXG41MjIxOlxcdFxcdFxcdFxcdHJldHVybiByO1xcbjUyMjI6XFx0XFxuNTIyMzpcXHRcXHRcXHRyID0gbW11X3RvcHVwX21lbW9yeV9jYWNoZXModmNwdSwgZmFsc2UpO1xcbjUyMjQ6XFx0XFx0XFx0aWYgKHIpXFxuNTIyNTpcXHRcXHRcXHRcXHRyZXR1cm4gcjtcXG41MjI2OlxcdFxcbjUyMjc6XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuNTIyODpcXHRcXG41MjI5OlxcdFxcdFxcdGd1YXJkKHJlYWRfbG9jaykoXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbjUyMzA6XFx0XFxuNTIzMTpcXHRcXHRcXHQvKlxcbjUyMzI6XFx0XFx0XFx0ICogQmVjYXVzZSBzbG90c19sb2NrIGlzIGhlbGQsIGl0IHNob3VsZCBiZSBpbXBvc3NpYmxlIGZvciAqYW55KlxcbjUyMzM6XFx0XFx0XFx0ICogcm9vdHMgdG8gYmUgaW52YWxpZGF0ZWQgYWZ0ZXIgdGhlIGluaXRpYWwgTU1VIHJlbG9hZC4gIFdBUk4sXFxuNTIzNDpcXHRcXHRcXHQgKiBidXQgY29udGludWUgb247IHRoZSBhYm92ZSBNTVUgcmVsb2FkIHdpbGwgZG8gdGhlIHJpZ2h0IHRoaW5nXFxuNTIzNTpcXHRcXHRcXHQgKiBpZiB0aGUgY3VycmVudCByb290IGlzIGFjdHVhbGx5IGludmFsaWQuXFxuNTIzNjpcXHRcXHRcXHQgKi9cXG41MjM3OlxcdFxcdFxcdFdBUk5fT05fT05DRShrdm1fdGVzdF9yZXF1ZXN0KEtWTV9SRVFfTU1VX0ZSRUVfT0JTT0xFVEVfUk9PVFMsIHZjcHUpKTtcXG41MjM4OlxcdFxcbjUyMzk6XFx0XFx0XFx0LypcXG41MjQwOlxcdFxcdFxcdCAqIFNuYXBzaG90IHRoZSBpbnZhbGlkYXRpb24gc2VxdWVuY2UgY291bnRlciBhZnRlciBhY3F1aXJpbmdcXG41MjQxOlxcdFxcdFxcdCAqIG1tdV9sb2NrLCBhcyBndWVzdF9tZW1mZCBndWFyYW50ZWVzIHRoZSB2YWxpZGl0eSBvZiB0aGUgcGZuLFxcbjUyNDI6XFx0XFx0XFx0ICogaS5lLiBhbnkgY29uY3VycmVudCBpbnZhbGlkYXRpb25zIGFyZSBndWFyYW50ZWVkIHRvIGJlXFxuNTI0MzpcXHRcXHRcXHQgKiBpcnJlbGV2YW50LlxcbjUyNDQ6XFx0XFx0XFx0ICovXFxuNTI0NTpcXHRcXHRcXHRmYXVsdC5tbXVfc2VxID0gdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXE7XFxuNTI0NjpcXHRcXHRcXHRpZiAoaXNfcGFnZV9mYXVsdF9zdGFsZSh2Y3B1LCBcXHUwMDI2ZmF1bHQpKSB7XFxuNTI0NzpcXHRcXHRcXHRcXHRyID0gUkVUX1BGX1JFVFJZO1xcbjUyNDg6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuNTI0OTpcXHRcXHRcXHR9XFxuNTI1MDpcXHRcXG41MjUxOlxcdFxcdFxcdHIgPSBrdm1fdGRwX21tdV9tYXAodmNwdSwgXFx1MDAyNmZhdWx0KTtcXG41MjUyOlxcdFxcdH0gd2hpbGUgKHIgPT0gUkVUX1BGX1JFVFJZKTtcXG41MjUzOlxcdFxcbjUyNTQ6XFx0XFx0aWYgKHIgIT0gUkVUX1BGX0ZJWEVEKVxcbjUyNTU6XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuNTI1NjpcXHRcXG41MjU3OlxcdFxcdHJldHVybiAwO1xcbjUyNTg6XFx0fVxcbjUyNTk6XFx0RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3Bmbik7XFxuNTI2MDpcXHQjZW5kaWZcXG41MjYxOlxcdFxcbjUyNjI6XFx0c3RhdGljIHZvaWQgbm9ucGFnaW5nX2luaXRfY29udGV4dChzdHJ1Y3Qga3ZtX21tdSAqY29udGV4dClcXG41MjYzOlxcdHtcXG41MjY0OlxcdFxcdGNvbnRleHQtXFx1MDAzZXBhZ2VfZmF1bHQgPSBub25wYWdpbmdfcGFnZV9mYXVsdDtcXG41MjY1OlxcdFxcdGNvbnRleHQtXFx1MDAzZXN5bmNfc3B0ZSA9IE5VTEw7XFxuNTI2NjpcXHR9XFxuNTI2NzpcXHRcXG41MjY4OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBpc19yb290X3VzYWJsZShzdHJ1Y3Qga3ZtX21tdV9yb290X2luZm8gKnJvb3QsIGdwYV90IHBnZCxcXG41MjY5OlxcdFxcdFxcdFxcdFxcdCAgdW5pb24ga3ZtX21tdV9wYWdlX3JvbGUgcm9sZSlcXG41MjcwOlxcdHtcXG41MjcxOlxcdFxcdHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwO1xcbjUyNzI6XFx0XFxuNTI3MzpcXHRcXHRpZiAoIVZBTElEX1BBR0Uocm9vdC1cXHUwMDNlaHBhKSlcXG41Mjc0OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDM6NDEuNzQ2MDcxNDMyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMTMzNzUxNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgSW5pdGlhbGl6YXRpb24gYW5kIFJlbG9hZCBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgdGhhdCB0aGUgYGZhdWx0YCB2YXJpYWJsZSBnZXRzIGEgZnVsbCBpbml0aWFsaXphdGlvbiByaWdodCBvZmYgdGhlIGJhdCB3aXRoIHRoZSBgeyAuLi4gfWAuIFRoYXQncyBnb29kLiBJdCBlbnN1cmVzIGFsbCB0aGUgZmllbGRzIGFyZSB6ZXJvZWQgb3V0LCBzbyB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGF0IHRoYXQgcG9pbnQuIE1ha2VzIHRoaW5ncyBjbGVhbmVyLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIHNlZW1zIHRvIGJlIG1vdmluZyBga3ZtX21tdV9yZWxvYWRgIGFuZCBgbW11X3RvcHVwX21lbW9yeV9jYWNoZXNgICppbnRvKiB0aGUgcmV0cnkgbG9vcC4gQWhhLCBJIHNlZSB3aGF0J3MgaGFwcGVuaW5nLiBUaGV5J3JlIGRvaW5nIHRoaXMgdG8gYWRkcmVzcyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciBhIHNjZW5hcmlvIHdoZXJlIGBrdm1fbW11X3JlbG9hZGAgbWlnaHQgYWN0dWFsbHkgbmVlZCB0byBiZSByZS1leGVjdXRlZCBpZiB0aGUgbG9vcCBoYXMgdG8gcmV0cnkuIEkgYWdyZWUgd2l0aCB0aGF0IGFzc2Vzc21lbnQuIEl0J3MgdGhlIHJpZ2h0IGZpeCB0byBlbnN1cmUgY29uc2lzdGVuY3kuIEdpdmVuIHRoYXQsIHRoZXJlJ3Mgbm8gd2F5IHdlIGNvdWxkIGhhdmUgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuXG5cbk5vdywgbGV0IG1lIHNoaWZ0IGdlYXJzIGFuZCB0YWtlIGEgbG9vayBhdCBob3cgYGt2bV90ZHBfcGFnZV9wcmVmYXVsdGAgZml0cyBpbnRvIHRoaXMgd2hvbGUgcGljdHVyZS4gVGltZSB0byBkaWcgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3ODksIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowMzo0Ny4wNTk0NDg5OTRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM4OTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9tbXUvbW11LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTA0MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUwNDA6XFx0XFxuNTA0MTpcXHRcXHRyZXR1cm4gcjtcXG41MDQyOlxcdH1cXG41MDQzOlxcdFxcbjUwNDQ6XFx0XFxuNTA0NTpcXHRzdGF0aWMgaW50IGt2bV90ZHBfcGFnZV9wcmVmYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSxcXG41MDQ2OlxcdFxcdFxcdFxcdFxcdCB1NjQgZXJyb3JfY29kZSwgdTggKmxldmVsKVxcbjUwNDc6XFx0e1xcbjUwNDg6XFx0XFx0aW50IHI7XFxuNTA0OTpcXHRcXG41MDUwOlxcdFxcdC8qXFxuNTA1MTpcXHRcXHQgKiBSZXN0cmljdCB0byBURFAgcGFnZSBmYXVsdCwgc2luY2UgdGhhdCdzIHRoZSBvbmx5IGNhc2Ugd2hlcmUgdGhlIE1NVVxcbjUwNTI6XFx0XFx0ICogaXMgaW5kZXhlZCBieSBHUEEuXFxuNTA1MzpcXHRcXHQgKi9cXG41MDU0OlxcdFxcdGlmICh2Y3B1LVxcdTAwM2VhcmNoLm1tdS1cXHUwMDNlcGFnZV9mYXVsdCAhPSBrdm1fdGRwX3BhZ2VfZmF1bHQpXFxuNTA1NTpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuNTA1NjpcXHRcXG41MDU3OlxcdFxcdGRvIHtcXG41MDU4OlxcdFxcdFxcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSlcXG41MDU5OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVFI7XFxuNTA2MDpcXHRcXG41MDYxOlxcdFxcdFxcdGlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX1ZNX0RFQUQsIHZjcHUpKVxcbjUwNjI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuNTA2MzpcXHRcXG41MDY0OlxcdFxcdFxcdHIgPSBrdm1fbW11X3JlbG9hZCh2Y3B1KTtcXG41MDY1OlxcdFxcdFxcdGlmIChyKVxcbjUwNjY6XFx0XFx0XFx0XFx0cmV0dXJuIHI7XFxuNTA2NzpcXHRcXG41MDY4OlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjUwNjk6XFx0XFx0XFx0ciA9IGt2bV9tbXVfZG9fcGFnZV9mYXVsdCh2Y3B1LCBncGEsIGVycm9yX2NvZGUsIHRydWUsIE5VTEwsIGxldmVsKTtcXG41MDcwOlxcdFxcdH0gd2hpbGUgKHIgPT0gUkVUX1BGX1JFVFJZKTtcXG41MDcxOlxcdFxcbjUwNzI6XFx0XFx0aWYgKHIgXFx1MDAzYyAwKVxcbjUwNzM6XFx0XFx0XFx0cmV0dXJuIHI7XFxuNTA3NDpcXHRcXG41MDc1OlxcdFxcdHN3aXRjaCAocikge1xcbjUwNzY6XFx0XFx0Y2FzZSBSRVRfUEZfRklYRUQ6XFxuNTA3NzpcXHRcXHRjYXNlIFJFVF9QRl9TUFVSSU9VUzpcXG41MDc4OlxcdFxcdGNhc2UgUkVUX1BGX1dSSVRFX1BST1RFQ1RFRDpcXG41MDc5OlxcdFxcdFxcdHJldHVybiAwO1xcbjUwODA6XFx0XFxuNTA4MTpcXHRcXHRjYXNlIFJFVF9QRl9FTVVMQVRFOlxcbjUwODI6XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuNTA4MzpcXHRcXG41MDg0OlxcdFxcdGNhc2UgUkVUX1BGX1JFVFJZOlxcbjUwODU6XFx0XFx0Y2FzZSBSRVRfUEZfQ09OVElOVUU6XFxuNTA4NjpcXHRcXHRjYXNlIFJFVF9QRl9JTlZBTElEOlxcbjUwODc6XFx0XFx0ZGVmYXVsdDpcXG41MDg4OlxcdFxcdFxcdFdBUk5fT05DRSgxLCBcXFwiY291bGQgbm90IGZpeCBwYWdlIGZhdWx0IGR1cmluZyBwcmVmYXVsdFxcXCIpO1xcbjUwODk6XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuNTA5MDpcXHRcXHR9XFxuNTA5MTpcXHR9XFxuNTA5MjpcXHRcXG41MDkzOlxcdGxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG41MDk0OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKVxcbjUwOTU6XFx0e1xcbjUwOTY6XFx0XFx0dTY0IGVycm9yX2NvZGUgPSBQRkVSUl9HVUVTVF9GSU5BTF9NQVNLO1xcbjUwOTc6XFx0XFx0dTggbGV2ZWwgPSBQR19MRVZFTF80SztcXG41MDk4OlxcdFxcdHU2NCBkaXJlY3RfYml0cztcXG41MDk5OlxcdFxcdHU2NCBlbmQ7XFxuNTEwMDpcXHRcXHRpbnQgcjtcXG41MTAxOlxcdFxcbjUxMDI6XFx0XFx0aWYgKCF2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gucHJlX2ZhdWx0X2FsbG93ZWQpXFxuNTEwMzpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuNTEwNDpcXHRcXG41MTA1OlxcdFxcdGlmIChrdm1faXNfZ2ZuX2FsaWFzKHZjcHUtXFx1MDAzZWt2bSwgZ3BhX3RvX2dmbihyYW5nZS1cXHUwMDNlZ3BhKSkpXFxuNTEwNjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG41MTA3OlxcdFxcbjUxMDg6XFx0XFx0ZGlyZWN0X2JpdHMgPSAwO1xcbjUxMDk6XFx0XFx0aWYgKGt2bV9hcmNoX2hhc19wcml2YXRlX21lbSh2Y3B1LVxcdTAwM2Vrdm0pIFxcdTAwMjZcXHUwMDI2XFxuNTExMDpcXHRcXHQgICAga3ZtX21lbV9pc19wcml2YXRlKHZjcHUtXFx1MDAzZWt2bSwgZ3BhX3RvX2dmbihyYW5nZS1cXHUwMDNlZ3BhKSkpXFxuNTExMTpcXHRcXHRcXHRlcnJvcl9jb2RlIHw9IFBGRVJSX1BSSVZBVEVfQUNDRVNTO1xcbjUxMTI6XFx0XFx0ZWxzZVxcbjUxMTM6XFx0XFx0XFx0ZGlyZWN0X2JpdHMgPSBnZm5fdG9fZ3BhKGt2bV9nZm5fZGlyZWN0X2JpdHModmNwdS1cXHUwMDNla3ZtKSk7XFxuNTExNDpcXHRcXG41MTE1OlxcdFxcdC8qXFxuNTExNjpcXHRcXHQgKiBTaGFkb3cgcGFnaW5nIHVzZXMgR1ZBIGZvciBrdm0gcGFnZSBmYXVsdCwgc28gcmVzdHJpY3QgdG9cXG41MTE3OlxcdFxcdCAqIHR3by1kaW1lbnNpb25hbCBwYWdpbmcuXFxuNTExODpcXHRcXHQgKi9cXG41MTE5OlxcdFxcdHIgPSBrdm1fdGRwX3BhZ2VfcHJlZmF1bHQodmNwdSwgcmFuZ2UtXFx1MDAzZWdwYSB8IGRpcmVjdF9iaXRzLCBlcnJvcl9jb2RlLCBcXHUwMDI2bGV2ZWwpO1xcbjUxMjA6XFx0XFx0aWYgKHIgXFx1MDAzYyAwKVxcbjUxMjE6XFx0XFx0XFx0cmV0dXJuIHI7XFxuNTEyMjpcXHRcXG41MTIzOlxcdFxcdC8qXFxuNTEyNDpcXHRcXHQgKiBJZiB0aGUgbWFwcGluZyB0aGF0IGNvdmVycyByYW5nZS1cXHUwMDNlZ3BhIGNhbiB1c2UgYSBodWdlIHBhZ2UsIGl0XFxuNTEyNTpcXHRcXHQgKiBtYXkgc3RhcnQgYmVsb3cgaXQgb3IgZW5kIGFmdGVyIHJhbmdlLVxcdTAwM2VncGEgKyByYW5nZS1cXHUwMDNlc2l6ZS5cXG41MTI2OlxcdFxcdCAqL1xcbjUxMjc6XFx0XFx0ZW5kID0gKHJhbmdlLVxcdTAwM2VncGEgXFx1MDAyNiBLVk1fSFBBR0VfTUFTSyhsZXZlbCkpICsgS1ZNX0hQQUdFX1NJWkUobGV2ZWwpO1xcbjUxMjg6XFx0XFx0cmV0dXJuIG1pbihyYW5nZS1cXHUwMDNlc2l6ZSwgZW5kIC0gcmFuZ2UtXFx1MDAzZWdwYSk7XFxuNTEyOTpcXHR9XFxuNTEzMDpcXHRcXG41MTMxOlxcdHZvaWQga3ZtX2FyY2hfYXN5bmNfcGFnZV9yZWFkeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fYXN5bmNfcGYgKndvcmspXFxuNTEzMjpcXHR7XFxuNTEzMzpcXHRcXHRpbnQgcjtcXG41MTM0OlxcdFxcbjUxMzU6XFx0XFx0aWYgKFdBUk5fT05fT05DRSh3b3JrLVxcdTAwM2VhcmNoLmVycm9yX2NvZGUgXFx1MDAyNiBQRkVSUl9QUklWQVRFX0FDQ0VTUykpXFxuNTEzNjpcXHRcXHRcXHRyZXR1cm47XFxuNTEzNzpcXHRcXG41MTM4OlxcdFxcdGlmICgodmNwdS1cXHUwMDNlYXJjaC5tbXUtXFx1MDAzZXJvb3Rfcm9sZS5kaXJlY3QgIT0gd29yay1cXHUwMDNlYXJjaC5kaXJlY3RfbWFwKSB8fFxcbjUxMzk6XFx0XFx0ICAgICAgd29yay1cXHUwMDNld2FrZXVwX2FsbClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDM6NDcuMDU5ODg5MzA0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMzIyMDk3NzQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBLVk0gTU1VIFJlbG9hZCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgZml4aW5nIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGluIGBrdm1fbW11X3JlbG9hZGAuIFRoZSBjb3JlIGlzc3VlIGlzIHRoYXQgYGt2bV9tbXVfcmVsb2FkYCB3YXMgYmVpbmcgY2FsbGVkIG91dHNpZGUgdGhlIHJldHJ5IGxvb3AsIHdoaWNoLCBpZiB0aGUgbG9vcCByZXRyaWVkLCBjb3VsZCByZXN1bHQgaW4gdGhlIGxvb3AgdXNpbmcgYW4gb3V0ZGF0ZWQgTU1VIHJvb3Qgb3IgcG90ZW50aWFsbHkgYW4gaW52YWxpZCBzdGF0ZS4gSSBpbml0aWFsbHkgdGhvdWdodCB0aGVyZSBtaWdodCBiZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSwgYnV0IGFmdGVyIHRoaW5raW5nIGFib3V0IGl0LCB0aGF0J3Mgbm90IHRoZSBjYXNlLiBga3ZtX21tdV9yZWxvYWRgIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSBNTVUgcm9vdCwgc28gdGhlIHByb2JsZW0gaXMgdGhhdCBpZiBpdCdzICpub3QqIGNhbGxlZCB3aXRoaW4gdGhlIGxvb3AgYW5kIHRoZSByb290IGJlY29tZXMgb2Jzb2xldGUgZHVlIHRvIGFuIGludmFsaWRhdGlvbiBkdXJpbmcgdGhlIGxvb3AsIHdlIGNvdWxkIGhhdmUgYSByZXRyeSB0aGF0J3Mgb3BlcmF0aW5nIG9uIHN0YWxlIGRhdGEuIFRoZSByZXN1bHRpbmcgYmVoYXZpb3IgaXMgYSBsb2dpYyBidWcgdGhhdCBjb3VsZCBsZWFkIHRvIG5hc3R5IGlzc3VlcyDigJMgdXNlLWFmdGVyLWZyZWUsIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlLCBvciBwb3NzaWJseSBhbiBpbmZpbml0ZSBsb29wLiBCdXQgZGVmaW5pdGVseSBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cbkkgdGhlbiBoYWQgdG8gZG91YmxlIGNoZWNrIGFib3V0IHRoZSBgZmF1bHRgIHN0cnVjdCB0byBzZWUgaWYgdGhlIHBhdGNoIGludHJvZHVjZWQgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBCdXQsIG5vLCBgc3RydWN0IGt2bV9wYWdlX2ZhdWx0IGZhdWx0ID0geyAuLi4gfTtgIG1lYW5zIHRoYXQgYW55IG1pc3NpbmcgZmllbGRzIGluIHRoZSBpbml0aWFsaXplciBsaXN0IGFyZSB6ZXJvLWluaXRpYWxpemVkLiBTbywgaXQncyBmdWxseSBpbml0aWFsaXplZC5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXNuJ3QgbmVlZCBLTVNBTi4gSXQgc2hvdWxkIGJlIGRldGVjdGFibGUgYnkgS0FTQU4vTE9DS0RFUC9zdGFuZGFyZCB0ZXN0aW5nIG9yIHdvdWxkIGhhdmUgYmVlbiBmb3VuZCBpbiB0ZXN0aW5nIHRoYXQgZml4ZWQgYSBrbm93biBidWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2OTksIk91dHB1dFRva2VucyI6MTY0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDQ6NDAuMzgxOTkwNjI5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb3ZlcyBNTVUgcmVsb2FkIGFuZCBjYWNoZSB0b3AtdXAgZnVuY3Rpb25zIGluc2lkZSB0aGUgcmV0cnkgbG9vcHMgZm9yIEtWTSBwYWdlIGZhdWx0IGhhbmRsaW5nIChga3ZtX3RkcF9wYWdlX3ByZWZhdWx0YCBhbmQgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmApLiBUaGlzIGZpeGVzIGEgbG9naWMgYnVnIHdoZXJlIGEgY29uY3VycmVudCBpbnZhbGlkYXRpb24gY291bGQgY2F1c2UgdGhlIGxvb3AgdG8gcmV0cnkgd2l0aG91dCByZWxvYWRpbmcgdGhlIE1NVSByb290LCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGFuIG9ic29sZXRlIHJvb3QgYmVpbmcgdXNlZC4gVGhlIGBmYXVsdGAgc3RydWN0dXJlIGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgZm9yIGFueSB1bnNwZWNpZmllZCBmaWVsZHMuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGlzIHBhdGNoLiBBbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIGFyaXNpbmcgZnJvbSBvYnNvbGV0ZSByb290cyB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgTU1VIHJlbG9hZCBhbmQgY2FjaGUgdG9wLXVwIGZ1bmN0aW9ucyBpbnNpZGUgdGhlIHJldHJ5IGxvb3BzIGZvciBLVk0gcGFnZSBmYXVsdCBoYW5kbGluZyAoYGt2bV90ZHBfcGFnZV9wcmVmYXVsdGAgYW5kIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gKS4gVGhpcyBmaXhlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBhIGNvbmN1cnJlbnQgaW52YWxpZGF0aW9uIGNvdWxkIGNhdXNlIHRoZSBsb29wIHRvIHJldHJ5IHdpdGhvdXQgcmVsb2FkaW5nIHRoZSBNTVUgcm9vdCwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBhbiBvYnNvbGV0ZSByb290IGJlaW5nIHVzZWQuIFRoZSBgZmF1bHRgIHN0cnVjdHVyZSBpcyBmdWxseSB6ZXJvLWluaXRpYWxpemVkIGZvciBhbnkgdW5zcGVjaWZpZWQgZmllbGRzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBwYXRjaC4gQW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBhcmlzaW5nIGZyb20gb2Jzb2xldGUgcm9vdHMgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8b87c[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-26 16:51:21 +0000 UTC FinishedAt: 2026-08-26 17:04:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "f9bde65e-70a3-49d7-ad87-48528c7b94bf" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_arch_vcpu_pre_fault_memory", "kvm_tdp_mmu_map_private_pfn" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkmIzM0OywKICAgICYjMzQ7a3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgTU1VIHJlbG9hZCBhbmQgY2FjaGUgdG9wLXVwIGZ1bmN0aW9ucyBpbnNpZGUgdGhlIHJldHJ5IGxvb3BzIGZvciBLVk0gcGFnZSBmYXVsdCBoYW5kbGluZyAoYGt2bV90ZHBfcGFnZV9wcmVmYXVsdGAgYW5kIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gKS4gVGhpcyBmaXhlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBhIGNvbmN1cnJlbnQgaW52YWxpZGF0aW9uIGNvdWxkIGNhdXNlIHRoZSBsb29wIHRvIHJldHJ5IHdpdGhvdXQgcmVsb2FkaW5nIHRoZSBNTVUgcm9vdCwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBhbiBvYnNvbGV0ZSByb290IGJlaW5nIHVzZWQuIFRoZSBgZmF1bHRgIHN0cnVjdHVyZSBpcyBmdWxseSB6ZXJvLWluaXRpYWxpemVkIGZvciBhbnkgdW5zcGVjaWZpZWQgZmllbGRzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBwYXRjaC4gQW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBhcmlzaW5nIGZyb20gb2Jzb2xldGUgcm9vdHMgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBLVk0gTU1VIHBhZ2UgZmF1bHQgaGFuZGxpbmcsIHNwZWNpZmljYWxseSBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBhbmQgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAuIEl0IG1vdmVzIE1NVSByZWxvYWQgYW5kIGNhY2hlIHRvcC11cCBvcGVyYXRpb25zIGluc2lkZSB0aGUgcmV0cnkgbG9vcCB0byBoYW5kbGUgY29uY3VycmVudCBpbnZhbGlkYXRpb25zIGNvcnJlY3RseS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIEtWTSBNTVUgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTY6NTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0ZGIwNmRhNGQwMWMwMjczYWY3OGQ3Yzg0NGEwY2QwYjc4NjM1OTBmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTY6NTM6NDAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbmluZGV4IDA2NGVjYzMzYjkyNjcuLjc5YzQ1MGQ2NzdiNDAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG5AQCAtNTA2MSw2ICYjNDM7NTA2MSwxMCBAQCBzdGF0aWMgaW50IGt2bV90ZHBfcGFnZV9wcmVmYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSxcbiBcdFx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfVk1fREVBRCwgdmNwdSkpXG4gXHRcdFx0cmV0dXJuIC1FSU87XG4gXG4mIzQzO1x0XHRyID0ga3ZtX21tdV9yZWxvYWQodmNwdSk7XG4mIzQzO1x0XHRpZiAocilcbiYjNDM7XHRcdFx0cmV0dXJuIHI7XG4mIzQzO1xuIFx0XHRjb25kX3Jlc2NoZWQoKTtcbiBcdFx0ciA9IGt2bV9tbXVfZG9fcGFnZV9mYXVsdCh2Y3B1LCBncGEsIGVycm9yX2NvZGUsIHRydWUsIE5VTEwsIGxldmVsKTtcbiBcdH0gd2hpbGUgKHIgPT0gUkVUX1BGX1JFVFJZKTtcbkBAIC01MTAxLDE0ICYjNDM7NTEwNSw2IEBAIGxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdGlmIChrdm1faXNfZ2ZuX2FsaWFzKHZjcHUtXHUwMDNla3ZtLCBncGFfdG9fZ2ZuKHJhbmdlLVx1MDAzZWdwYSkpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdC8qXG4tXHQgKiByZWxvYWQgaXMgZWZmaWNpZW50IHdoZW4gY2FsbGVkIHJlcGVhdGVkbHksIHNvIHdlIGNhbiBkbyBpdCBvblxuLVx0ICogZXZlcnkgaXRlcmF0aW9uLlxuLVx0ICovXG4tXHRyID0ga3ZtX21tdV9yZWxvYWQodmNwdSk7XG4tXHRpZiAocilcbi1cdFx0cmV0dXJuIHI7XG4tXG4gXHRkaXJlY3RfYml0cyA9IDA7XG4gXHRpZiAoa3ZtX2FyY2hfaGFzX3ByaXZhdGVfbWVtKHZjcHUtXHUwMDNla3ZtKSBcdTAwMjZcdTAwMjZcbiBcdCAgICBrdm1fbWVtX2lzX3ByaXZhdGUodmNwdS1cdTAwM2Vrdm0sIGdwYV90b19nZm4ocmFuZ2UtXHUwMDNlZ3BhKSkpXG5AQCAtNTIxMywxNCAmIzQzOzUyMDksNiBAQCBpbnQga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuKVxuIFx0aWYgKGt2bV9nZm5faXNfd3JpdGVfdHJhY2tlZChrdm0sIGZhdWx0LnNsb3QsIGZhdWx0LmdmbikpXG4gXHRcdHJldHVybiAtRVBFUk07XG4gXG4tXHRyID0ga3ZtX21tdV9yZWxvYWQodmNwdSk7XG4tXHRpZiAocilcbi1cdFx0cmV0dXJuIHI7XG4tXG4tXHRyID0gbW11X3RvcHVwX21lbW9yeV9jYWNoZXModmNwdSwgZmFsc2UpO1xuLVx0aWYgKHIpXG4tXHRcdHJldHVybiByO1xuLVxuIFx0ZG8ge1xuIFx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4gXHRcdFx0cmV0dXJuIC1FSU5UUjtcbkBAIC01MjI4LDEwICYjNDM7NTIxNiwzOCBAQCBpbnQga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuKVxuIFx0XHRpZiAoa3ZtX3Rlc3RfcmVxdWVzdChLVk1fUkVRX1ZNX0RFQUQsIHZjcHUpKVxuIFx0XHRcdHJldHVybiAtRUlPO1xuIFxuJiM0MztcdFx0ciA9IGt2bV9tbXVfcmVsb2FkKHZjcHUpO1xuJiM0MztcdFx0aWYgKHIpXG4mIzQzO1x0XHRcdHJldHVybiByO1xuJiM0MztcbiYjNDM7XHRcdHIgPSBtbXVfdG9wdXBfbWVtb3J5X2NhY2hlcyh2Y3B1LCBmYWxzZSk7XG4mIzQzO1x0XHRpZiAocilcbiYjNDM7XHRcdFx0cmV0dXJuIHI7XG4mIzQzO1xuIFx0XHRjb25kX3Jlc2NoZWQoKTtcbiBcbiBcdFx0Z3VhcmQocmVhZF9sb2NrKShcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuIFxuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEJlY2F1c2Ugc2xvdHNfbG9jayBpcyBoZWxkLCBpdCBzaG91bGQgYmUgaW1wb3NzaWJsZSBmb3IgKmFueSpcbiYjNDM7XHRcdCAqIHJvb3RzIHRvIGJlIGludmFsaWRhdGVkIGFmdGVyIHRoZSBpbml0aWFsIE1NVSByZWxvYWQuICBXQVJOLFxuJiM0MztcdFx0ICogYnV0IGNvbnRpbnVlIG9uOyB0aGUgYWJvdmUgTU1VIHJlbG9hZCB3aWxsIGRvIHRoZSByaWdodCB0aGluZ1xuJiM0MztcdFx0ICogaWYgdGhlIGN1cnJlbnQgcm9vdCBpcyBhY3R1YWxseSBpbnZhbGlkLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRXQVJOX09OX09OQ0Uoa3ZtX3Rlc3RfcmVxdWVzdChLVk1fUkVRX01NVV9GUkVFX09CU09MRVRFX1JPT1RTLCB2Y3B1KSk7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFNuYXBzaG90IHRoZSBpbnZhbGlkYXRpb24gc2VxdWVuY2UgY291bnRlciBhZnRlciBhY3F1aXJpbmdcbiYjNDM7XHRcdCAqIG1tdV9sb2NrLCBhcyBndWVzdF9tZW1mZCBndWFyYW50ZWVzIHRoZSB2YWxpZGl0eSBvZiB0aGUgcGZuLFxuJiM0MztcdFx0ICogaS5lLiBhbnkgY29uY3VycmVudCBpbnZhbGlkYXRpb25zIGFyZSBndWFyYW50ZWVkIHRvIGJlXG4mIzQzO1x0XHQgKiBpcnJlbGV2YW50LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRmYXVsdC5tbXVfc2VxID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlbW11X2ludmFsaWRhdGVfc2VxO1xuJiM0MztcdFx0aWYgKGlzX3BhZ2VfZmF1bHRfc3RhbGUodmNwdSwgXHUwMDI2ZmF1bHQpKSB7XG4mIzQzO1x0XHRcdHIgPSBSRVRfUEZfUkVUUlk7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0ciA9IGt2bV90ZHBfbW11X21hcCh2Y3B1LCBcdTAwMjZmYXVsdCk7XG4gXHR9IHdoaWxlIChyID09IFJFVF9QRl9SRVRSWSk7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTY6NTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSYjMzQ7LAogICAgJiMzNDtrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIE1NVSBwYWdlIGZhdWx0IGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgYW5kIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gLiBJdCBtb3ZlcyBNTVUgcmVsb2FkIGFuZCBjYWNoZSB0b3AtdXAgb3BlcmF0aW9ucyBpbnNpZGUgdGhlIHJldHJ5IGxvb3AgdG8gaGFuZGxlIGNvbmN1cnJlbnQgaW52YWxpZGF0aW9ucyBjb3JyZWN0bHkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBLVk0gTU1VIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNGRiMDZkYTRkMDFjMDI3M2FmNzhkN2M4NDRhMGNkMGI3ODYzNTkwZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDE2OjUzOjQwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmMKaW5kZXggMDY0ZWNjMzNiOTI2Ny4uNzljNDUwZDY3N2I0MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jCkBAIC01MDYxLDYgJiM0Mzs1MDYxLDEwIEBAIHN0YXRpYyBpbnQga3ZtX3RkcF9wYWdlX3ByZWZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLAogCQlpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9WTV9ERUFELCB2Y3B1KSkKIAkJCXJldHVybiAtRUlPOwogCiYjNDM7CQlyID0ga3ZtX21tdV9yZWxvYWQodmNwdSk7CiYjNDM7CQlpZiAocikKJiM0MzsJCQlyZXR1cm4gcjsKJiM0MzsKIAkJY29uZF9yZXNjaGVkKCk7CiAJCXIgPSBrdm1fbW11X2RvX3BhZ2VfZmF1bHQodmNwdSwgZ3BhLCBlcnJvcl9jb2RlLCB0cnVlLCBOVUxMLCBsZXZlbCk7CiAJfSB3aGlsZSAociA9PSBSRVRfUEZfUkVUUlkpOwpAQCAtNTEwMSwxNCAmIzQzOzUxMDUsNiBAQCBsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJaWYgKGt2bV9pc19nZm5fYWxpYXModmNwdS0mZ3Q7a3ZtLCBncGFfdG9fZ2ZuKHJhbmdlLSZndDtncGEpKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQkvKgotCSAqIHJlbG9hZCBpcyBlZmZpY2llbnQgd2hlbiBjYWxsZWQgcmVwZWF0ZWRseSwgc28gd2UgY2FuIGRvIGl0IG9uCi0JICogZXZlcnkgaXRlcmF0aW9uLgotCSAqLwotCXIgPSBrdm1fbW11X3JlbG9hZCh2Y3B1KTsKLQlpZiAocikKLQkJcmV0dXJuIHI7Ci0KIAlkaXJlY3RfYml0cyA9IDA7CiAJaWYgKGt2bV9hcmNoX2hhc19wcml2YXRlX21lbSh2Y3B1LSZndDtrdm0pICZhbXA7JmFtcDsKIAkgICAga3ZtX21lbV9pc19wcml2YXRlKHZjcHUtJmd0O2t2bSwgZ3BhX3RvX2dmbihyYW5nZS0mZ3Q7Z3BhKSkpCkBAIC01MjEzLDE0ICYjNDM7NTIwOSw2IEBAIGludCBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4pCiAJaWYgKGt2bV9nZm5faXNfd3JpdGVfdHJhY2tlZChrdm0sIGZhdWx0LnNsb3QsIGZhdWx0LmdmbikpCiAJCXJldHVybiAtRVBFUk07CiAKLQlyID0ga3ZtX21tdV9yZWxvYWQodmNwdSk7Ci0JaWYgKHIpCi0JCXJldHVybiByOwotCi0JciA9IG1tdV90b3B1cF9tZW1vcnlfY2FjaGVzKHZjcHUsIGZhbHNlKTsKLQlpZiAocikKLQkJcmV0dXJuIHI7Ci0KIAlkbyB7CiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJCXJldHVybiAtRUlOVFI7CkBAIC01MjI4LDEwICYjNDM7NTIxNiwzOCBAQCBpbnQga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuKQogCQlpZiAoa3ZtX3Rlc3RfcmVxdWVzdChLVk1fUkVRX1ZNX0RFQUQsIHZjcHUpKQogCQkJcmV0dXJuIC1FSU87CiAKJiM0MzsJCXIgPSBrdm1fbW11X3JlbG9hZCh2Y3B1KTsKJiM0MzsJCWlmIChyKQomIzQzOwkJCXJldHVybiByOwomIzQzOwomIzQzOwkJciA9IG1tdV90b3B1cF9tZW1vcnlfY2FjaGVzKHZjcHUsIGZhbHNlKTsKJiM0MzsJCWlmIChyKQomIzQzOwkJCXJldHVybiByOwomIzQzOwogCQljb25kX3Jlc2NoZWQoKTsKIAogCQlndWFyZChyZWFkX2xvY2spKCZhbXA7a3ZtLSZndDttbXVfbG9jayk7CiAKJiM0MzsJCS8qCiYjNDM7CQkgKiBCZWNhdXNlIHNsb3RzX2xvY2sgaXMgaGVsZCwgaXQgc2hvdWxkIGJlIGltcG9zc2libGUgZm9yICphbnkqCiYjNDM7CQkgKiByb290cyB0byBiZSBpbnZhbGlkYXRlZCBhZnRlciB0aGUgaW5pdGlhbCBNTVUgcmVsb2FkLiAgV0FSTiwKJiM0MzsJCSAqIGJ1dCBjb250aW51ZSBvbjsgdGhlIGFib3ZlIE1NVSByZWxvYWQgd2lsbCBkbyB0aGUgcmlnaHQgdGhpbmcKJiM0MzsJCSAqIGlmIHRoZSBjdXJyZW50IHJvb3QgaXMgYWN0dWFsbHkgaW52YWxpZC4KJiM0MzsJCSAqLwomIzQzOwkJV0FSTl9PTl9PTkNFKGt2bV90ZXN0X3JlcXVlc3QoS1ZNX1JFUV9NTVVfRlJFRV9PQlNPTEVURV9ST09UUywgdmNwdSkpOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIFNuYXBzaG90IHRoZSBpbnZhbGlkYXRpb24gc2VxdWVuY2UgY291bnRlciBhZnRlciBhY3F1aXJpbmcKJiM0MzsJCSAqIG1tdV9sb2NrLCBhcyBndWVzdF9tZW1mZCBndWFyYW50ZWVzIHRoZSB2YWxpZGl0eSBvZiB0aGUgcGZuLAomIzQzOwkJICogaS5lLiBhbnkgY29uY3VycmVudCBpbnZhbGlkYXRpb25zIGFyZSBndWFyYW50ZWVkIHRvIGJlCiYjNDM7CQkgKiBpcnJlbGV2YW50LgomIzQzOwkJICovCiYjNDM7CQlmYXVsdC5tbXVfc2VxID0gdmNwdS0mZ3Q7a3ZtLSZndDttbXVfaW52YWxpZGF0ZV9zZXE7CiYjNDM7CQlpZiAoaXNfcGFnZV9mYXVsdF9zdGFsZSh2Y3B1LCAmYW1wO2ZhdWx0KSkgewomIzQzOwkJCXIgPSBSRVRfUEZfUkVUUlk7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiAJCXIgPSBrdm1fdGRwX21tdV9tYXAodmNwdSwgJmFtcDtmYXVsdCk7CiAJfSB3aGlsZSAociA9PSBSRVRfUEZfUkVUUlkpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NDMKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiAzMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS1ZNIE1NVSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0JiMzOTtzIGRpdmluZyBpbnRvIGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYCwgd2hpY2ggYWx3YXlzIHBpcXVlcyBteSBpbnRlcmVzdC4gSXQgc2VlbXMgdG8gYmUgdG91Y2hpbmcgc2V2ZXJhbCBrZXkgZnVuY3Rpb25zOiBga3ZtX3RkcF9wYWdlX3ByZWZhdWx0YCwgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAsIGFuZCBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBsb29rcyBsaWtlIG1vdmluZyBga3ZtX21tdV9yZWxvYWQodmNwdSlgIGluc2lkZSB0aGUgcmV0cnkgbG9vcCB3aXRoaW4gYGt2bV90ZHBfcGFnZV9wcmVmYXVsdGAgYW5kIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gLiBUaGF0JiMzOTtzIGEgc2lnbmlmaWNhbnQgYWx0ZXJhdGlvbiwgaW5kaWNhdGluZyBhIHBvdGVudGlhbCByZWZpbmVtZW50IGluIGhvdyB0aGUgTU1VIGhhbmRsZXMgcGFnZSBmYXVsdHMuIEFkZGluZyBgbW11X3RvcHVwX21lbW9yeV9jYWNoZXNgIGluc2lkZSB0aGF0IHNhbWUgbG9vcCBpbiBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYCBzdWdnZXN0cyBzb21lIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBvciBjYWNoZSBtYW5hZ2VtZW50IGlzIGhhcHBlbmluZyBkdXJpbmcgZmF1bHQgaGFuZGxpbmcuIFBsdXMsIHRoZXJlJiMzOTtzIGEgbmV3IGBpc19wYWdlX2ZhdWx0X3N0YWxlKHZjcHUsICZhbXA7ZmF1bHQpYCBjaGVjayBiZWluZyBpbnRyb2R1Y2VkLCB3aGljaCBwcm9iYWJseSBkZWFscyB3aXRoIHJlZHVuZGFudCBvciBvdXRkYXRlZCBwYWdlIGZhdWx0IGluZm9ybWF0aW9uLgoKRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgY2hhbmdlIHRvIHRoZSBLVk0gTU1VLiBHaXZlbiB0aGUgbmF0dXJlIG9mIHRoZXNlIG1vZGlmaWNhdGlvbnMsIGl0JiMzOTtzIGRlZmluaXRlbHkgd29ydGggZ2l2aW5nIHRoaXMgcGF0Y2ggYSB0aG9yb3VnaCBmdXp6aW5nLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZm9jdXMgb24gc3BlY2lmaWMgc3ltYm9scy4gSSBzdXNwZWN0IGBrdm1fdGRwX3BhZ2VfcHJlZmF1bHRgIG1pZ2h0IGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYWx0aG91Z2ggYmVpbmcgc3RhdGljIGNvdWxkIG1ha2UgaXQgbGVzcyBvZiBhIGRpcmVjdCB0YXJnZXQgZm9yIGZ1enppbmcuIEhvd2V2ZXIsIGJvdGggYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgYW5kIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gIGFyZSBleHBvcnRlZCBhbmQgdGhlcmVmb3JlIHZlcnkgaW50ZXJlc3RpbmcuCgpUaW1lIHRvIGRlbHZlIGludG8gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgIGFuZCBkaWcgZGVlcGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvbW11LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS9tbXUuYz01MDQ1PXN0YXRpYyBpbnQga3ZtX3RkcF9wYWdlX3ByZWZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTA5Mi1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTA5Mzpsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUwOTQtXHRcdFx0XHQgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTA1CgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gKioKCk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgd29ya2luZ3Mgb2YgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAuIEl0JiMzOTtzIGJlZW4gYSB3aGlsZSBzaW5jZSBJIGR1ZyBkZWVwIGludG8gdGhlIGRldGFpbHMgb2YgdGhlIFREUCBNTVUuIEkga25vdyB0aGlzIGZ1bmN0aW9uIGlzIGNydWNpYWwgZm9yIGhhbmRsaW5nIHByaXZhdGUgcGFnZSBmcmFtZSBudW1iZXJzIHdpdGhpbiB0aGUgS1ZNIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBoYXBwZW5zIGhlcmUgd2hlbiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgcHJpdmF0ZSBQRk4gYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgc2hhZG93IHBhZ2UgdGFibGVzLiBXaGF0IHNwZWNpZmljIG1hcHBpbmdzIGFyZSBiZWluZyBlc3RhYmxpc2hlZCBvciBtb2RpZmllZD8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBkaXJlY3QgbWFwcGluZywgYSBzaGFkb3cgbWFwcGluZywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEkgc2hvdWxkIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gYW55IHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIHVzZWQgd2l0aGluIHRoaXMgZnVuY3Rpb24gYmVjYXVzZSB0aGV5IGFyZSBjcml0aWNhbCBmb3IgZW5zdXJpbmcgZGF0YSBpbnRlZ3JpdHkgYW5kIGF2b2lkaW5nIHJhY2UgY29uZGl0aW9ucywgZXNwZWNpYWxseSBjb25zaWRlcmluZyBpdHMgcm9sZSBpbiB0aGUgY3JpdGljYWwgcGF0aCBvZiBtZW1vcnkgYWNjZXNzLiBJcyB0aGVyZSBhbnl0aGluZyB1bnVzdWFsIGFib3V0IHRoZSBoYW5kbGluZyBvZiB0aGUgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSBpbiB0aGlzIHBhcnRpY3VsYXIgY29udGV4dCwgbGlrZSBzcGVjaWFsIGNvbnNpZGVyYXRpb25zIGZvciBodWdlIHBhZ2VzIG9yIG5lc3RlZCB2aXJ0dWFsaXphdGlvbj8gSSB3aWxsIG5lZWQgdG8gbG9vayB1cCBzb21lIGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIGxpa2UgYGt2bV9tbXVfcGFnZWAgYW5kIGl0cyByZWxhdGlvbiB0byB0aGUgYWN0dWFsIHBoeXNpY2FsIHBhZ2VzIHRvIGRldGVybWluZSBob3cgZXhhY3RseSB0aGUgZnVuY3Rpb24gaXMgZG9pbmcgaXRzIG1hcHBpbmcuIEkgc2hvdWxkIGFsc28gY2hlY2sgaWYgYW55IHJlY2VudCBwYXRjaGVzIGhhdmUgYWx0ZXJlZCBpdHMgYmVoYXZpb3IsIGFzIHRoaXMgYXJlYSBpcyBvZnRlbiBhIHBvaW50IG9mIG9uZ29pbmcgZGV2ZWxvcG1lbnQgYW5kIG9wdGltaXphdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvbW11LmM9NTE2Mz1zdGF0aWMgdm9pZCBrdm1fYXNzZXJ0X2dtZW1faW52YWxpZGF0ZV9sb2NrX2hlbGQoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUxNzQtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUxNzU6aW50IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbilcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTE3Ni17XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MjU4LX1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTI1OTpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTI2MC0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTQ2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIE1lbW9yeSBGYXVsdCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBzb21ldGhpbmcgaW50ZXJlc3RpbmcuIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLi4uIHRoYXQmIzM5O3Mgbm90IHN0YXRpYy4gQW5kIG5laXRoZXIgaXMgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAuIFRoYXQmIzM5O3MgYSBrZXkgb2JzZXJ2YXRpb24sIHJpZ2h0PyBJdCBtZWFucyB0aGVzZSBmdW5jdGlvbnMgbWlnaHQgYmUgYWNjZXNzaWJsZSBmcm9tIG91dHNpZGUgdGhlIGltbWVkaWF0ZSBzY29wZSwgd2hpY2ggaGFzIGltcGxpY2F0aW9ucyBmb3IgaG93IHRoZXkmIzM5O3JlIHVzZWQgYW5kIGhvdyB3ZSBtaWdodCBpbnRlcmFjdCB3aXRoIHRoZW0uIEl0IGFkZHMgZmxleGliaWxpdHksIGJ1dCBhbHNvIHJlcXVpcmVzIGNhcmVmdWwgY29uc2lkZXJhdGlvbiBvZiBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIGFuZCBhY2Nlc3MgY29udHJvbHMuCgpUaGUgbmV4dCBsb2dpY2FsIHN0ZXAsIGJlZm9yZSBkaXZpbmcgZGVlcGVyIGludG8gdGhlaXIgaW1wbGVtZW50YXRpb24sIGlzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGlzIGFjdHVhbGx5IGV4cG9ydGVkLiBUaGF0IHdpbGwgZ2l2ZSBhIGNsZWFyIGluZGljYXRpb24gb2YgaXRzIGludGVuZGVkIHZpc2liaWxpdHkgYW5kIHB1cnBvc2UuIEV4cG9ydGVkIGZ1bmN0aW9ucyBhcmUgZGVzaWduZWQgZm9yIGJyb2FkZXIgdXNlLCB3aGlsZSBpbnRlcm5hbCBvbmVzIGFyZSB0aWdodGx5IGNvbnRyb2xsZWQuIExldCBtZSBqdXN0IGNoZWNrIHRoZSBzeW1ib2wgdGFibGUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2t2bS9zMzkwL3MzOTAuYz01NzgxPXZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpvbGQsXG4tLVxuYXJjaC9zMzkwL2t2bS9zMzkwL3MzOTAuYy01Nzg4LS8qKlxuYXJjaC9zMzkwL2t2bS9zMzkwL3MzOTAuYzo1Nzg5OiAqIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSgpIC0tIHByZS1mYXVsdCBhbmQgbGluayBnbWFwIGRhdCB0YWJsZXNcbmFyY2gvczM5MC9rdm0vczM5MC9zMzkwLmMtNTc5MC0gKiBAdmNwdTogdGhlIHZjcHUgdGhhdCBzaGFsbCBhcHBlYXIgdG8gaGF2ZSBnZW5lcmF0ZWQgdGhlIGZhdWx0LWluLlxuLS1cbmFyY2gvczM5MC9rdm0vczM5MC9zMzkwLmMtNTgwNy0gKi9cbmFyY2gvczM5MC9rdm0vczM5MC9zMzkwLmM6NTgwODpsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXG5hcmNoL3MzOTAva3ZtL3MzOTAvczM5MC5jLTU4MDkte1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NTA0NT1zdGF0aWMgaW50IGt2bV90ZHBfcGFnZV9wcmVmYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUwOTItXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUwOTM6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MDk0LVx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0xNjk4PXN0YXRpYyBpbnQgdGR4X3NlcHRfbWFwX2xlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgZW51bSBwZ19sZXZlbCBsZXZlbCxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTE3MTAtXHQvKlxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoxNzExOlx0ICogRW5zdXJlIHByZV9mYXVsdF9hbGxvd2VkIGlzIHJlYWQgYnkga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KClcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMTcxMi1cdCAqIGJlZm9yZSBrdm1fdGR4LVx1MDAzZXN0YXRlLiAgVXNlcnNwYWNlIG11c3Qgbm90IGJlIGFsbG93ZWQgdG8gcHJlLWZhdWx0XG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTI2NDI9dm9pZCBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGVfcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpO1xuLS1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNjQ1LSNpZmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjI2NDY6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI2NDctXHRcdFx0XHQgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSk7XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz00MzUzPXN0YXRpYyBpbnQga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy00Mzc3LVxudmlydC9rdm0va3ZtX21haW4uYzo0Mzc4Olx0XHRyID0ga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHZjcHUsIHJhbmdlKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDM3OS1cdFx0aWYgKFdBUk5fT05fT05DRShyID09IDAgfHwgciA9PSAtRUlPKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODA4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqS1ZNIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBLVk0uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlZCwgc3BlY2lmaWNhbGx5IHRoZSBgS1ZNYCBzZXR0aW5nIGl0c2VsZi4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUsIHRoZSBmb3VuZGF0aW9uLiBOb3csIEkgbmVlZCB0byBnZXQgaW50byB0aGUgd2VlZHMgYSBiaXQuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgcHJlLWZhdWx0aW5nIG1lbW9yeS4gSSYjMzk7bSByZWFzb25hYmx5IGNlcnRhaW4gdGhlcmUmIzM5O3MgYSBjb25maWd1cmF0aW9uIG9wdGlvbiByZWxhdGluZyB0byB0aGF0LCBzb21ldGhpbmcgYWxvbmcgdGhlIGxpbmVzIG9mIGBDT05GSUdfS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWWAgb3IgcG90ZW50aWFsbHkgc29tZXRoaW5nIHdpdGggYSBzbGlnaHRseSBkaWZmZXJlbnQgbmFtZS4gVGltZSB0byBnbyBkaWdnaW5nIHRocm91Z2ggdGhlIGNvZGUgb3IgdGhlIGRvY3VtZW50YXRpb24gdG8gY29uZmlybSBhbmQgdmVyaWZ5IHRoZSBzcGVjaWZpY3Mgb2YgdGhhdCBzZXR0aW5nLiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgcHJlLWZhdWx0aW5nIGlzIGhhbmRsZWQgd2l0aGluIHRoaXMgS1ZNIHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rdm0vS2NvbmZpZz0xOT1jb25maWcgS1ZNXG4tLVxuYXJjaC9zMzkwL2t2bS9LY29uZmlnLTMyLVx0c2VsZWN0IEtWTV9NTVVfTE9DS0xFU1NfQUdJTkdcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzozMzpcdHNlbGVjdCBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXG5hcmNoL3MzOTAva3ZtL0tjb25maWctMzQtXHRoZWxwXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWc9MjA9Y29uZmlnIEtWTV9YODZcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy00Ny1cdHNlbGVjdCBLVk1fR0VORVJJQ19IQVJEV0FSRV9FTkFCTElOR1xuYXJjaC94ODYva3ZtL0tjb25maWc6NDg6XHRzZWxlY3QgS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxuYXJjaC94ODYva3ZtL0tjb25maWctNDktXHRzZWxlY3QgS1ZNX1dFUlJPUiBpZiBXRVJST1Jcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MjY0Mj12b2lkIGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZV9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSk7XG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI2NDQtXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MjY0NTojaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNjQ2LWxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG52aXJ0L2t2bS9LY29uZmlnPTY4PWNvbmZpZyBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1Rcbi0tXG52aXJ0L2t2bS9LY29uZmlnLTcwLVxudmlydC9rdm0vS2NvbmZpZzo3MTpjb25maWcgS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxudmlydC9rdm0vS2NvbmZpZy03Mi0gICAgICAgYm9vbFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9NDMyNz1zdGF0aWMgaW50IGt2bV92Y3B1X2lvY3RsX2dldF9zdGF0c19mZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy00MzUxLVxudmlydC9rdm0va3ZtX21haW4uYzo0MzUyOiNpZmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxudmlydC9rdm0va3ZtX21haW4uYy00MzUzLXN0YXRpYyBpbnQga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxudmlydC9rdm0va3ZtX21haW4uYz00NDI1PXN0YXRpYyBsb25nIGt2bV92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNDY1MC1cdH1cbnZpcnQva3ZtL2t2bV9tYWluLmM6NDY1MTojaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDY1Mi1cdGNhc2UgS1ZNX1BSRV9GQVVMVF9NRU1PUlk6IHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc0NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byB0aGUgS1ZNIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gd2UmIzM5O3JlIGZvY3VzaW5nIG9uIEtWTSwgdGhhdCYjMzk7cyB0aGUgY29yZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7UmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGFuZCB0aGUgY3JpdGljYWwgcGFyYW1ldGVycyB0aGF0IGdvdmVybiB0aGUgZW52aXJvbm1lbnQuJiMzNDsgSSYjMzk7bSB0aGlua2luZyBzcGVjaWZpY2FsbHkgYWJvdXQgdGhlIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gIHNldHRpbmcgcmlnaHQgb2ZmIHRoZSBiYXQuIEl0JiMzOTtzIHVzdWFsbHkgdGhlIGNydXggb2YgaG93IHRoZSBndWVzdCYjMzk7cyBtZW1vcnkgaXMgbWFuYWdlZCBhbmQgaG93IHZpcnR1YWwgYWRkcmVzc2VzIGFyZSB0cmFuc2xhdGVkLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBrbm93bGVkZ2Ugb2YgaXQuIExldCYjMzk7cyBzZWUgaG93IGl0JiMzOTtzIGRlZmluZWQgYW5kIGNvbmZpZ3VyZWQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCBkb2N1bWVudGF0aW9uIHRvIHJlZnJlc2ggbXkga25vd2xlZGdlIGFuZCBjb25maXJtIG15IGFzc3VtcHRpb25zIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS5oPTMzMT1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX3NoYWRvd19yb290X2FsbG9jYXRlZChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL21tdS5oLTM0MS1cbmFyY2gveDg2L2t2bS9tbXUuaDozNDI6aW50IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbik7XG5hcmNoL3g4Ni9rdm0vbW11LmgtMzQzLVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NTE2Mz1zdGF0aWMgdm9pZCBrdm1fYXNzZXJ0X2dtZW1faW52YWxpZGF0ZV9sb2NrX2hlbGQoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUxNzQtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUxNzU6aW50IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbilcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTE3Ni17XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MjU4LX1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTI1OTpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTI2MC0jZW5kaWZcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTMxODA9c3RhdGljIGludCB0ZHhfZ21lbV9wb3N0X3BvcHVsYXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuLFxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzE5Mi1cdGt2bV90ZHgtXHUwMDNlcGFnZV9hZGRfc3JjID0gc3JjX3BhZ2U7XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjMxOTM6XHRyZXQgPSBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4oYXJnLVx1MDAzZXZjcHUsIGdmbiwgcGZuKTtcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMzE5NC1cdGt2bV90ZHgtXHUwMDNlcGFnZV9hZGRfc3JjID0gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU4MgoJCQkJCQkJb3V0cHV0OiAxNTEKCQkJCQkJCXRob3VnaHRzOiA0NjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEtWTSBNTVUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBmb2N1cyBsYW5kcyBvbiBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYC4gVGhhdCYjMzk7cyBURFgtc3BlY2lmaWMsIGFzIEkgcmVjYWxsLCBhbmQgdGhhdCYjMzk7cyBjcml0aWNhbCBiZWNhdXNlIFREWCAqcmVxdWlyZXMqIGBLVk1fSU5URUxgLCB3aGljaCBnaXZlcyBtZSBhIHN0YXJ0aW5nIHBvaW50LiBEaWdnaW5nIGRlZXBlciwgSSBzZWUgaXQmIzM5O3MgdXNlZCBpbiBgdGR4X2dtZW1fcG9zdF9wb3B1bGF0ZWAsIHNvbGlkaWZ5aW5nIGl0cyByZWxldmFuY2UgaW4gdGhpcyBjb250ZXh0LgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YC4gSSB0cmFjZSBpdDogYGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLCB0aGVuIHRoZSBga3ZtX3ZjcHVfaW9jdGxgIHBhdGggd2l0aCBgS1ZNX1BSRV9GQVVMVF9NRU1PUllgLiBCaW5nby4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IHJlc2lkZXMuCgpTbywgdGhlIGtleSBzeW1ib2xzIGhlcmUgYXJlIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGFuZCBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYC4gSSBrbm93IHRoZSBiYXNlIGNvbmZpZyBpcyBkZWZpbml0ZWx5IGBLVk1gLgoKSSBhbHNvIGJyaWVmbHkgY2hlY2tlZCBga3ZtX3RkcF9wYWdlX3ByZWZhdWx0YCBhbmQgaXQmIzM5O3Mgc3RhdGljIGluIGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYC4gU28sIEkmIzM5O2xsIGV4Y2x1ZGUgaXQgZnJvbSB0aGUgZmluYWwgbGlzdC4KCk5leHQsIEkgbmVlZCB0byB2ZXJpZnkgcmVhY2hhYmlsaXR5LiBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYCBpcyBleHBvcnRlZCBpbnRlcm5hbGx5IHRvIEtWTSBhbmQgdXNlZCBieSBgdGR4X2dtZW1fcG9zdF9wb3B1bGF0ZWAsIHdoaWNoIGlzIGdvb2QuIENhbiB3ZSB0cmlnZ2VyIFREWCBpbiBRRU1VPyBZZXMsIHdlIGNhbiBlbXVsYXRlIGl0IG9yIGZ1enogaXQuCgpXYWl0IGEgc2Vjb25kLi4uIFREWCB0ZWNobmljYWxseSBuZWVkcyBoYXJkd2FyZSBzdXBwb3J0LiBCdXQgc3l6a2FsbGVyIGZ1enplcyBLVk0gaW9jdGxzIGRpcmVjdGx5LCBzbyBpZiB0aGUgaW9jdGwgaXMgYXZhaWxhYmxlLCB3ZSBjYW4gcmVhY2ggaXQhIFRoYXQmIzM5O3MgYW4gaW1wb3J0YW50IGRldGFpbC4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIG5vdGUgdGhhdCBpbiBteSByZWFzb25pbmcuCgpNeSBmaW5hbCBsaXN0IG9mIHN5bWJvbHMgdG8gZm9jdXMgb24gaXM6CiogICBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YAoqICAgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAKClRoZSByZXF1aXJlZCBjb25maWcgaXMgYEtWTWAuCgpUaGUgcGF0Y2gmIzM5O3MgY2hhbmdlcyByZXZvbHZlIGFyb3VuZCB0aGUgTU1VIHBhZ2UgZmF1bHQgaGFuZGxpbmcsIHNwZWNpZmljYWxseSBhcm91bmQgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgYW5kIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIG1vdmluZyBNTVUgcmVsb2FkIGFuZCBjYWNoZSB0b3AtdXAgb3BlcmF0aW9ucyBpbnNpZGUgdGhlIHJldHJ5IGxvb3AgdG8gY29ycmVjdGx5IGhhbmRsZSBjb25jdXJyZW50IGludmFsaWRhdGlvbnMuIFRoaXMgaXMgY29yZSBLVk0gTU1VIGxvZ2ljIGFuZCBhZmZlY3RzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkmIzM0OywKICAgICYjMzQ7a3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBNTVUgcGFnZSBmYXVsdCBoYW5kbGluZywgc3BlY2lmaWNhbGx5IGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGFuZCBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYC4gSXQgbW92ZXMgTU1VIHJlbG9hZCBhbmQgY2FjaGUgdG9wLXVwIG9wZXJhdGlvbnMgaW5zaWRlIHRoZSByZXRyeSBsb29wIHRvIGhhbmRsZSBjb25jdXJyZW50IGludmFsaWRhdGlvbnMgY29ycmVjdGx5LiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGNvcmUgS1ZNIE1NVSBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5JiMzNDssCiAgICAmIzM0O2t2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBLVk0gTU1VIHBhZ2UgZmF1bHQgaGFuZGxpbmcsIHNwZWNpZmljYWxseSBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBhbmQgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAuIEl0IG1vdmVzIE1NVSByZWxvYWQgYW5kIGNhY2hlIHRvcC11cCBvcGVyYXRpb25zIGluc2lkZSB0aGUgcmV0cnkgbG9vcCB0byBoYW5kbGUgY29uY3VycmVudCBpbnZhbGlkYXRpb25zIGNvcnJlY3RseS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIEtWTSBNTVUgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjAzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgTU1VIHJlbG9hZCBhbmQgY2FjaGUgdG9wLXVwIGZ1bmN0aW9ucyBpbnNpZGUgdGhlIHJldHJ5IGxvb3BzIGZvciBLVk0gcGFnZSBmYXVsdCBoYW5kbGluZyAoYGt2bV90ZHBfcGFnZV9wcmVmYXVsdGAgYW5kIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gKS4gVGhpcyBmaXhlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBhIGNvbmN1cnJlbnQgaW52YWxpZGF0aW9uIGNvdWxkIGNhdXNlIHRoZSBsb29wIHRvIHJldHJ5IHdpdGhvdXQgcmVsb2FkaW5nIHRoZSBNTVUgcm9vdCwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBhbiBvYnNvbGV0ZSByb290IGJlaW5nIHVzZWQuIFRoZSBgZmF1bHRgIHN0cnVjdHVyZSBpcyBmdWxseSB6ZXJvLWluaXRpYWxpemVkIGZvciBhbnkgdW5zcGVjaWZpZWQgZmllbGRzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBwYXRjaC4gQW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBhcmlzaW5nIGZyb20gb2Jzb2xldGUgcm9vdHMgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0ZGIwNmRhNGQwMWMwMjczYWY3OGQ3Yzg0NGEwY2QwYjc4NjM1OTBmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMjYgMTY6NTM6NDAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuYwppbmRleCAwNjRlY2MzM2I5MjY3Li43OWM0NTBkNjc3YjQwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmMKQEAgLTUwNjEsNiAmIzQzOzUwNjEsMTAgQEAgc3RhdGljIGludCBrdm1fdGRwX3BhZ2VfcHJlZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsCiAJCWlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX1ZNX0RFQUQsIHZjcHUpKQogCQkJcmV0dXJuIC1FSU87CiAKJiM0MzsJCXIgPSBrdm1fbW11X3JlbG9hZCh2Y3B1KTsKJiM0MzsJCWlmIChyKQomIzQzOwkJCXJldHVybiByOwomIzQzOwogCQljb25kX3Jlc2NoZWQoKTsKIAkJciA9IGt2bV9tbXVfZG9fcGFnZV9mYXVsdCh2Y3B1LCBncGEsIGVycm9yX2NvZGUsIHRydWUsIE5VTEwsIGxldmVsKTsKIAl9IHdoaWxlIChyID09IFJFVF9QRl9SRVRSWSk7CkBAIC01MTAxLDE0ICYjNDM7NTEwNSw2IEBAIGxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAlpZiAoa3ZtX2lzX2dmbl9hbGlhcyh2Y3B1LSZndDtrdm0sIGdwYV90b19nZm4ocmFuZ2UtJmd0O2dwYSkpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCS8qCi0JICogcmVsb2FkIGlzIGVmZmljaWVudCB3aGVuIGNhbGxlZCByZXBlYXRlZGx5LCBzbyB3ZSBjYW4gZG8gaXQgb24KLQkgKiBldmVyeSBpdGVyYXRpb24uCi0JICovCi0JciA9IGt2bV9tbXVfcmVsb2FkKHZjcHUpOwotCWlmIChyKQotCQlyZXR1cm4gcjsKLQogCWRpcmVjdF9iaXRzID0gMDsKIAlpZiAoa3ZtX2FyY2hfaGFzX3ByaXZhdGVfbWVtKHZjcHUtJmd0O2t2bSkgJmFtcDsmYW1wOwogCSAgICBrdm1fbWVtX2lzX3ByaXZhdGUodmNwdS0mZ3Q7a3ZtLCBncGFfdG9fZ2ZuKHJhbmdlLSZndDtncGEpKSkKQEAgLTUyMTMsMTQgJiM0Mzs1MjA5LDYgQEAgaW50IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbikKIAlpZiAoa3ZtX2dmbl9pc193cml0ZV90cmFja2VkKGt2bSwgZmF1bHQuc2xvdCwgZmF1bHQuZ2ZuKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAotCXIgPSBrdm1fbW11X3JlbG9hZCh2Y3B1KTsKLQlpZiAocikKLQkJcmV0dXJuIHI7Ci0KLQlyID0gbW11X3RvcHVwX21lbW9yeV9jYWNoZXModmNwdSwgZmFsc2UpOwotCWlmIChyKQotCQlyZXR1cm4gcjsKLQogCWRvIHsKIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQogCQkJcmV0dXJuIC1FSU5UUjsKQEAgLTUyMjgsMTAgJiM0Mzs1MjE2LDM4IEBAIGludCBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4pCiAJCWlmIChrdm1fdGVzdF9yZXF1ZXN0KEtWTV9SRVFfVk1fREVBRCwgdmNwdSkpCiAJCQlyZXR1cm4gLUVJTzsKIAomIzQzOwkJciA9IGt2bV9tbXVfcmVsb2FkKHZjcHUpOwomIzQzOwkJaWYgKHIpCiYjNDM7CQkJcmV0dXJuIHI7CiYjNDM7CiYjNDM7CQlyID0gbW11X3RvcHVwX21lbW9yeV9jYWNoZXModmNwdSwgZmFsc2UpOwomIzQzOwkJaWYgKHIpCiYjNDM7CQkJcmV0dXJuIHI7CiYjNDM7CiAJCWNvbmRfcmVzY2hlZCgpOwogCiAJCWd1YXJkKHJlYWRfbG9jaykoJmFtcDtrdm0tJmd0O21tdV9sb2NrKTsKIAomIzQzOwkJLyoKJiM0MzsJCSAqIEJlY2F1c2Ugc2xvdHNfbG9jayBpcyBoZWxkLCBpdCBzaG91bGQgYmUgaW1wb3NzaWJsZSBmb3IgKmFueSoKJiM0MzsJCSAqIHJvb3RzIHRvIGJlIGludmFsaWRhdGVkIGFmdGVyIHRoZSBpbml0aWFsIE1NVSByZWxvYWQuICBXQVJOLAomIzQzOwkJICogYnV0IGNvbnRpbnVlIG9uOyB0aGUgYWJvdmUgTU1VIHJlbG9hZCB3aWxsIGRvIHRoZSByaWdodCB0aGluZwomIzQzOwkJICogaWYgdGhlIGN1cnJlbnQgcm9vdCBpcyBhY3R1YWxseSBpbnZhbGlkLgomIzQzOwkJICovCiYjNDM7CQlXQVJOX09OX09OQ0Uoa3ZtX3Rlc3RfcmVxdWVzdChLVk1fUkVRX01NVV9GUkVFX09CU09MRVRFX1JPT1RTLCB2Y3B1KSk7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogU25hcHNob3QgdGhlIGludmFsaWRhdGlvbiBzZXF1ZW5jZSBjb3VudGVyIGFmdGVyIGFjcXVpcmluZwomIzQzOwkJICogbW11X2xvY2ssIGFzIGd1ZXN0X21lbWZkIGd1YXJhbnRlZXMgdGhlIHZhbGlkaXR5IG9mIHRoZSBwZm4sCiYjNDM7CQkgKiBpLmUuIGFueSBjb25jdXJyZW50IGludmFsaWRhdGlvbnMgYXJlIGd1YXJhbnRlZWQgdG8gYmUKJiM0MzsJCSAqIGlycmVsZXZhbnQuCiYjNDM7CQkgKi8KJiM0MzsJCWZhdWx0Lm1tdV9zZXEgPSB2Y3B1LSZndDtrdm0tJmd0O21tdV9pbnZhbGlkYXRlX3NlcTsKJiM0MzsJCWlmIChpc19wYWdlX2ZhdWx0X3N0YWxlKHZjcHUsICZhbXA7ZmF1bHQpKSB7CiYjNDM7CQkJciA9IFJFVF9QRl9SRVRSWTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKIAkJciA9IGt2bV90ZHBfbW11X21hcCh2Y3B1LCAmYW1wO2ZhdWx0KTsKIAl9IHdoaWxlIChyID09IFJFVF9QRl9SRVRSWSk7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NDAKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiAyNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS1ZNIE1NVSBQYXRjaCBmb3IgUG90ZW50aWFsIE1lbW9yeSBSaXNrcyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGRpdmVzIGludG8gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLCBzcGVjaWZpY2FsbHkuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gYWN0aW9uIGlzIHNoaWZ0aW5nIGBrdm1fbW11X3JlbG9hZCh2Y3B1KWAgYW5kIGBtbXVfdG9wdXBfbWVtb3J5X2NhY2hlcyh2Y3B1LCBmYWxzZSlgIGludG8gdGhlIHJldHJ5IGxvb3BzIHdpdGhpbiBga3ZtX3RkcF9wYWdlX3ByZWZhdWx0YCBhbmQgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAuIFRoYXQmIzM5O3MgaW50ZXJlc3Rpbmc7IHBvdGVudGlhbGx5IG9wdGltaXppbmcgcGVyZm9ybWFuY2UgYnkgcmVsb2FkaW5nIGFuZCB0b3BwaW5nIHVwIG1vcmUgZnJlcXVlbnRseSBkdXJpbmcgcGFnZSBmYXVsdHMuIEl0IGFsc28gYWRkcyBhIGBXQVJOX09OX09OQ0VgIGFuZCB1cGRhdGVzIGEgYGZhdWx0Lm1tdV9zZXFgIGNvdW50ZXIgYW5kIGNoZWNrcyBpZiBhIHBhZ2UgZmF1bHQgaXMgc3RhbGUgd2l0aGluIHRoZSBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYCBsb29wLgoKTXkgaW1tZWRpYXRlIGNvbmNlcm4sIHRob3VnaCwgaXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIEkgbmVlZCB0byBiZSBzdXJlIHRoaXMgcmVmYWN0b3JpbmcgaGFzbiYjMzk7dCBpbmFkdmVydGVudGx5IGNyZWF0ZWQgYSBzY2VuYXJpbyB3aGVyZSB3ZSYjMzk7cmUgcmVhZGluZyBmcm9tIG1lbW9yeSB0aGF0IGhhc24mIzM5O3QgYmVlbiBwcm9wZXJseSBpbml0aWFsaXplZCwgbGVhZGluZyB0byBhbGwgc29ydHMgb2YgdW5wcmVkaWN0YWJsZSBiZWhhdmlvci4gTGV0IG1lIHNlZS4uLiBJbiBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYCwgdGhlIGBmYXVsdGAgdmFyaWFibGUgaXMgYSBgc3RydWN0IGt2bV9wYWdlX2ZhdWx0YC4gVGhlIGNvZGUgdXBkYXRlcyBgZmF1bHQubW11X3NlcWAgaW5zaWRlIHRoZSBsb29wLiBUaGUgcXVlc3Rpb24gaXMsIGlzIHRoZXJlIGFueSBjaGFuY2UgdGhlIGNvZGUgcmVhZHMgZnJvbSBhbnkgcGFydHMgb2YgdGhlIGBmYXVsdGAgc3RydWN0IHRoYXQgKmhhdmVuJiMzOTt0KiBiZWVuIGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyB1c2VkLCBlc3BlY2lhbGx5IGlmIHRoZSBsb29wIGlzIGhpdCBtdWx0aXBsZSB0aW1lcz8gUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAgYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvbW11LmM9NTE2Mz1zdGF0aWMgdm9pZCBrdm1fYXNzZXJ0X2dtZW1faW52YWxpZGF0ZV9sb2NrX2hlbGQoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUxNzQtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUxNzU6aW50IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbilcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTE3Ni17XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MjU4LX1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTI1OTpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTI2MC0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg3OQoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHByb2Nlc3NpbmcgdGhlIHByb3ZpZGVkIHRleHQ6CgoqKkRpdmluZyBpbnRvIHRoZSBLVk0gVERQIE1NVSBNYXBwaW5nIEZ1bmN0aW9uKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gVGltZSB0byBjcmFjayBvcGVuIHRoZSBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIFRyYW5zbGF0aW9uIExvb2thc2lkZSBCdWZmZXIgKFRMQikgaXMgYmVpbmcgaGFuZGxlZCBmb3IgVHJhbnNwYXJlbnQgUGFnZSBTaGFyaW5nIChUUFMpIGluIHRoZSBLVk0gKEtlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUpIGNvbnRleHQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIHg4NiBhcmNoaXRlY3R1cmUuIFRoaXMgZnVuY3Rpb24sIHJlc2lkaW5nIGluIGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYCwgaXMgbGlrZWx5IGNyaXRpY2FsIGZvciBtYW5hZ2luZyBwcml2YXRlIHBhZ2UgZnJhbWUgbnVtYmVycyAoUEZOcykgcmVsYXRlZCB0byBUUFMuIEl0JiMzOTtzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciBlc3RhYmxpc2hpbmcgdGhlIG1hcHBpbmdzIGJldHdlZW4gZ3Vlc3QgdmlydHVhbCBhZGRyZXNzZXMgYW5kIGhvc3QgcGh5c2ljYWwgYWRkcmVzc2VzLCBlbnN1cmluZyBtZW1vcnkgY29uc2lzdGVuY3kgYW5kIHBlcmZvcm1hbmNlIHdpdGhpbiB0aGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gZGVhbCB3aXRoIHRoZSBjb21wbGV4aXRpZXMgb2YgbmVzdGVkIHBhZ2luZywgYW5kIGxpa2VseSBpbmNvcnBvcmF0ZXMgb3B0aW1pemF0aW9ucyByZWxhdGVkIHRvIHNoYWRvdyBwYWdlIHRhYmxlcyBhbmQgYWRkcmVzcyB0cmFuc2xhdGlvbiBjYWNoaW5nLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgdGhlIGxvY2tpbmcgbWVjaGFuaXNtcyB1c2VkIChpZiBhbnkpLCBhbmQgYW55IGNvbnNpZGVyYXRpb25zIG1hZGUgZm9yIHBlcmZvcm1hbmNlIHR1bmluZy4gTGV0JiMzOTtzIHNlZSBob3cgaXQmIzM5O3MgaW1wbGVtZW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS9tbXUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUxNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUxNzU6XHRpbnQga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuKVxuNTE3NjpcdHtcbjUxNzc6XHRcdHN0cnVjdCBrdm1fcGFnZV9mYXVsdCBmYXVsdCA9IHtcbjUxNzg6XHRcdFx0LmFkZHIgPSBnZm5fdG9fZ3BhKGdmbiksXG41MTc5Olx0XHRcdC5lcnJvcl9jb2RlID0gUEZFUlJfR1VFU1RfRklOQUxfTUFTSyB8IFBGRVJSX1BSSVZBVEVfQUNDRVNTLFxuNTE4MDpcdFx0XHQucHJlZmV0Y2ggPSB0cnVlLFxuNTE4MTpcdFx0XHQuaXNfdGRwID0gdHJ1ZSxcbjUxODI6XHRcdFx0Lm54X2h1Z2VfcGFnZV93b3JrYXJvdW5kX2VuYWJsZWQgPSBpc19ueF9odWdlX3BhZ2VfZW5hYmxlZCh2Y3B1LVx1MDAzZWt2bSksXG41MTgzOlx0XG41MTg0Olx0XHRcdC5tYXhfbGV2ZWwgPSBQR19MRVZFTF80SyxcbjUxODU6XHRcdFx0LnJlcV9sZXZlbCA9IFBHX0xFVkVMXzRLLFxuNTE4NjpcdFx0XHQuZ29hbF9sZXZlbCA9IFBHX0xFVkVMXzRLLFxuNTE4NzpcdFx0XHQuaXNfcHJpdmF0ZSA9IHRydWUsXG41MTg4Olx0XG41MTg5Olx0XHRcdC5nZm4gPSBnZm4sXG41MTkwOlx0XHRcdC5zbG90ID0ga3ZtX3ZjcHVfZ2ZuX3RvX21lbXNsb3QodmNwdSwgZ2ZuKSxcbjUxOTE6XHRcdFx0LnBmbiA9IHBmbixcbjUxOTI6XHRcdFx0Lm1hcF93cml0YWJsZSA9IHRydWUsXG41MTkzOlx0XHR9O1xuNTE5NDpcdFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cdTAwM2Vrdm07XG41MTk1Olx0XHRpbnQgcjtcbjUxOTY6XHRcbjUxOTc6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuNTE5ODpcdFxuNTE5OTpcdFx0LypcbjUyMDA6XHRcdCAqIE1hcHBpbmcgYSBwcmUtZGV0ZXJtaW5lZCBwcml2YXRlIHBmbiBpcyBpbnRlbmRlZCBvbmx5IGZvciB1c2Ugd2hlblxuNTIwMTpcdFx0ICogcG9wdWxhdGluZyBhIGd1ZXN0X21lbWZkIGluc3RhbmNlLiAgQXNzZXJ0IHRoYXQgdGhlIHNsb3QgaXMgYmFja2VkXG41MjAyOlx0XHQgKiBieSBndWVzdF9tZW1mZCBhbmQgdGhhdCB0aGUgZ21lbSBpbnN0YW5jZSYjMzk7cyBpbnZhbGlkYXRlX2xvY2sgaXMgaGVsZC5cbjUyMDM6XHRcdCAqL1xuNTIwNDpcdFx0a3ZtX2Fzc2VydF9nbWVtX2ludmFsaWRhdGVfbG9ja19oZWxkKGZhdWx0LnNsb3QpO1xuNTIwNTpcdFxuNTIwNjpcdFx0aWYgKEtWTV9CVUdfT04oIXRkcF9tbXVfZW5hYmxlZCwga3ZtKSlcbjUyMDc6XHRcdFx0cmV0dXJuIC1FSU87XG41MjA4Olx0XG41MjA5Olx0XHRpZiAoa3ZtX2dmbl9pc193cml0ZV90cmFja2VkKGt2bSwgZmF1bHQuc2xvdCwgZmF1bHQuZ2ZuKSlcbjUyMTA6XHRcdFx0cmV0dXJuIC1FUEVSTTtcbjUyMTE6XHRcbjUyMTI6XHRcdGRvIHtcbjUyMTM6XHRcdFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuNTIxNDpcdFx0XHRcdHJldHVybiAtRUlOVFI7XG41MjE1Olx0XG41MjE2Olx0XHRcdGlmIChrdm1fdGVzdF9yZXF1ZXN0KEtWTV9SRVFfVk1fREVBRCwgdmNwdSkpXG41MjE3Olx0XHRcdFx0cmV0dXJuIC1FSU87XG41MjE4Olx0XG41MjE5Olx0XHRcdHIgPSBrdm1fbW11X3JlbG9hZCh2Y3B1KTtcbjUyMjA6XHRcdFx0aWYgKHIpXG41MjIxOlx0XHRcdFx0cmV0dXJuIHI7XG41MjIyOlx0XG41MjIzOlx0XHRcdHIgPSBtbXVfdG9wdXBfbWVtb3J5X2NhY2hlcyh2Y3B1LCBmYWxzZSk7XG41MjI0Olx0XHRcdGlmIChyKVxuNTIyNTpcdFx0XHRcdHJldHVybiByO1xuNTIyNjpcdFxuNTIyNzpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbjUyMjg6XHRcbjUyMjk6XHRcdFx0Z3VhcmQocmVhZF9sb2NrKShcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuNTIzMDpcdFxuNTIzMTpcdFx0XHQvKlxuNTIzMjpcdFx0XHQgKiBCZWNhdXNlIHNsb3RzX2xvY2sgaXMgaGVsZCwgaXQgc2hvdWxkIGJlIGltcG9zc2libGUgZm9yICphbnkqXG41MjMzOlx0XHRcdCAqIHJvb3RzIHRvIGJlIGludmFsaWRhdGVkIGFmdGVyIHRoZSBpbml0aWFsIE1NVSByZWxvYWQuICBXQVJOLFxuNTIzNDpcdFx0XHQgKiBidXQgY29udGludWUgb247IHRoZSBhYm92ZSBNTVUgcmVsb2FkIHdpbGwgZG8gdGhlIHJpZ2h0IHRoaW5nXG41MjM1Olx0XHRcdCAqIGlmIHRoZSBjdXJyZW50IHJvb3QgaXMgYWN0dWFsbHkgaW52YWxpZC5cbjUyMzY6XHRcdFx0ICovXG41MjM3Olx0XHRcdFdBUk5fT05fT05DRShrdm1fdGVzdF9yZXF1ZXN0KEtWTV9SRVFfTU1VX0ZSRUVfT0JTT0xFVEVfUk9PVFMsIHZjcHUpKTtcbjUyMzg6XHRcbjUyMzk6XHRcdFx0LypcbjUyNDA6XHRcdFx0ICogU25hcHNob3QgdGhlIGludmFsaWRhdGlvbiBzZXF1ZW5jZSBjb3VudGVyIGFmdGVyIGFjcXVpcmluZ1xuNTI0MTpcdFx0XHQgKiBtbXVfbG9jaywgYXMgZ3Vlc3RfbWVtZmQgZ3VhcmFudGVlcyB0aGUgdmFsaWRpdHkgb2YgdGhlIHBmbixcbjUyNDI6XHRcdFx0ICogaS5lLiBhbnkgY29uY3VycmVudCBpbnZhbGlkYXRpb25zIGFyZSBndWFyYW50ZWVkIHRvIGJlXG41MjQzOlx0XHRcdCAqIGlycmVsZXZhbnQuXG41MjQ0Olx0XHRcdCAqL1xuNTI0NTpcdFx0XHRmYXVsdC5tbXVfc2VxID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlbW11X2ludmFsaWRhdGVfc2VxO1xuNTI0NjpcdFx0XHRpZiAoaXNfcGFnZV9mYXVsdF9zdGFsZSh2Y3B1LCBcdTAwMjZmYXVsdCkpIHtcbjUyNDc6XHRcdFx0XHRyID0gUkVUX1BGX1JFVFJZO1xuNTI0ODpcdFx0XHRcdGNvbnRpbnVlO1xuNTI0OTpcdFx0XHR9XG41MjUwOlx0XG41MjUxOlx0XHRcdHIgPSBrdm1fdGRwX21tdV9tYXAodmNwdSwgXHUwMDI2ZmF1bHQpO1xuNTI1MjpcdFx0fSB3aGlsZSAociA9PSBSRVRfUEZfUkVUUlkpO1xuNTI1MzpcdFxuNTI1NDpcdFx0aWYgKHIgIT0gUkVUX1BGX0ZJWEVEKVxuNTI1NTpcdFx0XHRyZXR1cm4gLUVJTztcbjUyNTY6XHRcbjUyNTc6XHRcdHJldHVybiAwO1xuNTI1ODpcdH1cbjUyNTk6XHRFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKTtcbjUyNjA6XHQjZW5kaWZcbjUyNjE6XHRcbjUyNjI6XHRzdGF0aWMgdm9pZCBub25wYWdpbmdfaW5pdF9jb250ZXh0KHN0cnVjdCBrdm1fbW11ICpjb250ZXh0KVxuNTI2MzpcdHtcbjUyNjQ6XHRcdGNvbnRleHQtXHUwMDNlcGFnZV9mYXVsdCA9IG5vbnBhZ2luZ19wYWdlX2ZhdWx0O1xuNTI2NTpcdFx0Y29udGV4dC1cdTAwM2VzeW5jX3NwdGUgPSBOVUxMO1xuNTI2NjpcdH1cbjUyNjc6XHRcbjUyNjg6XHRzdGF0aWMgaW5saW5lIGJvb2wgaXNfcm9vdF91c2FibGUoc3RydWN0IGt2bV9tbXVfcm9vdF9pbmZvICpyb290LCBncGFfdCBwZ2QsXG41MjY5Olx0XHRcdFx0XHQgIHVuaW9uIGt2bV9tbXVfcGFnZV9yb2xlIHJvbGUpXG41MjcwOlx0e1xuNTI3MTpcdFx0c3RydWN0IGt2bV9tbXVfcGFnZSAqc3A7XG41MjcyOlx0XG41MjczOlx0XHRpZiAoIVZBTElEX1BBR0Uocm9vdC1cdTAwM2VocGEpKVxuNTI3NDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3ODkKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgSW5pdGlhbGl6YXRpb24gYW5kIFJlbG9hZCBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSB0aGF0IHRoZSBgZmF1bHRgIHZhcmlhYmxlIGdldHMgYSBmdWxsIGluaXRpYWxpemF0aW9uIHJpZ2h0IG9mZiB0aGUgYmF0IHdpdGggdGhlIGB7IC4uLiB9YC4gVGhhdCYjMzk7cyBnb29kLiBJdCBlbnN1cmVzIGFsbCB0aGUgZmllbGRzIGFyZSB6ZXJvZWQgb3V0LCBzbyB3ZSBkb24mIzM5O3QgaGF2ZSB0byB3b3JyeSBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBhdCB0aGF0IHBvaW50LiBNYWtlcyB0aGluZ3MgY2xlYW5lci4KClRoZSBwYXRjaCBpdHNlbGYgc2VlbXMgdG8gYmUgbW92aW5nIGBrdm1fbW11X3JlbG9hZGAgYW5kIGBtbXVfdG9wdXBfbWVtb3J5X2NhY2hlc2AgKmludG8qIHRoZSByZXRyeSBsb29wLiBBaGEsIEkgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nLiBUaGV5JiMzOTtyZSBkb2luZyB0aGlzIHRvIGFkZHJlc3MgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgYSBzY2VuYXJpbyB3aGVyZSBga3ZtX21tdV9yZWxvYWRgIG1pZ2h0IGFjdHVhbGx5IG5lZWQgdG8gYmUgcmUtZXhlY3V0ZWQgaWYgdGhlIGxvb3AgaGFzIHRvIHJldHJ5LiBJIGFncmVlIHdpdGggdGhhdCBhc3Nlc3NtZW50LiBJdCYjMzk7cyB0aGUgcmlnaHQgZml4IHRvIGVuc3VyZSBjb25zaXN0ZW5jeS4gR2l2ZW4gdGhhdCwgdGhlcmUmIzM5O3Mgbm8gd2F5IHdlIGNvdWxkIGhhdmUgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuCgpOb3csIGxldCBtZSBzaGlmdCBnZWFycyBhbmQgdGFrZSBhIGxvb2sgYXQgaG93IGBrdm1fdGRwX3BhZ2VfcHJlZmF1bHRgIGZpdHMgaW50byB0aGlzIHdob2xlIHBpY3R1cmUuIFRpbWUgdG8gZGlnIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvbW11LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MDQwOlx0XG41MDQxOlx0XHRyZXR1cm4gcjtcbjUwNDI6XHR9XG41MDQzOlx0XG41MDQ0Olx0XG41MDQ1Olx0c3RhdGljIGludCBrdm1fdGRwX3BhZ2VfcHJlZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsXG41MDQ2Olx0XHRcdFx0XHQgdTY0IGVycm9yX2NvZGUsIHU4ICpsZXZlbClcbjUwNDc6XHR7XG41MDQ4Olx0XHRpbnQgcjtcbjUwNDk6XHRcbjUwNTA6XHRcdC8qXG41MDUxOlx0XHQgKiBSZXN0cmljdCB0byBURFAgcGFnZSBmYXVsdCwgc2luY2UgdGhhdCYjMzk7cyB0aGUgb25seSBjYXNlIHdoZXJlIHRoZSBNTVVcbjUwNTI6XHRcdCAqIGlzIGluZGV4ZWQgYnkgR1BBLlxuNTA1MzpcdFx0ICovXG41MDU0Olx0XHRpZiAodmNwdS1cdTAwM2VhcmNoLm1tdS1cdTAwM2VwYWdlX2ZhdWx0ICE9IGt2bV90ZHBfcGFnZV9mYXVsdClcbjUwNTU6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuNTA1NjpcdFxuNTA1NzpcdFx0ZG8ge1xuNTA1ODpcdFx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG41MDU5Olx0XHRcdFx0cmV0dXJuIC1FSU5UUjtcbjUwNjA6XHRcbjUwNjE6XHRcdFx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfVk1fREVBRCwgdmNwdSkpXG41MDYyOlx0XHRcdFx0cmV0dXJuIC1FSU87XG41MDYzOlx0XG41MDY0Olx0XHRcdHIgPSBrdm1fbW11X3JlbG9hZCh2Y3B1KTtcbjUwNjU6XHRcdFx0aWYgKHIpXG41MDY2Olx0XHRcdFx0cmV0dXJuIHI7XG41MDY3Olx0XG41MDY4Olx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuNTA2OTpcdFx0XHRyID0ga3ZtX21tdV9kb19wYWdlX2ZhdWx0KHZjcHUsIGdwYSwgZXJyb3JfY29kZSwgdHJ1ZSwgTlVMTCwgbGV2ZWwpO1xuNTA3MDpcdFx0fSB3aGlsZSAociA9PSBSRVRfUEZfUkVUUlkpO1xuNTA3MTpcdFxuNTA3MjpcdFx0aWYgKHIgXHUwMDNjIDApXG41MDczOlx0XHRcdHJldHVybiByO1xuNTA3NDpcdFxuNTA3NTpcdFx0c3dpdGNoIChyKSB7XG41MDc2Olx0XHRjYXNlIFJFVF9QRl9GSVhFRDpcbjUwNzc6XHRcdGNhc2UgUkVUX1BGX1NQVVJJT1VTOlxuNTA3ODpcdFx0Y2FzZSBSRVRfUEZfV1JJVEVfUFJPVEVDVEVEOlxuNTA3OTpcdFx0XHRyZXR1cm4gMDtcbjUwODA6XHRcbjUwODE6XHRcdGNhc2UgUkVUX1BGX0VNVUxBVEU6XG41MDgyOlx0XHRcdHJldHVybiAtRU5PRU5UO1xuNTA4MzpcdFxuNTA4NDpcdFx0Y2FzZSBSRVRfUEZfUkVUUlk6XG41MDg1Olx0XHRjYXNlIFJFVF9QRl9DT05USU5VRTpcbjUwODY6XHRcdGNhc2UgUkVUX1BGX0lOVkFMSUQ6XG41MDg3Olx0XHRkZWZhdWx0OlxuNTA4ODpcdFx0XHRXQVJOX09OQ0UoMSwgXCYjMzQ7Y291bGQgbm90IGZpeCBwYWdlIGZhdWx0IGR1cmluZyBwcmVmYXVsdFwmIzM0Oyk7XG41MDg5Olx0XHRcdHJldHVybiAtRUlPO1xuNTA5MDpcdFx0fVxuNTA5MTpcdH1cbjUwOTI6XHRcbjUwOTM6XHRsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG41MDk0Olx0XHRcdFx0XHQgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSlcbjUwOTU6XHR7XG41MDk2Olx0XHR1NjQgZXJyb3JfY29kZSA9IFBGRVJSX0dVRVNUX0ZJTkFMX01BU0s7XG41MDk3Olx0XHR1OCBsZXZlbCA9IFBHX0xFVkVMXzRLO1xuNTA5ODpcdFx0dTY0IGRpcmVjdF9iaXRzO1xuNTA5OTpcdFx0dTY0IGVuZDtcbjUxMDA6XHRcdGludCByO1xuNTEwMTpcdFxuNTEwMjpcdFx0aWYgKCF2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnByZV9mYXVsdF9hbGxvd2VkKVxuNTEwMzpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG41MTA0Olx0XG41MTA1Olx0XHRpZiAoa3ZtX2lzX2dmbl9hbGlhcyh2Y3B1LVx1MDAzZWt2bSwgZ3BhX3RvX2dmbihyYW5nZS1cdTAwM2VncGEpKSlcbjUxMDY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG41MTA3Olx0XG41MTA4Olx0XHRkaXJlY3RfYml0cyA9IDA7XG41MTA5Olx0XHRpZiAoa3ZtX2FyY2hfaGFzX3ByaXZhdGVfbWVtKHZjcHUtXHUwMDNla3ZtKSBcdTAwMjZcdTAwMjZcbjUxMTA6XHRcdCAgICBrdm1fbWVtX2lzX3ByaXZhdGUodmNwdS1cdTAwM2Vrdm0sIGdwYV90b19nZm4ocmFuZ2UtXHUwMDNlZ3BhKSkpXG41MTExOlx0XHRcdGVycm9yX2NvZGUgfD0gUEZFUlJfUFJJVkFURV9BQ0NFU1M7XG41MTEyOlx0XHRlbHNlXG41MTEzOlx0XHRcdGRpcmVjdF9iaXRzID0gZ2ZuX3RvX2dwYShrdm1fZ2ZuX2RpcmVjdF9iaXRzKHZjcHUtXHUwMDNla3ZtKSk7XG41MTE0Olx0XG41MTE1Olx0XHQvKlxuNTExNjpcdFx0ICogU2hhZG93IHBhZ2luZyB1c2VzIEdWQSBmb3Iga3ZtIHBhZ2UgZmF1bHQsIHNvIHJlc3RyaWN0IHRvXG41MTE3Olx0XHQgKiB0d28tZGltZW5zaW9uYWwgcGFnaW5nLlxuNTExODpcdFx0ICovXG41MTE5Olx0XHRyID0ga3ZtX3RkcF9wYWdlX3ByZWZhdWx0KHZjcHUsIHJhbmdlLVx1MDAzZWdwYSB8IGRpcmVjdF9iaXRzLCBlcnJvcl9jb2RlLCBcdTAwMjZsZXZlbCk7XG41MTIwOlx0XHRpZiAociBcdTAwM2MgMClcbjUxMjE6XHRcdFx0cmV0dXJuIHI7XG41MTIyOlx0XG41MTIzOlx0XHQvKlxuNTEyNDpcdFx0ICogSWYgdGhlIG1hcHBpbmcgdGhhdCBjb3ZlcnMgcmFuZ2UtXHUwMDNlZ3BhIGNhbiB1c2UgYSBodWdlIHBhZ2UsIGl0XG41MTI1Olx0XHQgKiBtYXkgc3RhcnQgYmVsb3cgaXQgb3IgZW5kIGFmdGVyIHJhbmdlLVx1MDAzZWdwYSAmIzQzOyByYW5nZS1cdTAwM2VzaXplLlxuNTEyNjpcdFx0ICovXG41MTI3Olx0XHRlbmQgPSAocmFuZ2UtXHUwMDNlZ3BhIFx1MDAyNiBLVk1fSFBBR0VfTUFTSyhsZXZlbCkpICYjNDM7IEtWTV9IUEFHRV9TSVpFKGxldmVsKTtcbjUxMjg6XHRcdHJldHVybiBtaW4ocmFuZ2UtXHUwMDNlc2l6ZSwgZW5kIC0gcmFuZ2UtXHUwMDNlZ3BhKTtcbjUxMjk6XHR9XG41MTMwOlx0XG41MTMxOlx0dm9pZCBrdm1fYXJjaF9hc3luY19wYWdlX3JlYWR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9hc3luY19wZiAqd29yaylcbjUxMzI6XHR7XG41MTMzOlx0XHRpbnQgcjtcbjUxMzQ6XHRcbjUxMzU6XHRcdGlmIChXQVJOX09OX09OQ0Uod29yay1cdTAwM2VhcmNoLmVycm9yX2NvZGUgXHUwMDI2IFBGRVJSX1BSSVZBVEVfQUNDRVNTKSlcbjUxMzY6XHRcdFx0cmV0dXJuO1xuNTEzNzpcdFxuNTEzODpcdFx0aWYgKCh2Y3B1LVx1MDAzZWFyY2gubW11LVx1MDAzZXJvb3Rfcm9sZS5kaXJlY3QgIT0gd29yay1cdTAwM2VhcmNoLmRpcmVjdF9tYXApIHx8XG41MTM5Olx0XHQgICAgICB3b3JrLVx1MDAzZXdha2V1cF9hbGwpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2OTkKCQkJCQkJCW91dHB1dDogMTY0CgkJCQkJCQl0aG91Z2h0czogMjQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBLVk0gTU1VIFJlbG9hZCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGZpeGluZyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBpbiBga3ZtX21tdV9yZWxvYWRgLiBUaGUgY29yZSBpc3N1ZSBpcyB0aGF0IGBrdm1fbW11X3JlbG9hZGAgd2FzIGJlaW5nIGNhbGxlZCBvdXRzaWRlIHRoZSByZXRyeSBsb29wLCB3aGljaCwgaWYgdGhlIGxvb3AgcmV0cmllZCwgY291bGQgcmVzdWx0IGluIHRoZSBsb29wIHVzaW5nIGFuIG91dGRhdGVkIE1NVSByb290IG9yIHBvdGVudGlhbGx5IGFuIGludmFsaWQgc3RhdGUuIEkgaW5pdGlhbGx5IHRob3VnaHQgdGhlcmUgbWlnaHQgYmUgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUsIGJ1dCBhZnRlciB0aGlua2luZyBhYm91dCBpdCwgdGhhdCYjMzk7cyBub3QgdGhlIGNhc2UuIGBrdm1fbW11X3JlbG9hZGAgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdXAgdGhlIE1NVSByb290LCBzbyB0aGUgcHJvYmxlbSBpcyB0aGF0IGlmIGl0JiMzOTtzICpub3QqIGNhbGxlZCB3aXRoaW4gdGhlIGxvb3AgYW5kIHRoZSByb290IGJlY29tZXMgb2Jzb2xldGUgZHVlIHRvIGFuIGludmFsaWRhdGlvbiBkdXJpbmcgdGhlIGxvb3AsIHdlIGNvdWxkIGhhdmUgYSByZXRyeSB0aGF0JiMzOTtzIG9wZXJhdGluZyBvbiBzdGFsZSBkYXRhLiBUaGUgcmVzdWx0aW5nIGJlaGF2aW9yIGlzIGEgbG9naWMgYnVnIHRoYXQgY291bGQgbGVhZCB0byBuYXN0eSBpc3N1ZXMg4oCTIHVzZS1hZnRlci1mcmVlLCBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSwgb3IgcG9zc2libHkgYW4gaW5maW5pdGUgbG9vcC4gQnV0IGRlZmluaXRlbHkgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKSSB0aGVuIGhhZCB0byBkb3VibGUgY2hlY2sgYWJvdXQgdGhlIGBmYXVsdGAgc3RydWN0IHRvIHNlZSBpZiB0aGUgcGF0Y2ggaW50cm9kdWNlZCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEJ1dCwgbm8sIGBzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQgZmF1bHQgPSB7IC4uLiB9O2AgbWVhbnMgdGhhdCBhbnkgbWlzc2luZyBmaWVsZHMgaW4gdGhlIGluaXRpYWxpemVyIGxpc3QgYXJlIHplcm8taW5pdGlhbGl6ZWQuIFNvLCBpdCYjMzk7cyBmdWxseSBpbml0aWFsaXplZC4KClRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBuZWVkIEtNU0FOLiBJdCBzaG91bGQgYmUgZGV0ZWN0YWJsZSBieSBLQVNBTi9MT0NLREVQL3N0YW5kYXJkIHRlc3Rpbmcgb3Igd291bGQgaGF2ZSBiZWVuIGZvdW5kIGluIHRlc3RpbmcgdGhhdCBmaXhlZCBhIGtub3duIGJ1Zy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgTU1VIHJlbG9hZCBhbmQgY2FjaGUgdG9wLXVwIGZ1bmN0aW9ucyBpbnNpZGUgdGhlIHJldHJ5IGxvb3BzIGZvciBLVk0gcGFnZSBmYXVsdCBoYW5kbGluZyAoYGt2bV90ZHBfcGFnZV9wcmVmYXVsdGAgYW5kIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gKS4gVGhpcyBmaXhlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBhIGNvbmN1cnJlbnQgaW52YWxpZGF0aW9uIGNvdWxkIGNhdXNlIHRoZSBsb29wIHRvIHJldHJ5IHdpdGhvdXQgcmVsb2FkaW5nIHRoZSBNTVUgcm9vdCwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBhbiBvYnNvbGV0ZSByb290IGJlaW5nIHVzZWQuIFRoZSBgZmF1bHRgIHN0cnVjdHVyZSBpcyBmdWxseSB6ZXJvLWluaXRpYWxpemVkIGZvciBhbnkgdW5zcGVjaWZpZWQgZmllbGRzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBwYXRjaC4gQW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBhcmlzaW5nIGZyb20gb2Jzb2xldGUgcm9vdHMgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgTU1VIHJlbG9hZCBhbmQgY2FjaGUgdG9wLXVwIGZ1bmN0aW9ucyBpbnNpZGUgdGhlIHJldHJ5IGxvb3BzIGZvciBLVk0gcGFnZSBmYXVsdCBoYW5kbGluZyAoYGt2bV90ZHBfcGFnZV9wcmVmYXVsdGAgYW5kIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gKS4gVGhpcyBmaXhlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBhIGNvbmN1cnJlbnQgaW52YWxpZGF0aW9uIGNvdWxkIGNhdXNlIHRoZSBsb29wIHRvIHJldHJ5IHdpdGhvdXQgcmVsb2FkaW5nIHRoZSBNTVUgcm9vdCwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBhbiBvYnNvbGV0ZSByb290IGJlaW5nIHVzZWQuIFRoZSBgZmF1bHRgIHN0cnVjdHVyZSBpcyBmdWxseSB6ZXJvLWluaXRpYWxpemVkIGZvciBhbnkgdW5zcGVjaWZpZWQgZmllbGRzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBwYXRjaC4gQW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBhcmlzaW5nIGZyb20gb2Jzb2xldGUgcm9vdHMgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjo1Mzo0MS44Njk4OTgzNDVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTg1MTIxMzM4MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5XCIsXG4gICAgXCJrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIE1NVSByZWxvYWQgYW5kIGNhY2hlIHRvcC11cCBmdW5jdGlvbnMgaW5zaWRlIHRoZSByZXRyeSBsb29wcyBmb3IgS1ZNIHBhZ2UgZmF1bHQgaGFuZGxpbmcgKGBrdm1fdGRwX3BhZ2VfcHJlZmF1bHRgIGFuZCBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYCkuIFRoaXMgZml4ZXMgYSBsb2dpYyBidWcgd2hlcmUgYSBjb25jdXJyZW50IGludmFsaWRhdGlvbiBjb3VsZCBjYXVzZSB0aGUgbG9vcCB0byByZXRyeSB3aXRob3V0IHJlbG9hZGluZyB0aGUgTU1VIHJvb3QsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYW4gb2Jzb2xldGUgcm9vdCBiZWluZyB1c2VkLiBUaGUgYGZhdWx0YCBzdHJ1Y3R1cmUgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZCBmb3IgYW55IHVuc3BlY2lmaWVkIGZpZWxkcy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgcGF0Y2guIEFueSBtZW1vcnkgY29ycnVwdGlvbiBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgYXJpc2luZyBmcm9tIG9ic29sZXRlIHJvb3RzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0gTU1VIHBhZ2UgZmF1bHQgaGFuZGxpbmcsIHNwZWNpZmljYWxseSBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBhbmQgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAuIEl0IG1vdmVzIE1NVSByZWxvYWQgYW5kIGNhY2hlIHRvcC11cCBvcGVyYXRpb25zIGluc2lkZSB0aGUgcmV0cnkgbG9vcCB0byBoYW5kbGUgY29uY3VycmVudCBpbnZhbGlkYXRpb25zIGNvcnJlY3RseS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIEtWTSBNTVUgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjUzOjQxLjg2OTkwMzkxNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYwMTU0ODc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNGRiMDZkYTRkMDFjMDI3M2FmNzhkN2M4NDRhMGNkMGI3ODYzNTkwZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxNjo1Mzo0MCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xcbmluZGV4IDA2NGVjYzMzYjkyNjcuLjc5YzQ1MGQ2NzdiNDAgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcXG5AQCAtNTA2MSw2ICs1MDYxLDEwIEBAIHN0YXRpYyBpbnQga3ZtX3RkcF9wYWdlX3ByZWZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLFxcbiBcXHRcXHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9WTV9ERUFELCB2Y3B1KSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcbitcXHRcXHRyID0ga3ZtX21tdV9yZWxvYWQodmNwdSk7XFxuK1xcdFxcdGlmIChyKVxcbitcXHRcXHRcXHRyZXR1cm4gcjtcXG4rXFxuIFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbiBcXHRcXHRyID0ga3ZtX21tdV9kb19wYWdlX2ZhdWx0KHZjcHUsIGdwYSwgZXJyb3JfY29kZSwgdHJ1ZSwgTlVMTCwgbGV2ZWwpO1xcbiBcXHR9IHdoaWxlIChyID09IFJFVF9QRl9SRVRSWSk7XFxuQEAgLTUxMDEsMTQgKzUxMDUsNiBAQCBsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIFxcdGlmIChrdm1faXNfZ2ZuX2FsaWFzKHZjcHUtXFx1MDAzZWt2bSwgZ3BhX3RvX2dmbihyYW5nZS1cXHUwMDNlZ3BhKSkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0LypcXG4tXFx0ICogcmVsb2FkIGlzIGVmZmljaWVudCB3aGVuIGNhbGxlZCByZXBlYXRlZGx5LCBzbyB3ZSBjYW4gZG8gaXQgb25cXG4tXFx0ICogZXZlcnkgaXRlcmF0aW9uLlxcbi1cXHQgKi9cXG4tXFx0ciA9IGt2bV9tbXVfcmVsb2FkKHZjcHUpO1xcbi1cXHRpZiAocilcXG4tXFx0XFx0cmV0dXJuIHI7XFxuLVxcbiBcXHRkaXJlY3RfYml0cyA9IDA7XFxuIFxcdGlmIChrdm1fYXJjaF9oYXNfcHJpdmF0ZV9tZW0odmNwdS1cXHUwMDNla3ZtKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAga3ZtX21lbV9pc19wcml2YXRlKHZjcHUtXFx1MDAzZWt2bSwgZ3BhX3RvX2dmbihyYW5nZS1cXHUwMDNlZ3BhKSkpXFxuQEAgLTUyMTMsMTQgKzUyMDksNiBAQCBpbnQga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuKVxcbiBcXHRpZiAoa3ZtX2dmbl9pc193cml0ZV90cmFja2VkKGt2bSwgZmF1bHQuc2xvdCwgZmF1bHQuZ2ZuKSlcXG4gXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gXFxuLVxcdHIgPSBrdm1fbW11X3JlbG9hZCh2Y3B1KTtcXG4tXFx0aWYgKHIpXFxuLVxcdFxcdHJldHVybiByO1xcbi1cXG4tXFx0ciA9IG1tdV90b3B1cF9tZW1vcnlfY2FjaGVzKHZjcHUsIGZhbHNlKTtcXG4tXFx0aWYgKHIpXFxuLVxcdFxcdHJldHVybiByO1xcbi1cXG4gXFx0ZG8ge1xcbiBcXHRcXHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVFI7XFxuQEAgLTUyMjgsMTAgKzUyMTYsMzggQEAgaW50IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbilcXG4gXFx0XFx0aWYgKGt2bV90ZXN0X3JlcXVlc3QoS1ZNX1JFUV9WTV9ERUFELCB2Y3B1KSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcbitcXHRcXHRyID0ga3ZtX21tdV9yZWxvYWQodmNwdSk7XFxuK1xcdFxcdGlmIChyKVxcbitcXHRcXHRcXHRyZXR1cm4gcjtcXG4rXFxuK1xcdFxcdHIgPSBtbXVfdG9wdXBfbWVtb3J5X2NhY2hlcyh2Y3B1LCBmYWxzZSk7XFxuK1xcdFxcdGlmIChyKVxcbitcXHRcXHRcXHRyZXR1cm4gcjtcXG4rXFxuIFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbiBcXG4gXFx0XFx0Z3VhcmQocmVhZF9sb2NrKShcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuIFxcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBCZWNhdXNlIHNsb3RzX2xvY2sgaXMgaGVsZCwgaXQgc2hvdWxkIGJlIGltcG9zc2libGUgZm9yICphbnkqXFxuK1xcdFxcdCAqIHJvb3RzIHRvIGJlIGludmFsaWRhdGVkIGFmdGVyIHRoZSBpbml0aWFsIE1NVSByZWxvYWQuICBXQVJOLFxcbitcXHRcXHQgKiBidXQgY29udGludWUgb247IHRoZSBhYm92ZSBNTVUgcmVsb2FkIHdpbGwgZG8gdGhlIHJpZ2h0IHRoaW5nXFxuK1xcdFxcdCAqIGlmIHRoZSBjdXJyZW50IHJvb3QgaXMgYWN0dWFsbHkgaW52YWxpZC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdFdBUk5fT05fT05DRShrdm1fdGVzdF9yZXF1ZXN0KEtWTV9SRVFfTU1VX0ZSRUVfT0JTT0xFVEVfUk9PVFMsIHZjcHUpKTtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFNuYXBzaG90IHRoZSBpbnZhbGlkYXRpb24gc2VxdWVuY2UgY291bnRlciBhZnRlciBhY3F1aXJpbmdcXG4rXFx0XFx0ICogbW11X2xvY2ssIGFzIGd1ZXN0X21lbWZkIGd1YXJhbnRlZXMgdGhlIHZhbGlkaXR5IG9mIHRoZSBwZm4sXFxuK1xcdFxcdCAqIGkuZS4gYW55IGNvbmN1cnJlbnQgaW52YWxpZGF0aW9ucyBhcmUgZ3VhcmFudGVlZCB0byBiZVxcbitcXHRcXHQgKiBpcnJlbGV2YW50LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0ZmF1bHQubW11X3NlcSA9IHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlbW11X2ludmFsaWRhdGVfc2VxO1xcbitcXHRcXHRpZiAoaXNfcGFnZV9mYXVsdF9zdGFsZSh2Y3B1LCBcXHUwMDI2ZmF1bHQpKSB7XFxuK1xcdFxcdFxcdHIgPSBSRVRfUEZfUkVUUlk7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRyID0ga3ZtX3RkcF9tbXVfbWFwKHZjcHUsIFxcdTAwMjZmYXVsdCk7XFxuIFxcdH0gd2hpbGUgKHIgPT0gUkVUX1BGX1JFVFJZKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjUzOjQyLjMzMTAwNDU4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTg3MDk1ODgwMTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeVwiLFxuICAgIFwia3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIE1NVSBwYWdlIGZhdWx0IGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgYW5kIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gLiBJdCBtb3ZlcyBNTVUgcmVsb2FkIGFuZCBjYWNoZSB0b3AtdXAgb3BlcmF0aW9ucyBpbnNpZGUgdGhlIHJldHJ5IGxvb3AgdG8gaGFuZGxlIGNvbmN1cnJlbnQgaW52YWxpZGF0aW9ucyBjb3JyZWN0bHkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBLVk0gTU1VIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0ZGIwNmRhNGQwMWMwMjczYWY3OGQ3Yzg0NGEwY2QwYjc4NjM1OTBmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTY6NTM6NDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuaW5kZXggMDY0ZWNjMzNiOTI2Ny4uNzljNDUwZDY3N2I0MCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbkBAIC01MDYxLDYgKzUwNjEsMTAgQEAgc3RhdGljIGludCBrdm1fdGRwX3BhZ2VfcHJlZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsXG4gXHRcdGlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX1ZNX0RFQUQsIHZjcHUpKVxuIFx0XHRcdHJldHVybiAtRUlPO1xuIFxuK1x0XHRyID0ga3ZtX21tdV9yZWxvYWQodmNwdSk7XG4rXHRcdGlmIChyKVxuK1x0XHRcdHJldHVybiByO1xuK1xuIFx0XHRjb25kX3Jlc2NoZWQoKTtcbiBcdFx0ciA9IGt2bV9tbXVfZG9fcGFnZV9mYXVsdCh2Y3B1LCBncGEsIGVycm9yX2NvZGUsIHRydWUsIE5VTEwsIGxldmVsKTtcbiBcdH0gd2hpbGUgKHIgPT0gUkVUX1BGX1JFVFJZKTtcbkBAIC01MTAxLDE0ICs1MTA1LDYgQEAgbG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0aWYgKGt2bV9pc19nZm5fYWxpYXModmNwdS1cdTAwM2Vrdm0sIGdwYV90b19nZm4ocmFuZ2UtXHUwMDNlZ3BhKSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0Lypcbi1cdCAqIHJlbG9hZCBpcyBlZmZpY2llbnQgd2hlbiBjYWxsZWQgcmVwZWF0ZWRseSwgc28gd2UgY2FuIGRvIGl0IG9uXG4tXHQgKiBldmVyeSBpdGVyYXRpb24uXG4tXHQgKi9cbi1cdHIgPSBrdm1fbW11X3JlbG9hZCh2Y3B1KTtcbi1cdGlmIChyKVxuLVx0XHRyZXR1cm4gcjtcbi1cbiBcdGRpcmVjdF9iaXRzID0gMDtcbiBcdGlmIChrdm1fYXJjaF9oYXNfcHJpdmF0ZV9tZW0odmNwdS1cdTAwM2Vrdm0pIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGt2bV9tZW1faXNfcHJpdmF0ZSh2Y3B1LVx1MDAzZWt2bSwgZ3BhX3RvX2dmbihyYW5nZS1cdTAwM2VncGEpKSlcbkBAIC01MjEzLDE0ICs1MjA5LDYgQEAgaW50IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbilcbiBcdGlmIChrdm1fZ2ZuX2lzX3dyaXRlX3RyYWNrZWQoa3ZtLCBmYXVsdC5zbG90LCBmYXVsdC5nZm4pKVxuIFx0XHRyZXR1cm4gLUVQRVJNO1xuIFxuLVx0ciA9IGt2bV9tbXVfcmVsb2FkKHZjcHUpO1xuLVx0aWYgKHIpXG4tXHRcdHJldHVybiByO1xuLVxuLVx0ciA9IG1tdV90b3B1cF9tZW1vcnlfY2FjaGVzKHZjcHUsIGZhbHNlKTtcbi1cdGlmIChyKVxuLVx0XHRyZXR1cm4gcjtcbi1cbiBcdGRvIHtcbiBcdFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuIFx0XHRcdHJldHVybiAtRUlOVFI7XG5AQCAtNTIyOCwxMCArNTIxNiwzOCBAQCBpbnQga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuKVxuIFx0XHRpZiAoa3ZtX3Rlc3RfcmVxdWVzdChLVk1fUkVRX1ZNX0RFQUQsIHZjcHUpKVxuIFx0XHRcdHJldHVybiAtRUlPO1xuIFxuK1x0XHRyID0ga3ZtX21tdV9yZWxvYWQodmNwdSk7XG4rXHRcdGlmIChyKVxuK1x0XHRcdHJldHVybiByO1xuK1xuK1x0XHRyID0gbW11X3RvcHVwX21lbW9yeV9jYWNoZXModmNwdSwgZmFsc2UpO1xuK1x0XHRpZiAocilcbitcdFx0XHRyZXR1cm4gcjtcbitcbiBcdFx0Y29uZF9yZXNjaGVkKCk7XG4gXG4gXHRcdGd1YXJkKHJlYWRfbG9jaykoXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbiBcbitcdFx0LypcbitcdFx0ICogQmVjYXVzZSBzbG90c19sb2NrIGlzIGhlbGQsIGl0IHNob3VsZCBiZSBpbXBvc3NpYmxlIGZvciAqYW55KlxuK1x0XHQgKiByb290cyB0byBiZSBpbnZhbGlkYXRlZCBhZnRlciB0aGUgaW5pdGlhbCBNTVUgcmVsb2FkLiAgV0FSTixcbitcdFx0ICogYnV0IGNvbnRpbnVlIG9uOyB0aGUgYWJvdmUgTU1VIHJlbG9hZCB3aWxsIGRvIHRoZSByaWdodCB0aGluZ1xuK1x0XHQgKiBpZiB0aGUgY3VycmVudCByb290IGlzIGFjdHVhbGx5IGludmFsaWQuXG4rXHRcdCAqL1xuK1x0XHRXQVJOX09OX09OQ0Uoa3ZtX3Rlc3RfcmVxdWVzdChLVk1fUkVRX01NVV9GUkVFX09CU09MRVRFX1JPT1RTLCB2Y3B1KSk7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIFNuYXBzaG90IHRoZSBpbnZhbGlkYXRpb24gc2VxdWVuY2UgY291bnRlciBhZnRlciBhY3F1aXJpbmdcbitcdFx0ICogbW11X2xvY2ssIGFzIGd1ZXN0X21lbWZkIGd1YXJhbnRlZXMgdGhlIHZhbGlkaXR5IG9mIHRoZSBwZm4sXG4rXHRcdCAqIGkuZS4gYW55IGNvbmN1cnJlbnQgaW52YWxpZGF0aW9ucyBhcmUgZ3VhcmFudGVlZCB0byBiZVxuK1x0XHQgKiBpcnJlbGV2YW50LlxuK1x0XHQgKi9cbitcdFx0ZmF1bHQubW11X3NlcSA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZW1tdV9pbnZhbGlkYXRlX3NlcTtcbitcdFx0aWYgKGlzX3BhZ2VfZmF1bHRfc3RhbGUodmNwdSwgXHUwMDI2ZmF1bHQpKSB7XG4rXHRcdFx0ciA9IFJFVF9QRl9SRVRSWTtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuIFx0XHRyID0ga3ZtX3RkcF9tbXVfbWFwKHZjcHUsIFx1MDAyNmZhdWx0KTtcbiBcdH0gd2hpbGUgKHIgPT0gUkVUX1BGX1JFVFJZKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjUzOjQyLjMzMTAwNjcyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njk0MTQ5NzI1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLVk0gTU1VIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgZGl2aW5nIGludG8gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLCB3aGljaCBhbHdheXMgcGlxdWVzIG15IGludGVyZXN0LiBJdCBzZWVtcyB0byBiZSB0b3VjaGluZyBzZXZlcmFsIGtleSBmdW5jdGlvbnM6IGBrdm1fdGRwX3BhZ2VfcHJlZmF1bHRgLCBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCwgYW5kIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGxvb2tzIGxpa2UgbW92aW5nIGBrdm1fbW11X3JlbG9hZCh2Y3B1KWAgaW5zaWRlIHRoZSByZXRyeSBsb29wIHdpdGhpbiBga3ZtX3RkcF9wYWdlX3ByZWZhdWx0YCBhbmQgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAuIFRoYXQncyBhIHNpZ25pZmljYW50IGFsdGVyYXRpb24sIGluZGljYXRpbmcgYSBwb3RlbnRpYWwgcmVmaW5lbWVudCBpbiBob3cgdGhlIE1NVSBoYW5kbGVzIHBhZ2UgZmF1bHRzLiBBZGRpbmcgYG1tdV90b3B1cF9tZW1vcnlfY2FjaGVzYCBpbnNpZGUgdGhhdCBzYW1lIGxvb3AgaW4gYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAgc3VnZ2VzdHMgc29tZSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gb3IgY2FjaGUgbWFuYWdlbWVudCBpcyBoYXBwZW5pbmcgZHVyaW5nIGZhdWx0IGhhbmRsaW5nLiBQbHVzLCB0aGVyZSdzIGEgbmV3IGBpc19wYWdlX2ZhdWx0X3N0YWxlKHZjcHUsIFx1MDAyNmZhdWx0KWAgY2hlY2sgYmVpbmcgaW50cm9kdWNlZCwgd2hpY2ggcHJvYmFibHkgZGVhbHMgd2l0aCByZWR1bmRhbnQgb3Igb3V0ZGF0ZWQgcGFnZSBmYXVsdCBpbmZvcm1hdGlvbi5cblxuRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgY2hhbmdlIHRvIHRoZSBLVk0gTU1VLiBHaXZlbiB0aGUgbmF0dXJlIG9mIHRoZXNlIG1vZGlmaWNhdGlvbnMsIGl0J3MgZGVmaW5pdGVseSB3b3J0aCBnaXZpbmcgdGhpcyBwYXRjaCBhIHRob3JvdWdoIGZ1enppbmcuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBmb2N1cyBvbiBzcGVjaWZpYyBzeW1ib2xzLiBJIHN1c3BlY3QgYGt2bV90ZHBfcGFnZV9wcmVmYXVsdGAgbWlnaHQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBhbHRob3VnaCBiZWluZyBzdGF0aWMgY291bGQgbWFrZSBpdCBsZXNzIG9mIGEgZGlyZWN0IHRhcmdldCBmb3IgZnV6emluZy4gSG93ZXZlciwgYm90aCBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBhbmQgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAgYXJlIGV4cG9ydGVkIGFuZCB0aGVyZWZvcmUgdmVyeSBpbnRlcmVzdGluZy5cblxuVGltZSB0byBkZWx2ZSBpbnRvIGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYCBhbmQgZGlnIGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk0MywiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjUzOjQ5LjI3MjUwNjUzMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODQ4NTk4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL21tdS9tbXUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jPTUwNDU9c3RhdGljIGludCBrdm1fdGRwX3BhZ2VfcHJlZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUwOTItXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MDkzOmxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUwOTQtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjUzOjQ5LjM3MDk5NjQ0NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1MzExNDM4NjkyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gKipcblxuT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSB3b3JraW5ncyBvZiBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYC4gSXQncyBiZWVuIGEgd2hpbGUgc2luY2UgSSBkdWcgZGVlcCBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBURFAgTU1VLiBJIGtub3cgdGhpcyBmdW5jdGlvbiBpcyBjcnVjaWFsIGZvciBoYW5kbGluZyBwcml2YXRlIHBhZ2UgZnJhbWUgbnVtYmVycyB3aXRoaW4gdGhlIEtWTSBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgaGFwcGVucyBoZXJlIHdoZW4gd2UncmUgZGVhbGluZyB3aXRoIGEgcHJpdmF0ZSBQRk4gYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgc2hhZG93IHBhZ2UgdGFibGVzLiBXaGF0IHNwZWNpZmljIG1hcHBpbmdzIGFyZSBiZWluZyBlc3RhYmxpc2hlZCBvciBtb2RpZmllZD8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBkaXJlY3QgbWFwcGluZywgYSBzaGFkb3cgbWFwcGluZywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEkgc2hvdWxkIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gYW55IHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIHVzZWQgd2l0aGluIHRoaXMgZnVuY3Rpb24gYmVjYXVzZSB0aGV5IGFyZSBjcml0aWNhbCBmb3IgZW5zdXJpbmcgZGF0YSBpbnRlZ3JpdHkgYW5kIGF2b2lkaW5nIHJhY2UgY29uZGl0aW9ucywgZXNwZWNpYWxseSBjb25zaWRlcmluZyBpdHMgcm9sZSBpbiB0aGUgY3JpdGljYWwgcGF0aCBvZiBtZW1vcnkgYWNjZXNzLiBJcyB0aGVyZSBhbnl0aGluZyB1bnVzdWFsIGFib3V0IHRoZSBoYW5kbGluZyBvZiB0aGUgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSBpbiB0aGlzIHBhcnRpY3VsYXIgY29udGV4dCwgbGlrZSBzcGVjaWFsIGNvbnNpZGVyYXRpb25zIGZvciBodWdlIHBhZ2VzIG9yIG5lc3RlZCB2aXJ0dWFsaXphdGlvbj8gSSB3aWxsIG5lZWQgdG8gbG9vayB1cCBzb21lIGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIGxpa2UgYGt2bV9tbXVfcGFnZWAgYW5kIGl0cyByZWxhdGlvbiB0byB0aGUgYWN0dWFsIHBoeXNpY2FsIHBhZ2VzIHRvIGRldGVybWluZSBob3cgZXhhY3RseSB0aGUgZnVuY3Rpb24gaXMgZG9pbmcgaXRzIG1hcHBpbmcuIEkgc2hvdWxkIGFsc28gY2hlY2sgaWYgYW55IHJlY2VudCBwYXRjaGVzIGhhdmUgYWx0ZXJlZCBpdHMgYmVoYXZpb3IsIGFzIHRoaXMgYXJlYSBpcyBvZnRlbiBhIHBvaW50IG9mIG9uZ29pbmcgZGV2ZWxvcG1lbnQgYW5kIG9wdGltaXphdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkwNSwiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjAzOjAyLjQ4NTM4NTk1OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjU3NTI1NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9tbXUvbW11LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL21tdS9tbXUuYz01MTYzPXN0YXRpYyB2b2lkIGt2bV9hc3NlcnRfZ21lbV9pbnZhbGlkYXRlX2xvY2tfaGVsZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MTc0LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTE3NTppbnQga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuKVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTE3Ni17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUyNTgtfVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTI1OTpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUyNjAtI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjAzOjAyLjk1MTE0Mjg2M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0Mzc1NDg5MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIE1lbW9yeSBGYXVsdCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSB0YWtpbmcgYSBsb29rIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgc29tZXRoaW5nIGludGVyZXN0aW5nLiBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YC4uLiB0aGF0J3Mgbm90IHN0YXRpYy4gQW5kIG5laXRoZXIgaXMgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAuIFRoYXQncyBhIGtleSBvYnNlcnZhdGlvbiwgcmlnaHQ/IEl0IG1lYW5zIHRoZXNlIGZ1bmN0aW9ucyBtaWdodCBiZSBhY2Nlc3NpYmxlIGZyb20gb3V0c2lkZSB0aGUgaW1tZWRpYXRlIHNjb3BlLCB3aGljaCBoYXMgaW1wbGljYXRpb25zIGZvciBob3cgdGhleSdyZSB1c2VkIGFuZCBob3cgd2UgbWlnaHQgaW50ZXJhY3Qgd2l0aCB0aGVtLiBJdCBhZGRzIGZsZXhpYmlsaXR5LCBidXQgYWxzbyByZXF1aXJlcyBjYXJlZnVsIGNvbnNpZGVyYXRpb24gb2YgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBhbmQgYWNjZXNzIGNvbnRyb2xzLlxuXG5UaGUgbmV4dCBsb2dpY2FsIHN0ZXAsIGJlZm9yZSBkaXZpbmcgZGVlcGVyIGludG8gdGhlaXIgaW1wbGVtZW50YXRpb24sIGlzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGlzIGFjdHVhbGx5IGV4cG9ydGVkLiBUaGF0IHdpbGwgZ2l2ZSBhIGNsZWFyIGluZGljYXRpb24gb2YgaXRzIGludGVuZGVkIHZpc2liaWxpdHkgYW5kIHB1cnBvc2UuIEV4cG9ydGVkIGZ1bmN0aW9ucyBhcmUgZGVzaWduZWQgZm9yIGJyb2FkZXIgdXNlLCB3aGlsZSBpbnRlcm5hbCBvbmVzIGFyZSB0aWdodGx5IGNvbnRyb2xsZWQuIExldCBtZSBqdXN0IGNoZWNrIHRoZSBzeW1ib2wgdGFibGUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU0NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjAzOjA3LjM4ODY5NDQyMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTgyNTc5ODY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9zMzkwL3MzOTAuYz01NzgxPXZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpvbGQsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3MzOTAvczM5MC5jLTU3ODgtLyoqXFxuYXJjaC9zMzkwL2t2bS9zMzkwL3MzOTAuYzo1Nzg5OiAqIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSgpIC0tIHByZS1mYXVsdCBhbmQgbGluayBnbWFwIGRhdCB0YWJsZXNcXG5hcmNoL3MzOTAva3ZtL3MzOTAvczM5MC5jLTU3OTAtICogQHZjcHU6IHRoZSB2Y3B1IHRoYXQgc2hhbGwgYXBwZWFyIHRvIGhhdmUgZ2VuZXJhdGVkIHRoZSBmYXVsdC1pbi5cXG4tLVxcbmFyY2gvczM5MC9rdm0vczM5MC9zMzkwLmMtNTgwNy0gKi9cXG5hcmNoL3MzOTAva3ZtL3MzOTAvczM5MC5jOjU4MDg6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKVxcbmFyY2gvczM5MC9rdm0vczM5MC9zMzkwLmMtNTgwOS17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTUwNDU9c3RhdGljIGludCBrdm1fdGRwX3BhZ2VfcHJlZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUwOTItXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MDkzOmxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUwOTQtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTE2OTg9c3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVsLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0xNzEwLVxcdC8qXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoxNzExOlxcdCAqIEVuc3VyZSBwcmVfZmF1bHRfYWxsb3dlZCBpcyByZWFkIGJ5IGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSgpXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0xNzEyLVxcdCAqIGJlZm9yZSBrdm1fdGR4LVxcdTAwM2VzdGF0ZS4gIFVzZXJzcGFjZSBtdXN0IG5vdCBiZSBhbGxvd2VkIHRvIHByZS1mYXVsdFxcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTI2NDI9dm9pZCBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGVfcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI2NDUtI2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjI2NDY6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNjQ3LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKTtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9NDM1Mz1zdGF0aWMgaW50IGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy00Mzc3LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6NDM3ODpcXHRcXHRyID0ga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHZjcHUsIHJhbmdlKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQzNzktXFx0XFx0aWYgKFdBUk5fT05fT05DRShyID09IDAgfHwgciA9PSAtRUlPKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDM6MDguOTcxMjc4NzM2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU1ODMyOTIxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqS1ZNIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuUmlnaHQsIHNvIHdlJ3JlIHRhbGtpbmcgS1ZNLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZWQsIHNwZWNpZmljYWxseSB0aGUgYEtWTWAgc2V0dGluZyBpdHNlbGYuIFRoYXQncyB0aGUgYmFzZWxpbmUsIHRoZSBmb3VuZGF0aW9uLiBOb3csIEkgbmVlZCB0byBnZXQgaW50byB0aGUgd2VlZHMgYSBiaXQuIEknbSB0aGlua2luZyBhYm91dCBwcmUtZmF1bHRpbmcgbWVtb3J5LiBJJ20gcmVhc29uYWJseSBjZXJ0YWluIHRoZXJlJ3MgYSBjb25maWd1cmF0aW9uIG9wdGlvbiByZWxhdGluZyB0byB0aGF0LCBzb21ldGhpbmcgYWxvbmcgdGhlIGxpbmVzIG9mIGBDT05GSUdfS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWWAgb3IgcG90ZW50aWFsbHkgc29tZXRoaW5nIHdpdGggYSBzbGlnaHRseSBkaWZmZXJlbnQgbmFtZS4gVGltZSB0byBnbyBkaWdnaW5nIHRocm91Z2ggdGhlIGNvZGUgb3IgdGhlIGRvY3VtZW50YXRpb24gdG8gY29uZmlybSBhbmQgdmVyaWZ5IHRoZSBzcGVjaWZpY3Mgb2YgdGhhdCBzZXR0aW5nLiBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBwcmUtZmF1bHRpbmcgaXMgaGFuZGxlZCB3aXRoaW4gdGhpcyBLVk0gc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4MDgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowMzoxMi41Mjk2MDk5MjlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDAwNzMyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2t2bS9LY29uZmlnPTE5PWNvbmZpZyBLVk1cXG4tLVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0zMi1cXHRzZWxlY3QgS1ZNX01NVV9MT0NLTEVTU19BR0lOR1xcbmFyY2gvczM5MC9rdm0vS2NvbmZpZzozMzpcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxcbmFyY2gvczM5MC9rdm0vS2NvbmZpZy0zNC1cXHRoZWxwXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0yMD1jb25maWcgS1ZNX1g4Nlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNDctXFx0c2VsZWN0IEtWTV9HRU5FUklDX0hBUkRXQVJFX0VOQUJMSU5HXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NDg6XFx0c2VsZWN0IEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy00OS1cXHRzZWxlY3QgS1ZNX1dFUlJPUiBpZiBXRVJST1JcXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0yNjQyPXZvaWQga3ZtX2FyY2hfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKTtcXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNjQ0LVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoyNjQ1OiNpZmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNjQ2LWxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbnZpcnQva3ZtL0tjb25maWc9Njg9Y29uZmlnIEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxcbi0tXFxudmlydC9rdm0vS2NvbmZpZy03MC1cXG52aXJ0L2t2bS9LY29uZmlnOjcxOmNvbmZpZyBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXFxudmlydC9rdm0vS2NvbmZpZy03Mi0gICAgICAgYm9vbFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz00MzI3PXN0YXRpYyBpbnQga3ZtX3ZjcHVfaW9jdGxfZ2V0X3N0YXRzX2ZkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDM1MS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjQzNTI6I2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXFxudmlydC9rdm0va3ZtX21haW4uYy00MzUzLXN0YXRpYyBpbnQga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTQ0MjU9c3RhdGljIGxvbmcga3ZtX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ2NTAtXFx0fVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6NDY1MTojaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ2NTItXFx0Y2FzZSBLVk1fUFJFX0ZBVUxUX01FTU9SWToge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowMzoxNC4xNjk2ODc1MTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMzNTQ4MTA4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gdGhlIEtWTSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gd2UncmUgZm9jdXNpbmcgb24gS1ZNLCB0aGF0J3MgdGhlIGNvcmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIlJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGFuZCB0aGUgY3JpdGljYWwgcGFyYW1ldGVycyB0aGF0IGdvdmVybiB0aGUgZW52aXJvbm1lbnQuXCIgSSdtIHRoaW5raW5nIHNwZWNpZmljYWxseSBhYm91dCB0aGUgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAgc2V0dGluZyByaWdodCBvZmYgdGhlIGJhdC4gSXQncyB1c3VhbGx5IHRoZSBjcnV4IG9mIGhvdyB0aGUgZ3Vlc3QncyBtZW1vcnkgaXMgbWFuYWdlZCBhbmQgaG93IHZpcnR1YWwgYWRkcmVzc2VzIGFyZSB0cmFuc2xhdGVkLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBrbm93bGVkZ2Ugb2YgaXQuIExldCdzIHNlZSBob3cgaXQncyBkZWZpbmVkIGFuZCBjb25maWd1cmVkLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZSBhbmQgZG9jdW1lbnRhdGlvbiB0byByZWZyZXNoIG15IGtub3dsZWRnZSBhbmQgY29uZmlybSBteSBhc3N1bXB0aW9ucyFcblxuXG4iLCJJbnB1dFRva2VucyI6Njc0NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjAzOjE3LjUwNTE3MDMwOFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0ODI4MDkwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9tbXUuaD0zMzE9c3RhdGljIGlubGluZSBib29sIGt2bV9zaGFkb3dfcm9vdF9hbGxvY2F0ZWQoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS5oLTM0MS1cXG5hcmNoL3g4Ni9rdm0vbW11Lmg6MzQyOmludCBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4pO1xcbmFyY2gveDg2L2t2bS9tbXUuaC0zNDMtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTUxNjM9c3RhdGljIHZvaWQga3ZtX2Fzc2VydF9nbWVtX2ludmFsaWRhdGVfbG9ja19oZWxkKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUxNzQtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MTc1OmludCBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4pXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MTc2LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTI1OC19XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MjU5OkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4pO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTI2MC0jZW5kaWZcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MzE4MD1zdGF0aWMgaW50IHRkeF9nbWVtX3Bvc3RfcG9wdWxhdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTMxOTItXFx0a3ZtX3RkeC1cXHUwMDNlcGFnZV9hZGRfc3JjID0gc3JjX3BhZ2U7XFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzozMTkzOlxcdHJldCA9IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihhcmctXFx1MDAzZXZjcHUsIGdmbiwgcGZuKTtcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTMxOTQtXFx0a3ZtX3RkeC1cXHUwMDNlcGFnZV9hZGRfc3JjID0gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDM6MTguOTUzNDU0OTcyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMzkyOTM0MzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBLVk0gTU1VIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IGZvY3VzIGxhbmRzIG9uIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gLiBUaGF0J3MgVERYLXNwZWNpZmljLCBhcyBJIHJlY2FsbCwgYW5kIHRoYXQncyBjcml0aWNhbCBiZWNhdXNlIFREWCAqcmVxdWlyZXMqIGBLVk1fSU5URUxgLCB3aGljaCBnaXZlcyBtZSBhIHN0YXJ0aW5nIHBvaW50LiBEaWdnaW5nIGRlZXBlciwgSSBzZWUgaXQncyB1c2VkIGluIGB0ZHhfZ21lbV9wb3N0X3BvcHVsYXRlYCwgc29saWRpZnlpbmcgaXRzIHJlbGV2YW5jZSBpbiB0aGlzIGNvbnRleHQuXG5cbk5vdywgbGV0J3MgbG9vayBhdCBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YC4gSSB0cmFjZSBpdDogYGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLCB0aGVuIHRoZSBga3ZtX3ZjcHVfaW9jdGxgIHBhdGggd2l0aCBgS1ZNX1BSRV9GQVVMVF9NRU1PUllgLiBCaW5nby4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IHJlc2lkZXMuXG5cblNvLCB0aGUga2V5IHN5bWJvbHMgaGVyZSBhcmUgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgYW5kIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gLiBJIGtub3cgdGhlIGJhc2UgY29uZmlnIGlzIGRlZmluaXRlbHkgYEtWTWAuXG5cbkkgYWxzbyBicmllZmx5IGNoZWNrZWQgYGt2bV90ZHBfcGFnZV9wcmVmYXVsdGAgYW5kIGl0J3Mgc3RhdGljIGluIGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYC4gU28sIEknbGwgZXhjbHVkZSBpdCBmcm9tIHRoZSBmaW5hbCBsaXN0LlxuXG5OZXh0LCBJIG5lZWQgdG8gdmVyaWZ5IHJlYWNoYWJpbGl0eS4gYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAgaXMgZXhwb3J0ZWQgaW50ZXJuYWxseSB0byBLVk0gYW5kIHVzZWQgYnkgYHRkeF9nbWVtX3Bvc3RfcG9wdWxhdGVgLCB3aGljaCBpcyBnb29kLiBDYW4gd2UgdHJpZ2dlciBURFggaW4gUUVNVT8gWWVzLCB3ZSBjYW4gZW11bGF0ZSBpdCBvciBmdXp6IGl0LlxuXG5XYWl0IGEgc2Vjb25kLi4uIFREWCB0ZWNobmljYWxseSBuZWVkcyBoYXJkd2FyZSBzdXBwb3J0LiBCdXQgc3l6a2FsbGVyIGZ1enplcyBLVk0gaW9jdGxzIGRpcmVjdGx5LCBzbyBpZiB0aGUgaW9jdGwgaXMgYXZhaWxhYmxlLCB3ZSBjYW4gcmVhY2ggaXQhIFRoYXQncyBhbiBpbXBvcnRhbnQgZGV0YWlsLiBJJ2xsIG1ha2Ugc3VyZSB0byBub3RlIHRoYXQgaW4gbXkgcmVhc29uaW5nLlxuXG5NeSBmaW5hbCBsaXN0IG9mIHN5bWJvbHMgdG8gZm9jdXMgb24gaXM6XG4qICAgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWBcbiogICBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYFxuXG5UaGUgcmVxdWlyZWQgY29uZmlnIGlzIGBLVk1gLlxuXG5UaGUgcGF0Y2gncyBjaGFuZ2VzIHJldm9sdmUgYXJvdW5kIHRoZSBNTVUgcGFnZSBmYXVsdCBoYW5kbGluZywgc3BlY2lmaWNhbGx5IGFyb3VuZCBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBhbmQgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAuIEl0IGxvb2tzIGxpa2UgdGhleSdyZSBtb3ZpbmcgTU1VIHJlbG9hZCBhbmQgY2FjaGUgdG9wLXVwIG9wZXJhdGlvbnMgaW5zaWRlIHRoZSByZXRyeSBsb29wIHRvIGNvcnJlY3RseSBoYW5kbGUgY29uY3VycmVudCBpbnZhbGlkYXRpb25zLiBUaGlzIGlzIGNvcmUgS1ZNIE1NVSBsb2dpYyBhbmQgYWZmZWN0cyBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCBzaG91bGQgYmUgZnV6emVkIVxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTgyLCJPdXRwdXRUb2tlbnMiOjE1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowMzoyOS4zNDYzOTExWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA0OTAzOTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeVwiLFxuICAgIFwia3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIE1NVSBwYWdlIGZhdWx0IGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgYW5kIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gLiBJdCBtb3ZlcyBNTVUgcmVsb2FkIGFuZCBjYWNoZSB0b3AtdXAgb3BlcmF0aW9ucyBpbnNpZGUgdGhlIHJldHJ5IGxvb3AgdG8gaGFuZGxlIGNvbmN1cnJlbnQgaW52YWxpZGF0aW9ucyBjb3JyZWN0bHkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBLVk0gTU1VIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeVwiLFxuICAgIFwia3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIE1NVSBwYWdlIGZhdWx0IGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgYW5kIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gLiBJdCBtb3ZlcyBNTVUgcmVsb2FkIGFuZCBjYWNoZSB0b3AtdXAgb3BlcmF0aW9ucyBpbnNpZGUgdGhlIHJldHJ5IGxvb3AgdG8gaGFuZGxlIGNvbmN1cnJlbnQgaW52YWxpZGF0aW9ucyBjb3JyZWN0bHkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBLVk0gTU1VIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowMzoyOS40MjY4OTMxMjRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwOTU1MTI5MzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDM6MjkuNDI3NDA2MDY0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjcwOTU0NjExNjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb3ZlcyBNTVUgcmVsb2FkIGFuZCBjYWNoZSB0b3AtdXAgZnVuY3Rpb25zIGluc2lkZSB0aGUgcmV0cnkgbG9vcHMgZm9yIEtWTSBwYWdlIGZhdWx0IGhhbmRsaW5nIChga3ZtX3RkcF9wYWdlX3ByZWZhdWx0YCBhbmQgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmApLiBUaGlzIGZpeGVzIGEgbG9naWMgYnVnIHdoZXJlIGEgY29uY3VycmVudCBpbnZhbGlkYXRpb24gY291bGQgY2F1c2UgdGhlIGxvb3AgdG8gcmV0cnkgd2l0aG91dCByZWxvYWRpbmcgdGhlIE1NVSByb290LCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGFuIG9ic29sZXRlIHJvb3QgYmVpbmcgdXNlZC4gVGhlIGBmYXVsdGAgc3RydWN0dXJlIGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgZm9yIGFueSB1bnNwZWNpZmllZCBmaWVsZHMuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGlzIHBhdGNoLiBBbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIGFyaXNpbmcgZnJvbSBvYnNvbGV0ZSByb290cyB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGRiMDZkYTRkMDFjMDI3M2FmNzhkN2M4NDRhMGNkMGI3ODYzNTkwZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDE2OjUzOjQwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbmluZGV4IDA2NGVjYzMzYjkyNjcuLjc5YzQ1MGQ2NzdiNDAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG5AQCAtNTA2MSw2ICs1MDYxLDEwIEBAIHN0YXRpYyBpbnQga3ZtX3RkcF9wYWdlX3ByZWZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLFxuIFx0XHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9WTV9ERUFELCB2Y3B1KSlcbiBcdFx0XHRyZXR1cm4gLUVJTztcbiBcbitcdFx0ciA9IGt2bV9tbXVfcmVsb2FkKHZjcHUpO1xuK1x0XHRpZiAocilcbitcdFx0XHRyZXR1cm4gcjtcbitcbiBcdFx0Y29uZF9yZXNjaGVkKCk7XG4gXHRcdHIgPSBrdm1fbW11X2RvX3BhZ2VfZmF1bHQodmNwdSwgZ3BhLCBlcnJvcl9jb2RlLCB0cnVlLCBOVUxMLCBsZXZlbCk7XG4gXHR9IHdoaWxlIChyID09IFJFVF9QRl9SRVRSWSk7XG5AQCAtNTEwMSwxNCArNTEwNSw2IEBAIGxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdGlmIChrdm1faXNfZ2ZuX2FsaWFzKHZjcHUtXHUwMDNla3ZtLCBncGFfdG9fZ2ZuKHJhbmdlLVx1MDAzZWdwYSkpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdC8qXG4tXHQgKiByZWxvYWQgaXMgZWZmaWNpZW50IHdoZW4gY2FsbGVkIHJlcGVhdGVkbHksIHNvIHdlIGNhbiBkbyBpdCBvblxuLVx0ICogZXZlcnkgaXRlcmF0aW9uLlxuLVx0ICovXG4tXHRyID0ga3ZtX21tdV9yZWxvYWQodmNwdSk7XG4tXHRpZiAocilcbi1cdFx0cmV0dXJuIHI7XG4tXG4gXHRkaXJlY3RfYml0cyA9IDA7XG4gXHRpZiAoa3ZtX2FyY2hfaGFzX3ByaXZhdGVfbWVtKHZjcHUtXHUwMDNla3ZtKSBcdTAwMjZcdTAwMjZcbiBcdCAgICBrdm1fbWVtX2lzX3ByaXZhdGUodmNwdS1cdTAwM2Vrdm0sIGdwYV90b19nZm4ocmFuZ2UtXHUwMDNlZ3BhKSkpXG5AQCAtNTIxMywxNCArNTIwOSw2IEBAIGludCBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4pXG4gXHRpZiAoa3ZtX2dmbl9pc193cml0ZV90cmFja2VkKGt2bSwgZmF1bHQuc2xvdCwgZmF1bHQuZ2ZuKSlcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbiBcbi1cdHIgPSBrdm1fbW11X3JlbG9hZCh2Y3B1KTtcbi1cdGlmIChyKVxuLVx0XHRyZXR1cm4gcjtcbi1cbi1cdHIgPSBtbXVfdG9wdXBfbWVtb3J5X2NhY2hlcyh2Y3B1LCBmYWxzZSk7XG4tXHRpZiAocilcbi1cdFx0cmV0dXJuIHI7XG4tXG4gXHRkbyB7XG4gXHRcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSlcbiBcdFx0XHRyZXR1cm4gLUVJTlRSO1xuQEAgLTUyMjgsMTAgKzUyMTYsMzggQEAgaW50IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbilcbiBcdFx0aWYgKGt2bV90ZXN0X3JlcXVlc3QoS1ZNX1JFUV9WTV9ERUFELCB2Y3B1KSlcbiBcdFx0XHRyZXR1cm4gLUVJTztcbiBcbitcdFx0ciA9IGt2bV9tbXVfcmVsb2FkKHZjcHUpO1xuK1x0XHRpZiAocilcbitcdFx0XHRyZXR1cm4gcjtcbitcbitcdFx0ciA9IG1tdV90b3B1cF9tZW1vcnlfY2FjaGVzKHZjcHUsIGZhbHNlKTtcbitcdFx0aWYgKHIpXG4rXHRcdFx0cmV0dXJuIHI7XG4rXG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFxuIFx0XHRndWFyZChyZWFkX2xvY2spKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4gXG4rXHRcdC8qXG4rXHRcdCAqIEJlY2F1c2Ugc2xvdHNfbG9jayBpcyBoZWxkLCBpdCBzaG91bGQgYmUgaW1wb3NzaWJsZSBmb3IgKmFueSpcbitcdFx0ICogcm9vdHMgdG8gYmUgaW52YWxpZGF0ZWQgYWZ0ZXIgdGhlIGluaXRpYWwgTU1VIHJlbG9hZC4gIFdBUk4sXG4rXHRcdCAqIGJ1dCBjb250aW51ZSBvbjsgdGhlIGFib3ZlIE1NVSByZWxvYWQgd2lsbCBkbyB0aGUgcmlnaHQgdGhpbmdcbitcdFx0ICogaWYgdGhlIGN1cnJlbnQgcm9vdCBpcyBhY3R1YWxseSBpbnZhbGlkLlxuK1x0XHQgKi9cbitcdFx0V0FSTl9PTl9PTkNFKGt2bV90ZXN0X3JlcXVlc3QoS1ZNX1JFUV9NTVVfRlJFRV9PQlNPTEVURV9ST09UUywgdmNwdSkpO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBTbmFwc2hvdCB0aGUgaW52YWxpZGF0aW9uIHNlcXVlbmNlIGNvdW50ZXIgYWZ0ZXIgYWNxdWlyaW5nXG4rXHRcdCAqIG1tdV9sb2NrLCBhcyBndWVzdF9tZW1mZCBndWFyYW50ZWVzIHRoZSB2YWxpZGl0eSBvZiB0aGUgcGZuLFxuK1x0XHQgKiBpLmUuIGFueSBjb25jdXJyZW50IGludmFsaWRhdGlvbnMgYXJlIGd1YXJhbnRlZWQgdG8gYmVcbitcdFx0ICogaXJyZWxldmFudC5cbitcdFx0ICovXG4rXHRcdGZhdWx0Lm1tdV9zZXEgPSB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXE7XG4rXHRcdGlmIChpc19wYWdlX2ZhdWx0X3N0YWxlKHZjcHUsIFx1MDAyNmZhdWx0KSkge1xuK1x0XHRcdHIgPSBSRVRfUEZfUkVUUlk7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbiBcdFx0ciA9IGt2bV90ZHBfbW11X21hcCh2Y3B1LCBcdTAwMjZmYXVsdCk7XG4gXHR9IHdoaWxlIChyID09IFJFVF9QRl9SRVRSWSk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowMzoyOS40Mjc0MDc0MjRaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzcwNjk4MTQ0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLVk0gTU1VIFBhdGNoIGZvciBQb3RlbnRpYWwgTWVtb3J5IFJpc2tzKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBkaXZlcyBpbnRvIGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYCwgc3BlY2lmaWNhbGx5LiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIGFjdGlvbiBpcyBzaGlmdGluZyBga3ZtX21tdV9yZWxvYWQodmNwdSlgIGFuZCBgbW11X3RvcHVwX21lbW9yeV9jYWNoZXModmNwdSwgZmFsc2UpYCBpbnRvIHRoZSByZXRyeSBsb29wcyB3aXRoaW4gYGt2bV90ZHBfcGFnZV9wcmVmYXVsdGAgYW5kIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gLiBUaGF0J3MgaW50ZXJlc3Rpbmc7IHBvdGVudGlhbGx5IG9wdGltaXppbmcgcGVyZm9ybWFuY2UgYnkgcmVsb2FkaW5nIGFuZCB0b3BwaW5nIHVwIG1vcmUgZnJlcXVlbnRseSBkdXJpbmcgcGFnZSBmYXVsdHMuIEl0IGFsc28gYWRkcyBhIGBXQVJOX09OX09OQ0VgIGFuZCB1cGRhdGVzIGEgYGZhdWx0Lm1tdV9zZXFgIGNvdW50ZXIgYW5kIGNoZWNrcyBpZiBhIHBhZ2UgZmF1bHQgaXMgc3RhbGUgd2l0aGluIHRoZSBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYCBsb29wLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiwgdGhvdWdoLCBpcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gSSBuZWVkIHRvIGJlIHN1cmUgdGhpcyByZWZhY3RvcmluZyBoYXNuJ3QgaW5hZHZlcnRlbnRseSBjcmVhdGVkIGEgc2NlbmFyaW8gd2hlcmUgd2UncmUgcmVhZGluZyBmcm9tIG1lbW9yeSB0aGF0IGhhc24ndCBiZWVuIHByb3Blcmx5IGluaXRpYWxpemVkLCBsZWFkaW5nIHRvIGFsbCBzb3J0cyBvZiB1bnByZWRpY3RhYmxlIGJlaGF2aW9yLiBMZXQgbWUgc2VlLi4uIEluIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gLCB0aGUgYGZhdWx0YCB2YXJpYWJsZSBpcyBhIGBzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHRgLiBUaGUgY29kZSB1cGRhdGVzIGBmYXVsdC5tbXVfc2VxYCBpbnNpZGUgdGhlIGxvb3AuIFRoZSBxdWVzdGlvbiBpcywgaXMgdGhlcmUgYW55IGNoYW5jZSB0aGUgY29kZSByZWFkcyBmcm9tIGFueSBwYXJ0cyBvZiB0aGUgYGZhdWx0YCBzdHJ1Y3QgdGhhdCAqaGF2ZW4ndCogYmVlbiBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgdXNlZCwgZXNwZWNpYWxseSBpZiB0aGUgbG9vcCBpcyBoaXQgbXVsdGlwbGUgdGltZXM/IFJpZ2h0LCBsZXQncyBkaXZlIGludG8gYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAgYW5kIHNlZSB3aGF0J3MgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NDAsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowMzozNy4xMzQzOTIwNTZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MjAxNjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9tbXUvbW11LmM9NTE2Mz1zdGF0aWMgdm9pZCBrdm1fYXNzZXJ0X2dtZW1faW52YWxpZGF0ZV9sb2NrX2hlbGQoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTE3NC1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUxNzU6aW50IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbilcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUxNzYte1xcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MjU4LX1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUyNTk6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3Bmbik7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MjYwLSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowMzozNy4xODE1OTU3MDNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU2NDAyNTE1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgcHJvdmlkZWQgdGV4dDpcblxuKipEaXZpbmcgaW50byB0aGUgS1ZNIFREUCBNTVUgTWFwcGluZyBGdW5jdGlvbioqXG5cbk9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhlIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgVHJhbnNsYXRpb24gTG9va2FzaWRlIEJ1ZmZlciAoVExCKSBpcyBiZWluZyBoYW5kbGVkIGZvciBUcmFuc3BhcmVudCBQYWdlIFNoYXJpbmcgKFRQUykgaW4gdGhlIEtWTSAoS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSkgY29udGV4dCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgeDg2IGFyY2hpdGVjdHVyZS4gVGhpcyBmdW5jdGlvbiwgcmVzaWRpbmcgaW4gYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLCBpcyBsaWtlbHkgY3JpdGljYWwgZm9yIG1hbmFnaW5nIHByaXZhdGUgcGFnZSBmcmFtZSBudW1iZXJzIChQRk5zKSByZWxhdGVkIHRvIFRQUy4gSXQncyBwcm9iYWJseSByZXNwb25zaWJsZSBmb3IgZXN0YWJsaXNoaW5nIHRoZSBtYXBwaW5ncyBiZXR3ZWVuIGd1ZXN0IHZpcnR1YWwgYWRkcmVzc2VzIGFuZCBob3N0IHBoeXNpY2FsIGFkZHJlc3NlcywgZW5zdXJpbmcgbWVtb3J5IGNvbnNpc3RlbmN5IGFuZCBwZXJmb3JtYW5jZSB3aXRoaW4gdGhlIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBJJ20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gZGVhbCB3aXRoIHRoZSBjb21wbGV4aXRpZXMgb2YgbmVzdGVkIHBhZ2luZywgYW5kIGxpa2VseSBpbmNvcnBvcmF0ZXMgb3B0aW1pemF0aW9ucyByZWxhdGVkIHRvIHNoYWRvdyBwYWdlIHRhYmxlcyBhbmQgYWRkcmVzcyB0cmFuc2xhdGlvbiBjYWNoaW5nLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0aGUgbG9ja2luZyBtZWNoYW5pc21zIHVzZWQgKGlmIGFueSksIGFuZCBhbnkgY29uc2lkZXJhdGlvbnMgbWFkZSBmb3IgcGVyZm9ybWFuY2UgdHVuaW5nLiBMZXQncyBzZWUgaG93IGl0J3MgaW1wbGVtZW50ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NzksIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowMzo0MS43NDU2MjMwNDJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ2ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9tbXUvbW11LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTE3NSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUxNzU6XFx0aW50IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbilcXG41MTc2OlxcdHtcXG41MTc3OlxcdFxcdHN0cnVjdCBrdm1fcGFnZV9mYXVsdCBmYXVsdCA9IHtcXG41MTc4OlxcdFxcdFxcdC5hZGRyID0gZ2ZuX3RvX2dwYShnZm4pLFxcbjUxNzk6XFx0XFx0XFx0LmVycm9yX2NvZGUgPSBQRkVSUl9HVUVTVF9GSU5BTF9NQVNLIHwgUEZFUlJfUFJJVkFURV9BQ0NFU1MsXFxuNTE4MDpcXHRcXHRcXHQucHJlZmV0Y2ggPSB0cnVlLFxcbjUxODE6XFx0XFx0XFx0LmlzX3RkcCA9IHRydWUsXFxuNTE4MjpcXHRcXHRcXHQubnhfaHVnZV9wYWdlX3dvcmthcm91bmRfZW5hYmxlZCA9IGlzX254X2h1Z2VfcGFnZV9lbmFibGVkKHZjcHUtXFx1MDAzZWt2bSksXFxuNTE4MzpcXHRcXG41MTg0OlxcdFxcdFxcdC5tYXhfbGV2ZWwgPSBQR19MRVZFTF80SyxcXG41MTg1OlxcdFxcdFxcdC5yZXFfbGV2ZWwgPSBQR19MRVZFTF80SyxcXG41MTg2OlxcdFxcdFxcdC5nb2FsX2xldmVsID0gUEdfTEVWRUxfNEssXFxuNTE4NzpcXHRcXHRcXHQuaXNfcHJpdmF0ZSA9IHRydWUsXFxuNTE4ODpcXHRcXG41MTg5OlxcdFxcdFxcdC5nZm4gPSBnZm4sXFxuNTE5MDpcXHRcXHRcXHQuc2xvdCA9IGt2bV92Y3B1X2dmbl90b19tZW1zbG90KHZjcHUsIGdmbiksXFxuNTE5MTpcXHRcXHRcXHQucGZuID0gcGZuLFxcbjUxOTI6XFx0XFx0XFx0Lm1hcF93cml0YWJsZSA9IHRydWUsXFxuNTE5MzpcXHRcXHR9O1xcbjUxOTQ6XFx0XFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cXHUwMDNla3ZtO1xcbjUxOTU6XFx0XFx0aW50IHI7XFxuNTE5NjpcXHRcXG41MTk3OlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuNTE5ODpcXHRcXG41MTk5OlxcdFxcdC8qXFxuNTIwMDpcXHRcXHQgKiBNYXBwaW5nIGEgcHJlLWRldGVybWluZWQgcHJpdmF0ZSBwZm4gaXMgaW50ZW5kZWQgb25seSBmb3IgdXNlIHdoZW5cXG41MjAxOlxcdFxcdCAqIHBvcHVsYXRpbmcgYSBndWVzdF9tZW1mZCBpbnN0YW5jZS4gIEFzc2VydCB0aGF0IHRoZSBzbG90IGlzIGJhY2tlZFxcbjUyMDI6XFx0XFx0ICogYnkgZ3Vlc3RfbWVtZmQgYW5kIHRoYXQgdGhlIGdtZW0gaW5zdGFuY2UncyBpbnZhbGlkYXRlX2xvY2sgaXMgaGVsZC5cXG41MjAzOlxcdFxcdCAqL1xcbjUyMDQ6XFx0XFx0a3ZtX2Fzc2VydF9nbWVtX2ludmFsaWRhdGVfbG9ja19oZWxkKGZhdWx0LnNsb3QpO1xcbjUyMDU6XFx0XFxuNTIwNjpcXHRcXHRpZiAoS1ZNX0JVR19PTighdGRwX21tdV9lbmFibGVkLCBrdm0pKVxcbjUyMDc6XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuNTIwODpcXHRcXG41MjA5OlxcdFxcdGlmIChrdm1fZ2ZuX2lzX3dyaXRlX3RyYWNrZWQoa3ZtLCBmYXVsdC5zbG90LCBmYXVsdC5nZm4pKVxcbjUyMTA6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG41MjExOlxcdFxcbjUyMTI6XFx0XFx0ZG8ge1xcbjUyMTM6XFx0XFx0XFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxcbjUyMTQ6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5UUjtcXG41MjE1OlxcdFxcbjUyMTY6XFx0XFx0XFx0aWYgKGt2bV90ZXN0X3JlcXVlc3QoS1ZNX1JFUV9WTV9ERUFELCB2Y3B1KSlcXG41MjE3OlxcdFxcdFxcdFxcdHJldHVybiAtRUlPO1xcbjUyMTg6XFx0XFxuNTIxOTpcXHRcXHRcXHRyID0ga3ZtX21tdV9yZWxvYWQodmNwdSk7XFxuNTIyMDpcXHRcXHRcXHRpZiAocilcXG41MjIxOlxcdFxcdFxcdFxcdHJldHVybiByO1xcbjUyMjI6XFx0XFxuNTIyMzpcXHRcXHRcXHRyID0gbW11X3RvcHVwX21lbW9yeV9jYWNoZXModmNwdSwgZmFsc2UpO1xcbjUyMjQ6XFx0XFx0XFx0aWYgKHIpXFxuNTIyNTpcXHRcXHRcXHRcXHRyZXR1cm4gcjtcXG41MjI2OlxcdFxcbjUyMjc6XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuNTIyODpcXHRcXG41MjI5OlxcdFxcdFxcdGd1YXJkKHJlYWRfbG9jaykoXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbjUyMzA6XFx0XFxuNTIzMTpcXHRcXHRcXHQvKlxcbjUyMzI6XFx0XFx0XFx0ICogQmVjYXVzZSBzbG90c19sb2NrIGlzIGhlbGQsIGl0IHNob3VsZCBiZSBpbXBvc3NpYmxlIGZvciAqYW55KlxcbjUyMzM6XFx0XFx0XFx0ICogcm9vdHMgdG8gYmUgaW52YWxpZGF0ZWQgYWZ0ZXIgdGhlIGluaXRpYWwgTU1VIHJlbG9hZC4gIFdBUk4sXFxuNTIzNDpcXHRcXHRcXHQgKiBidXQgY29udGludWUgb247IHRoZSBhYm92ZSBNTVUgcmVsb2FkIHdpbGwgZG8gdGhlIHJpZ2h0IHRoaW5nXFxuNTIzNTpcXHRcXHRcXHQgKiBpZiB0aGUgY3VycmVudCByb290IGlzIGFjdHVhbGx5IGludmFsaWQuXFxuNTIzNjpcXHRcXHRcXHQgKi9cXG41MjM3OlxcdFxcdFxcdFdBUk5fT05fT05DRShrdm1fdGVzdF9yZXF1ZXN0KEtWTV9SRVFfTU1VX0ZSRUVfT0JTT0xFVEVfUk9PVFMsIHZjcHUpKTtcXG41MjM4OlxcdFxcbjUyMzk6XFx0XFx0XFx0LypcXG41MjQwOlxcdFxcdFxcdCAqIFNuYXBzaG90IHRoZSBpbnZhbGlkYXRpb24gc2VxdWVuY2UgY291bnRlciBhZnRlciBhY3F1aXJpbmdcXG41MjQxOlxcdFxcdFxcdCAqIG1tdV9sb2NrLCBhcyBndWVzdF9tZW1mZCBndWFyYW50ZWVzIHRoZSB2YWxpZGl0eSBvZiB0aGUgcGZuLFxcbjUyNDI6XFx0XFx0XFx0ICogaS5lLiBhbnkgY29uY3VycmVudCBpbnZhbGlkYXRpb25zIGFyZSBndWFyYW50ZWVkIHRvIGJlXFxuNTI0MzpcXHRcXHRcXHQgKiBpcnJlbGV2YW50LlxcbjUyNDQ6XFx0XFx0XFx0ICovXFxuNTI0NTpcXHRcXHRcXHRmYXVsdC5tbXVfc2VxID0gdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXE7XFxuNTI0NjpcXHRcXHRcXHRpZiAoaXNfcGFnZV9mYXVsdF9zdGFsZSh2Y3B1LCBcXHUwMDI2ZmF1bHQpKSB7XFxuNTI0NzpcXHRcXHRcXHRcXHRyID0gUkVUX1BGX1JFVFJZO1xcbjUyNDg6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuNTI0OTpcXHRcXHRcXHR9XFxuNTI1MDpcXHRcXG41MjUxOlxcdFxcdFxcdHIgPSBrdm1fdGRwX21tdV9tYXAodmNwdSwgXFx1MDAyNmZhdWx0KTtcXG41MjUyOlxcdFxcdH0gd2hpbGUgKHIgPT0gUkVUX1BGX1JFVFJZKTtcXG41MjUzOlxcdFxcbjUyNTQ6XFx0XFx0aWYgKHIgIT0gUkVUX1BGX0ZJWEVEKVxcbjUyNTU6XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuNTI1NjpcXHRcXG41MjU3OlxcdFxcdHJldHVybiAwO1xcbjUyNTg6XFx0fVxcbjUyNTk6XFx0RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3Bmbik7XFxuNTI2MDpcXHQjZW5kaWZcXG41MjYxOlxcdFxcbjUyNjI6XFx0c3RhdGljIHZvaWQgbm9ucGFnaW5nX2luaXRfY29udGV4dChzdHJ1Y3Qga3ZtX21tdSAqY29udGV4dClcXG41MjYzOlxcdHtcXG41MjY0OlxcdFxcdGNvbnRleHQtXFx1MDAzZXBhZ2VfZmF1bHQgPSBub25wYWdpbmdfcGFnZV9mYXVsdDtcXG41MjY1OlxcdFxcdGNvbnRleHQtXFx1MDAzZXN5bmNfc3B0ZSA9IE5VTEw7XFxuNTI2NjpcXHR9XFxuNTI2NzpcXHRcXG41MjY4OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBpc19yb290X3VzYWJsZShzdHJ1Y3Qga3ZtX21tdV9yb290X2luZm8gKnJvb3QsIGdwYV90IHBnZCxcXG41MjY5OlxcdFxcdFxcdFxcdFxcdCAgdW5pb24ga3ZtX21tdV9wYWdlX3JvbGUgcm9sZSlcXG41MjcwOlxcdHtcXG41MjcxOlxcdFxcdHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwO1xcbjUyNzI6XFx0XFxuNTI3MzpcXHRcXHRpZiAoIVZBTElEX1BBR0Uocm9vdC1cXHUwMDNlaHBhKSlcXG41Mjc0OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDM6NDEuNzQ2MDcxNDMyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMTMzNzUxNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgSW5pdGlhbGl6YXRpb24gYW5kIFJlbG9hZCBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgdGhhdCB0aGUgYGZhdWx0YCB2YXJpYWJsZSBnZXRzIGEgZnVsbCBpbml0aWFsaXphdGlvbiByaWdodCBvZmYgdGhlIGJhdCB3aXRoIHRoZSBgeyAuLi4gfWAuIFRoYXQncyBnb29kLiBJdCBlbnN1cmVzIGFsbCB0aGUgZmllbGRzIGFyZSB6ZXJvZWQgb3V0LCBzbyB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGF0IHRoYXQgcG9pbnQuIE1ha2VzIHRoaW5ncyBjbGVhbmVyLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIHNlZW1zIHRvIGJlIG1vdmluZyBga3ZtX21tdV9yZWxvYWRgIGFuZCBgbW11X3RvcHVwX21lbW9yeV9jYWNoZXNgICppbnRvKiB0aGUgcmV0cnkgbG9vcC4gQWhhLCBJIHNlZSB3aGF0J3MgaGFwcGVuaW5nLiBUaGV5J3JlIGRvaW5nIHRoaXMgdG8gYWRkcmVzcyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciBhIHNjZW5hcmlvIHdoZXJlIGBrdm1fbW11X3JlbG9hZGAgbWlnaHQgYWN0dWFsbHkgbmVlZCB0byBiZSByZS1leGVjdXRlZCBpZiB0aGUgbG9vcCBoYXMgdG8gcmV0cnkuIEkgYWdyZWUgd2l0aCB0aGF0IGFzc2Vzc21lbnQuIEl0J3MgdGhlIHJpZ2h0IGZpeCB0byBlbnN1cmUgY29uc2lzdGVuY3kuIEdpdmVuIHRoYXQsIHRoZXJlJ3Mgbm8gd2F5IHdlIGNvdWxkIGhhdmUgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuXG5cbk5vdywgbGV0IG1lIHNoaWZ0IGdlYXJzIGFuZCB0YWtlIGEgbG9vayBhdCBob3cgYGt2bV90ZHBfcGFnZV9wcmVmYXVsdGAgZml0cyBpbnRvIHRoaXMgd2hvbGUgcGljdHVyZS4gVGltZSB0byBkaWcgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3ODksIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowMzo0Ny4wNTk0NDg5OTRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM4OTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9tbXUvbW11LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTA0MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUwNDA6XFx0XFxuNTA0MTpcXHRcXHRyZXR1cm4gcjtcXG41MDQyOlxcdH1cXG41MDQzOlxcdFxcbjUwNDQ6XFx0XFxuNTA0NTpcXHRzdGF0aWMgaW50IGt2bV90ZHBfcGFnZV9wcmVmYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSxcXG41MDQ2OlxcdFxcdFxcdFxcdFxcdCB1NjQgZXJyb3JfY29kZSwgdTggKmxldmVsKVxcbjUwNDc6XFx0e1xcbjUwNDg6XFx0XFx0aW50IHI7XFxuNTA0OTpcXHRcXG41MDUwOlxcdFxcdC8qXFxuNTA1MTpcXHRcXHQgKiBSZXN0cmljdCB0byBURFAgcGFnZSBmYXVsdCwgc2luY2UgdGhhdCdzIHRoZSBvbmx5IGNhc2Ugd2hlcmUgdGhlIE1NVVxcbjUwNTI6XFx0XFx0ICogaXMgaW5kZXhlZCBieSBHUEEuXFxuNTA1MzpcXHRcXHQgKi9cXG41MDU0OlxcdFxcdGlmICh2Y3B1LVxcdTAwM2VhcmNoLm1tdS1cXHUwMDNlcGFnZV9mYXVsdCAhPSBrdm1fdGRwX3BhZ2VfZmF1bHQpXFxuNTA1NTpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuNTA1NjpcXHRcXG41MDU3OlxcdFxcdGRvIHtcXG41MDU4OlxcdFxcdFxcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSlcXG41MDU5OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVFI7XFxuNTA2MDpcXHRcXG41MDYxOlxcdFxcdFxcdGlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX1ZNX0RFQUQsIHZjcHUpKVxcbjUwNjI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuNTA2MzpcXHRcXG41MDY0OlxcdFxcdFxcdHIgPSBrdm1fbW11X3JlbG9hZCh2Y3B1KTtcXG41MDY1OlxcdFxcdFxcdGlmIChyKVxcbjUwNjY6XFx0XFx0XFx0XFx0cmV0dXJuIHI7XFxuNTA2NzpcXHRcXG41MDY4OlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjUwNjk6XFx0XFx0XFx0ciA9IGt2bV9tbXVfZG9fcGFnZV9mYXVsdCh2Y3B1LCBncGEsIGVycm9yX2NvZGUsIHRydWUsIE5VTEwsIGxldmVsKTtcXG41MDcwOlxcdFxcdH0gd2hpbGUgKHIgPT0gUkVUX1BGX1JFVFJZKTtcXG41MDcxOlxcdFxcbjUwNzI6XFx0XFx0aWYgKHIgXFx1MDAzYyAwKVxcbjUwNzM6XFx0XFx0XFx0cmV0dXJuIHI7XFxuNTA3NDpcXHRcXG41MDc1OlxcdFxcdHN3aXRjaCAocikge1xcbjUwNzY6XFx0XFx0Y2FzZSBSRVRfUEZfRklYRUQ6XFxuNTA3NzpcXHRcXHRjYXNlIFJFVF9QRl9TUFVSSU9VUzpcXG41MDc4OlxcdFxcdGNhc2UgUkVUX1BGX1dSSVRFX1BST1RFQ1RFRDpcXG41MDc5OlxcdFxcdFxcdHJldHVybiAwO1xcbjUwODA6XFx0XFxuNTA4MTpcXHRcXHRjYXNlIFJFVF9QRl9FTVVMQVRFOlxcbjUwODI6XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuNTA4MzpcXHRcXG41MDg0OlxcdFxcdGNhc2UgUkVUX1BGX1JFVFJZOlxcbjUwODU6XFx0XFx0Y2FzZSBSRVRfUEZfQ09OVElOVUU6XFxuNTA4NjpcXHRcXHRjYXNlIFJFVF9QRl9JTlZBTElEOlxcbjUwODc6XFx0XFx0ZGVmYXVsdDpcXG41MDg4OlxcdFxcdFxcdFdBUk5fT05DRSgxLCBcXFwiY291bGQgbm90IGZpeCBwYWdlIGZhdWx0IGR1cmluZyBwcmVmYXVsdFxcXCIpO1xcbjUwODk6XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuNTA5MDpcXHRcXHR9XFxuNTA5MTpcXHR9XFxuNTA5MjpcXHRcXG41MDkzOlxcdGxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG41MDk0OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKVxcbjUwOTU6XFx0e1xcbjUwOTY6XFx0XFx0dTY0IGVycm9yX2NvZGUgPSBQRkVSUl9HVUVTVF9GSU5BTF9NQVNLO1xcbjUwOTc6XFx0XFx0dTggbGV2ZWwgPSBQR19MRVZFTF80SztcXG41MDk4OlxcdFxcdHU2NCBkaXJlY3RfYml0cztcXG41MDk5OlxcdFxcdHU2NCBlbmQ7XFxuNTEwMDpcXHRcXHRpbnQgcjtcXG41MTAxOlxcdFxcbjUxMDI6XFx0XFx0aWYgKCF2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gucHJlX2ZhdWx0X2FsbG93ZWQpXFxuNTEwMzpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuNTEwNDpcXHRcXG41MTA1OlxcdFxcdGlmIChrdm1faXNfZ2ZuX2FsaWFzKHZjcHUtXFx1MDAzZWt2bSwgZ3BhX3RvX2dmbihyYW5nZS1cXHUwMDNlZ3BhKSkpXFxuNTEwNjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG41MTA3OlxcdFxcbjUxMDg6XFx0XFx0ZGlyZWN0X2JpdHMgPSAwO1xcbjUxMDk6XFx0XFx0aWYgKGt2bV9hcmNoX2hhc19wcml2YXRlX21lbSh2Y3B1LVxcdTAwM2Vrdm0pIFxcdTAwMjZcXHUwMDI2XFxuNTExMDpcXHRcXHQgICAga3ZtX21lbV9pc19wcml2YXRlKHZjcHUtXFx1MDAzZWt2bSwgZ3BhX3RvX2dmbihyYW5nZS1cXHUwMDNlZ3BhKSkpXFxuNTExMTpcXHRcXHRcXHRlcnJvcl9jb2RlIHw9IFBGRVJSX1BSSVZBVEVfQUNDRVNTO1xcbjUxMTI6XFx0XFx0ZWxzZVxcbjUxMTM6XFx0XFx0XFx0ZGlyZWN0X2JpdHMgPSBnZm5fdG9fZ3BhKGt2bV9nZm5fZGlyZWN0X2JpdHModmNwdS1cXHUwMDNla3ZtKSk7XFxuNTExNDpcXHRcXG41MTE1OlxcdFxcdC8qXFxuNTExNjpcXHRcXHQgKiBTaGFkb3cgcGFnaW5nIHVzZXMgR1ZBIGZvciBrdm0gcGFnZSBmYXVsdCwgc28gcmVzdHJpY3QgdG9cXG41MTE3OlxcdFxcdCAqIHR3by1kaW1lbnNpb25hbCBwYWdpbmcuXFxuNTExODpcXHRcXHQgKi9cXG41MTE5OlxcdFxcdHIgPSBrdm1fdGRwX3BhZ2VfcHJlZmF1bHQodmNwdSwgcmFuZ2UtXFx1MDAzZWdwYSB8IGRpcmVjdF9iaXRzLCBlcnJvcl9jb2RlLCBcXHUwMDI2bGV2ZWwpO1xcbjUxMjA6XFx0XFx0aWYgKHIgXFx1MDAzYyAwKVxcbjUxMjE6XFx0XFx0XFx0cmV0dXJuIHI7XFxuNTEyMjpcXHRcXG41MTIzOlxcdFxcdC8qXFxuNTEyNDpcXHRcXHQgKiBJZiB0aGUgbWFwcGluZyB0aGF0IGNvdmVycyByYW5nZS1cXHUwMDNlZ3BhIGNhbiB1c2UgYSBodWdlIHBhZ2UsIGl0XFxuNTEyNTpcXHRcXHQgKiBtYXkgc3RhcnQgYmVsb3cgaXQgb3IgZW5kIGFmdGVyIHJhbmdlLVxcdTAwM2VncGEgKyByYW5nZS1cXHUwMDNlc2l6ZS5cXG41MTI2OlxcdFxcdCAqL1xcbjUxMjc6XFx0XFx0ZW5kID0gKHJhbmdlLVxcdTAwM2VncGEgXFx1MDAyNiBLVk1fSFBBR0VfTUFTSyhsZXZlbCkpICsgS1ZNX0hQQUdFX1NJWkUobGV2ZWwpO1xcbjUxMjg6XFx0XFx0cmV0dXJuIG1pbihyYW5nZS1cXHUwMDNlc2l6ZSwgZW5kIC0gcmFuZ2UtXFx1MDAzZWdwYSk7XFxuNTEyOTpcXHR9XFxuNTEzMDpcXHRcXG41MTMxOlxcdHZvaWQga3ZtX2FyY2hfYXN5bmNfcGFnZV9yZWFkeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fYXN5bmNfcGYgKndvcmspXFxuNTEzMjpcXHR7XFxuNTEzMzpcXHRcXHRpbnQgcjtcXG41MTM0OlxcdFxcbjUxMzU6XFx0XFx0aWYgKFdBUk5fT05fT05DRSh3b3JrLVxcdTAwM2VhcmNoLmVycm9yX2NvZGUgXFx1MDAyNiBQRkVSUl9QUklWQVRFX0FDQ0VTUykpXFxuNTEzNjpcXHRcXHRcXHRyZXR1cm47XFxuNTEzNzpcXHRcXG41MTM4OlxcdFxcdGlmICgodmNwdS1cXHUwMDNlYXJjaC5tbXUtXFx1MDAzZXJvb3Rfcm9sZS5kaXJlY3QgIT0gd29yay1cXHUwMDNlYXJjaC5kaXJlY3RfbWFwKSB8fFxcbjUxMzk6XFx0XFx0ICAgICAgd29yay1cXHUwMDNld2FrZXVwX2FsbClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDM6NDcuMDU5ODg5MzA0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMzIyMDk3NzQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBLVk0gTU1VIFJlbG9hZCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgZml4aW5nIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGluIGBrdm1fbW11X3JlbG9hZGAuIFRoZSBjb3JlIGlzc3VlIGlzIHRoYXQgYGt2bV9tbXVfcmVsb2FkYCB3YXMgYmVpbmcgY2FsbGVkIG91dHNpZGUgdGhlIHJldHJ5IGxvb3AsIHdoaWNoLCBpZiB0aGUgbG9vcCByZXRyaWVkLCBjb3VsZCByZXN1bHQgaW4gdGhlIGxvb3AgdXNpbmcgYW4gb3V0ZGF0ZWQgTU1VIHJvb3Qgb3IgcG90ZW50aWFsbHkgYW4gaW52YWxpZCBzdGF0ZS4gSSBpbml0aWFsbHkgdGhvdWdodCB0aGVyZSBtaWdodCBiZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSwgYnV0IGFmdGVyIHRoaW5raW5nIGFib3V0IGl0LCB0aGF0J3Mgbm90IHRoZSBjYXNlLiBga3ZtX21tdV9yZWxvYWRgIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSBNTVUgcm9vdCwgc28gdGhlIHByb2JsZW0gaXMgdGhhdCBpZiBpdCdzICpub3QqIGNhbGxlZCB3aXRoaW4gdGhlIGxvb3AgYW5kIHRoZSByb290IGJlY29tZXMgb2Jzb2xldGUgZHVlIHRvIGFuIGludmFsaWRhdGlvbiBkdXJpbmcgdGhlIGxvb3AsIHdlIGNvdWxkIGhhdmUgYSByZXRyeSB0aGF0J3Mgb3BlcmF0aW5nIG9uIHN0YWxlIGRhdGEuIFRoZSByZXN1bHRpbmcgYmVoYXZpb3IgaXMgYSBsb2dpYyBidWcgdGhhdCBjb3VsZCBsZWFkIHRvIG5hc3R5IGlzc3VlcyDigJMgdXNlLWFmdGVyLWZyZWUsIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlLCBvciBwb3NzaWJseSBhbiBpbmZpbml0ZSBsb29wLiBCdXQgZGVmaW5pdGVseSBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cbkkgdGhlbiBoYWQgdG8gZG91YmxlIGNoZWNrIGFib3V0IHRoZSBgZmF1bHRgIHN0cnVjdCB0byBzZWUgaWYgdGhlIHBhdGNoIGludHJvZHVjZWQgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBCdXQsIG5vLCBgc3RydWN0IGt2bV9wYWdlX2ZhdWx0IGZhdWx0ID0geyAuLi4gfTtgIG1lYW5zIHRoYXQgYW55IG1pc3NpbmcgZmllbGRzIGluIHRoZSBpbml0aWFsaXplciBsaXN0IGFyZSB6ZXJvLWluaXRpYWxpemVkLiBTbywgaXQncyBmdWxseSBpbml0aWFsaXplZC5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXNuJ3QgbmVlZCBLTVNBTi4gSXQgc2hvdWxkIGJlIGRldGVjdGFibGUgYnkgS0FTQU4vTE9DS0RFUC9zdGFuZGFyZCB0ZXN0aW5nIG9yIHdvdWxkIGhhdmUgYmVlbiBmb3VuZCBpbiB0ZXN0aW5nIHRoYXQgZml4ZWQgYSBrbm93biBidWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2OTksIk91dHB1dFRva2VucyI6MTY0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDQ6NDAuMzgxOTkwNjI5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb3ZlcyBNTVUgcmVsb2FkIGFuZCBjYWNoZSB0b3AtdXAgZnVuY3Rpb25zIGluc2lkZSB0aGUgcmV0cnkgbG9vcHMgZm9yIEtWTSBwYWdlIGZhdWx0IGhhbmRsaW5nIChga3ZtX3RkcF9wYWdlX3ByZWZhdWx0YCBhbmQgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmApLiBUaGlzIGZpeGVzIGEgbG9naWMgYnVnIHdoZXJlIGEgY29uY3VycmVudCBpbnZhbGlkYXRpb24gY291bGQgY2F1c2UgdGhlIGxvb3AgdG8gcmV0cnkgd2l0aG91dCByZWxvYWRpbmcgdGhlIE1NVSByb290LCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGFuIG9ic29sZXRlIHJvb3QgYmVpbmcgdXNlZC4gVGhlIGBmYXVsdGAgc3RydWN0dXJlIGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgZm9yIGFueSB1bnNwZWNpZmllZCBmaWVsZHMuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGlzIHBhdGNoLiBBbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIGFyaXNpbmcgZnJvbSBvYnNvbGV0ZSByb290cyB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgTU1VIHJlbG9hZCBhbmQgY2FjaGUgdG9wLXVwIGZ1bmN0aW9ucyBpbnNpZGUgdGhlIHJldHJ5IGxvb3BzIGZvciBLVk0gcGFnZSBmYXVsdCBoYW5kbGluZyAoYGt2bV90ZHBfcGFnZV9wcmVmYXVsdGAgYW5kIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gKS4gVGhpcyBmaXhlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBhIGNvbmN1cnJlbnQgaW52YWxpZGF0aW9uIGNvdWxkIGNhdXNlIHRoZSBsb29wIHRvIHJldHJ5IHdpdGhvdXQgcmVsb2FkaW5nIHRoZSBNTVUgcm9vdCwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBhbiBvYnNvbGV0ZSByb290IGJlaW5nIHVzZWQuIFRoZSBgZmF1bHRgIHN0cnVjdHVyZSBpcyBmdWxseSB6ZXJvLWluaXRpYWxpemVkIGZvciBhbnkgdW5zcGVjaWZpZWQgZmllbGRzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBwYXRjaC4gQW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBhcmlzaW5nIGZyb20gb2Jzb2xldGUgcm9vdHMgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8b87c[1] Phase: Succeeded StartedAt: 2026-08-26 17:04:52 +0000 UTC FinishedAt: 2026-08-26 17:04:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8b87c[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-26 17:04:52 +0000 UTC FinishedAt: 2026-08-26 17:04:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8b87c[2] Phase: Succeeded StartedAt: 2026-08-26 17:04:52 +0000 UTC FinishedAt: 2026-08-26 20:51:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8b87c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_tdp_mmu_map_private_pfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"f9bde65e-70a3-49d7-ad87-48528c7b94bf","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 17:04:52 +0000 UTC FinishedAt: 2026-08-26 20:51:14 +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"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_tdp_mmu_map_private_pfn"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"f9bde65e-70a3-49d7-ad87-48528c7b94bf","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-workflow8b87c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_tdp_mmu_map_private_pfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"f9bde65e-70a3-49d7-ad87-48528c7b94bf","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 17:04:52 +0000 UTC FinishedAt: 2026-08-26 17:05:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8b87c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_tdp_mmu_map_private_pfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"f9bde65e-70a3-49d7-ad87-48528c7b94bf","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 17:04:52 +0000 UTC FinishedAt: 2026-08-26 17:04:56 +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"],"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-workflow8b87c/series-workflow8b87c-convert-artifact-3150269106/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8b87c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_tdp_mmu_map_private_pfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"f9bde65e-70a3-49d7-ad87-48528c7b94bf","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 17:05:02 +0000 UTC FinishedAt: 2026-08-26 17:22:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8b87c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_tdp_mmu_map_private_pfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"f9bde65e-70a3-49d7-ad87-48528c7b94bf","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 17:05:02 +0000 UTC FinishedAt: 2026-08-26 17:22:10 +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:*6e58e8d9-4a6c-4a81-82e6-c99f055dc8f9,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-workflow8b87c/series-workflow8b87c-convert-artifact-3150269106/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": "2020c1c1-879e-460f-8c39-db3dd21a539a", "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-workflow8b87c/series-workflow8b87c-build-action-1329699888/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8b87c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_tdp_mmu_map_private_pfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"f9bde65e-70a3-49d7-ad87-48528c7b94bf","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 17:05:02 +0000 UTC FinishedAt: 2026-08-26 17:22:00 +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:*6e58e8d9-4a6c-4a81-82e6-c99f055dc8f9,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-workflow8b87c/series-workflow8b87c-convert-artifact-3150269106/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": "2020c1c1-879e-460f-8c39-db3dd21a539a", "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-workflow8b87c/series-workflow8b87c-build-action-1329699888/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8b87c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_tdp_mmu_map_private_pfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"f9bde65e-70a3-49d7-ad87-48528c7b94bf","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 17:22:10 +0000 UTC FinishedAt: 2026-08-26 17:22:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8b87c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_tdp_mmu_map_private_pfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"f9bde65e-70a3-49d7-ad87-48528c7b94bf","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 17:22:10 +0000 UTC FinishedAt: 2026-08-26 17:22:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8b87c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_tdp_mmu_map_private_pfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"f9bde65e-70a3-49d7-ad87-48528c7b94bf","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 17:22:10 +0000 UTC FinishedAt: 2026-08-26 17:22:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8b87c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_tdp_mmu_map_private_pfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"f9bde65e-70a3-49d7-ad87-48528c7b94bf","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 17:22:10 +0000 UTC FinishedAt: 2026-08-26 17:22:17 +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"],"series_id":"f9bde65e-70a3-49d7-ad87-48528c7b94bf","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-workflow8b87c/series-workflow8b87c-convert-artifact-4218524109/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8b87c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_tdp_mmu_map_private_pfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"f9bde65e-70a3-49d7-ad87-48528c7b94bf","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 17:22:21 +0000 UTC FinishedAt: 2026-08-26 17:24:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8b87c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_tdp_mmu_map_private_pfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"f9bde65e-70a3-49d7-ad87-48528c7b94bf","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 17:22:21 +0000 UTC FinishedAt: 2026-08-26 17:24:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2020c1c1-879e-460f-8c39-db3dd21a539a,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-workflow8b87c/series-workflow8b87c-build-action-1329699888/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-workflow8b87c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_tdp_mmu_map_private_pfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"f9bde65e-70a3-49d7-ad87-48528c7b94bf","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 17:24:25 +0000 UTC FinishedAt: 2026-08-26 17:24:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8b87c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_tdp_mmu_map_private_pfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"f9bde65e-70a3-49d7-ad87-48528c7b94bf","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 17:24:25 +0000 UTC FinishedAt: 2026-08-26 17:24:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8b87c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_tdp_mmu_map_private_pfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"f9bde65e-70a3-49d7-ad87-48528c7b94bf","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 17:24:25 +0000 UTC FinishedAt: 2026-08-26 17:46:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8b87c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_tdp_mmu_map_private_pfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"f9bde65e-70a3-49d7-ad87-48528c7b94bf","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 17:24:25 +0000 UTC FinishedAt: 2026-08-26 17:46:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*6e58e8d9-4a6c-4a81-82e6-c99f055dc8f9,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-workflow8b87c/series-workflow8b87c-convert-artifact-4218524109/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": "06b6ed02-76fb-42a2-9b9d-3c2539f2f17a", "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-workflow8b87c/series-workflow8b87c-build-action-76070825/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8b87c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_tdp_mmu_map_private_pfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"f9bde65e-70a3-49d7-ad87-48528c7b94bf","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 17:24:25 +0000 UTC FinishedAt: 2026-08-26 17:46:47 +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:*6e58e8d9-4a6c-4a81-82e6-c99f055dc8f9,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-workflow8b87c/series-workflow8b87c-convert-artifact-4218524109/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": "06b6ed02-76fb-42a2-9b9d-3c2539f2f17a", "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-workflow8b87c/series-workflow8b87c-build-action-76070825/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8b87c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_tdp_mmu_map_private_pfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"f9bde65e-70a3-49d7-ad87-48528c7b94bf","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 17:46:58 +0000 UTC FinishedAt: 2026-08-26 17:46:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8b87c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_tdp_mmu_map_private_pfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"f9bde65e-70a3-49d7-ad87-48528c7b94bf","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 17:46:58 +0000 UTC FinishedAt: 2026-08-26 17:46:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8b87c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_tdp_mmu_map_private_pfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"f9bde65e-70a3-49d7-ad87-48528c7b94bf","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 17:46:58 +0000 UTC FinishedAt: 2026-08-26 17:49:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8b87c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_tdp_mmu_map_private_pfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"f9bde65e-70a3-49d7-ad87-48528c7b94bf","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 17:46:58 +0000 UTC FinishedAt: 2026-08-26 17:48:55 +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:*06b6ed02-76fb-42a2-9b9d-3c2539f2f17a,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-workflow8b87c/series-workflow8b87c-build-action-76070825/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-workflow8b87c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_tdp_mmu_map_private_pfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"f9bde65e-70a3-49d7-ad87-48528c7b94bf","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 17:49:50 +0000 UTC FinishedAt: 2026-08-26 20:51:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8b87c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_tdp_mmu_map_private_pfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"f9bde65e-70a3-49d7-ad87-48528c7b94bf","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 17:49:50 +0000 UTC FinishedAt: 2026-08-26 20:51:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_tdp_mmu_map_private_pfn"],"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:*2020c1c1-879e-460f-8c39-db3dd21a539a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*06b6ed02-76fb-42a2-9b9d-3c2539f2f17a,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-workflow8b87c/series-workflow8b87c-build-action-1329699888/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-workflow8b87c/series-workflow8b87c-build-action-76070825/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8b87c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_tdp_mmu_map_private_pfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"f9bde65e-70a3-49d7-ad87-48528c7b94bf","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 17:49:50 +0000 UTC FinishedAt: 2026-08-26 17:50:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8b87c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_tdp_mmu_map_private_pfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"f9bde65e-70a3-49d7-ad87-48528c7b94bf","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 17:49:50 +0000 UTC FinishedAt: 2026-08-26 17:49:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_tdp_mmu_map_private_pfn"],"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-workflow8b87c/series-workflow8b87c-convert-artifact-3220657842/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8b87c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_tdp_mmu_map_private_pfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"f9bde65e-70a3-49d7-ad87-48528c7b94bf","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 17:49:50 +0000 UTC FinishedAt: 2026-08-26 17:49:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8b87c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_tdp_mmu_map_private_pfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"f9bde65e-70a3-49d7-ad87-48528c7b94bf","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 17:49:50 +0000 UTC FinishedAt: 2026-08-26 17:49:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8b87c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_tdp_mmu_map_private_pfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"f9bde65e-70a3-49d7-ad87-48528c7b94bf","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 17:49:50 +0000 UTC FinishedAt: 2026-08-26 17:49:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8b87c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_tdp_mmu_map_private_pfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"f9bde65e-70a3-49d7-ad87-48528c7b94bf","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 17:50:03 +0000 UTC FinishedAt: 2026-08-26 20:51:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8b87c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_tdp_mmu_map_private_pfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"f9bde65e-70a3-49d7-ad87-48528c7b94bf","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 17:50:03 +0000 UTC FinishedAt: 2026-08-26 20:51:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2020c1c1-879e-460f-8c39-db3dd21a539a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*06b6ed02-76fb-42a2-9b9d-3c2539f2f17a,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-workflow8b87c/series-workflow8b87c-build-action-1329699888/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-workflow8b87c/series-workflow8b87c-build-action-76070825/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-workflow8b87c/series-workflow8b87c-convert-artifact-3220657842/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,}