Name: series-workflow5lf4d Phase: Succeeded StartedAt: 2026-08-07 01:19:14 +0000 UTC FinishedAt: 2026-08-07 05:14:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5lf4d[0] Phase: Succeeded StartedAt: 2026-08-07 01:19:14 +0000 UTC FinishedAt: 2026-08-07 01:22:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5lf4d[0].run-triage Phase: Succeeded StartedAt: 2026-08-07 01:19:14 +0000 UTC FinishedAt: 2026-08-07 01:22:44 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-x86", "tree_url": "https://github.com/kvm-x86/linux.git", "commit_hash": "a806d364ef288a6443a1337820ea8410a7ccc6b3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "INTEL_TDX_HOST", "KVM_INTEL_TDX" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-x86", "tree_url": "https://github.com/kvm-x86/linux.git", "commit_hash": "a806d364ef288a6443a1337820ea8410a7ccc6b3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "INTEL_TDX_HOST", "KVM_INTEL_TDX" ], "series_id": "f84e1d53-bc1a-48ad-8913-c9a8e28e4dd3" }, "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+CgkJCTx0ZD4yMDI2LzA4LzA3IDAxOjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7SU5URUxfVERYX0hPU1QmIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMX1REWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSYjMzQ7LAogICAgJiMzNDtrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIE1NVSBwYWdlIHByZS1mYXVsdGluZyBhbmQgcHJpdmF0ZSBQRk4gbWFwcGluZyBsb2dpYyB0byBjb3JyZWN0bHkgcmVsb2FkIHRoZSBNTVUgaW5zaWRlIHJldHJ5IGxvb3BzLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBpc3N1ZXMgd2hlbiBNTVUgcm9vdHMgYXJlIGludmFsaWRhdGVkIGNvbmN1cnJlbnRseS4gVGhlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBLVk0gaW9jdGxzIChLVk1fUFJFX0ZBVUxUX01FTU9SWSkgYW5kIFREWCBndWVzdCBtZW1vcnkgcG9wdWxhdGlvbiwgbWFraW5nIGl0IGZ1bmN0aW9uYWwgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDE6MjE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyMjk0MTdjOGNlZjk3ZDYyYzRiOGI4NTVkMzQ0ZTViOGQ0YzFmYWJhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAwMToyMTowMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuaW5kZXggYzUxOWU4ZThkNjQ2Zi4uNzZlM2NkNzE3MzI0YiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbkBAIC01MDM2LDYgJiM0Mzs1MDM2LDEwIEBAIHN0YXRpYyBpbnQga3ZtX3RkcF9wYWdlX3ByZWZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLFxuIFx0XHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9WTV9ERUFELCB2Y3B1KSlcbiBcdFx0XHRyZXR1cm4gLUVJTztcbiBcbiYjNDM7XHRcdHIgPSBrdm1fbW11X3JlbG9hZCh2Y3B1KTtcbiYjNDM7XHRcdGlmIChyKVxuJiM0MztcdFx0XHRyZXR1cm4gcjtcbiYjNDM7XG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0XHRyID0ga3ZtX21tdV9kb19wYWdlX2ZhdWx0KHZjcHUsIGdwYSwgZXJyb3JfY29kZSwgdHJ1ZSwgTlVMTCwgbGV2ZWwpO1xuIFx0fSB3aGlsZSAociA9PSBSRVRfUEZfUkVUUlkpO1xuQEAgLTUwNzYsMTQgJiM0Mzs1MDgwLDYgQEAgbG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0aWYgKGt2bV9pc19nZm5fYWxpYXModmNwdS1cdTAwM2Vrdm0sIGdwYV90b19nZm4ocmFuZ2UtXHUwMDNlZ3BhKSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0Lypcbi1cdCAqIHJlbG9hZCBpcyBlZmZpY2llbnQgd2hlbiBjYWxsZWQgcmVwZWF0ZWRseSwgc28gd2UgY2FuIGRvIGl0IG9uXG4tXHQgKiBldmVyeSBpdGVyYXRpb24uXG4tXHQgKi9cbi1cdHIgPSBrdm1fbW11X3JlbG9hZCh2Y3B1KTtcbi1cdGlmIChyKVxuLVx0XHRyZXR1cm4gcjtcbi1cbiBcdGRpcmVjdF9iaXRzID0gMDtcbiBcdGlmIChrdm1fYXJjaF9oYXNfcHJpdmF0ZV9tZW0odmNwdS1cdTAwM2Vrdm0pIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGt2bV9tZW1faXNfcHJpdmF0ZSh2Y3B1LVx1MDAzZWt2bSwgZ3BhX3RvX2dmbihyYW5nZS1cdTAwM2VncGEpKSlcbkBAIC01MTg4LDE0ICYjNDM7NTE4NCw2IEBAIGludCBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4pXG4gXHRpZiAoa3ZtX2dmbl9pc193cml0ZV90cmFja2VkKGt2bSwgZmF1bHQuc2xvdCwgZmF1bHQuZ2ZuKSlcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbiBcbi1cdHIgPSBrdm1fbW11X3JlbG9hZCh2Y3B1KTtcbi1cdGlmIChyKVxuLVx0XHRyZXR1cm4gcjtcbi1cbi1cdHIgPSBtbXVfdG9wdXBfbWVtb3J5X2NhY2hlcyh2Y3B1LCBmYWxzZSk7XG4tXHRpZiAocilcbi1cdFx0cmV0dXJuIHI7XG4tXG4gXHRkbyB7XG4gXHRcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSlcbiBcdFx0XHRyZXR1cm4gLUVJTlRSO1xuQEAgLTUyMDMsMTAgJiM0Mzs1MTkxLDM1IEBAIGludCBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4pXG4gXHRcdGlmIChrdm1fdGVzdF9yZXF1ZXN0KEtWTV9SRVFfVk1fREVBRCwgdmNwdSkpXG4gXHRcdFx0cmV0dXJuIC1FSU87XG4gXG4mIzQzO1x0XHRyID0ga3ZtX21tdV9yZWxvYWQodmNwdSk7XG4mIzQzO1x0XHRpZiAocilcbiYjNDM7XHRcdFx0cmV0dXJuIHI7XG4mIzQzO1xuJiM0MztcdFx0ciA9IG1tdV90b3B1cF9tZW1vcnlfY2FjaGVzKHZjcHUsIGZhbHNlKTtcbiYjNDM7XHRcdGlmIChyKVxuJiM0MztcdFx0XHRyZXR1cm4gcjtcbiYjNDM7XG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFxuIFx0XHRndWFyZChyZWFkX2xvY2spKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4gXG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogQmVjYXVzZSBzbG90c19sb2NrIGlzIGhlbGQsIGl0IHNob3VsZCBiZSBpbXBvc3NpYmxlIGZvciByb290c1xuJiM0MztcdFx0ICogdG8gYmUgaW52YWxpZGF0ZWQgYWZ0ZXIgdGhlIGluaXRpYWwgTU1VIHJlbG9hZC4gIFdBUk4sIGJ1dFxuJiM0MztcdFx0ICogY29udGludWUgYW5kIHJlLXJlbG9hZCB0aGUgTU1VIHRvIHRyeSBhbmQga2VlcCB0aGUgVk0gYWxpdmUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdFdBUk5fT05fT05DRShrdm1fdGVzdF9yZXF1ZXN0KEtWTV9SRVFfTU1VX0ZSRUVfT0JTT0xFVEVfUk9PVFMsIHZjcHUpKTtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogU25hcHNob3QgdGhlIGludmFsaWRhdGlvbiBzZXF1ZW5jZSBjb3VudGVyIGFmdGVyIGFjcXVpcmluZ1xuJiM0MztcdFx0ICogbW11X2xvY2ssIGFzIGd1ZXN0X21lbWZkIGd1YXJhbnRlZXMgdGhlIHZhbGlkaXR5IG9mIHRoZSBwZm4sXG4mIzQzO1x0XHQgKiBpLmUuIGFueSBjb25jdXJyZW50IGludmFsaWRhdGlvbnMgYXJlIGd1YXJhbnRlZWQgdG8gYmVcbiYjNDM7XHRcdCAqIGlycmVsZXZhbnQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGZhdWx0Lm1tdV9zZXEgPSB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXE7XG4mIzQzO1x0XHRpZiAoaXNfcGFnZV9mYXVsdF9zdGFsZSh2Y3B1LCBcdTAwMjZmYXVsdCkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiBcdFx0ciA9IGt2bV90ZHBfbW11X21hcCh2Y3B1LCBcdTAwMjZmYXVsdCk7XG4gXHR9IHdoaWxlIChyID09IFJFVF9QRl9SRVRSWSk7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDE6MjE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7SU5URUxfVERYX0hPU1QmIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMX1REWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSYjMzQ7LAogICAgJiMzNDtrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIE1NVSBwYWdlIHByZS1mYXVsdGluZyBhbmQgcHJpdmF0ZSBQRk4gbWFwcGluZyBsb2dpYyB0byBjb3JyZWN0bHkgcmVsb2FkIHRoZSBNTVUgaW5zaWRlIHJldHJ5IGxvb3BzLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBpc3N1ZXMgd2hlbiBNTVUgcm9vdHMgYXJlIGludmFsaWRhdGVkIGNvbmN1cnJlbnRseS4gVGhlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBLVk0gaW9jdGxzIChLVk1fUFJFX0ZBVUxUX01FTU9SWSkgYW5kIFREWCBndWVzdCBtZW1vcnkgcG9wdWxhdGlvbiwgbWFraW5nIGl0IGZ1bmN0aW9uYWwgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyMjk0MTdjOGNlZjk3ZDYyYzRiOGI4NTVkMzQ0ZTViOGQ0YzFmYWJhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgNyAwMToyMTowMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jCmluZGV4IGM1MTllOGU4ZDY0NmYuLjc2ZTNjZDcxNzMyNGIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL21tdS9tbXUuYwpAQCAtNTAzNiw2ICYjNDM7NTAzNiwxMCBAQCBzdGF0aWMgaW50IGt2bV90ZHBfcGFnZV9wcmVmYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwKIAkJaWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfVk1fREVBRCwgdmNwdSkpCiAJCQlyZXR1cm4gLUVJTzsKIAomIzQzOwkJciA9IGt2bV9tbXVfcmVsb2FkKHZjcHUpOwomIzQzOwkJaWYgKHIpCiYjNDM7CQkJcmV0dXJuIHI7CiYjNDM7CiAJCWNvbmRfcmVzY2hlZCgpOwogCQlyID0ga3ZtX21tdV9kb19wYWdlX2ZhdWx0KHZjcHUsIGdwYSwgZXJyb3JfY29kZSwgdHJ1ZSwgTlVMTCwgbGV2ZWwpOwogCX0gd2hpbGUgKHIgPT0gUkVUX1BGX1JFVFJZKTsKQEAgLTUwNzYsMTQgJiM0Mzs1MDgwLDYgQEAgbG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCWlmIChrdm1faXNfZ2ZuX2FsaWFzKHZjcHUtJmd0O2t2bSwgZ3BhX3RvX2dmbihyYW5nZS0mZ3Q7Z3BhKSkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JLyoKLQkgKiByZWxvYWQgaXMgZWZmaWNpZW50IHdoZW4gY2FsbGVkIHJlcGVhdGVkbHksIHNvIHdlIGNhbiBkbyBpdCBvbgotCSAqIGV2ZXJ5IGl0ZXJhdGlvbi4KLQkgKi8KLQlyID0ga3ZtX21tdV9yZWxvYWQodmNwdSk7Ci0JaWYgKHIpCi0JCXJldHVybiByOwotCiAJZGlyZWN0X2JpdHMgPSAwOwogCWlmIChrdm1fYXJjaF9oYXNfcHJpdmF0ZV9tZW0odmNwdS0mZ3Q7a3ZtKSAmYW1wOyZhbXA7CiAJICAgIGt2bV9tZW1faXNfcHJpdmF0ZSh2Y3B1LSZndDtrdm0sIGdwYV90b19nZm4ocmFuZ2UtJmd0O2dwYSkpKQpAQCAtNTE4OCwxNCAmIzQzOzUxODQsNiBAQCBpbnQga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuKQogCWlmIChrdm1fZ2ZuX2lzX3dyaXRlX3RyYWNrZWQoa3ZtLCBmYXVsdC5zbG90LCBmYXVsdC5nZm4pKQogCQlyZXR1cm4gLUVQRVJNOwogCi0JciA9IGt2bV9tbXVfcmVsb2FkKHZjcHUpOwotCWlmIChyKQotCQlyZXR1cm4gcjsKLQotCXIgPSBtbXVfdG9wdXBfbWVtb3J5X2NhY2hlcyh2Y3B1LCBmYWxzZSk7Ci0JaWYgKHIpCi0JCXJldHVybiByOwotCiAJZG8gewogCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiAJCQlyZXR1cm4gLUVJTlRSOwpAQCAtNTIwMywxMCAmIzQzOzUxOTEsMzUgQEAgaW50IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbikKIAkJaWYgKGt2bV90ZXN0X3JlcXVlc3QoS1ZNX1JFUV9WTV9ERUFELCB2Y3B1KSkKIAkJCXJldHVybiAtRUlPOwogCiYjNDM7CQlyID0ga3ZtX21tdV9yZWxvYWQodmNwdSk7CiYjNDM7CQlpZiAocikKJiM0MzsJCQlyZXR1cm4gcjsKJiM0MzsKJiM0MzsJCXIgPSBtbXVfdG9wdXBfbWVtb3J5X2NhY2hlcyh2Y3B1LCBmYWxzZSk7CiYjNDM7CQlpZiAocikKJiM0MzsJCQlyZXR1cm4gcjsKJiM0MzsKIAkJY29uZF9yZXNjaGVkKCk7CiAKIAkJZ3VhcmQocmVhZF9sb2NrKSgmYW1wO2t2bS0mZ3Q7bW11X2xvY2spOwogCiYjNDM7CQkvKgomIzQzOwkJICogQmVjYXVzZSBzbG90c19sb2NrIGlzIGhlbGQsIGl0IHNob3VsZCBiZSBpbXBvc3NpYmxlIGZvciByb290cwomIzQzOwkJICogdG8gYmUgaW52YWxpZGF0ZWQgYWZ0ZXIgdGhlIGluaXRpYWwgTU1VIHJlbG9hZC4gIFdBUk4sIGJ1dAomIzQzOwkJICogY29udGludWUgYW5kIHJlLXJlbG9hZCB0aGUgTU1VIHRvIHRyeSBhbmQga2VlcCB0aGUgVk0gYWxpdmUuCiYjNDM7CQkgKi8KJiM0MzsJCVdBUk5fT05fT05DRShrdm1fdGVzdF9yZXF1ZXN0KEtWTV9SRVFfTU1VX0ZSRUVfT0JTT0xFVEVfUk9PVFMsIHZjcHUpKTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBTbmFwc2hvdCB0aGUgaW52YWxpZGF0aW9uIHNlcXVlbmNlIGNvdW50ZXIgYWZ0ZXIgYWNxdWlyaW5nCiYjNDM7CQkgKiBtbXVfbG9jaywgYXMgZ3Vlc3RfbWVtZmQgZ3VhcmFudGVlcyB0aGUgdmFsaWRpdHkgb2YgdGhlIHBmbiwKJiM0MzsJCSAqIGkuZS4gYW55IGNvbmN1cnJlbnQgaW52YWxpZGF0aW9ucyBhcmUgZ3VhcmFudGVlZCB0byBiZQomIzQzOwkJICogaXJyZWxldmFudC4KJiM0MzsJCSAqLwomIzQzOwkJZmF1bHQubW11X3NlcSA9IHZjcHUtJmd0O2t2bS0mZ3Q7bW11X2ludmFsaWRhdGVfc2VxOwomIzQzOwkJaWYgKGlzX3BhZ2VfZmF1bHRfc3RhbGUodmNwdSwgJmFtcDtmYXVsdCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiAJCXIgPSBrdm1fdGRwX21tdV9tYXAodmNwdSwgJmFtcDtmYXVsdCk7CiAJfSB3aGlsZSAociA9PSBSRVRfUEZfUkVUUlkpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAxOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NzkKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAyOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS1ZNL3g4NiBQYXRjaCBhbmQgaXRzIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHNlZW1zIHRvIGJlIHRvdWNoaW5nIHRoZSB4ODYgS1ZNIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIHNwZWNpZmljYWxseSBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AuIFRoZSBjaGFuZ2VzIGFyZSBmb2N1c2VkIG9uIHRoZXNlIGZ1bmN0aW9uczogYGt2bV90ZHBfcGFnZV9wcmVmYXVsdGAsIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLCBhbmQgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgbGlrZWx5IGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIG9yIGEgZml4IHJlbGF0ZWQgdG8gcGFnZSBmYXVsdCBoYW5kbGluZyBpbiB0aGUgVERQIChUYWdnZWQgRGF0YSBQb2ludGVyKSBNTVUgaW1wbGVtZW50YXRpb24uCgpUaGUga2V5IGNoYW5nZSBJJiMzOTttIHNlZWluZyBpcyB0aGUgcmVsb2NhdGlvbiBvZiBga3ZtX21tdV9yZWxvYWQodmNwdSlgIGluc2lkZSB0aGUgYGRvLi4ud2hpbGVgIGxvb3AgaW4gYGt2bV90ZHBfcGFnZV9wcmVmYXVsdGAgYW5kIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gLiBUaGlzIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIHRoZXkmIzM5O3JlIHRyeWluZyB0byByZWZpbmUgdGhlIHJldHJ5IGxvZ2ljIG9uIHBhZ2UgZmF1bHRzIHRvIGVuc3VyZSB0aGUgTU1VIHN0YXRlIGlzIHVwLXRvLWRhdGUgYWZ0ZXIgZWFjaCBhdHRlbXB0LiBJdCYjMzk7cyBnb29kIHByYWN0aWNlIHRvIHJlLWV2YWx1YXRlIHRoZSBNTVUgc3RhdGUsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgbmVzdGVkIHBhZ2luZy4KCkFsc28sIG1vdmluZyBgbW11X3RvcHVwX21lbW9yeV9jYWNoZXModmNwdSwgZmFsc2UpYCBpbnRvIHRoZSBsb29wIHdpdGhpbiBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYCBzdWdnZXN0cyBhbiBlZmZvcnQgdG8gaW1wcm92ZSB0aGUgY2FjaGUgaGl0IHJhdGUgZHVyaW5nIHRoZSBmYXVsdCBoYW5kbGluZyBwcm9jZXNzLCB3aGljaCBpcyBhIGNvbW1vbiBwZXJmb3JtYW5jZSBib3R0bGVuZWNrIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhpcyBpcyBhIHZlcnkgdGFyZ2V0ZWQgYXBwcm9hY2ggdG8gZGVhbGluZyB3aXRoIHRoZSBDUFUgY2FjaGUuCgpUaGUgYWRkaXRpb24gb2YgdGhlIGBXQVJOX09OX09OQ0VgIGFuZCBgaXNfcGFnZV9mYXVsdF9zdGFsZWAgY2hlY2sgaW4gYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAgaXMgYSBzaWduYWwgb2YgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgZXJyb3IgY29uZGl0aW9uIHRoZSBkZXZlbG9wZXJzIGFyZSB0cnlpbmcgdG8gZGV0ZWN0IGFuZCBhZGRyZXNzLiBJdCYjMzk7cyBhIHVzZWZ1bCBkZWJ1Z2dpbmcgdG9vbCB0byBwcmV2ZW50IHRoZSBzeXN0ZW0gZnJvbSBnZXR0aW5nIGludG8gYSBiYWQgc3RhdGUuCgpCZWZvcmUgSSBkZWx2ZSBkZWVwZXIgaW50byB0aGUgY29kZSBpdHNlbGYsIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIEtWTSBjb25maWd1cmF0aW9ucywgYXMgYENPTkZJR19LVk1gIGlzIGZ1bmRhbWVudGFsIHRvIGFueSBLVk0gb3BlcmF0aW9uIG9uIHg4Ni4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlIHBhdGNoLgoKSSB3aWxsIHBlcmZvcm0gYSBncmVwIHNlYXJjaCBmb3IgdGhlIGZ1bmN0aW9uIG5hbWVzIHdpdGhpbiB0aGUgS1ZNIHNvdXJjZSB0byBncmFzcCB0aGVpciBpbnRlcmRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fdGRwX3BhZ2VfcHJlZmF1bHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvbW11LmM9NDk1NT1zdGF0aWMgaW50IGt2bV9tbXVfZG9fcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MDE5LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MDIwOnN0YXRpYyBpbnQga3ZtX3RkcF9wYWdlX3ByZWZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MDIxLVx0XHRcdFx0IHU2NCBlcnJvcl9jb2RlLCB1OCAqbGV2ZWwpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz01MDY4PWxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUwOTMtXHQgKi9cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTA5NDpcdHIgPSBrdm1fdGRwX3BhZ2VfcHJlZmF1bHQodmNwdSwgcmFuZ2UtXHUwMDNlZ3BhIHwgZGlyZWN0X2JpdHMsIGVycm9yX2NvZGUsIFx1MDAyNmxldmVsKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTA5NS1cdGlmIChyIFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAxOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxNjIKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpZ2dpbmcgaW50byBLVk0mIzM5O3MgVHJhbnNsYXRpb24gUHJvY2VzcyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gaG93IEtWTSBoYW5kbGVzIGl0cyBtZW1vcnkgbWFwcGluZywgYW5kIHNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgdHJhbnNsYXRpb24gcHJvY2Vzcy4gVGhhdCAmIzM0O3ByaXZhdGUgcGFnZSBmcmFtZSBudW1iZXIsJiMzNDsgb3IgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAsIHRoYXQmIzM5O3MgdGhlIGtleSBoZXJlLiBJdCYjMzk7cyBhIHZlcnkgc3BlY2lmaWMgZnVuY3Rpb24gbmFtZSwgd2hpY2ggdGVsbHMgbWUgSSYjMzk7bSBsaWtlbHkgZGVhbGluZyB3aXRoIHRoZSAmIzM0O1RyYW5zbGF0aW9uIExvb2thc2lkZSBCdWZmZXIgKFRMQikgYW5kIHBhZ2UgdGFibGUgd2FsayYjMzQ7IHByb2Nlc3MuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgJiMzNDtwcml2YXRlJiMzNDsgaXMgaW50cmlndWluZzsgd2hhdCBpcyB0aGF0IHByaXZhdGUgdG8/IElzIGl0IHByaXZhdGUgdG8gdGhlIFZNLCBwcml2YXRlIHRvIGEgc3BlY2lmaWMgdkNQVSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBgcGZuYCBwYXJ0IGlzIGNsZWFybHkgcmVsYXRlZCB0byBwYWdlIGZyYW1lIG51bWJlcnMsIHN1Z2dlc3RpbmcgSSYjMzk7bSBvbiB0aGUgcmlnaHQgdHJhY2sgZXhwbG9yaW5nIHRoZSBwaHlzaWNhbCBtZW1vcnkgYWRkcmVzcyBzcGFjZSBhbmQgaG93IGl0JiMzOTtzIHRyYW5zbGF0ZWQgZm9yIHRoZSB2aXJ0dWFsIG1hY2hpbmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoaXMgbWFwcGluZyB3b3JrcyBhbmQgaG93IGl0IGludGVncmF0ZXMgd2l0aCB0aGUgdW5kZXJseWluZyBoeXBlcnZpc29yJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50LiBJIHN1c3BlY3QgaXQmIzM5O3MgY3JpdGljYWwgdG8gcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5LCBhbmQgYSBkZWVwIHVuZGVyc3RhbmRpbmcgd2lsbCBwcm9iYWJseSB5aWVsZCB2YWx1YWJsZSBpbnNpZ2h0cy4gTGV0JiMzOTtzIGRlbHZlIGluIGFuZCBmaW5kIHNvbWUgYW5zd2Vycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvbW11LmM9NTEzOD1zdGF0aWMgdm9pZCBrdm1fYXNzZXJ0X2dtZW1faW52YWxpZGF0ZV9sb2NrX2hlbGQoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUxNDktXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUxNTA6aW50IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbilcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTE1MS17XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MjMwLX1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTIzMTpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTIzMi0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzYxCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYCBGdW5jdGlvbioqCgpSaWdodCwgc28gYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAgaXMgZXhwb3NlZCBhcyBhbiBpbnRlcm5hbCBmdW5jdGlvbiB3aXRoaW4gS1ZNLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIHVzYWdlLiBHaXZlbiBteSBleHBlcmllbmNlLCBJIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGwgc2l0ZXMgdG8gZGV0ZXJtaW5lIHByZWNpc2VseSB3aGVyZSBpdCYjMzk7cyBiZWluZyBsZXZlcmFnZWQgd2l0aGluIHRoZSBLVk0gYXJjaGl0ZWN0dXJlLiBQaW5wb2ludGluZyB0aGUgY2FsbGVycyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByb2xlIGluIHRoZSBURFAgTU1VJiMzOTtzIG9wZXJhdGlvbiBhbmQgaG93IGl0IGNvbnRyaWJ1dGVzIHRvIHRoZSBvdmVyYWxsIHZpcnR1YWxpemF0aW9uIHByb2Nlc3MuIFRoaXMgZnVuY3Rpb24mIzM5O3MgaW1wYWN0IG9uIG1lbW9yeSBtYXBwaW5nIGFuZCBwcm90ZWN0aW9uIGlzIG9mIHBhcnRpY3VsYXIgaW50ZXJlc3QsIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIGl0cyBpbnZvY2F0aW9ucyB3aWxsIHNoZWQgbGlnaHQgb24gdGhvc2UgaW50cmljYWNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDE6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11Lmg9MzMxPXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fc2hhZG93X3Jvb3RfYWxsb2NhdGVkKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11LmgtMzQxLVxuYXJjaC94ODYva3ZtL21tdS5oOjM0MjppbnQga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuKTtcbmFyY2gveDg2L2t2bS9tbXUuaC0zNDMtXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz01MTM4PXN0YXRpYyB2b2lkIGt2bV9hc3NlcnRfZ21lbV9pbnZhbGlkYXRlX2xvY2tfaGVsZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTE0OS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTE1MDppbnQga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuKVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MTUxLXtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUyMzAtfVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MjMxOkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4pO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MjMyLSNlbmRpZlxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MzE4MD1zdGF0aWMgaW50IHRkeF9nbWVtX3Bvc3RfcG9wdWxhdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4sXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zMTkyLVx0a3ZtX3RkeC1cdTAwM2VwYWdlX2FkZF9zcmMgPSBzcmNfcGFnZTtcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MzE5MzpcdHJldCA9IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihhcmctXHUwMDNldmNwdSwgZ2ZuLCBwZm4pO1xuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zMTk0LVx0a3ZtX3RkeC1cdTAwM2VwYWdlX2FkZF9zcmMgPSBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAxOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MTQKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVsdmluZyBpbnRvIFREWCBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgdGR4X2dtZW1fcG9zdF9wb3B1bGF0ZWAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aGVyZSBpdCYjMzk7cyBjYWxsZWQgd2l0aGluIHRoZSBgYXJjaC94ODYva3ZtL3ZteC90ZHguY2AgZmlsZS4gUmlnaHQgYXdheSwgdGhpcyBzY3JlYW1zIFREWCBhbmQgZ3Vlc3QgbWVtb3J5IGZpbGUgZGVzY3JpcHRvcnMuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC4gVGhlIGNvbnRleHQgaXMgb2J2aW91c2x5IGNlbnRlcmVkIGFyb3VuZCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucy4gSSBrbm93IHRoYXQgVERYIGludHJvZHVjZXMgc29tZSBwcmV0dHkgc3BlY2lmaWMgaGFyZHdhcmUgZGVwZW5kZW5jaWVzLCBhbmQgSSYjMzk7bSBjdXJpb3VzIGlmIHRoaXMgZnVuY3Rpb24gaXMgb3Zlcmx5IHNwZWNpYWxpemVkLCBvciBpZiBpdHMgcHJpbmNpcGxlcyBjYW4gYmUgYXBwbGllZCBtb3JlIGdlbmVyYWxseS4KCk15IGluaXRpYWwgdGhvdWdodHMgYXJlIHRoYXQgYGt2bV90ZHBfcGFnZV9wcmVmYXVsdGAgYW5kIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGFyZSBwcm9iYWJseSBicm9hZGVyIGluIHNjb3BlLCBtZWFuaW5nIHRoZXkgYXJlbiYjMzk7dCB0aWVkIGV4Y2x1c2l2ZWx5IHRvIFREWCBsaWtlIHRoaXMgb25lIGlzLiBUbyBjb25maXJtIHRoaXMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlc2UgbW9yZSBnZW5lcmFsIGZ1bmN0aW9ucyBhcmUgZG9pbmcgYW5kIGlmIHRoZXkgaGF2ZSBpbXBsaWNhdGlvbnMgaGVyZS4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSB1bmRlcmx5aW5nIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDE6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jPTUwMjA9c3RhdGljIGludCBrdm1fdGRwX3BhZ2VfcHJlZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MDY3LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MDY4Omxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTA2OS1cdFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MTY5OD1zdGF0aWMgaW50IHRkeF9zZXB0X21hcF9sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGVudW0gcGdfbGV2ZWwgbGV2ZWwsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0xNzEwLVx0LypcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MTcxMTpcdCAqIEVuc3VyZSBwcmVfZmF1bHRfYWxsb3dlZCBpcyByZWFkIGJ5IGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSgpXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTE3MTItXHQgKiBiZWZvcmUga3ZtX3RkeC1cdTAwM2VzdGF0ZS4gIFVzZXJzcGFjZSBtdXN0IG5vdCBiZSBhbGxvd2VkIHRvIHByZS1mYXVsdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzU0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBLVk0gTWVtb3J5IEZhdWx0IFByZS1IYW5kbGluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgem9vbSBpbiBvbiB0aGlzIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7QWgsIHRoaXMgaXMgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBob29rIGZvciBoYW5kbGluZyBwcmUtZmF1bHRpbmcgbWVtb3J5IGFjY2Vzc2VzLCByaWdodD8mIzM0OyBJdCYjMzk7cyBub3QgYSBzdGFuZGFsb25lIHRoaW5nOyBpdCYjMzk7cyAqdGhlKiBhcmNoaXRlY3R1cmUmIzM5O3Mgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgYSBtdWNoIGJyb2FkZXIgS1ZNIGlvY3RsIGRlc2lnbmVkIHRvIGhhbmRsZSBhIHBhZ2UgZmF1bHQgYmVmb3JlIGl0IHRha2VzIHBsYWNlIGluIHRoZSBndWVzdC4gS25vd2luZyB0aGF0LCBteSBuZXh0IHN0ZXAgaXMgY2xlYXIuIEkgbmVlZCB0byB0cmFjZSBpdHMgY2FsbCBzaXRlcyB3aXRoaW4gdGhlIGdlbmVyaWMgS1ZNIGZyYW1ld29yay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBwYXJ0aWN1bGFyIHByZS1mYXVsdCBtZWNoYW5pc20gaXMgYmVpbmcgdHJpZ2dlcmVkIGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgS1ZNIGZsb3cuIEnigJltIHRoaW5raW5nLCBtYXliZSBJJiMzOTtsbCBzZWUgd2hlcmUgdGhlIGdlbmVyaWMgY29kZSBzZXRzIHVwIHRoZSBzdGFnZSwgcGVyaGFwcyBzZXR0aW5nIHVwIGEgc3RydWN0LCBhbmQgdGhlbiB0aGlzIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBob29rIGRvZXMgc29tZXRoaW5nIHVuaXF1ZSBiYXNlZCBvbiB0aGUgYXJjaGl0ZWN0dXJlLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBicm9hZGVyIGNvZGUgYmFzZSBhbmQgc2VlIHRoZSBob3cgYW5kIHdoeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDE6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dmlydC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmM9NDM1Mz1zdGF0aWMgaW50IGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNDM3Ny1cbnZpcnQva3ZtL2t2bV9tYWluLmM6NDM3ODpcdFx0ciA9IGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSh2Y3B1LCByYW5nZSk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQzNzktXHRcdGlmIChXQVJOX09OX09OQ0UociA9PSAwIHx8IHIgPT0gLUVJTykpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAxOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4MjIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nIGFzIGFuIGV4cGVydDoKCioqQW5hbHl6aW5nIHRoZSBLVk0gUHJlLUZhdWx0IE1lbW9yeSBQYXRoKioKClJpZ2h0LCBzbyBga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgaXMgaW5kZWVkIHRyaWdnZXJlZCBieSB0aGUgYEtWTV9QUkVfRkFVTFRfTUVNT1JZYCBpb2N0bC4gTXkgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiB0aGF0IGBLVk1fUFJFX0ZBVUxUX01FTU9SWWAgaW9jdGwgbm93LiBUaGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludCwgdGhlIGNyaXRpY2FsIHBvaW50IG9mIGludGVyZXN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyAqdGhlcmUqIGluIG9yZGVyIHRvIGdyYXNwIHRoZSBvdmVyYWxsIG1lbW9yeSBwcmUtZmF1bHRpbmcgbWVjaGFuaXNtIHdpdGhpbiBLVk0uIFdoYXQgYXJlIHRoZSBhcmd1bWVudHMgcGFzc2VkPyBXaGF0JiMzOTtzIHRoZSBjb250ZXh0PyBXaGF0IGV4YWN0bHkgdHJpZ2dlcnMgdGhlIGNhbGwgdG8gYGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgPyBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAxOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0tWTV9QUkVfRkFVTFRfTUVNT1JZJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dmlydC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmM9NDQyNT1zdGF0aWMgbG9uZyBrdm1fdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ2NTEtI2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjQ2NTI6XHRjYXNlIEtWTV9QUkVfRkFVTFRfTUVNT1JZOiB7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ2NTMtXHRcdHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSByYW5nZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDE6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzIxNQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGxpY2F0aW9ucyBvZiB0aGUgS1ZNX1BSRV9GQVVMVF9NRU1PUlkgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBLVk1fUFJFX0ZBVUxUX01FTU9SWWAgaXMgYSByZWFjaGFibGUgaW9jdGwuIFRoYXQmIzM5O3Mgb3VyIGVudHJ5IHBvaW50LCBhbmQgdGhlIHBhdGNoIGhpdHMgYSBmZXcga2V5IGZ1bmN0aW9uczogYGt2bV90ZHBfcGFnZV9wcmVmYXVsdGAgYW5kIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLiBUaG9zZSBhcmUgYm90aCBjYWxsZWQgZGlyZWN0bHkgdmlhIGBLVk1fUFJFX0ZBVUxUX01FTU9SWWAsIHdoaWNoIG1ha2VzIHRoaXMgaW50ZXJlc3RpbmcgZnJvbSBhIGdlbmVyYWwgeDg2IEtWTSBwZXJzcGVjdGl2ZS4KClRoZW4gdGhlcmUmIzM5O3MgdGhlIG1vZGlmaWNhdGlvbiB0byBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYHRkeF9nbWVtX3Bvc3RfcG9wdWxhdGVgLiBPa2F5LCB0aGF0JiMzOTtzIFREWCBzcGVjaWZpYywgc28gdGhhdCBicmFuY2ggaXMgaW50ZXJlc3RpbmcgYnV0IHNlcGFyYXRlIGZyb20gdGhlIGNvcmUgeDg2IGltcGxpY2F0aW9ucy4gQnV0IHdhaXQgYSBzZWNvbmQsIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guLi4gYGt2bV90ZHBfcGFnZV9wcmVmYXVsdGAgaXMgY2FsbGVkIGZyb20gYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAuIFNpbmNlIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGlzIHJlYWNoYWJsZSB2aWEgYEtWTV9QUkVfRkFVTFRfTUVNT1JZYCwgaXQgaW1wbGllcyB0aGF0IHRoaXMgcGF0Y2ggbGlrZWx5IGhhcyBsYXJnZXIgcmFtaWZpY2F0aW9ucyBmb3IgZ2VuZXJhbCB4ODYgS1ZNIGZ1bmN0aW9uYWxpdHkuIFNvLCBiZWZvcmUgSSBkaWcgZnVydGhlciwgSSBzaG91bGQganVzdCBtYWtlIHN1cmUgdGhhdCBgS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWWAgaXMgYWN0dWFsbHkgZW5hYmxlZCBmb3IgeDg2LiBUaGF0JiMzOTtzIGEgc2FuaXR5IGNoZWNrIEkgbmVlZCB0byBkby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDE6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUlkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTIwPWNvbmZpZyBLVk1fWDg2XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNDctXHRzZWxlY3QgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkdcbmFyY2gveDg2L2t2bS9LY29uZmlnOjQ4Olx0c2VsZWN0IEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcbmFyY2gveDg2L2t2bS9LY29uZmlnLTQ5LVx0c2VsZWN0IEtWTV9XRVJST1IgaWYgV0VSUk9SXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAxOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4OTMKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiAyMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb2RlJiMzOTtzIFJlYWNoYWJpbGl0eSBhbmQgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBzbyB0aGUgY29kZSBwYXRoIGlzIGNvbmZpcm1lZDsgaXQmIzM5O3Mgc2VsZWN0ZWQgYnkgYEtWTV9YODZgLCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyBhY2Nlc3NpYmxlLiBUaGUgY2hhbmdlIGl0c2VsZiBpcyBpbnRlcmVzdGluZzogYGt2bV9tbXVfcmVsb2FkKHZjcHUpYCBpcyBiZWluZyBtb3ZlZCBpbnRvIHRoZSByZXRyeSBsb29wIHdpdGhpbiBib3RoIGBrdm1fdGRwX3BhZ2VfcHJlZmF1bHRgIGFuZCBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYC4gVGhhdCYjMzk7cyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uLCBhbmQgc3VnZ2VzdHMgaGFuZGxpbmcgTU1VIGludmFsaWRhdGlvbnMgZHVyaW5nIHByZS1mYXVsdGluZyBhbmQgcHJpdmF0ZSBQRk4gbWFwcGluZyBpcyBub3cgdGhlIGZvY3VzLgoKR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlLCBmdXp6aW5nIHRoaXMgYXJlYSBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZC4KCk5vdywgbGV0JiMzOTtzIHBpbnBvaW50IHNvbWUga2V5IHN5bWJvbHMgdG8gaW52ZXN0aWdhdGUuIE15IHByaW1hcnkgZm9jdXMgd2lsbCBiZSBvbiB0aGVzZSBmdW5jdGlvbnM6IGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLCBhbmQgYWxzbyBvbiBga3ZtX3RkcF9wYWdlX3ByZWZhdWx0YCwgd2hpY2ggaXMgc3RhdGljLCBzbyBJJiMzOTtsbCBjaGVjayB3aGV0aGVyIGl0IGlzIGlubGluZWQgb3Igbm90LiBMYXN0bHksIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gLCB3aGljaCBpcyBleHBvcnRlZC4gSSBzdXNwZWN0IHRoYXQgdGhpcyBsYXR0ZXIgZnVuY3Rpb24gaXMgVERYIHNwZWNpZmljLCB3aGljaCBtaWdodCBsaW1pdCBteSBpbml0aWFsIGZ1enppbmcgYXR0ZW1wdHMsIHVubGVzcyBJIGhhdmUgYWNjZXNzIHRvIFREWCBoYXJkd2FyZS4KCkkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGluIGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIHZ1bG5lcmFiaWxpdGllcywgb3IgaW50ZXJlc3RpbmcgaW50ZXJhY3Rpb25zIHRvIGNvbnNpZGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvbW11LmM9NTAyMD1zdGF0aWMgaW50IGt2bV90ZHBfcGFnZV9wcmVmYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUwNjctXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUwNjg6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MDY5LVx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAxOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2NzUKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiAyMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtWTSBNZW1vcnkgUHJlLUZhdWx0aW5nKioKCk9rYXksIHNvIEkmIzM5O20gaG9uaW5nIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkIGluIHByZS1mYXVsdGluZyBtZW1vcnkgd2l0aGluIEtWTS4gU3BlY2lmaWNhbGx5LCBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgaXTigJlzIGEgc3Ryb25nIGZvY3VzIHN5bWJvbC4gQW5kIHRoZW4gdGhlcmUmIzM5O3MgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAsIHdoaWNoIGFsc28gbG9va3MgcHJvbWlzaW5nLCBldmVuIGlmIGl0IG1pZ2h0IGludm9sdmUgc29tZSBURFggY29uc2lkZXJhdGlvbnMuCgpOb3csIGxldCYjMzk7cyBqdXN0IGNvbmZpcm0gc29tZXRoaW5nIHF1aWNrbHkuLi4gSSBuZWVkIHRvIGNoZWNrIGlmIGBrdm1fdGRwX3BhZ2VfcHJlZmF1bHRgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBZZXAsIGl0IGlzLiBTbyB0aGF0IGp1c3QgcmVpbmZvcmNlcyBteSBpbml0aWFsIGFzc2Vzc21lbnQgLSBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBhbmQgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAgYXJlIHJlYWxseSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMgdG8gZGlnIGludG8uCgpBcyBmb3IgY29uZmlndXJhdGlvbnMsIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGBLVk1gIGlzIHRoZSBtYWluIG9uZSB0byBjb25zaWRlci4gTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcy4gYEtWTWAgaXMgaW5kZWVkIHN1ZmZpY2llbnQgZm9yIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLiBBbmQgZm9yIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gLCBsb29rcyBsaWtlIGl0JiMzOTtzIHVuY29uZGl0aW9uYWxseSBjb21waWxlZCB3aXRoaW4gYG1tdS5jYCBhcyBsb25nIGFzIGBDT05GSUdfS1ZNYCBpcyBlbmFibGVkLiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzLCBzbyBJIGNhbiBmb2N1cyBvbiB0aG9zZSB0d28gc3ltYm9scyBhcyB0aGUgY29yZSBvZiB0aGlzIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAxOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvbW11LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS9tbXUuYz01MTM4PXN0YXRpYyB2b2lkIGt2bV9hc3NlcnRfZ21lbV9pbnZhbGlkYXRlX2xvY2tfaGVsZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTE0OS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTE1MDppbnQga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuKVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MTUxLXtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUyMzAtfVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MjMxOkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4pO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MjMyLSNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTE5CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBleHBlcnQgdG8gZXhwZXJ0OgoKKipOYXZpZ2F0aW5nIGEgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gQmxvY2sqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSYjMzk7bSBzZWVpbmcgYW4gYCNlbmRpZmAgZGlyZWN0aXZlIGRvd24gaGVyZSBvbiBsaW5lIDUyMzIuIFRoYXQmIzM5O3MgYSBjbGVhciBzaWduYWwgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJsb2NrLiBNeSBpbW1lZGlhdGUgcmVmbGV4IGlzIHRvIGZpZ3VyZSBvdXQgd2hpY2ggYCNpZmRlZmAsIGAjaWZuZGVmYCwgYCNpZmAsIG9yIGAjZWxpZmAgaXQmIzM5O3MgcGFpcmVkIHdpdGguIFRoYXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHdoaWNoIHNlY3Rpb25zIG9mIGNvZGUgYXJlIGJlaW5nIGluY2x1ZGVkIG9yIGV4Y2x1ZGVkIGJhc2VkIG9uIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLCBjb21waWxlciBmbGFncywgb3IgZGVmaW5lZCBtYWNyb3MuIFRoaXMgaXMgZnVuZGFtZW50YWwgZm9yIGRlYnVnZ2luZywgdW5kZXJzdGFuZGluZyBwb3J0YWJpbGl0eSwgYW5kIG9wdGltaXppbmcgY29kZSBmb3Igc3BlY2lmaWMgZW52aXJvbm1lbnRzLiBJIG5lZWQgdG8gdHJhY2UgYmFja3dhcmQgdG8gZmluZCBpdHMgY29ycmVzcG9uZGluZyBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLiBLbm93aW5nIHRoZSBjb25kaXRpb25hbCBpcyAqY3JpdGljYWwqIHRvIHVuZGVyc3RhbmRpbmcgd2hhdCYjMzk7cyBnb2luZyBvbiBpbiB0aGlzIHBhcnQgb2YgdGhlIGNvZGViYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvbW11LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MTMwOlx0XHQgKiBpZ25vcmUgc3RhdHMgZm9yIGFsbCBvdGhlciByZXR1cm4gdGltZXMuICBQYWdlLXJlYWR5IFwmIzM0O2ZhdWx0c1wmIzM0OyBhcmVuJiMzOTt0XG41MTMxOlx0XHQgKiB0cnVseSBzcHVyaW91cyBhbmQgbmV2ZXIgdHJpZ2dlciBlbXVsYXRpb25cbjUxMzI6XHRcdCAqL1xuNTEzMzpcdFx0aWYgKHIgPT0gUkVUX1BGX0ZJWEVEKVxuNTEzNDpcdFx0XHR2Y3B1LVx1MDAzZXN0YXQucGZfZml4ZWQmIzQzOyYjNDM7O1xuNTEzNTpcdH1cbjUxMzY6XHRcbjUxMzc6XHQjaWZkZWYgQ09ORklHX0tWTV9HVUVTVF9NRU1GRFxuNTEzODpcdHN0YXRpYyB2b2lkIGt2bV9hc3NlcnRfZ21lbV9pbnZhbGlkYXRlX2xvY2tfaGVsZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxuNTEzOTpcdHtcbjUxNDA6XHQjaWZkZWYgQ09ORklHX1BST1ZFX0xPQ0tJTkdcbjUxNDE6XHRcdGlmIChXQVJOX09OX09OQ0UoIWt2bV9zbG90X2hhc19nbWVtKHNsb3QpKSB8fFxuNTE0MjpcdFx0ICAgIFdBUk5fT05fT05DRSghc2xvdC1cdTAwM2VnbWVtLmZpbGUpIHx8XG41MTQzOlx0XHQgICAgV0FSTl9PTl9PTkNFKCFmaWxlX2NvdW50KHNsb3QtXHUwMDNlZ21lbS5maWxlKSkpXG41MTQ0Olx0XHRcdHJldHVybjtcbjUxNDU6XHRcbjUxNDY6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2ZmlsZV9pbm9kZShzbG90LVx1MDAzZWdtZW0uZmlsZSktXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWludmFsaWRhdGVfbG9jayk7XG41MTQ3Olx0I2VuZGlmXG41MTQ4Olx0fVxuNTE0OTpcdFxuNTE1MDpcdGludCBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4pXG41MTUxOlx0e1xuNTE1MjpcdFx0c3RydWN0IGt2bV9wYWdlX2ZhdWx0IGZhdWx0ID0ge1xuNTE1MzpcdFx0XHQuYWRkciA9IGdmbl90b19ncGEoZ2ZuKSxcbjUxNTQ6XHRcdFx0LmVycm9yX2NvZGUgPSBQRkVSUl9HVUVTVF9GSU5BTF9NQVNLIHwgUEZFUlJfUFJJVkFURV9BQ0NFU1MsXG41MTU1Olx0XHRcdC5wcmVmZXRjaCA9IHRydWUsXG41MTU2Olx0XHRcdC5pc190ZHAgPSB0cnVlLFxuNTE1NzpcdFx0XHQubnhfaHVnZV9wYWdlX3dvcmthcm91bmRfZW5hYmxlZCA9IGlzX254X2h1Z2VfcGFnZV9lbmFibGVkKHZjcHUtXHUwMDNla3ZtKSxcbjUxNTg6XHRcbjUxNTk6XHRcdFx0Lm1heF9sZXZlbCA9IFBHX0xFVkVMXzRLLFxuNTE2MDpcdFx0XHQucmVxX2xldmVsID0gUEdfTEVWRUxfNEssXG41MTYxOlx0XHRcdC5nb2FsX2xldmVsID0gUEdfTEVWRUxfNEssXG41MTYyOlx0XHRcdC5pc19wcml2YXRlID0gdHJ1ZSxcbjUxNjM6XHRcbjUxNjQ6XHRcdFx0LmdmbiA9IGdmbixcbjUxNjU6XHRcdFx0LnNsb3QgPSBrdm1fdmNwdV9nZm5fdG9fbWVtc2xvdCh2Y3B1LCBnZm4pLFxuNTE2NjpcdFx0XHQucGZuID0gcGZuLFxuNTE2NzpcdFx0XHQubWFwX3dyaXRhYmxlID0gdHJ1ZSxcbjUxNjg6XHRcdH07XG41MTY5Olx0XHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbjUxNzA6XHRcdGludCByO1xuNTE3MTpcdFxuNTE3MjpcdFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG41MTczOlx0XG41MTc0Olx0XHQvKlxuNTE3NTpcdFx0ICogTWFwcGluZyBhIHByZS1kZXRlcm1pbmVkIHByaXZhdGUgcGZuIGlzIGludGVuZGVkIG9ubHkgZm9yIHVzZSB3aGVuXG41MTc2Olx0XHQgKiBwb3B1bGF0aW5nIGEgZ3Vlc3RfbWVtZmQgaW5zdGFuY2UuICBBc3NlcnQgdGhhdCB0aGUgc2xvdCBpcyBiYWNrZWRcbjUxNzc6XHRcdCAqIGJ5IGd1ZXN0X21lbWZkIGFuZCB0aGF0IHRoZSBnbWVtIGluc3RhbmNlJiMzOTtzIGludmFsaWRhdGVfbG9jayBpcyBoZWxkLlxuNTE3ODpcdFx0ICovXG41MTc5Olx0XHRrdm1fYXNzZXJ0X2dtZW1faW52YWxpZGF0ZV9sb2NrX2hlbGQoZmF1bHQuc2xvdCk7XG41MTgwOlx0XG41MTgxOlx0XHRpZiAoS1ZNX0JVR19PTighdGRwX21tdV9lbmFibGVkLCBrdm0pKVxuNTE4MjpcdFx0XHRyZXR1cm4gLUVJTztcbjUxODM6XHRcbjUxODQ6XHRcdGlmIChrdm1fZ2ZuX2lzX3dyaXRlX3RyYWNrZWQoa3ZtLCBmYXVsdC5zbG90LCBmYXVsdC5nZm4pKVxuNTE4NTpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuNTE4NjpcdFxuNTE4NzpcdFx0ZG8ge1xuNTE4ODpcdFx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG41MTg5Olx0XHRcdFx0cmV0dXJuIC1FSU5UUjtcbjUxOTA6XHRcbjUxOTE6XHRcdFx0aWYgKGt2bV90ZXN0X3JlcXVlc3QoS1ZNX1JFUV9WTV9ERUFELCB2Y3B1KSlcbjUxOTI6XHRcdFx0XHRyZXR1cm4gLUVJTztcbjUxOTM6XHRcbjUxOTQ6XHRcdFx0ciA9IGt2bV9tbXVfcmVsb2FkKHZjcHUpO1xuNTE5NTpcdFx0XHRpZiAocilcbjUxOTY6XHRcdFx0XHRyZXR1cm4gcjtcbjUxOTc6XHRcbjUxOTg6XHRcdFx0ciA9IG1tdV90b3B1cF9tZW1vcnlfY2FjaGVzKHZjcHUsIGZhbHNlKTtcbjUxOTk6XHRcdFx0aWYgKHIpXG41MjAwOlx0XHRcdFx0cmV0dXJuIHI7XG41MjAxOlx0XG41MjAyOlx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuNTIwMzpcdFxuNTIwNDpcdFx0XHRndWFyZChyZWFkX2xvY2spKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG41MjA1Olx0XG41MjA2Olx0XHRcdC8qXG41MjA3Olx0XHRcdCAqIEJlY2F1c2Ugc2xvdHNfbG9jayBpcyBoZWxkLCBpdCBzaG91bGQgYmUgaW1wb3NzaWJsZSBmb3Igcm9vdHNcbjUyMDg6XHRcdFx0ICogdG8gYmUgaW52YWxpZGF0ZWQgYWZ0ZXIgdGhlIGluaXRpYWwgTU1VIHJlbG9hZC4gIFdBUk4sIGJ1dFxuNTIwOTpcdFx0XHQgKiBjb250aW51ZSBhbmQgcmUtcmVsb2FkIHRoZSBNTVUgdG8gdHJ5IGFuZCBrZWVwIHRoZSBWTSBhbGl2ZS5cbjUyMTA6XHRcdFx0ICovXG41MjExOlx0XHRcdFdBUk5fT05fT05DRShrdm1fdGVzdF9yZXF1ZXN0KEtWTV9SRVFfTU1VX0ZSRUVfT0JTT0xFVEVfUk9PVFMsIHZjcHUpKTtcbjUyMTI6XHRcbjUyMTM6XHRcdFx0LypcbjUyMTQ6XHRcdFx0ICogU25hcHNob3QgdGhlIGludmFsaWRhdGlvbiBzZXF1ZW5jZSBjb3VudGVyIGFmdGVyIGFjcXVpcmluZ1xuNTIxNTpcdFx0XHQgKiBtbXVfbG9jaywgYXMgZ3Vlc3RfbWVtZmQgZ3VhcmFudGVlcyB0aGUgdmFsaWRpdHkgb2YgdGhlIHBmbixcbjUyMTY6XHRcdFx0ICogaS5lLiBhbnkgY29uY3VycmVudCBpbnZhbGlkYXRpb25zIGFyZSBndWFyYW50ZWVkIHRvIGJlXG41MjE3Olx0XHRcdCAqIGlycmVsZXZhbnQuXG41MjE4Olx0XHRcdCAqL1xuNTIxOTpcdFx0XHRmYXVsdC5tbXVfc2VxID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlbW11X2ludmFsaWRhdGVfc2VxO1xuNTIyMDpcdFx0XHRpZiAoaXNfcGFnZV9mYXVsdF9zdGFsZSh2Y3B1LCBcdTAwMjZmYXVsdCkpXG41MjIxOlx0XHRcdFx0Y29udGludWU7XG41MjIyOlx0XG41MjIzOlx0XHRcdHIgPSBrdm1fdGRwX21tdV9tYXAodmNwdSwgXHUwMDI2ZmF1bHQpO1xuNTIyNDpcdFx0fSB3aGlsZSAociA9PSBSRVRfUEZfUkVUUlkpO1xuNTIyNTpcdFxuNTIyNjpcdFx0aWYgKHIgIT0gUkVUX1BGX0ZJWEVEKVxuNTIyNzpcdFx0XHRyZXR1cm4gLUVJTztcbjUyMjg6XHRcbjUyMjk6XHRcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTM2MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqS1ZNIEd1ZXN0IE1lbW9yeSBNYXBwaW5nIOKAkyBUaGUgYG1lbWZkYCBEaWxlbW1hKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAgZnVuY3Rpb24sIGFuZCBpdCYjMzk7cyBsb29raW5nIGxpa2UgYENPTkZJR19LVk1fR1VFU1RfTUVNRkRgIGlzIGEgcHJlcmVxdWlzaXRlLiBNYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIG5lZWQgZm9yIG1hbmFnZWQgbWVtb3J5IGZpbGUgZGVzY3JpcHRvcnMsIEkgc3VwcG9zZS4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcyBob3cgaXQmIzM5O3MgYmVpbmcgaGFuZGxlZC4gSXMgYENPTkZJR19LVk1fR1VFU1RfTUVNRkRgIGRpcmVjdGx5IHNlbGVjdGVkIGJ5IHRoZSB4ODYgS1ZNIGNvbmZpZ3VyYXRpb24sIG9yIGlzIGl0IGNvbmZpZ3VyZWQgaW5kZXBlbmRlbnRseT8gSSBuZWVkIHRvIGNsYXJpZnkgdGhhdCBkZXBlbmRlbmN5LiBVbmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIGxvZ2ljIGhlcmUgaXMga2V5IHRvIGZ1bGx5IGdyYXNwIGhvdyB0aGlzIHNwZWNpZmljIG1lbW9yeSBtYXBwaW5nIGZ1bmN0aW9uIHdvcmtzIHdpdGhpbiB0aGUgYnJvYWRlciBLVk0gYXJjaGl0ZWN0dXJlLCBlc3BlY2lhbGx5IHdoZW4gY29uc2lkZXJpbmcgVERQIGFuZCBwcml2YXRlIHBhZ2UgZnJhbWVzLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY3Jvc3MtcmVmZXJlbmNlIHRoZSBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IGFwcHJvYWNoIHRvIGVuc3VyZSB0aGlzIGZsYWcgaXMgc2V0IGNvcnJlY3RseSBmb3IgbXkgdXNlIGNhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAxOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fR1VFU1RfTUVNRkQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt2aXJ0L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0vS2NvbmZpZz0xMDM9Y29uZmlnIEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG4tLVxudmlydC9rdm0vS2NvbmZpZy0xMDUtXG52aXJ0L2t2bS9LY29uZmlnOjEwNjpjb25maWcgS1ZNX0dVRVNUX01FTUZEXG52aXJ0L2t2bS9LY29uZmlnLTEwNy0gICAgICAgc2VsZWN0IFhBUlJBWV9NVUxUSVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTc2NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHdoYXQgSSYjMzk7bSBhYm91dCB0byBleHBsb3JlIHJlZ2FyZGluZyBgS1ZNX0dVRVNUX01FTUZEYDoKCioqSW52ZXN0aWdhdGluZyBgS1ZNX0dVRVNUX01FTUZEYCoqCgpSaWdodCwgbGV0JiMzOTtzIGRpZyBpbi4gSSYjMzk7bSBnb2luZyB0byB0cmFjayBkb3duIHdoZXJlIHRoZSBgS1ZNX0dVRVNUX01FTUZEYCBzeW1ib2wgZ2V0cyBzZWxlY3RlZCBpbiB0aGUgS1ZNIGtlcm5lbCBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSB2aXJ0dWFsIG1hY2hpbmUgZW52aXJvbm1lbnQuIE15IGdvYWwgaXMgYSBmdWxsIHVuZGVyc3RhbmRpbmcgc28gSSBjYW4gc3BlYWsgYWJvdXQgaXQgZWxvcXVlbnRseSB0byBvdGhlciBleHBlcnRzLiBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgYGdyZXBgIG9yIHNpbWlsYXIgc2VhcmNoIHRvIHNlZSB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkIGFuZCB1c2VkLiBUaGVuIEkmIzM5O2xsIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzIHRvIHNlZSB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBpdCYjMzk7cyBlbmFibGVkLiBIb3BlZnVsbHkgaXQmIzM5O3Mgbm90IHRvbyBvYnNjdXJlIGFuZCB0aGUgcmVhc29ucyBmb3IgaXRzIHNlbGVjdGlvbiBhcmUgZmFpcmx5IGNsZWFyLiBVbmRlcnN0YW5kaW5nIHRoZSByYXRpb25hbGUgYmVoaW5kIGl0cyBpbmNsdXNpb24gaXMgaW1wb3J0YW50OyBpcyBpdCByZWxhdGVkIHRvIHBlcmZvcm1hbmNlLCBzZWN1cml0eSwgYSBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVWx0aW1hdGVseSwgdGhlIGFpbSBpcyB0byBwaWVjZSB0b2dldGhlciBpdHMgcm9sZSBpbiB0aGUga2VybmVsIGFuZCBpdHMgaW1wbGljYXRpb25zIGZvciBndWVzdCBtZW1vcnkgbWFuYWdlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDE6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IEtWTV9HVUVTVF9NRU1GRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MjA9Y29uZmlnIEtWTV9YODZcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy00OS1cdHNlbGVjdCBLVk1fV0VSUk9SIGlmIFdFUlJPUlxuYXJjaC94ODYva3ZtL0tjb25maWc6NTA6XHRzZWxlY3QgS1ZNX0dVRVNUX01FTUZEIGlmIFg4Nl82NFxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAxOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTY3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEtWTSBBbmFseXNpcyoqCgpPa2F5LCBzbyBJIHNlZSB0aGlzIHBhdGNoIGlzIHJlbGV2YW50IGJlY2F1c2UgYEtWTV9HVUVTVF9NRU1GRGAgaXMgc2VsZWN0ZWQgd2l0aGluIGBLVk1fWDg2YCB3aGVuIGBYODZfNjRgIGlzIGNvbmZpZ3VyZWQuIFRoZXJlZm9yZSwgYEtWTWAgaXRzZWxmIGlzIHN1ZmZpY2llbnQgZm9yIHRoZSBjb25maWd1cmF0aW9uLiBMZXQmIzM5O3MgZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgY2hhbmdlZC4KClRoZSBwYXRjaCBzZWVtcyB0byBiZSB0b3VjaGluZyB0aGUgcHJlLWZhdWx0aW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgYGt2bV90ZHBfcGFnZV9wcmVmYXVsdGAsIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLCBhbmQgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAuIEl0JiMzOTtzIGFkZHJlc3NpbmcgYW4gTU1VIHJvb3QgaW52YWxpZGF0aW9uIHByb2JsZW0gd2l0aGluIGEgcmV0cnkgbG9vcCwgd2hpY2ggY291bGQgYmUgZGlzYXN0cm91cyBpZiBga3ZtX21tdV9yZWxvYWRgIHdhc24mIzM5O3Qgc3Vic2VxdWVudGx5IHRyaWdnZXJlZC4gVGhpcyBzZWVtcyBmdW5jdGlvbmFsbHkgc291bmQgYW5kIHJlYWNoYWJsZSwgZ29vZC4KCk15IGltbWVkaWF0ZSBmb2N1cyBzeW1ib2xzIGFyZSBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBhbmQgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aG9zZSBiZXR0ZXIgaW4gdGhlIGNvbnRleHQgb2YgdGhpcyBpc3N1ZS4KCkluIHRlcm1zIG9mIGNvbmZpZ3VyYXRpb24sIGBLVk1gIGlzIGFsbCB0aGF0JiMzOTtzIHJlcXVpcmVkLgoKV2FpdCwgaG9sZCBvbiBhIG1pbnV0ZeKApiBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYCBpcyBjYWxsZWQgYnkgYHRkeF9nbWVtX3Bvc3RfcG9wdWxhdGVgLCBhbmQgdGhhdCYjMzk7cyAqaW4qIGBhcmNoL3g4Ni9rdm0vdm14L3RkeC5jYC4gTm93IEkgbmVlZCB0byBzZWUgaWYgYHRkeC5jYCBpcyBjb21waWxlZCBieSBkZWZhdWx0LiBJIG5lZWQgdG8gY2hlY2sgdGhlIGBhcmNoL3g4Ni9rdm0vdm14L01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBjb21waWxhdGlvbiBydWxlcy4gVGhpcyBjb3VsZCBhZmZlY3QgdGhlIG92ZXJhbGwgc2NvcGUgb2YgdGhlIGZpeC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDE6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0ZHhcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg1MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gQ29udW5kcnVtKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgbmVlZCB0byByZXRoaW5rIHRoaXMgYXBwcm9hY2guIEkgd2FzIGZvY3VzaW5nIG9uIGB0ZHguY2AgYW5kIGl0cyBwbGFjZSBpbiB0aGUgb3ZlcmFsbCBidWlsZCBwcm9jZXNzLCBidXQgSSYjMzk7bSBoYXZpbmcgYSBuYWdnaW5nIGZlZWxpbmcuLi4gY291bGQgaXQgYmUgdGhhdCBgdGR4LmNgIGlzIGNvbXBpbGVkICpjb25kaXRpb25hbGx5Kj8gVGhhdCB3b3VsZCBjb21wbGV0ZWx5IGNoYW5nZSBob3cgSSBhcHByb2FjaCB0aGlzLiBJZiBpdCYjMzk7cyBvbmx5IGluY2x1ZGVkIHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcywgbXkgYXNzdW1wdGlvbnMgYWJvdXQgaXRzIGNvbnNpc3RlbnQgcHJlc2VuY2UgaW4gdGhlIGZpbmFsIG91dHB1dCBhcmUgZnVuZGFtZW50YWxseSBmbGF3ZWQuIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciB0aGVyZSBhcmUgYW55IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIG9yIGZsYWdzIGFmZmVjdGluZyB0aGUgY29tcGlsYXRpb24gb2YgYHRkeC5jYC4gVGhpcyBpc24mIzM5O3QgbmVjZXNzYXJpbHkgYSBzaG93LXN0b3BwZXIsIGJ1dCBpdCBzaWduaWZpY2FudGx5IGFsdGVycyB0aGUgYW5hbHlzaXMuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgcG9zc2libGUgY29uZGl0aW9ucy4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IGhpbnRzIGluIHRoZSBoZWFkZXJzIG9yIHRoZSBidWlsZCBzeXN0ZW0gc2NyaXB0cy4uLiBpdCBjb3VsZCBiZSBzb21ldGhpbmcgYXMgc2ltcGxlIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24gb3IgdGFyZ2V0IGFyY2hpdGVjdHVyZSBkZXBlbmRlbmN5LiBUaW1lIHRvIGRpdmUgZGVlcGVyIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RkeFxcLmMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAxOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTE4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnkgb2YgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSYjMzk7bSBoYXZpbmcgdGhlc2UgdGhvdWdodHM6CgoqKktWTS9URFggRmlsZSBJbnZlc3RpZ2F0aW9uKioKCkhtbSwgaG9sZCBvbiBhIHNlY29uZC4uLiBJIGRpc3RpbmN0bHkgcmVtZW1iZXIgc2VlaW5nIGBhcmNoL3g4Ni9rdm0vdm14L3RkeC5jYCBwb3AgdXAgaW4gdGhhdCBgZ3JlcGAgb3V0cHV0IGEgZmV3IG1vbWVudHMgYWdvLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhbmQgcG90ZW50aWFsbHkgcmVsZXZhbnQuIEdpdmVuIG15IGZvY3VzIG9uIEtWTSBhbmQgdGhlIFREWCBpbnRlZ3JhdGlvbiwgdGhhdCBmaWxlIGRlZmluaXRlbHkgd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuIE15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIHRoZSByZWxhdGVkIGBNYWtlZmlsZWAgd2l0aGluIHRoZSBLVk0gZGlyZWN0b3J5LiBUaGF0IHdpbGwgcHJvdmlkZSBjcnVjaWFsIGNvbnRleHQg4oCTIGxpbmtpbmcgdGhpcyBzcGVjaWZpYyBzb3VyY2UgZmlsZSB0byB0aGUgb3ZlcmFsbCBidWlsZCBwcm9jZXNzIGFuZCBwb3RlbnRpYWxseSByZXZlYWxpbmcgZGVwZW5kZW5jaWVzIG9yIGludGVncmF0aW9uIHBvaW50cyB3aXRoaW4gdGhlIHg4Ni9LVk0gc3Vic3lzdGVtLiBGcm9tIHRoZXJlLCBJIGNhbiBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgaXRzIHJvbGUgYW5kIHNpZ25pZmljYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDE6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGR4XFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL01ha2VmaWxlPTIxPWt2bS1pbnRlbC0kKENPTkZJR19LVk1fSFlQRVJWKVx0JiM0Mzs9IHZteC9oeXBlcnYubyB2bXgvaHlwZXJ2X2V2bWNzLm9cbmFyY2gveDg2L2t2bS9NYWtlZmlsZToyMjprdm0taW50ZWwtJChDT05GSUdfS1ZNX0lOVEVMX1REWClcdCYjNDM7PSB2bXgvdGR4Lm9cbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0yMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDE6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0OTIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgZm9yIFREWCBTdXBwb3J0KioKClJpZ2h0LCBzbyBJIHNlZSB3ZSBuZWVkIGBDT05GSUdfS1ZNX0lOVEVMX1REWGAgZm9yIGB0ZHgub2AuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuIFRoZSBwaWVjZXMgYXJlIHNsb3R0aW5nIGludG8gcGxhY2UuIE5vdywgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgZG93biB0aGlzIHBhdGgsIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhhdCBwYXJ0aWN1bGFyIEtjb25maWcgb3B0aW9uIGlzIGV2ZW4gZGVmaW5lZCB3aXRoaW4gb3VyIGN1cnJlbnQgYnVpbGQgZW52aXJvbm1lbnQuIEkgbmVlZCB0byBrbm93IGlmIHRoZSBrZXJuZWwgaGFzIGJlZW4gY29uZmlndXJlZCB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIEludGVsJiMzOTtzIFREWCB0ZWNobm9sb2d5IGluIHRoZSBmaXJzdCBwbGFjZS4gTm8gcG9pbnQgY2hhc2luZyBhIHBoYW50b20gZGVwZW5kZW5jeS4gTGV0JiMzOTtzIHZlcmlmeSB0aGF0IGBDT05GSUdfS1ZNX0lOVEVMX1REWGAgYWN0dWFsbHkgZXhpc3RzLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBvciB0aGUgY3VycmVudCBidWlsZCBjb25maWd1cmF0aW9uLiBLbm93aW5nIHRoaXMgd2lsbCB0ZWxsIG1lIHdoZXRoZXIgSSBjYW4gZXhwZWN0IHRoZSByZWxldmFudCBURFgtcmVsYXRlZCBtb2R1bGVzIGFuZCBmdW5jdGlvbmFsaXR5IHRvIGJlIHByZXNlbnQgaW4gdGhlIGJ1aWxkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0lOVEVMX1REWCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVx0Ym9vbCBcJiMzNDtJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAxOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODgzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFJlYXNvbmluZyBvbiBLVk0gQ29uZmlndXJhdGlvbiBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgS1ZNX0lOVEVMX1REWGAgY29uZmlndXJhdGlvbiBvcHRpb24uIFJpZ2h0LCBpdCYjMzk7cyBhIHNwZWNpZmljIGNvbmZpZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGluY2x1ZGUgYm90aCBgS1ZNYCBnZW5lcmFsbHkgKmFuZCogdGhpcyBgS1ZNX0lOVEVMX1REWGAgb3B0aW9uIGluIHRoZSBmdXp6aW5nIGNvbmZpZ3MuIFRoYXQgbWFrZXMgc2Vuc2UsIGNvdmVyaW5nIHRoZSBnZW5lcmFsIEtWTSBmdW5jdGlvbmFsaXR5IGFuZCB0aGlzIFREWC1zcGVjaWZpYyBwYXJ0LgoKSG1tLCBoYW5nIG9uLiBJJiMzOTttIHNlZWluZyB0aGF0IGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgICpjYW4qIGJlIHJlYWNoZWQgZXZlbiB3aXRob3V0IFREWCBlbmFibGVkLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdywgYnV0Li4uIHRoZSBjcnVjaWFsIHBvaW50IGlzIHRoYXQgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAgKmFwcGVhcnMqIHRvIG9ubHkgYmUgY2FsbGVkIGZyb20gVERYIGNvZGUgYXQgdGhlIG1vbWVudC4gU28sIGFkZGluZyBgS1ZNX0lOVEVMX1REWGAgaXMgc3RpbGwgYSB2YWxpZCBkZWNpc2lvbi4gSXQgZW5zdXJlcyB0aGF0ICpib3RoKiBjb2RlIHBhdGhzLCB0aGUgVERYLXNwZWNpZmljIGFuZCB0aGUgbW9yZSBnZW5lcmFsIG9uZSwgYXJlIGFjY2Vzc2libGUgZHVyaW5nIGZ1enppbmcsIGFuZCBJIGNhbiBiZSBjb25maWRlbnQgSSYjMzk7bSBjb3ZlcmluZyBldmVyeXRoaW5nIHJlbGV2YW50LgoKQWxyaWdodCwgYmVmb3JlIEkgZmluYWxpemUgdGhpcywgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBLVk1fSU5URUxfVERYYCBkb2VzbiYjMzk7dCBoYXZlIGFueSBoaWRkZW4gZGVwZW5kZW5jaWVzLiBOZWVkIHRvIGJlIGNlcnRhaW4gdGhhdCBJJiMzOTttIG5vdCBpbmFkdmVydGVudGx5IGJyZWFraW5nIHNvbWV0aGluZyBlbHNlIGJ5IGVuYWJsaW5nIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzQ6XHRjb25maWcgS1ZNX0lOVEVMX1REWFxuIDEzNTpcdFx0Ym9vbCBcJiMzNDtJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XCYjMzQ7XG4gMTM2Olx0XHRkZWZhdWx0IHlcbiAxMzc6XHRcdGRlcGVuZHMgb24gSU5URUxfVERYX0hPU1RcbiAxMzg6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuIDEzOTpcdFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxuIDE0MDpcdFx0aGVscFxuIDE0MTpcdFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBsYXVuY2hpbmcgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWClcbiAxNDI6XHRcdCAgY29uZmlkZW50aWFsIFZNcyBvbiBJbnRlbCBwcm9jZXNzb3JzLlxuIDE0MzpcdFxuIDE0NDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDE0NTpcdFxuIDE0NjpcdGNvbmZpZyBLVk1fQU1EXG4gMTQ3Olx0XHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbiAxNDg6XHRcdGRlcGVuZHMgb24gS1ZNIFx1MDAyNlx1MDAyNiAoQ1BVX1NVUF9BTUQgfHwgQ1BVX1NVUF9IWUdPTilcbiAxNDk6XHRcdGhlbHBcbiAxNTA6XHRcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgS1ZNIG9uIEFNRCBwcm9jZXNzb3JzIGVxdWlwcGVkIHdpdGggdGhlIEFNRC1WXG4gMTUxOlx0XHQgIChTVk0pIGV4dGVuc2lvbnMuXG4gMTUyOlx0XG4gMTUzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDY1NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jeSoqCgpPa2F5LCBzbyB0aGUgc2l0dWF0aW9uIGhpbmdlcyBvbiB0aGlzIGBJTlRFTF9URFhfSE9TVGAgdmFyaWFibGUuIFRoZSBjb3JlIHF1ZXN0aW9uIGJlZm9yZSBtZSBpcyBpdHMgc3RhdGUuIEkgbmVlZCB0byBrbm93IHRoZSB2YWx1ZSBvZiBgSU5URUxfVERYX0hPU1RgIHRvIGRldGVybWluZSB0aGUgc3Vic2VxdWVudCBjb3Vyc2Ugb2YgYWN0aW9uLiBJdCYjMzk7cyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgYW5kIHByb2NlZWRpbmcgbG9naWNhbGx5LiBNeSBpbW1lZGlhdGUgdGFzayBpcyB0byBhc2NlcnRhaW4gdGhlIGN1cnJlbnQgc2V0dGluZyBvciB2YWx1ZSBvZiBgSU5URUxfVERYX0hPU1RgIOKAkyB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgZWZmZWN0aXZlIGFuYWx5c2lzLiBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gZ2V0IHRoaXMgY3JpdGljYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24gYmVmb3JlIEkgcHJvY2VlZCBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU5URUxfVERYX0hPU1QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZz0xODQ0PWNvbmZpZyBYODZfVVNFUl9TSEFET1dfU1RBQ0tcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTE4NjMtXG5hcmNoL3g4Ni9LY29uZmlnOjE4NjQ6Y29uZmlnIElOVEVMX1REWF9IT1NUXG5hcmNoL3g4Ni9LY29uZmlnLTE4NjUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIGhvc3Qgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDk1MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBpbml0aWFsIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIERlcGVuZGVuY3kgTGFuZHNjYXBlIGZvciBJTlRFTF9URFhfSE9TVCoqCgpBbHJpZ2h0LCB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIGdldCBhIGhhbmRsZSBvbiB3aGF0IGBJTlRFTF9URFhfSE9TVGAgaXMgcmVsaWFudCBvbi4gVW5kZXJzdGFuZGluZyBpdHMgZGVwZW5kZW5jaWVzIGlzIHRoZSBjcml0aWNhbCBmaXJzdCBzdGVwLiBJIG5lZWQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgb3RoZXIgY29tcG9uZW50cywgbGlicmFyaWVzLCBvciBzeXN0ZW1zIGl0JiMzOTtzIGludGVyd292ZW4gd2l0aC4gVGhhdCBpbmZvcm1hdGlvbiBpcyBnb2luZyB0byBsYXkgdGhlIGdyb3VuZHdvcmsgZm9yIGFueSBmdXJ0aGVyIGFuYWx5c2lzLCB0cm91Ymxlc2hvb3RpbmcsIG9yIGRldmVsb3BtZW50IGVmZm9ydHMgZG93biB0aGUgbGluZS4gSXQmIzM5O3MgdGhlIGZvdW5kYXRpb24gb2YgdW5kZXJzdGFuZGluZyB0aGUgZW50aXJlIGFyY2hpdGVjdHVyZSBhbmQgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgYW55IGNoYW5nZS4gV2l0aG91dCB0aGlzIHVuZGVyc3RhbmRpbmcsIEkmIzM5O20gZXNzZW50aWFsbHkgZmx5aW5nIGJsaW5kLiBLbm93aW5nIHRob3NlIHJlbGF0aW9uc2hpcHMgaXMga2V5IGZvciBtYWludGFpbmluZyBhbmQgZGV2ZWxvcGluZyB0aGUgY29kZWJhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAxOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4NjQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTg2NDpcdGNvbmZpZyBJTlRFTF9URFhfSE9TVFxuMTg2NTpcdFx0Ym9vbCBcJiMzNDtJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBob3N0IHN1cHBvcnRcJiMzNDtcbjE4NjY6XHRcdGRlcGVuZHMgb24gQ1BVX1NVUF9JTlRFTFxuMTg2NzpcdFx0ZGVwZW5kcyBvbiBYODZfNjRcbjE4Njg6XHRcdGRlcGVuZHMgb24gS1ZNX0lOVEVMXG4xODY5Olx0XHRkZXBlbmRzIG9uIFg4Nl9YMkFQSUNcbjE4NzA6XHRcdHNlbGVjdCBBUkNIX0tFRVBfTUVNQkxPQ0tcbjE4NzE6XHRcdGRlcGVuZHMgb24gQ09OVElHX0FMTE9DXG4xODcyOlx0XHRkZXBlbmRzIG9uIFg4Nl9NQ0VcbjE4NzM6XHRcdGhlbHBcbjE4NzQ6XHRcdCAgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgcHJvdGVjdHMgZ3Vlc3QgVk1zIGZyb20gbWFsaWNpb3VzXG4xODc1Olx0XHQgIGhvc3QgYW5kIGNlcnRhaW4gcGh5c2ljYWwgYXR0YWNrcy4gIFRoaXMgb3B0aW9uIGVuYWJsZXMgbmVjZXNzYXJ5IFREWFxuMTg3NjpcdFx0ICBzdXBwb3J0IGluIHRoZSBob3N0IGtlcm5lbCB0byBydW4gY29uZmlkZW50aWFsIFZNcy5cbjE4Nzc6XHRcbjE4Nzg6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbjE4Nzk6XHRcbjE4ODA6XHRjb25maWcgRUZJXG4xODgxOlx0XHRib29sIFwmIzM0O0VGSSBydW50aW1lIHNlcnZpY2Ugc3VwcG9ydFwmIzM0O1xuMTg4MjpcdFx0ZGVwZW5kcyBvbiBBQ1BJXG4xODgzOlx0XHRzZWxlY3QgVUNTMl9TVFJJTkdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDE6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0NTMKCQkJCQkJCW91dHB1dDogMTcwCgkJCQkJCQl0aG91Z2h0czogNDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBLVk0gYW5kIFREWCBDb25maWd1cmF0aW9uIGFuZCBCdWcgRml4KioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIEtWTSBhbmQgVERYIGNvbmZpZ3VyYXRpb24gYW5kIGhhdmUgYXJyaXZlZCBhdCBhIGNsZWFyZXIgcGljdHVyZS4gSW5pdGlhbGx5LCBJIHRob3VnaHQgSSBtaWdodCBuZWVkIHRvIGluY2x1ZGUgYEtWTV9JTlRFTGAsIGBYODZfWDJBUElDYCwgYENPTlRJR19BTExPQ2AsIGFuZCBgWDg2X01DRWAgYmVjYXVzZSBgSU5URUxfVERYX0hPU1RgIGRlcGVuZHMgb24gdGhlbS4gSG93ZXZlciwgaXQgbG9va3MgbGlrZSBJIGNhbiBzaW1wbGlmeSB0aGluZ3MuIEFjdHVhbGx5LCBJIHdpbGwgZ28gd2l0aCBgS1ZNYCwgYEtWTV9JTlRFTGAsIGBJTlRFTF9URFhfSE9TVGAsIGFuZCBgS1ZNX0lOVEVMX1REWGAgbm93IHRoYXQgSSYjMzk7dmUgZG91YmxlIGNoZWNrZWQgdGhlIGRlcGVuZGVuY2llcy4gSXQgc2VlbXMgYEtWTV9JTlRFTF9URFhgIGRlZmF1bHRzIHRvICYjMzk7eSYjMzk7IGlmIGBJTlRFTF9URFhfSE9TVGAgaXMgZW5hYmxlZC4KCk5vdywgbGV0JiMzOTtzIHJldmlzaXQgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAuIEkgbmVlZCB0byBlbnN1cmUgdGhlIGZpeCBpcyBjb3JyZWN0bHkgaW50ZWdyYXRlZC4gQWgsIHllcywgaXQmIzM5O3MgY29ubmVjdGVkIHRocm91Z2ggdGhlIGBLVk1fUFJFX0ZBVUxUX01FTU9SWWAgaW9jdGwuIFRoZSBjcml0aWNhbCBhc3BlY3Qgb2YgdGhpcyBwYXRjaCBpcyB0aGUgY29ycmVjdGlvbiBpbiB0aGUgTU1VIHJlbG9hZCB3aXRoaW4gdGhlIHJldHJ5IGxvb3AuIEVzc2VudGlhbGx5LCBpdCByZXNvbHZlcyBhIGJ1ZyB3aGVyZSBga3ZtX21tdV9yZWxvYWRgIHdhc24mIzM5O3QgYmVpbmcgY2FsbGVkIGluc2lkZSB0aGUgcmV0cnkgbG9vcCwgd2hpY2ggY291bGQgY2F1c2UgcHJvYmxlbXMgaWYgdGhlIE1NVSByb290cyB3ZXJlIGludmFsaWRhdGVkIG1pZC1sb29wLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgS1ZNIE1NVSBjb2RlLCBhbmQgSSBuZWVkIHRvIGJlIHN1cmUgaXQmIzM5O3MgYXBwbGllZCBjb3JyZWN0bHkuCgpLZXkgc3ltYm9scyB0byB0cmFjayBub3cgYXJlIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGFuZCBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYC4KClNvLCB0aGUgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyBLVk0gTU1VIHBhZ2UgcHJlLWZhdWx0aW5nIGFuZCBwcml2YXRlIFBGTiBtYXBwaW5nIGxvZ2ljLiBUaGUgZml4IGVuc3VyZXMgdGhlIE1NVSBpcyByZWxvYWRlZCB3aXRoaW4gdGhlIHJldHJ5IGxvb3BzIHdoaWNoIGlzIGNydWNpYWwgYmVjYXVzZSB0aGlzIGZpeGVzIGEgY29uY3VycmVudCBNTVUgcm9vdCBpbnZhbGlkYXRpb24gcHJvYmxlbS4gVGhlIGNoYW5nZXMgZGlyZWN0bHkgaW1wYWN0IHJlYWNoYWJsZSBLVk0gaW9jdGxzIGxpa2UgYEtWTV9QUkVfRkFVTFRfTUVNT1JZYCBhbmQgYWxzbyBURFggZ3Vlc3QgbWVtb3J5IHBvcHVsYXRpb24gd2hpY2ggaXMgc2lnbmlmaWNhbnQuCgpJIHF1aWNrbHkgY2hlY2tlZCBga3ZtX3RkcF9wYWdlX3ByZWZhdWx0YCwgYnV0IGl0JiMzOTtzIHN0YXRpYywgc28gaXQmIzM5O3Mgbm90IHRoZSBiZXN0IHN5bWJvbCB0byBmb2N1cyBvbi4gYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgYW5kIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gIGFyZSBleHBvcnRlZCBhbmQgdGhlcmVmb3JlIGltcG9ydGFudC4KCkFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50IGluIG15IGFzc2Vzc21lbnQuIFRpbWUgdG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDE6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7SU5URUxfVERYX0hPU1QmIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMX1REWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSYjMzQ7LAogICAgJiMzNDtrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIE1NVSBwYWdlIHByZS1mYXVsdGluZyBhbmQgcHJpdmF0ZSBQRk4gbWFwcGluZyBsb2dpYyB0byBjb3JyZWN0bHkgcmVsb2FkIHRoZSBNTVUgaW5zaWRlIHJldHJ5IGxvb3BzLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBpc3N1ZXMgd2hlbiBNTVUgcm9vdHMgYXJlIGludmFsaWRhdGVkIGNvbmN1cnJlbnRseS4gVGhlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBLVk0gaW9jdGxzIChLVk1fUFJFX0ZBVUxUX01FTU9SWSkgYW5kIFREWCBndWVzdCBtZW1vcnkgcG9wdWxhdGlvbiwgbWFraW5nIGl0IGZ1bmN0aW9uYWwgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7SU5URUxfVERYX0hPU1QmIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMX1REWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSYjMzQ7LAogICAgJiMzNDtrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIE1NVSBwYWdlIHByZS1mYXVsdGluZyBhbmQgcHJpdmF0ZSBQRk4gbWFwcGluZyBsb2dpYyB0byBjb3JyZWN0bHkgcmVsb2FkIHRoZSBNTVUgaW5zaWRlIHJldHJ5IGxvb3BzLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBpc3N1ZXMgd2hlbiBNTVUgcm9vdHMgYXJlIGludmFsaWRhdGVkIGNvbmN1cnJlbnRseS4gVGhlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBLVk0gaW9jdGxzIChLVk1fUFJFX0ZBVUxUX01FTU9SWSkgYW5kIFREWCBndWVzdCBtZW1vcnkgcG9wdWxhdGlvbiwgbWFraW5nIGl0IGZ1bmN0aW9uYWwgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMToyMTowMy4yOTcxMTE0NjVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODUxMDIxMzIzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiSU5URUxfVERYX0hPU1RcIixcbiAgICBcIktWTV9JTlRFTF9URFhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlcIixcbiAgICBcImt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBNTVUgcGFnZSBwcmUtZmF1bHRpbmcgYW5kIHByaXZhdGUgUEZOIG1hcHBpbmcgbG9naWMgdG8gY29ycmVjdGx5IHJlbG9hZCB0aGUgTU1VIGluc2lkZSByZXRyeSBsb29wcy4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgaXNzdWVzIHdoZW4gTU1VIHJvb3RzIGFyZSBpbnZhbGlkYXRlZCBjb25jdXJyZW50bHkuIFRoZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgS1ZNIGlvY3RscyAoS1ZNX1BSRV9GQVVMVF9NRU1PUlkpIGFuZCBURFggZ3Vlc3QgbWVtb3J5IHBvcHVsYXRpb24sIG1ha2luZyBpdCBmdW5jdGlvbmFsIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMToyMTowMy4yOTcxMjA4MTVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NTk3Mjc0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDIyOTQxN2M4Y2VmOTdkNjJjNGI4Yjg1NWQzNDRlNWI4ZDRjMWZhYmFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgNyAwMToyMTowMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xcbmluZGV4IGM1MTllOGU4ZDY0NmYuLjc2ZTNjZDcxNzMyNGIgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcXG5AQCAtNTAzNiw2ICs1MDM2LDEwIEBAIHN0YXRpYyBpbnQga3ZtX3RkcF9wYWdlX3ByZWZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLFxcbiBcXHRcXHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9WTV9ERUFELCB2Y3B1KSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcbitcXHRcXHRyID0ga3ZtX21tdV9yZWxvYWQodmNwdSk7XFxuK1xcdFxcdGlmIChyKVxcbitcXHRcXHRcXHRyZXR1cm4gcjtcXG4rXFxuIFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbiBcXHRcXHRyID0ga3ZtX21tdV9kb19wYWdlX2ZhdWx0KHZjcHUsIGdwYSwgZXJyb3JfY29kZSwgdHJ1ZSwgTlVMTCwgbGV2ZWwpO1xcbiBcXHR9IHdoaWxlIChyID09IFJFVF9QRl9SRVRSWSk7XFxuQEAgLTUwNzYsMTQgKzUwODAsNiBAQCBsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIFxcdGlmIChrdm1faXNfZ2ZuX2FsaWFzKHZjcHUtXFx1MDAzZWt2bSwgZ3BhX3RvX2dmbihyYW5nZS1cXHUwMDNlZ3BhKSkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0LypcXG4tXFx0ICogcmVsb2FkIGlzIGVmZmljaWVudCB3aGVuIGNhbGxlZCByZXBlYXRlZGx5LCBzbyB3ZSBjYW4gZG8gaXQgb25cXG4tXFx0ICogZXZlcnkgaXRlcmF0aW9uLlxcbi1cXHQgKi9cXG4tXFx0ciA9IGt2bV9tbXVfcmVsb2FkKHZjcHUpO1xcbi1cXHRpZiAocilcXG4tXFx0XFx0cmV0dXJuIHI7XFxuLVxcbiBcXHRkaXJlY3RfYml0cyA9IDA7XFxuIFxcdGlmIChrdm1fYXJjaF9oYXNfcHJpdmF0ZV9tZW0odmNwdS1cXHUwMDNla3ZtKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAga3ZtX21lbV9pc19wcml2YXRlKHZjcHUtXFx1MDAzZWt2bSwgZ3BhX3RvX2dmbihyYW5nZS1cXHUwMDNlZ3BhKSkpXFxuQEAgLTUxODgsMTQgKzUxODQsNiBAQCBpbnQga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuKVxcbiBcXHRpZiAoa3ZtX2dmbl9pc193cml0ZV90cmFja2VkKGt2bSwgZmF1bHQuc2xvdCwgZmF1bHQuZ2ZuKSlcXG4gXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gXFxuLVxcdHIgPSBrdm1fbW11X3JlbG9hZCh2Y3B1KTtcXG4tXFx0aWYgKHIpXFxuLVxcdFxcdHJldHVybiByO1xcbi1cXG4tXFx0ciA9IG1tdV90b3B1cF9tZW1vcnlfY2FjaGVzKHZjcHUsIGZhbHNlKTtcXG4tXFx0aWYgKHIpXFxuLVxcdFxcdHJldHVybiByO1xcbi1cXG4gXFx0ZG8ge1xcbiBcXHRcXHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVFI7XFxuQEAgLTUyMDMsMTAgKzUxOTEsMzUgQEAgaW50IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbilcXG4gXFx0XFx0aWYgKGt2bV90ZXN0X3JlcXVlc3QoS1ZNX1JFUV9WTV9ERUFELCB2Y3B1KSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcbitcXHRcXHRyID0ga3ZtX21tdV9yZWxvYWQodmNwdSk7XFxuK1xcdFxcdGlmIChyKVxcbitcXHRcXHRcXHRyZXR1cm4gcjtcXG4rXFxuK1xcdFxcdHIgPSBtbXVfdG9wdXBfbWVtb3J5X2NhY2hlcyh2Y3B1LCBmYWxzZSk7XFxuK1xcdFxcdGlmIChyKVxcbitcXHRcXHRcXHRyZXR1cm4gcjtcXG4rXFxuIFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbiBcXG4gXFx0XFx0Z3VhcmQocmVhZF9sb2NrKShcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuIFxcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBCZWNhdXNlIHNsb3RzX2xvY2sgaXMgaGVsZCwgaXQgc2hvdWxkIGJlIGltcG9zc2libGUgZm9yIHJvb3RzXFxuK1xcdFxcdCAqIHRvIGJlIGludmFsaWRhdGVkIGFmdGVyIHRoZSBpbml0aWFsIE1NVSByZWxvYWQuICBXQVJOLCBidXRcXG4rXFx0XFx0ICogY29udGludWUgYW5kIHJlLXJlbG9hZCB0aGUgTU1VIHRvIHRyeSBhbmQga2VlcCB0aGUgVk0gYWxpdmUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRXQVJOX09OX09OQ0Uoa3ZtX3Rlc3RfcmVxdWVzdChLVk1fUkVRX01NVV9GUkVFX09CU09MRVRFX1JPT1RTLCB2Y3B1KSk7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBTbmFwc2hvdCB0aGUgaW52YWxpZGF0aW9uIHNlcXVlbmNlIGNvdW50ZXIgYWZ0ZXIgYWNxdWlyaW5nXFxuK1xcdFxcdCAqIG1tdV9sb2NrLCBhcyBndWVzdF9tZW1mZCBndWFyYW50ZWVzIHRoZSB2YWxpZGl0eSBvZiB0aGUgcGZuLFxcbitcXHRcXHQgKiBpLmUuIGFueSBjb25jdXJyZW50IGludmFsaWRhdGlvbnMgYXJlIGd1YXJhbnRlZWQgdG8gYmVcXG4rXFx0XFx0ICogaXJyZWxldmFudC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGZhdWx0Lm1tdV9zZXEgPSB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZW1tdV9pbnZhbGlkYXRlX3NlcTtcXG4rXFx0XFx0aWYgKGlzX3BhZ2VfZmF1bHRfc3RhbGUodmNwdSwgXFx1MDAyNmZhdWx0KSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbiBcXHRcXHRyID0ga3ZtX3RkcF9tbXVfbWFwKHZjcHUsIFxcdTAwMjZmYXVsdCk7XFxuIFxcdH0gd2hpbGUgKHIgPT0gUkVUX1BGX1JFVFJZKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjIxOjAzLjg1Mzg5MDI1N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg3OTUzNDE4MDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJJTlRFTF9URFhfSE9TVFwiLFxuICAgIFwiS1ZNX0lOVEVMX1REWFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeVwiLFxuICAgIFwia3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIE1NVSBwYWdlIHByZS1mYXVsdGluZyBhbmQgcHJpdmF0ZSBQRk4gbWFwcGluZyBsb2dpYyB0byBjb3JyZWN0bHkgcmVsb2FkIHRoZSBNTVUgaW5zaWRlIHJldHJ5IGxvb3BzLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBpc3N1ZXMgd2hlbiBNTVUgcm9vdHMgYXJlIGludmFsaWRhdGVkIGNvbmN1cnJlbnRseS4gVGhlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBLVk0gaW9jdGxzIChLVk1fUFJFX0ZBVUxUX01FTU9SWSkgYW5kIFREWCBndWVzdCBtZW1vcnkgcG9wdWxhdGlvbiwgbWFraW5nIGl0IGZ1bmN0aW9uYWwgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDIyOTQxN2M4Y2VmOTdkNjJjNGI4Yjg1NWQzNDRlNWI4ZDRjMWZhYmFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDAxOjIxOjAyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbmluZGV4IGM1MTllOGU4ZDY0NmYuLjc2ZTNjZDcxNzMyNGIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG5AQCAtNTAzNiw2ICs1MDM2LDEwIEBAIHN0YXRpYyBpbnQga3ZtX3RkcF9wYWdlX3ByZWZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLFxuIFx0XHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9WTV9ERUFELCB2Y3B1KSlcbiBcdFx0XHRyZXR1cm4gLUVJTztcbiBcbitcdFx0ciA9IGt2bV9tbXVfcmVsb2FkKHZjcHUpO1xuK1x0XHRpZiAocilcbitcdFx0XHRyZXR1cm4gcjtcbitcbiBcdFx0Y29uZF9yZXNjaGVkKCk7XG4gXHRcdHIgPSBrdm1fbW11X2RvX3BhZ2VfZmF1bHQodmNwdSwgZ3BhLCBlcnJvcl9jb2RlLCB0cnVlLCBOVUxMLCBsZXZlbCk7XG4gXHR9IHdoaWxlIChyID09IFJFVF9QRl9SRVRSWSk7XG5AQCAtNTA3NiwxNCArNTA4MCw2IEBAIGxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdGlmIChrdm1faXNfZ2ZuX2FsaWFzKHZjcHUtXHUwMDNla3ZtLCBncGFfdG9fZ2ZuKHJhbmdlLVx1MDAzZWdwYSkpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdC8qXG4tXHQgKiByZWxvYWQgaXMgZWZmaWNpZW50IHdoZW4gY2FsbGVkIHJlcGVhdGVkbHksIHNvIHdlIGNhbiBkbyBpdCBvblxuLVx0ICogZXZlcnkgaXRlcmF0aW9uLlxuLVx0ICovXG4tXHRyID0ga3ZtX21tdV9yZWxvYWQodmNwdSk7XG4tXHRpZiAocilcbi1cdFx0cmV0dXJuIHI7XG4tXG4gXHRkaXJlY3RfYml0cyA9IDA7XG4gXHRpZiAoa3ZtX2FyY2hfaGFzX3ByaXZhdGVfbWVtKHZjcHUtXHUwMDNla3ZtKSBcdTAwMjZcdTAwMjZcbiBcdCAgICBrdm1fbWVtX2lzX3ByaXZhdGUodmNwdS1cdTAwM2Vrdm0sIGdwYV90b19nZm4ocmFuZ2UtXHUwMDNlZ3BhKSkpXG5AQCAtNTE4OCwxNCArNTE4NCw2IEBAIGludCBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4pXG4gXHRpZiAoa3ZtX2dmbl9pc193cml0ZV90cmFja2VkKGt2bSwgZmF1bHQuc2xvdCwgZmF1bHQuZ2ZuKSlcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbiBcbi1cdHIgPSBrdm1fbW11X3JlbG9hZCh2Y3B1KTtcbi1cdGlmIChyKVxuLVx0XHRyZXR1cm4gcjtcbi1cbi1cdHIgPSBtbXVfdG9wdXBfbWVtb3J5X2NhY2hlcyh2Y3B1LCBmYWxzZSk7XG4tXHRpZiAocilcbi1cdFx0cmV0dXJuIHI7XG4tXG4gXHRkbyB7XG4gXHRcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSlcbiBcdFx0XHRyZXR1cm4gLUVJTlRSO1xuQEAgLTUyMDMsMTAgKzUxOTEsMzUgQEAgaW50IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbilcbiBcdFx0aWYgKGt2bV90ZXN0X3JlcXVlc3QoS1ZNX1JFUV9WTV9ERUFELCB2Y3B1KSlcbiBcdFx0XHRyZXR1cm4gLUVJTztcbiBcbitcdFx0ciA9IGt2bV9tbXVfcmVsb2FkKHZjcHUpO1xuK1x0XHRpZiAocilcbitcdFx0XHRyZXR1cm4gcjtcbitcbitcdFx0ciA9IG1tdV90b3B1cF9tZW1vcnlfY2FjaGVzKHZjcHUsIGZhbHNlKTtcbitcdFx0aWYgKHIpXG4rXHRcdFx0cmV0dXJuIHI7XG4rXG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFxuIFx0XHRndWFyZChyZWFkX2xvY2spKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4gXG4rXHRcdC8qXG4rXHRcdCAqIEJlY2F1c2Ugc2xvdHNfbG9jayBpcyBoZWxkLCBpdCBzaG91bGQgYmUgaW1wb3NzaWJsZSBmb3Igcm9vdHNcbitcdFx0ICogdG8gYmUgaW52YWxpZGF0ZWQgYWZ0ZXIgdGhlIGluaXRpYWwgTU1VIHJlbG9hZC4gIFdBUk4sIGJ1dFxuK1x0XHQgKiBjb250aW51ZSBhbmQgcmUtcmVsb2FkIHRoZSBNTVUgdG8gdHJ5IGFuZCBrZWVwIHRoZSBWTSBhbGl2ZS5cbitcdFx0ICovXG4rXHRcdFdBUk5fT05fT05DRShrdm1fdGVzdF9yZXF1ZXN0KEtWTV9SRVFfTU1VX0ZSRUVfT0JTT0xFVEVfUk9PVFMsIHZjcHUpKTtcbitcbitcdFx0LypcbitcdFx0ICogU25hcHNob3QgdGhlIGludmFsaWRhdGlvbiBzZXF1ZW5jZSBjb3VudGVyIGFmdGVyIGFjcXVpcmluZ1xuK1x0XHQgKiBtbXVfbG9jaywgYXMgZ3Vlc3RfbWVtZmQgZ3VhcmFudGVlcyB0aGUgdmFsaWRpdHkgb2YgdGhlIHBmbixcbitcdFx0ICogaS5lLiBhbnkgY29uY3VycmVudCBpbnZhbGlkYXRpb25zIGFyZSBndWFyYW50ZWVkIHRvIGJlXG4rXHRcdCAqIGlycmVsZXZhbnQuXG4rXHRcdCAqL1xuK1x0XHRmYXVsdC5tbXVfc2VxID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlbW11X2ludmFsaWRhdGVfc2VxO1xuK1x0XHRpZiAoaXNfcGFnZV9mYXVsdF9zdGFsZSh2Y3B1LCBcdTAwMjZmYXVsdCkpXG4rXHRcdFx0Y29udGludWU7XG4rXG4gXHRcdHIgPSBrdm1fdGRwX21tdV9tYXAodmNwdSwgXHUwMDI2ZmF1bHQpO1xuIFx0fSB3aGlsZSAociA9PSBSRVRfUEZfUkVUUlkpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MjE6MDMuODUzODkxNDc3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM0NTI5NTY1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLVk0veDg2IFBhdGNoIGFuZCBpdHMgSW1wbGljYXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHNlZW1zIHRvIGJlIHRvdWNoaW5nIHRoZSB4ODYgS1ZNIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIHNwZWNpZmljYWxseSBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AuIFRoZSBjaGFuZ2VzIGFyZSBmb2N1c2VkIG9uIHRoZXNlIGZ1bmN0aW9uczogYGt2bV90ZHBfcGFnZV9wcmVmYXVsdGAsIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLCBhbmQgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgbGlrZWx5IGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIG9yIGEgZml4IHJlbGF0ZWQgdG8gcGFnZSBmYXVsdCBoYW5kbGluZyBpbiB0aGUgVERQIChUYWdnZWQgRGF0YSBQb2ludGVyKSBNTVUgaW1wbGVtZW50YXRpb24uXG5cblRoZSBrZXkgY2hhbmdlIEknbSBzZWVpbmcgaXMgdGhlIHJlbG9jYXRpb24gb2YgYGt2bV9tbXVfcmVsb2FkKHZjcHUpYCBpbnNpZGUgdGhlIGBkby4uLndoaWxlYCBsb29wIGluIGBrdm1fdGRwX3BhZ2VfcHJlZmF1bHRgIGFuZCBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYC4gVGhpcyBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayB0aGV5J3JlIHRyeWluZyB0byByZWZpbmUgdGhlIHJldHJ5IGxvZ2ljIG9uIHBhZ2UgZmF1bHRzIHRvIGVuc3VyZSB0aGUgTU1VIHN0YXRlIGlzIHVwLXRvLWRhdGUgYWZ0ZXIgZWFjaCBhdHRlbXB0LiBJdCdzIGdvb2QgcHJhY3RpY2UgdG8gcmUtZXZhbHVhdGUgdGhlIE1NVSBzdGF0ZSwgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiBuZXN0ZWQgcGFnaW5nLlxuXG5BbHNvLCBtb3ZpbmcgYG1tdV90b3B1cF9tZW1vcnlfY2FjaGVzKHZjcHUsIGZhbHNlKWAgaW50byB0aGUgbG9vcCB3aXRoaW4gYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAgc3VnZ2VzdHMgYW4gZWZmb3J0IHRvIGltcHJvdmUgdGhlIGNhY2hlIGhpdCByYXRlIGR1cmluZyB0aGUgZmF1bHQgaGFuZGxpbmcgcHJvY2Vzcywgd2hpY2ggaXMgYSBjb21tb24gcGVyZm9ybWFuY2UgYm90dGxlbmVjayBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoaXMgaXMgYSB2ZXJ5IHRhcmdldGVkIGFwcHJvYWNoIHRvIGRlYWxpbmcgd2l0aCB0aGUgQ1BVIGNhY2hlLlxuXG5UaGUgYWRkaXRpb24gb2YgdGhlIGBXQVJOX09OX09OQ0VgIGFuZCBgaXNfcGFnZV9mYXVsdF9zdGFsZWAgY2hlY2sgaW4gYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAgaXMgYSBzaWduYWwgb2YgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgZXJyb3IgY29uZGl0aW9uIHRoZSBkZXZlbG9wZXJzIGFyZSB0cnlpbmcgdG8gZGV0ZWN0IGFuZCBhZGRyZXNzLiBJdCdzIGEgdXNlZnVsIGRlYnVnZ2luZyB0b29sIHRvIHByZXZlbnQgdGhlIHN5c3RlbSBmcm9tIGdldHRpbmcgaW50byBhIGJhZCBzdGF0ZS5cblxuQmVmb3JlIEkgZGVsdmUgZGVlcGVyIGludG8gdGhlIGNvZGUgaXRzZWxmLCBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhlIEtWTSBjb25maWd1cmF0aW9ucywgYXMgYENPTkZJR19LVk1gIGlzIGZ1bmRhbWVudGFsIHRvIGFueSBLVk0gb3BlcmF0aW9uIG9uIHg4Ni4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGUgcGF0Y2guXG5cbkkgd2lsbCBwZXJmb3JtIGEgZ3JlcCBzZWFyY2ggZm9yIHRoZSBmdW5jdGlvbiBuYW1lcyB3aXRoaW4gdGhlIEtWTSBzb3VyY2UgdG8gZ3Jhc3AgdGhlaXIgaW50ZXJkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NzksIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMToyMToxMC4xOTkxOTExMjNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ3NDE5NjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3RkcF9wYWdlX3ByZWZhdWx0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9tbXUvbW11LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL21tdS9tbXUuYz00OTU1PXN0YXRpYyBpbnQga3ZtX21tdV9kb19wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTAxOS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUwMjA6c3RhdGljIGludCBrdm1fdGRwX3BhZ2VfcHJlZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MDIxLVxcdFxcdFxcdFxcdCB1NjQgZXJyb3JfY29kZSwgdTggKmxldmVsKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz01MDY4PWxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTA5My1cXHQgKi9cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUwOTQ6XFx0ciA9IGt2bV90ZHBfcGFnZV9wcmVmYXVsdCh2Y3B1LCByYW5nZS1cXHUwMDNlZ3BhIHwgZGlyZWN0X2JpdHMsIGVycm9yX2NvZGUsIFxcdTAwMjZsZXZlbCk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MDk1LVxcdGlmIChyIFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MjE6MTAuMjYzOTM3NjQ2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM0NzI3MjE4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaWdnaW5nIGludG8gS1ZNJ3MgVHJhbnNsYXRpb24gUHJvY2VzcyoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBLVk0gaGFuZGxlcyBpdHMgbWVtb3J5IG1hcHBpbmcsIGFuZCBzcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgdHJhbnNsYXRpb24gcHJvY2Vzcy4gVGhhdCBcInByaXZhdGUgcGFnZSBmcmFtZSBudW1iZXIsXCIgb3IgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAsIHRoYXQncyB0aGUga2V5IGhlcmUuIEl0J3MgYSB2ZXJ5IHNwZWNpZmljIGZ1bmN0aW9uIG5hbWUsIHdoaWNoIHRlbGxzIG1lIEknbSBsaWtlbHkgZGVhbGluZyB3aXRoIHRoZSBcIlRyYW5zbGF0aW9uIExvb2thc2lkZSBCdWZmZXIgKFRMQikgYW5kIHBhZ2UgdGFibGUgd2Fsa1wiIHByb2Nlc3MuIFRoZSBmYWN0IHRoYXQgaXQncyBcInByaXZhdGVcIiBpcyBpbnRyaWd1aW5nOyB3aGF0IGlzIHRoYXQgcHJpdmF0ZSB0bz8gSXMgaXQgcHJpdmF0ZSB0byB0aGUgVk0sIHByaXZhdGUgdG8gYSBzcGVjaWZpYyB2Q1BVLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGBwZm5gIHBhcnQgaXMgY2xlYXJseSByZWxhdGVkIHRvIHBhZ2UgZnJhbWUgbnVtYmVycywgc3VnZ2VzdGluZyBJJ20gb24gdGhlIHJpZ2h0IHRyYWNrIGV4cGxvcmluZyB0aGUgcGh5c2ljYWwgbWVtb3J5IGFkZHJlc3Mgc3BhY2UgYW5kIGhvdyBpdCdzIHRyYW5zbGF0ZWQgZm9yIHRoZSB2aXJ0dWFsIG1hY2hpbmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoaXMgbWFwcGluZyB3b3JrcyBhbmQgaG93IGl0IGludGVncmF0ZXMgd2l0aCB0aGUgdW5kZXJseWluZyBoeXBlcnZpc29yJ3MgbWVtb3J5IG1hbmFnZW1lbnQuIEkgc3VzcGVjdCBpdCdzIGNyaXRpY2FsIHRvIHBlcmZvcm1hbmNlIGFuZCBzZWN1cml0eSwgYW5kIGEgZGVlcCB1bmRlcnN0YW5kaW5nIHdpbGwgcHJvYmFibHkgeWllbGQgdmFsdWFibGUgaW5zaWdodHMuIExldCdzIGRlbHZlIGluIGFuZCBmaW5kIHNvbWUgYW5zd2Vycy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE2MiwiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjIxOjEzLjYxMTIxMjc4MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjM5Nzc5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL21tdS9tbXUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jPTUxMzg9c3RhdGljIHZvaWQga3ZtX2Fzc2VydF9nbWVtX2ludmFsaWRhdGVfbG9ja19oZWxkKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUxNDktXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MTUwOmludCBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4pXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MTUxLXtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTIzMC19XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MjMxOkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4pO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTIzMi0jZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MjE6MTMuNjgzNjE5MjE0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA4NzA0MTY0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYCBGdW5jdGlvbioqXG5cblJpZ2h0LCBzbyBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYCBpcyBleHBvc2VkIGFzIGFuIGludGVybmFsIGZ1bmN0aW9uIHdpdGhpbiBLVk0uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgdXNhZ2UuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkgbmVlZCB0byB0cmFjZSBpdHMgY2FsbCBzaXRlcyB0byBkZXRlcm1pbmUgcHJlY2lzZWx5IHdoZXJlIGl0J3MgYmVpbmcgbGV2ZXJhZ2VkIHdpdGhpbiB0aGUgS1ZNIGFyY2hpdGVjdHVyZS4gUGlucG9pbnRpbmcgdGhlIGNhbGxlcnMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgcm9sZSBpbiB0aGUgVERQIE1NVSdzIG9wZXJhdGlvbiBhbmQgaG93IGl0IGNvbnRyaWJ1dGVzIHRvIHRoZSBvdmVyYWxsIHZpcnR1YWxpemF0aW9uIHByb2Nlc3MuIFRoaXMgZnVuY3Rpb24ncyBpbXBhY3Qgb24gbWVtb3J5IG1hcHBpbmcgYW5kIHByb3RlY3Rpb24gaXMgb2YgcGFydGljdWxhciBpbnRlcmVzdCwgYW5kIHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgaXRzIGludm9jYXRpb25zIHdpbGwgc2hlZCBsaWdodCBvbiB0aG9zZSBpbnRyaWNhY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc2MSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjIxOjE2Ljc3MDY2MzE3NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDk2MjA5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11Lmg9MzMxPXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fc2hhZG93X3Jvb3RfYWxsb2NhdGVkKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUuaC0zNDEtXFxuYXJjaC94ODYva3ZtL21tdS5oOjM0MjppbnQga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuKTtcXG5hcmNoL3g4Ni9rdm0vbW11LmgtMzQzLVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz01MTM4PXN0YXRpYyB2b2lkIGt2bV9hc3NlcnRfZ21lbV9pbnZhbGlkYXRlX2xvY2tfaGVsZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MTQ5LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTE1MDppbnQga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuKVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTE1MS17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUyMzAtfVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTIzMTpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUyMzItI2VuZGlmXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTMxODA9c3RhdGljIGludCB0ZHhfZ21lbV9wb3N0X3BvcHVsYXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zMTkyLVxcdGt2bV90ZHgtXFx1MDAzZXBhZ2VfYWRkX3NyYyA9IHNyY19wYWdlO1xcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MzE5MzpcXHRyZXQgPSBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4oYXJnLVxcdTAwM2V2Y3B1LCBnZm4sIHBmbik7XFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zMTk0LVxcdGt2bV90ZHgtXFx1MDAzZXBhZ2VfYWRkX3NyYyA9IE5VTEw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjIxOjE2Ljg2NTYzMDM5NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjQ3Mjg1NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVsdmluZyBpbnRvIFREWCBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHRkeF9nbWVtX3Bvc3RfcG9wdWxhdGVgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgd2hlcmUgaXQncyBjYWxsZWQgd2l0aGluIHRoZSBgYXJjaC94ODYva3ZtL3ZteC90ZHguY2AgZmlsZS4gUmlnaHQgYXdheSwgdGhpcyBzY3JlYW1zIFREWCBhbmQgZ3Vlc3QgbWVtb3J5IGZpbGUgZGVzY3JpcHRvcnMuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC4gVGhlIGNvbnRleHQgaXMgb2J2aW91c2x5IGNlbnRlcmVkIGFyb3VuZCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucy4gSSBrbm93IHRoYXQgVERYIGludHJvZHVjZXMgc29tZSBwcmV0dHkgc3BlY2lmaWMgaGFyZHdhcmUgZGVwZW5kZW5jaWVzLCBhbmQgSSdtIGN1cmlvdXMgaWYgdGhpcyBmdW5jdGlvbiBpcyBvdmVybHkgc3BlY2lhbGl6ZWQsIG9yIGlmIGl0cyBwcmluY2lwbGVzIGNhbiBiZSBhcHBsaWVkIG1vcmUgZ2VuZXJhbGx5LlxuXG5NeSBpbml0aWFsIHRob3VnaHRzIGFyZSB0aGF0IGBrdm1fdGRwX3BhZ2VfcHJlZmF1bHRgIGFuZCBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBhcmUgcHJvYmFibHkgYnJvYWRlciBpbiBzY29wZSwgbWVhbmluZyB0aGV5IGFyZW4ndCB0aWVkIGV4Y2x1c2l2ZWx5IHRvIFREWCBsaWtlIHRoaXMgb25lIGlzLiBUbyBjb25maXJtIHRoaXMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlc2UgbW9yZSBnZW5lcmFsIGZ1bmN0aW9ucyBhcmUgZG9pbmcgYW5kIGlmIHRoZXkgaGF2ZSBpbXBsaWNhdGlvbnMgaGVyZS4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIHVuZGVybHlpbmcgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjE0LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjIxOjIwLjU5MDM2MzU2MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgzOTUxMjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL21tdS9tbXUuYz01MDIwPXN0YXRpYyBpbnQga3ZtX3RkcF9wYWdlX3ByZWZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MDY3LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTA2ODpsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MDY5LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0xNjk4PXN0YXRpYyBpbnQgdGR4X3NlcHRfbWFwX2xlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgZW51bSBwZ19sZXZlbCBsZXZlbCxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMTcxMC1cXHQvKlxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MTcxMTpcXHQgKiBFbnN1cmUgcHJlX2ZhdWx0X2FsbG93ZWQgaXMgcmVhZCBieSBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoKVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMTcxMi1cXHQgKiBiZWZvcmUga3ZtX3RkeC1cXHUwMDNlc3RhdGUuICBVc2Vyc3BhY2UgbXVzdCBub3QgYmUgYWxsb3dlZCB0byBwcmUtZmF1bHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MjE6MjAuNjY4NzY2MjA0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0ODE3NjExNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgS1ZNIE1lbW9yeSBGYXVsdCBQcmUtSGFuZGxpbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyB6b29tIGluIG9uIHRoaXMgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJBaCwgdGhpcyBpcyB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGhvb2sgZm9yIGhhbmRsaW5nIHByZS1mYXVsdGluZyBtZW1vcnkgYWNjZXNzZXMsIHJpZ2h0P1wiIEl0J3Mgbm90IGEgc3RhbmRhbG9uZSB0aGluZzsgaXQncyAqdGhlKiBhcmNoaXRlY3R1cmUncyBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiBhIG11Y2ggYnJvYWRlciBLVk0gaW9jdGwgZGVzaWduZWQgdG8gaGFuZGxlIGEgcGFnZSBmYXVsdCBiZWZvcmUgaXQgdGFrZXMgcGxhY2UgaW4gdGhlIGd1ZXN0LiBLbm93aW5nIHRoYXQsIG15IG5leHQgc3RlcCBpcyBjbGVhci4gSSBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsIHNpdGVzIHdpdGhpbiB0aGUgZ2VuZXJpYyBLVk0gZnJhbWV3b3JrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIHBhcnRpY3VsYXIgcHJlLWZhdWx0IG1lY2hhbmlzbSBpcyBiZWluZyB0cmlnZ2VyZWQgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxhcmdlciBLVk0gZmxvdy4gSeKAmW0gdGhpbmtpbmcsIG1heWJlIEknbGwgc2VlIHdoZXJlIHRoZSBnZW5lcmljIGNvZGUgc2V0cyB1cCB0aGUgc3RhZ2UsIHBlcmhhcHMgc2V0dGluZyB1cCBhIHN0cnVjdCwgYW5kIHRoZW4gdGhpcyBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgaG9vayBkb2VzIHNvbWV0aGluZyB1bmlxdWUgYmFzZWQgb24gdGhlIGFyY2hpdGVjdHVyZS4gSXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBicm9hZGVyIGNvZGUgYmFzZSBhbmQgc2VlIHRoZSBob3cgYW5kIHdoeS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM1NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjIxOjI0LjE1MDUzMDk2NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzMDUxODQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ2aXJ0L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidmlydC9rdm0va3ZtX21haW4uYz00MzUzPXN0YXRpYyBpbnQga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQzNzctXFxudmlydC9rdm0va3ZtX21haW4uYzo0Mzc4OlxcdFxcdHIgPSBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkodmNwdSwgcmFuZ2UpO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDM3OS1cXHRcXHRpZiAoV0FSTl9PTl9PTkNFKHIgPT0gMCB8fCByID09IC1FSU8pKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMToyMToyNC4yNjM1OTIyNDNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgyNTU4MjIwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZXhwZXJ0OlxuXG4qKkFuYWx5emluZyB0aGUgS1ZNIFByZS1GYXVsdCBNZW1vcnkgUGF0aCoqXG5cblJpZ2h0LCBzbyBga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgaXMgaW5kZWVkIHRyaWdnZXJlZCBieSB0aGUgYEtWTV9QUkVfRkFVTFRfTUVNT1JZYCBpb2N0bC4gTXkgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiB0aGF0IGBLVk1fUFJFX0ZBVUxUX01FTU9SWWAgaW9jdGwgbm93LiBUaGF0J3MgdGhlIGVudHJ5IHBvaW50LCB0aGUgY3JpdGljYWwgcG9pbnQgb2YgaW50ZXJlc3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgKnRoZXJlKiBpbiBvcmRlciB0byBncmFzcCB0aGUgb3ZlcmFsbCBtZW1vcnkgcHJlLWZhdWx0aW5nIG1lY2hhbmlzbSB3aXRoaW4gS1ZNLiBXaGF0IGFyZSB0aGUgYXJndW1lbnRzIHBhc3NlZD8gV2hhdCdzIHRoZSBjb250ZXh0PyBXaGF0IGV4YWN0bHkgdHJpZ2dlcnMgdGhlIGNhbGwgdG8gYGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgPyBMZXQncyBkaWcgaW4gYW5kIHNlZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgyMiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjIxOjI3LjA4OTE3Nzk5MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk1MzY5MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiS1ZNX1BSRV9GQVVMVF9NRU1PUllcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwidmlydC9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmM9NDQyNT1zdGF0aWMgbG9uZyBrdm1fdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDY1MS0jaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjQ2NTI6XFx0Y2FzZSBLVk1fUFJFX0ZBVUxUX01FTU9SWToge1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDY1My1cXHRcXHRzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgcmFuZ2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjIxOjI3LjE2ODcyNzAwM1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzIwMzY4MDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wbGljYXRpb25zIG9mIHRoZSBLVk1fUFJFX0ZBVUxUX01FTU9SWSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBLVk1fUFJFX0ZBVUxUX01FTU9SWWAgaXMgYSByZWFjaGFibGUgaW9jdGwuIFRoYXQncyBvdXIgZW50cnkgcG9pbnQsIGFuZCB0aGUgcGF0Y2ggaGl0cyBhIGZldyBrZXkgZnVuY3Rpb25zOiBga3ZtX3RkcF9wYWdlX3ByZWZhdWx0YCBhbmQgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAuIFRob3NlIGFyZSBib3RoIGNhbGxlZCBkaXJlY3RseSB2aWEgYEtWTV9QUkVfRkFVTFRfTUVNT1JZYCwgd2hpY2ggbWFrZXMgdGhpcyBpbnRlcmVzdGluZyBmcm9tIGEgZ2VuZXJhbCB4ODYgS1ZNIHBlcnNwZWN0aXZlLlxuXG5UaGVuIHRoZXJlJ3MgdGhlIG1vZGlmaWNhdGlvbiB0byBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYHRkeF9nbWVtX3Bvc3RfcG9wdWxhdGVgLiBPa2F5LCB0aGF0J3MgVERYIHNwZWNpZmljLCBzbyB0aGF0IGJyYW5jaCBpcyBpbnRlcmVzdGluZyBidXQgc2VwYXJhdGUgZnJvbSB0aGUgY29yZSB4ODYgaW1wbGljYXRpb25zLiBCdXQgd2FpdCBhIHNlY29uZCwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4uLiBga3ZtX3RkcF9wYWdlX3ByZWZhdWx0YCBpcyBjYWxsZWQgZnJvbSBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YC4gU2luY2UgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgaXMgcmVhY2hhYmxlIHZpYSBgS1ZNX1BSRV9GQVVMVF9NRU1PUllgLCBpdCBpbXBsaWVzIHRoYXQgdGhpcyBwYXRjaCBsaWtlbHkgaGFzIGxhcmdlciByYW1pZmljYXRpb25zIGZvciBnZW5lcmFsIHg4NiBLVk0gZnVuY3Rpb25hbGl0eS4gU28sIGJlZm9yZSBJIGRpZyBmdXJ0aGVyLCBJIHNob3VsZCBqdXN0IG1ha2Ugc3VyZSB0aGF0IGBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZYCBpcyBhY3R1YWxseSBlbmFibGVkIGZvciB4ODYuIFRoYXQncyBhIHNhbml0eSBjaGVjayBJIG5lZWQgdG8gZG8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyMTUsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MjE6MzEuODg5MDk4NTM3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Mzg3MDc2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTIwPWNvbmZpZyBLVk1fWDg2XFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy00Ny1cXHRzZWxlY3QgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkdcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo0ODpcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTQ5LVxcdHNlbGVjdCBLVk1fV0VSUk9SIGlmIFdFUlJPUlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMToyMTozMS45NjI5NzcyNDlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE3MDc4Mjc0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvZGUncyBSZWFjaGFiaWxpdHkgYW5kIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyB0aGUgY29kZSBwYXRoIGlzIGNvbmZpcm1lZDsgaXQncyBzZWxlY3RlZCBieSBgS1ZNX1g4NmAsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgYWNjZXNzaWJsZS4gVGhlIGNoYW5nZSBpdHNlbGYgaXMgaW50ZXJlc3Rpbmc6IGBrdm1fbW11X3JlbG9hZCh2Y3B1KWAgaXMgYmVpbmcgbW92ZWQgaW50byB0aGUgcmV0cnkgbG9vcCB3aXRoaW4gYm90aCBga3ZtX3RkcF9wYWdlX3ByZWZhdWx0YCBhbmQgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAuIFRoYXQncyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uLCBhbmQgc3VnZ2VzdHMgaGFuZGxpbmcgTU1VIGludmFsaWRhdGlvbnMgZHVyaW5nIHByZS1mYXVsdGluZyBhbmQgcHJpdmF0ZSBQRk4gbWFwcGluZyBpcyBub3cgdGhlIGZvY3VzLlxuXG5HaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2UsIGZ1enppbmcgdGhpcyBhcmVhIGlzIGRlZmluaXRlbHkgd2FycmFudGVkLlxuXG5Ob3csIGxldCdzIHBpbnBvaW50IHNvbWUga2V5IHN5bWJvbHMgdG8gaW52ZXN0aWdhdGUuIE15IHByaW1hcnkgZm9jdXMgd2lsbCBiZSBvbiB0aGVzZSBmdW5jdGlvbnM6IGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLCBhbmQgYWxzbyBvbiBga3ZtX3RkcF9wYWdlX3ByZWZhdWx0YCwgd2hpY2ggaXMgc3RhdGljLCBzbyBJJ2xsIGNoZWNrIHdoZXRoZXIgaXQgaXMgaW5saW5lZCBvciBub3QuIExhc3RseSwgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAsIHdoaWNoIGlzIGV4cG9ydGVkLiBJIHN1c3BlY3QgdGhhdCB0aGlzIGxhdHRlciBmdW5jdGlvbiBpcyBURFggc3BlY2lmaWMsIHdoaWNoIG1pZ2h0IGxpbWl0IG15IGluaXRpYWwgZnV6emluZyBhdHRlbXB0cywgdW5sZXNzIEkgaGF2ZSBhY2Nlc3MgdG8gVERYIGhhcmR3YXJlLlxuXG5JJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGluIGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIHZ1bG5lcmFiaWxpdGllcywgb3IgaW50ZXJlc3RpbmcgaW50ZXJhY3Rpb25zIHRvIGNvbnNpZGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODkzLCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjIxOjM3LjEzMzc2NDE0NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2NjYzMzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9tbXUvbW11LmM9NTAyMD1zdGF0aWMgaW50IGt2bV90ZHBfcGFnZV9wcmVmYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTA2Ny1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUwNjg6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTA2OS1cXHRcXHRcXHRcXHQgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MjE6MzcuMjUwNDMyMjYzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2OTg5NjMxMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTSBNZW1vcnkgUHJlLUZhdWx0aW5nKipcblxuT2theSwgc28gSSdtIGhvbmluZyBpbiBvbiB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBwcmUtZmF1bHRpbmcgbWVtb3J5IHdpdGhpbiBLVk0uIFNwZWNpZmljYWxseSwgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgc2VlbXMgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQsIGl04oCZcyBhIHN0cm9uZyBmb2N1cyBzeW1ib2wuIEFuZCB0aGVuIHRoZXJlJ3MgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAsIHdoaWNoIGFsc28gbG9va3MgcHJvbWlzaW5nLCBldmVuIGlmIGl0IG1pZ2h0IGludm9sdmUgc29tZSBURFggY29uc2lkZXJhdGlvbnMuXG5cbk5vdywgbGV0J3MganVzdCBjb25maXJtIHNvbWV0aGluZyBxdWlja2x5Li4uIEkgbmVlZCB0byBjaGVjayBpZiBga3ZtX3RkcF9wYWdlX3ByZWZhdWx0YCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gWWVwLCBpdCBpcy4gU28gdGhhdCBqdXN0IHJlaW5mb3JjZXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IC0gYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgYW5kIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gIGFyZSByZWFsbHkgdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzIHRvIGRpZyBpbnRvLlxuXG5BcyBmb3IgY29uZmlndXJhdGlvbnMsIGl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYEtWTWAgaXMgdGhlIG1haW4gb25lIHRvIGNvbnNpZGVyLiBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMuIGBLVk1gIGlzIGluZGVlZCBzdWZmaWNpZW50IGZvciBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YC4gQW5kIGZvciBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYCwgbG9va3MgbGlrZSBpdCdzIHVuY29uZGl0aW9uYWxseSBjb21waWxlZCB3aXRoaW4gYG1tdS5jYCBhcyBsb25nIGFzIGBDT05GSUdfS1ZNYCBpcyBlbmFibGVkLiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzLCBzbyBJIGNhbiBmb2N1cyBvbiB0aG9zZSB0d28gc3ltYm9scyBhcyB0aGUgY29yZSBvZiB0aGlzIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2NzUsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MjE6NDEuOTQ5Mzk3MzM5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTAyNjMzNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9tbXUvbW11LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL21tdS9tbXUuYz01MTM4PXN0YXRpYyB2b2lkIGt2bV9hc3NlcnRfZ21lbV9pbnZhbGlkYXRlX2xvY2tfaGVsZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MTQ5LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTE1MDppbnQga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuKVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTE1MS17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUyMzAtfVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTIzMTpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUyMzItI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjIxOjQyLjA1OTY2NjEzOFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTg2NDQ5MzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBleHBlcnQgdG8gZXhwZXJ0OlxuXG4qKk5hdmlnYXRpbmcgYSBDb25kaXRpb25hbCBDb21waWxhdGlvbiBCbG9jayoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEknbSBzZWVpbmcgYW4gYCNlbmRpZmAgZGlyZWN0aXZlIGRvd24gaGVyZSBvbiBsaW5lIDUyMzIuIFRoYXQncyBhIGNsZWFyIHNpZ25hbCB3ZSdyZSBkZWFsaW5nIHdpdGggYSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBibG9jay4gTXkgaW1tZWRpYXRlIHJlZmxleCBpcyB0byBmaWd1cmUgb3V0IHdoaWNoIGAjaWZkZWZgLCBgI2lmbmRlZmAsIGAjaWZgLCBvciBgI2VsaWZgIGl0J3MgcGFpcmVkIHdpdGguIFRoYXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgd2hpY2ggc2VjdGlvbnMgb2YgY29kZSBhcmUgYmVpbmcgaW5jbHVkZWQgb3IgZXhjbHVkZWQgYmFzZWQgb24gYnVpbGQgY29uZmlndXJhdGlvbnMsIGNvbXBpbGVyIGZsYWdzLCBvciBkZWZpbmVkIG1hY3Jvcy4gVGhpcyBpcyBmdW5kYW1lbnRhbCBmb3IgZGVidWdnaW5nLCB1bmRlcnN0YW5kaW5nIHBvcnRhYmlsaXR5LCBhbmQgb3B0aW1pemluZyBjb2RlIGZvciBzcGVjaWZpYyBlbnZpcm9ubWVudHMuIEkgbmVlZCB0byB0cmFjZSBiYWNrd2FyZCB0byBmaW5kIGl0cyBjb3JyZXNwb25kaW5nIHByZXByb2Nlc3NvciBkaXJlY3RpdmUuIEtub3dpbmcgdGhlIGNvbmRpdGlvbmFsIGlzICpjcml0aWNhbCogdG8gdW5kZXJzdGFuZGluZyB3aGF0J3MgZ29pbmcgb24gaW4gdGhpcyBwYXJ0IG9mIHRoZSBjb2RlYmFzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUxOSwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjIxOjQ1LjI0NjExODc4OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTMxMjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9tbXUvbW11LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTEzMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUxMzA6XFx0XFx0ICogaWdub3JlIHN0YXRzIGZvciBhbGwgb3RoZXIgcmV0dXJuIHRpbWVzLiAgUGFnZS1yZWFkeSBcXFwiZmF1bHRzXFxcIiBhcmVuJ3RcXG41MTMxOlxcdFxcdCAqIHRydWx5IHNwdXJpb3VzIGFuZCBuZXZlciB0cmlnZ2VyIGVtdWxhdGlvblxcbjUxMzI6XFx0XFx0ICovXFxuNTEzMzpcXHRcXHRpZiAociA9PSBSRVRfUEZfRklYRUQpXFxuNTEzNDpcXHRcXHRcXHR2Y3B1LVxcdTAwM2VzdGF0LnBmX2ZpeGVkKys7XFxuNTEzNTpcXHR9XFxuNTEzNjpcXHRcXG41MTM3OlxcdCNpZmRlZiBDT05GSUdfS1ZNX0dVRVNUX01FTUZEXFxuNTEzODpcXHRzdGF0aWMgdm9pZCBrdm1fYXNzZXJ0X2dtZW1faW52YWxpZGF0ZV9sb2NrX2hlbGQoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcXG41MTM5OlxcdHtcXG41MTQwOlxcdCNpZmRlZiBDT05GSUdfUFJPVkVfTE9DS0lOR1xcbjUxNDE6XFx0XFx0aWYgKFdBUk5fT05fT05DRSgha3ZtX3Nsb3RfaGFzX2dtZW0oc2xvdCkpIHx8XFxuNTE0MjpcXHRcXHQgICAgV0FSTl9PTl9PTkNFKCFzbG90LVxcdTAwM2VnbWVtLmZpbGUpIHx8XFxuNTE0MzpcXHRcXHQgICAgV0FSTl9PTl9PTkNFKCFmaWxlX2NvdW50KHNsb3QtXFx1MDAzZWdtZW0uZmlsZSkpKVxcbjUxNDQ6XFx0XFx0XFx0cmV0dXJuO1xcbjUxNDU6XFx0XFxuNTE0NjpcXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZmaWxlX2lub2RlKHNsb3QtXFx1MDAzZWdtZW0uZmlsZSktXFx1MDAzZWlfbWFwcGluZy1cXHUwMDNlaW52YWxpZGF0ZV9sb2NrKTtcXG41MTQ3OlxcdCNlbmRpZlxcbjUxNDg6XFx0fVxcbjUxNDk6XFx0XFxuNTE1MDpcXHRpbnQga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuKVxcbjUxNTE6XFx0e1xcbjUxNTI6XFx0XFx0c3RydWN0IGt2bV9wYWdlX2ZhdWx0IGZhdWx0ID0ge1xcbjUxNTM6XFx0XFx0XFx0LmFkZHIgPSBnZm5fdG9fZ3BhKGdmbiksXFxuNTE1NDpcXHRcXHRcXHQuZXJyb3JfY29kZSA9IFBGRVJSX0dVRVNUX0ZJTkFMX01BU0sgfCBQRkVSUl9QUklWQVRFX0FDQ0VTUyxcXG41MTU1OlxcdFxcdFxcdC5wcmVmZXRjaCA9IHRydWUsXFxuNTE1NjpcXHRcXHRcXHQuaXNfdGRwID0gdHJ1ZSxcXG41MTU3OlxcdFxcdFxcdC5ueF9odWdlX3BhZ2Vfd29ya2Fyb3VuZF9lbmFibGVkID0gaXNfbnhfaHVnZV9wYWdlX2VuYWJsZWQodmNwdS1cXHUwMDNla3ZtKSxcXG41MTU4OlxcdFxcbjUxNTk6XFx0XFx0XFx0Lm1heF9sZXZlbCA9IFBHX0xFVkVMXzRLLFxcbjUxNjA6XFx0XFx0XFx0LnJlcV9sZXZlbCA9IFBHX0xFVkVMXzRLLFxcbjUxNjE6XFx0XFx0XFx0LmdvYWxfbGV2ZWwgPSBQR19MRVZFTF80SyxcXG41MTYyOlxcdFxcdFxcdC5pc19wcml2YXRlID0gdHJ1ZSxcXG41MTYzOlxcdFxcbjUxNjQ6XFx0XFx0XFx0LmdmbiA9IGdmbixcXG41MTY1OlxcdFxcdFxcdC5zbG90ID0ga3ZtX3ZjcHVfZ2ZuX3RvX21lbXNsb3QodmNwdSwgZ2ZuKSxcXG41MTY2OlxcdFxcdFxcdC5wZm4gPSBwZm4sXFxuNTE2NzpcXHRcXHRcXHQubWFwX3dyaXRhYmxlID0gdHJ1ZSxcXG41MTY4OlxcdFxcdH07XFxuNTE2OTpcXHRcXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVxcdTAwM2Vrdm07XFxuNTE3MDpcXHRcXHRpbnQgcjtcXG41MTcxOlxcdFxcbjUxNzI6XFx0XFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG41MTczOlxcdFxcbjUxNzQ6XFx0XFx0LypcXG41MTc1OlxcdFxcdCAqIE1hcHBpbmcgYSBwcmUtZGV0ZXJtaW5lZCBwcml2YXRlIHBmbiBpcyBpbnRlbmRlZCBvbmx5IGZvciB1c2Ugd2hlblxcbjUxNzY6XFx0XFx0ICogcG9wdWxhdGluZyBhIGd1ZXN0X21lbWZkIGluc3RhbmNlLiAgQXNzZXJ0IHRoYXQgdGhlIHNsb3QgaXMgYmFja2VkXFxuNTE3NzpcXHRcXHQgKiBieSBndWVzdF9tZW1mZCBhbmQgdGhhdCB0aGUgZ21lbSBpbnN0YW5jZSdzIGludmFsaWRhdGVfbG9jayBpcyBoZWxkLlxcbjUxNzg6XFx0XFx0ICovXFxuNTE3OTpcXHRcXHRrdm1fYXNzZXJ0X2dtZW1faW52YWxpZGF0ZV9sb2NrX2hlbGQoZmF1bHQuc2xvdCk7XFxuNTE4MDpcXHRcXG41MTgxOlxcdFxcdGlmIChLVk1fQlVHX09OKCF0ZHBfbW11X2VuYWJsZWQsIGt2bSkpXFxuNTE4MjpcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG41MTgzOlxcdFxcbjUxODQ6XFx0XFx0aWYgKGt2bV9nZm5faXNfd3JpdGVfdHJhY2tlZChrdm0sIGZhdWx0LnNsb3QsIGZhdWx0LmdmbikpXFxuNTE4NTpcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbjUxODY6XFx0XFxuNTE4NzpcXHRcXHRkbyB7XFxuNTE4ODpcXHRcXHRcXHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXFxuNTE4OTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlRSO1xcbjUxOTA6XFx0XFxuNTE5MTpcXHRcXHRcXHRpZiAoa3ZtX3Rlc3RfcmVxdWVzdChLVk1fUkVRX1ZNX0RFQUQsIHZjcHUpKVxcbjUxOTI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuNTE5MzpcXHRcXG41MTk0OlxcdFxcdFxcdHIgPSBrdm1fbW11X3JlbG9hZCh2Y3B1KTtcXG41MTk1OlxcdFxcdFxcdGlmIChyKVxcbjUxOTY6XFx0XFx0XFx0XFx0cmV0dXJuIHI7XFxuNTE5NzpcXHRcXG41MTk4OlxcdFxcdFxcdHIgPSBtbXVfdG9wdXBfbWVtb3J5X2NhY2hlcyh2Y3B1LCBmYWxzZSk7XFxuNTE5OTpcXHRcXHRcXHRpZiAocilcXG41MjAwOlxcdFxcdFxcdFxcdHJldHVybiByO1xcbjUyMDE6XFx0XFxuNTIwMjpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG41MjAzOlxcdFxcbjUyMDQ6XFx0XFx0XFx0Z3VhcmQocmVhZF9sb2NrKShcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuNTIwNTpcXHRcXG41MjA2OlxcdFxcdFxcdC8qXFxuNTIwNzpcXHRcXHRcXHQgKiBCZWNhdXNlIHNsb3RzX2xvY2sgaXMgaGVsZCwgaXQgc2hvdWxkIGJlIGltcG9zc2libGUgZm9yIHJvb3RzXFxuNTIwODpcXHRcXHRcXHQgKiB0byBiZSBpbnZhbGlkYXRlZCBhZnRlciB0aGUgaW5pdGlhbCBNTVUgcmVsb2FkLiAgV0FSTiwgYnV0XFxuNTIwOTpcXHRcXHRcXHQgKiBjb250aW51ZSBhbmQgcmUtcmVsb2FkIHRoZSBNTVUgdG8gdHJ5IGFuZCBrZWVwIHRoZSBWTSBhbGl2ZS5cXG41MjEwOlxcdFxcdFxcdCAqL1xcbjUyMTE6XFx0XFx0XFx0V0FSTl9PTl9PTkNFKGt2bV90ZXN0X3JlcXVlc3QoS1ZNX1JFUV9NTVVfRlJFRV9PQlNPTEVURV9ST09UUywgdmNwdSkpO1xcbjUyMTI6XFx0XFxuNTIxMzpcXHRcXHRcXHQvKlxcbjUyMTQ6XFx0XFx0XFx0ICogU25hcHNob3QgdGhlIGludmFsaWRhdGlvbiBzZXF1ZW5jZSBjb3VudGVyIGFmdGVyIGFjcXVpcmluZ1xcbjUyMTU6XFx0XFx0XFx0ICogbW11X2xvY2ssIGFzIGd1ZXN0X21lbWZkIGd1YXJhbnRlZXMgdGhlIHZhbGlkaXR5IG9mIHRoZSBwZm4sXFxuNTIxNjpcXHRcXHRcXHQgKiBpLmUuIGFueSBjb25jdXJyZW50IGludmFsaWRhdGlvbnMgYXJlIGd1YXJhbnRlZWQgdG8gYmVcXG41MjE3OlxcdFxcdFxcdCAqIGlycmVsZXZhbnQuXFxuNTIxODpcXHRcXHRcXHQgKi9cXG41MjE5OlxcdFxcdFxcdGZhdWx0Lm1tdV9zZXEgPSB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZW1tdV9pbnZhbGlkYXRlX3NlcTtcXG41MjIwOlxcdFxcdFxcdGlmIChpc19wYWdlX2ZhdWx0X3N0YWxlKHZjcHUsIFxcdTAwMjZmYXVsdCkpXFxuNTIyMTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG41MjIyOlxcdFxcbjUyMjM6XFx0XFx0XFx0ciA9IGt2bV90ZHBfbW11X21hcCh2Y3B1LCBcXHUwMDI2ZmF1bHQpO1xcbjUyMjQ6XFx0XFx0fSB3aGlsZSAociA9PSBSRVRfUEZfUkVUUlkpO1xcbjUyMjU6XFx0XFxuNTIyNjpcXHRcXHRpZiAociAhPSBSRVRfUEZfRklYRUQpXFxuNTIyNzpcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG41MjI4OlxcdFxcbjUyMjk6XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjIxOjQ1LjI0NzI2MjczOVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDE4ODAzNDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKktWTSBHdWVzdCBNZW1vcnkgTWFwcGluZyDigJMgVGhlIGBtZW1mZGAgRGlsZW1tYSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYCBmdW5jdGlvbiwgYW5kIGl0J3MgbG9va2luZyBsaWtlIGBDT05GSUdfS1ZNX0dVRVNUX01FTUZEYCBpcyBhIHByZXJlcXVpc2l0ZS4gTWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBuZWVkIGZvciBtYW5hZ2VkIG1lbW9yeSBmaWxlIGRlc2NyaXB0b3JzLCBJIHN1cHBvc2UuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMgaG93IGl0J3MgYmVpbmcgaGFuZGxlZC4gSXMgYENPTkZJR19LVk1fR1VFU1RfTUVNRkRgIGRpcmVjdGx5IHNlbGVjdGVkIGJ5IHRoZSB4ODYgS1ZNIGNvbmZpZ3VyYXRpb24sIG9yIGlzIGl0IGNvbmZpZ3VyZWQgaW5kZXBlbmRlbnRseT8gSSBuZWVkIHRvIGNsYXJpZnkgdGhhdCBkZXBlbmRlbmN5LiBVbmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIGxvZ2ljIGhlcmUgaXMga2V5IHRvIGZ1bGx5IGdyYXNwIGhvdyB0aGlzIHNwZWNpZmljIG1lbW9yeSBtYXBwaW5nIGZ1bmN0aW9uIHdvcmtzIHdpdGhpbiB0aGUgYnJvYWRlciBLVk0gYXJjaGl0ZWN0dXJlLCBlc3BlY2lhbGx5IHdoZW4gY29uc2lkZXJpbmcgVERQIGFuZCBwcml2YXRlIHBhZ2UgZnJhbWVzLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY3Jvc3MtcmVmZXJlbmNlIHRoZSBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IGFwcHJvYWNoIHRvIGVuc3VyZSB0aGlzIGZsYWcgaXMgc2V0IGNvcnJlY3RseSBmb3IgbXkgdXNlIGNhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzYwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMToyMTo0OC42NjYwNjkxMTdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MjMwMDYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0dVRVNUX01FTUZEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInZpcnQva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ2aXJ0L2t2bS9LY29uZmlnPTEwMz1jb25maWcgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcXG4tLVxcbnZpcnQva3ZtL0tjb25maWctMTA1LVxcbnZpcnQva3ZtL0tjb25maWc6MTA2OmNvbmZpZyBLVk1fR1VFU1RfTUVNRkRcXG52aXJ0L2t2bS9LY29uZmlnLTEwNy0gICAgICAgc2VsZWN0IFhBUlJBWV9NVUxUSVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMToyMTo0OC44NTgzNzQ2NjdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODY3MDkxMjQ2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gd2hhdCBJJ20gYWJvdXQgdG8gZXhwbG9yZSByZWdhcmRpbmcgYEtWTV9HVUVTVF9NRU1GRGA6XG5cbioqSW52ZXN0aWdhdGluZyBgS1ZNX0dVRVNUX01FTUZEYCoqXG5cblJpZ2h0LCBsZXQncyBkaWcgaW4uIEknbSBnb2luZyB0byB0cmFjayBkb3duIHdoZXJlIHRoZSBgS1ZNX0dVRVNUX01FTUZEYCBzeW1ib2wgZ2V0cyBzZWxlY3RlZCBpbiB0aGUgS1ZNIGtlcm5lbCBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSB2aXJ0dWFsIG1hY2hpbmUgZW52aXJvbm1lbnQuIE15IGdvYWwgaXMgYSBmdWxsIHVuZGVyc3RhbmRpbmcgc28gSSBjYW4gc3BlYWsgYWJvdXQgaXQgZWxvcXVlbnRseSB0byBvdGhlciBleHBlcnRzLiBJJ2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBgZ3JlcGAgb3Igc2ltaWxhciBzZWFyY2ggdG8gc2VlIHdoZXJlIGl0J3MgZGVmaW5lZCBhbmQgdXNlZC4gVGhlbiBJJ2xsIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzIHRvIHNlZSB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBpdCdzIGVuYWJsZWQuIEhvcGVmdWxseSBpdCdzIG5vdCB0b28gb2JzY3VyZSBhbmQgdGhlIHJlYXNvbnMgZm9yIGl0cyBzZWxlY3Rpb24gYXJlIGZhaXJseSBjbGVhci4gVW5kZXJzdGFuZGluZyB0aGUgcmF0aW9uYWxlIGJlaGluZCBpdHMgaW5jbHVzaW9uIGlzIGltcG9ydGFudDsgaXMgaXQgcmVsYXRlZCB0byBwZXJmb3JtYW5jZSwgc2VjdXJpdHksIGEgc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFVsdGltYXRlbHksIHRoZSBhaW0gaXMgdG8gcGllY2UgdG9nZXRoZXIgaXRzIHJvbGUgaW4gdGhlIGtlcm5lbCBhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgZ3Vlc3QgbWVtb3J5IG1hbmFnZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzY0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MjE6NTcuNTI5MjkxNTczWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTcxNTg3MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IEtWTV9HVUVTVF9NRU1GRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTIwPWNvbmZpZyBLVk1fWDg2XFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy00OS1cXHRzZWxlY3QgS1ZNX1dFUlJPUiBpZiBXRVJST1JcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1MDpcXHRzZWxlY3QgS1ZNX0dVRVNUX01FTUZEIGlmIFg4Nl82NFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMToyMTo1Ny42NDY0NTgxMjFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkyMzc1NTg5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBLVk0gQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGlzIHBhdGNoIGlzIHJlbGV2YW50IGJlY2F1c2UgYEtWTV9HVUVTVF9NRU1GRGAgaXMgc2VsZWN0ZWQgd2l0aGluIGBLVk1fWDg2YCB3aGVuIGBYODZfNjRgIGlzIGNvbmZpZ3VyZWQuIFRoZXJlZm9yZSwgYEtWTWAgaXRzZWxmIGlzIHN1ZmZpY2llbnQgZm9yIHRoZSBjb25maWd1cmF0aW9uLiBMZXQncyBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGNoYW5nZWQuXG5cblRoZSBwYXRjaCBzZWVtcyB0byBiZSB0b3VjaGluZyB0aGUgcHJlLWZhdWx0aW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgYGt2bV90ZHBfcGFnZV9wcmVmYXVsdGAsIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLCBhbmQgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAuIEl0J3MgYWRkcmVzc2luZyBhbiBNTVUgcm9vdCBpbnZhbGlkYXRpb24gcHJvYmxlbSB3aXRoaW4gYSByZXRyeSBsb29wLCB3aGljaCBjb3VsZCBiZSBkaXNhc3Ryb3VzIGlmIGBrdm1fbW11X3JlbG9hZGAgd2Fzbid0IHN1YnNlcXVlbnRseSB0cmlnZ2VyZWQuIFRoaXMgc2VlbXMgZnVuY3Rpb25hbGx5IHNvdW5kIGFuZCByZWFjaGFibGUsIGdvb2QuXG5cbk15IGltbWVkaWF0ZSBmb2N1cyBzeW1ib2xzIGFyZSBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBhbmQgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aG9zZSBiZXR0ZXIgaW4gdGhlIGNvbnRleHQgb2YgdGhpcyBpc3N1ZS5cblxuSW4gdGVybXMgb2YgY29uZmlndXJhdGlvbiwgYEtWTWAgaXMgYWxsIHRoYXQncyByZXF1aXJlZC5cblxuV2FpdCwgaG9sZCBvbiBhIG1pbnV0ZeKApiBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYCBpcyBjYWxsZWQgYnkgYHRkeF9nbWVtX3Bvc3RfcG9wdWxhdGVgLCBhbmQgdGhhdCdzICppbiogYGFyY2gveDg2L2t2bS92bXgvdGR4LmNgLiBOb3cgSSBuZWVkIHRvIHNlZSBpZiBgdGR4LmNgIGlzIGNvbXBpbGVkIGJ5IGRlZmF1bHQuIEkgbmVlZCB0byBjaGVjayB0aGUgYGFyY2gveDg2L2t2bS92bXgvTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGNvbXBpbGF0aW9uIHJ1bGVzLiBUaGlzIGNvdWxkIGFmZmVjdCB0aGUgb3ZlcmFsbCBzY29wZSBvZiB0aGUgZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjE2NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMToyMjowMi41NzAyMTY2NTNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3NTI3NjgxLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0ZHhcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjIyOjAyLjY1Nzc1NTMzNFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDQ4Njc5MzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkNvbmRpdGlvbmFsIENvbXBpbGF0aW9uIENvbnVuZHJ1bSoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgbmVlZCB0byByZXRoaW5rIHRoaXMgYXBwcm9hY2guIEkgd2FzIGZvY3VzaW5nIG9uIGB0ZHguY2AgYW5kIGl0cyBwbGFjZSBpbiB0aGUgb3ZlcmFsbCBidWlsZCBwcm9jZXNzLCBidXQgSSdtIGhhdmluZyBhIG5hZ2dpbmcgZmVlbGluZy4uLiBjb3VsZCBpdCBiZSB0aGF0IGB0ZHguY2AgaXMgY29tcGlsZWQgKmNvbmRpdGlvbmFsbHkqPyBUaGF0IHdvdWxkIGNvbXBsZXRlbHkgY2hhbmdlIGhvdyBJIGFwcHJvYWNoIHRoaXMuIElmIGl0J3Mgb25seSBpbmNsdWRlZCB1bmRlciBjZXJ0YWluIGNpcmN1bXN0YW5jZXMsIG15IGFzc3VtcHRpb25zIGFib3V0IGl0cyBjb25zaXN0ZW50IHByZXNlbmNlIGluIHRoZSBmaW5hbCBvdXRwdXQgYXJlIGZ1bmRhbWVudGFsbHkgZmxhd2VkLiBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgdGhlcmUgYXJlIGFueSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBvciBmbGFncyBhZmZlY3RpbmcgdGhlIGNvbXBpbGF0aW9uIG9mIGB0ZHguY2AuIFRoaXMgaXNuJ3QgbmVjZXNzYXJpbHkgYSBzaG93LXN0b3BwZXIsIGJ1dCBpdCBzaWduaWZpY2FudGx5IGFsdGVycyB0aGUgYW5hbHlzaXMuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgcG9zc2libGUgY29uZGl0aW9ucy4gTGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgaGludHMgaW4gdGhlIGhlYWRlcnMgb3IgdGhlIGJ1aWxkIHN5c3RlbSBzY3JpcHRzLi4uIGl0IGNvdWxkIGJlIHNvbWV0aGluZyBhcyBzaW1wbGUgYXMgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBvciB0YXJnZXQgYXJjaGl0ZWN0dXJlIGRlcGVuZGVuY3kuIFRpbWUgdG8gZGl2ZSBkZWVwZXIgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODUwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MjI6MDUuNzA2NDM4OTNaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMTA2ODAzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0ZHhcXFxcLmNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjIyOjA1Ljc2OTU1NjE1M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDk0OTAzMTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcnkgb2YgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSdtIGhhdmluZyB0aGVzZSB0aG91Z2h0czpcblxuKipLVk0vVERYIEZpbGUgSW52ZXN0aWdhdGlvbioqXG5cbkhtbSwgaG9sZCBvbiBhIHNlY29uZC4uLiBJIGRpc3RpbmN0bHkgcmVtZW1iZXIgc2VlaW5nIGBhcmNoL3g4Ni9rdm0vdm14L3RkeC5jYCBwb3AgdXAgaW4gdGhhdCBgZ3JlcGAgb3V0cHV0IGEgZmV3IG1vbWVudHMgYWdvLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCBwb3RlbnRpYWxseSByZWxldmFudC4gR2l2ZW4gbXkgZm9jdXMgb24gS1ZNIGFuZCB0aGUgVERYIGludGVncmF0aW9uLCB0aGF0IGZpbGUgZGVmaW5pdGVseSB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZS4gTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgdGhlIHJlbGF0ZWQgYE1ha2VmaWxlYCB3aXRoaW4gdGhlIEtWTSBkaXJlY3RvcnkuIFRoYXQgd2lsbCBwcm92aWRlIGNydWNpYWwgY29udGV4dCDigJMgbGlua2luZyB0aGlzIHNwZWNpZmljIHNvdXJjZSBmaWxlIHRvIHRoZSBvdmVyYWxsIGJ1aWxkIHByb2Nlc3MgYW5kIHBvdGVudGlhbGx5IHJldmVhbGluZyBkZXBlbmRlbmNpZXMgb3IgaW50ZWdyYXRpb24gcG9pbnRzIHdpdGhpbiB0aGUgeDg2L0tWTSBzdWJzeXN0ZW0uIEZyb20gdGhlcmUsIEkgY2FuIGdldCBhIGJldHRlciBzZW5zZSBvZiBpdHMgcm9sZSBhbmQgc2lnbmlmaWNhbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzExOCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjIyOjA5LjI2NDQ2MjQwM1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk0MTIzMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGR4XFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL01ha2VmaWxlPTIxPWt2bS1pbnRlbC0kKENPTkZJR19LVk1fSFlQRVJWKVxcdCs9IHZteC9oeXBlcnYubyB2bXgvaHlwZXJ2X2V2bWNzLm9cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6MjI6a3ZtLWludGVsLSQoQ09ORklHX0tWTV9JTlRFTF9URFgpXFx0Kz0gdm14L3RkeC5vXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlLTIzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMToyMjowOS4zNjM4ODM5NTJaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMwMzU1NDgxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgZm9yIFREWCBTdXBwb3J0KipcblxuUmlnaHQsIHNvIEkgc2VlIHdlIG5lZWQgYENPTkZJR19LVk1fSU5URUxfVERYYCBmb3IgYHRkeC5vYC4gTWFrZXMgcGVyZmVjdCBzZW5zZS4gVGhlIHBpZWNlcyBhcmUgc2xvdHRpbmcgaW50byBwbGFjZS4gTm93LCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciBkb3duIHRoaXMgcGF0aCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGF0IHBhcnRpY3VsYXIgS2NvbmZpZyBvcHRpb24gaXMgZXZlbiBkZWZpbmVkIHdpdGhpbiBvdXIgY3VycmVudCBidWlsZCBlbnZpcm9ubWVudC4gSSBuZWVkIHRvIGtub3cgaWYgdGhlIGtlcm5lbCBoYXMgYmVlbiBjb25maWd1cmVkIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgSW50ZWwncyBURFggdGVjaG5vbG9neSBpbiB0aGUgZmlyc3QgcGxhY2UuIE5vIHBvaW50IGNoYXNpbmcgYSBwaGFudG9tIGRlcGVuZGVuY3kuIExldCdzIHZlcmlmeSB0aGF0IGBDT05GSUdfS1ZNX0lOVEVMX1REWGAgYWN0dWFsbHkgZXhpc3RzLiBJJ2xsIG5lZWQgdG8gdXNlIG15IHVzdWFsIHRvb2xzIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIG9yIHRoZSBjdXJyZW50IGJ1aWxkIGNvbmZpZ3VyYXRpb24uIEtub3dpbmcgdGhpcyB3aWxsIHRlbGwgbWUgd2hldGhlciBJIGNhbiBleHBlY3QgdGhlIHJlbGV2YW50IFREWC1yZWxhdGVkIG1vZHVsZXMgYW5kIGZ1bmN0aW9uYWxpdHkgdG8gYmUgcHJlc2VudCBpbiB0aGUgYnVpbGQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDkyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MjI6MTIuNjY3NDQyNTkyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzI1OTQyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0lOVEVMX1REWFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MjI6MTIuNzUwNzEyMzczWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4OTM1NTE5MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgUmVhc29uaW5nIG9uIEtWTSBDb25maWd1cmF0aW9uIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgS1ZNX0lOVEVMX1REWGAgY29uZmlndXJhdGlvbiBvcHRpb24uIFJpZ2h0LCBpdCdzIGEgc3BlY2lmaWMgY29uZmlnLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaW5jbHVkZSBib3RoIGBLVk1gIGdlbmVyYWxseSAqYW5kKiB0aGlzIGBLVk1fSU5URUxfVERYYCBvcHRpb24gaW4gdGhlIGZ1enppbmcgY29uZmlncy4gVGhhdCBtYWtlcyBzZW5zZSwgY292ZXJpbmcgdGhlIGdlbmVyYWwgS1ZNIGZ1bmN0aW9uYWxpdHkgYW5kIHRoaXMgVERYLXNwZWNpZmljIHBhcnQuXG5cbkhtbSwgaGFuZyBvbi4gSSdtIHNlZWluZyB0aGF0IGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgICpjYW4qIGJlIHJlYWNoZWQgZXZlbiB3aXRob3V0IFREWCBlbmFibGVkLiBUaGF0J3MgZ29vZCB0byBrbm93LCBidXQuLi4gdGhlIGNydWNpYWwgcG9pbnQgaXMgdGhhdCBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYCAqYXBwZWFycyogdG8gb25seSBiZSBjYWxsZWQgZnJvbSBURFggY29kZSBhdCB0aGUgbW9tZW50LiBTbywgYWRkaW5nIGBLVk1fSU5URUxfVERYYCBpcyBzdGlsbCBhIHZhbGlkIGRlY2lzaW9uLiBJdCBlbnN1cmVzIHRoYXQgKmJvdGgqIGNvZGUgcGF0aHMsIHRoZSBURFgtc3BlY2lmaWMgYW5kIHRoZSBtb3JlIGdlbmVyYWwgb25lLCBhcmUgYWNjZXNzaWJsZSBkdXJpbmcgZnV6emluZywgYW5kIEkgY2FuIGJlIGNvbmZpZGVudCBJJ20gY292ZXJpbmcgZXZlcnl0aGluZyByZWxldmFudC5cblxuQWxyaWdodCwgYmVmb3JlIEkgZmluYWxpemUgdGhpcywgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBLVk1fSU5URUxfVERYYCBkb2Vzbid0IGhhdmUgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMuIE5lZWQgdG8gYmUgY2VydGFpbiB0aGF0IEknbSBub3QgaW5hZHZlcnRlbnRseSBicmVha2luZyBzb21ldGhpbmcgZWxzZSBieSBlbmFibGluZyBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4ODMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MjI6MTcuNjQ0MjY5MDA5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3NzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzNCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEzNDpcXHRjb25maWcgS1ZNX0lOVEVMX1REWFxcbiAxMzU6XFx0XFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFxcXCJcXG4gMTM2OlxcdFxcdGRlZmF1bHQgeVxcbiAxMzc6XFx0XFx0ZGVwZW5kcyBvbiBJTlRFTF9URFhfSE9TVFxcbiAxMzg6XFx0XFx0c2VsZWN0IEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxuIDEzOTpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1BPUFVMQVRFXFxuIDE0MDpcXHRcXHRoZWxwXFxuIDE0MTpcXHRcXHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIGxhdW5jaGluZyBJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKVxcbiAxNDI6XFx0XFx0ICBjb25maWRlbnRpYWwgVk1zIG9uIEludGVsIHByb2Nlc3NvcnMuXFxuIDE0MzpcXHRcXG4gMTQ0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMTQ1OlxcdFxcbiAxNDY6XFx0Y29uZmlnIEtWTV9BTURcXG4gMTQ3OlxcdFxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuIDE0ODpcXHRcXHRkZXBlbmRzIG9uIEtWTSBcXHUwMDI2XFx1MDAyNiAoQ1BVX1NVUF9BTUQgfHwgQ1BVX1NVUF9IWUdPTilcXG4gMTQ5OlxcdFxcdGhlbHBcXG4gMTUwOlxcdFxcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgS1ZNIG9uIEFNRCBwcm9jZXNzb3JzIGVxdWlwcGVkIHdpdGggdGhlIEFNRC1WXFxuIDE1MTpcXHRcXHQgIChTVk0pIGV4dGVuc2lvbnMuXFxuIDE1MjpcXHRcXG4gMTUzOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjIyOjE3LjY0NDM2ODU0OVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjEzMDgzNDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIERlcGVuZGVuY3kqKlxuXG5Pa2F5LCBzbyB0aGUgc2l0dWF0aW9uIGhpbmdlcyBvbiB0aGlzIGBJTlRFTF9URFhfSE9TVGAgdmFyaWFibGUuIFRoZSBjb3JlIHF1ZXN0aW9uIGJlZm9yZSBtZSBpcyBpdHMgc3RhdGUuIEkgbmVlZCB0byBrbm93IHRoZSB2YWx1ZSBvZiBgSU5URUxfVERYX0hPU1RgIHRvIGRldGVybWluZSB0aGUgc3Vic2VxdWVudCBjb3Vyc2Ugb2YgYWN0aW9uLiBJdCdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBhbmQgcHJvY2VlZGluZyBsb2dpY2FsbHkuIE15IGltbWVkaWF0ZSB0YXNrIGlzIHRvIGFzY2VydGFpbiB0aGUgY3VycmVudCBzZXR0aW5nIG9yIHZhbHVlIG9mIGBJTlRFTF9URFhfSE9TVGAg4oCTIHRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGVmZmVjdGl2ZSBhbmFseXNpcy4gSSdsbCBtYWtlIHN1cmUgdG8gZ2V0IHRoaXMgY3JpdGljYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24gYmVmb3JlIEkgcHJvY2VlZCBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY1NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MjI6MjAuMjU3NDU1Njk5WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzk3NTI0NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElOVEVMX1REWF9IT1NUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9LY29uZmlnPTE4NDQ9Y29uZmlnIFg4Nl9VU0VSX1NIQURPV19TVEFDS1xcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xODYzLVxcbmFyY2gveDg2L0tjb25maWc6MTg2NDpjb25maWcgSU5URUxfVERYX0hPU1RcXG5hcmNoL3g4Ni9LY29uZmlnLTE4NjUtXFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgaG9zdCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMToyMjoyMC40MzcyMTQ0MzFaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjcxMjEwNzIzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIGluaXRpYWwgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IExhbmRzY2FwZSBmb3IgSU5URUxfVERYX0hPU1QqKlxuXG5BbHJpZ2h0LCB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIGdldCBhIGhhbmRsZSBvbiB3aGF0IGBJTlRFTF9URFhfSE9TVGAgaXMgcmVsaWFudCBvbi4gVW5kZXJzdGFuZGluZyBpdHMgZGVwZW5kZW5jaWVzIGlzIHRoZSBjcml0aWNhbCBmaXJzdCBzdGVwLiBJIG5lZWQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgb3RoZXIgY29tcG9uZW50cywgbGlicmFyaWVzLCBvciBzeXN0ZW1zIGl0J3MgaW50ZXJ3b3ZlbiB3aXRoLiBUaGF0IGluZm9ybWF0aW9uIGlzIGdvaW5nIHRvIGxheSB0aGUgZ3JvdW5kd29yayBmb3IgYW55IGZ1cnRoZXIgYW5hbHlzaXMsIHRyb3VibGVzaG9vdGluZywgb3IgZGV2ZWxvcG1lbnQgZWZmb3J0cyBkb3duIHRoZSBsaW5lLiBJdCdzIHRoZSBmb3VuZGF0aW9uIG9mIHVuZGVyc3RhbmRpbmcgdGhlIGVudGlyZSBhcmNoaXRlY3R1cmUgYW5kIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIGFueSBjaGFuZ2UuIFdpdGhvdXQgdGhpcyB1bmRlcnN0YW5kaW5nLCBJJ20gZXNzZW50aWFsbHkgZmx5aW5nIGJsaW5kLiBLbm93aW5nIHRob3NlIHJlbGF0aW9uc2hpcHMgaXMga2V5IGZvciBtYWludGFpbmluZyBhbmQgZGV2ZWxvcGluZyB0aGUgY29kZWJhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTUyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MjI6MjMuMTQ5MzI1MDUxWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNzk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NjQsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4NjQ6XFx0Y29uZmlnIElOVEVMX1REWF9IT1NUXFxuMTg2NTpcXHRcXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBob3N0IHN1cHBvcnRcXFwiXFxuMTg2NjpcXHRcXHRkZXBlbmRzIG9uIENQVV9TVVBfSU5URUxcXG4xODY3OlxcdFxcdGRlcGVuZHMgb24gWDg2XzY0XFxuMTg2ODpcXHRcXHRkZXBlbmRzIG9uIEtWTV9JTlRFTFxcbjE4Njk6XFx0XFx0ZGVwZW5kcyBvbiBYODZfWDJBUElDXFxuMTg3MDpcXHRcXHRzZWxlY3QgQVJDSF9LRUVQX01FTUJMT0NLXFxuMTg3MTpcXHRcXHRkZXBlbmRzIG9uIENPTlRJR19BTExPQ1xcbjE4NzI6XFx0XFx0ZGVwZW5kcyBvbiBYODZfTUNFXFxuMTg3MzpcXHRcXHRoZWxwXFxuMTg3NDpcXHRcXHQgIEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHByb3RlY3RzIGd1ZXN0IFZNcyBmcm9tIG1hbGljaW91c1xcbjE4NzU6XFx0XFx0ICBob3N0IGFuZCBjZXJ0YWluIHBoeXNpY2FsIGF0dGFja3MuICBUaGlzIG9wdGlvbiBlbmFibGVzIG5lY2Vzc2FyeSBURFhcXG4xODc2OlxcdFxcdCAgc3VwcG9ydCBpbiB0aGUgaG9zdCBrZXJuZWwgdG8gcnVuIGNvbmZpZGVudGlhbCBWTXMuXFxuMTg3NzpcXHRcXG4xODc4OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4xODc5OlxcdFxcbjE4ODA6XFx0Y29uZmlnIEVGSVxcbjE4ODE6XFx0XFx0Ym9vbCBcXFwiRUZJIHJ1bnRpbWUgc2VydmljZSBzdXBwb3J0XFxcIlxcbjE4ODI6XFx0XFx0ZGVwZW5kcyBvbiBBQ1BJXFxuMTg4MzpcXHRcXHRzZWxlY3QgVUNTMl9TVFJJTkdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MjI6MjMuMTQ5NTM1MTIxWiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1MDE1Mjc3MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEtWTSBhbmQgVERYIENvbmZpZ3VyYXRpb24gYW5kIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIEtWTSBhbmQgVERYIGNvbmZpZ3VyYXRpb24gYW5kIGhhdmUgYXJyaXZlZCBhdCBhIGNsZWFyZXIgcGljdHVyZS4gSW5pdGlhbGx5LCBJIHRob3VnaHQgSSBtaWdodCBuZWVkIHRvIGluY2x1ZGUgYEtWTV9JTlRFTGAsIGBYODZfWDJBUElDYCwgYENPTlRJR19BTExPQ2AsIGFuZCBgWDg2X01DRWAgYmVjYXVzZSBgSU5URUxfVERYX0hPU1RgIGRlcGVuZHMgb24gdGhlbS4gSG93ZXZlciwgaXQgbG9va3MgbGlrZSBJIGNhbiBzaW1wbGlmeSB0aGluZ3MuIEFjdHVhbGx5LCBJIHdpbGwgZ28gd2l0aCBgS1ZNYCwgYEtWTV9JTlRFTGAsIGBJTlRFTF9URFhfSE9TVGAsIGFuZCBgS1ZNX0lOVEVMX1REWGAgbm93IHRoYXQgSSd2ZSBkb3VibGUgY2hlY2tlZCB0aGUgZGVwZW5kZW5jaWVzLiBJdCBzZWVtcyBgS1ZNX0lOVEVMX1REWGAgZGVmYXVsdHMgdG8gJ3knIGlmIGBJTlRFTF9URFhfSE9TVGAgaXMgZW5hYmxlZC5cblxuTm93LCBsZXQncyByZXZpc2l0IGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBmaXggaXMgY29ycmVjdGx5IGludGVncmF0ZWQuIEFoLCB5ZXMsIGl0J3MgY29ubmVjdGVkIHRocm91Z2ggdGhlIGBLVk1fUFJFX0ZBVUxUX01FTU9SWWAgaW9jdGwuIFRoZSBjcml0aWNhbCBhc3BlY3Qgb2YgdGhpcyBwYXRjaCBpcyB0aGUgY29ycmVjdGlvbiBpbiB0aGUgTU1VIHJlbG9hZCB3aXRoaW4gdGhlIHJldHJ5IGxvb3AuIEVzc2VudGlhbGx5LCBpdCByZXNvbHZlcyBhIGJ1ZyB3aGVyZSBga3ZtX21tdV9yZWxvYWRgIHdhc24ndCBiZWluZyBjYWxsZWQgaW5zaWRlIHRoZSByZXRyeSBsb29wLCB3aGljaCBjb3VsZCBjYXVzZSBwcm9ibGVtcyBpZiB0aGUgTU1VIHJvb3RzIHdlcmUgaW52YWxpZGF0ZWQgbWlkLWxvb3AuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBLVk0gTU1VIGNvZGUsIGFuZCBJIG5lZWQgdG8gYmUgc3VyZSBpdCdzIGFwcGxpZWQgY29ycmVjdGx5LlxuXG5LZXkgc3ltYm9scyB0byB0cmFjayBub3cgYXJlIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGFuZCBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYC5cblxuU28sIHRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIEtWTSBNTVUgcGFnZSBwcmUtZmF1bHRpbmcgYW5kIHByaXZhdGUgUEZOIG1hcHBpbmcgbG9naWMuIFRoZSBmaXggZW5zdXJlcyB0aGUgTU1VIGlzIHJlbG9hZGVkIHdpdGhpbiB0aGUgcmV0cnkgbG9vcHMgd2hpY2ggaXMgY3J1Y2lhbCBiZWNhdXNlIHRoaXMgZml4ZXMgYSBjb25jdXJyZW50IE1NVSByb290IGludmFsaWRhdGlvbiBwcm9ibGVtLiBUaGUgY2hhbmdlcyBkaXJlY3RseSBpbXBhY3QgcmVhY2hhYmxlIEtWTSBpb2N0bHMgbGlrZSBgS1ZNX1BSRV9GQVVMVF9NRU1PUllgIGFuZCBhbHNvIFREWCBndWVzdCBtZW1vcnkgcG9wdWxhdGlvbiB3aGljaCBpcyBzaWduaWZpY2FudC5cblxuSSBxdWlja2x5IGNoZWNrZWQgYGt2bV90ZHBfcGFnZV9wcmVmYXVsdGAsIGJ1dCBpdCdzIHN0YXRpYywgc28gaXQncyBub3QgdGhlIGJlc3Qgc3ltYm9sIHRvIGZvY3VzIG9uLiBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBhbmQgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAgYXJlIGV4cG9ydGVkIGFuZCB0aGVyZWZvcmUgaW1wb3J0YW50LlxuXG5BbHJpZ2h0LCBJJ20gY29uZmlkZW50IGluIG15IGFzc2Vzc21lbnQuIFRpbWUgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0NTMsIk91dHB1dFRva2VucyI6MTcwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MjI6MzEuNjUxMDY3OTE0WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2MjM0NzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiSU5URUxfVERYX0hPU1RcIixcbiAgICBcIktWTV9JTlRFTF9URFhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlcIixcbiAgICBcImt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBNTVUgcGFnZSBwcmUtZmF1bHRpbmcgYW5kIHByaXZhdGUgUEZOIG1hcHBpbmcgbG9naWMgdG8gY29ycmVjdGx5IHJlbG9hZCB0aGUgTU1VIGluc2lkZSByZXRyeSBsb29wcy4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgaXNzdWVzIHdoZW4gTU1VIHJvb3RzIGFyZSBpbnZhbGlkYXRlZCBjb25jdXJyZW50bHkuIFRoZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgS1ZNIGlvY3RscyAoS1ZNX1BSRV9GQVVMVF9NRU1PUlkpIGFuZCBURFggZ3Vlc3QgbWVtb3J5IHBvcHVsYXRpb24sIG1ha2luZyBpdCBmdW5jdGlvbmFsIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJJTlRFTF9URFhfSE9TVFwiLFxuICAgIFwiS1ZNX0lOVEVMX1REWFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeVwiLFxuICAgIFwia3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIE1NVSBwYWdlIHByZS1mYXVsdGluZyBhbmQgcHJpdmF0ZSBQRk4gbWFwcGluZyBsb2dpYyB0byBjb3JyZWN0bHkgcmVsb2FkIHRoZSBNTVUgaW5zaWRlIHJldHJ5IGxvb3BzLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBpc3N1ZXMgd2hlbiBNTVUgcm9vdHMgYXJlIGludmFsaWRhdGVkIGNvbmN1cnJlbnRseS4gVGhlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBLVk0gaW9jdGxzIChLVk1fUFJFX0ZBVUxUX01FTU9SWSkgYW5kIFREWCBndWVzdCBtZW1vcnkgcG9wdWxhdGlvbiwgbWFraW5nIGl0IGZ1bmN0aW9uYWwgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow5lf4d[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-07 01:19:14 +0000 UTC FinishedAt: 2026-08-07 01:22:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-x86", "tree_url": "https://github.com/kvm-x86/linux.git", "commit_hash": "a806d364ef288a6443a1337820ea8410a7ccc6b3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "INTEL_TDX_HOST", "KVM_INTEL_TDX" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-x86", "tree_url": "https://github.com/kvm-x86/linux.git", "commit_hash": "a806d364ef288a6443a1337820ea8410a7ccc6b3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "INTEL_TDX_HOST", "KVM_INTEL_TDX" ], "series_id": "f84e1d53-bc1a-48ad-8913-c9a8e28e4dd3" }, "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+CgkJCTx0ZD4yMDI2LzA4LzA3IDAxOjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7SU5URUxfVERYX0hPU1QmIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMX1REWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSYjMzQ7LAogICAgJiMzNDtrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIE1NVSBwYWdlIHByZS1mYXVsdGluZyBhbmQgcHJpdmF0ZSBQRk4gbWFwcGluZyBsb2dpYyB0byBjb3JyZWN0bHkgcmVsb2FkIHRoZSBNTVUgaW5zaWRlIHJldHJ5IGxvb3BzLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBpc3N1ZXMgd2hlbiBNTVUgcm9vdHMgYXJlIGludmFsaWRhdGVkIGNvbmN1cnJlbnRseS4gVGhlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBLVk0gaW9jdGxzIChLVk1fUFJFX0ZBVUxUX01FTU9SWSkgYW5kIFREWCBndWVzdCBtZW1vcnkgcG9wdWxhdGlvbiwgbWFraW5nIGl0IGZ1bmN0aW9uYWwgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDE6MjE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyMjk0MTdjOGNlZjk3ZDYyYzRiOGI4NTVkMzQ0ZTViOGQ0YzFmYWJhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAwMToyMTowMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuaW5kZXggYzUxOWU4ZThkNjQ2Zi4uNzZlM2NkNzE3MzI0YiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbkBAIC01MDM2LDYgJiM0Mzs1MDM2LDEwIEBAIHN0YXRpYyBpbnQga3ZtX3RkcF9wYWdlX3ByZWZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLFxuIFx0XHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9WTV9ERUFELCB2Y3B1KSlcbiBcdFx0XHRyZXR1cm4gLUVJTztcbiBcbiYjNDM7XHRcdHIgPSBrdm1fbW11X3JlbG9hZCh2Y3B1KTtcbiYjNDM7XHRcdGlmIChyKVxuJiM0MztcdFx0XHRyZXR1cm4gcjtcbiYjNDM7XG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0XHRyID0ga3ZtX21tdV9kb19wYWdlX2ZhdWx0KHZjcHUsIGdwYSwgZXJyb3JfY29kZSwgdHJ1ZSwgTlVMTCwgbGV2ZWwpO1xuIFx0fSB3aGlsZSAociA9PSBSRVRfUEZfUkVUUlkpO1xuQEAgLTUwNzYsMTQgJiM0Mzs1MDgwLDYgQEAgbG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0aWYgKGt2bV9pc19nZm5fYWxpYXModmNwdS1cdTAwM2Vrdm0sIGdwYV90b19nZm4ocmFuZ2UtXHUwMDNlZ3BhKSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0Lypcbi1cdCAqIHJlbG9hZCBpcyBlZmZpY2llbnQgd2hlbiBjYWxsZWQgcmVwZWF0ZWRseSwgc28gd2UgY2FuIGRvIGl0IG9uXG4tXHQgKiBldmVyeSBpdGVyYXRpb24uXG4tXHQgKi9cbi1cdHIgPSBrdm1fbW11X3JlbG9hZCh2Y3B1KTtcbi1cdGlmIChyKVxuLVx0XHRyZXR1cm4gcjtcbi1cbiBcdGRpcmVjdF9iaXRzID0gMDtcbiBcdGlmIChrdm1fYXJjaF9oYXNfcHJpdmF0ZV9tZW0odmNwdS1cdTAwM2Vrdm0pIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGt2bV9tZW1faXNfcHJpdmF0ZSh2Y3B1LVx1MDAzZWt2bSwgZ3BhX3RvX2dmbihyYW5nZS1cdTAwM2VncGEpKSlcbkBAIC01MTg4LDE0ICYjNDM7NTE4NCw2IEBAIGludCBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4pXG4gXHRpZiAoa3ZtX2dmbl9pc193cml0ZV90cmFja2VkKGt2bSwgZmF1bHQuc2xvdCwgZmF1bHQuZ2ZuKSlcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbiBcbi1cdHIgPSBrdm1fbW11X3JlbG9hZCh2Y3B1KTtcbi1cdGlmIChyKVxuLVx0XHRyZXR1cm4gcjtcbi1cbi1cdHIgPSBtbXVfdG9wdXBfbWVtb3J5X2NhY2hlcyh2Y3B1LCBmYWxzZSk7XG4tXHRpZiAocilcbi1cdFx0cmV0dXJuIHI7XG4tXG4gXHRkbyB7XG4gXHRcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSlcbiBcdFx0XHRyZXR1cm4gLUVJTlRSO1xuQEAgLTUyMDMsMTAgJiM0Mzs1MTkxLDM1IEBAIGludCBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4pXG4gXHRcdGlmIChrdm1fdGVzdF9yZXF1ZXN0KEtWTV9SRVFfVk1fREVBRCwgdmNwdSkpXG4gXHRcdFx0cmV0dXJuIC1FSU87XG4gXG4mIzQzO1x0XHRyID0ga3ZtX21tdV9yZWxvYWQodmNwdSk7XG4mIzQzO1x0XHRpZiAocilcbiYjNDM7XHRcdFx0cmV0dXJuIHI7XG4mIzQzO1xuJiM0MztcdFx0ciA9IG1tdV90b3B1cF9tZW1vcnlfY2FjaGVzKHZjcHUsIGZhbHNlKTtcbiYjNDM7XHRcdGlmIChyKVxuJiM0MztcdFx0XHRyZXR1cm4gcjtcbiYjNDM7XG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFxuIFx0XHRndWFyZChyZWFkX2xvY2spKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4gXG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogQmVjYXVzZSBzbG90c19sb2NrIGlzIGhlbGQsIGl0IHNob3VsZCBiZSBpbXBvc3NpYmxlIGZvciByb290c1xuJiM0MztcdFx0ICogdG8gYmUgaW52YWxpZGF0ZWQgYWZ0ZXIgdGhlIGluaXRpYWwgTU1VIHJlbG9hZC4gIFdBUk4sIGJ1dFxuJiM0MztcdFx0ICogY29udGludWUgYW5kIHJlLXJlbG9hZCB0aGUgTU1VIHRvIHRyeSBhbmQga2VlcCB0aGUgVk0gYWxpdmUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdFdBUk5fT05fT05DRShrdm1fdGVzdF9yZXF1ZXN0KEtWTV9SRVFfTU1VX0ZSRUVfT0JTT0xFVEVfUk9PVFMsIHZjcHUpKTtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogU25hcHNob3QgdGhlIGludmFsaWRhdGlvbiBzZXF1ZW5jZSBjb3VudGVyIGFmdGVyIGFjcXVpcmluZ1xuJiM0MztcdFx0ICogbW11X2xvY2ssIGFzIGd1ZXN0X21lbWZkIGd1YXJhbnRlZXMgdGhlIHZhbGlkaXR5IG9mIHRoZSBwZm4sXG4mIzQzO1x0XHQgKiBpLmUuIGFueSBjb25jdXJyZW50IGludmFsaWRhdGlvbnMgYXJlIGd1YXJhbnRlZWQgdG8gYmVcbiYjNDM7XHRcdCAqIGlycmVsZXZhbnQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGZhdWx0Lm1tdV9zZXEgPSB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXE7XG4mIzQzO1x0XHRpZiAoaXNfcGFnZV9mYXVsdF9zdGFsZSh2Y3B1LCBcdTAwMjZmYXVsdCkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiBcdFx0ciA9IGt2bV90ZHBfbW11X21hcCh2Y3B1LCBcdTAwMjZmYXVsdCk7XG4gXHR9IHdoaWxlIChyID09IFJFVF9QRl9SRVRSWSk7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDE6MjE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7SU5URUxfVERYX0hPU1QmIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMX1REWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSYjMzQ7LAogICAgJiMzNDtrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIE1NVSBwYWdlIHByZS1mYXVsdGluZyBhbmQgcHJpdmF0ZSBQRk4gbWFwcGluZyBsb2dpYyB0byBjb3JyZWN0bHkgcmVsb2FkIHRoZSBNTVUgaW5zaWRlIHJldHJ5IGxvb3BzLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBpc3N1ZXMgd2hlbiBNTVUgcm9vdHMgYXJlIGludmFsaWRhdGVkIGNvbmN1cnJlbnRseS4gVGhlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBLVk0gaW9jdGxzIChLVk1fUFJFX0ZBVUxUX01FTU9SWSkgYW5kIFREWCBndWVzdCBtZW1vcnkgcG9wdWxhdGlvbiwgbWFraW5nIGl0IGZ1bmN0aW9uYWwgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyMjk0MTdjOGNlZjk3ZDYyYzRiOGI4NTVkMzQ0ZTViOGQ0YzFmYWJhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgNyAwMToyMTowMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jCmluZGV4IGM1MTllOGU4ZDY0NmYuLjc2ZTNjZDcxNzMyNGIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL21tdS9tbXUuYwpAQCAtNTAzNiw2ICYjNDM7NTAzNiwxMCBAQCBzdGF0aWMgaW50IGt2bV90ZHBfcGFnZV9wcmVmYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwKIAkJaWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfVk1fREVBRCwgdmNwdSkpCiAJCQlyZXR1cm4gLUVJTzsKIAomIzQzOwkJciA9IGt2bV9tbXVfcmVsb2FkKHZjcHUpOwomIzQzOwkJaWYgKHIpCiYjNDM7CQkJcmV0dXJuIHI7CiYjNDM7CiAJCWNvbmRfcmVzY2hlZCgpOwogCQlyID0ga3ZtX21tdV9kb19wYWdlX2ZhdWx0KHZjcHUsIGdwYSwgZXJyb3JfY29kZSwgdHJ1ZSwgTlVMTCwgbGV2ZWwpOwogCX0gd2hpbGUgKHIgPT0gUkVUX1BGX1JFVFJZKTsKQEAgLTUwNzYsMTQgJiM0Mzs1MDgwLDYgQEAgbG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCWlmIChrdm1faXNfZ2ZuX2FsaWFzKHZjcHUtJmd0O2t2bSwgZ3BhX3RvX2dmbihyYW5nZS0mZ3Q7Z3BhKSkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JLyoKLQkgKiByZWxvYWQgaXMgZWZmaWNpZW50IHdoZW4gY2FsbGVkIHJlcGVhdGVkbHksIHNvIHdlIGNhbiBkbyBpdCBvbgotCSAqIGV2ZXJ5IGl0ZXJhdGlvbi4KLQkgKi8KLQlyID0ga3ZtX21tdV9yZWxvYWQodmNwdSk7Ci0JaWYgKHIpCi0JCXJldHVybiByOwotCiAJZGlyZWN0X2JpdHMgPSAwOwogCWlmIChrdm1fYXJjaF9oYXNfcHJpdmF0ZV9tZW0odmNwdS0mZ3Q7a3ZtKSAmYW1wOyZhbXA7CiAJICAgIGt2bV9tZW1faXNfcHJpdmF0ZSh2Y3B1LSZndDtrdm0sIGdwYV90b19nZm4ocmFuZ2UtJmd0O2dwYSkpKQpAQCAtNTE4OCwxNCAmIzQzOzUxODQsNiBAQCBpbnQga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuKQogCWlmIChrdm1fZ2ZuX2lzX3dyaXRlX3RyYWNrZWQoa3ZtLCBmYXVsdC5zbG90LCBmYXVsdC5nZm4pKQogCQlyZXR1cm4gLUVQRVJNOwogCi0JciA9IGt2bV9tbXVfcmVsb2FkKHZjcHUpOwotCWlmIChyKQotCQlyZXR1cm4gcjsKLQotCXIgPSBtbXVfdG9wdXBfbWVtb3J5X2NhY2hlcyh2Y3B1LCBmYWxzZSk7Ci0JaWYgKHIpCi0JCXJldHVybiByOwotCiAJZG8gewogCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiAJCQlyZXR1cm4gLUVJTlRSOwpAQCAtNTIwMywxMCAmIzQzOzUxOTEsMzUgQEAgaW50IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbikKIAkJaWYgKGt2bV90ZXN0X3JlcXVlc3QoS1ZNX1JFUV9WTV9ERUFELCB2Y3B1KSkKIAkJCXJldHVybiAtRUlPOwogCiYjNDM7CQlyID0ga3ZtX21tdV9yZWxvYWQodmNwdSk7CiYjNDM7CQlpZiAocikKJiM0MzsJCQlyZXR1cm4gcjsKJiM0MzsKJiM0MzsJCXIgPSBtbXVfdG9wdXBfbWVtb3J5X2NhY2hlcyh2Y3B1LCBmYWxzZSk7CiYjNDM7CQlpZiAocikKJiM0MzsJCQlyZXR1cm4gcjsKJiM0MzsKIAkJY29uZF9yZXNjaGVkKCk7CiAKIAkJZ3VhcmQocmVhZF9sb2NrKSgmYW1wO2t2bS0mZ3Q7bW11X2xvY2spOwogCiYjNDM7CQkvKgomIzQzOwkJICogQmVjYXVzZSBzbG90c19sb2NrIGlzIGhlbGQsIGl0IHNob3VsZCBiZSBpbXBvc3NpYmxlIGZvciByb290cwomIzQzOwkJICogdG8gYmUgaW52YWxpZGF0ZWQgYWZ0ZXIgdGhlIGluaXRpYWwgTU1VIHJlbG9hZC4gIFdBUk4sIGJ1dAomIzQzOwkJICogY29udGludWUgYW5kIHJlLXJlbG9hZCB0aGUgTU1VIHRvIHRyeSBhbmQga2VlcCB0aGUgVk0gYWxpdmUuCiYjNDM7CQkgKi8KJiM0MzsJCVdBUk5fT05fT05DRShrdm1fdGVzdF9yZXF1ZXN0KEtWTV9SRVFfTU1VX0ZSRUVfT0JTT0xFVEVfUk9PVFMsIHZjcHUpKTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBTbmFwc2hvdCB0aGUgaW52YWxpZGF0aW9uIHNlcXVlbmNlIGNvdW50ZXIgYWZ0ZXIgYWNxdWlyaW5nCiYjNDM7CQkgKiBtbXVfbG9jaywgYXMgZ3Vlc3RfbWVtZmQgZ3VhcmFudGVlcyB0aGUgdmFsaWRpdHkgb2YgdGhlIHBmbiwKJiM0MzsJCSAqIGkuZS4gYW55IGNvbmN1cnJlbnQgaW52YWxpZGF0aW9ucyBhcmUgZ3VhcmFudGVlZCB0byBiZQomIzQzOwkJICogaXJyZWxldmFudC4KJiM0MzsJCSAqLwomIzQzOwkJZmF1bHQubW11X3NlcSA9IHZjcHUtJmd0O2t2bS0mZ3Q7bW11X2ludmFsaWRhdGVfc2VxOwomIzQzOwkJaWYgKGlzX3BhZ2VfZmF1bHRfc3RhbGUodmNwdSwgJmFtcDtmYXVsdCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiAJCXIgPSBrdm1fdGRwX21tdV9tYXAodmNwdSwgJmFtcDtmYXVsdCk7CiAJfSB3aGlsZSAociA9PSBSRVRfUEZfUkVUUlkpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAxOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NzkKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAyOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS1ZNL3g4NiBQYXRjaCBhbmQgaXRzIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHNlZW1zIHRvIGJlIHRvdWNoaW5nIHRoZSB4ODYgS1ZNIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIHNwZWNpZmljYWxseSBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AuIFRoZSBjaGFuZ2VzIGFyZSBmb2N1c2VkIG9uIHRoZXNlIGZ1bmN0aW9uczogYGt2bV90ZHBfcGFnZV9wcmVmYXVsdGAsIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLCBhbmQgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgbGlrZWx5IGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIG9yIGEgZml4IHJlbGF0ZWQgdG8gcGFnZSBmYXVsdCBoYW5kbGluZyBpbiB0aGUgVERQIChUYWdnZWQgRGF0YSBQb2ludGVyKSBNTVUgaW1wbGVtZW50YXRpb24uCgpUaGUga2V5IGNoYW5nZSBJJiMzOTttIHNlZWluZyBpcyB0aGUgcmVsb2NhdGlvbiBvZiBga3ZtX21tdV9yZWxvYWQodmNwdSlgIGluc2lkZSB0aGUgYGRvLi4ud2hpbGVgIGxvb3AgaW4gYGt2bV90ZHBfcGFnZV9wcmVmYXVsdGAgYW5kIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gLiBUaGlzIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIHRoZXkmIzM5O3JlIHRyeWluZyB0byByZWZpbmUgdGhlIHJldHJ5IGxvZ2ljIG9uIHBhZ2UgZmF1bHRzIHRvIGVuc3VyZSB0aGUgTU1VIHN0YXRlIGlzIHVwLXRvLWRhdGUgYWZ0ZXIgZWFjaCBhdHRlbXB0LiBJdCYjMzk7cyBnb29kIHByYWN0aWNlIHRvIHJlLWV2YWx1YXRlIHRoZSBNTVUgc3RhdGUsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgbmVzdGVkIHBhZ2luZy4KCkFsc28sIG1vdmluZyBgbW11X3RvcHVwX21lbW9yeV9jYWNoZXModmNwdSwgZmFsc2UpYCBpbnRvIHRoZSBsb29wIHdpdGhpbiBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYCBzdWdnZXN0cyBhbiBlZmZvcnQgdG8gaW1wcm92ZSB0aGUgY2FjaGUgaGl0IHJhdGUgZHVyaW5nIHRoZSBmYXVsdCBoYW5kbGluZyBwcm9jZXNzLCB3aGljaCBpcyBhIGNvbW1vbiBwZXJmb3JtYW5jZSBib3R0bGVuZWNrIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhpcyBpcyBhIHZlcnkgdGFyZ2V0ZWQgYXBwcm9hY2ggdG8gZGVhbGluZyB3aXRoIHRoZSBDUFUgY2FjaGUuCgpUaGUgYWRkaXRpb24gb2YgdGhlIGBXQVJOX09OX09OQ0VgIGFuZCBgaXNfcGFnZV9mYXVsdF9zdGFsZWAgY2hlY2sgaW4gYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAgaXMgYSBzaWduYWwgb2YgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgZXJyb3IgY29uZGl0aW9uIHRoZSBkZXZlbG9wZXJzIGFyZSB0cnlpbmcgdG8gZGV0ZWN0IGFuZCBhZGRyZXNzLiBJdCYjMzk7cyBhIHVzZWZ1bCBkZWJ1Z2dpbmcgdG9vbCB0byBwcmV2ZW50IHRoZSBzeXN0ZW0gZnJvbSBnZXR0aW5nIGludG8gYSBiYWQgc3RhdGUuCgpCZWZvcmUgSSBkZWx2ZSBkZWVwZXIgaW50byB0aGUgY29kZSBpdHNlbGYsIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIEtWTSBjb25maWd1cmF0aW9ucywgYXMgYENPTkZJR19LVk1gIGlzIGZ1bmRhbWVudGFsIHRvIGFueSBLVk0gb3BlcmF0aW9uIG9uIHg4Ni4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlIHBhdGNoLgoKSSB3aWxsIHBlcmZvcm0gYSBncmVwIHNlYXJjaCBmb3IgdGhlIGZ1bmN0aW9uIG5hbWVzIHdpdGhpbiB0aGUgS1ZNIHNvdXJjZSB0byBncmFzcCB0aGVpciBpbnRlcmRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fdGRwX3BhZ2VfcHJlZmF1bHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvbW11LmM9NDk1NT1zdGF0aWMgaW50IGt2bV9tbXVfZG9fcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MDE5LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MDIwOnN0YXRpYyBpbnQga3ZtX3RkcF9wYWdlX3ByZWZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MDIxLVx0XHRcdFx0IHU2NCBlcnJvcl9jb2RlLCB1OCAqbGV2ZWwpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz01MDY4PWxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUwOTMtXHQgKi9cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTA5NDpcdHIgPSBrdm1fdGRwX3BhZ2VfcHJlZmF1bHQodmNwdSwgcmFuZ2UtXHUwMDNlZ3BhIHwgZGlyZWN0X2JpdHMsIGVycm9yX2NvZGUsIFx1MDAyNmxldmVsKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTA5NS1cdGlmIChyIFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAxOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxNjIKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpZ2dpbmcgaW50byBLVk0mIzM5O3MgVHJhbnNsYXRpb24gUHJvY2VzcyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gaG93IEtWTSBoYW5kbGVzIGl0cyBtZW1vcnkgbWFwcGluZywgYW5kIHNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgdHJhbnNsYXRpb24gcHJvY2Vzcy4gVGhhdCAmIzM0O3ByaXZhdGUgcGFnZSBmcmFtZSBudW1iZXIsJiMzNDsgb3IgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAsIHRoYXQmIzM5O3MgdGhlIGtleSBoZXJlLiBJdCYjMzk7cyBhIHZlcnkgc3BlY2lmaWMgZnVuY3Rpb24gbmFtZSwgd2hpY2ggdGVsbHMgbWUgSSYjMzk7bSBsaWtlbHkgZGVhbGluZyB3aXRoIHRoZSAmIzM0O1RyYW5zbGF0aW9uIExvb2thc2lkZSBCdWZmZXIgKFRMQikgYW5kIHBhZ2UgdGFibGUgd2FsayYjMzQ7IHByb2Nlc3MuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgJiMzNDtwcml2YXRlJiMzNDsgaXMgaW50cmlndWluZzsgd2hhdCBpcyB0aGF0IHByaXZhdGUgdG8/IElzIGl0IHByaXZhdGUgdG8gdGhlIFZNLCBwcml2YXRlIHRvIGEgc3BlY2lmaWMgdkNQVSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBgcGZuYCBwYXJ0IGlzIGNsZWFybHkgcmVsYXRlZCB0byBwYWdlIGZyYW1lIG51bWJlcnMsIHN1Z2dlc3RpbmcgSSYjMzk7bSBvbiB0aGUgcmlnaHQgdHJhY2sgZXhwbG9yaW5nIHRoZSBwaHlzaWNhbCBtZW1vcnkgYWRkcmVzcyBzcGFjZSBhbmQgaG93IGl0JiMzOTtzIHRyYW5zbGF0ZWQgZm9yIHRoZSB2aXJ0dWFsIG1hY2hpbmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoaXMgbWFwcGluZyB3b3JrcyBhbmQgaG93IGl0IGludGVncmF0ZXMgd2l0aCB0aGUgdW5kZXJseWluZyBoeXBlcnZpc29yJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50LiBJIHN1c3BlY3QgaXQmIzM5O3MgY3JpdGljYWwgdG8gcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5LCBhbmQgYSBkZWVwIHVuZGVyc3RhbmRpbmcgd2lsbCBwcm9iYWJseSB5aWVsZCB2YWx1YWJsZSBpbnNpZ2h0cy4gTGV0JiMzOTtzIGRlbHZlIGluIGFuZCBmaW5kIHNvbWUgYW5zd2Vycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvbW11LmM9NTEzOD1zdGF0aWMgdm9pZCBrdm1fYXNzZXJ0X2dtZW1faW52YWxpZGF0ZV9sb2NrX2hlbGQoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUxNDktXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUxNTA6aW50IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbilcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTE1MS17XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MjMwLX1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTIzMTpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTIzMi0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzYxCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYCBGdW5jdGlvbioqCgpSaWdodCwgc28gYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAgaXMgZXhwb3NlZCBhcyBhbiBpbnRlcm5hbCBmdW5jdGlvbiB3aXRoaW4gS1ZNLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIHVzYWdlLiBHaXZlbiBteSBleHBlcmllbmNlLCBJIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGwgc2l0ZXMgdG8gZGV0ZXJtaW5lIHByZWNpc2VseSB3aGVyZSBpdCYjMzk7cyBiZWluZyBsZXZlcmFnZWQgd2l0aGluIHRoZSBLVk0gYXJjaGl0ZWN0dXJlLiBQaW5wb2ludGluZyB0aGUgY2FsbGVycyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByb2xlIGluIHRoZSBURFAgTU1VJiMzOTtzIG9wZXJhdGlvbiBhbmQgaG93IGl0IGNvbnRyaWJ1dGVzIHRvIHRoZSBvdmVyYWxsIHZpcnR1YWxpemF0aW9uIHByb2Nlc3MuIFRoaXMgZnVuY3Rpb24mIzM5O3MgaW1wYWN0IG9uIG1lbW9yeSBtYXBwaW5nIGFuZCBwcm90ZWN0aW9uIGlzIG9mIHBhcnRpY3VsYXIgaW50ZXJlc3QsIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIGl0cyBpbnZvY2F0aW9ucyB3aWxsIHNoZWQgbGlnaHQgb24gdGhvc2UgaW50cmljYWNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDE6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11Lmg9MzMxPXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fc2hhZG93X3Jvb3RfYWxsb2NhdGVkKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vbW11LmgtMzQxLVxuYXJjaC94ODYva3ZtL21tdS5oOjM0MjppbnQga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuKTtcbmFyY2gveDg2L2t2bS9tbXUuaC0zNDMtXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz01MTM4PXN0YXRpYyB2b2lkIGt2bV9hc3NlcnRfZ21lbV9pbnZhbGlkYXRlX2xvY2tfaGVsZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTE0OS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTE1MDppbnQga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuKVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MTUxLXtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUyMzAtfVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MjMxOkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4pO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MjMyLSNlbmRpZlxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MzE4MD1zdGF0aWMgaW50IHRkeF9nbWVtX3Bvc3RfcG9wdWxhdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4sXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zMTkyLVx0a3ZtX3RkeC1cdTAwM2VwYWdlX2FkZF9zcmMgPSBzcmNfcGFnZTtcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MzE5MzpcdHJldCA9IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihhcmctXHUwMDNldmNwdSwgZ2ZuLCBwZm4pO1xuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zMTk0LVx0a3ZtX3RkeC1cdTAwM2VwYWdlX2FkZF9zcmMgPSBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAxOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MTQKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVsdmluZyBpbnRvIFREWCBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgdGR4X2dtZW1fcG9zdF9wb3B1bGF0ZWAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aGVyZSBpdCYjMzk7cyBjYWxsZWQgd2l0aGluIHRoZSBgYXJjaC94ODYva3ZtL3ZteC90ZHguY2AgZmlsZS4gUmlnaHQgYXdheSwgdGhpcyBzY3JlYW1zIFREWCBhbmQgZ3Vlc3QgbWVtb3J5IGZpbGUgZGVzY3JpcHRvcnMuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC4gVGhlIGNvbnRleHQgaXMgb2J2aW91c2x5IGNlbnRlcmVkIGFyb3VuZCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucy4gSSBrbm93IHRoYXQgVERYIGludHJvZHVjZXMgc29tZSBwcmV0dHkgc3BlY2lmaWMgaGFyZHdhcmUgZGVwZW5kZW5jaWVzLCBhbmQgSSYjMzk7bSBjdXJpb3VzIGlmIHRoaXMgZnVuY3Rpb24gaXMgb3Zlcmx5IHNwZWNpYWxpemVkLCBvciBpZiBpdHMgcHJpbmNpcGxlcyBjYW4gYmUgYXBwbGllZCBtb3JlIGdlbmVyYWxseS4KCk15IGluaXRpYWwgdGhvdWdodHMgYXJlIHRoYXQgYGt2bV90ZHBfcGFnZV9wcmVmYXVsdGAgYW5kIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGFyZSBwcm9iYWJseSBicm9hZGVyIGluIHNjb3BlLCBtZWFuaW5nIHRoZXkgYXJlbiYjMzk7dCB0aWVkIGV4Y2x1c2l2ZWx5IHRvIFREWCBsaWtlIHRoaXMgb25lIGlzLiBUbyBjb25maXJtIHRoaXMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlc2UgbW9yZSBnZW5lcmFsIGZ1bmN0aW9ucyBhcmUgZG9pbmcgYW5kIGlmIHRoZXkgaGF2ZSBpbXBsaWNhdGlvbnMgaGVyZS4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSB1bmRlcmx5aW5nIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDE6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jPTUwMjA9c3RhdGljIGludCBrdm1fdGRwX3BhZ2VfcHJlZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MDY3LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MDY4Omxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTA2OS1cdFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MTY5OD1zdGF0aWMgaW50IHRkeF9zZXB0X21hcF9sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGVudW0gcGdfbGV2ZWwgbGV2ZWwsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0xNzEwLVx0LypcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MTcxMTpcdCAqIEVuc3VyZSBwcmVfZmF1bHRfYWxsb3dlZCBpcyByZWFkIGJ5IGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSgpXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTE3MTItXHQgKiBiZWZvcmUga3ZtX3RkeC1cdTAwM2VzdGF0ZS4gIFVzZXJzcGFjZSBtdXN0IG5vdCBiZSBhbGxvd2VkIHRvIHByZS1mYXVsdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzU0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBLVk0gTWVtb3J5IEZhdWx0IFByZS1IYW5kbGluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgem9vbSBpbiBvbiB0aGlzIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7QWgsIHRoaXMgaXMgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBob29rIGZvciBoYW5kbGluZyBwcmUtZmF1bHRpbmcgbWVtb3J5IGFjY2Vzc2VzLCByaWdodD8mIzM0OyBJdCYjMzk7cyBub3QgYSBzdGFuZGFsb25lIHRoaW5nOyBpdCYjMzk7cyAqdGhlKiBhcmNoaXRlY3R1cmUmIzM5O3Mgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgYSBtdWNoIGJyb2FkZXIgS1ZNIGlvY3RsIGRlc2lnbmVkIHRvIGhhbmRsZSBhIHBhZ2UgZmF1bHQgYmVmb3JlIGl0IHRha2VzIHBsYWNlIGluIHRoZSBndWVzdC4gS25vd2luZyB0aGF0LCBteSBuZXh0IHN0ZXAgaXMgY2xlYXIuIEkgbmVlZCB0byB0cmFjZSBpdHMgY2FsbCBzaXRlcyB3aXRoaW4gdGhlIGdlbmVyaWMgS1ZNIGZyYW1ld29yay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBwYXJ0aWN1bGFyIHByZS1mYXVsdCBtZWNoYW5pc20gaXMgYmVpbmcgdHJpZ2dlcmVkIGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgS1ZNIGZsb3cuIEnigJltIHRoaW5raW5nLCBtYXliZSBJJiMzOTtsbCBzZWUgd2hlcmUgdGhlIGdlbmVyaWMgY29kZSBzZXRzIHVwIHRoZSBzdGFnZSwgcGVyaGFwcyBzZXR0aW5nIHVwIGEgc3RydWN0LCBhbmQgdGhlbiB0aGlzIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBob29rIGRvZXMgc29tZXRoaW5nIHVuaXF1ZSBiYXNlZCBvbiB0aGUgYXJjaGl0ZWN0dXJlLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBicm9hZGVyIGNvZGUgYmFzZSBhbmQgc2VlIHRoZSBob3cgYW5kIHdoeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDE6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dmlydC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmM9NDM1Mz1zdGF0aWMgaW50IGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNDM3Ny1cbnZpcnQva3ZtL2t2bV9tYWluLmM6NDM3ODpcdFx0ciA9IGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSh2Y3B1LCByYW5nZSk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQzNzktXHRcdGlmIChXQVJOX09OX09OQ0UociA9PSAwIHx8IHIgPT0gLUVJTykpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAxOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4MjIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nIGFzIGFuIGV4cGVydDoKCioqQW5hbHl6aW5nIHRoZSBLVk0gUHJlLUZhdWx0IE1lbW9yeSBQYXRoKioKClJpZ2h0LCBzbyBga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgaXMgaW5kZWVkIHRyaWdnZXJlZCBieSB0aGUgYEtWTV9QUkVfRkFVTFRfTUVNT1JZYCBpb2N0bC4gTXkgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiB0aGF0IGBLVk1fUFJFX0ZBVUxUX01FTU9SWWAgaW9jdGwgbm93LiBUaGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludCwgdGhlIGNyaXRpY2FsIHBvaW50IG9mIGludGVyZXN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyAqdGhlcmUqIGluIG9yZGVyIHRvIGdyYXNwIHRoZSBvdmVyYWxsIG1lbW9yeSBwcmUtZmF1bHRpbmcgbWVjaGFuaXNtIHdpdGhpbiBLVk0uIFdoYXQgYXJlIHRoZSBhcmd1bWVudHMgcGFzc2VkPyBXaGF0JiMzOTtzIHRoZSBjb250ZXh0PyBXaGF0IGV4YWN0bHkgdHJpZ2dlcnMgdGhlIGNhbGwgdG8gYGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgPyBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAxOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0tWTV9QUkVfRkFVTFRfTUVNT1JZJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dmlydC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmM9NDQyNT1zdGF0aWMgbG9uZyBrdm1fdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ2NTEtI2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjQ2NTI6XHRjYXNlIEtWTV9QUkVfRkFVTFRfTUVNT1JZOiB7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ2NTMtXHRcdHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSByYW5nZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDE6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzIxNQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGxpY2F0aW9ucyBvZiB0aGUgS1ZNX1BSRV9GQVVMVF9NRU1PUlkgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBLVk1fUFJFX0ZBVUxUX01FTU9SWWAgaXMgYSByZWFjaGFibGUgaW9jdGwuIFRoYXQmIzM5O3Mgb3VyIGVudHJ5IHBvaW50LCBhbmQgdGhlIHBhdGNoIGhpdHMgYSBmZXcga2V5IGZ1bmN0aW9uczogYGt2bV90ZHBfcGFnZV9wcmVmYXVsdGAgYW5kIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLiBUaG9zZSBhcmUgYm90aCBjYWxsZWQgZGlyZWN0bHkgdmlhIGBLVk1fUFJFX0ZBVUxUX01FTU9SWWAsIHdoaWNoIG1ha2VzIHRoaXMgaW50ZXJlc3RpbmcgZnJvbSBhIGdlbmVyYWwgeDg2IEtWTSBwZXJzcGVjdGl2ZS4KClRoZW4gdGhlcmUmIzM5O3MgdGhlIG1vZGlmaWNhdGlvbiB0byBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYHRkeF9nbWVtX3Bvc3RfcG9wdWxhdGVgLiBPa2F5LCB0aGF0JiMzOTtzIFREWCBzcGVjaWZpYywgc28gdGhhdCBicmFuY2ggaXMgaW50ZXJlc3RpbmcgYnV0IHNlcGFyYXRlIGZyb20gdGhlIGNvcmUgeDg2IGltcGxpY2F0aW9ucy4gQnV0IHdhaXQgYSBzZWNvbmQsIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guLi4gYGt2bV90ZHBfcGFnZV9wcmVmYXVsdGAgaXMgY2FsbGVkIGZyb20gYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAuIFNpbmNlIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGlzIHJlYWNoYWJsZSB2aWEgYEtWTV9QUkVfRkFVTFRfTUVNT1JZYCwgaXQgaW1wbGllcyB0aGF0IHRoaXMgcGF0Y2ggbGlrZWx5IGhhcyBsYXJnZXIgcmFtaWZpY2F0aW9ucyBmb3IgZ2VuZXJhbCB4ODYgS1ZNIGZ1bmN0aW9uYWxpdHkuIFNvLCBiZWZvcmUgSSBkaWcgZnVydGhlciwgSSBzaG91bGQganVzdCBtYWtlIHN1cmUgdGhhdCBgS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWWAgaXMgYWN0dWFsbHkgZW5hYmxlZCBmb3IgeDg2LiBUaGF0JiMzOTtzIGEgc2FuaXR5IGNoZWNrIEkgbmVlZCB0byBkby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDE6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUlkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTIwPWNvbmZpZyBLVk1fWDg2XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNDctXHRzZWxlY3QgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkdcbmFyY2gveDg2L2t2bS9LY29uZmlnOjQ4Olx0c2VsZWN0IEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcbmFyY2gveDg2L2t2bS9LY29uZmlnLTQ5LVx0c2VsZWN0IEtWTV9XRVJST1IgaWYgV0VSUk9SXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAxOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4OTMKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiAyMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb2RlJiMzOTtzIFJlYWNoYWJpbGl0eSBhbmQgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBzbyB0aGUgY29kZSBwYXRoIGlzIGNvbmZpcm1lZDsgaXQmIzM5O3Mgc2VsZWN0ZWQgYnkgYEtWTV9YODZgLCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyBhY2Nlc3NpYmxlLiBUaGUgY2hhbmdlIGl0c2VsZiBpcyBpbnRlcmVzdGluZzogYGt2bV9tbXVfcmVsb2FkKHZjcHUpYCBpcyBiZWluZyBtb3ZlZCBpbnRvIHRoZSByZXRyeSBsb29wIHdpdGhpbiBib3RoIGBrdm1fdGRwX3BhZ2VfcHJlZmF1bHRgIGFuZCBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYC4gVGhhdCYjMzk7cyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uLCBhbmQgc3VnZ2VzdHMgaGFuZGxpbmcgTU1VIGludmFsaWRhdGlvbnMgZHVyaW5nIHByZS1mYXVsdGluZyBhbmQgcHJpdmF0ZSBQRk4gbWFwcGluZyBpcyBub3cgdGhlIGZvY3VzLgoKR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlLCBmdXp6aW5nIHRoaXMgYXJlYSBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZC4KCk5vdywgbGV0JiMzOTtzIHBpbnBvaW50IHNvbWUga2V5IHN5bWJvbHMgdG8gaW52ZXN0aWdhdGUuIE15IHByaW1hcnkgZm9jdXMgd2lsbCBiZSBvbiB0aGVzZSBmdW5jdGlvbnM6IGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLCBhbmQgYWxzbyBvbiBga3ZtX3RkcF9wYWdlX3ByZWZhdWx0YCwgd2hpY2ggaXMgc3RhdGljLCBzbyBJJiMzOTtsbCBjaGVjayB3aGV0aGVyIGl0IGlzIGlubGluZWQgb3Igbm90LiBMYXN0bHksIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gLCB3aGljaCBpcyBleHBvcnRlZC4gSSBzdXNwZWN0IHRoYXQgdGhpcyBsYXR0ZXIgZnVuY3Rpb24gaXMgVERYIHNwZWNpZmljLCB3aGljaCBtaWdodCBsaW1pdCBteSBpbml0aWFsIGZ1enppbmcgYXR0ZW1wdHMsIHVubGVzcyBJIGhhdmUgYWNjZXNzIHRvIFREWCBoYXJkd2FyZS4KCkkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGluIGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIHZ1bG5lcmFiaWxpdGllcywgb3IgaW50ZXJlc3RpbmcgaW50ZXJhY3Rpb25zIHRvIGNvbnNpZGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvbW11LmM9NTAyMD1zdGF0aWMgaW50IGt2bV90ZHBfcGFnZV9wcmVmYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUwNjctXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUwNjg6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MDY5LVx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAxOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2NzUKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiAyMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtWTSBNZW1vcnkgUHJlLUZhdWx0aW5nKioKCk9rYXksIHNvIEkmIzM5O20gaG9uaW5nIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkIGluIHByZS1mYXVsdGluZyBtZW1vcnkgd2l0aGluIEtWTS4gU3BlY2lmaWNhbGx5LCBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgaXTigJlzIGEgc3Ryb25nIGZvY3VzIHN5bWJvbC4gQW5kIHRoZW4gdGhlcmUmIzM5O3MgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAsIHdoaWNoIGFsc28gbG9va3MgcHJvbWlzaW5nLCBldmVuIGlmIGl0IG1pZ2h0IGludm9sdmUgc29tZSBURFggY29uc2lkZXJhdGlvbnMuCgpOb3csIGxldCYjMzk7cyBqdXN0IGNvbmZpcm0gc29tZXRoaW5nIHF1aWNrbHkuLi4gSSBuZWVkIHRvIGNoZWNrIGlmIGBrdm1fdGRwX3BhZ2VfcHJlZmF1bHRgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBZZXAsIGl0IGlzLiBTbyB0aGF0IGp1c3QgcmVpbmZvcmNlcyBteSBpbml0aWFsIGFzc2Vzc21lbnQgLSBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBhbmQgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAgYXJlIHJlYWxseSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMgdG8gZGlnIGludG8uCgpBcyBmb3IgY29uZmlndXJhdGlvbnMsIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGBLVk1gIGlzIHRoZSBtYWluIG9uZSB0byBjb25zaWRlci4gTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcy4gYEtWTWAgaXMgaW5kZWVkIHN1ZmZpY2llbnQgZm9yIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLiBBbmQgZm9yIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gLCBsb29rcyBsaWtlIGl0JiMzOTtzIHVuY29uZGl0aW9uYWxseSBjb21waWxlZCB3aXRoaW4gYG1tdS5jYCBhcyBsb25nIGFzIGBDT05GSUdfS1ZNYCBpcyBlbmFibGVkLiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzLCBzbyBJIGNhbiBmb2N1cyBvbiB0aG9zZSB0d28gc3ltYm9scyBhcyB0aGUgY29yZSBvZiB0aGlzIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAxOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvbW11LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS9tbXUuYz01MTM4PXN0YXRpYyB2b2lkIGt2bV9hc3NlcnRfZ21lbV9pbnZhbGlkYXRlX2xvY2tfaGVsZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTE0OS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTE1MDppbnQga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuKVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MTUxLXtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUyMzAtfVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MjMxOkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4pO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MjMyLSNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTE5CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBleHBlcnQgdG8gZXhwZXJ0OgoKKipOYXZpZ2F0aW5nIGEgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gQmxvY2sqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSYjMzk7bSBzZWVpbmcgYW4gYCNlbmRpZmAgZGlyZWN0aXZlIGRvd24gaGVyZSBvbiBsaW5lIDUyMzIuIFRoYXQmIzM5O3MgYSBjbGVhciBzaWduYWwgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJsb2NrLiBNeSBpbW1lZGlhdGUgcmVmbGV4IGlzIHRvIGZpZ3VyZSBvdXQgd2hpY2ggYCNpZmRlZmAsIGAjaWZuZGVmYCwgYCNpZmAsIG9yIGAjZWxpZmAgaXQmIzM5O3MgcGFpcmVkIHdpdGguIFRoYXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHdoaWNoIHNlY3Rpb25zIG9mIGNvZGUgYXJlIGJlaW5nIGluY2x1ZGVkIG9yIGV4Y2x1ZGVkIGJhc2VkIG9uIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLCBjb21waWxlciBmbGFncywgb3IgZGVmaW5lZCBtYWNyb3MuIFRoaXMgaXMgZnVuZGFtZW50YWwgZm9yIGRlYnVnZ2luZywgdW5kZXJzdGFuZGluZyBwb3J0YWJpbGl0eSwgYW5kIG9wdGltaXppbmcgY29kZSBmb3Igc3BlY2lmaWMgZW52aXJvbm1lbnRzLiBJIG5lZWQgdG8gdHJhY2UgYmFja3dhcmQgdG8gZmluZCBpdHMgY29ycmVzcG9uZGluZyBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLiBLbm93aW5nIHRoZSBjb25kaXRpb25hbCBpcyAqY3JpdGljYWwqIHRvIHVuZGVyc3RhbmRpbmcgd2hhdCYjMzk7cyBnb2luZyBvbiBpbiB0aGlzIHBhcnQgb2YgdGhlIGNvZGViYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvbW11LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MTMwOlx0XHQgKiBpZ25vcmUgc3RhdHMgZm9yIGFsbCBvdGhlciByZXR1cm4gdGltZXMuICBQYWdlLXJlYWR5IFwmIzM0O2ZhdWx0c1wmIzM0OyBhcmVuJiMzOTt0XG41MTMxOlx0XHQgKiB0cnVseSBzcHVyaW91cyBhbmQgbmV2ZXIgdHJpZ2dlciBlbXVsYXRpb25cbjUxMzI6XHRcdCAqL1xuNTEzMzpcdFx0aWYgKHIgPT0gUkVUX1BGX0ZJWEVEKVxuNTEzNDpcdFx0XHR2Y3B1LVx1MDAzZXN0YXQucGZfZml4ZWQmIzQzOyYjNDM7O1xuNTEzNTpcdH1cbjUxMzY6XHRcbjUxMzc6XHQjaWZkZWYgQ09ORklHX0tWTV9HVUVTVF9NRU1GRFxuNTEzODpcdHN0YXRpYyB2b2lkIGt2bV9hc3NlcnRfZ21lbV9pbnZhbGlkYXRlX2xvY2tfaGVsZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxuNTEzOTpcdHtcbjUxNDA6XHQjaWZkZWYgQ09ORklHX1BST1ZFX0xPQ0tJTkdcbjUxNDE6XHRcdGlmIChXQVJOX09OX09OQ0UoIWt2bV9zbG90X2hhc19nbWVtKHNsb3QpKSB8fFxuNTE0MjpcdFx0ICAgIFdBUk5fT05fT05DRSghc2xvdC1cdTAwM2VnbWVtLmZpbGUpIHx8XG41MTQzOlx0XHQgICAgV0FSTl9PTl9PTkNFKCFmaWxlX2NvdW50KHNsb3QtXHUwMDNlZ21lbS5maWxlKSkpXG41MTQ0Olx0XHRcdHJldHVybjtcbjUxNDU6XHRcbjUxNDY6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2ZmlsZV9pbm9kZShzbG90LVx1MDAzZWdtZW0uZmlsZSktXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWludmFsaWRhdGVfbG9jayk7XG41MTQ3Olx0I2VuZGlmXG41MTQ4Olx0fVxuNTE0OTpcdFxuNTE1MDpcdGludCBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4pXG41MTUxOlx0e1xuNTE1MjpcdFx0c3RydWN0IGt2bV9wYWdlX2ZhdWx0IGZhdWx0ID0ge1xuNTE1MzpcdFx0XHQuYWRkciA9IGdmbl90b19ncGEoZ2ZuKSxcbjUxNTQ6XHRcdFx0LmVycm9yX2NvZGUgPSBQRkVSUl9HVUVTVF9GSU5BTF9NQVNLIHwgUEZFUlJfUFJJVkFURV9BQ0NFU1MsXG41MTU1Olx0XHRcdC5wcmVmZXRjaCA9IHRydWUsXG41MTU2Olx0XHRcdC5pc190ZHAgPSB0cnVlLFxuNTE1NzpcdFx0XHQubnhfaHVnZV9wYWdlX3dvcmthcm91bmRfZW5hYmxlZCA9IGlzX254X2h1Z2VfcGFnZV9lbmFibGVkKHZjcHUtXHUwMDNla3ZtKSxcbjUxNTg6XHRcbjUxNTk6XHRcdFx0Lm1heF9sZXZlbCA9IFBHX0xFVkVMXzRLLFxuNTE2MDpcdFx0XHQucmVxX2xldmVsID0gUEdfTEVWRUxfNEssXG41MTYxOlx0XHRcdC5nb2FsX2xldmVsID0gUEdfTEVWRUxfNEssXG41MTYyOlx0XHRcdC5pc19wcml2YXRlID0gdHJ1ZSxcbjUxNjM6XHRcbjUxNjQ6XHRcdFx0LmdmbiA9IGdmbixcbjUxNjU6XHRcdFx0LnNsb3QgPSBrdm1fdmNwdV9nZm5fdG9fbWVtc2xvdCh2Y3B1LCBnZm4pLFxuNTE2NjpcdFx0XHQucGZuID0gcGZuLFxuNTE2NzpcdFx0XHQubWFwX3dyaXRhYmxlID0gdHJ1ZSxcbjUxNjg6XHRcdH07XG41MTY5Olx0XHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbjUxNzA6XHRcdGludCByO1xuNTE3MTpcdFxuNTE3MjpcdFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG41MTczOlx0XG41MTc0Olx0XHQvKlxuNTE3NTpcdFx0ICogTWFwcGluZyBhIHByZS1kZXRlcm1pbmVkIHByaXZhdGUgcGZuIGlzIGludGVuZGVkIG9ubHkgZm9yIHVzZSB3aGVuXG41MTc2Olx0XHQgKiBwb3B1bGF0aW5nIGEgZ3Vlc3RfbWVtZmQgaW5zdGFuY2UuICBBc3NlcnQgdGhhdCB0aGUgc2xvdCBpcyBiYWNrZWRcbjUxNzc6XHRcdCAqIGJ5IGd1ZXN0X21lbWZkIGFuZCB0aGF0IHRoZSBnbWVtIGluc3RhbmNlJiMzOTtzIGludmFsaWRhdGVfbG9jayBpcyBoZWxkLlxuNTE3ODpcdFx0ICovXG41MTc5Olx0XHRrdm1fYXNzZXJ0X2dtZW1faW52YWxpZGF0ZV9sb2NrX2hlbGQoZmF1bHQuc2xvdCk7XG41MTgwOlx0XG41MTgxOlx0XHRpZiAoS1ZNX0JVR19PTighdGRwX21tdV9lbmFibGVkLCBrdm0pKVxuNTE4MjpcdFx0XHRyZXR1cm4gLUVJTztcbjUxODM6XHRcbjUxODQ6XHRcdGlmIChrdm1fZ2ZuX2lzX3dyaXRlX3RyYWNrZWQoa3ZtLCBmYXVsdC5zbG90LCBmYXVsdC5nZm4pKVxuNTE4NTpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuNTE4NjpcdFxuNTE4NzpcdFx0ZG8ge1xuNTE4ODpcdFx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG41MTg5Olx0XHRcdFx0cmV0dXJuIC1FSU5UUjtcbjUxOTA6XHRcbjUxOTE6XHRcdFx0aWYgKGt2bV90ZXN0X3JlcXVlc3QoS1ZNX1JFUV9WTV9ERUFELCB2Y3B1KSlcbjUxOTI6XHRcdFx0XHRyZXR1cm4gLUVJTztcbjUxOTM6XHRcbjUxOTQ6XHRcdFx0ciA9IGt2bV9tbXVfcmVsb2FkKHZjcHUpO1xuNTE5NTpcdFx0XHRpZiAocilcbjUxOTY6XHRcdFx0XHRyZXR1cm4gcjtcbjUxOTc6XHRcbjUxOTg6XHRcdFx0ciA9IG1tdV90b3B1cF9tZW1vcnlfY2FjaGVzKHZjcHUsIGZhbHNlKTtcbjUxOTk6XHRcdFx0aWYgKHIpXG41MjAwOlx0XHRcdFx0cmV0dXJuIHI7XG41MjAxOlx0XG41MjAyOlx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuNTIwMzpcdFxuNTIwNDpcdFx0XHRndWFyZChyZWFkX2xvY2spKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG41MjA1Olx0XG41MjA2Olx0XHRcdC8qXG41MjA3Olx0XHRcdCAqIEJlY2F1c2Ugc2xvdHNfbG9jayBpcyBoZWxkLCBpdCBzaG91bGQgYmUgaW1wb3NzaWJsZSBmb3Igcm9vdHNcbjUyMDg6XHRcdFx0ICogdG8gYmUgaW52YWxpZGF0ZWQgYWZ0ZXIgdGhlIGluaXRpYWwgTU1VIHJlbG9hZC4gIFdBUk4sIGJ1dFxuNTIwOTpcdFx0XHQgKiBjb250aW51ZSBhbmQgcmUtcmVsb2FkIHRoZSBNTVUgdG8gdHJ5IGFuZCBrZWVwIHRoZSBWTSBhbGl2ZS5cbjUyMTA6XHRcdFx0ICovXG41MjExOlx0XHRcdFdBUk5fT05fT05DRShrdm1fdGVzdF9yZXF1ZXN0KEtWTV9SRVFfTU1VX0ZSRUVfT0JTT0xFVEVfUk9PVFMsIHZjcHUpKTtcbjUyMTI6XHRcbjUyMTM6XHRcdFx0LypcbjUyMTQ6XHRcdFx0ICogU25hcHNob3QgdGhlIGludmFsaWRhdGlvbiBzZXF1ZW5jZSBjb3VudGVyIGFmdGVyIGFjcXVpcmluZ1xuNTIxNTpcdFx0XHQgKiBtbXVfbG9jaywgYXMgZ3Vlc3RfbWVtZmQgZ3VhcmFudGVlcyB0aGUgdmFsaWRpdHkgb2YgdGhlIHBmbixcbjUyMTY6XHRcdFx0ICogaS5lLiBhbnkgY29uY3VycmVudCBpbnZhbGlkYXRpb25zIGFyZSBndWFyYW50ZWVkIHRvIGJlXG41MjE3Olx0XHRcdCAqIGlycmVsZXZhbnQuXG41MjE4Olx0XHRcdCAqL1xuNTIxOTpcdFx0XHRmYXVsdC5tbXVfc2VxID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlbW11X2ludmFsaWRhdGVfc2VxO1xuNTIyMDpcdFx0XHRpZiAoaXNfcGFnZV9mYXVsdF9zdGFsZSh2Y3B1LCBcdTAwMjZmYXVsdCkpXG41MjIxOlx0XHRcdFx0Y29udGludWU7XG41MjIyOlx0XG41MjIzOlx0XHRcdHIgPSBrdm1fdGRwX21tdV9tYXAodmNwdSwgXHUwMDI2ZmF1bHQpO1xuNTIyNDpcdFx0fSB3aGlsZSAociA9PSBSRVRfUEZfUkVUUlkpO1xuNTIyNTpcdFxuNTIyNjpcdFx0aWYgKHIgIT0gUkVUX1BGX0ZJWEVEKVxuNTIyNzpcdFx0XHRyZXR1cm4gLUVJTztcbjUyMjg6XHRcbjUyMjk6XHRcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTM2MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqS1ZNIEd1ZXN0IE1lbW9yeSBNYXBwaW5nIOKAkyBUaGUgYG1lbWZkYCBEaWxlbW1hKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAgZnVuY3Rpb24sIGFuZCBpdCYjMzk7cyBsb29raW5nIGxpa2UgYENPTkZJR19LVk1fR1VFU1RfTUVNRkRgIGlzIGEgcHJlcmVxdWlzaXRlLiBNYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIG5lZWQgZm9yIG1hbmFnZWQgbWVtb3J5IGZpbGUgZGVzY3JpcHRvcnMsIEkgc3VwcG9zZS4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcyBob3cgaXQmIzM5O3MgYmVpbmcgaGFuZGxlZC4gSXMgYENPTkZJR19LVk1fR1VFU1RfTUVNRkRgIGRpcmVjdGx5IHNlbGVjdGVkIGJ5IHRoZSB4ODYgS1ZNIGNvbmZpZ3VyYXRpb24sIG9yIGlzIGl0IGNvbmZpZ3VyZWQgaW5kZXBlbmRlbnRseT8gSSBuZWVkIHRvIGNsYXJpZnkgdGhhdCBkZXBlbmRlbmN5LiBVbmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIGxvZ2ljIGhlcmUgaXMga2V5IHRvIGZ1bGx5IGdyYXNwIGhvdyB0aGlzIHNwZWNpZmljIG1lbW9yeSBtYXBwaW5nIGZ1bmN0aW9uIHdvcmtzIHdpdGhpbiB0aGUgYnJvYWRlciBLVk0gYXJjaGl0ZWN0dXJlLCBlc3BlY2lhbGx5IHdoZW4gY29uc2lkZXJpbmcgVERQIGFuZCBwcml2YXRlIHBhZ2UgZnJhbWVzLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY3Jvc3MtcmVmZXJlbmNlIHRoZSBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IGFwcHJvYWNoIHRvIGVuc3VyZSB0aGlzIGZsYWcgaXMgc2V0IGNvcnJlY3RseSBmb3IgbXkgdXNlIGNhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAxOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fR1VFU1RfTUVNRkQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt2aXJ0L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0vS2NvbmZpZz0xMDM9Y29uZmlnIEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG4tLVxudmlydC9rdm0vS2NvbmZpZy0xMDUtXG52aXJ0L2t2bS9LY29uZmlnOjEwNjpjb25maWcgS1ZNX0dVRVNUX01FTUZEXG52aXJ0L2t2bS9LY29uZmlnLTEwNy0gICAgICAgc2VsZWN0IFhBUlJBWV9NVUxUSVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTc2NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHdoYXQgSSYjMzk7bSBhYm91dCB0byBleHBsb3JlIHJlZ2FyZGluZyBgS1ZNX0dVRVNUX01FTUZEYDoKCioqSW52ZXN0aWdhdGluZyBgS1ZNX0dVRVNUX01FTUZEYCoqCgpSaWdodCwgbGV0JiMzOTtzIGRpZyBpbi4gSSYjMzk7bSBnb2luZyB0byB0cmFjayBkb3duIHdoZXJlIHRoZSBgS1ZNX0dVRVNUX01FTUZEYCBzeW1ib2wgZ2V0cyBzZWxlY3RlZCBpbiB0aGUgS1ZNIGtlcm5lbCBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSB2aXJ0dWFsIG1hY2hpbmUgZW52aXJvbm1lbnQuIE15IGdvYWwgaXMgYSBmdWxsIHVuZGVyc3RhbmRpbmcgc28gSSBjYW4gc3BlYWsgYWJvdXQgaXQgZWxvcXVlbnRseSB0byBvdGhlciBleHBlcnRzLiBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgYGdyZXBgIG9yIHNpbWlsYXIgc2VhcmNoIHRvIHNlZSB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkIGFuZCB1c2VkLiBUaGVuIEkmIzM5O2xsIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzIHRvIHNlZSB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBpdCYjMzk7cyBlbmFibGVkLiBIb3BlZnVsbHkgaXQmIzM5O3Mgbm90IHRvbyBvYnNjdXJlIGFuZCB0aGUgcmVhc29ucyBmb3IgaXRzIHNlbGVjdGlvbiBhcmUgZmFpcmx5IGNsZWFyLiBVbmRlcnN0YW5kaW5nIHRoZSByYXRpb25hbGUgYmVoaW5kIGl0cyBpbmNsdXNpb24gaXMgaW1wb3J0YW50OyBpcyBpdCByZWxhdGVkIHRvIHBlcmZvcm1hbmNlLCBzZWN1cml0eSwgYSBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVWx0aW1hdGVseSwgdGhlIGFpbSBpcyB0byBwaWVjZSB0b2dldGhlciBpdHMgcm9sZSBpbiB0aGUga2VybmVsIGFuZCBpdHMgaW1wbGljYXRpb25zIGZvciBndWVzdCBtZW1vcnkgbWFuYWdlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDE6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IEtWTV9HVUVTVF9NRU1GRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MjA9Y29uZmlnIEtWTV9YODZcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy00OS1cdHNlbGVjdCBLVk1fV0VSUk9SIGlmIFdFUlJPUlxuYXJjaC94ODYva3ZtL0tjb25maWc6NTA6XHRzZWxlY3QgS1ZNX0dVRVNUX01FTUZEIGlmIFg4Nl82NFxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAxOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTY3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEtWTSBBbmFseXNpcyoqCgpPa2F5LCBzbyBJIHNlZSB0aGlzIHBhdGNoIGlzIHJlbGV2YW50IGJlY2F1c2UgYEtWTV9HVUVTVF9NRU1GRGAgaXMgc2VsZWN0ZWQgd2l0aGluIGBLVk1fWDg2YCB3aGVuIGBYODZfNjRgIGlzIGNvbmZpZ3VyZWQuIFRoZXJlZm9yZSwgYEtWTWAgaXRzZWxmIGlzIHN1ZmZpY2llbnQgZm9yIHRoZSBjb25maWd1cmF0aW9uLiBMZXQmIzM5O3MgZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgY2hhbmdlZC4KClRoZSBwYXRjaCBzZWVtcyB0byBiZSB0b3VjaGluZyB0aGUgcHJlLWZhdWx0aW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgYGt2bV90ZHBfcGFnZV9wcmVmYXVsdGAsIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLCBhbmQgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAuIEl0JiMzOTtzIGFkZHJlc3NpbmcgYW4gTU1VIHJvb3QgaW52YWxpZGF0aW9uIHByb2JsZW0gd2l0aGluIGEgcmV0cnkgbG9vcCwgd2hpY2ggY291bGQgYmUgZGlzYXN0cm91cyBpZiBga3ZtX21tdV9yZWxvYWRgIHdhc24mIzM5O3Qgc3Vic2VxdWVudGx5IHRyaWdnZXJlZC4gVGhpcyBzZWVtcyBmdW5jdGlvbmFsbHkgc291bmQgYW5kIHJlYWNoYWJsZSwgZ29vZC4KCk15IGltbWVkaWF0ZSBmb2N1cyBzeW1ib2xzIGFyZSBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBhbmQgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aG9zZSBiZXR0ZXIgaW4gdGhlIGNvbnRleHQgb2YgdGhpcyBpc3N1ZS4KCkluIHRlcm1zIG9mIGNvbmZpZ3VyYXRpb24sIGBLVk1gIGlzIGFsbCB0aGF0JiMzOTtzIHJlcXVpcmVkLgoKV2FpdCwgaG9sZCBvbiBhIG1pbnV0ZeKApiBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYCBpcyBjYWxsZWQgYnkgYHRkeF9nbWVtX3Bvc3RfcG9wdWxhdGVgLCBhbmQgdGhhdCYjMzk7cyAqaW4qIGBhcmNoL3g4Ni9rdm0vdm14L3RkeC5jYC4gTm93IEkgbmVlZCB0byBzZWUgaWYgYHRkeC5jYCBpcyBjb21waWxlZCBieSBkZWZhdWx0LiBJIG5lZWQgdG8gY2hlY2sgdGhlIGBhcmNoL3g4Ni9rdm0vdm14L01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBjb21waWxhdGlvbiBydWxlcy4gVGhpcyBjb3VsZCBhZmZlY3QgdGhlIG92ZXJhbGwgc2NvcGUgb2YgdGhlIGZpeC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDE6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0ZHhcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg1MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gQ29udW5kcnVtKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgbmVlZCB0byByZXRoaW5rIHRoaXMgYXBwcm9hY2guIEkgd2FzIGZvY3VzaW5nIG9uIGB0ZHguY2AgYW5kIGl0cyBwbGFjZSBpbiB0aGUgb3ZlcmFsbCBidWlsZCBwcm9jZXNzLCBidXQgSSYjMzk7bSBoYXZpbmcgYSBuYWdnaW5nIGZlZWxpbmcuLi4gY291bGQgaXQgYmUgdGhhdCBgdGR4LmNgIGlzIGNvbXBpbGVkICpjb25kaXRpb25hbGx5Kj8gVGhhdCB3b3VsZCBjb21wbGV0ZWx5IGNoYW5nZSBob3cgSSBhcHByb2FjaCB0aGlzLiBJZiBpdCYjMzk7cyBvbmx5IGluY2x1ZGVkIHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcywgbXkgYXNzdW1wdGlvbnMgYWJvdXQgaXRzIGNvbnNpc3RlbnQgcHJlc2VuY2UgaW4gdGhlIGZpbmFsIG91dHB1dCBhcmUgZnVuZGFtZW50YWxseSBmbGF3ZWQuIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciB0aGVyZSBhcmUgYW55IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIG9yIGZsYWdzIGFmZmVjdGluZyB0aGUgY29tcGlsYXRpb24gb2YgYHRkeC5jYC4gVGhpcyBpc24mIzM5O3QgbmVjZXNzYXJpbHkgYSBzaG93LXN0b3BwZXIsIGJ1dCBpdCBzaWduaWZpY2FudGx5IGFsdGVycyB0aGUgYW5hbHlzaXMuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgcG9zc2libGUgY29uZGl0aW9ucy4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IGhpbnRzIGluIHRoZSBoZWFkZXJzIG9yIHRoZSBidWlsZCBzeXN0ZW0gc2NyaXB0cy4uLiBpdCBjb3VsZCBiZSBzb21ldGhpbmcgYXMgc2ltcGxlIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24gb3IgdGFyZ2V0IGFyY2hpdGVjdHVyZSBkZXBlbmRlbmN5LiBUaW1lIHRvIGRpdmUgZGVlcGVyIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RkeFxcLmMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAxOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTE4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnkgb2YgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSYjMzk7bSBoYXZpbmcgdGhlc2UgdGhvdWdodHM6CgoqKktWTS9URFggRmlsZSBJbnZlc3RpZ2F0aW9uKioKCkhtbSwgaG9sZCBvbiBhIHNlY29uZC4uLiBJIGRpc3RpbmN0bHkgcmVtZW1iZXIgc2VlaW5nIGBhcmNoL3g4Ni9rdm0vdm14L3RkeC5jYCBwb3AgdXAgaW4gdGhhdCBgZ3JlcGAgb3V0cHV0IGEgZmV3IG1vbWVudHMgYWdvLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhbmQgcG90ZW50aWFsbHkgcmVsZXZhbnQuIEdpdmVuIG15IGZvY3VzIG9uIEtWTSBhbmQgdGhlIFREWCBpbnRlZ3JhdGlvbiwgdGhhdCBmaWxlIGRlZmluaXRlbHkgd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuIE15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIHRoZSByZWxhdGVkIGBNYWtlZmlsZWAgd2l0aGluIHRoZSBLVk0gZGlyZWN0b3J5LiBUaGF0IHdpbGwgcHJvdmlkZSBjcnVjaWFsIGNvbnRleHQg4oCTIGxpbmtpbmcgdGhpcyBzcGVjaWZpYyBzb3VyY2UgZmlsZSB0byB0aGUgb3ZlcmFsbCBidWlsZCBwcm9jZXNzIGFuZCBwb3RlbnRpYWxseSByZXZlYWxpbmcgZGVwZW5kZW5jaWVzIG9yIGludGVncmF0aW9uIHBvaW50cyB3aXRoaW4gdGhlIHg4Ni9LVk0gc3Vic3lzdGVtLiBGcm9tIHRoZXJlLCBJIGNhbiBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgaXRzIHJvbGUgYW5kIHNpZ25pZmljYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDE6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGR4XFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL01ha2VmaWxlPTIxPWt2bS1pbnRlbC0kKENPTkZJR19LVk1fSFlQRVJWKVx0JiM0Mzs9IHZteC9oeXBlcnYubyB2bXgvaHlwZXJ2X2V2bWNzLm9cbmFyY2gveDg2L2t2bS9NYWtlZmlsZToyMjprdm0taW50ZWwtJChDT05GSUdfS1ZNX0lOVEVMX1REWClcdCYjNDM7PSB2bXgvdGR4Lm9cbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0yMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDE6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0OTIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgZm9yIFREWCBTdXBwb3J0KioKClJpZ2h0LCBzbyBJIHNlZSB3ZSBuZWVkIGBDT05GSUdfS1ZNX0lOVEVMX1REWGAgZm9yIGB0ZHgub2AuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuIFRoZSBwaWVjZXMgYXJlIHNsb3R0aW5nIGludG8gcGxhY2UuIE5vdywgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgZG93biB0aGlzIHBhdGgsIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhhdCBwYXJ0aWN1bGFyIEtjb25maWcgb3B0aW9uIGlzIGV2ZW4gZGVmaW5lZCB3aXRoaW4gb3VyIGN1cnJlbnQgYnVpbGQgZW52aXJvbm1lbnQuIEkgbmVlZCB0byBrbm93IGlmIHRoZSBrZXJuZWwgaGFzIGJlZW4gY29uZmlndXJlZCB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIEludGVsJiMzOTtzIFREWCB0ZWNobm9sb2d5IGluIHRoZSBmaXJzdCBwbGFjZS4gTm8gcG9pbnQgY2hhc2luZyBhIHBoYW50b20gZGVwZW5kZW5jeS4gTGV0JiMzOTtzIHZlcmlmeSB0aGF0IGBDT05GSUdfS1ZNX0lOVEVMX1REWGAgYWN0dWFsbHkgZXhpc3RzLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBvciB0aGUgY3VycmVudCBidWlsZCBjb25maWd1cmF0aW9uLiBLbm93aW5nIHRoaXMgd2lsbCB0ZWxsIG1lIHdoZXRoZXIgSSBjYW4gZXhwZWN0IHRoZSByZWxldmFudCBURFgtcmVsYXRlZCBtb2R1bGVzIGFuZCBmdW5jdGlvbmFsaXR5IHRvIGJlIHByZXNlbnQgaW4gdGhlIGJ1aWxkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0lOVEVMX1REWCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVx0Ym9vbCBcJiMzNDtJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAxOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODgzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFJlYXNvbmluZyBvbiBLVk0gQ29uZmlndXJhdGlvbiBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgS1ZNX0lOVEVMX1REWGAgY29uZmlndXJhdGlvbiBvcHRpb24uIFJpZ2h0LCBpdCYjMzk7cyBhIHNwZWNpZmljIGNvbmZpZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGluY2x1ZGUgYm90aCBgS1ZNYCBnZW5lcmFsbHkgKmFuZCogdGhpcyBgS1ZNX0lOVEVMX1REWGAgb3B0aW9uIGluIHRoZSBmdXp6aW5nIGNvbmZpZ3MuIFRoYXQgbWFrZXMgc2Vuc2UsIGNvdmVyaW5nIHRoZSBnZW5lcmFsIEtWTSBmdW5jdGlvbmFsaXR5IGFuZCB0aGlzIFREWC1zcGVjaWZpYyBwYXJ0LgoKSG1tLCBoYW5nIG9uLiBJJiMzOTttIHNlZWluZyB0aGF0IGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgICpjYW4qIGJlIHJlYWNoZWQgZXZlbiB3aXRob3V0IFREWCBlbmFibGVkLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdywgYnV0Li4uIHRoZSBjcnVjaWFsIHBvaW50IGlzIHRoYXQgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAgKmFwcGVhcnMqIHRvIG9ubHkgYmUgY2FsbGVkIGZyb20gVERYIGNvZGUgYXQgdGhlIG1vbWVudC4gU28sIGFkZGluZyBgS1ZNX0lOVEVMX1REWGAgaXMgc3RpbGwgYSB2YWxpZCBkZWNpc2lvbi4gSXQgZW5zdXJlcyB0aGF0ICpib3RoKiBjb2RlIHBhdGhzLCB0aGUgVERYLXNwZWNpZmljIGFuZCB0aGUgbW9yZSBnZW5lcmFsIG9uZSwgYXJlIGFjY2Vzc2libGUgZHVyaW5nIGZ1enppbmcsIGFuZCBJIGNhbiBiZSBjb25maWRlbnQgSSYjMzk7bSBjb3ZlcmluZyBldmVyeXRoaW5nIHJlbGV2YW50LgoKQWxyaWdodCwgYmVmb3JlIEkgZmluYWxpemUgdGhpcywgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBLVk1fSU5URUxfVERYYCBkb2VzbiYjMzk7dCBoYXZlIGFueSBoaWRkZW4gZGVwZW5kZW5jaWVzLiBOZWVkIHRvIGJlIGNlcnRhaW4gdGhhdCBJJiMzOTttIG5vdCBpbmFkdmVydGVudGx5IGJyZWFraW5nIHNvbWV0aGluZyBlbHNlIGJ5IGVuYWJsaW5nIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzQ6XHRjb25maWcgS1ZNX0lOVEVMX1REWFxuIDEzNTpcdFx0Ym9vbCBcJiMzNDtJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XCYjMzQ7XG4gMTM2Olx0XHRkZWZhdWx0IHlcbiAxMzc6XHRcdGRlcGVuZHMgb24gSU5URUxfVERYX0hPU1RcbiAxMzg6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuIDEzOTpcdFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxuIDE0MDpcdFx0aGVscFxuIDE0MTpcdFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBsYXVuY2hpbmcgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWClcbiAxNDI6XHRcdCAgY29uZmlkZW50aWFsIFZNcyBvbiBJbnRlbCBwcm9jZXNzb3JzLlxuIDE0MzpcdFxuIDE0NDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDE0NTpcdFxuIDE0NjpcdGNvbmZpZyBLVk1fQU1EXG4gMTQ3Olx0XHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbiAxNDg6XHRcdGRlcGVuZHMgb24gS1ZNIFx1MDAyNlx1MDAyNiAoQ1BVX1NVUF9BTUQgfHwgQ1BVX1NVUF9IWUdPTilcbiAxNDk6XHRcdGhlbHBcbiAxNTA6XHRcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgS1ZNIG9uIEFNRCBwcm9jZXNzb3JzIGVxdWlwcGVkIHdpdGggdGhlIEFNRC1WXG4gMTUxOlx0XHQgIChTVk0pIGV4dGVuc2lvbnMuXG4gMTUyOlx0XG4gMTUzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDY1NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jeSoqCgpPa2F5LCBzbyB0aGUgc2l0dWF0aW9uIGhpbmdlcyBvbiB0aGlzIGBJTlRFTF9URFhfSE9TVGAgdmFyaWFibGUuIFRoZSBjb3JlIHF1ZXN0aW9uIGJlZm9yZSBtZSBpcyBpdHMgc3RhdGUuIEkgbmVlZCB0byBrbm93IHRoZSB2YWx1ZSBvZiBgSU5URUxfVERYX0hPU1RgIHRvIGRldGVybWluZSB0aGUgc3Vic2VxdWVudCBjb3Vyc2Ugb2YgYWN0aW9uLiBJdCYjMzk7cyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgYW5kIHByb2NlZWRpbmcgbG9naWNhbGx5LiBNeSBpbW1lZGlhdGUgdGFzayBpcyB0byBhc2NlcnRhaW4gdGhlIGN1cnJlbnQgc2V0dGluZyBvciB2YWx1ZSBvZiBgSU5URUxfVERYX0hPU1RgIOKAkyB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgZWZmZWN0aXZlIGFuYWx5c2lzLiBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gZ2V0IHRoaXMgY3JpdGljYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24gYmVmb3JlIEkgcHJvY2VlZCBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU5URUxfVERYX0hPU1QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZz0xODQ0PWNvbmZpZyBYODZfVVNFUl9TSEFET1dfU1RBQ0tcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTE4NjMtXG5hcmNoL3g4Ni9LY29uZmlnOjE4NjQ6Y29uZmlnIElOVEVMX1REWF9IT1NUXG5hcmNoL3g4Ni9LY29uZmlnLTE4NjUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIGhvc3Qgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDk1MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBpbml0aWFsIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIERlcGVuZGVuY3kgTGFuZHNjYXBlIGZvciBJTlRFTF9URFhfSE9TVCoqCgpBbHJpZ2h0LCB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIGdldCBhIGhhbmRsZSBvbiB3aGF0IGBJTlRFTF9URFhfSE9TVGAgaXMgcmVsaWFudCBvbi4gVW5kZXJzdGFuZGluZyBpdHMgZGVwZW5kZW5jaWVzIGlzIHRoZSBjcml0aWNhbCBmaXJzdCBzdGVwLiBJIG5lZWQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgb3RoZXIgY29tcG9uZW50cywgbGlicmFyaWVzLCBvciBzeXN0ZW1zIGl0JiMzOTtzIGludGVyd292ZW4gd2l0aC4gVGhhdCBpbmZvcm1hdGlvbiBpcyBnb2luZyB0byBsYXkgdGhlIGdyb3VuZHdvcmsgZm9yIGFueSBmdXJ0aGVyIGFuYWx5c2lzLCB0cm91Ymxlc2hvb3RpbmcsIG9yIGRldmVsb3BtZW50IGVmZm9ydHMgZG93biB0aGUgbGluZS4gSXQmIzM5O3MgdGhlIGZvdW5kYXRpb24gb2YgdW5kZXJzdGFuZGluZyB0aGUgZW50aXJlIGFyY2hpdGVjdHVyZSBhbmQgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgYW55IGNoYW5nZS4gV2l0aG91dCB0aGlzIHVuZGVyc3RhbmRpbmcsIEkmIzM5O20gZXNzZW50aWFsbHkgZmx5aW5nIGJsaW5kLiBLbm93aW5nIHRob3NlIHJlbGF0aW9uc2hpcHMgaXMga2V5IGZvciBtYWludGFpbmluZyBhbmQgZGV2ZWxvcGluZyB0aGUgY29kZWJhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAxOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4NjQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTg2NDpcdGNvbmZpZyBJTlRFTF9URFhfSE9TVFxuMTg2NTpcdFx0Ym9vbCBcJiMzNDtJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBob3N0IHN1cHBvcnRcJiMzNDtcbjE4NjY6XHRcdGRlcGVuZHMgb24gQ1BVX1NVUF9JTlRFTFxuMTg2NzpcdFx0ZGVwZW5kcyBvbiBYODZfNjRcbjE4Njg6XHRcdGRlcGVuZHMgb24gS1ZNX0lOVEVMXG4xODY5Olx0XHRkZXBlbmRzIG9uIFg4Nl9YMkFQSUNcbjE4NzA6XHRcdHNlbGVjdCBBUkNIX0tFRVBfTUVNQkxPQ0tcbjE4NzE6XHRcdGRlcGVuZHMgb24gQ09OVElHX0FMTE9DXG4xODcyOlx0XHRkZXBlbmRzIG9uIFg4Nl9NQ0VcbjE4NzM6XHRcdGhlbHBcbjE4NzQ6XHRcdCAgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgcHJvdGVjdHMgZ3Vlc3QgVk1zIGZyb20gbWFsaWNpb3VzXG4xODc1Olx0XHQgIGhvc3QgYW5kIGNlcnRhaW4gcGh5c2ljYWwgYXR0YWNrcy4gIFRoaXMgb3B0aW9uIGVuYWJsZXMgbmVjZXNzYXJ5IFREWFxuMTg3NjpcdFx0ICBzdXBwb3J0IGluIHRoZSBob3N0IGtlcm5lbCB0byBydW4gY29uZmlkZW50aWFsIFZNcy5cbjE4Nzc6XHRcbjE4Nzg6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbjE4Nzk6XHRcbjE4ODA6XHRjb25maWcgRUZJXG4xODgxOlx0XHRib29sIFwmIzM0O0VGSSBydW50aW1lIHNlcnZpY2Ugc3VwcG9ydFwmIzM0O1xuMTg4MjpcdFx0ZGVwZW5kcyBvbiBBQ1BJXG4xODgzOlx0XHRzZWxlY3QgVUNTMl9TVFJJTkdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDE6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0NTMKCQkJCQkJCW91dHB1dDogMTcwCgkJCQkJCQl0aG91Z2h0czogNDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBLVk0gYW5kIFREWCBDb25maWd1cmF0aW9uIGFuZCBCdWcgRml4KioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIEtWTSBhbmQgVERYIGNvbmZpZ3VyYXRpb24gYW5kIGhhdmUgYXJyaXZlZCBhdCBhIGNsZWFyZXIgcGljdHVyZS4gSW5pdGlhbGx5LCBJIHRob3VnaHQgSSBtaWdodCBuZWVkIHRvIGluY2x1ZGUgYEtWTV9JTlRFTGAsIGBYODZfWDJBUElDYCwgYENPTlRJR19BTExPQ2AsIGFuZCBgWDg2X01DRWAgYmVjYXVzZSBgSU5URUxfVERYX0hPU1RgIGRlcGVuZHMgb24gdGhlbS4gSG93ZXZlciwgaXQgbG9va3MgbGlrZSBJIGNhbiBzaW1wbGlmeSB0aGluZ3MuIEFjdHVhbGx5LCBJIHdpbGwgZ28gd2l0aCBgS1ZNYCwgYEtWTV9JTlRFTGAsIGBJTlRFTF9URFhfSE9TVGAsIGFuZCBgS1ZNX0lOVEVMX1REWGAgbm93IHRoYXQgSSYjMzk7dmUgZG91YmxlIGNoZWNrZWQgdGhlIGRlcGVuZGVuY2llcy4gSXQgc2VlbXMgYEtWTV9JTlRFTF9URFhgIGRlZmF1bHRzIHRvICYjMzk7eSYjMzk7IGlmIGBJTlRFTF9URFhfSE9TVGAgaXMgZW5hYmxlZC4KCk5vdywgbGV0JiMzOTtzIHJldmlzaXQgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAuIEkgbmVlZCB0byBlbnN1cmUgdGhlIGZpeCBpcyBjb3JyZWN0bHkgaW50ZWdyYXRlZC4gQWgsIHllcywgaXQmIzM5O3MgY29ubmVjdGVkIHRocm91Z2ggdGhlIGBLVk1fUFJFX0ZBVUxUX01FTU9SWWAgaW9jdGwuIFRoZSBjcml0aWNhbCBhc3BlY3Qgb2YgdGhpcyBwYXRjaCBpcyB0aGUgY29ycmVjdGlvbiBpbiB0aGUgTU1VIHJlbG9hZCB3aXRoaW4gdGhlIHJldHJ5IGxvb3AuIEVzc2VudGlhbGx5LCBpdCByZXNvbHZlcyBhIGJ1ZyB3aGVyZSBga3ZtX21tdV9yZWxvYWRgIHdhc24mIzM5O3QgYmVpbmcgY2FsbGVkIGluc2lkZSB0aGUgcmV0cnkgbG9vcCwgd2hpY2ggY291bGQgY2F1c2UgcHJvYmxlbXMgaWYgdGhlIE1NVSByb290cyB3ZXJlIGludmFsaWRhdGVkIG1pZC1sb29wLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgS1ZNIE1NVSBjb2RlLCBhbmQgSSBuZWVkIHRvIGJlIHN1cmUgaXQmIzM5O3MgYXBwbGllZCBjb3JyZWN0bHkuCgpLZXkgc3ltYm9scyB0byB0cmFjayBub3cgYXJlIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGFuZCBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYC4KClNvLCB0aGUgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyBLVk0gTU1VIHBhZ2UgcHJlLWZhdWx0aW5nIGFuZCBwcml2YXRlIFBGTiBtYXBwaW5nIGxvZ2ljLiBUaGUgZml4IGVuc3VyZXMgdGhlIE1NVSBpcyByZWxvYWRlZCB3aXRoaW4gdGhlIHJldHJ5IGxvb3BzIHdoaWNoIGlzIGNydWNpYWwgYmVjYXVzZSB0aGlzIGZpeGVzIGEgY29uY3VycmVudCBNTVUgcm9vdCBpbnZhbGlkYXRpb24gcHJvYmxlbS4gVGhlIGNoYW5nZXMgZGlyZWN0bHkgaW1wYWN0IHJlYWNoYWJsZSBLVk0gaW9jdGxzIGxpa2UgYEtWTV9QUkVfRkFVTFRfTUVNT1JZYCBhbmQgYWxzbyBURFggZ3Vlc3QgbWVtb3J5IHBvcHVsYXRpb24gd2hpY2ggaXMgc2lnbmlmaWNhbnQuCgpJIHF1aWNrbHkgY2hlY2tlZCBga3ZtX3RkcF9wYWdlX3ByZWZhdWx0YCwgYnV0IGl0JiMzOTtzIHN0YXRpYywgc28gaXQmIzM5O3Mgbm90IHRoZSBiZXN0IHN5bWJvbCB0byBmb2N1cyBvbi4gYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgYW5kIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gIGFyZSBleHBvcnRlZCBhbmQgdGhlcmVmb3JlIGltcG9ydGFudC4KCkFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50IGluIG15IGFzc2Vzc21lbnQuIFRpbWUgdG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDE6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7SU5URUxfVERYX0hPU1QmIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMX1REWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSYjMzQ7LAogICAgJiMzNDtrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIE1NVSBwYWdlIHByZS1mYXVsdGluZyBhbmQgcHJpdmF0ZSBQRk4gbWFwcGluZyBsb2dpYyB0byBjb3JyZWN0bHkgcmVsb2FkIHRoZSBNTVUgaW5zaWRlIHJldHJ5IGxvb3BzLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBpc3N1ZXMgd2hlbiBNTVUgcm9vdHMgYXJlIGludmFsaWRhdGVkIGNvbmN1cnJlbnRseS4gVGhlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBLVk0gaW9jdGxzIChLVk1fUFJFX0ZBVUxUX01FTU9SWSkgYW5kIFREWCBndWVzdCBtZW1vcnkgcG9wdWxhdGlvbiwgbWFraW5nIGl0IGZ1bmN0aW9uYWwgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7SU5URUxfVERYX0hPU1QmIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMX1REWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSYjMzQ7LAogICAgJiMzNDtrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIE1NVSBwYWdlIHByZS1mYXVsdGluZyBhbmQgcHJpdmF0ZSBQRk4gbWFwcGluZyBsb2dpYyB0byBjb3JyZWN0bHkgcmVsb2FkIHRoZSBNTVUgaW5zaWRlIHJldHJ5IGxvb3BzLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBpc3N1ZXMgd2hlbiBNTVUgcm9vdHMgYXJlIGludmFsaWRhdGVkIGNvbmN1cnJlbnRseS4gVGhlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBLVk0gaW9jdGxzIChLVk1fUFJFX0ZBVUxUX01FTU9SWSkgYW5kIFREWCBndWVzdCBtZW1vcnkgcG9wdWxhdGlvbiwgbWFraW5nIGl0IGZ1bmN0aW9uYWwgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMToyMTowMy4yOTcxMTE0NjVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODUxMDIxMzIzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiSU5URUxfVERYX0hPU1RcIixcbiAgICBcIktWTV9JTlRFTF9URFhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlcIixcbiAgICBcImt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBNTVUgcGFnZSBwcmUtZmF1bHRpbmcgYW5kIHByaXZhdGUgUEZOIG1hcHBpbmcgbG9naWMgdG8gY29ycmVjdGx5IHJlbG9hZCB0aGUgTU1VIGluc2lkZSByZXRyeSBsb29wcy4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgaXNzdWVzIHdoZW4gTU1VIHJvb3RzIGFyZSBpbnZhbGlkYXRlZCBjb25jdXJyZW50bHkuIFRoZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgS1ZNIGlvY3RscyAoS1ZNX1BSRV9GQVVMVF9NRU1PUlkpIGFuZCBURFggZ3Vlc3QgbWVtb3J5IHBvcHVsYXRpb24sIG1ha2luZyBpdCBmdW5jdGlvbmFsIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMToyMTowMy4yOTcxMjA4MTVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NTk3Mjc0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDIyOTQxN2M4Y2VmOTdkNjJjNGI4Yjg1NWQzNDRlNWI4ZDRjMWZhYmFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgNyAwMToyMTowMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xcbmluZGV4IGM1MTllOGU4ZDY0NmYuLjc2ZTNjZDcxNzMyNGIgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcXG5AQCAtNTAzNiw2ICs1MDM2LDEwIEBAIHN0YXRpYyBpbnQga3ZtX3RkcF9wYWdlX3ByZWZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLFxcbiBcXHRcXHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9WTV9ERUFELCB2Y3B1KSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcbitcXHRcXHRyID0ga3ZtX21tdV9yZWxvYWQodmNwdSk7XFxuK1xcdFxcdGlmIChyKVxcbitcXHRcXHRcXHRyZXR1cm4gcjtcXG4rXFxuIFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbiBcXHRcXHRyID0ga3ZtX21tdV9kb19wYWdlX2ZhdWx0KHZjcHUsIGdwYSwgZXJyb3JfY29kZSwgdHJ1ZSwgTlVMTCwgbGV2ZWwpO1xcbiBcXHR9IHdoaWxlIChyID09IFJFVF9QRl9SRVRSWSk7XFxuQEAgLTUwNzYsMTQgKzUwODAsNiBAQCBsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIFxcdGlmIChrdm1faXNfZ2ZuX2FsaWFzKHZjcHUtXFx1MDAzZWt2bSwgZ3BhX3RvX2dmbihyYW5nZS1cXHUwMDNlZ3BhKSkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0LypcXG4tXFx0ICogcmVsb2FkIGlzIGVmZmljaWVudCB3aGVuIGNhbGxlZCByZXBlYXRlZGx5LCBzbyB3ZSBjYW4gZG8gaXQgb25cXG4tXFx0ICogZXZlcnkgaXRlcmF0aW9uLlxcbi1cXHQgKi9cXG4tXFx0ciA9IGt2bV9tbXVfcmVsb2FkKHZjcHUpO1xcbi1cXHRpZiAocilcXG4tXFx0XFx0cmV0dXJuIHI7XFxuLVxcbiBcXHRkaXJlY3RfYml0cyA9IDA7XFxuIFxcdGlmIChrdm1fYXJjaF9oYXNfcHJpdmF0ZV9tZW0odmNwdS1cXHUwMDNla3ZtKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAga3ZtX21lbV9pc19wcml2YXRlKHZjcHUtXFx1MDAzZWt2bSwgZ3BhX3RvX2dmbihyYW5nZS1cXHUwMDNlZ3BhKSkpXFxuQEAgLTUxODgsMTQgKzUxODQsNiBAQCBpbnQga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuKVxcbiBcXHRpZiAoa3ZtX2dmbl9pc193cml0ZV90cmFja2VkKGt2bSwgZmF1bHQuc2xvdCwgZmF1bHQuZ2ZuKSlcXG4gXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gXFxuLVxcdHIgPSBrdm1fbW11X3JlbG9hZCh2Y3B1KTtcXG4tXFx0aWYgKHIpXFxuLVxcdFxcdHJldHVybiByO1xcbi1cXG4tXFx0ciA9IG1tdV90b3B1cF9tZW1vcnlfY2FjaGVzKHZjcHUsIGZhbHNlKTtcXG4tXFx0aWYgKHIpXFxuLVxcdFxcdHJldHVybiByO1xcbi1cXG4gXFx0ZG8ge1xcbiBcXHRcXHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVFI7XFxuQEAgLTUyMDMsMTAgKzUxOTEsMzUgQEAgaW50IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbilcXG4gXFx0XFx0aWYgKGt2bV90ZXN0X3JlcXVlc3QoS1ZNX1JFUV9WTV9ERUFELCB2Y3B1KSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcbitcXHRcXHRyID0ga3ZtX21tdV9yZWxvYWQodmNwdSk7XFxuK1xcdFxcdGlmIChyKVxcbitcXHRcXHRcXHRyZXR1cm4gcjtcXG4rXFxuK1xcdFxcdHIgPSBtbXVfdG9wdXBfbWVtb3J5X2NhY2hlcyh2Y3B1LCBmYWxzZSk7XFxuK1xcdFxcdGlmIChyKVxcbitcXHRcXHRcXHRyZXR1cm4gcjtcXG4rXFxuIFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbiBcXG4gXFx0XFx0Z3VhcmQocmVhZF9sb2NrKShcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuIFxcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBCZWNhdXNlIHNsb3RzX2xvY2sgaXMgaGVsZCwgaXQgc2hvdWxkIGJlIGltcG9zc2libGUgZm9yIHJvb3RzXFxuK1xcdFxcdCAqIHRvIGJlIGludmFsaWRhdGVkIGFmdGVyIHRoZSBpbml0aWFsIE1NVSByZWxvYWQuICBXQVJOLCBidXRcXG4rXFx0XFx0ICogY29udGludWUgYW5kIHJlLXJlbG9hZCB0aGUgTU1VIHRvIHRyeSBhbmQga2VlcCB0aGUgVk0gYWxpdmUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRXQVJOX09OX09OQ0Uoa3ZtX3Rlc3RfcmVxdWVzdChLVk1fUkVRX01NVV9GUkVFX09CU09MRVRFX1JPT1RTLCB2Y3B1KSk7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBTbmFwc2hvdCB0aGUgaW52YWxpZGF0aW9uIHNlcXVlbmNlIGNvdW50ZXIgYWZ0ZXIgYWNxdWlyaW5nXFxuK1xcdFxcdCAqIG1tdV9sb2NrLCBhcyBndWVzdF9tZW1mZCBndWFyYW50ZWVzIHRoZSB2YWxpZGl0eSBvZiB0aGUgcGZuLFxcbitcXHRcXHQgKiBpLmUuIGFueSBjb25jdXJyZW50IGludmFsaWRhdGlvbnMgYXJlIGd1YXJhbnRlZWQgdG8gYmVcXG4rXFx0XFx0ICogaXJyZWxldmFudC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGZhdWx0Lm1tdV9zZXEgPSB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZW1tdV9pbnZhbGlkYXRlX3NlcTtcXG4rXFx0XFx0aWYgKGlzX3BhZ2VfZmF1bHRfc3RhbGUodmNwdSwgXFx1MDAyNmZhdWx0KSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbiBcXHRcXHRyID0ga3ZtX3RkcF9tbXVfbWFwKHZjcHUsIFxcdTAwMjZmYXVsdCk7XFxuIFxcdH0gd2hpbGUgKHIgPT0gUkVUX1BGX1JFVFJZKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjIxOjAzLjg1Mzg5MDI1N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg3OTUzNDE4MDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJJTlRFTF9URFhfSE9TVFwiLFxuICAgIFwiS1ZNX0lOVEVMX1REWFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeVwiLFxuICAgIFwia3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIE1NVSBwYWdlIHByZS1mYXVsdGluZyBhbmQgcHJpdmF0ZSBQRk4gbWFwcGluZyBsb2dpYyB0byBjb3JyZWN0bHkgcmVsb2FkIHRoZSBNTVUgaW5zaWRlIHJldHJ5IGxvb3BzLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBpc3N1ZXMgd2hlbiBNTVUgcm9vdHMgYXJlIGludmFsaWRhdGVkIGNvbmN1cnJlbnRseS4gVGhlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBLVk0gaW9jdGxzIChLVk1fUFJFX0ZBVUxUX01FTU9SWSkgYW5kIFREWCBndWVzdCBtZW1vcnkgcG9wdWxhdGlvbiwgbWFraW5nIGl0IGZ1bmN0aW9uYWwgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDIyOTQxN2M4Y2VmOTdkNjJjNGI4Yjg1NWQzNDRlNWI4ZDRjMWZhYmFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDAxOjIxOjAyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbmluZGV4IGM1MTllOGU4ZDY0NmYuLjc2ZTNjZDcxNzMyNGIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG5AQCAtNTAzNiw2ICs1MDM2LDEwIEBAIHN0YXRpYyBpbnQga3ZtX3RkcF9wYWdlX3ByZWZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLFxuIFx0XHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9WTV9ERUFELCB2Y3B1KSlcbiBcdFx0XHRyZXR1cm4gLUVJTztcbiBcbitcdFx0ciA9IGt2bV9tbXVfcmVsb2FkKHZjcHUpO1xuK1x0XHRpZiAocilcbitcdFx0XHRyZXR1cm4gcjtcbitcbiBcdFx0Y29uZF9yZXNjaGVkKCk7XG4gXHRcdHIgPSBrdm1fbW11X2RvX3BhZ2VfZmF1bHQodmNwdSwgZ3BhLCBlcnJvcl9jb2RlLCB0cnVlLCBOVUxMLCBsZXZlbCk7XG4gXHR9IHdoaWxlIChyID09IFJFVF9QRl9SRVRSWSk7XG5AQCAtNTA3NiwxNCArNTA4MCw2IEBAIGxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdGlmIChrdm1faXNfZ2ZuX2FsaWFzKHZjcHUtXHUwMDNla3ZtLCBncGFfdG9fZ2ZuKHJhbmdlLVx1MDAzZWdwYSkpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdC8qXG4tXHQgKiByZWxvYWQgaXMgZWZmaWNpZW50IHdoZW4gY2FsbGVkIHJlcGVhdGVkbHksIHNvIHdlIGNhbiBkbyBpdCBvblxuLVx0ICogZXZlcnkgaXRlcmF0aW9uLlxuLVx0ICovXG4tXHRyID0ga3ZtX21tdV9yZWxvYWQodmNwdSk7XG4tXHRpZiAocilcbi1cdFx0cmV0dXJuIHI7XG4tXG4gXHRkaXJlY3RfYml0cyA9IDA7XG4gXHRpZiAoa3ZtX2FyY2hfaGFzX3ByaXZhdGVfbWVtKHZjcHUtXHUwMDNla3ZtKSBcdTAwMjZcdTAwMjZcbiBcdCAgICBrdm1fbWVtX2lzX3ByaXZhdGUodmNwdS1cdTAwM2Vrdm0sIGdwYV90b19nZm4ocmFuZ2UtXHUwMDNlZ3BhKSkpXG5AQCAtNTE4OCwxNCArNTE4NCw2IEBAIGludCBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4pXG4gXHRpZiAoa3ZtX2dmbl9pc193cml0ZV90cmFja2VkKGt2bSwgZmF1bHQuc2xvdCwgZmF1bHQuZ2ZuKSlcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbiBcbi1cdHIgPSBrdm1fbW11X3JlbG9hZCh2Y3B1KTtcbi1cdGlmIChyKVxuLVx0XHRyZXR1cm4gcjtcbi1cbi1cdHIgPSBtbXVfdG9wdXBfbWVtb3J5X2NhY2hlcyh2Y3B1LCBmYWxzZSk7XG4tXHRpZiAocilcbi1cdFx0cmV0dXJuIHI7XG4tXG4gXHRkbyB7XG4gXHRcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSlcbiBcdFx0XHRyZXR1cm4gLUVJTlRSO1xuQEAgLTUyMDMsMTAgKzUxOTEsMzUgQEAgaW50IGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwga3ZtX3Bmbl90IHBmbilcbiBcdFx0aWYgKGt2bV90ZXN0X3JlcXVlc3QoS1ZNX1JFUV9WTV9ERUFELCB2Y3B1KSlcbiBcdFx0XHRyZXR1cm4gLUVJTztcbiBcbitcdFx0ciA9IGt2bV9tbXVfcmVsb2FkKHZjcHUpO1xuK1x0XHRpZiAocilcbitcdFx0XHRyZXR1cm4gcjtcbitcbitcdFx0ciA9IG1tdV90b3B1cF9tZW1vcnlfY2FjaGVzKHZjcHUsIGZhbHNlKTtcbitcdFx0aWYgKHIpXG4rXHRcdFx0cmV0dXJuIHI7XG4rXG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFxuIFx0XHRndWFyZChyZWFkX2xvY2spKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4gXG4rXHRcdC8qXG4rXHRcdCAqIEJlY2F1c2Ugc2xvdHNfbG9jayBpcyBoZWxkLCBpdCBzaG91bGQgYmUgaW1wb3NzaWJsZSBmb3Igcm9vdHNcbitcdFx0ICogdG8gYmUgaW52YWxpZGF0ZWQgYWZ0ZXIgdGhlIGluaXRpYWwgTU1VIHJlbG9hZC4gIFdBUk4sIGJ1dFxuK1x0XHQgKiBjb250aW51ZSBhbmQgcmUtcmVsb2FkIHRoZSBNTVUgdG8gdHJ5IGFuZCBrZWVwIHRoZSBWTSBhbGl2ZS5cbitcdFx0ICovXG4rXHRcdFdBUk5fT05fT05DRShrdm1fdGVzdF9yZXF1ZXN0KEtWTV9SRVFfTU1VX0ZSRUVfT0JTT0xFVEVfUk9PVFMsIHZjcHUpKTtcbitcbitcdFx0LypcbitcdFx0ICogU25hcHNob3QgdGhlIGludmFsaWRhdGlvbiBzZXF1ZW5jZSBjb3VudGVyIGFmdGVyIGFjcXVpcmluZ1xuK1x0XHQgKiBtbXVfbG9jaywgYXMgZ3Vlc3RfbWVtZmQgZ3VhcmFudGVlcyB0aGUgdmFsaWRpdHkgb2YgdGhlIHBmbixcbitcdFx0ICogaS5lLiBhbnkgY29uY3VycmVudCBpbnZhbGlkYXRpb25zIGFyZSBndWFyYW50ZWVkIHRvIGJlXG4rXHRcdCAqIGlycmVsZXZhbnQuXG4rXHRcdCAqL1xuK1x0XHRmYXVsdC5tbXVfc2VxID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlbW11X2ludmFsaWRhdGVfc2VxO1xuK1x0XHRpZiAoaXNfcGFnZV9mYXVsdF9zdGFsZSh2Y3B1LCBcdTAwMjZmYXVsdCkpXG4rXHRcdFx0Y29udGludWU7XG4rXG4gXHRcdHIgPSBrdm1fdGRwX21tdV9tYXAodmNwdSwgXHUwMDI2ZmF1bHQpO1xuIFx0fSB3aGlsZSAociA9PSBSRVRfUEZfUkVUUlkpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MjE6MDMuODUzODkxNDc3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM0NTI5NTY1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLVk0veDg2IFBhdGNoIGFuZCBpdHMgSW1wbGljYXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHNlZW1zIHRvIGJlIHRvdWNoaW5nIHRoZSB4ODYgS1ZNIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIHNwZWNpZmljYWxseSBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AuIFRoZSBjaGFuZ2VzIGFyZSBmb2N1c2VkIG9uIHRoZXNlIGZ1bmN0aW9uczogYGt2bV90ZHBfcGFnZV9wcmVmYXVsdGAsIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLCBhbmQgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgbGlrZWx5IGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIG9yIGEgZml4IHJlbGF0ZWQgdG8gcGFnZSBmYXVsdCBoYW5kbGluZyBpbiB0aGUgVERQIChUYWdnZWQgRGF0YSBQb2ludGVyKSBNTVUgaW1wbGVtZW50YXRpb24uXG5cblRoZSBrZXkgY2hhbmdlIEknbSBzZWVpbmcgaXMgdGhlIHJlbG9jYXRpb24gb2YgYGt2bV9tbXVfcmVsb2FkKHZjcHUpYCBpbnNpZGUgdGhlIGBkby4uLndoaWxlYCBsb29wIGluIGBrdm1fdGRwX3BhZ2VfcHJlZmF1bHRgIGFuZCBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYC4gVGhpcyBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayB0aGV5J3JlIHRyeWluZyB0byByZWZpbmUgdGhlIHJldHJ5IGxvZ2ljIG9uIHBhZ2UgZmF1bHRzIHRvIGVuc3VyZSB0aGUgTU1VIHN0YXRlIGlzIHVwLXRvLWRhdGUgYWZ0ZXIgZWFjaCBhdHRlbXB0LiBJdCdzIGdvb2QgcHJhY3RpY2UgdG8gcmUtZXZhbHVhdGUgdGhlIE1NVSBzdGF0ZSwgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiBuZXN0ZWQgcGFnaW5nLlxuXG5BbHNvLCBtb3ZpbmcgYG1tdV90b3B1cF9tZW1vcnlfY2FjaGVzKHZjcHUsIGZhbHNlKWAgaW50byB0aGUgbG9vcCB3aXRoaW4gYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAgc3VnZ2VzdHMgYW4gZWZmb3J0IHRvIGltcHJvdmUgdGhlIGNhY2hlIGhpdCByYXRlIGR1cmluZyB0aGUgZmF1bHQgaGFuZGxpbmcgcHJvY2Vzcywgd2hpY2ggaXMgYSBjb21tb24gcGVyZm9ybWFuY2UgYm90dGxlbmVjayBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoaXMgaXMgYSB2ZXJ5IHRhcmdldGVkIGFwcHJvYWNoIHRvIGRlYWxpbmcgd2l0aCB0aGUgQ1BVIGNhY2hlLlxuXG5UaGUgYWRkaXRpb24gb2YgdGhlIGBXQVJOX09OX09OQ0VgIGFuZCBgaXNfcGFnZV9mYXVsdF9zdGFsZWAgY2hlY2sgaW4gYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAgaXMgYSBzaWduYWwgb2YgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgZXJyb3IgY29uZGl0aW9uIHRoZSBkZXZlbG9wZXJzIGFyZSB0cnlpbmcgdG8gZGV0ZWN0IGFuZCBhZGRyZXNzLiBJdCdzIGEgdXNlZnVsIGRlYnVnZ2luZyB0b29sIHRvIHByZXZlbnQgdGhlIHN5c3RlbSBmcm9tIGdldHRpbmcgaW50byBhIGJhZCBzdGF0ZS5cblxuQmVmb3JlIEkgZGVsdmUgZGVlcGVyIGludG8gdGhlIGNvZGUgaXRzZWxmLCBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhlIEtWTSBjb25maWd1cmF0aW9ucywgYXMgYENPTkZJR19LVk1gIGlzIGZ1bmRhbWVudGFsIHRvIGFueSBLVk0gb3BlcmF0aW9uIG9uIHg4Ni4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGUgcGF0Y2guXG5cbkkgd2lsbCBwZXJmb3JtIGEgZ3JlcCBzZWFyY2ggZm9yIHRoZSBmdW5jdGlvbiBuYW1lcyB3aXRoaW4gdGhlIEtWTSBzb3VyY2UgdG8gZ3Jhc3AgdGhlaXIgaW50ZXJkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NzksIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMToyMToxMC4xOTkxOTExMjNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ3NDE5NjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3RkcF9wYWdlX3ByZWZhdWx0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9tbXUvbW11LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL21tdS9tbXUuYz00OTU1PXN0YXRpYyBpbnQga3ZtX21tdV9kb19wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTAxOS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUwMjA6c3RhdGljIGludCBrdm1fdGRwX3BhZ2VfcHJlZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MDIxLVxcdFxcdFxcdFxcdCB1NjQgZXJyb3JfY29kZSwgdTggKmxldmVsKVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz01MDY4PWxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTA5My1cXHQgKi9cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUwOTQ6XFx0ciA9IGt2bV90ZHBfcGFnZV9wcmVmYXVsdCh2Y3B1LCByYW5nZS1cXHUwMDNlZ3BhIHwgZGlyZWN0X2JpdHMsIGVycm9yX2NvZGUsIFxcdTAwMjZsZXZlbCk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MDk1LVxcdGlmIChyIFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MjE6MTAuMjYzOTM3NjQ2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM0NzI3MjE4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaWdnaW5nIGludG8gS1ZNJ3MgVHJhbnNsYXRpb24gUHJvY2VzcyoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBLVk0gaGFuZGxlcyBpdHMgbWVtb3J5IG1hcHBpbmcsIGFuZCBzcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgdHJhbnNsYXRpb24gcHJvY2Vzcy4gVGhhdCBcInByaXZhdGUgcGFnZSBmcmFtZSBudW1iZXIsXCIgb3IgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAsIHRoYXQncyB0aGUga2V5IGhlcmUuIEl0J3MgYSB2ZXJ5IHNwZWNpZmljIGZ1bmN0aW9uIG5hbWUsIHdoaWNoIHRlbGxzIG1lIEknbSBsaWtlbHkgZGVhbGluZyB3aXRoIHRoZSBcIlRyYW5zbGF0aW9uIExvb2thc2lkZSBCdWZmZXIgKFRMQikgYW5kIHBhZ2UgdGFibGUgd2Fsa1wiIHByb2Nlc3MuIFRoZSBmYWN0IHRoYXQgaXQncyBcInByaXZhdGVcIiBpcyBpbnRyaWd1aW5nOyB3aGF0IGlzIHRoYXQgcHJpdmF0ZSB0bz8gSXMgaXQgcHJpdmF0ZSB0byB0aGUgVk0sIHByaXZhdGUgdG8gYSBzcGVjaWZpYyB2Q1BVLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGBwZm5gIHBhcnQgaXMgY2xlYXJseSByZWxhdGVkIHRvIHBhZ2UgZnJhbWUgbnVtYmVycywgc3VnZ2VzdGluZyBJJ20gb24gdGhlIHJpZ2h0IHRyYWNrIGV4cGxvcmluZyB0aGUgcGh5c2ljYWwgbWVtb3J5IGFkZHJlc3Mgc3BhY2UgYW5kIGhvdyBpdCdzIHRyYW5zbGF0ZWQgZm9yIHRoZSB2aXJ0dWFsIG1hY2hpbmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoaXMgbWFwcGluZyB3b3JrcyBhbmQgaG93IGl0IGludGVncmF0ZXMgd2l0aCB0aGUgdW5kZXJseWluZyBoeXBlcnZpc29yJ3MgbWVtb3J5IG1hbmFnZW1lbnQuIEkgc3VzcGVjdCBpdCdzIGNyaXRpY2FsIHRvIHBlcmZvcm1hbmNlIGFuZCBzZWN1cml0eSwgYW5kIGEgZGVlcCB1bmRlcnN0YW5kaW5nIHdpbGwgcHJvYmFibHkgeWllbGQgdmFsdWFibGUgaW5zaWdodHMuIExldCdzIGRlbHZlIGluIGFuZCBmaW5kIHNvbWUgYW5zd2Vycy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE2MiwiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjIxOjEzLjYxMTIxMjc4MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjM5Nzc5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL21tdS9tbXUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jPTUxMzg9c3RhdGljIHZvaWQga3ZtX2Fzc2VydF9nbWVtX2ludmFsaWRhdGVfbG9ja19oZWxkKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUxNDktXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MTUwOmludCBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4pXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MTUxLXtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTIzMC19XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MjMxOkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4pO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTIzMi0jZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MjE6MTMuNjgzNjE5MjE0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA4NzA0MTY0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYCBGdW5jdGlvbioqXG5cblJpZ2h0LCBzbyBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYCBpcyBleHBvc2VkIGFzIGFuIGludGVybmFsIGZ1bmN0aW9uIHdpdGhpbiBLVk0uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgdXNhZ2UuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkgbmVlZCB0byB0cmFjZSBpdHMgY2FsbCBzaXRlcyB0byBkZXRlcm1pbmUgcHJlY2lzZWx5IHdoZXJlIGl0J3MgYmVpbmcgbGV2ZXJhZ2VkIHdpdGhpbiB0aGUgS1ZNIGFyY2hpdGVjdHVyZS4gUGlucG9pbnRpbmcgdGhlIGNhbGxlcnMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgcm9sZSBpbiB0aGUgVERQIE1NVSdzIG9wZXJhdGlvbiBhbmQgaG93IGl0IGNvbnRyaWJ1dGVzIHRvIHRoZSBvdmVyYWxsIHZpcnR1YWxpemF0aW9uIHByb2Nlc3MuIFRoaXMgZnVuY3Rpb24ncyBpbXBhY3Qgb24gbWVtb3J5IG1hcHBpbmcgYW5kIHByb3RlY3Rpb24gaXMgb2YgcGFydGljdWxhciBpbnRlcmVzdCwgYW5kIHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgaXRzIGludm9jYXRpb25zIHdpbGwgc2hlZCBsaWdodCBvbiB0aG9zZSBpbnRyaWNhY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc2MSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjIxOjE2Ljc3MDY2MzE3NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDk2MjA5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vbW11Lmg9MzMxPXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fc2hhZG93X3Jvb3RfYWxsb2NhdGVkKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUuaC0zNDEtXFxuYXJjaC94ODYva3ZtL21tdS5oOjM0MjppbnQga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuKTtcXG5hcmNoL3g4Ni9rdm0vbW11LmgtMzQzLVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz01MTM4PXN0YXRpYyB2b2lkIGt2bV9hc3NlcnRfZ21lbV9pbnZhbGlkYXRlX2xvY2tfaGVsZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MTQ5LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTE1MDppbnQga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuKVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTE1MS17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUyMzAtfVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTIzMTpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUyMzItI2VuZGlmXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTMxODA9c3RhdGljIGludCB0ZHhfZ21lbV9wb3N0X3BvcHVsYXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zMTkyLVxcdGt2bV90ZHgtXFx1MDAzZXBhZ2VfYWRkX3NyYyA9IHNyY19wYWdlO1xcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MzE5MzpcXHRyZXQgPSBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm4oYXJnLVxcdTAwM2V2Y3B1LCBnZm4sIHBmbik7XFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0zMTk0LVxcdGt2bV90ZHgtXFx1MDAzZXBhZ2VfYWRkX3NyYyA9IE5VTEw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjIxOjE2Ljg2NTYzMDM5NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjQ3Mjg1NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVsdmluZyBpbnRvIFREWCBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHRkeF9nbWVtX3Bvc3RfcG9wdWxhdGVgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgd2hlcmUgaXQncyBjYWxsZWQgd2l0aGluIHRoZSBgYXJjaC94ODYva3ZtL3ZteC90ZHguY2AgZmlsZS4gUmlnaHQgYXdheSwgdGhpcyBzY3JlYW1zIFREWCBhbmQgZ3Vlc3QgbWVtb3J5IGZpbGUgZGVzY3JpcHRvcnMuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC4gVGhlIGNvbnRleHQgaXMgb2J2aW91c2x5IGNlbnRlcmVkIGFyb3VuZCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucy4gSSBrbm93IHRoYXQgVERYIGludHJvZHVjZXMgc29tZSBwcmV0dHkgc3BlY2lmaWMgaGFyZHdhcmUgZGVwZW5kZW5jaWVzLCBhbmQgSSdtIGN1cmlvdXMgaWYgdGhpcyBmdW5jdGlvbiBpcyBvdmVybHkgc3BlY2lhbGl6ZWQsIG9yIGlmIGl0cyBwcmluY2lwbGVzIGNhbiBiZSBhcHBsaWVkIG1vcmUgZ2VuZXJhbGx5LlxuXG5NeSBpbml0aWFsIHRob3VnaHRzIGFyZSB0aGF0IGBrdm1fdGRwX3BhZ2VfcHJlZmF1bHRgIGFuZCBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBhcmUgcHJvYmFibHkgYnJvYWRlciBpbiBzY29wZSwgbWVhbmluZyB0aGV5IGFyZW4ndCB0aWVkIGV4Y2x1c2l2ZWx5IHRvIFREWCBsaWtlIHRoaXMgb25lIGlzLiBUbyBjb25maXJtIHRoaXMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlc2UgbW9yZSBnZW5lcmFsIGZ1bmN0aW9ucyBhcmUgZG9pbmcgYW5kIGlmIHRoZXkgaGF2ZSBpbXBsaWNhdGlvbnMgaGVyZS4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIHVuZGVybHlpbmcgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjE0LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjIxOjIwLjU5MDM2MzU2MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgzOTUxMjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL21tdS9tbXUuYz01MDIwPXN0YXRpYyBpbnQga3ZtX3RkcF9wYWdlX3ByZWZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MDY3LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTA2ODpsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MDY5LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0xNjk4PXN0YXRpYyBpbnQgdGR4X3NlcHRfbWFwX2xlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgZW51bSBwZ19sZXZlbCBsZXZlbCxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMTcxMC1cXHQvKlxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MTcxMTpcXHQgKiBFbnN1cmUgcHJlX2ZhdWx0X2FsbG93ZWQgaXMgcmVhZCBieSBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoKVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMTcxMi1cXHQgKiBiZWZvcmUga3ZtX3RkeC1cXHUwMDNlc3RhdGUuICBVc2Vyc3BhY2UgbXVzdCBub3QgYmUgYWxsb3dlZCB0byBwcmUtZmF1bHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MjE6MjAuNjY4NzY2MjA0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0ODE3NjExNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgS1ZNIE1lbW9yeSBGYXVsdCBQcmUtSGFuZGxpbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyB6b29tIGluIG9uIHRoaXMgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJBaCwgdGhpcyBpcyB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGhvb2sgZm9yIGhhbmRsaW5nIHByZS1mYXVsdGluZyBtZW1vcnkgYWNjZXNzZXMsIHJpZ2h0P1wiIEl0J3Mgbm90IGEgc3RhbmRhbG9uZSB0aGluZzsgaXQncyAqdGhlKiBhcmNoaXRlY3R1cmUncyBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiBhIG11Y2ggYnJvYWRlciBLVk0gaW9jdGwgZGVzaWduZWQgdG8gaGFuZGxlIGEgcGFnZSBmYXVsdCBiZWZvcmUgaXQgdGFrZXMgcGxhY2UgaW4gdGhlIGd1ZXN0LiBLbm93aW5nIHRoYXQsIG15IG5leHQgc3RlcCBpcyBjbGVhci4gSSBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsIHNpdGVzIHdpdGhpbiB0aGUgZ2VuZXJpYyBLVk0gZnJhbWV3b3JrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIHBhcnRpY3VsYXIgcHJlLWZhdWx0IG1lY2hhbmlzbSBpcyBiZWluZyB0cmlnZ2VyZWQgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxhcmdlciBLVk0gZmxvdy4gSeKAmW0gdGhpbmtpbmcsIG1heWJlIEknbGwgc2VlIHdoZXJlIHRoZSBnZW5lcmljIGNvZGUgc2V0cyB1cCB0aGUgc3RhZ2UsIHBlcmhhcHMgc2V0dGluZyB1cCBhIHN0cnVjdCwgYW5kIHRoZW4gdGhpcyBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgaG9vayBkb2VzIHNvbWV0aGluZyB1bmlxdWUgYmFzZWQgb24gdGhlIGFyY2hpdGVjdHVyZS4gSXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBicm9hZGVyIGNvZGUgYmFzZSBhbmQgc2VlIHRoZSBob3cgYW5kIHdoeS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM1NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjIxOjI0LjE1MDUzMDk2NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzMDUxODQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ2aXJ0L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidmlydC9rdm0va3ZtX21haW4uYz00MzUzPXN0YXRpYyBpbnQga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQzNzctXFxudmlydC9rdm0va3ZtX21haW4uYzo0Mzc4OlxcdFxcdHIgPSBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkodmNwdSwgcmFuZ2UpO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDM3OS1cXHRcXHRpZiAoV0FSTl9PTl9PTkNFKHIgPT0gMCB8fCByID09IC1FSU8pKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMToyMToyNC4yNjM1OTIyNDNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgyNTU4MjIwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZXhwZXJ0OlxuXG4qKkFuYWx5emluZyB0aGUgS1ZNIFByZS1GYXVsdCBNZW1vcnkgUGF0aCoqXG5cblJpZ2h0LCBzbyBga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgaXMgaW5kZWVkIHRyaWdnZXJlZCBieSB0aGUgYEtWTV9QUkVfRkFVTFRfTUVNT1JZYCBpb2N0bC4gTXkgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiB0aGF0IGBLVk1fUFJFX0ZBVUxUX01FTU9SWWAgaW9jdGwgbm93LiBUaGF0J3MgdGhlIGVudHJ5IHBvaW50LCB0aGUgY3JpdGljYWwgcG9pbnQgb2YgaW50ZXJlc3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgKnRoZXJlKiBpbiBvcmRlciB0byBncmFzcCB0aGUgb3ZlcmFsbCBtZW1vcnkgcHJlLWZhdWx0aW5nIG1lY2hhbmlzbSB3aXRoaW4gS1ZNLiBXaGF0IGFyZSB0aGUgYXJndW1lbnRzIHBhc3NlZD8gV2hhdCdzIHRoZSBjb250ZXh0PyBXaGF0IGV4YWN0bHkgdHJpZ2dlcnMgdGhlIGNhbGwgdG8gYGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgPyBMZXQncyBkaWcgaW4gYW5kIHNlZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgyMiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjIxOjI3LjA4OTE3Nzk5MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk1MzY5MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiS1ZNX1BSRV9GQVVMVF9NRU1PUllcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwidmlydC9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmM9NDQyNT1zdGF0aWMgbG9uZyBrdm1fdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDY1MS0jaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjQ2NTI6XFx0Y2FzZSBLVk1fUFJFX0ZBVUxUX01FTU9SWToge1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDY1My1cXHRcXHRzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgcmFuZ2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjIxOjI3LjE2ODcyNzAwM1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzIwMzY4MDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wbGljYXRpb25zIG9mIHRoZSBLVk1fUFJFX0ZBVUxUX01FTU9SWSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBLVk1fUFJFX0ZBVUxUX01FTU9SWWAgaXMgYSByZWFjaGFibGUgaW9jdGwuIFRoYXQncyBvdXIgZW50cnkgcG9pbnQsIGFuZCB0aGUgcGF0Y2ggaGl0cyBhIGZldyBrZXkgZnVuY3Rpb25zOiBga3ZtX3RkcF9wYWdlX3ByZWZhdWx0YCBhbmQgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAuIFRob3NlIGFyZSBib3RoIGNhbGxlZCBkaXJlY3RseSB2aWEgYEtWTV9QUkVfRkFVTFRfTUVNT1JZYCwgd2hpY2ggbWFrZXMgdGhpcyBpbnRlcmVzdGluZyBmcm9tIGEgZ2VuZXJhbCB4ODYgS1ZNIHBlcnNwZWN0aXZlLlxuXG5UaGVuIHRoZXJlJ3MgdGhlIG1vZGlmaWNhdGlvbiB0byBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYHRkeF9nbWVtX3Bvc3RfcG9wdWxhdGVgLiBPa2F5LCB0aGF0J3MgVERYIHNwZWNpZmljLCBzbyB0aGF0IGJyYW5jaCBpcyBpbnRlcmVzdGluZyBidXQgc2VwYXJhdGUgZnJvbSB0aGUgY29yZSB4ODYgaW1wbGljYXRpb25zLiBCdXQgd2FpdCBhIHNlY29uZCwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4uLiBga3ZtX3RkcF9wYWdlX3ByZWZhdWx0YCBpcyBjYWxsZWQgZnJvbSBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YC4gU2luY2UgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgaXMgcmVhY2hhYmxlIHZpYSBgS1ZNX1BSRV9GQVVMVF9NRU1PUllgLCBpdCBpbXBsaWVzIHRoYXQgdGhpcyBwYXRjaCBsaWtlbHkgaGFzIGxhcmdlciByYW1pZmljYXRpb25zIGZvciBnZW5lcmFsIHg4NiBLVk0gZnVuY3Rpb25hbGl0eS4gU28sIGJlZm9yZSBJIGRpZyBmdXJ0aGVyLCBJIHNob3VsZCBqdXN0IG1ha2Ugc3VyZSB0aGF0IGBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZYCBpcyBhY3R1YWxseSBlbmFibGVkIGZvciB4ODYuIFRoYXQncyBhIHNhbml0eSBjaGVjayBJIG5lZWQgdG8gZG8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyMTUsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MjE6MzEuODg5MDk4NTM3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Mzg3MDc2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTIwPWNvbmZpZyBLVk1fWDg2XFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy00Ny1cXHRzZWxlY3QgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkdcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo0ODpcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTQ5LVxcdHNlbGVjdCBLVk1fV0VSUk9SIGlmIFdFUlJPUlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMToyMTozMS45NjI5NzcyNDlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE3MDc4Mjc0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvZGUncyBSZWFjaGFiaWxpdHkgYW5kIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyB0aGUgY29kZSBwYXRoIGlzIGNvbmZpcm1lZDsgaXQncyBzZWxlY3RlZCBieSBgS1ZNX1g4NmAsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgYWNjZXNzaWJsZS4gVGhlIGNoYW5nZSBpdHNlbGYgaXMgaW50ZXJlc3Rpbmc6IGBrdm1fbW11X3JlbG9hZCh2Y3B1KWAgaXMgYmVpbmcgbW92ZWQgaW50byB0aGUgcmV0cnkgbG9vcCB3aXRoaW4gYm90aCBga3ZtX3RkcF9wYWdlX3ByZWZhdWx0YCBhbmQgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAuIFRoYXQncyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uLCBhbmQgc3VnZ2VzdHMgaGFuZGxpbmcgTU1VIGludmFsaWRhdGlvbnMgZHVyaW5nIHByZS1mYXVsdGluZyBhbmQgcHJpdmF0ZSBQRk4gbWFwcGluZyBpcyBub3cgdGhlIGZvY3VzLlxuXG5HaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2UsIGZ1enppbmcgdGhpcyBhcmVhIGlzIGRlZmluaXRlbHkgd2FycmFudGVkLlxuXG5Ob3csIGxldCdzIHBpbnBvaW50IHNvbWUga2V5IHN5bWJvbHMgdG8gaW52ZXN0aWdhdGUuIE15IHByaW1hcnkgZm9jdXMgd2lsbCBiZSBvbiB0aGVzZSBmdW5jdGlvbnM6IGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLCBhbmQgYWxzbyBvbiBga3ZtX3RkcF9wYWdlX3ByZWZhdWx0YCwgd2hpY2ggaXMgc3RhdGljLCBzbyBJJ2xsIGNoZWNrIHdoZXRoZXIgaXQgaXMgaW5saW5lZCBvciBub3QuIExhc3RseSwgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAsIHdoaWNoIGlzIGV4cG9ydGVkLiBJIHN1c3BlY3QgdGhhdCB0aGlzIGxhdHRlciBmdW5jdGlvbiBpcyBURFggc3BlY2lmaWMsIHdoaWNoIG1pZ2h0IGxpbWl0IG15IGluaXRpYWwgZnV6emluZyBhdHRlbXB0cywgdW5sZXNzIEkgaGF2ZSBhY2Nlc3MgdG8gVERYIGhhcmR3YXJlLlxuXG5JJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGluIGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIHZ1bG5lcmFiaWxpdGllcywgb3IgaW50ZXJlc3RpbmcgaW50ZXJhY3Rpb25zIHRvIGNvbnNpZGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODkzLCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjIxOjM3LjEzMzc2NDE0NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2NjYzMzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vbW11L21tdS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9tbXUvbW11LmM9NTAyMD1zdGF0aWMgaW50IGt2bV90ZHBfcGFnZV9wcmVmYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTA2Ny1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUwNjg6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTA2OS1cXHRcXHRcXHRcXHQgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MjE6MzcuMjUwNDMyMjYzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2OTg5NjMxMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTSBNZW1vcnkgUHJlLUZhdWx0aW5nKipcblxuT2theSwgc28gSSdtIGhvbmluZyBpbiBvbiB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBwcmUtZmF1bHRpbmcgbWVtb3J5IHdpdGhpbiBLVk0uIFNwZWNpZmljYWxseSwgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgc2VlbXMgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQsIGl04oCZcyBhIHN0cm9uZyBmb2N1cyBzeW1ib2wuIEFuZCB0aGVuIHRoZXJlJ3MgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAsIHdoaWNoIGFsc28gbG9va3MgcHJvbWlzaW5nLCBldmVuIGlmIGl0IG1pZ2h0IGludm9sdmUgc29tZSBURFggY29uc2lkZXJhdGlvbnMuXG5cbk5vdywgbGV0J3MganVzdCBjb25maXJtIHNvbWV0aGluZyBxdWlja2x5Li4uIEkgbmVlZCB0byBjaGVjayBpZiBga3ZtX3RkcF9wYWdlX3ByZWZhdWx0YCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gWWVwLCBpdCBpcy4gU28gdGhhdCBqdXN0IHJlaW5mb3JjZXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IC0gYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgYW5kIGBrdm1fdGRwX21tdV9tYXBfcHJpdmF0ZV9wZm5gIGFyZSByZWFsbHkgdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzIHRvIGRpZyBpbnRvLlxuXG5BcyBmb3IgY29uZmlndXJhdGlvbnMsIGl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYEtWTWAgaXMgdGhlIG1haW4gb25lIHRvIGNvbnNpZGVyLiBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMuIGBLVk1gIGlzIGluZGVlZCBzdWZmaWNpZW50IGZvciBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YC4gQW5kIGZvciBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYCwgbG9va3MgbGlrZSBpdCdzIHVuY29uZGl0aW9uYWxseSBjb21waWxlZCB3aXRoaW4gYG1tdS5jYCBhcyBsb25nIGFzIGBDT05GSUdfS1ZNYCBpcyBlbmFibGVkLiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzLCBzbyBJIGNhbiBmb2N1cyBvbiB0aG9zZSB0d28gc3ltYm9scyBhcyB0aGUgY29yZSBvZiB0aGlzIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2NzUsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MjE6NDEuOTQ5Mzk3MzM5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTAyNjMzNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9tbXUvbW11LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL21tdS9tbXUuYz01MTM4PXN0YXRpYyB2b2lkIGt2bV9hc3NlcnRfZ21lbV9pbnZhbGlkYXRlX2xvY2tfaGVsZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MTQ5LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTE1MDppbnQga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuKVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTE1MS17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUyMzAtfVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTIzMTpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUyMzItI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjIxOjQyLjA1OTY2NjEzOFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTg2NDQ5MzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBleHBlcnQgdG8gZXhwZXJ0OlxuXG4qKk5hdmlnYXRpbmcgYSBDb25kaXRpb25hbCBDb21waWxhdGlvbiBCbG9jayoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEknbSBzZWVpbmcgYW4gYCNlbmRpZmAgZGlyZWN0aXZlIGRvd24gaGVyZSBvbiBsaW5lIDUyMzIuIFRoYXQncyBhIGNsZWFyIHNpZ25hbCB3ZSdyZSBkZWFsaW5nIHdpdGggYSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBibG9jay4gTXkgaW1tZWRpYXRlIHJlZmxleCBpcyB0byBmaWd1cmUgb3V0IHdoaWNoIGAjaWZkZWZgLCBgI2lmbmRlZmAsIGAjaWZgLCBvciBgI2VsaWZgIGl0J3MgcGFpcmVkIHdpdGguIFRoYXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgd2hpY2ggc2VjdGlvbnMgb2YgY29kZSBhcmUgYmVpbmcgaW5jbHVkZWQgb3IgZXhjbHVkZWQgYmFzZWQgb24gYnVpbGQgY29uZmlndXJhdGlvbnMsIGNvbXBpbGVyIGZsYWdzLCBvciBkZWZpbmVkIG1hY3Jvcy4gVGhpcyBpcyBmdW5kYW1lbnRhbCBmb3IgZGVidWdnaW5nLCB1bmRlcnN0YW5kaW5nIHBvcnRhYmlsaXR5LCBhbmQgb3B0aW1pemluZyBjb2RlIGZvciBzcGVjaWZpYyBlbnZpcm9ubWVudHMuIEkgbmVlZCB0byB0cmFjZSBiYWNrd2FyZCB0byBmaW5kIGl0cyBjb3JyZXNwb25kaW5nIHByZXByb2Nlc3NvciBkaXJlY3RpdmUuIEtub3dpbmcgdGhlIGNvbmRpdGlvbmFsIGlzICpjcml0aWNhbCogdG8gdW5kZXJzdGFuZGluZyB3aGF0J3MgZ29pbmcgb24gaW4gdGhpcyBwYXJ0IG9mIHRoZSBjb2RlYmFzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUxOSwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjIxOjQ1LjI0NjExODc4OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTMxMjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9tbXUvbW11LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTEzMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUxMzA6XFx0XFx0ICogaWdub3JlIHN0YXRzIGZvciBhbGwgb3RoZXIgcmV0dXJuIHRpbWVzLiAgUGFnZS1yZWFkeSBcXFwiZmF1bHRzXFxcIiBhcmVuJ3RcXG41MTMxOlxcdFxcdCAqIHRydWx5IHNwdXJpb3VzIGFuZCBuZXZlciB0cmlnZ2VyIGVtdWxhdGlvblxcbjUxMzI6XFx0XFx0ICovXFxuNTEzMzpcXHRcXHRpZiAociA9PSBSRVRfUEZfRklYRUQpXFxuNTEzNDpcXHRcXHRcXHR2Y3B1LVxcdTAwM2VzdGF0LnBmX2ZpeGVkKys7XFxuNTEzNTpcXHR9XFxuNTEzNjpcXHRcXG41MTM3OlxcdCNpZmRlZiBDT05GSUdfS1ZNX0dVRVNUX01FTUZEXFxuNTEzODpcXHRzdGF0aWMgdm9pZCBrdm1fYXNzZXJ0X2dtZW1faW52YWxpZGF0ZV9sb2NrX2hlbGQoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcXG41MTM5OlxcdHtcXG41MTQwOlxcdCNpZmRlZiBDT05GSUdfUFJPVkVfTE9DS0lOR1xcbjUxNDE6XFx0XFx0aWYgKFdBUk5fT05fT05DRSgha3ZtX3Nsb3RfaGFzX2dtZW0oc2xvdCkpIHx8XFxuNTE0MjpcXHRcXHQgICAgV0FSTl9PTl9PTkNFKCFzbG90LVxcdTAwM2VnbWVtLmZpbGUpIHx8XFxuNTE0MzpcXHRcXHQgICAgV0FSTl9PTl9PTkNFKCFmaWxlX2NvdW50KHNsb3QtXFx1MDAzZWdtZW0uZmlsZSkpKVxcbjUxNDQ6XFx0XFx0XFx0cmV0dXJuO1xcbjUxNDU6XFx0XFxuNTE0NjpcXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZmaWxlX2lub2RlKHNsb3QtXFx1MDAzZWdtZW0uZmlsZSktXFx1MDAzZWlfbWFwcGluZy1cXHUwMDNlaW52YWxpZGF0ZV9sb2NrKTtcXG41MTQ3OlxcdCNlbmRpZlxcbjUxNDg6XFx0fVxcbjUxNDk6XFx0XFxuNTE1MDpcXHRpbnQga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuKVxcbjUxNTE6XFx0e1xcbjUxNTI6XFx0XFx0c3RydWN0IGt2bV9wYWdlX2ZhdWx0IGZhdWx0ID0ge1xcbjUxNTM6XFx0XFx0XFx0LmFkZHIgPSBnZm5fdG9fZ3BhKGdmbiksXFxuNTE1NDpcXHRcXHRcXHQuZXJyb3JfY29kZSA9IFBGRVJSX0dVRVNUX0ZJTkFMX01BU0sgfCBQRkVSUl9QUklWQVRFX0FDQ0VTUyxcXG41MTU1OlxcdFxcdFxcdC5wcmVmZXRjaCA9IHRydWUsXFxuNTE1NjpcXHRcXHRcXHQuaXNfdGRwID0gdHJ1ZSxcXG41MTU3OlxcdFxcdFxcdC5ueF9odWdlX3BhZ2Vfd29ya2Fyb3VuZF9lbmFibGVkID0gaXNfbnhfaHVnZV9wYWdlX2VuYWJsZWQodmNwdS1cXHUwMDNla3ZtKSxcXG41MTU4OlxcdFxcbjUxNTk6XFx0XFx0XFx0Lm1heF9sZXZlbCA9IFBHX0xFVkVMXzRLLFxcbjUxNjA6XFx0XFx0XFx0LnJlcV9sZXZlbCA9IFBHX0xFVkVMXzRLLFxcbjUxNjE6XFx0XFx0XFx0LmdvYWxfbGV2ZWwgPSBQR19MRVZFTF80SyxcXG41MTYyOlxcdFxcdFxcdC5pc19wcml2YXRlID0gdHJ1ZSxcXG41MTYzOlxcdFxcbjUxNjQ6XFx0XFx0XFx0LmdmbiA9IGdmbixcXG41MTY1OlxcdFxcdFxcdC5zbG90ID0ga3ZtX3ZjcHVfZ2ZuX3RvX21lbXNsb3QodmNwdSwgZ2ZuKSxcXG41MTY2OlxcdFxcdFxcdC5wZm4gPSBwZm4sXFxuNTE2NzpcXHRcXHRcXHQubWFwX3dyaXRhYmxlID0gdHJ1ZSxcXG41MTY4OlxcdFxcdH07XFxuNTE2OTpcXHRcXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVxcdTAwM2Vrdm07XFxuNTE3MDpcXHRcXHRpbnQgcjtcXG41MTcxOlxcdFxcbjUxNzI6XFx0XFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG41MTczOlxcdFxcbjUxNzQ6XFx0XFx0LypcXG41MTc1OlxcdFxcdCAqIE1hcHBpbmcgYSBwcmUtZGV0ZXJtaW5lZCBwcml2YXRlIHBmbiBpcyBpbnRlbmRlZCBvbmx5IGZvciB1c2Ugd2hlblxcbjUxNzY6XFx0XFx0ICogcG9wdWxhdGluZyBhIGd1ZXN0X21lbWZkIGluc3RhbmNlLiAgQXNzZXJ0IHRoYXQgdGhlIHNsb3QgaXMgYmFja2VkXFxuNTE3NzpcXHRcXHQgKiBieSBndWVzdF9tZW1mZCBhbmQgdGhhdCB0aGUgZ21lbSBpbnN0YW5jZSdzIGludmFsaWRhdGVfbG9jayBpcyBoZWxkLlxcbjUxNzg6XFx0XFx0ICovXFxuNTE3OTpcXHRcXHRrdm1fYXNzZXJ0X2dtZW1faW52YWxpZGF0ZV9sb2NrX2hlbGQoZmF1bHQuc2xvdCk7XFxuNTE4MDpcXHRcXG41MTgxOlxcdFxcdGlmIChLVk1fQlVHX09OKCF0ZHBfbW11X2VuYWJsZWQsIGt2bSkpXFxuNTE4MjpcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG41MTgzOlxcdFxcbjUxODQ6XFx0XFx0aWYgKGt2bV9nZm5faXNfd3JpdGVfdHJhY2tlZChrdm0sIGZhdWx0LnNsb3QsIGZhdWx0LmdmbikpXFxuNTE4NTpcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbjUxODY6XFx0XFxuNTE4NzpcXHRcXHRkbyB7XFxuNTE4ODpcXHRcXHRcXHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXFxuNTE4OTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlRSO1xcbjUxOTA6XFx0XFxuNTE5MTpcXHRcXHRcXHRpZiAoa3ZtX3Rlc3RfcmVxdWVzdChLVk1fUkVRX1ZNX0RFQUQsIHZjcHUpKVxcbjUxOTI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuNTE5MzpcXHRcXG41MTk0OlxcdFxcdFxcdHIgPSBrdm1fbW11X3JlbG9hZCh2Y3B1KTtcXG41MTk1OlxcdFxcdFxcdGlmIChyKVxcbjUxOTY6XFx0XFx0XFx0XFx0cmV0dXJuIHI7XFxuNTE5NzpcXHRcXG41MTk4OlxcdFxcdFxcdHIgPSBtbXVfdG9wdXBfbWVtb3J5X2NhY2hlcyh2Y3B1LCBmYWxzZSk7XFxuNTE5OTpcXHRcXHRcXHRpZiAocilcXG41MjAwOlxcdFxcdFxcdFxcdHJldHVybiByO1xcbjUyMDE6XFx0XFxuNTIwMjpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG41MjAzOlxcdFxcbjUyMDQ6XFx0XFx0XFx0Z3VhcmQocmVhZF9sb2NrKShcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuNTIwNTpcXHRcXG41MjA2OlxcdFxcdFxcdC8qXFxuNTIwNzpcXHRcXHRcXHQgKiBCZWNhdXNlIHNsb3RzX2xvY2sgaXMgaGVsZCwgaXQgc2hvdWxkIGJlIGltcG9zc2libGUgZm9yIHJvb3RzXFxuNTIwODpcXHRcXHRcXHQgKiB0byBiZSBpbnZhbGlkYXRlZCBhZnRlciB0aGUgaW5pdGlhbCBNTVUgcmVsb2FkLiAgV0FSTiwgYnV0XFxuNTIwOTpcXHRcXHRcXHQgKiBjb250aW51ZSBhbmQgcmUtcmVsb2FkIHRoZSBNTVUgdG8gdHJ5IGFuZCBrZWVwIHRoZSBWTSBhbGl2ZS5cXG41MjEwOlxcdFxcdFxcdCAqL1xcbjUyMTE6XFx0XFx0XFx0V0FSTl9PTl9PTkNFKGt2bV90ZXN0X3JlcXVlc3QoS1ZNX1JFUV9NTVVfRlJFRV9PQlNPTEVURV9ST09UUywgdmNwdSkpO1xcbjUyMTI6XFx0XFxuNTIxMzpcXHRcXHRcXHQvKlxcbjUyMTQ6XFx0XFx0XFx0ICogU25hcHNob3QgdGhlIGludmFsaWRhdGlvbiBzZXF1ZW5jZSBjb3VudGVyIGFmdGVyIGFjcXVpcmluZ1xcbjUyMTU6XFx0XFx0XFx0ICogbW11X2xvY2ssIGFzIGd1ZXN0X21lbWZkIGd1YXJhbnRlZXMgdGhlIHZhbGlkaXR5IG9mIHRoZSBwZm4sXFxuNTIxNjpcXHRcXHRcXHQgKiBpLmUuIGFueSBjb25jdXJyZW50IGludmFsaWRhdGlvbnMgYXJlIGd1YXJhbnRlZWQgdG8gYmVcXG41MjE3OlxcdFxcdFxcdCAqIGlycmVsZXZhbnQuXFxuNTIxODpcXHRcXHRcXHQgKi9cXG41MjE5OlxcdFxcdFxcdGZhdWx0Lm1tdV9zZXEgPSB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZW1tdV9pbnZhbGlkYXRlX3NlcTtcXG41MjIwOlxcdFxcdFxcdGlmIChpc19wYWdlX2ZhdWx0X3N0YWxlKHZjcHUsIFxcdTAwMjZmYXVsdCkpXFxuNTIyMTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG41MjIyOlxcdFxcbjUyMjM6XFx0XFx0XFx0ciA9IGt2bV90ZHBfbW11X21hcCh2Y3B1LCBcXHUwMDI2ZmF1bHQpO1xcbjUyMjQ6XFx0XFx0fSB3aGlsZSAociA9PSBSRVRfUEZfUkVUUlkpO1xcbjUyMjU6XFx0XFxuNTIyNjpcXHRcXHRpZiAociAhPSBSRVRfUEZfRklYRUQpXFxuNTIyNzpcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG41MjI4OlxcdFxcbjUyMjk6XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjIxOjQ1LjI0NzI2MjczOVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDE4ODAzNDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKktWTSBHdWVzdCBNZW1vcnkgTWFwcGluZyDigJMgVGhlIGBtZW1mZGAgRGlsZW1tYSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYCBmdW5jdGlvbiwgYW5kIGl0J3MgbG9va2luZyBsaWtlIGBDT05GSUdfS1ZNX0dVRVNUX01FTUZEYCBpcyBhIHByZXJlcXVpc2l0ZS4gTWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBuZWVkIGZvciBtYW5hZ2VkIG1lbW9yeSBmaWxlIGRlc2NyaXB0b3JzLCBJIHN1cHBvc2UuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMgaG93IGl0J3MgYmVpbmcgaGFuZGxlZC4gSXMgYENPTkZJR19LVk1fR1VFU1RfTUVNRkRgIGRpcmVjdGx5IHNlbGVjdGVkIGJ5IHRoZSB4ODYgS1ZNIGNvbmZpZ3VyYXRpb24sIG9yIGlzIGl0IGNvbmZpZ3VyZWQgaW5kZXBlbmRlbnRseT8gSSBuZWVkIHRvIGNsYXJpZnkgdGhhdCBkZXBlbmRlbmN5LiBVbmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIGxvZ2ljIGhlcmUgaXMga2V5IHRvIGZ1bGx5IGdyYXNwIGhvdyB0aGlzIHNwZWNpZmljIG1lbW9yeSBtYXBwaW5nIGZ1bmN0aW9uIHdvcmtzIHdpdGhpbiB0aGUgYnJvYWRlciBLVk0gYXJjaGl0ZWN0dXJlLCBlc3BlY2lhbGx5IHdoZW4gY29uc2lkZXJpbmcgVERQIGFuZCBwcml2YXRlIHBhZ2UgZnJhbWVzLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY3Jvc3MtcmVmZXJlbmNlIHRoZSBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IGFwcHJvYWNoIHRvIGVuc3VyZSB0aGlzIGZsYWcgaXMgc2V0IGNvcnJlY3RseSBmb3IgbXkgdXNlIGNhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzYwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMToyMTo0OC42NjYwNjkxMTdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MjMwMDYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0dVRVNUX01FTUZEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInZpcnQva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ2aXJ0L2t2bS9LY29uZmlnPTEwMz1jb25maWcgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcXG4tLVxcbnZpcnQva3ZtL0tjb25maWctMTA1LVxcbnZpcnQva3ZtL0tjb25maWc6MTA2OmNvbmZpZyBLVk1fR1VFU1RfTUVNRkRcXG52aXJ0L2t2bS9LY29uZmlnLTEwNy0gICAgICAgc2VsZWN0IFhBUlJBWV9NVUxUSVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMToyMTo0OC44NTgzNzQ2NjdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODY3MDkxMjQ2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gd2hhdCBJJ20gYWJvdXQgdG8gZXhwbG9yZSByZWdhcmRpbmcgYEtWTV9HVUVTVF9NRU1GRGA6XG5cbioqSW52ZXN0aWdhdGluZyBgS1ZNX0dVRVNUX01FTUZEYCoqXG5cblJpZ2h0LCBsZXQncyBkaWcgaW4uIEknbSBnb2luZyB0byB0cmFjayBkb3duIHdoZXJlIHRoZSBgS1ZNX0dVRVNUX01FTUZEYCBzeW1ib2wgZ2V0cyBzZWxlY3RlZCBpbiB0aGUgS1ZNIGtlcm5lbCBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSB2aXJ0dWFsIG1hY2hpbmUgZW52aXJvbm1lbnQuIE15IGdvYWwgaXMgYSBmdWxsIHVuZGVyc3RhbmRpbmcgc28gSSBjYW4gc3BlYWsgYWJvdXQgaXQgZWxvcXVlbnRseSB0byBvdGhlciBleHBlcnRzLiBJJ2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBgZ3JlcGAgb3Igc2ltaWxhciBzZWFyY2ggdG8gc2VlIHdoZXJlIGl0J3MgZGVmaW5lZCBhbmQgdXNlZC4gVGhlbiBJJ2xsIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzIHRvIHNlZSB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBpdCdzIGVuYWJsZWQuIEhvcGVmdWxseSBpdCdzIG5vdCB0b28gb2JzY3VyZSBhbmQgdGhlIHJlYXNvbnMgZm9yIGl0cyBzZWxlY3Rpb24gYXJlIGZhaXJseSBjbGVhci4gVW5kZXJzdGFuZGluZyB0aGUgcmF0aW9uYWxlIGJlaGluZCBpdHMgaW5jbHVzaW9uIGlzIGltcG9ydGFudDsgaXMgaXQgcmVsYXRlZCB0byBwZXJmb3JtYW5jZSwgc2VjdXJpdHksIGEgc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFVsdGltYXRlbHksIHRoZSBhaW0gaXMgdG8gcGllY2UgdG9nZXRoZXIgaXRzIHJvbGUgaW4gdGhlIGtlcm5lbCBhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgZ3Vlc3QgbWVtb3J5IG1hbmFnZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzY0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MjE6NTcuNTI5MjkxNTczWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTcxNTg3MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IEtWTV9HVUVTVF9NRU1GRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTIwPWNvbmZpZyBLVk1fWDg2XFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy00OS1cXHRzZWxlY3QgS1ZNX1dFUlJPUiBpZiBXRVJST1JcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1MDpcXHRzZWxlY3QgS1ZNX0dVRVNUX01FTUZEIGlmIFg4Nl82NFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMToyMTo1Ny42NDY0NTgxMjFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkyMzc1NTg5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBLVk0gQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGlzIHBhdGNoIGlzIHJlbGV2YW50IGJlY2F1c2UgYEtWTV9HVUVTVF9NRU1GRGAgaXMgc2VsZWN0ZWQgd2l0aGluIGBLVk1fWDg2YCB3aGVuIGBYODZfNjRgIGlzIGNvbmZpZ3VyZWQuIFRoZXJlZm9yZSwgYEtWTWAgaXRzZWxmIGlzIHN1ZmZpY2llbnQgZm9yIHRoZSBjb25maWd1cmF0aW9uLiBMZXQncyBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGNoYW5nZWQuXG5cblRoZSBwYXRjaCBzZWVtcyB0byBiZSB0b3VjaGluZyB0aGUgcHJlLWZhdWx0aW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgYGt2bV90ZHBfcGFnZV9wcmVmYXVsdGAsIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLCBhbmQgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAuIEl0J3MgYWRkcmVzc2luZyBhbiBNTVUgcm9vdCBpbnZhbGlkYXRpb24gcHJvYmxlbSB3aXRoaW4gYSByZXRyeSBsb29wLCB3aGljaCBjb3VsZCBiZSBkaXNhc3Ryb3VzIGlmIGBrdm1fbW11X3JlbG9hZGAgd2Fzbid0IHN1YnNlcXVlbnRseSB0cmlnZ2VyZWQuIFRoaXMgc2VlbXMgZnVuY3Rpb25hbGx5IHNvdW5kIGFuZCByZWFjaGFibGUsIGdvb2QuXG5cbk15IGltbWVkaWF0ZSBmb2N1cyBzeW1ib2xzIGFyZSBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBhbmQgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aG9zZSBiZXR0ZXIgaW4gdGhlIGNvbnRleHQgb2YgdGhpcyBpc3N1ZS5cblxuSW4gdGVybXMgb2YgY29uZmlndXJhdGlvbiwgYEtWTWAgaXMgYWxsIHRoYXQncyByZXF1aXJlZC5cblxuV2FpdCwgaG9sZCBvbiBhIG1pbnV0ZeKApiBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYCBpcyBjYWxsZWQgYnkgYHRkeF9nbWVtX3Bvc3RfcG9wdWxhdGVgLCBhbmQgdGhhdCdzICppbiogYGFyY2gveDg2L2t2bS92bXgvdGR4LmNgLiBOb3cgSSBuZWVkIHRvIHNlZSBpZiBgdGR4LmNgIGlzIGNvbXBpbGVkIGJ5IGRlZmF1bHQuIEkgbmVlZCB0byBjaGVjayB0aGUgYGFyY2gveDg2L2t2bS92bXgvTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGNvbXBpbGF0aW9uIHJ1bGVzLiBUaGlzIGNvdWxkIGFmZmVjdCB0aGUgb3ZlcmFsbCBzY29wZSBvZiB0aGUgZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjE2NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMToyMjowMi41NzAyMTY2NTNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3NTI3NjgxLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0ZHhcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjIyOjAyLjY1Nzc1NTMzNFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDQ4Njc5MzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkNvbmRpdGlvbmFsIENvbXBpbGF0aW9uIENvbnVuZHJ1bSoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgbmVlZCB0byByZXRoaW5rIHRoaXMgYXBwcm9hY2guIEkgd2FzIGZvY3VzaW5nIG9uIGB0ZHguY2AgYW5kIGl0cyBwbGFjZSBpbiB0aGUgb3ZlcmFsbCBidWlsZCBwcm9jZXNzLCBidXQgSSdtIGhhdmluZyBhIG5hZ2dpbmcgZmVlbGluZy4uLiBjb3VsZCBpdCBiZSB0aGF0IGB0ZHguY2AgaXMgY29tcGlsZWQgKmNvbmRpdGlvbmFsbHkqPyBUaGF0IHdvdWxkIGNvbXBsZXRlbHkgY2hhbmdlIGhvdyBJIGFwcHJvYWNoIHRoaXMuIElmIGl0J3Mgb25seSBpbmNsdWRlZCB1bmRlciBjZXJ0YWluIGNpcmN1bXN0YW5jZXMsIG15IGFzc3VtcHRpb25zIGFib3V0IGl0cyBjb25zaXN0ZW50IHByZXNlbmNlIGluIHRoZSBmaW5hbCBvdXRwdXQgYXJlIGZ1bmRhbWVudGFsbHkgZmxhd2VkLiBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgdGhlcmUgYXJlIGFueSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBvciBmbGFncyBhZmZlY3RpbmcgdGhlIGNvbXBpbGF0aW9uIG9mIGB0ZHguY2AuIFRoaXMgaXNuJ3QgbmVjZXNzYXJpbHkgYSBzaG93LXN0b3BwZXIsIGJ1dCBpdCBzaWduaWZpY2FudGx5IGFsdGVycyB0aGUgYW5hbHlzaXMuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgcG9zc2libGUgY29uZGl0aW9ucy4gTGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgaGludHMgaW4gdGhlIGhlYWRlcnMgb3IgdGhlIGJ1aWxkIHN5c3RlbSBzY3JpcHRzLi4uIGl0IGNvdWxkIGJlIHNvbWV0aGluZyBhcyBzaW1wbGUgYXMgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBvciB0YXJnZXQgYXJjaGl0ZWN0dXJlIGRlcGVuZGVuY3kuIFRpbWUgdG8gZGl2ZSBkZWVwZXIgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODUwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MjI6MDUuNzA2NDM4OTNaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMTA2ODAzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0ZHhcXFxcLmNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjIyOjA1Ljc2OTU1NjE1M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDk0OTAzMTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcnkgb2YgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSdtIGhhdmluZyB0aGVzZSB0aG91Z2h0czpcblxuKipLVk0vVERYIEZpbGUgSW52ZXN0aWdhdGlvbioqXG5cbkhtbSwgaG9sZCBvbiBhIHNlY29uZC4uLiBJIGRpc3RpbmN0bHkgcmVtZW1iZXIgc2VlaW5nIGBhcmNoL3g4Ni9rdm0vdm14L3RkeC5jYCBwb3AgdXAgaW4gdGhhdCBgZ3JlcGAgb3V0cHV0IGEgZmV3IG1vbWVudHMgYWdvLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCBwb3RlbnRpYWxseSByZWxldmFudC4gR2l2ZW4gbXkgZm9jdXMgb24gS1ZNIGFuZCB0aGUgVERYIGludGVncmF0aW9uLCB0aGF0IGZpbGUgZGVmaW5pdGVseSB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZS4gTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgdGhlIHJlbGF0ZWQgYE1ha2VmaWxlYCB3aXRoaW4gdGhlIEtWTSBkaXJlY3RvcnkuIFRoYXQgd2lsbCBwcm92aWRlIGNydWNpYWwgY29udGV4dCDigJMgbGlua2luZyB0aGlzIHNwZWNpZmljIHNvdXJjZSBmaWxlIHRvIHRoZSBvdmVyYWxsIGJ1aWxkIHByb2Nlc3MgYW5kIHBvdGVudGlhbGx5IHJldmVhbGluZyBkZXBlbmRlbmNpZXMgb3IgaW50ZWdyYXRpb24gcG9pbnRzIHdpdGhpbiB0aGUgeDg2L0tWTSBzdWJzeXN0ZW0uIEZyb20gdGhlcmUsIEkgY2FuIGdldCBhIGJldHRlciBzZW5zZSBvZiBpdHMgcm9sZSBhbmQgc2lnbmlmaWNhbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzExOCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjIyOjA5LjI2NDQ2MjQwM1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk0MTIzMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGR4XFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL01ha2VmaWxlPTIxPWt2bS1pbnRlbC0kKENPTkZJR19LVk1fSFlQRVJWKVxcdCs9IHZteC9oeXBlcnYubyB2bXgvaHlwZXJ2X2V2bWNzLm9cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6MjI6a3ZtLWludGVsLSQoQ09ORklHX0tWTV9JTlRFTF9URFgpXFx0Kz0gdm14L3RkeC5vXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlLTIzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMToyMjowOS4zNjM4ODM5NTJaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMwMzU1NDgxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgZm9yIFREWCBTdXBwb3J0KipcblxuUmlnaHQsIHNvIEkgc2VlIHdlIG5lZWQgYENPTkZJR19LVk1fSU5URUxfVERYYCBmb3IgYHRkeC5vYC4gTWFrZXMgcGVyZmVjdCBzZW5zZS4gVGhlIHBpZWNlcyBhcmUgc2xvdHRpbmcgaW50byBwbGFjZS4gTm93LCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciBkb3duIHRoaXMgcGF0aCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGF0IHBhcnRpY3VsYXIgS2NvbmZpZyBvcHRpb24gaXMgZXZlbiBkZWZpbmVkIHdpdGhpbiBvdXIgY3VycmVudCBidWlsZCBlbnZpcm9ubWVudC4gSSBuZWVkIHRvIGtub3cgaWYgdGhlIGtlcm5lbCBoYXMgYmVlbiBjb25maWd1cmVkIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgSW50ZWwncyBURFggdGVjaG5vbG9neSBpbiB0aGUgZmlyc3QgcGxhY2UuIE5vIHBvaW50IGNoYXNpbmcgYSBwaGFudG9tIGRlcGVuZGVuY3kuIExldCdzIHZlcmlmeSB0aGF0IGBDT05GSUdfS1ZNX0lOVEVMX1REWGAgYWN0dWFsbHkgZXhpc3RzLiBJJ2xsIG5lZWQgdG8gdXNlIG15IHVzdWFsIHRvb2xzIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIG9yIHRoZSBjdXJyZW50IGJ1aWxkIGNvbmZpZ3VyYXRpb24uIEtub3dpbmcgdGhpcyB3aWxsIHRlbGwgbWUgd2hldGhlciBJIGNhbiBleHBlY3QgdGhlIHJlbGV2YW50IFREWC1yZWxhdGVkIG1vZHVsZXMgYW5kIGZ1bmN0aW9uYWxpdHkgdG8gYmUgcHJlc2VudCBpbiB0aGUgYnVpbGQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDkyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MjI6MTIuNjY3NDQyNTkyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzI1OTQyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0lOVEVMX1REWFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MjI6MTIuNzUwNzEyMzczWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4OTM1NTE5MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgUmVhc29uaW5nIG9uIEtWTSBDb25maWd1cmF0aW9uIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgS1ZNX0lOVEVMX1REWGAgY29uZmlndXJhdGlvbiBvcHRpb24uIFJpZ2h0LCBpdCdzIGEgc3BlY2lmaWMgY29uZmlnLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaW5jbHVkZSBib3RoIGBLVk1gIGdlbmVyYWxseSAqYW5kKiB0aGlzIGBLVk1fSU5URUxfVERYYCBvcHRpb24gaW4gdGhlIGZ1enppbmcgY29uZmlncy4gVGhhdCBtYWtlcyBzZW5zZSwgY292ZXJpbmcgdGhlIGdlbmVyYWwgS1ZNIGZ1bmN0aW9uYWxpdHkgYW5kIHRoaXMgVERYLXNwZWNpZmljIHBhcnQuXG5cbkhtbSwgaGFuZyBvbi4gSSdtIHNlZWluZyB0aGF0IGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgICpjYW4qIGJlIHJlYWNoZWQgZXZlbiB3aXRob3V0IFREWCBlbmFibGVkLiBUaGF0J3MgZ29vZCB0byBrbm93LCBidXQuLi4gdGhlIGNydWNpYWwgcG9pbnQgaXMgdGhhdCBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYCAqYXBwZWFycyogdG8gb25seSBiZSBjYWxsZWQgZnJvbSBURFggY29kZSBhdCB0aGUgbW9tZW50LiBTbywgYWRkaW5nIGBLVk1fSU5URUxfVERYYCBpcyBzdGlsbCBhIHZhbGlkIGRlY2lzaW9uLiBJdCBlbnN1cmVzIHRoYXQgKmJvdGgqIGNvZGUgcGF0aHMsIHRoZSBURFgtc3BlY2lmaWMgYW5kIHRoZSBtb3JlIGdlbmVyYWwgb25lLCBhcmUgYWNjZXNzaWJsZSBkdXJpbmcgZnV6emluZywgYW5kIEkgY2FuIGJlIGNvbmZpZGVudCBJJ20gY292ZXJpbmcgZXZlcnl0aGluZyByZWxldmFudC5cblxuQWxyaWdodCwgYmVmb3JlIEkgZmluYWxpemUgdGhpcywgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBLVk1fSU5URUxfVERYYCBkb2Vzbid0IGhhdmUgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMuIE5lZWQgdG8gYmUgY2VydGFpbiB0aGF0IEknbSBub3QgaW5hZHZlcnRlbnRseSBicmVha2luZyBzb21ldGhpbmcgZWxzZSBieSBlbmFibGluZyBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4ODMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MjI6MTcuNjQ0MjY5MDA5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3NzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzNCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEzNDpcXHRjb25maWcgS1ZNX0lOVEVMX1REWFxcbiAxMzU6XFx0XFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFxcXCJcXG4gMTM2OlxcdFxcdGRlZmF1bHQgeVxcbiAxMzc6XFx0XFx0ZGVwZW5kcyBvbiBJTlRFTF9URFhfSE9TVFxcbiAxMzg6XFx0XFx0c2VsZWN0IEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxuIDEzOTpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1BPUFVMQVRFXFxuIDE0MDpcXHRcXHRoZWxwXFxuIDE0MTpcXHRcXHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIGxhdW5jaGluZyBJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKVxcbiAxNDI6XFx0XFx0ICBjb25maWRlbnRpYWwgVk1zIG9uIEludGVsIHByb2Nlc3NvcnMuXFxuIDE0MzpcXHRcXG4gMTQ0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMTQ1OlxcdFxcbiAxNDY6XFx0Y29uZmlnIEtWTV9BTURcXG4gMTQ3OlxcdFxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuIDE0ODpcXHRcXHRkZXBlbmRzIG9uIEtWTSBcXHUwMDI2XFx1MDAyNiAoQ1BVX1NVUF9BTUQgfHwgQ1BVX1NVUF9IWUdPTilcXG4gMTQ5OlxcdFxcdGhlbHBcXG4gMTUwOlxcdFxcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgS1ZNIG9uIEFNRCBwcm9jZXNzb3JzIGVxdWlwcGVkIHdpdGggdGhlIEFNRC1WXFxuIDE1MTpcXHRcXHQgIChTVk0pIGV4dGVuc2lvbnMuXFxuIDE1MjpcXHRcXG4gMTUzOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjIyOjE3LjY0NDM2ODU0OVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjEzMDgzNDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIERlcGVuZGVuY3kqKlxuXG5Pa2F5LCBzbyB0aGUgc2l0dWF0aW9uIGhpbmdlcyBvbiB0aGlzIGBJTlRFTF9URFhfSE9TVGAgdmFyaWFibGUuIFRoZSBjb3JlIHF1ZXN0aW9uIGJlZm9yZSBtZSBpcyBpdHMgc3RhdGUuIEkgbmVlZCB0byBrbm93IHRoZSB2YWx1ZSBvZiBgSU5URUxfVERYX0hPU1RgIHRvIGRldGVybWluZSB0aGUgc3Vic2VxdWVudCBjb3Vyc2Ugb2YgYWN0aW9uLiBJdCdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBhbmQgcHJvY2VlZGluZyBsb2dpY2FsbHkuIE15IGltbWVkaWF0ZSB0YXNrIGlzIHRvIGFzY2VydGFpbiB0aGUgY3VycmVudCBzZXR0aW5nIG9yIHZhbHVlIG9mIGBJTlRFTF9URFhfSE9TVGAg4oCTIHRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGVmZmVjdGl2ZSBhbmFseXNpcy4gSSdsbCBtYWtlIHN1cmUgdG8gZ2V0IHRoaXMgY3JpdGljYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24gYmVmb3JlIEkgcHJvY2VlZCBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY1NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MjI6MjAuMjU3NDU1Njk5WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzk3NTI0NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElOVEVMX1REWF9IT1NUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9LY29uZmlnPTE4NDQ9Y29uZmlnIFg4Nl9VU0VSX1NIQURPV19TVEFDS1xcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xODYzLVxcbmFyY2gveDg2L0tjb25maWc6MTg2NDpjb25maWcgSU5URUxfVERYX0hPU1RcXG5hcmNoL3g4Ni9LY29uZmlnLTE4NjUtXFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgaG9zdCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMToyMjoyMC40MzcyMTQ0MzFaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjcxMjEwNzIzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIGluaXRpYWwgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IExhbmRzY2FwZSBmb3IgSU5URUxfVERYX0hPU1QqKlxuXG5BbHJpZ2h0LCB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIGdldCBhIGhhbmRsZSBvbiB3aGF0IGBJTlRFTF9URFhfSE9TVGAgaXMgcmVsaWFudCBvbi4gVW5kZXJzdGFuZGluZyBpdHMgZGVwZW5kZW5jaWVzIGlzIHRoZSBjcml0aWNhbCBmaXJzdCBzdGVwLiBJIG5lZWQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgb3RoZXIgY29tcG9uZW50cywgbGlicmFyaWVzLCBvciBzeXN0ZW1zIGl0J3MgaW50ZXJ3b3ZlbiB3aXRoLiBUaGF0IGluZm9ybWF0aW9uIGlzIGdvaW5nIHRvIGxheSB0aGUgZ3JvdW5kd29yayBmb3IgYW55IGZ1cnRoZXIgYW5hbHlzaXMsIHRyb3VibGVzaG9vdGluZywgb3IgZGV2ZWxvcG1lbnQgZWZmb3J0cyBkb3duIHRoZSBsaW5lLiBJdCdzIHRoZSBmb3VuZGF0aW9uIG9mIHVuZGVyc3RhbmRpbmcgdGhlIGVudGlyZSBhcmNoaXRlY3R1cmUgYW5kIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIGFueSBjaGFuZ2UuIFdpdGhvdXQgdGhpcyB1bmRlcnN0YW5kaW5nLCBJJ20gZXNzZW50aWFsbHkgZmx5aW5nIGJsaW5kLiBLbm93aW5nIHRob3NlIHJlbGF0aW9uc2hpcHMgaXMga2V5IGZvciBtYWludGFpbmluZyBhbmQgZGV2ZWxvcGluZyB0aGUgY29kZWJhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTUyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MjI6MjMuMTQ5MzI1MDUxWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNzk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NjQsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4NjQ6XFx0Y29uZmlnIElOVEVMX1REWF9IT1NUXFxuMTg2NTpcXHRcXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBob3N0IHN1cHBvcnRcXFwiXFxuMTg2NjpcXHRcXHRkZXBlbmRzIG9uIENQVV9TVVBfSU5URUxcXG4xODY3OlxcdFxcdGRlcGVuZHMgb24gWDg2XzY0XFxuMTg2ODpcXHRcXHRkZXBlbmRzIG9uIEtWTV9JTlRFTFxcbjE4Njk6XFx0XFx0ZGVwZW5kcyBvbiBYODZfWDJBUElDXFxuMTg3MDpcXHRcXHRzZWxlY3QgQVJDSF9LRUVQX01FTUJMT0NLXFxuMTg3MTpcXHRcXHRkZXBlbmRzIG9uIENPTlRJR19BTExPQ1xcbjE4NzI6XFx0XFx0ZGVwZW5kcyBvbiBYODZfTUNFXFxuMTg3MzpcXHRcXHRoZWxwXFxuMTg3NDpcXHRcXHQgIEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHByb3RlY3RzIGd1ZXN0IFZNcyBmcm9tIG1hbGljaW91c1xcbjE4NzU6XFx0XFx0ICBob3N0IGFuZCBjZXJ0YWluIHBoeXNpY2FsIGF0dGFja3MuICBUaGlzIG9wdGlvbiBlbmFibGVzIG5lY2Vzc2FyeSBURFhcXG4xODc2OlxcdFxcdCAgc3VwcG9ydCBpbiB0aGUgaG9zdCBrZXJuZWwgdG8gcnVuIGNvbmZpZGVudGlhbCBWTXMuXFxuMTg3NzpcXHRcXG4xODc4OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4xODc5OlxcdFxcbjE4ODA6XFx0Y29uZmlnIEVGSVxcbjE4ODE6XFx0XFx0Ym9vbCBcXFwiRUZJIHJ1bnRpbWUgc2VydmljZSBzdXBwb3J0XFxcIlxcbjE4ODI6XFx0XFx0ZGVwZW5kcyBvbiBBQ1BJXFxuMTg4MzpcXHRcXHRzZWxlY3QgVUNTMl9TVFJJTkdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MjI6MjMuMTQ5NTM1MTIxWiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1MDE1Mjc3MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEtWTSBhbmQgVERYIENvbmZpZ3VyYXRpb24gYW5kIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIEtWTSBhbmQgVERYIGNvbmZpZ3VyYXRpb24gYW5kIGhhdmUgYXJyaXZlZCBhdCBhIGNsZWFyZXIgcGljdHVyZS4gSW5pdGlhbGx5LCBJIHRob3VnaHQgSSBtaWdodCBuZWVkIHRvIGluY2x1ZGUgYEtWTV9JTlRFTGAsIGBYODZfWDJBUElDYCwgYENPTlRJR19BTExPQ2AsIGFuZCBgWDg2X01DRWAgYmVjYXVzZSBgSU5URUxfVERYX0hPU1RgIGRlcGVuZHMgb24gdGhlbS4gSG93ZXZlciwgaXQgbG9va3MgbGlrZSBJIGNhbiBzaW1wbGlmeSB0aGluZ3MuIEFjdHVhbGx5LCBJIHdpbGwgZ28gd2l0aCBgS1ZNYCwgYEtWTV9JTlRFTGAsIGBJTlRFTF9URFhfSE9TVGAsIGFuZCBgS1ZNX0lOVEVMX1REWGAgbm93IHRoYXQgSSd2ZSBkb3VibGUgY2hlY2tlZCB0aGUgZGVwZW5kZW5jaWVzLiBJdCBzZWVtcyBgS1ZNX0lOVEVMX1REWGAgZGVmYXVsdHMgdG8gJ3knIGlmIGBJTlRFTF9URFhfSE9TVGAgaXMgZW5hYmxlZC5cblxuTm93LCBsZXQncyByZXZpc2l0IGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBmaXggaXMgY29ycmVjdGx5IGludGVncmF0ZWQuIEFoLCB5ZXMsIGl0J3MgY29ubmVjdGVkIHRocm91Z2ggdGhlIGBLVk1fUFJFX0ZBVUxUX01FTU9SWWAgaW9jdGwuIFRoZSBjcml0aWNhbCBhc3BlY3Qgb2YgdGhpcyBwYXRjaCBpcyB0aGUgY29ycmVjdGlvbiBpbiB0aGUgTU1VIHJlbG9hZCB3aXRoaW4gdGhlIHJldHJ5IGxvb3AuIEVzc2VudGlhbGx5LCBpdCByZXNvbHZlcyBhIGJ1ZyB3aGVyZSBga3ZtX21tdV9yZWxvYWRgIHdhc24ndCBiZWluZyBjYWxsZWQgaW5zaWRlIHRoZSByZXRyeSBsb29wLCB3aGljaCBjb3VsZCBjYXVzZSBwcm9ibGVtcyBpZiB0aGUgTU1VIHJvb3RzIHdlcmUgaW52YWxpZGF0ZWQgbWlkLWxvb3AuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBLVk0gTU1VIGNvZGUsIGFuZCBJIG5lZWQgdG8gYmUgc3VyZSBpdCdzIGFwcGxpZWQgY29ycmVjdGx5LlxuXG5LZXkgc3ltYm9scyB0byB0cmFjayBub3cgYXJlIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGFuZCBga3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuYC5cblxuU28sIHRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIEtWTSBNTVUgcGFnZSBwcmUtZmF1bHRpbmcgYW5kIHByaXZhdGUgUEZOIG1hcHBpbmcgbG9naWMuIFRoZSBmaXggZW5zdXJlcyB0aGUgTU1VIGlzIHJlbG9hZGVkIHdpdGhpbiB0aGUgcmV0cnkgbG9vcHMgd2hpY2ggaXMgY3J1Y2lhbCBiZWNhdXNlIHRoaXMgZml4ZXMgYSBjb25jdXJyZW50IE1NVSByb290IGludmFsaWRhdGlvbiBwcm9ibGVtLiBUaGUgY2hhbmdlcyBkaXJlY3RseSBpbXBhY3QgcmVhY2hhYmxlIEtWTSBpb2N0bHMgbGlrZSBgS1ZNX1BSRV9GQVVMVF9NRU1PUllgIGFuZCBhbHNvIFREWCBndWVzdCBtZW1vcnkgcG9wdWxhdGlvbiB3aGljaCBpcyBzaWduaWZpY2FudC5cblxuSSBxdWlja2x5IGNoZWNrZWQgYGt2bV90ZHBfcGFnZV9wcmVmYXVsdGAsIGJ1dCBpdCdzIHN0YXRpYywgc28gaXQncyBub3QgdGhlIGJlc3Qgc3ltYm9sIHRvIGZvY3VzIG9uLiBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBhbmQgYGt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmbmAgYXJlIGV4cG9ydGVkIGFuZCB0aGVyZWZvcmUgaW1wb3J0YW50LlxuXG5BbHJpZ2h0LCBJJ20gY29uZmlkZW50IGluIG15IGFzc2Vzc21lbnQuIFRpbWUgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0NTMsIk91dHB1dFRva2VucyI6MTcwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MjI6MzEuNjUxMDY3OTE0WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2MjM0NzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiSU5URUxfVERYX0hPU1RcIixcbiAgICBcIktWTV9JTlRFTF9URFhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlcIixcbiAgICBcImt2bV90ZHBfbW11X21hcF9wcml2YXRlX3BmblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBNTVUgcGFnZSBwcmUtZmF1bHRpbmcgYW5kIHByaXZhdGUgUEZOIG1hcHBpbmcgbG9naWMgdG8gY29ycmVjdGx5IHJlbG9hZCB0aGUgTU1VIGluc2lkZSByZXRyeSBsb29wcy4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgaXNzdWVzIHdoZW4gTU1VIHJvb3RzIGFyZSBpbnZhbGlkYXRlZCBjb25jdXJyZW50bHkuIFRoZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgS1ZNIGlvY3RscyAoS1ZNX1BSRV9GQVVMVF9NRU1PUlkpIGFuZCBURFggZ3Vlc3QgbWVtb3J5IHBvcHVsYXRpb24sIG1ha2luZyBpdCBmdW5jdGlvbmFsIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJJTlRFTF9URFhfSE9TVFwiLFxuICAgIFwiS1ZNX0lOVEVMX1REWFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeVwiLFxuICAgIFwia3ZtX3RkcF9tbXVfbWFwX3ByaXZhdGVfcGZuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIE1NVSBwYWdlIHByZS1mYXVsdGluZyBhbmQgcHJpdmF0ZSBQRk4gbWFwcGluZyBsb2dpYyB0byBjb3JyZWN0bHkgcmVsb2FkIHRoZSBNTVUgaW5zaWRlIHJldHJ5IGxvb3BzLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBpc3N1ZXMgd2hlbiBNTVUgcm9vdHMgYXJlIGludmFsaWRhdGVkIGNvbmN1cnJlbnRseS4gVGhlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBLVk0gaW9jdGxzIChLVk1fUFJFX0ZBVUxUX01FTU9SWSkgYW5kIFREWCBndWVzdCBtZW1vcnkgcG9wdWxhdGlvbiwgbWFraW5nIGl0IGZ1bmN0aW9uYWwgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow5lf4d[1] Phase: Succeeded StartedAt: 2026-08-07 01:22:44 +0000 UTC FinishedAt: 2026-08-07 01:22:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5lf4d[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-07 01:22:44 +0000 UTC FinishedAt: 2026-08-07 01:22:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5lf4d[2] Phase: Succeeded StartedAt: 2026-08-07 01:22:44 +0000 UTC FinishedAt: 2026-08-07 05:14:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5lf4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},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":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"f84e1d53-bc1a-48ad-8913-c9a8e28e4dd3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-07 01:22:44 +0000 UTC FinishedAt: 2026-08-07 05:14:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},"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":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"f84e1d53-bc1a-48ad-8913-c9a8e28e4dd3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow5lf4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},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":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"f84e1d53-bc1a-48ad-8913-c9a8e28e4dd3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-07 01:22:44 +0000 UTC FinishedAt: 2026-08-07 01:23:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5lf4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},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":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"f84e1d53-bc1a-48ad-8913-c9a8e28e4dd3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-07 01:22:44 +0000 UTC FinishedAt: 2026-08-07 01:23:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},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-workflow5lf4d/series-workflow5lf4d-convert-artifact-3683248317/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5lf4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},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":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"f84e1d53-bc1a-48ad-8913-c9a8e28e4dd3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-07 01:23:13 +0000 UTC FinishedAt: 2026-08-07 01:45:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5lf4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},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":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"f84e1d53-bc1a-48ad-8913-c9a8e28e4dd3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-07 01:23:13 +0000 UTC FinishedAt: 2026-08-07 01:45:18 +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:*b70ad77e-ab54-44bb-b281-ea0f4a5cf6af,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-workflow5lf4d/series-workflow5lf4d-convert-artifact-3683248317/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": "ceb0cb4f-97fc-46c9-be87-b8f6a9d5e0b6", "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-workflow5lf4d/series-workflow5lf4d-build-action-4259516915/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5lf4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},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":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"f84e1d53-bc1a-48ad-8913-c9a8e28e4dd3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-07 01:23:13 +0000 UTC FinishedAt: 2026-08-07 01:44:55 +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:*b70ad77e-ab54-44bb-b281-ea0f4a5cf6af,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-workflow5lf4d/series-workflow5lf4d-convert-artifact-3683248317/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": "ceb0cb4f-97fc-46c9-be87-b8f6a9d5e0b6", "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-workflow5lf4d/series-workflow5lf4d-build-action-4259516915/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5lf4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},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":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"f84e1d53-bc1a-48ad-8913-c9a8e28e4dd3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-07 01:45:18 +0000 UTC FinishedAt: 2026-08-07 01:45:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5lf4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},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":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"f84e1d53-bc1a-48ad-8913-c9a8e28e4dd3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-07 01:45:18 +0000 UTC FinishedAt: 2026-08-07 01:45:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5lf4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},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":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"f84e1d53-bc1a-48ad-8913-c9a8e28e4dd3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-07 01:45:18 +0000 UTC FinishedAt: 2026-08-07 01:45:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5lf4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},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":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"f84e1d53-bc1a-48ad-8913-c9a8e28e4dd3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-07 01:45:18 +0000 UTC FinishedAt: 2026-08-07 01:45:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"f84e1d53-bc1a-48ad-8913-c9a8e28e4dd3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},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-workflow5lf4d/series-workflow5lf4d-convert-artifact-2638694680/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5lf4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},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":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"f84e1d53-bc1a-48ad-8913-c9a8e28e4dd3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-07 01:45:28 +0000 UTC FinishedAt: 2026-08-07 01:47:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5lf4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},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":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"f84e1d53-bc1a-48ad-8913-c9a8e28e4dd3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-07 01:45:28 +0000 UTC FinishedAt: 2026-08-07 01:47:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ceb0cb4f-97fc-46c9-be87-b8f6a9d5e0b6,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-workflow5lf4d/series-workflow5lf4d-build-action-4259516915/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-workflow5lf4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},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":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"f84e1d53-bc1a-48ad-8913-c9a8e28e4dd3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-07 01:47:37 +0000 UTC FinishedAt: 2026-08-07 01:47:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5lf4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},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":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"f84e1d53-bc1a-48ad-8913-c9a8e28e4dd3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-07 01:47:37 +0000 UTC FinishedAt: 2026-08-07 01:47:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5lf4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},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":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"f84e1d53-bc1a-48ad-8913-c9a8e28e4dd3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-07 01:47:37 +0000 UTC FinishedAt: 2026-08-07 02:07:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5lf4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},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":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"f84e1d53-bc1a-48ad-8913-c9a8e28e4dd3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-07 01:47:37 +0000 UTC FinishedAt: 2026-08-07 02:07:08 +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:*b70ad77e-ab54-44bb-b281-ea0f4a5cf6af,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-workflow5lf4d/series-workflow5lf4d-convert-artifact-2638694680/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": "a716cb7b-0225-4d52-a8b5-3e086f0c757c", "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-workflow5lf4d/series-workflow5lf4d-build-action-901423492/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5lf4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},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":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"f84e1d53-bc1a-48ad-8913-c9a8e28e4dd3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-07 01:47:37 +0000 UTC FinishedAt: 2026-08-07 02:06: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:*b70ad77e-ab54-44bb-b281-ea0f4a5cf6af,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-workflow5lf4d/series-workflow5lf4d-convert-artifact-2638694680/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": "a716cb7b-0225-4d52-a8b5-3e086f0c757c", "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-workflow5lf4d/series-workflow5lf4d-build-action-901423492/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5lf4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},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":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"f84e1d53-bc1a-48ad-8913-c9a8e28e4dd3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-07 02:07:08 +0000 UTC FinishedAt: 2026-08-07 02:07:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5lf4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},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":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"f84e1d53-bc1a-48ad-8913-c9a8e28e4dd3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-07 02:07:08 +0000 UTC FinishedAt: 2026-08-07 02:07:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5lf4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},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":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"f84e1d53-bc1a-48ad-8913-c9a8e28e4dd3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-07 02:07:08 +0000 UTC FinishedAt: 2026-08-07 02:09:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5lf4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},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":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"f84e1d53-bc1a-48ad-8913-c9a8e28e4dd3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-07 02:07:08 +0000 UTC FinishedAt: 2026-08-07 02:09:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a716cb7b-0225-4d52-a8b5-3e086f0c757c,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-workflow5lf4d/series-workflow5lf4d-build-action-901423492/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-workflow5lf4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},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":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"f84e1d53-bc1a-48ad-8913-c9a8e28e4dd3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-07 02:09:10 +0000 UTC FinishedAt: 2026-08-07 05:14:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5lf4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},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":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"f84e1d53-bc1a-48ad-8913-c9a8e28e4dd3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-07 02:09:10 +0000 UTC FinishedAt: 2026-08-07 05:14:02 +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:*ceb0cb4f-97fc-46c9-be87-b8f6a9d5e0b6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a716cb7b-0225-4d52-a8b5-3e086f0c757c,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-workflow5lf4d/series-workflow5lf4d-build-action-4259516915/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-workflow5lf4d/series-workflow5lf4d-build-action-901423492/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow5lf4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},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":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"f84e1d53-bc1a-48ad-8913-c9a8e28e4dd3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-07 02:09:10 +0000 UTC FinishedAt: 2026-08-07 02:09:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5lf4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},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":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"f84e1d53-bc1a-48ad-8913-c9a8e28e4dd3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-07 02:09:10 +0000 UTC FinishedAt: 2026-08-07 02:09:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_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-workflow5lf4d/series-workflow5lf4d-convert-artifact-2257638129/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5lf4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},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":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"f84e1d53-bc1a-48ad-8913-c9a8e28e4dd3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-07 02:09:10 +0000 UTC FinishedAt: 2026-08-07 02:09:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5lf4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},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":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"f84e1d53-bc1a-48ad-8913-c9a8e28e4dd3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-07 02:09:10 +0000 UTC FinishedAt: 2026-08-07 02:09:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5lf4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},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":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"f84e1d53-bc1a-48ad-8913-c9a8e28e4dd3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-07 02:09:10 +0000 UTC FinishedAt: 2026-08-07 02:09:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5lf4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},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":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"f84e1d53-bc1a-48ad-8913-c9a8e28e4dd3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-07 02:09:20 +0000 UTC FinishedAt: 2026-08-07 05:14:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5lf4d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},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":"a806d364ef288a6443a1337820ea8410a7ccc6b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","INTEL_TDX_HOST","KVM_INTEL_TDX"],"series_id":"f84e1d53-bc1a-48ad-8913-c9a8e28e4dd3","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-07 02:09:20 +0000 UTC FinishedAt: 2026-08-07 05:13:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ceb0cb4f-97fc-46c9-be87-b8f6a9d5e0b6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a716cb7b-0225-4d52-a8b5-3e086f0c757c,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-workflow5lf4d/series-workflow5lf4d-build-action-4259516915/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-workflow5lf4d/series-workflow5lf4d-build-action-901423492/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-workflow5lf4d/series-workflow5lf4d-convert-artifact-2257638129/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,}