Name: series-workflowvs68w Phase: Succeeded StartedAt: 2026-09-10 22:09:43 +0000 UTC FinishedAt: 2026-09-10 23:25:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvs68w[0] Phase: Succeeded StartedAt: 2026-09-10 22:09:43 +0000 UTC FinishedAt: 2026-09-10 22:15:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvs68w[0].run-triage Phase: Succeeded StartedAt: 2026-09-10 22:09:43 +0000 UTC FinishedAt: 2026-09-10 22:15:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "50d05c7c76c96b90462f24debacca971d2e86713", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM_AMD", "KVM_AMD_SEV", "CRYPTO_DEV_SP_PSP", "CRYPTO_DEV_CCP_DD", "AMD_IOMMU" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "50d05c7c76c96b90462f24debacca971d2e86713", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM_AMD", "KVM_AMD_SEV", "CRYPTO_DEV_SP_PSP", "CRYPTO_DEV_CCP_DD", "AMD_IOMMU" ], "series_id": "e1aa4c5a-1130-4ea0-acf5-4261ab59168e" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "snp_handle_guest_req", "snp_handle_ext_guest_req", "sev_handle_vmgexit" ], "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+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTV9BTUQmIzM0OywKICAgICYjMzQ7S1ZNX0FNRF9TRVYmIzM0OywKICAgICYjMzQ7Q1JZUFRPX0RFVl9TUF9QU1AmIzM0OywKICAgICYjMzQ7Q1JZUFRPX0RFVl9DQ1BfREQmIzM0OywKICAgICYjMzQ7QU1EX0lPTU1VJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c25wX2hhbmRsZV9ndWVzdF9yZXEmIzM0OywKICAgICYjMzQ7c25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxJiMzNDssCiAgICAmIzM0O3Nldl9oYW5kbGVfdm1nZXhpdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIEtWTSBTRVYtU05QIGd1ZXN0IHJlcXVlc3QgaGFuZGxlcnMgKGBzbnBfaGFuZGxlX2d1ZXN0X3JlcWAgYW5kIGBzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXFgKS4gU3BlY2lmaWNhbGx5LCB3aGVuIHJlYWRpbmcvd3JpdGluZy9jbGVhcmluZyBndWVzdCBtZW1vcnkgZmFpbHMgKGBrdm1fcmVhZF9ndWVzdGAsIGBrdm1fd3JpdGVfZ3Vlc3RgLCBvciBga3ZtX2NsZWFyX2d1ZXN0YCksIGluc3RlYWQgb2YgcmV0dXJuaW5nIGAtRUlPYCAod2hpY2ggY2F1c2VkIEtWTSB0byBleGl0IHRvIGhvc3QgdXNlcnNwYWNlKSwgS1ZNIG5vdyBmb3JtYXRzIGEgR0hDQiBiYWQgaW5wdXQgZXJyb3IgcmVzcG9uc2UgKGBHSENCX0VSUl9JTlZBTElEX0lOUFVUYCB2aWEgYHN2bV92bWdleGl0X2JhZF9pbnB1dCgpYCkgYW5kIHJlc3VtZXMgdGhlIGd1ZXN0IChgcmV0dXJuIDFgKS5cblxuVGhlc2UgY2hhbmdlcyBzb2xlbHkgYWZmZWN0IGVycm9yIHJldHVybiBjb2RlcyBhbmQgY29udHJvbCBmbG93IGZvciBndWVzdCBlcnJvciByZXBvcnRpbmc6XG4xLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBzdHJ1Y3QgcGFkZGluZyBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlIG9yIHRoZSBndWVzdC5cbjIuIEluIGBzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXFgLCBpZiByZWFkaW5nIGBtc2dfdHlwZWAgZmFpbHMsIGNvbnRyb2wganVtcHMgc3RyYWlnaHQgdG8gYHJlcXVlc3RfaW52YWxpZGAsIGF2b2lkaW5nIGFueSBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBgbXNnX3R5cGVgLlxuMy4gTm8gaGVhcC9zdGFjayBhbGxvY2F0aW9ucyBvciBidWZmZXIgc2l6ZS9vZmZzZXQgbWFuaXB1bGF0aW9ucyBhcmUgaW50cm9kdWNlZC5cblxuQXMgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIEtWTSBBTUQgU0VWLVNOUCBndWVzdCByZXF1ZXN0IGhhbmRsaW5nIGZ1bmN0aW9ucyAoc25wX2hhbmRsZV9ndWVzdF9yZXEgYW5kIHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcSkuIFdoZW4gZ3Vlc3QgbWVtb3J5IHJlYWQvd3JpdGUgb3IgY2VydGlmaWNhdGUgdGFibGUgY2xlYXJhbmNlIGZhaWxzLCBLVk0gbm93IHJlcG9ydHMgR0hDQl9FUlJfSU5WQUxJRF9JTlBVVCB0byB0aGUgZ3Vlc3QgYW5kIHJlc3VtZXMgZ3Vlc3QgZXhlY3V0aW9uIHJhdGhlciB0aGFuIHJldHVybmluZyAtRUlPIHRvIHVzZXJzcGFjZS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgS1ZNIGNvbnRyb2wgZmxvdyBhbmQgVk0gc3RhdGUgaGFuZGxpbmcgb24gYW1kNjQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6MTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4ZjgwYzc4N2JkM2RhMTM4YTZkN2E2NGI4Yjc4MGQxZjE0ZDk0NmQyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMjI6MTM6MTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbmluZGV4IDU3MDU3MjNmMWY0MTIuLmQwNzU2MjMxMDUxOWEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5AQCAtNDIyOCw4ICYjNDM7NDIyOCwxMCBAQCBzdGF0aWMgaW50IHNucF9oYW5kbGVfZ3Vlc3RfcmVxKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBncGFfdCByZXFfZ3BhLCBncGFfdCByZXNwX1xuIFxuIFx0Z3VhcmQobXV0ZXgpKFx1MDAyNnNldi1cdTAwM2VndWVzdF9yZXFfbXV0ZXgpO1xuIFxuLVx0aWYgKGt2bV9yZWFkX2d1ZXN0KGt2bSwgcmVxX2dwYSwgc2V2LVx1MDAzZWd1ZXN0X3JlcV9idWYsIFBBR0VfU0laRSkpXG4tXHRcdHJldHVybiAtRUlPO1xuJiM0MztcdGlmIChrdm1fcmVhZF9ndWVzdChrdm0sIHJlcV9ncGEsIHNldi1cdTAwM2VndWVzdF9yZXFfYnVmLCBQQUdFX1NJWkUpKSB7XG4mIzQzO1x0XHRzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX0lOUFVUKTtcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcdH1cbiBcbiBcdGRhdGEuZ2N0eF9wYWRkciA9IF9fcHNwX3BhKHNldi1cdTAwM2VzbnBfY29udGV4dCk7XG4gXHRkYXRhLnJlcV9wYWRkciA9IF9fcHNwX3BhKHNldi1cdTAwM2VndWVzdF9yZXFfYnVmKTtcbkBAIC00MjQ0LDggJiM0Mzs0MjQ2LDEwIEBAIHN0YXRpYyBpbnQgc25wX2hhbmRsZV9ndWVzdF9yZXEoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGdwYV90IHJlcV9ncGEsIGdwYV90IHJlc3BfXG4gXHRpZiAocmV0IFx1MDAyNlx1MDAyNiAhZndfZXJyKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0aWYgKGt2bV93cml0ZV9ndWVzdChrdm0sIHJlc3BfZ3BhLCBzZXYtXHUwMDNlZ3Vlc3RfcmVzcF9idWYsIFBBR0VfU0laRSkpXG4tXHRcdHJldHVybiAtRUlPO1xuJiM0MztcdGlmIChrdm1fd3JpdGVfZ3Vlc3Qoa3ZtLCByZXNwX2dwYSwgc2V2LVx1MDAzZWd1ZXN0X3Jlc3BfYnVmLCBQQUdFX1NJWkUpKSB7XG4mIzQzO1x0XHRzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX0lOUFVUKTtcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcdH1cbiBcbiBcdC8qIE5vIGFjdGlvbiBpcyByZXF1ZXN0ZWQgKmZyb20gS1ZNKiBpZiB0aGVyZSB3YXMgYSBmaXJtd2FyZSBlcnJvci4gKi9cbiBcdHN2bV92bWdleGl0X25vX2FjdGlvbihzdm0sIFNOUF9HVUVTVF9FUlIoMCwgZndfZXJyKSk7XG5AQCAtNDI5Niw3ICYjNDM7NDMwMCw3IEBAIHN0YXRpYyBpbnQgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBncGFfdCByZXFfZ3BhLCBncGFfdCByXG4gXG4gXHRpZiAoa3ZtX3JlYWRfZ3Vlc3Qoa3ZtLCByZXFfZ3BhICYjNDM7IG9mZnNldG9mKHN0cnVjdCBzbnBfZ3Vlc3RfbXNnX2hkciwgbXNnX3R5cGUpLFxuIFx0XHRcdCAgIFx1MDAyNm1zZ190eXBlLCAxKSlcbi1cdFx0cmV0dXJuIC1FSU87XG4mIzQzO1x0XHRnb3RvIHJlcXVlc3RfaW52YWxpZDtcbiBcbiBcdC8qXG4gXHQgKiBBcyBwZXIgR0hDQiBzcGVjLCByZXF1ZXN0cyBvZiB0eXBlIE1TR19SRVBPUlRfUkVRIGFsc28gYWxsb3cgZm9yXG5AQCAtNDMzNiw3ICYjNDM7NDM0MCw3IEBAIHN0YXRpYyBpbnQgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBncGFfdCByZXFfZ3BhLCBncGFfdCByXG4gXHRcdCAqIGNlcnRpZmljYXRlIHRhYmxlIGlzIHRlcm1pbmF0ZWQgYnkgMjQtYnl0ZXMgb2YgemVyb2VzLlxuIFx0XHQgKi9cbiBcdFx0aWYgKGRhdGFfbnBhZ2VzIFx1MDAyNlx1MDAyNiBrdm1fY2xlYXJfZ3Vlc3Qoa3ZtLCBkYXRhX2dwYSwgMjQpKVxuLVx0XHRcdHJldHVybiAtRUlPO1xuJiM0MztcdFx0XHRnb3RvIHJlcXVlc3RfaW52YWxpZDtcbiBcdH1cbiBcbiBcdHJldHVybiBzbnBfaGFuZGxlX2d1ZXN0X3JlcShzdm0sIHJlcV9ncGEsIHJlc3BfZ3BhKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMjoxMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0tWTV9BTURfU0VWJiMzNDssCiAgICAmIzM0O0NSWVBUT19ERVZfU1BfUFNQJiMzNDssCiAgICAmIzM0O0NSWVBUT19ERVZfQ0NQX0REJiMzNDssCiAgICAmIzM0O0FNRF9JT01NVSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NucF9oYW5kbGVfZ3Vlc3RfcmVxJiMzNDssCiAgICAmIzM0O3NucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcSYjMzQ7LAogICAgJiMzNDtzZXZfaGFuZGxlX3ZtZ2V4aXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gS1ZNIEFNRCBTRVYtU05QIGd1ZXN0IHJlcXVlc3QgaGFuZGxpbmcgZnVuY3Rpb25zIChzbnBfaGFuZGxlX2d1ZXN0X3JlcSBhbmQgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxKS4gV2hlbiBndWVzdCBtZW1vcnkgcmVhZC93cml0ZSBvciBjZXJ0aWZpY2F0ZSB0YWJsZSBjbGVhcmFuY2UgZmFpbHMsIEtWTSBub3cgcmVwb3J0cyBHSENCX0VSUl9JTlZBTElEX0lOUFVUIHRvIHRoZSBndWVzdCBhbmQgcmVzdW1lcyBndWVzdCBleGVjdXRpb24gcmF0aGVyIHRoYW4gcmV0dXJuaW5nIC1FSU8gdG8gdXNlcnNwYWNlLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBLVk0gY29udHJvbCBmbG93IGFuZCBWTSBzdGF0ZSBoYW5kbGluZyBvbiBhbWQ2NC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDhmODBjNzg3YmQzZGExMzhhNmQ3YTY0YjhiNzgwZDFmMTRkOTQ2ZDIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAxMCAyMjoxMzoxMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jCmluZGV4IDU3MDU3MjNmMWY0MTIuLmQwNzU2MjMxMDUxOWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuYwpAQCAtNDIyOCw4ICYjNDM7NDIyOCwxMCBAQCBzdGF0aWMgaW50IHNucF9oYW5kbGVfZ3Vlc3RfcmVxKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBncGFfdCByZXFfZ3BhLCBncGFfdCByZXNwXwogCiAJZ3VhcmQobXV0ZXgpKCZhbXA7c2V2LSZndDtndWVzdF9yZXFfbXV0ZXgpOwogCi0JaWYgKGt2bV9yZWFkX2d1ZXN0KGt2bSwgcmVxX2dwYSwgc2V2LSZndDtndWVzdF9yZXFfYnVmLCBQQUdFX1NJWkUpKQotCQlyZXR1cm4gLUVJTzsKJiM0MzsJaWYgKGt2bV9yZWFkX2d1ZXN0KGt2bSwgcmVxX2dwYSwgc2V2LSZndDtndWVzdF9yZXFfYnVmLCBQQUdFX1NJWkUpKSB7CiYjNDM7CQlzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX0lOUFVUKTsKJiM0MzsJCXJldHVybiAxOwomIzQzOwl9CiAKIAlkYXRhLmdjdHhfcGFkZHIgPSBfX3BzcF9wYShzZXYtJmd0O3NucF9jb250ZXh0KTsKIAlkYXRhLnJlcV9wYWRkciA9IF9fcHNwX3BhKHNldi0mZ3Q7Z3Vlc3RfcmVxX2J1Zik7CkBAIC00MjQ0LDggJiM0Mzs0MjQ2LDEwIEBAIHN0YXRpYyBpbnQgc25wX2hhbmRsZV9ndWVzdF9yZXEoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGdwYV90IHJlcV9ncGEsIGdwYV90IHJlc3BfCiAJaWYgKHJldCAmYW1wOyZhbXA7ICFmd19lcnIpCiAJCXJldHVybiByZXQ7CiAKLQlpZiAoa3ZtX3dyaXRlX2d1ZXN0KGt2bSwgcmVzcF9ncGEsIHNldi0mZ3Q7Z3Vlc3RfcmVzcF9idWYsIFBBR0VfU0laRSkpCi0JCXJldHVybiAtRUlPOwomIzQzOwlpZiAoa3ZtX3dyaXRlX2d1ZXN0KGt2bSwgcmVzcF9ncGEsIHNldi0mZ3Q7Z3Vlc3RfcmVzcF9idWYsIFBBR0VfU0laRSkpIHsKJiM0MzsJCXN2bV92bWdleGl0X2JhZF9pbnB1dChzdm0sIEdIQ0JfRVJSX0lOVkFMSURfSU5QVVQpOwomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CX0KIAogCS8qIE5vIGFjdGlvbiBpcyByZXF1ZXN0ZWQgKmZyb20gS1ZNKiBpZiB0aGVyZSB3YXMgYSBmaXJtd2FyZSBlcnJvci4gKi8KIAlzdm1fdm1nZXhpdF9ub19hY3Rpb24oc3ZtLCBTTlBfR1VFU1RfRVJSKDAsIGZ3X2VycikpOwpAQCAtNDI5Niw3ICYjNDM7NDMwMCw3IEBAIHN0YXRpYyBpbnQgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBncGFfdCByZXFfZ3BhLCBncGFfdCByCiAKIAlpZiAoa3ZtX3JlYWRfZ3Vlc3Qoa3ZtLCByZXFfZ3BhICYjNDM7IG9mZnNldG9mKHN0cnVjdCBzbnBfZ3Vlc3RfbXNnX2hkciwgbXNnX3R5cGUpLAogCQkJICAgJmFtcDttc2dfdHlwZSwgMSkpCi0JCXJldHVybiAtRUlPOwomIzQzOwkJZ290byByZXF1ZXN0X2ludmFsaWQ7CiAKIAkvKgogCSAqIEFzIHBlciBHSENCIHNwZWMsIHJlcXVlc3RzIG9mIHR5cGUgTVNHX1JFUE9SVF9SRVEgYWxzbyBhbGxvdyBmb3IKQEAgLTQzMzYsNyAmIzQzOzQzNDAsNyBAQCBzdGF0aWMgaW50IHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgZ3BhX3QgcmVxX2dwYSwgZ3BhX3QgcgogCQkgKiBjZXJ0aWZpY2F0ZSB0YWJsZSBpcyB0ZXJtaW5hdGVkIGJ5IDI0LWJ5dGVzIG9mIHplcm9lcy4KIAkJICovCiAJCWlmIChkYXRhX25wYWdlcyAmYW1wOyZhbXA7IGt2bV9jbGVhcl9ndWVzdChrdm0sIGRhdGFfZ3BhLCAyNCkpCi0JCQlyZXR1cm4gLUVJTzsKJiM0MzsJCQlnb3RvIHJlcXVlc3RfaW52YWxpZDsKIAl9CiAKIAlyZXR1cm4gc25wX2hhbmRsZV9ndWVzdF9yZXEoc3ZtLCByZXFfZ3BhLCByZXNwX2dwYSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MjgKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNFViBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBwYXRjaCBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyIGVub3VnaCwgYW5kIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LCB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiB0aGUgY29udGV4dCBvZiBLVk0gYW5kIFNFVi4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBtYWdpYyBwcm9iYWJseSBoYXBwZW5zLgoKSSYjMzk7bGwgYmUgdXNpbmcgbXkgc3RhbmRhcmQgdG9vbGtpdCB0byBhbmFseXplIHRoaXM6IHN0YXRpYyBhbmFseXNpcywgbGlrZWx5IHN1cHBsZW1lbnRlZCBieSBkeW5hbWljIGFuYWx5c2lzIGlmIEkgbmVlZCBpdC4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIG5vdCBqdXN0IHRoZSBtb2RpZmllZCBsaW5lcywgYnV0IHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBVbmRlcnN0YW5kaW5nIHRoZSBleGlzdGluZyBjb2RlIGlzIHBhcmFtb3VudCB0byBncmFzcGluZyB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGVzZSBjaGFuZ2VzIGFuZCBhbnkgcG90ZW50aWFsIGltcGxpY2F0aW9ucy4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgY2hhbmdlcyBpbnRlcmFjdCB3aXRoIHRoZSBTRVYgZnJhbWV3b3JrIGluIHBhcnRpY3VsYXIsIGFuZCBpZiB0aGVyZSBhcmUgYW55IG5ldyBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgb3IgZmVhdHVyZXMgdGhhdCBhcmUgaW50cm9kdWNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MjIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQyMjA6XHRcdHN0cnVjdCBzZXZfZGF0YV9zbnBfZ3Vlc3RfcmVxdWVzdCBkYXRhID0gezB9O1xuNDIyMTpcdFx0c3RydWN0IGt2bSAqa3ZtID0gc3ZtLVx1MDAzZXZjcHUua3ZtO1xuNDIyMjpcdFx0c3RydWN0IGt2bV9zZXZfaW5mbyAqc2V2ID0gdG9fa3ZtX3Nldl9pbmZvKGt2bSk7XG40MjIzOlx0XHRzZXZfcmV0X2NvZGUgZndfZXJyID0gMDtcbjQyMjQ6XHRcdGludCByZXQ7XG40MjI1Olx0XG40MjI2Olx0XHRpZiAoIWlzX3Nldl9zbnBfZ3Vlc3QoXHUwMDI2c3ZtLVx1MDAzZXZjcHUpKVxuNDIyNzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQyMjg6XHRcbjQyMjk6XHRcdGd1YXJkKG11dGV4KShcdTAwMjZzZXYtXHUwMDNlZ3Vlc3RfcmVxX211dGV4KTtcbjQyMzA6XHRcbjQyMzE6XHRcdGlmIChrdm1fcmVhZF9ndWVzdChrdm0sIHJlcV9ncGEsIHNldi1cdTAwM2VndWVzdF9yZXFfYnVmLCBQQUdFX1NJWkUpKSB7XG40MjMyOlx0XHRcdHN2bV92bWdleGl0X2JhZF9pbnB1dChzdm0sIEdIQ0JfRVJSX0lOVkFMSURfSU5QVVQpO1xuNDIzMzpcdFx0XHRyZXR1cm4gMTtcbjQyMzQ6XHRcdH1cbjQyMzU6XHRcbjQyMzY6XHRcdGRhdGEuZ2N0eF9wYWRkciA9IF9fcHNwX3BhKHNldi1cdTAwM2VzbnBfY29udGV4dCk7XG40MjM3Olx0XHRkYXRhLnJlcV9wYWRkciA9IF9fcHNwX3BhKHNldi1cdTAwM2VndWVzdF9yZXFfYnVmKTtcbjQyMzg6XHRcdGRhdGEucmVzX3BhZGRyID0gX19wc3BfcGEoc2V2LVx1MDAzZWd1ZXN0X3Jlc3BfYnVmKTtcbjQyMzk6XHRcbjQyNDA6XHRcdC8qXG40MjQxOlx0XHQgKiBGaXJtd2FyZSBmYWlsdXJlcyBhcmUgcHJvcGFnYXRlZCBvbiB0byBndWVzdCwgYnV0IGFueSBvdGhlciBmYWlsdXJlXG40MjQyOlx0XHQgKiBjb25kaXRpb24gYWxvbmcgdGhlIHdheSBzaG91bGQgYmUgcmVwb3J0ZWQgdG8gdXNlcnNwYWNlLiBFLmcuIGlmXG40MjQzOlx0XHQgKiB0aGUgUFNQIGlzIGRlYWQgYW5kIGNvbW1hbmRzIGFyZSB0aW1pbmcgb3V0LlxuNDI0NDpcdFx0ICovXG40MjQ1Olx0XHRyZXQgPSBzZXZfaXNzdWVfY21kKGt2bSwgU0VWX0NNRF9TTlBfR1VFU1RfUkVRVUVTVCwgXHUwMDI2ZGF0YSwgXHUwMDI2ZndfZXJyKTtcbjQyNDY6XHRcdGlmIChyZXQgXHUwMDI2XHUwMDI2ICFmd19lcnIpXG40MjQ3Olx0XHRcdHJldHVybiByZXQ7XG40MjQ4Olx0XG40MjQ5Olx0XHRpZiAoa3ZtX3dyaXRlX2d1ZXN0KGt2bSwgcmVzcF9ncGEsIHNldi1cdTAwM2VndWVzdF9yZXNwX2J1ZiwgUEFHRV9TSVpFKSkge1xuNDI1MDpcdFx0XHRzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX0lOUFVUKTtcbjQyNTE6XHRcdFx0cmV0dXJuIDE7XG40MjUyOlx0XHR9XG40MjUzOlx0XG40MjU0Olx0XHQvKiBObyBhY3Rpb24gaXMgcmVxdWVzdGVkICpmcm9tIEtWTSogaWYgdGhlcmUgd2FzIGEgZmlybXdhcmUgZXJyb3IuICovXG40MjU1Olx0XHRzdm1fdm1nZXhpdF9ub19hY3Rpb24oc3ZtLCBTTlBfR1VFU1RfRVJSKDAsIGZ3X2VycikpO1xuNDI1NjpcdFxuNDI1NzpcdFx0LyogcmVzdW1lIGd1ZXN0ICovXG40MjU4Olx0XHRyZXR1cm4gMTtcbjQyNTk6XHR9XG40MjYwOlx0XG40MjYxOlx0c3RhdGljIGludCBzbnBfcmVxX2NlcnRzX2VycihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdTMyIHZtbV9lcnJvcilcbjQyNjI6XHR7XG40MjYzOlx0XHRnaGNiX3NldF9zd19leGl0X2luZm9fMihzdm0tXHUwMDNlc2V2X2VzLmdoY2IsIFNOUF9HVUVTVF9FUlIodm1tX2Vycm9yLCAwKSk7XG40MjY0Olx0XG40MjY1Olx0XHRyZXR1cm4gMTsgLyogcmVzdW1lIGd1ZXN0ICovXG40MjY2Olx0fVxuNDI2NzpcdFxuNDI2ODpcdHN0YXRpYyBpbnQgc25wX2NvbXBsZXRlX3JlcV9jZXJ0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG40MjY5Olx0e1xuNDI3MDpcdFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XG40MjcxOlx0XHRzdHJ1Y3Qgdm1jYl9jb250cm9sX2FyZWEgKmNvbnRyb2wgPSBcdTAwMjZzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sO1xuNDI3MjpcdFxuNDI3MzpcdFx0c3dpdGNoIChSRUFEX09OQ0UodmNwdS1cdTAwM2VydW4tXHUwMDNlc25wX3JlcV9jZXJ0cy5yZXQpKSB7XG40Mjc0Olx0XHRjYXNlIDA6XG40Mjc1Olx0XHRcdHJldHVybiBzbnBfaGFuZGxlX2d1ZXN0X3JlcShzdm0sIGNvbnRyb2wtXHUwMDNlZXhpdF9pbmZvXzEsXG40Mjc2Olx0XHRcdFx0XHRcdCAgICBjb250cm9sLVx1MDAzZWV4aXRfaW5mb18yKTtcbjQyNzc6XHRcdGNhc2UgRU5PU1BDOlxuNDI3ODpcdFx0XHR2Y3B1LVx1MDAzZWFyY2gucmVnc1tWQ1BVX1JFR1NfUkJYXSA9IHZjcHUtXHUwMDNlcnVuLVx1MDAzZXNucF9yZXFfY2VydHMubnBhZ2VzO1xuNDI3OTpcdFx0XHRyZXR1cm4gc25wX3JlcV9jZXJ0c19lcnIoc3ZtLCBTTlBfR1VFU1RfVk1NX0VSUl9JTlZBTElEX0xFTik7XG40MjgwOlx0XHRjYXNlIEVBR0FJTjpcbjQyODE6XHRcdFx0cmV0dXJuIHNucF9yZXFfY2VydHNfZXJyKHN2bSwgU05QX0dVRVNUX1ZNTV9FUlJfQlVTWSk7XG40MjgyOlx0XHRjYXNlIEVJTzpcbjQyODM6XHRcdFx0cmV0dXJuIHNucF9yZXFfY2VydHNfZXJyKHN2bSwgU05QX0dVRVNUX1ZNTV9FUlJfR0VORVJJQyk7XG40Mjg0Olx0XHRkZWZhdWx0OlxuNDI4NTpcdFx0XHRicmVhaztcbjQyODY6XHRcdH1cbjQyODc6XHRcbjQyODg6XHRcdHJldHVybiAtRUlOVkFMO1xuNDI4OTpcdH1cbjQyOTA6XHRcbjQyOTE6XHRzdGF0aWMgaW50IHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgZ3BhX3QgcmVxX2dwYSwgZ3BhX3QgcmVzcF9ncGEpXG40MjkyOlx0e1xuNDI5MzpcdFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gXHUwMDI2c3ZtLVx1MDAzZXZjcHU7XG40Mjk0Olx0XHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbjQyOTU6XHRcbjQyOTY6XHRcdHU4IG1zZ190eXBlO1xuNDI5NzpcdFxuNDI5ODpcdFx0aWYgKCFpc19zZXZfc25wX2d1ZXN0KHZjcHUpKVxuNDI5OTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQzMDA6XHRcbjQzMDE6XHRcdGlmIChrdm1fcmVhZF9ndWVzdChrdm0sIHJlcV9ncGEgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IHNucF9ndWVzdF9tc2dfaGRyLCBtc2dfdHlwZSksXG40MzAyOlx0XHRcdFx0ICAgXHUwMDI2bXNnX3R5cGUsIDEpKVxuNDMwMzpcdFx0XHRnb3RvIHJlcXVlc3RfaW52YWxpZDtcbjQzMDQ6XHRcbjQzMDU6XHRcdC8qXG40MzA2Olx0XHQgKiBBcyBwZXIgR0hDQiBzcGVjLCByZXF1ZXN0cyBvZiB0eXBlIE1TR19SRVBPUlRfUkVRIGFsc28gYWxsb3cgZm9yXG40MzA3Olx0XHQgKiBhZGRpdGlvbmFsIGNlcnRpZmljYXRlIGRhdGEgdG8gYmUgcHJvdmlkZWQgYWxvbmdzaWRlIHRoZSBhdHRlc3RhdGlvblxuNDMwODpcdFx0ICogcmVwb3J0IHZpYSB0aGUgZ3Vlc3QtcHJvdmlkZWQgZGF0YSBwYWdlcyBpbmRpY2F0ZWQgYnkgUkFYL1JCWC4gSWZcbjQzMDk6XHRcdCAqIHVzZXJzcGFjZSBlbmFibGVzIEtWTV9FWElUX1NOUF9SRVFfQ0VSVFMsIHRoZW4gZXhpdCB0byB1c2Vyc3BhY2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzczCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIFNlY3VyZSBOZXN0ZWQgUGFnaW5nIChTTlApIGNvbnRleHQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSBwdXJwb3NlIG9mIHRoZSBmdW5jdGlvbiwgYW5kIHdoYXQgZXh0ZXJuYWwgZ3Vlc3QgcmVxdWVzdHMgaXQgaXMgaGFuZGxpbmcsIGFuZCBpbiB3aGF0IGNvbnRleHQuIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgc29tZSBvZiB0aGUgY29tcGxleGl0eTsgSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBraW5kIG9mIGRpc3BhdGNoIG1lY2hhbmlzbSBvciBzd2l0Y2ggc3RhdGVtZW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0JiMzOTtzIGRvaW5nIHdpdGggdGhlc2UgZXh0ZXJuYWwgcmVxdWVzdHMsIHdoZXRoZXIgaXQmIzM5O3MgdmFsaWRhdGluZyB0aGVtLCB0cmFuc2xhdGluZyB0aGVtLCBmb3J3YXJkaW5nIHRoZW0sIG9yIGFjdHVhbGx5IHByb2Nlc3NpbmcgdGhlbS4gV2hhdCByZXNvdXJjZXMgaXMgaXQgdG91Y2hpbmc/IERvZXMgaXQgaW52b2x2ZSBhbnkgVk0gZXhpdHMgb3IgcGFnZSB0YWJsZSBtYW5pcHVsYXRpb25zPyBJIHdpbGwgbmVlZCB0byBsb29rIHRvIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGl0IG1pZ2h0IGJlIHVzaW5nIHRvIHVuZGVyc3RhbmQgaWYgaXQmIzM5O3Mgb3BlcmF0aW5nIG9uIGFueSBwZXItVk0gb3IgZ2xvYmFsIGRhdGEsIGFuZCBob3cgaXQgaGFuZGxlcyBjb25jdXJyZW5jeSBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgZ3Vlc3RzLiBUaGUgZmxvdyBvZiB0aGlzIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGdpdmUgbWUgYSBzb2xpZCBjbHVlLiBJJiMzOTtsbCBmb2N1cyBvbiB0aGUgZGF0YSBmbG93IGFuZCBhbnkgaW50ZXJhY3Rpb25zIHdpdGggdGhlIFNOUCYjMzk7cyBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZXMsIGJlY2F1c2UgdGhhdCYjMzk7cyB3aGVyZSB0aGUgbWFnaWMgaXMuIFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9zZXYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQzMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDMxMDpcdFx0ICogdG8gZ2l2ZSB1c2Vyc3BhY2UgYW4gb3Bwb3J0dW5pdHkgdG8gcHJvdmlkZSB0aGUgY2VydGlmaWNhdGUgZGF0YVxuNDMxMTpcdFx0ICogYmVmb3JlIGlzc3VpbmcvY29tcGxldGluZyB0aGUgYXR0ZXN0YXRpb24gcmVxdWVzdC4gT3RoZXJ3aXNlLCByZXR1cm5cbjQzMTI6XHRcdCAqIGFuIGVtcHR5IGNlcnRpZmljYXRlIHRhYmxlIGluIHRoZSBndWVzdC1wcm92aWRlZCBkYXRhIHBhZ2VzIGFuZFxuNDMxMzpcdFx0ICogaGFuZGxlIHRoZSBhdHRlc3RhdGlvbiByZXF1ZXN0IGltbWVkaWF0ZWx5LlxuNDMxNDpcdFx0ICovXG40MzE1Olx0XHRpZiAobXNnX3R5cGUgPT0gU05QX01TR19SRVBPUlRfUkVRKSB7XG40MzE2Olx0XHRcdHN0cnVjdCBrdm1fc2V2X2luZm8gKnNldiA9IFx1MDAyNnRvX2t2bV9zdm0oa3ZtKS1cdTAwM2VzZXZfaW5mbztcbjQzMTc6XHRcdFx0dTY0IGRhdGFfbnBhZ2VzO1xuNDMxODpcdFx0XHRncGFfdCBkYXRhX2dwYTtcbjQzMTk6XHRcbjQzMjA6XHRcdFx0aWYgKCFrdm1fZ2hjYl9yYXhfaXNfdmFsaWQoc3ZtKSB8fCAha3ZtX2doY2JfcmJ4X2lzX3ZhbGlkKHN2bSkpXG40MzIxOlx0XHRcdFx0Z290byByZXF1ZXN0X2ludmFsaWQ7XG40MzIyOlx0XG40MzIzOlx0XHRcdGRhdGFfZ3BhID0gdmNwdS1cdTAwM2VhcmNoLnJlZ3NbVkNQVV9SRUdTX1JBWF07XG40MzI0Olx0XHRcdGRhdGFfbnBhZ2VzID0gdmNwdS1cdTAwM2VhcmNoLnJlZ3NbVkNQVV9SRUdTX1JCWF07XG40MzI1Olx0XG40MzI2Olx0XHRcdGlmICghUEFHRV9BTElHTkVEKGRhdGFfZ3BhKSlcbjQzMjc6XHRcdFx0XHRnb3RvIHJlcXVlc3RfaW52YWxpZDtcbjQzMjg6XHRcbjQzMjk6XHRcdFx0aWYgKHNldi1cdTAwM2VzbnBfY2VydHNfZW5hYmxlZCkge1xuNDMzMDpcdFx0XHRcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZWV4aXRfcmVhc29uID0gS1ZNX0VYSVRfU05QX1JFUV9DRVJUUztcbjQzMzE6XHRcdFx0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VzbnBfcmVxX2NlcnRzLmdwYSA9IGRhdGFfZ3BhO1xuNDMzMjpcdFx0XHRcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZXNucF9yZXFfY2VydHMubnBhZ2VzID0gZGF0YV9ucGFnZXM7XG40MzMzOlx0XHRcdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlc25wX3JlcV9jZXJ0cy5yZXQgPSAwO1xuNDMzNDpcdFx0XHRcdHZjcHUtXHUwMDNlYXJjaC5jb21wbGV0ZV91c2Vyc3BhY2VfaW8gPSBzbnBfY29tcGxldGVfcmVxX2NlcnRzO1xuNDMzNTpcdFx0XHRcdHJldHVybiAwO1xuNDMzNjpcdFx0XHR9XG40MzM3Olx0XG40MzM4Olx0XHRcdC8qXG40MzM5Olx0XHRcdCAqIEFzIHBlciBHSENCIHNwZWMgKHNlZSBcJiMzNDtTTlAgRXh0ZW5kZWQgR3Vlc3QgUmVxdWVzdFwmIzM0OyksIHRoZVxuNDM0MDpcdFx0XHQgKiBjZXJ0aWZpY2F0ZSB0YWJsZSBpcyB0ZXJtaW5hdGVkIGJ5IDI0LWJ5dGVzIG9mIHplcm9lcy5cbjQzNDE6XHRcdFx0ICovXG40MzQyOlx0XHRcdGlmIChkYXRhX25wYWdlcyBcdTAwMjZcdTAwMjYga3ZtX2NsZWFyX2d1ZXN0KGt2bSwgZGF0YV9ncGEsIDI0KSlcbjQzNDM6XHRcdFx0XHRnb3RvIHJlcXVlc3RfaW52YWxpZDtcbjQzNDQ6XHRcdH1cbjQzNDU6XHRcbjQzNDY6XHRcdHJldHVybiBzbnBfaGFuZGxlX2d1ZXN0X3JlcShzdm0sIHJlcV9ncGEsIHJlc3BfZ3BhKTtcbjQzNDc6XHRcbjQzNDg6XHRyZXF1ZXN0X2ludmFsaWQ6XG40MzQ5Olx0XHRzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX0lOUFVUKTtcbjQzNTA6XHRcdHJldHVybiAxOyAvKiByZXN1bWUgZ3Vlc3QgKi9cbjQzNTE6XHR9XG40MzUyOlx0XG40MzUzOlx0c3RhdGljIGludCBzZXZfaGFuZGxlX3ZtZ2V4aXRfbXNyX3Byb3RvY29sKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxuNDM1NDpcdHtcbjQzNTU6XHRcdHN0cnVjdCB2bWNiX2NvbnRyb2xfYXJlYSAqY29udHJvbCA9IFx1MDAyNnN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2w7XG40MzU2Olx0XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBcdTAwMjZzdm0tXHUwMDNldmNwdTtcbjQzNTc6XHRcdHN0cnVjdCBrdm1fc2V2X2luZm8gKnNldiA9IHRvX2t2bV9zZXZfaW5mbyh2Y3B1LVx1MDAzZWt2bSk7XG40MzU4Olx0XHR1NjQgZ2hjYl9pbmZvO1xuNDM1OTpcdFx0aW50IHJldCA9IDE7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU1NgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4KCioqSW52ZXN0aWdhdGluZyBgc25wX2hhbmRsZV9ndWVzdF9yZXFgIGFuZCBgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxYCoqCgpSaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBhcm91bmQgdGhlc2UgZnVuY3Rpb25zLCBgc25wX2hhbmRsZV9ndWVzdF9yZXFgIGFuZCBgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxYC4gVGhlIHF1aWNrZXN0IHdheSB0byBkbyB0aGlzIGlzIHRvIHNlZSB3aGVyZSB0aGV5JiMzOTtyZSAqY2FsbGVkKiBmcm9tLiBJJiMzOTttIGdvaW5nIHRvIHJlYWNoIGZvciBgZ3JlcGAgYW5kIHNlYXJjaCB0aGUgY29kZWJhc2UgZm9yIGV2ZXJ5IGluc3RhbmNlIG9mIHRob3NlIGZ1bmN0aW9uIG5hbWVzLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgcHJldHR5IGNsZWFyIHBpY3R1cmUgb2YgdGhlaXIgZW50cnkgcG9pbnRzIGFuZCB0aGUgY29udGV4dCBpbiB3aGljaCB0aGV5JiMzOTtyZSBiZWluZyBpbnZva2VkLiBUaGF0IHNob3VsZCBiZSB0aGUgcGVyZmVjdCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGVpciByb2xlIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQmIzM5O3MgZ2V0IGNyYWNraW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NucF9oYW5kbGVfKGV4dF8pP2d1ZXN0X3JlcSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9zZXYuYz00MTQyPXN0YXRpYyBpbnQgc2V2X3NucF9hcF9jcmVhdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQyMTctXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQyMTg6c3RhdGljIGludCBzbnBfaGFuZGxlX2d1ZXN0X3JlcShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgZ3BhX3QgcmVxX2dwYSwgZ3BhX3QgcmVzcF9ncGEpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQyMTkte1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDI2OD1zdGF0aWMgaW50IHNucF9jb21wbGV0ZV9yZXFfY2VydHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDI3NC1cdGNhc2UgMDpcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDI3NTpcdFx0cmV0dXJuIHNucF9oYW5kbGVfZ3Vlc3RfcmVxKHN2bSwgY29udHJvbC1cdTAwM2VleGl0X2luZm9fMSxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDI3Ni1cdFx0XHRcdFx0ICAgIGNvbnRyb2wtXHUwMDNlZXhpdF9pbmZvXzIpO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDI5MC1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDI5MTpzdGF0aWMgaW50IHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgZ3BhX3QgcmVxX2dwYSwgZ3BhX3QgcmVzcF9ncGEpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQyOTIte1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDM0NS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDM0NjpcdHJldHVybiBzbnBfaGFuZGxlX2d1ZXN0X3JlcShzdm0sIHJlcV9ncGEsIHJlc3BfZ3BhKTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDM0Ny1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQ1MTA9aW50IHNldl9oYW5kbGVfdm1nZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NjgxLVx0XHRpZiAoY29udHJvbC1cdTAwM2VleGl0X2NvZGUgPT0gU1ZNX1ZNR0VYSVRfR1VFU1RfUkVRVUVTVClcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDY4MjpcdFx0XHRyZXR1cm4gc25wX2hhbmRsZV9ndWVzdF9yZXEoc3ZtLCBjb250cm9sLVx1MDAzZWV4aXRfaW5mb18xLFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NjgzLVx0XHRcdFx0XHRcdCAgICBjb250cm9sLVx1MDAzZWV4aXRfaW5mb18yKTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDY4NC1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDY4NTpcdFx0cmV0dXJuIHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcShzdm0sIGNvbnRyb2wtXHUwMDNlZXhpdF9pbmZvXzEsXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ2ODYtXHRcdFx0XHRcdFx0Y29udHJvbC1cdTAwM2VleGl0X2luZm9fMik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzUyOQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTRVYtU05QIEd1ZXN0IERldGVjdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGlzX3Nldl9zbnBfZ3Vlc3RgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgY3JpdGVyaWEgaXQmIzM5O3MgdXNpbmcgdG8gZGV0ZXJtaW5lIGlmIHdlJiMzOTtyZSBydW5uaW5nIGluIGFuIFNFVi1TTlAgZ3Vlc3QgZW52aXJvbm1lbnQuIE15IHByaW1hcnkgY29uY2VybiBoZXJlIGlzIHRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIHN0YW5kYXJkIHZpcnR1YWxpemF0aW9uLCBLVk0gd2l0aCBTVk0sIGFuZCB0aGUgZXhwbGljaXQgcmVxdWlyZW1lbnQgZm9yIHBoeXNpY2FsIEFNRCBTRVYtU05QIGhhcmR3YXJlLiBUaGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgd2UmIzM5O3JlIGdldHRpbmcgZmFsc2UgcG9zaXRpdmVzIG9yIG1pc3Npbmcgc29tZSBwb3RlbnRpYWwgY29uZmlndXJhdGlvbnMuCgpFc3NlbnRpYWxseSwgSSB3YW50IHRvIHRyYWNlIHRoZSBleGVjdXRpb24gb2YgYGlzX3Nldl9zbnBfZ3Vlc3RgIGFuZCBleGFtaW5lIHRoZSBTRVYtU05QIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyByZWxpYWJsZSB0aGlzIGNoZWNrIGlzIGluIGlkZW50aWZ5aW5nIHRydWUgU0VWLVNOUCBndWVzdHMgYWNyb3NzIHZhcmlvdXMgdmlydHVhbGl6YXRpb24gc2NlbmFyaW9zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZWRnZSBjYXNlcyB0byBlbnN1cmUgb3VyIGxvZ2ljIGlzIHJvYnVzdCwgc28gSSYjMzk7bGwgcHJvYmFibHkgc3BlbmQgYSBnb29kIGNodW5rIG9mIHRpbWUgZ29pbmcgdGhyb3VnaCBpdHMgaW1wbGVtZW50YXRpb25zLCBsb29raW5nIGZvciBhc3N1bXB0aW9ucywgYW5kIHZlcmlmeWluZyBpdHMgYWNjdXJhY3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lzX3Nldl9zbnBfZ3Vlc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzU0NT12b2lkIHNldl9mcmVlX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzU1OC1cdCAqL1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozNTU5Olx0aWYgKGlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkpIHtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzU2MC1cdFx0dTY0IHBmbiA9IF9fcGEoc3ZtLVx1MDAzZXNldl9lcy52bXNhKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQyMTg9c3RhdGljIGludCBzbnBfaGFuZGxlX2d1ZXN0X3JlcShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgZ3BhX3QgcmVxX2dwYSwgZ3BhX3QgcmVzcF9ncGEpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00MjI1LVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0MjI2Olx0aWYgKCFpc19zZXZfc25wX2d1ZXN0KFx1MDAyNnN2bS1cdTAwM2V2Y3B1KSlcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDIyNy1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00MjkxPXN0YXRpYyBpbnQgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBncGFfdCByZXFfZ3BhLCBncGFfdCByZXNwX2dwYSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQyOTctXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQyOTg6XHRpZiAoIWlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQyOTktXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDM1Mz1zdGF0aWMgaW50IHNldl9oYW5kbGVfdm1nZXhpdF9tc3JfcHJvdG9jb2woc3RydWN0IHZjcHVfc3ZtICpzdm0pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NDMyLVx0Y2FzZSBHSENCX01TUl9QUkVGX0dQQV9SRVE6XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ0MzM6XHRcdGlmICghaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSlcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDQzNC1cdFx0XHRnb3RvIG91dF90ZXJtaW5hdGU7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NDQzLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0NDQ0Olx0XHRpZiAoIWlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ0NDUtXHRcdFx0Z290byBvdXRfdGVybWluYXRlO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDQ1OC1cdGNhc2UgR0hDQl9NU1JfUFNDX1JFUTpcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDQ1OTpcdFx0aWYgKCFpc19zZXZfc25wX2d1ZXN0KHZjcHUpKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NDYwLVx0XHRcdGdvdG8gb3V0X3Rlcm1pbmF0ZTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQ1MTA9aW50IHNldl9oYW5kbGVfdm1nZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NTQzLVx0LyogU0VWLVNOUCBndWVzdCByZXF1aXJlcyB0aGF0IHRoZSBHSENCIEdQQSBtdXN0IGJlIHJlZ2lzdGVyZWQgKi9cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDU0NDpcdGlmIChpc19zZXZfc25wX2d1ZXN0KHZjcHUpIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NTQ1LVx0ICAgICFnaGNiX2dwYV9pc19yZWdpc3RlcmVkKHN2bSwgY29udHJvbC1cdTAwM2VnaGNiX2dwYSkpIHtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ1NTktXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ1NjA6XHRpZiAoaXNfc25wX29ubHlfdm1nZXhpdChjb250cm9sLVx1MDAzZWV4aXRfY29kZSkgXHUwMDI2XHUwMDI2ICFpc19zZXZfc25wX2d1ZXN0KHZjcHUpKSB7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ1NjEtXHRcdHZjcHVfdW5pbXBsKHZjcHUsIFwmIzM0O3ZtZ2V4aXQ6IGV4aXQgY29kZSAlI2xseCBpcyBTTlAtb25seVxcblwmIzM0Oyxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQ4NDY9dm9pZCBzZXZfaW5pdF92bWNiKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBib29sIGluaXRfZXZlbnQpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00ODU4LVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0ODU5Olx0aWYgKGluaXRfZXZlbnQgXHUwMDI2XHUwMDI2IGlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ4NjAtXHRcdHNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGUodmNwdSk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00ODkzPXZvaWQgc2V2X2VzX3ByZXBhcmVfc3dpdGNoX3RvX2d1ZXN0KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qgc2V2X2VzX3NhdmVfYXJlYSAqaG9zdHNhKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDkzMy1cdCAgICAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9ERUJVR19TV0FQKSBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDkzNDpcdCAgICAgaXNfc2V2X3NucF9ndWVzdChcdTAwMjZzdm0tXHUwMDNldmNwdSkpKSB7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ5MzUtXHRcdGhvc3RzYS1cdTAwM2VkcjBfYWRkcl9tYXNrID0gYW1kX2dldF9kcl9hZGRyX21hc2soMCk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz01MzIwPXN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqc2V2X2RlY3J5cHRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MzQwLVx0LyogQ2hlY2sgaWYgdGhlIFNFViBwb2xpY3kgYWxsb3dzIGRlYnVnZ2luZyAqL1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo1MzQxOlx0aWYgKGlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkpIHtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTM0Mi1cdFx0aWYgKCEoc2V2LVx1MDAzZXBvbGljeSBcdTAwMjYgU05QX1BPTElDWV9NQVNLX0RFQlVHKSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUzNDgtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjUzNDk6XHRpZiAoaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSkge1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MzUwLVx0XHRzdHJ1Y3Qgc2V2X2RhdGFfc25wX2RiZyBkYmcgPSB7MH07XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0xOTc0PXN0YXRpYyBpbnQgbnBmX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yMDIwLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyMDIxOlx0aWYgKGlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkgXHUwMDI2XHUwMDI2IChlcnJvcl9jb2RlIFx1MDAyNiBQRkVSUl9HVUVTVF9FTkNfTUFTSykpXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTIwMjItXHRcdGVycm9yX2NvZGUgfD0gUEZFUlJfUFJJVkFURV9BQ0NFU1M7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0zNDI2PXN0YXRpYyB2b2lkIGR1bXBfdm1jYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNDQwLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozNDQxOlx0dm1fdHlwZSA9IGlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkgPyBcJiMzNDtTRVYtU05QXCYjMzQ7IDpcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzQ0Mi1cdFx0ICBpc19zZXZfZXNfZ3Vlc3QodmNwdSkgPyBcJiMzNDtTRVYtRVNcJiMzNDsgOlxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9NDI0PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19zZXZfZXNfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDI4LVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo0Mjk6c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3Nldl9zbnBfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC00MzAte1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9NDM4PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19zZXZfZXNfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDQyLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo0NDM6c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3Nldl9zbnBfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC00NDQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDAzMQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIFNldi1TTlAgR3Vlc3QgQ2hlY2sqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBLVk0gaHlwZXJ2aXNvciBpcyBoYW5kbGluZyBTRVYtU05QIGd1ZXN0IGRldGVjdGlvbi4gSSYjMzk7bSBnb2luZyBzdHJhaWdodCB0byB0aGUgc291cmNlIOKAkyB0aGUgYGFyY2gveDg2L2t2bS9zdm0vc3ZtLmhgIGZpbGUuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBmb3IgYGlzX3Nldl9zbnBfZ3Vlc3RgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlIGh5cGVydmlzb3IgaXMgZGV0ZXJtaW5pbmcgaWYgYSBndWVzdCBpcyBydW5uaW5nIHVuZGVyIFNFVi1TTlAsIGFzIHRoYXQgaW1wYWN0cyBhIGxvdCBvZiBteSB3b3JrIHdpdGggc2VjdXJpdHkgbW9kdWxlcy4gS25vd2luZyB0aGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZXMgYW5kIGhvdyB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBhcHByb2FjaGVzIHRoZSBwcm9ibGVtLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhleSYjMzk7dmUgZ290Li4uIGhvcGVmdWxseSwgaXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc3ZtLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQyMDpcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19zZXZfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIDQyMTpcdHtcbiA0MjI6XHRcdHJldHVybiBfX19fc2V2X2d1ZXN0KHZjcHUtXHUwMDNla3ZtKTtcbiA0MjM6XHR9XG4gNDI0Olx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3Nldl9lc19ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gNDI1Olx0e1xuIDQyNjpcdFx0cmV0dXJuIF9fX19zZXZfZXNfZ3Vlc3QodmNwdS1cdTAwM2Vrdm0pO1xuIDQyNzpcdH1cbiA0Mjg6XHRcbiA0Mjk6XHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfc2V2X3NucF9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gNDMwOlx0e1xuIDQzMTpcdFx0cmV0dXJuIF9fX19zZXZfc25wX2d1ZXN0KHZjcHUtXHUwMDNla3ZtKTtcbiA0MzI6XHR9XG4gNDMzOlx0I2Vsc2VcbiA0MzQ6XHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfc2V2X2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiA0MzU6XHR7XG4gNDM2Olx0XHRyZXR1cm4gZmFsc2U7XG4gNDM3Olx0fVxuIDQzODpcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19zZXZfZXNfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIDQzOTpcdHtcbiA0NDA6XHRcdHJldHVybiBmYWxzZTtcbiA0NDE6XHR9XG4gNDQyOlx0XG4gNDQzOlx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3Nldl9zbnBfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIDQ0NDpcdHtcbiA0NDU6XHRcdHJldHVybiBmYWxzZTtcbiA0NDY6XHR9XG4gNDQ3Olx0I2VuZGlmXG4gNDQ4Olx0XG4gNDQ5Olx0c3RhdGljIGlubGluZSBib29sIGdoY2JfZ3BhX2lzX3JlZ2lzdGVyZWQoc3RydWN0IHZjcHVfc3ZtICpzdm0sIHU2NCB2YWwpXG4gNDUwOlx0e1xuIDQ1MTpcdFx0cmV0dXJuIHN2bS1cdTAwM2VzZXZfZXMuZ2hjYl9yZWdpc3RlcmVkX2dwYSA9PSB2YWw7XG4gNDUyOlx0fVxuIDQ1MzpcdFxuIDQ1NDpcdHN0YXRpYyBpbmxpbmUgdm9pZCB2bWNiX21hcmtfYWxsX2RpcnR5KHN0cnVjdCB2bWNiICp2bWNiKVxuIDQ1NTpcdHtcbiA0NTY6XHRcdHZtY2ItXHUwMDNlY29udHJvbC5jbGVhbiA9IDA7XG4gNDU3Olx0fVxuIDQ1ODpcdFxuIDQ1OTpcdHN0YXRpYyBpbmxpbmUgdm9pZCB2bWNiX21hcmtfYWxsX2NsZWFuKHN0cnVjdCB2bWNiICp2bWNiKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg2OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoZSBtYXR0ZXIsIHN1bW1hcml6ZWQgYXMgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyB0aGUgU0VWLVNOUCBWTSBJbml0aWFsaXphdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3Qgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIHRoaXMgYXJjaGl0ZWN0dXJlIGlzIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIGBfX19fc2V2X3NucF9ndWVzdGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHByZWNpc2VseSB3aGF0IHRoaXMgdmFyaWFibGUgb3Igc3RydWN0dXJlIHJlcHJlc2VudHMgd2l0aGluIHRoZSBjb250ZXh0IG9mIFNFVi1TTlAuIElzIGl0IGEgZmxhZywgYSBkZXNjcmlwdG9yLCBhIGRhdGEgc3RydWN0dXJlIHRoYXQgaG9sZHMgcmVsZXZhbnQgZ3Vlc3QgaW5mb3JtYXRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgbmFtZSBpdHNlbGYgc3VnZ2VzdHMgaXQmIzM5O3MgaW50aW1hdGVseSB0aWVkIHRvIHRoZSBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIHdpdGggU2VjdXJlIE5lc3RlZCBQYWdpbmcgKFNFVi1TTlApIGd1ZXN0LCBidXQgdGhlIHNwZWNpZmljcyBhcmUgY3J1Y2lhbC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB0cmVhdCB0aGlzIGFzIGFuIHVua25vd24gdmFyaWFibGUgYW5kIHRvIHRyeSB0byBkZXRlcm1pbmUgaXRzIHNjb3BlIGFuZCBhcHBsaWNhdGlvbiB3aXRoaW4gdGhlIFNFVi1TTlAgc3lzdGVtLgoKVGhlcmVmb3JlLCBteSBuZXh0IG1vdmUgaXMgdG8gaW5pdGlhdGUgYSBkZWVwIHNlYXJjaCB3aXRoaW4gdGhlIHJlbGV2YW50IGNvZGViYXNlIG9yIGRvY3VtZW50YXRpb24uIEkmIzM5O20gZ29pbmcgdG8gdHJhY2sgZG93biBldmVyeSBpbnN0YW5jZSBvZiBgX19fX3Nldl9zbnBfZ3Vlc3RgLiBIb3BlZnVsbHksIHRoaXMgd2lsbCBsZWFkIG1lIHRvIGl0cyBkZWZpbml0aW9uLCB1c2FnZSwgYW5kIGFueSBhc3NvY2lhdGVkIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLiBUaGUgZ29hbCBpcyB0byB0cmFjZSB0aGUgbGlmZWN5Y2xlIG9mIHRoaXMgdmFyaWFibGU6IHdoZXJlIGlzIGl0IGRlY2xhcmVkLCBob3cgaXMgaXQgYXNzaWduZWQgYSB2YWx1ZSwgd2hhdCBmdW5jdGlvbnMgb3IgbW9kdWxlcyBpbnRlcmFjdCB3aXRoIGl0LCBhbmQgd2hhdCBkYXRhIGRvZXMgaXQgY29udGFpbj8gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIHBpY3R1cmUgb2YgdGhlIFNFVi1TTlAgVk0gY3JlYXRpb24gb3IgaW5pdGlhbGl6YXRpb24uIFRoaXMgaXMgd2hlcmUgSSBzdGFydCB0byBzZWUgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMgd2l0aGluIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fX19zZXZfc25wX2d1ZXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTE0Nj1zdGF0aWMgYm9vbCBzZXZfc25wX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTE0OC1cdGt2bV9sb2NrZGVwX2Fzc2VydF9zZXZfbG9ja19oZWxkKGt2bSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjE0OTpcdHJldHVybiBfX19fc2V2X3NucF9ndWVzdChrdm0pO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xNTAtfVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzMzMz12b2lkIHNldl9ndWVzdF9tZW1vcnlfcmVjbGFpbWVkKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMzNDUtXHQgKi9cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzM0NjpcdGlmICghX19fX3Nldl9ndWVzdChrdm0pIHx8IF9fX19zZXZfc25wX2d1ZXN0KGt2bSkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMzNDctXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTUyNzA9dm9pZCBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTI4Mi1cdCAqL1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo1MjgzOlx0aWYgKCFfX19fc2V2X3NucF9ndWVzdChrdm0pKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01Mjg0LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD00MDU9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fX19zZXZfZXNfZ3Vlc3Qoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDExLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo0MTI6c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fX19zZXZfc25wX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDEzLXtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTQyOT1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfc2V2X3NucF9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTQzMC17XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjQzMTpcdHJldHVybiBfX19fc2V2X3NucF9ndWVzdCh2Y3B1LVx1MDAzZWt2bSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTQzMi19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODkzCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgYF9fX19zZXZfc25wX2d1ZXN0YCBmdW5jdGlvbiwgdGhpbmtpbmcgYWJvdXQgaXQgZnJvbSBteSBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIFNFVi1TTlAgR3Vlc3QgSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIGFuZCBkaXNzZWN0IHRoaXMgYF9fX19zZXZfc25wX2d1ZXN0YCBmdW5jdGlvbiB3aXRoaW4gdGhlIEFNRCBTRVYtU05QIGluZnJhc3RydWN0dXJlLiBJIGtub3cgaXQmIzM5O3MgZGVmaW5lZCBpbiBgYXJjaC94ODYva3ZtL3N2bS9zdm0uaGAsIGFuZCB0aGF0IHN1Z2dlc3RzIHRoaXMgaXMgdGhlIGNvcmUgb2YgaG93IHdlIGhhbmRsZSBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIHdpdGggU2VjdXJlIE5lc3RlZCBQYWdpbmcgd2l0aGluIHRoZSBLVk0gZW52aXJvbm1lbnQuCgpNeSBpbml0aWFsIHRob3VnaHRzIGFyZSB0aGF0IHRoaXMgaXMgYSBjcml0aWNhbCBwaWVjZSwgbGlrZWx5IHRoZSBlbnRyeSBwb2ludCBvciBhIGNlbnRyYWwgaGFuZGxlciBmb3IgU0VWLVNOUCBndWVzdCBvcGVyYXRpb25zLiBJdCYjMzk7cyBwcm9iYWJseSB0aGUgZnVuY3Rpb24gdGhhdCBLVk0gdXNlcyB0byBpbnRlcmZhY2Ugd2l0aCB0aGUgQU1EIFNlY3VyZSBQcm9jZXNzb3IuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBvcGVyYXRpb25zIGxpa2U6IHNldHRpbmcgdXAgdGhlIGd1ZXN0JiMzOTtzIG1lbW9yeSBlbmNyeXB0aW9uIGNvbnRleHQsIGhhbmRsaW5nIHBhZ2UgZmF1bHRzLCBtYW5hZ2luZyB0aGUgYXR0ZXN0YXRpb24gcHJvY2VzcywgYW5kIG1heWJlIGV2ZW4gZGVhbGluZyB3aXRoIHRoZSBpbnRyaWNhY2llcyBvZiBzZWN1cmUgbWlncmF0aW9uLiBJIHdhbnQgdG8gY2hlY2sgaG93IHRoZSBjb2RlIGRlYWxzIHdpdGggdGhlIHNwZWNpZmljIGNoYWxsZW5nZXMgb2YgbmVzdGVkIHBhZ2luZyBpbiBhbiBTRVYtU05QIGNvbnRleHQg4oCTIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGUgaG9zdCYjMzk7cyBhbmQgZ3Vlc3QmIzM5O3MgcGFnZSB0YWJsZXMgbXVzdCBiZSBjb21wbGV4LgoKSSYjMzk7bSBhbHNvIGN1cmlvdXMgYWJvdXQgdGhlIGBzdHJ1Y3Qga3ZtICprdm1gIHBhcmFtZXRlci4gVGhpcyBsaWtlbHkgZ2l2ZXMgdXMgYWNjZXNzIHRvIGFsbCB0aGUgS1ZNIGNvbnRleHQgYW5kIHN0YXRlIHdlIG5lZWQgdG8gcHJvcGVybHkgbWFuYWdlIHRoZSBndWVzdCwgc28gbGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHByZWNpc2VseSB3aGF0IGluZm9ybWF0aW9uIGl0IHByb3ZpZGVzLiBJ4oCZbSB0aGlua2luZyB0aGVyZSB3aWxsIGJlIGEgbG90IG9mIGNhbGxzIHRvIHRoZSBBTUQgU2VjdXJlIFByb2Nlc3Nvciwgc28gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGEgbG90IG9mIGlubGluZSBhc3NlbWJseSwgb3IgcGVyaGFwcyBjYWxscyB0byBzcGVjaWZpYyBkcml2ZXIgZnVuY3Rpb25zLiBJJiMzOTtsbCBiZSBwYXJ0aWN1bGFybHkga2VlbiB0byBzZWUgaG93IHRoZXkgaGFuZGxlIG1lbW9yeSBtYW5hZ2VtZW50IGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIGFuIFNOUCBndWVzdC4KCkxldCYjMzk7cyBnZXQgcmVhZGluZyBhbmQgc2VlIGhvdyB3ZWxsIG15IGFzc3VtcHRpb25zIGFsaWduIHdpdGggdGhlIHJlYWxpdHkhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9zdm0uaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDAwOlx0XG4gNDAxOlx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fX19zZXZfZ3Vlc3Qoc3RydWN0IGt2bSAqa3ZtKVxuIDQwMjpcdHtcbiA0MDM6XHRcdHJldHVybiB0b19rdm1fc2V2X2luZm8oa3ZtKS1cdTAwM2VhY3RpdmU7XG4gNDA0Olx0fVxuIDQwNTpcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX19fc2V2X2VzX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSlcbiA0MDY6XHR7XG4gNDA3Olx0XHRzdHJ1Y3Qga3ZtX3Nldl9pbmZvICpzZXYgPSB0b19rdm1fc2V2X2luZm8oa3ZtKTtcbiA0MDg6XHRcbiA0MDk6XHRcdHJldHVybiBzZXYtXHUwMDNlZXNfYWN0aXZlIFx1MDAyNlx1MDAyNiAhV0FSTl9PTl9PTkNFKCFzZXYtXHUwMDNlYWN0aXZlKTtcbiA0MTA6XHR9XG4gNDExOlx0XG4gNDEyOlx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fX19zZXZfc25wX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSlcbiA0MTM6XHR7XG4gNDE0Olx0XHRzdHJ1Y3Qga3ZtX3Nldl9pbmZvICpzZXYgPSB0b19rdm1fc2V2X2luZm8oa3ZtKTtcbiA0MTU6XHRcbiA0MTY6XHRcdHJldHVybiAoc2V2LVx1MDAzZXZtc2FfZmVhdHVyZXMgXHUwMDI2IFNWTV9TRVZfRkVBVF9TTlBfQUNUSVZFKSBcdTAwMjZcdTAwMjZcbiA0MTc6XHRcdCAgICAgICAhV0FSTl9PTl9PTkNFKCFfX19fc2V2X2VzX2d1ZXN0KGt2bSkpO1xuIDQxODpcdH1cbiA0MTk6XHRcbiA0MjA6XHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfc2V2X2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiA0MjE6XHR7XG4gNDIyOlx0XHRyZXR1cm4gX19fX3Nldl9ndWVzdCh2Y3B1LVx1MDAzZWt2bSk7XG4gNDIzOlx0fVxuIDQyNDpcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19zZXZfZXNfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIDQyNTpcdHtcbiA0MjY6XHRcdHJldHVybiBfX19fc2V2X2VzX2d1ZXN0KHZjcHUtXHUwMDNla3ZtKTtcbiA0Mjc6XHR9XG4gNDI4Olx0XG4gNDI5Olx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3Nldl9zbnBfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIDQzMDpcdHtcbiA0MzE6XHRcdHJldHVybiBfX19fc2V2X3NucF9ndWVzdCh2Y3B1LVx1MDAzZWt2bSk7XG4gNDMyOlx0fVxuIDQzMzpcdCNlbHNlXG4gNDM0Olx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3Nldl9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTMyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgSHlwb3RoZXNpczogS1ZNIFNWTSBhbmQgU0VWLVNOUCB2aWEgSW9jdGxzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgZnV6emluZyBLVk0mIzM5O3MgU1ZNIHdpdGggU0VWLVNOUC4gVGhlIGNvcmUgcXVlc3Rpb24gaXM6IGNhbiBJIGFjdHVhbGx5IGxldmVyYWdlIEtWTSBpb2N0bHMsIG9yIGV2ZW4gVk0gZXhlY3V0aW9uIGluIFFFTVUvU3l6a2FsbGVyLCB0byB0cmlnZ2VyIGFuZCB0aGVyZWZvcmUsIGZ1enogdGhlIFNFVi1TTlAgZnVuY3Rpb25hbGl0eT8KClJpZ2h0LCBTeXprYWxsZXIgYWxyZWFkeSBoZWF2aWx5IGV4ZXJjaXNlcyBLVk0uIEkga25vdyBpdCB0aHJvd3MgZXZlcnl0aGluZyBhdCB0aGUgYEtWTV9DUkVBVEVfVk1gLCBgS1ZNX01FTU9SWV9FTkNSWVBUX09QYCwgYEtWTV9SVU5gLCBhbmQgb3RoZXIgaW9jdGxzLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gQnV0IHRoZSByZWFsIGtleSBpcywgKndoaWNoKiBpb2N0bHMgc3BlY2lmaWNhbGx5IHRvdWNoIHRoZSBTRVYvU05QIGNvbW1hbmRzIG9yLCBtb3JlIGNyaXRpY2FsbHksIHRyaWdnZXIgYSBWTUdFWElUPyBUaGF0JiMzOTtzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBzdHVmZiBoYXBwZW5zLgoKSSYjMzk7dmUgZ290IGEgaHVuY2ggdGhhdCBgS1ZNX01FTU9SWV9FTkNSWVBUX09QYCwgYW5kIGZ1bmN0aW9ucyBsaWtlIGBzZXZfbWVtX2VuY19pb2N0bGAgb3IgYHNldl9oYW5kbGVfdm1nZXhpdGAgYXJlIHRoZSByZWxldmFudCB0YXJnZXRzLiBTbywgSSBuZWVkIHRvIGRpZyBpbnRvIHRob3NlLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIGZvY3VzZWQgc2VhcmNoIGZvciBgc2V2X2hhbmRsZV92bWdleGl0YCBpdHNlbGYsIG9yIG1heWJlIGBLVk1fRVhJVF9TTlBfUkVRX0NFUlRTYCBvciwgcGVyaGFwcyBtb3JlIGdlbmVyYWxseSwgY2FsbHMgdG8gYHNldl9pc3N1ZV9jbWRgLiBUaGF0IHNob3VsZCBnZXQgbWUgcG9pbnRlZCBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZSBhbmQgc2VlIHdoYXQgc3VyZmFjZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nldl9oYW5kbGVfdm1nZXhpdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9zZXYuYz00MjkxPXN0YXRpYyBpbnQgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBncGFfdCByZXFfZ3BhLCBncGFfdCByZXNwX2dwYSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQzNTItXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQzNTM6c3RhdGljIGludCBzZXZfaGFuZGxlX3ZtZ2V4aXRfbXNyX3Byb3RvY29sKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00MzU0LXtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQ0OTc9c3RhdGljIGJvb2wgaXNfc25wX29ubHlfdm1nZXhpdCh1NjQgZXhpdF9jb2RlKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDUwOS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDUxMDppbnQgc2V2X2hhbmRsZV92bWdleGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDUxMS17XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NTE4LVx0aWYgKGdoY2JfZ3BhIFx1MDAyNiBHSENCX01TUl9JTkZPX01BU0spXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ1MTk6XHRcdHJldHVybiBzZXZfaGFuZGxlX3ZtZ2V4aXRfbXNyX3Byb3RvY29sKHN2bSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ1MjAtXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0zMzQ3PXN0YXRpYyBpbnQgKCpjb25zdCBzdm1fZXhpdF9oYW5kbGVyc1tdKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpID0ge1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzQyMS0jaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjM0MjI6XHRbU1ZNX0VYSVRfVk1HRVhJVF1cdFx0XHQ9IHNldl9oYW5kbGVfdm1nZXhpdCxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzQyMy0jZW5kaWZcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTM2MzY9aW50IHN2bV9pbnZva2VfZXhpdF9oYW5kbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IF9fZXhpdF9jb2RlKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzY2NC1cdGVsc2UgaWYgKGV4aXRfY29kZSA9PSBTVk1fRVhJVF9WTUdFWElUKVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozNjY1Olx0XHRyZXR1cm4gc2V2X2hhbmRsZV92bWdleGl0KHZjcHUpO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNjY2LSNlbmRpZlxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9OTkxPXZvaWQgc2V2X2d1ZXN0X21lbW9yeV9yZWNsYWltZWQoc3RydWN0IGt2bSAqa3ZtKTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6OTkyOmludCBzZXZfaGFuZGxlX3ZtZ2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtOTkzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDI0NgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDQ5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEVycm9yIEhhbmRsaW5nIGluIGBzZXZfaGFuZGxlX3ZtZ2V4aXRgKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgc2V2X2hhbmRsZV92bWdleGl0YCBpcyB0aGUgZXhpdCBoYW5kbGVyIGZvciBgU1ZNX0VYSVRfVk1HRVhJVGAsIHNwZWNpZmljYWxseSBmb3IgQU1EJiMzOTtzIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgd2l0aGluIEtWTS4gV2hlbiBhIGd1ZXN0IHRyaWdnZXJzIGEgVk1HRVhJVCB3aXRoIGNlcnRhaW4gY29kZXMsIHNwZWNpZmljYWxseSBgU1ZNX1ZNR0VYSVRfR1VFU1RfUkVRVUVTVGAgb3IgYFNWTV9WTUdFWElUX0VYVF9HVUVTVF9SRVFVRVNUYCwgaXQgY2FsbHMgZWl0aGVyIGBzbnBfaGFuZGxlX2d1ZXN0X3JlcWAgb3IgYHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcWAuIEkgYWxzbyBrbm93IHRoYXQgYHNucF9jb21wbGV0ZV9yZXFfY2VydHNgIOKAkyB3aGljaCBpdHNlbGYgcmVsaWVzIG9uIGBzbnBfaGFuZGxlX2d1ZXN0X3JlcWAg4oCTIGlzIHRyaWdnZXJlZCBieSBgdmNwdS0mZ3Q7YXJjaC5jb21wbGV0ZV91c2Vyc3BhY2VfaW9gIGFmdGVyIHVzZXJzcGFjZSBjb21wbGV0ZXMgYEtWTV9FWElUX1NOUF9SRVFfQ0VSVFNgIGFuZCBjYWxscyBgaW9jdGwodmNwdV9mZCwgS1ZNX1JVTilgLgoKTm93LCB0aGUgcGF0Y2gmIzM5O3MgY2hhbmdlcyBhcmUgY3J1Y2lhbC4gSSBuZWVkIHRvIGZvY3VzIG9uIGhvdyB0aGUgZXJyb3IgaGFuZGxpbmcgaGFzIGJlZW4gbW9kaWZpZWQgd2l0aGluIGBzbnBfaGFuZGxlX2d1ZXN0X3JlcWAgYW5kIGBzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXFgLgoKUHJldmlvdXNseSwgZXJyb3JzIGZyb20gYGt2bV9yZWFkX2d1ZXN0YCBhbmQgYGt2bV93cml0ZV9ndWVzdGAgd2l0aGluIGBzbnBfaGFuZGxlX2d1ZXN0X3JlcWAgd291bGQgcHJvcGFnYXRlIGFzIGAtRUlPYCwgd2hpY2ggZXNzZW50aWFsbHkgbWVhbnMgYSBnZW5lcmFsIEkvTyBlcnJvciB3b3VsZCBiZSByZXR1cm5lZCBhbGwgdGhlIHdheSB1cCB0byBLVk0gdXNlcnNwYWNlIHZpYSBga3ZtX3ZjcHVfcnVuYC4gTm93LCB0aGUgcGF0Y2ggcmVkaXJlY3RzIHRoZXNlIGVycm9ycy4gSW5zdGVhZCBvZiByZXR1cm5pbmcgYC1FSU9gLCBmYWlsdXJlcyBub3cgY2FsbCBgc3ZtX3ZtZ2V4aXRfYmFkX2lucHV0KHN2bSwgR0hDQl9FUlJfSU5WQUxJRF9JTlBVVCk7IHJldHVybiAxO2AuIFRoaXMgaXMgc2lnbmlmaWNhbnQgYmVjYXVzZSBpdCYjMzk7cyB3cml0aW5nIGFuIGVycm9yIGNvZGUgaW50byB0aGUgR0hDQiBhbmQgdGhlbiByZXN1bWluZyB0aGUgZ3Vlc3QgaW5zdGVhZCBvZiBleGl0aW5nIHRocm91Z2ggdGhlIHN0YW5kYXJkIEtWTSBlcnJvciBwYXRoLgoKVGhlIHNhbWUgcGF0dGVybiBhcHBsaWVzIHRvIGBzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXFgLiBFcnJvcnMgZnJvbSBga3ZtX3JlYWRfZ3Vlc3RgIG9mIHRoZSBgbXNnX3R5cGVgIGFuZCBmcm9tIGBrdm1fY2xlYXJfZ3Vlc3RgIG9mIHRoZSBjZXJ0aWZpY2F0ZSB0YWJsZSBhbHNvIHByZXZpb3VzbHkgcmV0dXJuZWQgYC1FSU9gLiBUaGUgcGF0Y2ggY2hhbmdlcyB0aGVzZSB0byBqdW1wIHRvIGByZXF1ZXN0X2ludmFsaWRgLCB3aGljaCB0aGVuIGNhbGxzIGBzdm1fdm1nZXhpdF9iYWRfaW5wdXRgIGluIHRoZSBzYW1lIHdheSwgcGxhY2luZyBhbiBlcnJvciBpbiB0aGUgR0hDQiBhbmQgcmVzdW1pbmcuIFRoaXMgaW5kaWNhdGVzIGFuIGVmZm9ydCB0byBrZWVwIHRoZSBndWVzdCBydW5uaW5nLCBldmVuIGluIHRoZSBwcmVzZW5jZSBvZiB0aGVzZSBlcnJvcnMsIHdoaWNoIGlzIGludGVyZXN0aW5nLgoKVG8gY29tcGxldGUgdGhpcyBhbmFseXNpcywgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBjaGVjayB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgZm9yIGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBuZXcgY29uZmlndXJhdGlvbiBpbXBsaWNhdGlvbnMuIEkgc2hvdWxkIHNlYXJjaCB3aXRoaW4gYGFyY2gveDg2L2t2bS9LY29uZmlnYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7S1ZNX0FNRF9TRVZ8S1ZNX0FNRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MjA9Y29uZmlnIEtWTV9YODZcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxOlx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxuYXJjaC94ODYva3ZtL0tjb25maWctMjItXHRzZWxlY3QgS1ZNX0NPTU1PTlxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTEzND1jb25maWcgS1ZNX0lOVEVMX1REWFxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTgtXHRkZWZhdWx0IHlcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1OTpcdGRlcGVuZHMgb24gS1ZNX0FNRCBcdTAwMjZcdTAwMjYgWDg2XzY0XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNjA6XHRkZXBlbmRzIG9uIENSWVBUT19ERVZfU1BfUFNQIFx1MDAyNlx1MDAyNiAhKEtWTV9BTUQ9eSBcdTAwMjZcdTAwMjYgQ1JZUFRPX0RFVl9DQ1BfREQ9bSlcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE2MS1cdHNlbGVjdCBBUkNIX0hBU19DQ19QTEFURk9STVxuLS1cbmFyY2gveDg2L2t2bS9NYWtlZmlsZT0yND1rdm0tYW1kLXlcdFx0JiM0Mzs9IHN2bS9zdm0ubyBzdm0vdm1lbnRlci5vIHN2bS9wbXUubyBzdm0vbmVzdGVkLm8gc3ZtL2F2aWMub1xuYXJjaC94ODYva3ZtL01ha2VmaWxlLTI1LVxuYXJjaC94ODYva3ZtL01ha2VmaWxlOjI2Omt2bS1hbWQtJChDT05GSUdfS1ZNX0FNRF9TRVYpXHQmIzQzOz0gc3ZtL3Nldi5vXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtMjcta3ZtLWFtZC0kKENPTkZJR19LVk1fSFlQRVJWKVx0JiM0Mzs9IHN2bS9oeXBlcnYub1xuLS1cbmFyY2gveDg2L2t2bS9NYWtlZmlsZT0zNj1vYmotJChDT05GSUdfS1ZNX0lOVEVMKVx0JiM0Mzs9IGt2bS1pbnRlbC5vXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6Mzc6b2JqLSQoQ09ORklHX0tWTV9BTUQpXHQmIzQzOz0ga3ZtLWFtZC5vXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtMzgtXG4tLVxuYXJjaC94ODYva3ZtL2t2bS1hc20tb2Zmc2V0cy5jPTEzPXN0YXRpYyB2b2lkIF9fdXNlZCBjb21tb24odm9pZClcbmFyY2gveDg2L2t2bS9rdm0tYXNtLW9mZnNldHMuYy0xNC17XG5hcmNoL3g4Ni9rdm0va3ZtLWFzbS1vZmZzZXRzLmM6MTU6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfS1ZNX0FNRCkpIHtcbmFyY2gveDg2L2t2bS9rdm0tYXNtLW9mZnNldHMuYy0xNi1cdFx0QkxBTksoKTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTMwODY9dm9pZCBfX2luaXQgc2V2X2hhcmR3YXJlX3NldHVwKHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMTE2LVx0ICovXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMxMTc6XHRpZiAoSVNfQlVJTFRJTihDT05GSUdfS1ZNX0FNRCkgXHUwMDI2XHUwMDI2IHNldl9tb2R1bGVfaW5pdCgpKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMTE4LVx0XHRnb3RvIG91dDtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTMzNDc9c3RhdGljIGludCAoKmNvbnN0IHN2bV9leGl0X2hhbmRsZXJzW10pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkgPSB7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNDIwLVx0W1NWTV9FWElUX0FWSUNfVU5BQ0NFTEVSQVRFRF9BQ0NFU1NdXHQ9IGF2aWNfdW5hY2NlbGVyYXRlZF9hY2Nlc3NfaW50ZXJjZXB0aW9uLFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozNDIxOiNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzQyMi1cdFtTVk1fRVhJVF9WTUdFWElUXVx0XHRcdD0gc2V2X2hhbmRsZV92bWdleGl0LFxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MzYzNj1pbnQgc3ZtX2ludm9rZV9leGl0X2hhbmRsZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgX19leGl0X2NvZGUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNjYyLVx0XHRyZXR1cm4gbnBmX2ludGVyY2VwdGlvbih2Y3B1KTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MzY2MzojaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM2NjQtXHRlbHNlIGlmIChleGl0X2NvZGUgPT0gU1ZNX0VYSVRfVk1HRVhJVClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTQ3MDQ9c3RhdGljIGJvb2wgc3ZtX2hhc19lbXVsYXRlZF9tc3Ioc3RydWN0IGt2bSAqa3ZtLCB1MzIgaW5kZXgpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00NzEzLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo0NzE0OiNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDcxNS1cdFx0Lypcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTUzMjg9c3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NDQyLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo1NDQzOiNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTQ0NC1cdC52Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uID0gc2V2X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24sXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD02Nj1lbnVtIHtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTk3LVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo5ODojaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTk5LXN0cnVjdCBrdm1fc2V2X2luZm8ge1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9MTI3PXN0cnVjdCBrdm1fc3ZtIHtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTEzNS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6MTM2OiNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMTM3LVx0c3RydWN0IGt2bV9zZXZfaW5mbyBzZXZfaW5mbztcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTM5MD1zdGF0aWMgX19hbHdheXNfaW5saW5lIHN0cnVjdCBrdm1fc3ZtICp0b19rdm1fc3ZtKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTM5NC1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6Mzk1OiNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMzk2LXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IGt2bV9zZXZfaW5mbyAqdG9fa3ZtX3Nldl9pbmZvKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTk4MD12b2lkIHNldl9lc191bm1hcF9naGNiKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtOTgxLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo5ODI6I2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC05ODMtYm9vbCBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vdm1lbnRlci5TPTIxMD1TWU1fRlVOQ19FTkQoX19zdm1fdmNwdV9ydW4pXG5hcmNoL3g4Ni9rdm0vc3ZtL3ZtZW50ZXIuUy0yMTEtXG5hcmNoL3g4Ni9rdm0vc3ZtL3ZtZW50ZXIuUzoyMTI6I2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL3N2bS92bWVudGVyLlMtMjEzLVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vdm1lbnRlci5TPTI4Mz1TWU1fRlVOQ19FTkQoX19zdm1fc2V2X2VzX3ZjcHVfcnVuKVxuYXJjaC94ODYva3ZtL3N2bS92bWVudGVyLlM6Mjg0OiNlbmRpZiAvKiBDT05GSUdfS1ZNX0FNRF9TRVYgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0OTkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtWTS1BTUQgU0VWIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGBDT05GSUdfS1ZNX0FNRF9TRVZgIGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBJIGtub3cgdGhpcyBpbnRpbWF0ZWx5OyBpdCYjMzk7cyB0aGUgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiBzdXBwb3J0IGZvciBBTUQgcHJvY2Vzc29ycywgYSBjcml0aWNhbCBjb21wb25lbnQuIFNvLCBJIG5lZWQgdG8gdmVyaWZ5IGl0cyBjb25maWd1cmF0aW9uLgoKRmlyc3QsIEkgc2VlIHRoYXQgYEtWTV9BTURgIGFuZCBgWDg2XzY0YCBhcmUgcmVxdWlyZWQsIHRoYXQgbWFrZXMgc2Vuc2UgLSBBTUQgcGxhdGZvcm0gYW5kIDY0LWJpdCBhcmNoaXRlY3R1cmUgYXJlIGV4cGVjdGVkLiBBbHNvLCBgQ1JZUFRPX0RFVl9TUF9QU1BgIGlzIG5lZWRlZC4gVGhhdOKAmXMgcHJvYmFibHkgdGhlIEFNRCBTZWN1cmUgUHJvY2Vzc29yLCBvciBQU1AsIGNyeXB0byBkZXZpY2UgZHJpdmVyLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGF0LiBGaW5hbGx5LCB0aGVyZSYjMzk7cyBhIG5lZ2F0aW9uOiBgIShLVk1fQU1EPXkgJmFtcDsmYW1wOyBDUllQVE9fREVWX0NDUF9ERD1tKWAuIE1lYW5pbmcsIGl0JiMzOTtzIG5vdCBhbGxvd2VkIGZvciBLVk1fQU1EIHRvIGJlICYjMzk7eSYjMzk7IEFORCBgQ1JZUFRPX0RFVl9DQ1BfRERgIHRvIGJlIGEgbW9kdWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBDUllQVE9fREVWX0NDUF9ERGAgYWN0dWFsbHkgaXMgYW5kIHdoeSBpdCBjYW5ub3QgYmUgYSBtb2R1bGUgaW4gdGhpcyBjb250ZXh0LgoKUmlnaHQuIEkgbmVlZCB0byBkZWx2ZSBpbnRvIHRoZSBgZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWdgIGZpbGUgdG8gc2VlIHdoYXQgYENPTkZJR19DUllQVE9fREVWX1NQX1BTUGAgZGVwZW5kcyBvbiwgYW5kIHVuZGVyc3RhbmQgdGhpcyBkZXBlbmRlbmN5IGNoYWluIGZ1bGx5LiBUaGlzIHdpbGwgaGVscCBtZSBncmFzcCB0aGUgaW1wbGljYXRpb25zIGZvciB0aGUgb3ZlcmFsbCBLVk0tQU1EIFNFViBjb25maWd1cmF0aW9uLiBMZXQgbWUgcXVpY2tseSBncmFiIHRoZSBLY29uZmlnIGZpbGUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENSWVBUT19ERVZfU1BfUFNQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnPTIzPWNvbmZpZyBDUllQVE9fREVWX0NDUF9DUllQVE9cbi0tXG5kcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZy0zNy1cbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnOjM4OmNvbmZpZyBDUllQVE9fREVWX1NQX1BTUFxuZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWctMzktXHRib29sIFwmIzM0O1BsYXRmb3JtIFNlY3VyaXR5IFByb2Nlc3NvciAoUFNQKSBkZXZpY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgwNDMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgQ3J5cHRvIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBgZHJpdmVycy9jcnlwdG8vY2NwL2AgZGlyZWN0b3J5LCBzcGVjaWZpY2FsbHkgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgdGhlIHJlbGV2YW50IHNldHRpbmdzIGFyZSBwcm9iYWJseSBkZWZpbmVkIGluIHRoZSBgS2NvbmZpZ2AgZmlsZSB3aXRoaW4gdGhhdCBkaXJlY3RvcnkuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGFyb3VuZCBsaW5lIDM4LCBsaWtlbHkgd2hlcmUgY29yZSBvcHRpb25zIGFyZSBkZWZpbmVkLiBUaGlzIHdvdWxkIGdpdmUgbWUgdGhlIGJhc2UgZGVmaW5pdGlvbnMgSSBuZWVkIHRvIGV4cGxvcmUuIFRoaXMgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBkcml2ZXIgaXMgY29uZmlndXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjU6XHRcdGRlZmF1bHQgbVxuICAyNjpcdFx0ZGVwZW5kcyBvbiBDUllQVE9fREVWX0NDUF9ERFxuICAyNzpcdFx0ZGVwZW5kcyBvbiBDUllQVE9fREVWX1NQX0NDUFxuICAyODpcdFx0c2VsZWN0IENSWVBUT19IQVNIXG4gIDI5Olx0XHRzZWxlY3QgQ1JZUFRPX1NLQ0lQSEVSXG4gIDMwOlx0XHRzZWxlY3QgQ1JZUFRPX0FVVEhFTkNcbiAgMzE6XHRcdHNlbGVjdCBDUllQVE9fUlNBXG4gIDMyOlx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9BRVNcbiAgMzM6XHRcdGhlbHBcbiAgMzQ6XHRcdCAgU3VwcG9ydCBmb3IgdXNpbmcgdGhlIGNyeXB0b2dyYXBoaWMgQVBJIHdpdGggdGhlIEFNRCBDcnlwdG9ncmFwaGljXG4gIDM1Olx0XHQgIENvcHJvY2Vzc29yLiBUaGlzIG1vZHVsZSBzdXBwb3J0cyBvZmZsb2FkIG9mIFNIQSBhbmQgQUVTIGFsZ29yaXRobXMuXG4gIDM2Olx0XHQgIElmIHlvdSBjaG9vc2UgJiMzOTtNJiMzOTsgaGVyZSwgdGhpcyBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2NwX2NyeXB0by5cbiAgMzc6XHRcbiAgMzg6XHRjb25maWcgQ1JZUFRPX0RFVl9TUF9QU1BcbiAgMzk6XHRcdGJvb2wgXCYjMzQ7UGxhdGZvcm0gU2VjdXJpdHkgUHJvY2Vzc29yIChQU1ApIGRldmljZVwmIzM0O1xuICA0MDpcdFx0ZGVmYXVsdCB5XG4gIDQxOlx0XHRkZXBlbmRzIG9uIENSWVBUT19ERVZfQ0NQX0REIFx1MDAyNlx1MDAyNiBYODZfNjQgXHUwMDI2XHUwMDI2IEFNRF9JT01NVVxuICA0MjpcdFx0c2VsZWN0IFBDSV9UU00gaWYgUENJXG4gIDQzOlx0XHRoZWxwXG4gIDQ0Olx0XHQgUHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgQU1EIFBsYXRmb3JtIFNlY3VyaXR5IFByb2Nlc3NvciAoUFNQKS5cbiAgNDU6XHRcdCBUaGUgUFNQIGlzIGEgZGVkaWNhdGVkIHByb2Nlc3NvciB0aGF0IHByb3ZpZGVzIHN1cHBvcnQgZm9yIGtleVxuICA0NjpcdFx0IG1hbmFnZW1lbnQgY29tbWFuZHMgaW4gU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBtb2RlLFxuICA0NzpcdFx0IGFsb25nIHdpdGggc29mdHdhcmUtYmFzZWQgVHJ1c3RlZCBFeGVjdXRpb24gRW52aXJvbm1lbnQgKFRFRSkgdG9cbiAgNDg6XHRcdCBlbmFibGUgdGhpcmQtcGFydHkgdHJ1c3RlZCBhcHBsaWNhdGlvbnMuXG4gIDQ5Olx0XG4gIDUwOlx0Y29uZmlnIENSWVBUT19ERVZfQ0NQX0RFQlVHRlNcbiAgNTE6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIENDUCBJbnRlcm5hbHMgaW4gRGVidWdGU1wmIzM0O1xuICA1MjpcdFx0ZGVmYXVsdCBuXG4gIDUzOlx0XHRkZXBlbmRzIG9uIENSWVBUT19ERVZfU1BfQ0NQXG4gIDU0Olx0XHRoZWxwXG4gIDU1Olx0XHQgIEV4cG9zZSBDQ1AgZGV2aWNlIGluZm9ybWF0aW9uIHN1Y2ggYXMgb3BlcmF0aW9uIHN0YXRpc3RpY3MsIGZlYXR1cmVcbiAgNTY6XHRcdCAgaW5mb3JtYXRpb24sIGFuZCBkZXNjcmlwdG9yIHF1ZXVlIGNvbnRlbnRzLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODY4NAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDQ0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNLUFNRCBTRVYgRnV6emluZyBSZWFjaGFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgd2UgaGF2ZSBhIGxpc3Qgb2YgcG90ZW50aWFsbHkgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zOiBgQ09ORklHX0tWTV9BTURgLCBgQ09ORklHX0tWTV9BTURfU0VWYCwgYENPTkZJR19DUllQVE9fREVWX1NQX1BTUGAsIGBDT05GSUdfQ1JZUFRPX0RFVl9DQ1BfRERgLCBhbmQgYENPTkZJR19BTURfSU9NTVVgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGhpZGRlbiBkZXBlbmRlbmNpZXMuCgpOb3csIGZvY3VzaW5nIG9uIGBLVk1fQU1EX1NFVmAsIHRoZSBpbW1lZGlhdGUgcHJlcmVxdWlzaXRlcyBzZWVtIHRvIGJlIGBLVk1fQU1EYCwgYENSWVBUT19ERVZfU1BfUFNQYCwgYENSWVBUT19ERVZfQ0NQX0REYCwgYEFNRF9JT01NVWAsIGFuZCwgb2J2aW91c2x5LCBgWDg2XzY0YCBnaXZlbiB0aGUgQU1ENjQgdGFyZ2V0LiBUaGF0IG1ha2VzIHNlbnNlLgoKVGhlIHJlYWwgcXVlc3Rpb24gaXMsIGlzIHRoaXMgY29kZSByZWFjaGFibGUgYW5kIHRoZXJlZm9yZSBmdXp6YWJsZT8gVGhlIGluc3RydWN0aW9ucyBlbXBoYXNpemUgcmVhY2hhYmlsaXR5IGFzIHRoZSBrZXkgY3JpdGVyaW9uLiBUaGV5IHN0YXRlIGZ1enppbmcgaXMgb25seSBlZmZlY3RpdmUgZm9yIGNvZGUgdGhhdCAqYWN0dWFsbHkqIGV4ZWN1dGVzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCB1c2luZyBzb2Z0d2FyZSBlbXVsYXRlZCBkZXZpY2VzLgoKVGhlIGNyaXRpY2FsIHVuY2VydGFpbnR5IGhlcmUgaXMgd2hldGhlciBBTUQgU0VWL1NFVi1TTlAgb3BlcmF0ZXMgaW4gdGhlc2Ugc3RhbmRhcmQgdmlydHVhbGl6ZWQgY29udGV4dHMsIG9yIGlmIGl0IGRlbWFuZHMgbmVzdGVkIHZpcnR1YWxpemF0aW9uIG9yIHNwZWNpZmljIFFFTVUgY29uZmlndXJhdGlvbnMuIENhbiBLVk0gYmUgZWZmZWN0aXZlbHkgZnV6emVkIGluIGEgdHlwaWNhbCBRRU1VIG9yIEdDRSBzZXR1cD8KCk15IGV4cGVyaWVuY2Ugd2l0aCBTeXprYWxsZXIgY29tZXMgaW50byBwbGF5IGhlcmUuIFdlJiMzOTtyZSBydW5uaW5nIFN5emthbGxlciBpbnN0YW5jZXMgKndpdGhpbiogUUVNVSBvciBHQ0UgVk1zLiBTeXprYWxsZXIgaGFzIGRlc2NyaXB0aW9ucyBmb3IgZnVuY3Rpb25zIGxpa2UgYHN5el9rdm1fc2V0dXBfY3B1YCBhbmQgYGlvY3RsJEtWTV8qYC4gU28sIGV2ZW4gd2l0aG91dCAqcGh5c2ljYWwqIFNFVi1TTlAgaGFyZHdhcmUgb24gdGhlIGhvc3QsIGlzIEtWTSBjb2RlIHN0aWxsIHJlYWNoYWJsZSB2aWEgdGhlc2UgbWVjaGFuaXNtcz8gRG9lcyBTRVYtU05QICpyZXF1aXJlKiB0aGUgaG9zdCB0byBoYXZlIHBoeXNpY2FsIFNFVi1TTlAgaGFyZHdhcmU/CgpJIG5lZWQgdG8gZGl2ZSBkZWVwZXIuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCBgc2V2X2hhcmR3YXJlX3NldHVwYCBhbmQgYHNldl9zbnBfaW5pdGAgaW4gYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgIHRvIHNlZSBpZiB0aG9zZSBmdW5jdGlvbnMgcHJvdmlkZSBpbnNpZ2h0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2V2X3NucF9zdXBwb3J0ZWR8c25wX2hhbmRsZV9ndWVzdF9yZXEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzA4Nj12b2lkIF9faW5pdCBzZXZfaGFyZHdhcmVfc2V0dXAodm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMwODktXHRzdHJ1Y3Qgc2V2X3BsYXRmb3JtX2luaXRfYXJncyBpbml0X2FyZ3MgPSB7MH07XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMwOTA6XHRib29sIHNldl9zbnBfc3VwcG9ydGVkID0gZmFsc2U7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMwOTEtXHRib29sIHNldl9lc19zdXBwb3J0ZWQgPSBmYWxzZTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMxOTAtXHRzZXZfZXNfc3VwcG9ydGVkID0gdHJ1ZTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzE5MTpcdHNldl9zbnBfc3VwcG9ydGVkID0gc2V2X3NucF9lbmFibGVkIFx1MDAyNlx1MDAyNiBjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMTkyLVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzIwMS1cdFx0aWYgKHNldl9wbGF0Zm9ybV9pbml0KFx1MDAyNmluaXRfYXJncykpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMyMDI6XHRcdFx0c2V2X3N1cHBvcnRlZCA9IHNldl9lc19zdXBwb3J0ZWQgPSBzZXZfc25wX3N1cHBvcnRlZCA9IGZhbHNlO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMjAzOlx0XHRlbHNlIGlmIChzZXZfc25wX3N1cHBvcnRlZClcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzIwNDpcdFx0XHRzZXZfc25wX3N1cHBvcnRlZCA9IGlzX3Nldl9zbnBfaW5pdGlhbGl6ZWQoKTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzIwNS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzIwNjpcdFx0aWYgKHNldl9zbnBfc3VwcG9ydGVkKSB7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyMDctXHRcdFx0c25wX3N1cHBvcnRlZF9wb2xpY3lfYml0cyA9IHNldl9nZXRfc25wX3BvbGljeV9iaXRzKCkgXHUwMDI2XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjMwLVx0XHR2bV90eXBlcyB8PSBCSVQoS1ZNX1g4Nl9TRVZfRVNfVk0pO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMjMxOlx0aWYgKHNldl9zbnBfc3VwcG9ydGVkKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjMyLVx0XHR2bV90eXBlcyB8PSBCSVQoS1ZNX1g4Nl9TTlBfVk0pO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzI0Ni1cdFx0cHJfaW5mbyhcJiMzNDtTRVYtU05QICVzIChBU0lEcyAldSAtICV1KVxcblwmIzM0OyxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzI0NzpcdFx0XHRzZXZfc3RyX2ZlYXR1cmVfc3RhdGUoc2V2X3NucF9zdXBwb3J0ZWQsIHZtX3R5cGVzIFx1MDAyNiBCSVQoS1ZNX1g4Nl9TTlBfVk0pKSxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzI0OC1cdFx0XHRtaW5fc25wX2FzaWQsIG1heF9zbnBfYXNpZCk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjUxLVx0c2V2X2VzX2VuYWJsZWQgPSBzZXZfZXNfc3VwcG9ydGVkO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMjUyOlx0c2V2X3NucF9lbmFibGVkID0gc2V2X3NucF9zdXBwb3J0ZWQ7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyNTMtXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00MTQyPXN0YXRpYyBpbnQgc2V2X3NucF9hcF9jcmVhdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQyMTctXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQyMTg6c3RhdGljIGludCBzbnBfaGFuZGxlX2d1ZXN0X3JlcShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgZ3BhX3QgcmVxX2dwYSwgZ3BhX3QgcmVzcF9ncGEpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQyMTkte1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDI2OD1zdGF0aWMgaW50IHNucF9jb21wbGV0ZV9yZXFfY2VydHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDI3NC1cdGNhc2UgMDpcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDI3NTpcdFx0cmV0dXJuIHNucF9oYW5kbGVfZ3Vlc3RfcmVxKHN2bSwgY29udHJvbC1cdTAwM2VleGl0X2luZm9fMSxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDI3Ni1cdFx0XHRcdFx0ICAgIGNvbnRyb2wtXHUwMDNlZXhpdF9pbmZvXzIpO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDI5MT1zdGF0aWMgaW50IHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgZ3BhX3QgcmVxX2dwYSwgZ3BhX3QgcmVzcF9ncGEpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00MzQ1LVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0MzQ2Olx0cmV0dXJuIHNucF9oYW5kbGVfZ3Vlc3RfcmVxKHN2bSwgcmVxX2dwYSwgcmVzcF9ncGEpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00MzQ3LVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDUxMD1pbnQgc2V2X2hhbmRsZV92bWdleGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ2ODEtXHRcdGlmIChjb250cm9sLVx1MDAzZWV4aXRfY29kZSA9PSBTVk1fVk1HRVhJVF9HVUVTVF9SRVFVRVNUKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0NjgyOlx0XHRcdHJldHVybiBzbnBfaGFuZGxlX2d1ZXN0X3JlcShzdm0sIGNvbnRyb2wtXHUwMDNlZXhpdF9pbmZvXzEsXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ2ODMtXHRcdFx0XHRcdFx0ICAgIGNvbnRyb2wtXHUwMDNlZXhpdF9pbmZvXzIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTA0MwoJCQkJCQkJb3V0cHV0OiAyMDMKCQkJCQkJCXRob3VnaHRzOiAyMDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktWTSBBTUQgU0VWIEZ1enppbmcgRGVjaXNpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgcGF0Y2ggaW1wYWN0aW5nIEtWTSwgc3BlY2lmaWNhbGx5IHRoZSBBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBpbXBsZW1lbnRhdGlvbi4gVGhlIGluaXRpYWwgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIHdhcnJhbnRzIGZ1enppbmcuIEdpdmVuIHRoZSBydWxlcywgS1ZNIG9uIHg4NiBpcyBkZWZpbml0ZWx5IGEgdGFyZ2V0IHdvcnRoIGNvbnNpZGVyaW5nLgoKVGhlIHBhdGNoIG1vZGlmaWVzIGNvbnRyb2wgZmxvdyB3aXRoaW4gYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgLCB0b3VjaGluZyBgc25wX2hhbmRsZV9ndWVzdF9yZXFgIGFuZCBgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxYC4gVGhlIGNvcmUgY2hhbmdlIGludm9sdmVzIGVycm9yIGhhbmRsaW5nIGZvciBpbnZhbGlkIGd1ZXN0IHJlcXVlc3RzLCBzcGVjaWZpY2FsbHkgd2hlbiBga3ZtX3JlYWRfZ3Vlc3RgIG9yIGBrdm1fd3JpdGVfZ3Vlc3RgIGZhaWwuIEluc3RlYWQgb2YgYSBkaXJlY3QgYC1FSU9gIHJldHVybiwgdGhlIGNvZGUgbm93IHJlcG9ydHMgYSBgR0hDQl9FUlJfSU5WQUxJRF9JTlBVVGAgZXJyb3IgdG8gdGhlIGd1ZXN0IHZpYSBgc3ZtX3ZtZ2V4aXRfYmFkX2lucHV0YCBhbmQgcmVzdW1lcyBndWVzdCBleGVjdXRpb24uIFRoaXMgaXMgYSBzaWduaWZpY2FudCBhbHRlcmF0aW9uIGluIGVycm9yIGhhbmRsaW5nIHN0cmF0ZWd5LgoKSW5zcGVjdGluZyB0aGUgZGlmZiBmdXJ0aGVyLCB0aGUgY2hhbmdlcyBhcmUgY2xlYXI6IGVycm9yIGNvbmRpdGlvbnMgdGhhdCBwcmV2aW91c2x5IHJldHVybmVkIGFuIGVycm9yIG5vdyB0cmlnZ2VyIHRoZSBgc3ZtX3ZtZ2V4aXRfYmFkX2lucHV0YCBmdW5jdGlvbiBjYWxsLCB3aGljaCBtb2RpZmllcyBndWVzdCBiZWhhdmlvciBhbmQgZXhlY3V0aW9uIHBhdGguIFRoZXNlIGZ1bmN0aW9ucywgYHNucF9oYW5kbGVfZ3Vlc3RfcmVxYCBhbmQgYHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcWAsIGFyZSB0aGUgZm9jdXMgaGVyZS4KClRvIGF2b2lkIGRpbHV0aW9uIG9mIHRoZSBmdXp6aW5nIHNjb3BlLCB3ZSYjMzk7bGwgZXh0cmFjdCBgRm9jdXNTeW1ib2xzYC4gQ29uc2lkZXJpbmcgdGhlIGNvbnRleHQsIGBzbnBfaGFuZGxlX2d1ZXN0X3JlcWAgYW5kIGBzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXFgLCBhcmUgc3RhdGljIGZ1bmN0aW9ucyBpbiB0aGUgYC5jYCBmaWxlIGFuZCBhcmUgbm9uLXRyaXZpYWwgZnVuY3Rpb25zIHdpdGggbXVsdGlwbGUgbGluZXMgb2YgY29kZSBhbmQgY2FsbHMgdG8gb3RoZXIgZnVuY3Rpb25zLiBUaGVyZWZvcmUsIHdlIHNob3VsZCBhbHNvIGluY2x1ZGUgdGhlIG5vbi1zdGF0aWMgY2FsbGVyIGFuZCBlbnRyeXBvaW50IHRvIHRoZXNlIGZ1bmN0aW9uczogYHNldl9oYW5kbGVfdm1nZXhpdGAuCgpBcyBmb3IgY29uZmlndXJhdGlvbiwgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyBhcmU6IGBLVk1fQU1EYCwgYEtWTV9BTURfU0VWYCwgYENSWVBUT19ERVZfU1BfUFNQYCwgYENSWVBUT19ERVZfQ0NQX0REYCwgYW5kIGBBTURfSU9NTVVgLiBUaGVzZSBvcHRpb25zIG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgdGhlIHRhcmdldGVkIGZ1bmN0aW9uYWxpdHkgdG8gYmUgYWN0aXZlLCBhbmQgdGhlcmVmb3JlIGZ1enphYmxlLgoKQmFzZWQgb24gdGhlIHJ1bGVzIGFuZCB0aGUgbmF0dXJlIG9mIHRoZSBtb2RpZmljYXRpb25zLCBhICYjMzQ7V29ydGhGdXp6aW5nPXRydWUmIzM0OyBkZWNpc2lvbiBpcyBzdHJhaWdodGZvcndhcmQuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSwgZXhlY3V0YWJsZSBjb2RlIHJlbGF0ZWQgdG8gY29yZSBLVk0gZnVuY3Rpb25hbGl0eS4gU3BlY2lmaWNhbGx5LCBjaGFuZ2VzIGluIGVycm9yIGhhbmRsaW5nIGFuZCBWTSBjb250cm9sIGZsb3cgd2l0aGluIFNFViBndWVzdCByZXF1ZXN0IGhhbmRsaW5nIGFyZSBzaWduaWZpY2FudC4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIG9uIEFNRDY0IHN5c3RlbXMgd2l0aCBLVk0gYW5kIFNFViBlbmFibGVkLiBUaGUgZm9jdXMgd2lsbCBiZSBvbiBgc25wX2hhbmRsZV9ndWVzdF9yZXFgLCBgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxYCBhbmQgdGhlIGVudHJ5cG9pbnQgYHNldl9oYW5kbGVfdm1nZXhpdGAuIFRoZSBzZXQtcmVzdWx0cyBjb21tYW5kIHNob3VsZCByZWZsZWN0IHRoaXMgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0tWTV9BTURfU0VWJiMzNDssCiAgICAmIzM0O0NSWVBUT19ERVZfU1BfUFNQJiMzNDssCiAgICAmIzM0O0NSWVBUT19ERVZfQ0NQX0REJiMzNDssCiAgICAmIzM0O0FNRF9JT01NVSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NucF9oYW5kbGVfZ3Vlc3RfcmVxJiMzNDssCiAgICAmIzM0O3NucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcSYjMzQ7LAogICAgJiMzNDtzZXZfaGFuZGxlX3ZtZ2V4aXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gS1ZNIEFNRCBTRVYtU05QIGd1ZXN0IHJlcXVlc3QgaGFuZGxpbmcgZnVuY3Rpb25zIChzbnBfaGFuZGxlX2d1ZXN0X3JlcSBhbmQgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxKS4gV2hlbiBndWVzdCBtZW1vcnkgcmVhZC93cml0ZSBvciBjZXJ0aWZpY2F0ZSB0YWJsZSBjbGVhcmFuY2UgZmFpbHMsIEtWTSBub3cgcmVwb3J0cyBHSENCX0VSUl9JTlZBTElEX0lOUFVUIHRvIHRoZSBndWVzdCBhbmQgcmVzdW1lcyBndWVzdCBleGVjdXRpb24gcmF0aGVyIHRoYW4gcmV0dXJuaW5nIC1FSU8gdG8gdXNlcnNwYWNlLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBLVk0gY29udHJvbCBmbG93IGFuZCBWTSBzdGF0ZSBoYW5kbGluZyBvbiBhbWQ2NC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtLVk1fQU1EX1NFViYjMzQ7LAogICAgJiMzNDtDUllQVE9fREVWX1NQX1BTUCYjMzQ7LAogICAgJiMzNDtDUllQVE9fREVWX0NDUF9ERCYjMzQ7LAogICAgJiMzNDtBTURfSU9NTVUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzbnBfaGFuZGxlX2d1ZXN0X3JlcSYjMzQ7LAogICAgJiMzNDtzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXEmIzM0OywKICAgICYjMzQ7c2V2X2hhbmRsZV92bWdleGl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIEtWTSBBTUQgU0VWLVNOUCBndWVzdCByZXF1ZXN0IGhhbmRsaW5nIGZ1bmN0aW9ucyAoc25wX2hhbmRsZV9ndWVzdF9yZXEgYW5kIHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcSkuIFdoZW4gZ3Vlc3QgbWVtb3J5IHJlYWQvd3JpdGUgb3IgY2VydGlmaWNhdGUgdGFibGUgY2xlYXJhbmNlIGZhaWxzLCBLVk0gbm93IHJlcG9ydHMgR0hDQl9FUlJfSU5WQUxJRF9JTlBVVCB0byB0aGUgZ3Vlc3QgYW5kIHJlc3VtZXMgZ3Vlc3QgZXhlY3V0aW9uIHJhdGhlciB0aGFuIHJldHVybmluZyAtRUlPIHRvIHVzZXJzcGFjZS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgS1ZNIGNvbnRyb2wgZmxvdyBhbmQgVk0gc3RhdGUgaGFuZGxpbmcgb24gYW1kNjQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjE0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6MTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiBLVk0gU0VWLVNOUCBndWVzdCByZXF1ZXN0IGhhbmRsZXJzIChgc25wX2hhbmRsZV9ndWVzdF9yZXFgIGFuZCBgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxYCkuIFNwZWNpZmljYWxseSwgd2hlbiByZWFkaW5nL3dyaXRpbmcvY2xlYXJpbmcgZ3Vlc3QgbWVtb3J5IGZhaWxzIChga3ZtX3JlYWRfZ3Vlc3RgLCBga3ZtX3dyaXRlX2d1ZXN0YCwgb3IgYGt2bV9jbGVhcl9ndWVzdGApLCBpbnN0ZWFkIG9mIHJldHVybmluZyBgLUVJT2AgKHdoaWNoIGNhdXNlZCBLVk0gdG8gZXhpdCB0byBob3N0IHVzZXJzcGFjZSksIEtWTSBub3cgZm9ybWF0cyBhIEdIQ0IgYmFkIGlucHV0IGVycm9yIHJlc3BvbnNlIChgR0hDQl9FUlJfSU5WQUxJRF9JTlBVVGAgdmlhIGBzdm1fdm1nZXhpdF9iYWRfaW5wdXQoKWApIGFuZCByZXN1bWVzIHRoZSBndWVzdCAoYHJldHVybiAxYCkuXG5cblRoZXNlIGNoYW5nZXMgc29sZWx5IGFmZmVjdCBlcnJvciByZXR1cm4gY29kZXMgYW5kIGNvbnRyb2wgZmxvdyBmb3IgZ3Vlc3QgZXJyb3IgcmVwb3J0aW5nOlxuMS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3Igc3RydWN0IHBhZGRpbmcgaXMgY29waWVkIHRvIHVzZXJzcGFjZSBvciB0aGUgZ3Vlc3QuXG4yLiBJbiBgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxYCwgaWYgcmVhZGluZyBgbXNnX3R5cGVgIGZhaWxzLCBjb250cm9sIGp1bXBzIHN0cmFpZ2h0IHRvIGByZXF1ZXN0X2ludmFsaWRgLCBhdm9pZGluZyBhbnkgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYG1zZ190eXBlYC5cbjMuIE5vIGhlYXAvc3RhY2sgYWxsb2NhdGlvbnMgb3IgYnVmZmVyIHNpemUvb2Zmc2V0IG1hbmlwdWxhdGlvbnMgYXJlIGludHJvZHVjZWQuXG5cbkFzIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOGY4MGM3ODdiZDNkYTEzOGE2ZDdhNjRiOGI3ODBkMWYxNGQ5NDZkMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDEwIDIyOjEzOjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMKaW5kZXggNTcwNTcyM2YxZjQxMi4uZDA3NTYyMzEwNTE5YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jCkBAIC00MjI4LDggJiM0Mzs0MjI4LDEwIEBAIHN0YXRpYyBpbnQgc25wX2hhbmRsZV9ndWVzdF9yZXEoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGdwYV90IHJlcV9ncGEsIGdwYV90IHJlc3BfCiAKIAlndWFyZChtdXRleCkoJmFtcDtzZXYtJmd0O2d1ZXN0X3JlcV9tdXRleCk7CiAKLQlpZiAoa3ZtX3JlYWRfZ3Vlc3Qoa3ZtLCByZXFfZ3BhLCBzZXYtJmd0O2d1ZXN0X3JlcV9idWYsIFBBR0VfU0laRSkpCi0JCXJldHVybiAtRUlPOwomIzQzOwlpZiAoa3ZtX3JlYWRfZ3Vlc3Qoa3ZtLCByZXFfZ3BhLCBzZXYtJmd0O2d1ZXN0X3JlcV9idWYsIFBBR0VfU0laRSkpIHsKJiM0MzsJCXN2bV92bWdleGl0X2JhZF9pbnB1dChzdm0sIEdIQ0JfRVJSX0lOVkFMSURfSU5QVVQpOwomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CX0KIAogCWRhdGEuZ2N0eF9wYWRkciA9IF9fcHNwX3BhKHNldi0mZ3Q7c25wX2NvbnRleHQpOwogCWRhdGEucmVxX3BhZGRyID0gX19wc3BfcGEoc2V2LSZndDtndWVzdF9yZXFfYnVmKTsKQEAgLTQyNDQsOCAmIzQzOzQyNDYsMTAgQEAgc3RhdGljIGludCBzbnBfaGFuZGxlX2d1ZXN0X3JlcShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgZ3BhX3QgcmVxX2dwYSwgZ3BhX3QgcmVzcF8KIAlpZiAocmV0ICZhbXA7JmFtcDsgIWZ3X2VycikKIAkJcmV0dXJuIHJldDsKIAotCWlmIChrdm1fd3JpdGVfZ3Vlc3Qoa3ZtLCByZXNwX2dwYSwgc2V2LSZndDtndWVzdF9yZXNwX2J1ZiwgUEFHRV9TSVpFKSkKLQkJcmV0dXJuIC1FSU87CiYjNDM7CWlmIChrdm1fd3JpdGVfZ3Vlc3Qoa3ZtLCByZXNwX2dwYSwgc2V2LSZndDtndWVzdF9yZXNwX2J1ZiwgUEFHRV9TSVpFKSkgewomIzQzOwkJc3ZtX3ZtZ2V4aXRfYmFkX2lucHV0KHN2bSwgR0hDQl9FUlJfSU5WQUxJRF9JTlBVVCk7CiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsJfQogCiAJLyogTm8gYWN0aW9uIGlzIHJlcXVlc3RlZCAqZnJvbSBLVk0qIGlmIHRoZXJlIHdhcyBhIGZpcm13YXJlIGVycm9yLiAqLwogCXN2bV92bWdleGl0X25vX2FjdGlvbihzdm0sIFNOUF9HVUVTVF9FUlIoMCwgZndfZXJyKSk7CkBAIC00Mjk2LDcgJiM0Mzs0MzAwLDcgQEAgc3RhdGljIGludCBzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXEoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGdwYV90IHJlcV9ncGEsIGdwYV90IHIKIAogCWlmIChrdm1fcmVhZF9ndWVzdChrdm0sIHJlcV9ncGEgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IHNucF9ndWVzdF9tc2dfaGRyLCBtc2dfdHlwZSksCiAJCQkgICAmYW1wO21zZ190eXBlLCAxKSkKLQkJcmV0dXJuIC1FSU87CiYjNDM7CQlnb3RvIHJlcXVlc3RfaW52YWxpZDsKIAogCS8qCiAJICogQXMgcGVyIEdIQ0Igc3BlYywgcmVxdWVzdHMgb2YgdHlwZSBNU0dfUkVQT1JUX1JFUSBhbHNvIGFsbG93IGZvcgpAQCAtNDMzNiw3ICYjNDM7NDM0MCw3IEBAIHN0YXRpYyBpbnQgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBncGFfdCByZXFfZ3BhLCBncGFfdCByCiAJCSAqIGNlcnRpZmljYXRlIHRhYmxlIGlzIHRlcm1pbmF0ZWQgYnkgMjQtYnl0ZXMgb2YgemVyb2VzLgogCQkgKi8KIAkJaWYgKGRhdGFfbnBhZ2VzICZhbXA7JmFtcDsga3ZtX2NsZWFyX2d1ZXN0KGt2bSwgZGF0YV9ncGEsIDI0KSkKLQkJCXJldHVybiAtRUlPOwomIzQzOwkJCWdvdG8gcmVxdWVzdF9pbnZhbGlkOwogCX0KIAogCXJldHVybiBzbnBfaGFuZGxlX2d1ZXN0X3JlcShzdm0sIHJlcV9ncGEsIHJlc3BfZ3BhKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NDAKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAzMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRoaXMgS1ZNL1NWTSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHRoZSBzcGVjaWZpYyBtb2RpZmljYXRpb25zLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYCBmaWxlLiBUaGUgY2hhbmdlcyBhcmUgZm9jdXNlZCBvbiBob3cgdGhlIGNvZGUgaGFuZGxlcyBmYWlsdXJlcyB3aXRoaW4gdGhlIGBzbnBfaGFuZGxlX2d1ZXN0X3JlcWAgYW5kIGBzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXFgIGZ1bmN0aW9ucy4KClNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSB0aGVyZSYjMzk7cyBiZWVuIGEgY2hhbmdlIGluIGVycm9yIGhhbmRsaW5nIHJlbGF0ZWQgdG8gYGt2bV9yZWFkX2d1ZXN0YCBhbmQgYGt2bV93cml0ZV9ndWVzdGAgY2FsbHMsIGFuZCBga3ZtX2NsZWFyX2d1ZXN0YC4gUHJldmlvdXNseSwgYSBzdHJhaWdodGZvcndhcmQgYC1FSU9gIGVycm9yIHdvdWxkIGJlIHJldHVybmVkIHVwb24gZmFpbHVyZS4gTm93LCBpbiB0aGUgYHNucF9oYW5kbGVfZ3Vlc3RfcmVxYCBmdW5jdGlvbiwgb24gYSByZWFkIG9yIHdyaXRlIGZhaWx1cmUsIHRoZSBjb2RlIG5vdyBjYWxscyBgc3ZtX3ZtZ2V4aXRfYmFkX2lucHV0KHN2bSwgR0hDQl9FUlJfSU5WQUxJRF9JTlBVVClgIGFuZCByZXR1cm5zIGAxYC4gQW5kIGluIHRoZSBgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxYCBmdW5jdGlvbiwgZmFpbHVyZXMgb24gYm90aCByZWFkIGFuZCBjbGVhciBvcGVyYXRpb25zIG5vdyB0cmlnZ2VyIGEganVtcCB0byBhIGByZXF1ZXN0X2ludmFsaWQ6YCBsYWJlbC4KClRoZSBxdWVzdGlvbiBub3cgYmVjb21lczogV2hhdCBkb2VzIGByZXF1ZXN0X2ludmFsaWQ6YCBkbz8gQW5kLCBtb3JlIGltcG9ydGFudGx5LCB3aGF0JiMzOTtzIHRoZSBmdW5jdGlvbiBgc3ZtX3ZtZ2V4aXRfYmFkX2lucHV0YCBhbGwgYWJvdXQ/IFdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGF0IGBHSENCX0VSUl9JTlZBTElEX0lOUFVUYCBlcnJvciBjb2RlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBJdCBsb29rcyBsaWtlIHRoaXMgY29kZSBpcyBub3cgaW50ZW5kZWQgdG8gdHJpZ2dlciBhIHZtZ2V4aXQgd2hlbiB3ZSBzZWUgYmFkIGlucHV0LgoKSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBnb2luZyB0byBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AgYW5kIGRpZyBpbnRvIHRoZXNlIHR3byBhcmVhcyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZSBhbmQgc2VlIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlIGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MjIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MjIwOlx0XHRzdHJ1Y3Qgc2V2X2RhdGFfc25wX2d1ZXN0X3JlcXVlc3QgZGF0YSA9IHswfTtcbjQyMjE6XHRcdHN0cnVjdCBrdm0gKmt2bSA9IHN2bS1cdTAwM2V2Y3B1Lmt2bTtcbjQyMjI6XHRcdHN0cnVjdCBrdm1fc2V2X2luZm8gKnNldiA9IHRvX2t2bV9zZXZfaW5mbyhrdm0pO1xuNDIyMzpcdFx0c2V2X3JldF9jb2RlIGZ3X2VyciA9IDA7XG40MjI0Olx0XHRpbnQgcmV0O1xuNDIyNTpcdFxuNDIyNjpcdFx0aWYgKCFpc19zZXZfc25wX2d1ZXN0KFx1MDAyNnN2bS1cdTAwM2V2Y3B1KSlcbjQyMjc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG40MjI4Olx0XG40MjI5Olx0XHRndWFyZChtdXRleCkoXHUwMDI2c2V2LVx1MDAzZWd1ZXN0X3JlcV9tdXRleCk7XG40MjMwOlx0XG40MjMxOlx0XHRpZiAoa3ZtX3JlYWRfZ3Vlc3Qoa3ZtLCByZXFfZ3BhLCBzZXYtXHUwMDNlZ3Vlc3RfcmVxX2J1ZiwgUEFHRV9TSVpFKSkge1xuNDIzMjpcdFx0XHRzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX0lOUFVUKTtcbjQyMzM6XHRcdFx0cmV0dXJuIDE7XG40MjM0Olx0XHR9XG40MjM1Olx0XG40MjM2Olx0XHRkYXRhLmdjdHhfcGFkZHIgPSBfX3BzcF9wYShzZXYtXHUwMDNlc25wX2NvbnRleHQpO1xuNDIzNzpcdFx0ZGF0YS5yZXFfcGFkZHIgPSBfX3BzcF9wYShzZXYtXHUwMDNlZ3Vlc3RfcmVxX2J1Zik7XG40MjM4Olx0XHRkYXRhLnJlc19wYWRkciA9IF9fcHNwX3BhKHNldi1cdTAwM2VndWVzdF9yZXNwX2J1Zik7XG40MjM5Olx0XG40MjQwOlx0XHQvKlxuNDI0MTpcdFx0ICogRmlybXdhcmUgZmFpbHVyZXMgYXJlIHByb3BhZ2F0ZWQgb24gdG8gZ3Vlc3QsIGJ1dCBhbnkgb3RoZXIgZmFpbHVyZVxuNDI0MjpcdFx0ICogY29uZGl0aW9uIGFsb25nIHRoZSB3YXkgc2hvdWxkIGJlIHJlcG9ydGVkIHRvIHVzZXJzcGFjZS4gRS5nLiBpZlxuNDI0MzpcdFx0ICogdGhlIFBTUCBpcyBkZWFkIGFuZCBjb21tYW5kcyBhcmUgdGltaW5nIG91dC5cbjQyNDQ6XHRcdCAqL1xuNDI0NTpcdFx0cmV0ID0gc2V2X2lzc3VlX2NtZChrdm0sIFNFVl9DTURfU05QX0dVRVNUX1JFUVVFU1QsIFx1MDAyNmRhdGEsIFx1MDAyNmZ3X2Vycik7XG40MjQ2Olx0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiAhZndfZXJyKVxuNDI0NzpcdFx0XHRyZXR1cm4gcmV0O1xuNDI0ODpcdFxuNDI0OTpcdFx0aWYgKGt2bV93cml0ZV9ndWVzdChrdm0sIHJlc3BfZ3BhLCBzZXYtXHUwMDNlZ3Vlc3RfcmVzcF9idWYsIFBBR0VfU0laRSkpIHtcbjQyNTA6XHRcdFx0c3ZtX3ZtZ2V4aXRfYmFkX2lucHV0KHN2bSwgR0hDQl9FUlJfSU5WQUxJRF9JTlBVVCk7XG40MjUxOlx0XHRcdHJldHVybiAxO1xuNDI1MjpcdFx0fVxuNDI1MzpcdFxuNDI1NDpcdFx0LyogTm8gYWN0aW9uIGlzIHJlcXVlc3RlZCAqZnJvbSBLVk0qIGlmIHRoZXJlIHdhcyBhIGZpcm13YXJlIGVycm9yLiAqL1xuNDI1NTpcdFx0c3ZtX3ZtZ2V4aXRfbm9fYWN0aW9uKHN2bSwgU05QX0dVRVNUX0VSUigwLCBmd19lcnIpKTtcbjQyNTY6XHRcbjQyNTc6XHRcdC8qIHJlc3VtZSBndWVzdCAqL1xuNDI1ODpcdFx0cmV0dXJuIDE7XG40MjU5Olx0fVxuNDI2MDpcdFxuNDI2MTpcdHN0YXRpYyBpbnQgc25wX3JlcV9jZXJ0c19lcnIoc3RydWN0IHZjcHVfc3ZtICpzdm0sIHUzMiB2bW1fZXJyb3IpXG40MjYyOlx0e1xuNDI2MzpcdFx0Z2hjYl9zZXRfc3dfZXhpdF9pbmZvXzIoc3ZtLVx1MDAzZXNldl9lcy5naGNiLCBTTlBfR1VFU1RfRVJSKHZtbV9lcnJvciwgMCkpO1xuNDI2NDpcdFxuNDI2NTpcdFx0cmV0dXJuIDE7IC8qIHJlc3VtZSBndWVzdCAqL1xuNDI2NjpcdH1cbjQyNjc6XHRcbjQyNjg6XHRzdGF0aWMgaW50IHNucF9jb21wbGV0ZV9yZXFfY2VydHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuNDI2OTpcdHtcbjQyNzA6XHRcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xuNDI3MTpcdFx0c3RydWN0IHZtY2JfY29udHJvbF9hcmVhICpjb250cm9sID0gXHUwMDI2c3ZtLVx1MDAzZXZtY2ItXHUwMDNlY29udHJvbDtcbjQyNzI6XHRcbjQyNzM6XHRcdHN3aXRjaCAoUkVBRF9PTkNFKHZjcHUtXHUwMDNlcnVuLVx1MDAzZXNucF9yZXFfY2VydHMucmV0KSkge1xuNDI3NDpcdFx0Y2FzZSAwOlxuNDI3NTpcdFx0XHRyZXR1cm4gc25wX2hhbmRsZV9ndWVzdF9yZXEoc3ZtLCBjb250cm9sLVx1MDAzZWV4aXRfaW5mb18xLFxuNDI3NjpcdFx0XHRcdFx0XHQgICAgY29udHJvbC1cdTAwM2VleGl0X2luZm9fMik7XG40Mjc3Olx0XHRjYXNlIEVOT1NQQzpcbjQyNzg6XHRcdFx0dmNwdS1cdTAwM2VhcmNoLnJlZ3NbVkNQVV9SRUdTX1JCWF0gPSB2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VzbnBfcmVxX2NlcnRzLm5wYWdlcztcbjQyNzk6XHRcdFx0cmV0dXJuIHNucF9yZXFfY2VydHNfZXJyKHN2bSwgU05QX0dVRVNUX1ZNTV9FUlJfSU5WQUxJRF9MRU4pO1xuNDI4MDpcdFx0Y2FzZSBFQUdBSU46XG40MjgxOlx0XHRcdHJldHVybiBzbnBfcmVxX2NlcnRzX2Vycihzdm0sIFNOUF9HVUVTVF9WTU1fRVJSX0JVU1kpO1xuNDI4MjpcdFx0Y2FzZSBFSU86XG40MjgzOlx0XHRcdHJldHVybiBzbnBfcmVxX2NlcnRzX2Vycihzdm0sIFNOUF9HVUVTVF9WTU1fRVJSX0dFTkVSSUMpO1xuNDI4NDpcdFx0ZGVmYXVsdDpcbjQyODU6XHRcdFx0YnJlYWs7XG40Mjg2Olx0XHR9XG40Mjg3Olx0XG40Mjg4Olx0XHRyZXR1cm4gLUVJTlZBTDtcbjQyODk6XHR9XG40MjkwOlx0XG40MjkxOlx0c3RhdGljIGludCBzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXEoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGdwYV90IHJlcV9ncGEsIGdwYV90IHJlc3BfZ3BhKVxuNDI5MjpcdHtcbjQyOTM6XHRcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IFx1MDAyNnN2bS1cdTAwM2V2Y3B1O1xuNDI5NDpcdFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cdTAwM2Vrdm07XG40Mjk1Olx0XG40Mjk2Olx0XHR1OCBtc2dfdHlwZTtcbjQyOTc6XHRcbjQyOTg6XHRcdGlmICghaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSlcbjQyOTk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG40MzAwOlx0XG40MzAxOlx0XHRpZiAoa3ZtX3JlYWRfZ3Vlc3Qoa3ZtLCByZXFfZ3BhICYjNDM7IG9mZnNldG9mKHN0cnVjdCBzbnBfZ3Vlc3RfbXNnX2hkciwgbXNnX3R5cGUpLFxuNDMwMjpcdFx0XHRcdCAgIFx1MDAyNm1zZ190eXBlLCAxKSlcbjQzMDM6XHRcdFx0Z290byByZXF1ZXN0X2ludmFsaWQ7XG40MzA0Olx0XG40MzA1Olx0XHQvKlxuNDMwNjpcdFx0ICogQXMgcGVyIEdIQ0Igc3BlYywgcmVxdWVzdHMgb2YgdHlwZSBNU0dfUkVQT1JUX1JFUSBhbHNvIGFsbG93IGZvclxuNDMwNzpcdFx0ICogYWRkaXRpb25hbCBjZXJ0aWZpY2F0ZSBkYXRhIHRvIGJlIHByb3ZpZGVkIGFsb25nc2lkZSB0aGUgYXR0ZXN0YXRpb25cbjQzMDg6XHRcdCAqIHJlcG9ydCB2aWEgdGhlIGd1ZXN0LXByb3ZpZGVkIGRhdGEgcGFnZXMgaW5kaWNhdGVkIGJ5IFJBWC9SQlguIElmXG40MzA5Olx0XHQgKiB1c2Vyc3BhY2UgZW5hYmxlcyBLVk1fRVhJVF9TTlBfUkVRX0NFUlRTLCB0aGVuIGV4aXQgdG8gdXNlcnNwYWNlXG40MzEwOlx0XHQgKiB0byBnaXZlIHVzZXJzcGFjZSBhbiBvcHBvcnR1bml0eSB0byBwcm92aWRlIHRoZSBjZXJ0aWZpY2F0ZSBkYXRhXG40MzExOlx0XHQgKiBiZWZvcmUgaXNzdWluZy9jb21wbGV0aW5nIHRoZSBhdHRlc3RhdGlvbiByZXF1ZXN0LiBPdGhlcndpc2UsIHJldHVyblxuNDMxMjpcdFx0ICogYW4gZW1wdHkgY2VydGlmaWNhdGUgdGFibGUgaW4gdGhlIGd1ZXN0LXByb3ZpZGVkIGRhdGEgcGFnZXMgYW5kXG40MzEzOlx0XHQgKiBoYW5kbGUgdGhlIGF0dGVzdGF0aW9uIHJlcXVlc3QgaW1tZWRpYXRlbHkuXG40MzE0Olx0XHQgKi9cbjQzMTU6XHRcdGlmIChtc2dfdHlwZSA9PSBTTlBfTVNHX1JFUE9SVF9SRVEpIHtcbjQzMTY6XHRcdFx0c3RydWN0IGt2bV9zZXZfaW5mbyAqc2V2ID0gXHUwMDI2dG9fa3ZtX3N2bShrdm0pLVx1MDAzZXNldl9pbmZvO1xuNDMxNzpcdFx0XHR1NjQgZGF0YV9ucGFnZXM7XG40MzE4Olx0XHRcdGdwYV90IGRhdGFfZ3BhO1xuNDMxOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjU1CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcWAqKgoKT2theSwgbGV0JiMzOTtzIGRpZyBpbnRvIHRoaXMgYHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcWAgZnVuY3Rpb24uIEkmIzM5O20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gd2hlcmUgaXQgaGFuZGxlcyByZXF1ZXN0IHZhbGlkaXR5LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGlkZW50aWZpZXMgYW5kIHJlYWN0cyB0byBhbiBpbnZhbGlkIHJlcXVlc3QuIE15IGZvY3VzIHdpbGwgYmUgb24gdGhlIHBhcnQgbGFiZWxlZCBhcyBgcmVxdWVzdF9pbnZhbGlkOmAuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBicmFuY2hpbmcgbG9naWMgdGhhdCBsZWFkcyB0byB0aGF0IHBvaW50IGFuZCwgY3J1Y2lhbGx5LCB3aGF0IGFjdGlvbnMgYXJlIHRha2VuIHdoZW4gYSByZXF1ZXN0IGlzIGRldGVybWluZWQgdG8gYmUgaW52YWxpZC4gSXQmIzM5O3MgcHJvYmFibHkgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24gb2YgdGhlIHNlY3VyaXR5IGJvdW5kYXJ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MzIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQzMjA6XHRcdFx0aWYgKCFrdm1fZ2hjYl9yYXhfaXNfdmFsaWQoc3ZtKSB8fCAha3ZtX2doY2JfcmJ4X2lzX3ZhbGlkKHN2bSkpXG40MzIxOlx0XHRcdFx0Z290byByZXF1ZXN0X2ludmFsaWQ7XG40MzIyOlx0XG40MzIzOlx0XHRcdGRhdGFfZ3BhID0gdmNwdS1cdTAwM2VhcmNoLnJlZ3NbVkNQVV9SRUdTX1JBWF07XG40MzI0Olx0XHRcdGRhdGFfbnBhZ2VzID0gdmNwdS1cdTAwM2VhcmNoLnJlZ3NbVkNQVV9SRUdTX1JCWF07XG40MzI1Olx0XG40MzI2Olx0XHRcdGlmICghUEFHRV9BTElHTkVEKGRhdGFfZ3BhKSlcbjQzMjc6XHRcdFx0XHRnb3RvIHJlcXVlc3RfaW52YWxpZDtcbjQzMjg6XHRcbjQzMjk6XHRcdFx0aWYgKHNldi1cdTAwM2VzbnBfY2VydHNfZW5hYmxlZCkge1xuNDMzMDpcdFx0XHRcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZWV4aXRfcmVhc29uID0gS1ZNX0VYSVRfU05QX1JFUV9DRVJUUztcbjQzMzE6XHRcdFx0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VzbnBfcmVxX2NlcnRzLmdwYSA9IGRhdGFfZ3BhO1xuNDMzMjpcdFx0XHRcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZXNucF9yZXFfY2VydHMubnBhZ2VzID0gZGF0YV9ucGFnZXM7XG40MzMzOlx0XHRcdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlc25wX3JlcV9jZXJ0cy5yZXQgPSAwO1xuNDMzNDpcdFx0XHRcdHZjcHUtXHUwMDNlYXJjaC5jb21wbGV0ZV91c2Vyc3BhY2VfaW8gPSBzbnBfY29tcGxldGVfcmVxX2NlcnRzO1xuNDMzNTpcdFx0XHRcdHJldHVybiAwO1xuNDMzNjpcdFx0XHR9XG40MzM3Olx0XG40MzM4Olx0XHRcdC8qXG40MzM5Olx0XHRcdCAqIEFzIHBlciBHSENCIHNwZWMgKHNlZSBcJiMzNDtTTlAgRXh0ZW5kZWQgR3Vlc3QgUmVxdWVzdFwmIzM0OyksIHRoZVxuNDM0MDpcdFx0XHQgKiBjZXJ0aWZpY2F0ZSB0YWJsZSBpcyB0ZXJtaW5hdGVkIGJ5IDI0LWJ5dGVzIG9mIHplcm9lcy5cbjQzNDE6XHRcdFx0ICovXG40MzQyOlx0XHRcdGlmIChkYXRhX25wYWdlcyBcdTAwMjZcdTAwMjYga3ZtX2NsZWFyX2d1ZXN0KGt2bSwgZGF0YV9ncGEsIDI0KSlcbjQzNDM6XHRcdFx0XHRnb3RvIHJlcXVlc3RfaW52YWxpZDtcbjQzNDQ6XHRcdH1cbjQzNDU6XHRcbjQzNDY6XHRcdHJldHVybiBzbnBfaGFuZGxlX2d1ZXN0X3JlcShzdm0sIHJlcV9ncGEsIHJlc3BfZ3BhKTtcbjQzNDc6XHRcbjQzNDg6XHRyZXF1ZXN0X2ludmFsaWQ6XG40MzQ5Olx0XHRzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX0lOUFVUKTtcbjQzNTA6XHRcdHJldHVybiAxOyAvKiByZXN1bWUgZ3Vlc3QgKi9cbjQzNTE6XHR9XG40MzUyOlx0XG40MzUzOlx0c3RhdGljIGludCBzZXZfaGFuZGxlX3ZtZ2V4aXRfbXNyX3Byb3RvY29sKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxuNDM1NDpcdHtcbjQzNTU6XHRcdHN0cnVjdCB2bWNiX2NvbnRyb2xfYXJlYSAqY29udHJvbCA9IFx1MDAyNnN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2w7XG40MzU2Olx0XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBcdTAwMjZzdm0tXHUwMDNldmNwdTtcbjQzNTc6XHRcdHN0cnVjdCBrdm1fc2V2X2luZm8gKnNldiA9IHRvX2t2bV9zZXZfaW5mbyh2Y3B1LVx1MDAzZWt2bSk7XG40MzU4Olx0XHR1NjQgZ2hjYl9pbmZvO1xuNDM1OTpcdFx0aW50IHJldCA9IDE7XG40MzYwOlx0XG40MzYxOlx0XHRnaGNiX2luZm8gPSBjb250cm9sLVx1MDAzZWdoY2JfZ3BhIFx1MDAyNiBHSENCX01TUl9JTkZPX01BU0s7XG40MzYyOlx0XG40MzYzOlx0XHR0cmFjZV9rdm1fdm1nZXhpdF9tc3JfcHJvdG9jb2xfZW50ZXIoc3ZtLVx1MDAzZXZjcHUudmNwdV9pZCxcbjQzNjQ6XHRcdFx0XHRcdFx0ICAgICBjb250cm9sLVx1MDAzZWdoY2JfZ3BhKTtcbjQzNjU6XHRcbjQzNjY6XHRcdHN3aXRjaCAoZ2hjYl9pbmZvKSB7XG40MzY3Olx0XHRjYXNlIEdIQ0JfTVNSX1NFVl9JTkZPX1JFUTpcbjQzNjg6XHRcdFx0c2V0X2doY2JfbXNyKHN2bSwgR0hDQl9NU1JfU0VWX0lORk8oKF9fdTY0KXNldi1cdTAwM2VnaGNiX3ZlcnNpb24sXG40MzY5Olx0XHRcdFx0XHRcdFx0ICAgIEdIQ0JfVkVSU0lPTl9NSU4sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzNzgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEtWTSBTRVYtU05QIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGhvdyBLVk0gaGFuZGxlcyBmYWlsdXJlcyByZWxhdGVkIHRvIGd1ZXN0IG1lbW9yeSBhY2Nlc3MsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIFNFVi1TTlAgKFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gLSBTZWN1cmUgTmVzdGVkIFBhZ2luZykgY29udGV4dC4gUHJldmlvdXNseSwgaWYgS1ZNIGVuY291bnRlcmVkIGEgcHJvYmxlbSByZWFkaW5nIGZyb20sIHdyaXRpbmcgdG8sIG9yIGNsZWFyaW5nIGd1ZXN0IG1lbW9yeSAodXNpbmcgZnVuY3Rpb25zIGxpa2UgYGt2bV9yZWFkX2d1ZXN0YCwgYGt2bV93cml0ZV9ndWVzdGAsIG9yIGBrdm1fY2xlYXJfZ3Vlc3RgKSwgaXQgd291bGQgc2ltcGx5IHJldHVybiBhIGdlbmVyaWMgYC1FSU9gIGVycm9yLiBUaGlzLCBpbiB0dXJuLCB0cmlnZ2VyZWQgYW4gYEtWTV9FWElUX0lOVEVSTkFMX0VSUk9SYCBvciBzaW1pbGFyIGV4aXQgcmVhc29uLCBwb3RlbnRpYWxseSByZXN1bHRpbmcgaW4gS1ZNIGV4aXRpbmcgdG8gdXNlcnNwYWNlIHdpdGggYSBnZW5lcmFsIGAtRUlPYCByZXR1cm4gZnJvbSBgS1ZNX1JVTmAuIENsZWFybHksIHRoaXMgd2FzbiYjMzk7dCBpZGVhbCBmb3IgU0VWLVNOUCBvcGVyYXRpb25zLgoKVGhlIGNvcmUgb2YgdGhlIHBhdGNoIHNlZW1zIHRvIGJlIGFsaWduaW5nIEtWTSYjMzk7cyBiZWhhdmlvciB3aXRoIHRoZSBHSENCIChHdWVzdCBIeXBlcnZpc29yIENvbW11bmljYXRpb24gQmxvY2spIHNwZWNpZmljYXRpb24uIEluc3RlYWQgb2YgdHJlYXRpbmcgdGhlc2UgbWVtb3J5IGFjY2VzcyBmYWlsdXJlcyBhcyBmYXRhbCBlcnJvcnMsIHRoZSBjb3JyZWN0IG1ldGhvZCBzZWVtcyB0byBiZSB0byByZXBvcnQgdGhlIGVycm9yIHN0YXR1cy4gVGhpcyBpbnZvbHZlcyBzZXR0aW5nIGEgVk1HRVhJVCBlcnJvciBzdGF0dXMsIGBzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX0lOUFVUKWAsIHdoZW4gdGhlIGd1ZXN0IHByb3ZpZGVzIGluY29ycmVjdCBHUEEgKEd1ZXN0IFBoeXNpY2FsIEFkZHJlc3MpIG9yIGludmFsaWQgaW5wdXQuIFN1YnNlcXVlbnRseSwgYSByZXR1cm4gdmFsdWUgb2YgYDFgIGlzIHVzZWQsIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSBndWVzdCBleGVjdXRpb24gc2hvdWxkIHJlc3VtZSB3aXRoIHRoZSBlcnJvciBjb2RlIHByb3ZpZGVkIGluIHRoZSBHSENCIGV4aXQgaW5mb3JtYXRpb24uIEVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggZW5zdXJlcyB0aGF0IHRoZSBndWVzdCBoYW5kbGVzIHRoZSBlcnJvciwgcmF0aGVyIHRoYW4gS1ZNIHRlcm1pbmF0aW5nIHRoZSBWQ1BVIHJ1biBhbmQgcmFpc2luZyBhbiBleGNlcHRpb24gdG8gdXNlcnNwYWNlLgoKTm93LCBsZXQmIzM5O3Mgc2hpZnQgZ2VhcnMgYW5kIGxvb2sgZm9yIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucy4gTXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29kZSB3aWxsIGxlYWQgbWUgdG8gZXhhbWluaW5nIHRoZSBgc3ZtX3ZtZ2V4aXRfYmFkX2lucHV0YCBmdW5jdGlvbiwgbG9va2luZyBmb3IgYW55IHBvc3NpYmxlIHZ1bG5lcmFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3ZtX3ZtZ2V4aXRfYmFkX2lucHV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9zZXYuYz0zNjI0PXN0YXRpYyBpbnQgc2V0dXBfdm1nZXhpdF9zY3JhdGNoKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBib29sIHN5bmMsIHU2NCBtaW5fbGVuKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzcxMy1lX3NjcmF0Y2g6XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjM3MTQ6XHRzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX1NDUkFUQ0hfQVJFQSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTM3MTUtXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00MjE4PXN0YXRpYyBpbnQgc25wX2hhbmRsZV9ndWVzdF9yZXEoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGdwYV90IHJlcV9ncGEsIGdwYV90IHJlc3BfZ3BhKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDIzMS1cdGlmIChrdm1fcmVhZF9ndWVzdChrdm0sIHJlcV9ncGEsIHNldi1cdTAwM2VndWVzdF9yZXFfYnVmLCBQQUdFX1NJWkUpKSB7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQyMzI6XHRcdHN2bV92bWdleGl0X2JhZF9pbnB1dChzdm0sIEdIQ0JfRVJSX0lOVkFMSURfSU5QVVQpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00MjMzLVx0XHRyZXR1cm4gMTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQyNDktXHRpZiAoa3ZtX3dyaXRlX2d1ZXN0KGt2bSwgcmVzcF9ncGEsIHNldi1cdTAwM2VndWVzdF9yZXNwX2J1ZiwgUEFHRV9TSVpFKSkge1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0MjUwOlx0XHRzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX0lOUFVUKTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDI1MS1cdFx0cmV0dXJuIDE7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00MjkxPXN0YXRpYyBpbnQgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBncGFfdCByZXFfZ3BhLCBncGFfdCByZXNwX2dwYSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQzNDgtcmVxdWVzdF9pbnZhbGlkOlxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0MzQ5Olx0c3ZtX3ZtZ2V4aXRfYmFkX2lucHV0KHN2bSwgR0hDQl9FUlJfSU5WQUxJRF9JTlBVVCk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQzNTAtXHRyZXR1cm4gMTsgLyogcmVzdW1lIGd1ZXN0ICovXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00NTEwPWludCBzZXZfaGFuZGxlX3ZtZ2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDU0Ny1cdFx0XHQgICAgY29udHJvbC1cdTAwM2VnaGNiX2dwYSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ1NDg6XHRcdHN2bV92bWdleGl0X2JhZF9pbnB1dChzdm0sIEdIQ0JfRVJSX05PVF9SRUdJU1RFUkVEKTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDU0OS1cdFx0cmV0dXJuIDE7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NTU1LVx0XHRcdCAgICBzdm0tXHUwMDNlc2V2X2VzLmdoY2ItXHUwMDNlZ2hjYl91c2FnZSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ1NTY6XHRcdHN2bV92bWdleGl0X2JhZF9pbnB1dChzdm0sIEdIQ0JfRVJSX0lOVkFMSURfVVNBR0UpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NTU3LVx0XHRyZXR1cm4gMTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ1NjItXHRcdFx0ICAgIGNvbnRyb2wtXHUwMDNlZXhpdF9jb2RlKTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDU2MzpcdFx0c3ZtX3ZtZ2V4aXRfYmFkX2lucHV0KHN2bSwgR0hDQl9FUlJfSU5WQUxJRF9FVkVOVCk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ1NjQtXHRcdHJldHVybiAxO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDU3NC1cdFx0ZHVtcF9naGNiKHN2bSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ1NzU6XHRcdHN2bV92bWdleGl0X2JhZF9pbnB1dChzdm0sIEdIQ0JfRVJSX01JU1NJTkdfSU5QVVQpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NTc2LVx0XHRyZXR1cm4gMTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ2MDktXHRcdGlmICh0b19rdm1fc2V2X2luZm8odmNwdS1cdTAwM2Vrdm0pLVx1MDAzZWdoY2JfdmVyc2lvbiBcdTAwM2U9IDIgXHUwMDI2XHUwMDI2IGxlbiBcdTAwM2UgOCkge1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0NjEwOlx0XHRcdHN2bV92bWdleGl0X2JhZF9pbnB1dChzdm0sIEdIQ0JfRVJSX0lOVkFMSURfSU5QVVQpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NjExLVx0XHRcdHJldHVybiAxO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDY0My1cdFx0XHQgICAgICAgY29udHJvbC1cdTAwM2VleGl0X2luZm9fMSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ2NDQ6XHRcdFx0c3ZtX3ZtZ2V4aXRfYmFkX2lucHV0KHN2bSwgR0hDQl9FUlJfSU5WQUxJRF9JTlBVVCk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ2NDUtXHRcdH1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ2NjktXHRcdGlmIChzZXZfc25wX2FwX2NyZWF0aW9uKHN2bSkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ2NzA6XHRcdFx0c3ZtX3ZtZ2V4aXRfYmFkX2lucHV0KHN2bSwgR0hDQl9FUlJfSU5WQUxJRF9JTlBVVCk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ2NzEtXHRcdHJldHVybiAxO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDY3Ni1cdFx0ICAgIGNvbnRyb2wtXHUwMDNlZXhpdF9pbmZvXzEgPT0gY29udHJvbC1cdTAwM2VleGl0X2luZm9fMikge1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0Njc3Olx0XHRcdHN2bV92bWdleGl0X2JhZF9pbnB1dChzdm0sIEdIQ0JfRVJSX0lOVkFMSURfSU5QVVQpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00Njc4LVx0XHRcdHJldHVybiAxO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDY5OC1cdFx0XHQgICAgY29udHJvbC1cdTAwM2VleGl0X2NvZGUpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0Njk5Olx0XHRzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX0VWRU5UKTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDcwMC1cdFx0cmV0dXJuIDE7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD03MTE9c3RhdGljIGlubGluZSB2b2lkIHN2bV92bWdleGl0X2luamVjdF9leGNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0sIHU4IHZlY3Rvcilcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTcxNy1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6NzE4OnN0YXRpYyBpbmxpbmUgdm9pZCBzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3RydWN0IHZjcHVfc3ZtICpzdm0sIHU2NCBzdWJlcnJvcilcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNzE5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg2NwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgYSBTdXNwZWN0ZWQgU1ZNIFZNRVhJVCBJc3N1ZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwb3RlbnRpYWwgcHJvYmxlbSBvbiBteSByYWRhciwgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIFNlY3VyZSBWaXJ0dWFsIE1hY2hpbmUgKFNWTSkgb24geDg2LCBwcm9iYWJseSBhbiBpc3N1ZSB3aXRoIGEgYmFkIGlucHV0IHRyaWdnZXJpbmcgYSBgdm1leGl0YC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgZGVmaW5pdGlvbiBhbmQgcG90ZW50aWFsIGNhdXNlcyBvZiB0aGlzIHNwZWNpZmljIHNpdHVhdGlvbjogYHN2bV92bWdleGl0X2JhZF9pbnB1dGAuIFRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgdGhlIGF1dGhvcml0YXRpdmUgZGVmaW5pdGlvbiBmb3IgdGhpcyBjb25kaXRpb24gd2lsbCBiZSB3aXRoaW4gdGhlIEtWTSAoS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSkgc291cmNlcywgc3BlY2lmaWNhbGx5IHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgeDg2IGNvZGUgYW5kIHJlbGF0ZWQgaGVhZGVyIGZpbGVzLiBUaGUgaGVhZGVyIGZpbGUgYGFyY2gveDg2L2t2bS9zdm0vc3ZtLmhgIGlzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBUaGF0IGZpbGUgd2lsbCBjb250YWluIHRoZSBlbnVtZXJhdGVkIGRlZmluaXRpb24gb2YgdGhlIHBhcnRpY3VsYXIgVk1FWElUIGNvZGUgdGhhdCBpbnRlcmVzdHMgbWUuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBkZWZpbml0aW9uIHByb3ZpZGVzIGNsdWVzIGFib3V0IHRoZSBuYXR1cmUgb2YgdGhlIGJhZCBpbnB1dCwgcmVsZXZhbnQgcmVnaXN0ZXJzLCBvciBhbnkgb3RoZXIgaW1wb3J0YW50IGNvbnRleHQuIEZyb20gdGhlcmUsIEkgY2FuIHN0YXJ0IHRvIGZvcm11bGF0ZSBhIGh5cG90aGVzaXMgYWJvdXQgd2hhdCBjb25kaXRpb25zIG1pZ2h0IHRyaWdnZXIgdGhpcyBzcGVjaWZpYyBWTUVYSVQgYW5kLCBob3BlZnVsbHksIGxlYWQgdG8gYSBmaXggb3IgYXQgbGVhc3QgYSB3b3JrYXJvdW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc3ZtLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcxNTpcdFx0c3ZtX3ZtZ2V4aXRfc2V0X3JldHVybl9jb2RlKHN2bSwgR0hDQl9IVl9SRVNQX0lTU1VFX0VYQ0VQVElPTiwgZGF0YSk7XG4gNzE2Olx0fVxuIDcxNzpcdFxuIDcxODpcdHN0YXRpYyBpbmxpbmUgdm9pZCBzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3RydWN0IHZjcHVfc3ZtICpzdm0sIHU2NCBzdWJlcnJvcilcbiA3MTk6XHR7XG4gNzIwOlx0XHRzdm1fdm1nZXhpdF9zZXRfcmV0dXJuX2NvZGUoc3ZtLCBHSENCX0hWX1JFU1BfTUFMRk9STUVEX0lOUFVULCBzdWJlcnJvcik7XG4gNzIxOlx0fVxuIDcyMjpcdFxuIDcyMzpcdHN0YXRpYyBpbmxpbmUgdm9pZCBzdm1fdm1nZXhpdF9zdWNjZXNzKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCB1NjQgZGF0YSlcbiA3MjQ6XHR7XG4gNzI1Olx0XHRzdm1fdm1nZXhpdF9zZXRfcmV0dXJuX2NvZGUoc3ZtLCBHSENCX0hWX1JFU1BfTk9fQUNUSU9OLCBkYXRhKTtcbiA3MjY6XHR9XG4gNzI3Olx0XG4gNzI4Olx0c3RhdGljIGlubGluZSB2b2lkIHN2bV92bWdleGl0X25vX2FjdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdTY0IGRhdGEpXG4gNzI5Olx0e1xuIDczMDpcdFx0c3ZtX3ZtZ2V4aXRfc2V0X3JldHVybl9jb2RlKHN2bSwgR0hDQl9IVl9SRVNQX05PX0FDVElPTiwgZGF0YSk7XG4gNzMxOlx0fVxuIDczMjpcdFxuIDczMzpcdC8qXG4gNzM0Olx0ICogVGhlIE1TUlBNIGlzIDhLaUIgaW4gc2l6ZSwgZGl2aWRlZCBpbnRvIGZvdXIgMktpQiByYW5nZXMgKHRoZSBmb3VydGggcmFuZ2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU1NgoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHN1bW1hcml6aW5nIHRoZSAmIzM0O3Rob3VnaHRzJiMzNDsgcmVsYXRlZCB0byBgc3ZtX3ZtZ2V4aXRfc2V0X3JldHVybl9jb2RlYCwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZToKCioqTXkgUGVyc3BlY3RpdmUgb24gYHN2bV92bWdleGl0X3NldF9yZXR1cm5fY29kZWAqKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYHN2bV92bWdleGl0X3NldF9yZXR1cm5fY29kZWAuIEltbWVkaWF0ZWx5LCBteSBtaW5kIGp1bXBzIHRvIHRoZSBjb3JlIG9mIHRoaXM6IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYW4gU1ZNIChTZWN1cmUgVmlydHVhbCBNYWNoaW5lKSBhbmQsIG1vcmUgc3BlY2lmaWNhbGx5LCBhIFZNLWV4aXQuIFRoZSBrZXkgaGVyZSBpcyAqc2V0dGluZyogYSByZXR1cm4gY29kZS4gVGhpcyBzdWdnZXN0cyB3ZSBhcmUgaW4gdGhlIHByaXZpbGVnZWQgbW9kZSBvZiB0aGUgaG9zdCBPUyBhbmQgbWFuaXB1bGF0aW5nIHRoZSBleGl0IHByb2Nlc3MgYWZ0ZXIgYSB0cmFwLgoKRmlyc3QsIEkgbmVlZCB0byBjb25zaWRlciAqd2h5KiB3ZSYjMzk7cmUgc2V0dGluZyBhIHJldHVybiBjb2RlLiBJcyB0aGlzIHJlbGF0ZWQgdG8gYW4gZXhjZXB0aW9uPyBBIGd1ZXN0IGluc3RydWN0aW9uPyBBIHNlY3VyaXR5IGV2ZW50PyAgVGhlIHJlYXNvbiBpcyBmdW5kYW1lbnRhbCB0byB0aGUgY29udGV4dC4gQSBwcm9wZXJseSBjb2RlZCBzeXN0ZW0gc2hvdWxkIGF2b2lkIHRoZSByZXR1cm4gb2YgZ2VuZXJpYyBlcnJvcnMuCgpUaGlua2luZyBhYm91dCB0aGUgY29kZSBpdHNlbGYsIEkmIzM5O20gaW1hZ2luaW5nIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgVk0tZXhpdCBoYW5kbGVyLiBJJiMzOTttIHZpc3VhbGl6aW5nIHRoZSBwb3RlbnRpYWwgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkOiB0aGUgVk1DUyAoVmlydHVhbCBNYWNoaW5lIENvbnRyb2wgU3RydWN0dXJlKSwgdGhlIGV4aXQgaW5mb3JtYXRpb24gYXJlYSwgdGhlIEdQUnMgKEdlbmVyYWwgUHVycG9zZSBSZWdpc3RlcnMpLCBhbmQgdGhlIG92ZXJhbGwgc3RhdGUgb2YgdGhlIHZpcnR1YWwgbWFjaGluZS4gIEkmIzM5O20gdHJ5aW5nIHRvIG1lbnRhbGx5IHRyYWNlIHRoZSBleGVjdXRpb24gZmxvdy4gV2hlcmUgaW4gdGhlIHByb2Nlc3MgZG9lcyB0aGlzIGNvZGUgcmVzaWRlPyBEb2VzIGl0IGhhcHBlbiBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGhhbmRsaW5nIG9mIHRoZSBWTSBpbnN0cnVjdGlvbj8KClRoZSAmIzM0O3NldHRpbmcmIzM0OyBwYXJ0IGlzIHdoYXQgaW50cmlndWVzIG1lLiBXaGF0IHJhbmdlIG9mIHJldHVybiBjb2RlcyBhcmUgd2UgdGFsa2luZyBhYm91dD8gQXJlIHdlIGRlYWxpbmcgd2l0aCBlcnJvciBjb2RlcyBkZWZpbmVkIGJ5IEFNRCwgYSBjdXN0b20gc2V0LCBvciBwb3NzaWJseSBhIG1hcHBpbmcgdG8gYSBzcGVjaWZpYyBPUyYjMzk7cyBlcnJvciBjb2Rlcz8gSWYgd2UmIzM5O3JlIHNldHRpbmcgYSBjdXN0b20gdmFsdWUsIEkgaW1tZWRpYXRlbHkgd2FudCB0byBpbnZlc3RpZ2F0ZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhpcyBjdXN0b20gY2FsbC4gV2UgbmVlZCB0byBiZSBjcnlzdGFsIGNsZWFyIGFib3V0IHRoZSBtZWFuaW5nIG9mIHRoZXNlIGNvZGVzIHRvIGVuc3VyZSBwcm9wZXIgZXJyb3IgaGFuZGxpbmcgb24gdGhlIGd1ZXN0IHNpZGUuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGxvdy1sZXZlbCBWTSBiZWhhdmlvcnMuCgpBbHNvLCBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoZSBwb3RlbnRpYWwgcGl0ZmFsbHM6IHdoYXQgaGFwcGVucyBpZiB0aGUgcmV0dXJuIGNvZGUgaXNuJiMzOTt0IHByb3Blcmx5IGhhbmRsZWQgYnkgdGhlIGd1ZXN0PyBEb2VzIHRoaXMgbGVhZCB0byBhIGNyYXNoPyBEb2VzIGl0IGV4cG9zZSBhbnkgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzPyBQcm9wZXIgdGVzdGluZyBpcyBvYnZpb3VzbHkgY3JpdGljYWwgaGVyZSwgZXNwZWNpYWxseSBpbiBhIHNlY3VyaXR5IGNvbnRleHQuCgpGaW5hbGx5LCBJJiMzOTttIGNvbnNpZGVyaW5nIHRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIFRoaXMgaXMgbGlrZWx5IGEgdmVyeSBmcmVxdWVudGx5LWNhbGxlZCBmdW5jdGlvbi4gIElmIHRoZXJlIGFyZSBvcHRpbWl6YXRpb25zIHRoYXQgY2FuIGJlIGRvbmUgdG8gdGhpcyBmdW5jdGlvbiwgdGhleSBzaG91bGQgYmUgaW52ZXN0aWdhdGVkIGVhcmx5IG9uLiBDb3VsZCB3ZSBjYWNoZSBpbmZvcm1hdGlvbiwgc3RyZWFtbGluZSBkYXRhIHN0cnVjdHVyZSBhY2Nlc3MsIG9yIHVzZSBtb3JlIGVmZmljaWVudCBlcnJvciBoYW5kbGluZyB0ZWNobmlxdWVzPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdm1fdm1nZXhpdF9zZXRfcmV0dXJuX2NvZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTY5ND1zdGF0aWMgaW5saW5lIGJvb2wgaXNfdm5taV9lbmFibGVkKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNzAzLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo3MDQ6c3RhdGljIGlubGluZSB2b2lkIHN2bV92bWdleGl0X3NldF9yZXR1cm5fY29kZShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNzA1LVx0XHRcdFx0XHRcdHU2NCByZXNwb25zZSwgdTY0IGRhdGEpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD03MTE9c3RhdGljIGlubGluZSB2b2lkIHN2bV92bWdleGl0X2luamVjdF9leGNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0sIHU4IHZlY3Rvcilcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTcxNC1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6NzE1Olx0c3ZtX3ZtZ2V4aXRfc2V0X3JldHVybl9jb2RlKHN2bSwgR0hDQl9IVl9SRVNQX0lTU1VFX0VYQ0VQVElPTiwgZGF0YSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTcxNi19XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD03MTg9c3RhdGljIGlubGluZSB2b2lkIHN2bV92bWdleGl0X2JhZF9pbnB1dChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdTY0IHN1YmVycm9yKVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC03MTkte1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo3MjA6XHRzdm1fdm1nZXhpdF9zZXRfcmV0dXJuX2NvZGUoc3ZtLCBHSENCX0hWX1JFU1BfTUFMRk9STUVEX0lOUFVULCBzdWJlcnJvcik7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTcyMS19XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD03MjM9c3RhdGljIGlubGluZSB2b2lkIHN2bV92bWdleGl0X3N1Y2Nlc3Moc3RydWN0IHZjcHVfc3ZtICpzdm0sIHU2NCBkYXRhKVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC03MjQte1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo3MjU6XHRzdm1fdm1nZXhpdF9zZXRfcmV0dXJuX2NvZGUoc3ZtLCBHSENCX0hWX1JFU1BfTk9fQUNUSU9OLCBkYXRhKTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNzI2LX1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTcyOD1zdGF0aWMgaW5saW5lIHZvaWQgc3ZtX3ZtZ2V4aXRfbm9fYWN0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCB1NjQgZGF0YSlcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNzI5LXtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6NzMwOlx0c3ZtX3ZtZ2V4aXRfc2V0X3JldHVybl9jb2RlKHN2bSwgR0hDQl9IVl9SRVNQX05PX0FDVElPTiwgZGF0YSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTczMS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODM0CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHMsIGdlYXJlZCB0b3dhcmRzIGFuIGV4cGVydDoKCioqRGl2aW5nIGludG8gYHN2bS5oYCAtIExpbmVzIDcwMC03MTAqKgoKT2theSwgdGltZSB0byB6ZXJvIGluIG9uIGEgc3BlY2lmaWMgc2VjdGlvbi4gTGV0JiMzOTtzIHB1bGwgdXAgdGhlIGBzdm0uaGAgaGVhZGVyIGZpbGUgYW5kIGhlYWQgZGlyZWN0bHkgdG8gbGluZXMgNzAwIHRocm91Z2ggNzEwLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYXJvdW5kIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24gb3IgZGF0YSBzdHJ1Y3R1cmUuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIGtlcm5lbCBjb21wdXRhdGlvbiBpcyB0YWtpbmcgcGxhY2UuIFdoYXQgSSByZWFsbHkgbmVlZCB0byBrbm93IGlzIHdoZXRoZXIgdGhpcyBzZWN0aW9uIGlzIHRoZSBjcml0aWNhbCBib3R0bGVuZWNrLCBhbmQgdGhpcyBpbmZvcm1hdGlvbiBtYXkgaGVscC4gSSYjMzk7bGwgZm9jdXMgb24gdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgY29udHJvbCBmbG93LiBUaGVyZSYjMzk7cyBwcm9iYWJseSBzb21ldGhpbmcgc3VidGxlIEkgbmVlZCB0byBjYXRjaCBoZXJlIHRoYXQgSSBoYXZlbiYjMzk7dCBzZWVuIGR1cmluZyBteSBpbml0aWFsIHJldmlldy4gVGltZSB0byBnZXQgbXkgaGVhZCBpbiB0aGUgZ2FtZSBhbmQgdW5kZXJzdGFuZCB0aGUgbnV0cyBhbmQgYm9sdHMgb2Ygd2hhdCYjMzk7cyBoYXBwZW5pbmcgaW4gdGhpcyBiaXQgb2YgY29kZS4gSSYjMzk7bSBob3BpbmcgSSBjYW4gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUga2VybmVsIGlzIGhhbmRsaW5nIHRoaXMgY3JpdGljYWwgcGFydCBvZiB0aGUgYWxnb3JpdGhtIHdpdGggdGhpcyBkZWVwIGRpdmUsIHdoaWNoIGlzIGNyaXRpY2FsIHRvIGVuaGFuY2luZyB0aGUgY3VycmVudCBkZXNpZ24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9zdm0uaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzAwOlx0XHRlbHNlXG4gNzAxOlx0XHRcdHJldHVybiBmYWxzZTtcbiA3MDI6XHR9XG4gNzAzOlx0XG4gNzA0Olx0c3RhdGljIGlubGluZSB2b2lkIHN2bV92bWdleGl0X3NldF9yZXR1cm5fY29kZShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSxcbiA3MDU6XHRcdFx0XHRcdFx0XHR1NjQgcmVzcG9uc2UsIHU2NCBkYXRhKVxuIDcwNjpcdHtcbiA3MDc6XHRcdGdoY2Jfc2V0X3N3X2V4aXRfaW5mb18xKHN2bS1cdTAwM2VzZXZfZXMuZ2hjYiwgcmVzcG9uc2UpO1xuIDcwODpcdFx0Z2hjYl9zZXRfc3dfZXhpdF9pbmZvXzIoc3ZtLVx1MDAzZXNldl9lcy5naGNiLCBkYXRhKTtcbiA3MDk6XHR9XG4gNzEwOlx0XG4gNzExOlx0c3RhdGljIGlubGluZSB2b2lkIHN2bV92bWdleGl0X2luamVjdF9leGNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0sIHU4IHZlY3RvcilcbiA3MTI6XHR7XG4gNzEzOlx0XHR1NjQgZGF0YSA9IFNWTV9FVlRJTkpfVkFMSUQgfCBTVk1fRVZUSU5KX1RZUEVfRVhFUFQgfCB2ZWN0b3I7XG4gNzE0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzg2CgkJCQkJCQlvdXRwdXQ6IDI4NQoJCQkJCQkJdGhvdWdodHM6IDY2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTi9LQVNBTiBBbmFseXNpcyBvZiBTRVYtU05QIFZNR0VYSVQgRXJyb3IgSGFuZGxpbmcgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBtZXRpY3Vsb3VzbHkuIFRoaXMgcGF0Y2ggZm9jdXNlcyBvbiBob3cgd2UgaGFuZGxlIGVycm9ycyB3aXRoaW4gdGhlIEtWTSBTRVYtU05QIFZNR0VYSVQgcHJvY2Vzcy4gTXkgcHJpbWFyeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgc2FmZXR5IHZ1bG5lcmFiaWxpdGllcyB0aGF0IEtNU0FOIG9yIEtBU0FOIHdvdWxkIGZsYWcuCgpGaXJzdCwgSSBleGFtaW5lIHRoZSBjb2RlIGluIGRldGFpbCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBmdW5jdGlvbnMgYHNucF9oYW5kbGVfZ3Vlc3RfcmVxYCBhbmQgYHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcWAuIFRoZSBrZXkgY2hhbmdlcyBhcmUgaW4gaG93IHdlIGRlYWwgd2l0aCBmYWlsdXJlcyBmcm9tIGBrdm1fcmVhZF9ndWVzdGAgYW5kIGBrdm1fd3JpdGVfZ3Vlc3RgIGNhbGxzLiBQcmV2aW91c2x5LCBhIGZhaWx1cmUgcmVzdWx0ZWQgaW4gYSBgLUVJT2AgcmV0dXJuLCB3aGljaCB3b3VsZCBhYm9ydCB0byB0aGUgaG9zdCB1c2Vyc3BhY2UuIE5vdywgdGhlIHBhdGNoIHV0aWxpemVzIGBzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX0lOUFVUKWAgYW5kIHJldHVybnMgMSwgc2lnbmFsaW5nIGludmFsaWQgaW5wdXQgZGlyZWN0bHkgdG8gdGhlIGd1ZXN0IGFjY29yZGluZyB0byB0aGUgR0hDQiBzcGVjaWZpY2F0aW9uLgoKSSYjMzk7bSBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgZm91ciBrZXkgYXJlYXM6IAoqICAgKipVbmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZToqKiBBcmUgd2UgcmVhZGluZyBvciB1c2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiB0aGlzIG1vZGlmaWVkIGxvZ2ljPyBUaGUgY29kZSBzZXRzIGEgY29uc3RhbnQgZXJyb3IgY29kZSBpbnRvIEdIQ0IgYW5kIHJldHVybnMsIG5vLgoqICAgKipVbmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9uOioqIEFyZSB3ZSBhbGxvY2F0aW5nIGFueSBuZXcgYnVmZmVycyB3aXRob3V0IGluaXRpYWxpemluZyB0aGVtPyBJIHNlZSBubyBuZXcgYnVmZmVyIGFsbG9jYXRpb25zLgoqICAgKipLZXJuZWwgaW5mb3JtYXRpb24gbGVha3M6KiogQXJlIHdlIGNvcHlpbmcgYW55IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB0aGUgZ3Vlc3Qgb3IgdXNlciBzcGFjZT8gV2hlbiB0aGUgYGt2bV9yZWFkX2d1ZXN0YCBvciBga3ZtX3dyaXRlX2d1ZXN0YCBvcGVyYXRpb25zIGZhaWwsIHRoZSBwYXRjaCBzaW1wbHkgc2V0cyB0aGUgZXJyb3IgY29kZSBpbiB0aGUgR0hDQiBhbmQgcmV0dXJucyB3aXRob3V0IGNvcHlpbmcgdGhlIGJ1ZmZlciwgc28gbm8uCiogICAqKkJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlczoqKiBDb3VsZCB0aGUgbmV3IGxvZ2ljIGJyYW5jaCBiYXNlZCBvbiBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3I/IEluIGBzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXFgLCBpZiBga3ZtX3JlYWRfZ3Vlc3RgIGZhaWxzLCB0aGVyZSBpcyBhIGBnb3RvIHJlcXVlc3RfaW52YWxpZDtgIGFuZCBgbXNnX3R5cGVgIGlzIG5ldmVyIHJlYWQuCgpJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoZSBjaGFuZ2VzIGFyZSBzYWZlIGFzIHRoZXkgYXJlIGNvcnJlY3RseSBzaWduYWxsaW5nIGludmFsaWQgaW5wdXQgdG8gdGhlIGd1ZXN0IGFzIGRlc2NyaWJlZCBpbiB0aGUgR0hDQiBzcGVjaWZpY2F0aW9uLgoKSW4gY29uY2x1c2lvbiwgdGhpcyBwYXRjaCBpcyBzb2xlbHkgdXBkYXRpbmcgdGhlIGVycm9yIGhhbmRsaW5nIHRvIGFsaWduIHdpdGggdGhlIEdIQ0Igc3BlY2lmaWNhdGlvbiBhbmQgZWxpbWluYXRlcyB0aGUgcmlza3MgaWRlbnRpZmllZCBhYm92ZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBvZiB0aGUgS01TQU4gb3IgS0FTQU4gdnVsbmVyYWJpbGl0aWVzIEkmIzM5O20gbG9va2luZyBmb3IuIFRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGBmYWxzZWAuIEkgYW0gc2F0aXNmaWVkIHdpdGggdGhpcyBhc3Nlc3NtZW50LCBidXQgSSYjMzk7bGwgZG91YmxlLWNoZWNrIGFsbCB0aGUgZGV0YWlscyBvbmUgbW9yZSB0aW1lIHRvIGJlIGFic29sdXRlbHkgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gS1ZNIFNFVi1TTlAgZ3Vlc3QgcmVxdWVzdCBoYW5kbGVycyAoYHNucF9oYW5kbGVfZ3Vlc3RfcmVxYCBhbmQgYHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcWApLiBTcGVjaWZpY2FsbHksIHdoZW4gcmVhZGluZy93cml0aW5nL2NsZWFyaW5nIGd1ZXN0IG1lbW9yeSBmYWlscyAoYGt2bV9yZWFkX2d1ZXN0YCwgYGt2bV93cml0ZV9ndWVzdGAsIG9yIGBrdm1fY2xlYXJfZ3Vlc3RgKSwgaW5zdGVhZCBvZiByZXR1cm5pbmcgYC1FSU9gICh3aGljaCBjYXVzZWQgS1ZNIHRvIGV4aXQgdG8gaG9zdCB1c2Vyc3BhY2UpLCBLVk0gbm93IGZvcm1hdHMgYSBHSENCIGJhZCBpbnB1dCBlcnJvciByZXNwb25zZSAoYEdIQ0JfRVJSX0lOVkFMSURfSU5QVVRgIHZpYSBgc3ZtX3ZtZ2V4aXRfYmFkX2lucHV0KClgKSBhbmQgcmVzdW1lcyB0aGUgZ3Vlc3QgKGByZXR1cm4gMWApLlxuXG5UaGVzZSBjaGFuZ2VzIHNvbGVseSBhZmZlY3QgZXJyb3IgcmV0dXJuIGNvZGVzIGFuZCBjb250cm9sIGZsb3cgZm9yIGd1ZXN0IGVycm9yIHJlcG9ydGluZzpcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHN0cnVjdCBwYWRkaW5nIGlzIGNvcGllZCB0byB1c2Vyc3BhY2Ugb3IgdGhlIGd1ZXN0LlxuMi4gSW4gYHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcWAsIGlmIHJlYWRpbmcgYG1zZ190eXBlYCBmYWlscywgY29udHJvbCBqdW1wcyBzdHJhaWdodCB0byBgcmVxdWVzdF9pbnZhbGlkYCwgYXZvaWRpbmcgYW55IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGBtc2dfdHlwZWAuXG4zLiBObyBoZWFwL3N0YWNrIGFsbG9jYXRpb25zIG9yIGJ1ZmZlciBzaXplL29mZnNldCBtYW5pcHVsYXRpb25zIGFyZSBpbnRyb2R1Y2VkLlxuXG5BcyB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIEtWTSBTRVYtU05QIGd1ZXN0IHJlcXVlc3QgaGFuZGxlcnMgKGBzbnBfaGFuZGxlX2d1ZXN0X3JlcWAgYW5kIGBzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXFgKS4gU3BlY2lmaWNhbGx5LCB3aGVuIHJlYWRpbmcvd3JpdGluZy9jbGVhcmluZyBndWVzdCBtZW1vcnkgZmFpbHMgKGBrdm1fcmVhZF9ndWVzdGAsIGBrdm1fd3JpdGVfZ3Vlc3RgLCBvciBga3ZtX2NsZWFyX2d1ZXN0YCksIGluc3RlYWQgb2YgcmV0dXJuaW5nIGAtRUlPYCAod2hpY2ggY2F1c2VkIEtWTSB0byBleGl0IHRvIGhvc3QgdXNlcnNwYWNlKSwgS1ZNIG5vdyBmb3JtYXRzIGEgR0hDQiBiYWQgaW5wdXQgZXJyb3IgcmVzcG9uc2UgKGBHSENCX0VSUl9JTlZBTElEX0lOUFVUYCB2aWEgYHN2bV92bWdleGl0X2JhZF9pbnB1dCgpYCkgYW5kIHJlc3VtZXMgdGhlIGd1ZXN0IChgcmV0dXJuIDFgKS5cblxuVGhlc2UgY2hhbmdlcyBzb2xlbHkgYWZmZWN0IGVycm9yIHJldHVybiBjb2RlcyBhbmQgY29udHJvbCBmbG93IGZvciBndWVzdCBlcnJvciByZXBvcnRpbmc6XG4xLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBzdHJ1Y3QgcGFkZGluZyBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlIG9yIHRoZSBndWVzdC5cbjIuIEluIGBzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXFgLCBpZiByZWFkaW5nIGBtc2dfdHlwZWAgZmFpbHMsIGNvbnRyb2wganVtcHMgc3RyYWlnaHQgdG8gYHJlcXVlc3RfaW52YWxpZGAsIGF2b2lkaW5nIGFueSBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBgbXNnX3R5cGVgLlxuMy4gTm8gaGVhcC9zdGFjayBhbGxvY2F0aW9ucyBvciBidWZmZXIgc2l6ZS9vZmZzZXQgbWFuaXB1bGF0aW9ucyBhcmUgaW50cm9kdWNlZC5cblxuQXMgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjEzOjE0LjY3NTg4Nzc4NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1ODU5ODQzMjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTV9BTURcIixcbiAgICBcIktWTV9BTURfU0VWXCIsXG4gICAgXCJDUllQVE9fREVWX1NQX1BTUFwiLFxuICAgIFwiQ1JZUFRPX0RFVl9DQ1BfRERcIixcbiAgICBcIkFNRF9JT01NVVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNucF9oYW5kbGVfZ3Vlc3RfcmVxXCIsXG4gICAgXCJzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXFcIixcbiAgICBcInNldl9oYW5kbGVfdm1nZXhpdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gS1ZNIFNFVi1TTlAgZ3Vlc3QgcmVxdWVzdCBoYW5kbGVycyAoYHNucF9oYW5kbGVfZ3Vlc3RfcmVxYCBhbmQgYHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcWApLiBTcGVjaWZpY2FsbHksIHdoZW4gcmVhZGluZy93cml0aW5nL2NsZWFyaW5nIGd1ZXN0IG1lbW9yeSBmYWlscyAoYGt2bV9yZWFkX2d1ZXN0YCwgYGt2bV93cml0ZV9ndWVzdGAsIG9yIGBrdm1fY2xlYXJfZ3Vlc3RgKSwgaW5zdGVhZCBvZiByZXR1cm5pbmcgYC1FSU9gICh3aGljaCBjYXVzZWQgS1ZNIHRvIGV4aXQgdG8gaG9zdCB1c2Vyc3BhY2UpLCBLVk0gbm93IGZvcm1hdHMgYSBHSENCIGJhZCBpbnB1dCBlcnJvciByZXNwb25zZSAoYEdIQ0JfRVJSX0lOVkFMSURfSU5QVVRgIHZpYSBgc3ZtX3ZtZ2V4aXRfYmFkX2lucHV0KClgKSBhbmQgcmVzdW1lcyB0aGUgZ3Vlc3QgKGByZXR1cm4gMWApLlxcblxcblRoZXNlIGNoYW5nZXMgc29sZWx5IGFmZmVjdCBlcnJvciByZXR1cm4gY29kZXMgYW5kIGNvbnRyb2wgZmxvdyBmb3IgZ3Vlc3QgZXJyb3IgcmVwb3J0aW5nOlxcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHN0cnVjdCBwYWRkaW5nIGlzIGNvcGllZCB0byB1c2Vyc3BhY2Ugb3IgdGhlIGd1ZXN0LlxcbjIuIEluIGBzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXFgLCBpZiByZWFkaW5nIGBtc2dfdHlwZWAgZmFpbHMsIGNvbnRyb2wganVtcHMgc3RyYWlnaHQgdG8gYHJlcXVlc3RfaW52YWxpZGAsIGF2b2lkaW5nIGFueSBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBgbXNnX3R5cGVgLlxcbjMuIE5vIGhlYXAvc3RhY2sgYWxsb2NhdGlvbnMgb3IgYnVmZmVyIHNpemUvb2Zmc2V0IG1hbmlwdWxhdGlvbnMgYXJlIGludHJvZHVjZWQuXFxuXFxuQXMgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gS1ZNIEFNRCBTRVYtU05QIGd1ZXN0IHJlcXVlc3QgaGFuZGxpbmcgZnVuY3Rpb25zIChzbnBfaGFuZGxlX2d1ZXN0X3JlcSBhbmQgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxKS4gV2hlbiBndWVzdCBtZW1vcnkgcmVhZC93cml0ZSBvciBjZXJ0aWZpY2F0ZSB0YWJsZSBjbGVhcmFuY2UgZmFpbHMsIEtWTSBub3cgcmVwb3J0cyBHSENCX0VSUl9JTlZBTElEX0lOUFVUIHRvIHRoZSBndWVzdCBhbmQgcmVzdW1lcyBndWVzdCBleGVjdXRpb24gcmF0aGVyIHRoYW4gcmV0dXJuaW5nIC1FSU8gdG8gdXNlcnNwYWNlLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBLVk0gY29udHJvbCBmbG93IGFuZCBWTSBzdGF0ZSBoYW5kbGluZyBvbiBhbWQ2NC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjI6MTM6MTQuNjc1ODkxNjk2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ5OTIzNjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOGY4MGM3ODdiZDNkYTEzOGE2ZDdhNjRiOGI3ODBkMWYxNGQ5NDZkMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAxMCAyMjoxMzoxMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xcbmluZGV4IDU3MDU3MjNmMWY0MTIuLmQwNzU2MjMxMDUxOWEgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcXG5AQCAtNDIyOCw4ICs0MjI4LDEwIEBAIHN0YXRpYyBpbnQgc25wX2hhbmRsZV9ndWVzdF9yZXEoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGdwYV90IHJlcV9ncGEsIGdwYV90IHJlc3BfXFxuIFxcbiBcXHRndWFyZChtdXRleCkoXFx1MDAyNnNldi1cXHUwMDNlZ3Vlc3RfcmVxX211dGV4KTtcXG4gXFxuLVxcdGlmIChrdm1fcmVhZF9ndWVzdChrdm0sIHJlcV9ncGEsIHNldi1cXHUwMDNlZ3Vlc3RfcmVxX2J1ZiwgUEFHRV9TSVpFKSlcXG4tXFx0XFx0cmV0dXJuIC1FSU87XFxuK1xcdGlmIChrdm1fcmVhZF9ndWVzdChrdm0sIHJlcV9ncGEsIHNldi1cXHUwMDNlZ3Vlc3RfcmVxX2J1ZiwgUEFHRV9TSVpFKSkge1xcbitcXHRcXHRzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX0lOUFVUKTtcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcdH1cXG4gXFxuIFxcdGRhdGEuZ2N0eF9wYWRkciA9IF9fcHNwX3BhKHNldi1cXHUwMDNlc25wX2NvbnRleHQpO1xcbiBcXHRkYXRhLnJlcV9wYWRkciA9IF9fcHNwX3BhKHNldi1cXHUwMDNlZ3Vlc3RfcmVxX2J1Zik7XFxuQEAgLTQyNDQsOCArNDI0NiwxMCBAQCBzdGF0aWMgaW50IHNucF9oYW5kbGVfZ3Vlc3RfcmVxKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBncGFfdCByZXFfZ3BhLCBncGFfdCByZXNwX1xcbiBcXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2ICFmd19lcnIpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHRpZiAoa3ZtX3dyaXRlX2d1ZXN0KGt2bSwgcmVzcF9ncGEsIHNldi1cXHUwMDNlZ3Vlc3RfcmVzcF9idWYsIFBBR0VfU0laRSkpXFxuLVxcdFxcdHJldHVybiAtRUlPO1xcbitcXHRpZiAoa3ZtX3dyaXRlX2d1ZXN0KGt2bSwgcmVzcF9ncGEsIHNldi1cXHUwMDNlZ3Vlc3RfcmVzcF9idWYsIFBBR0VfU0laRSkpIHtcXG4rXFx0XFx0c3ZtX3ZtZ2V4aXRfYmFkX2lucHV0KHN2bSwgR0hDQl9FUlJfSU5WQUxJRF9JTlBVVCk7XFxuK1xcdFxcdHJldHVybiAxO1xcbitcXHR9XFxuIFxcbiBcXHQvKiBObyBhY3Rpb24gaXMgcmVxdWVzdGVkICpmcm9tIEtWTSogaWYgdGhlcmUgd2FzIGEgZmlybXdhcmUgZXJyb3IuICovXFxuIFxcdHN2bV92bWdleGl0X25vX2FjdGlvbihzdm0sIFNOUF9HVUVTVF9FUlIoMCwgZndfZXJyKSk7XFxuQEAgLTQyOTYsNyArNDMwMCw3IEBAIHN0YXRpYyBpbnQgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBncGFfdCByZXFfZ3BhLCBncGFfdCByXFxuIFxcbiBcXHRpZiAoa3ZtX3JlYWRfZ3Vlc3Qoa3ZtLCByZXFfZ3BhICsgb2Zmc2V0b2Yoc3RydWN0IHNucF9ndWVzdF9tc2dfaGRyLCBtc2dfdHlwZSksXFxuIFxcdFxcdFxcdCAgIFxcdTAwMjZtc2dfdHlwZSwgMSkpXFxuLVxcdFxcdHJldHVybiAtRUlPO1xcbitcXHRcXHRnb3RvIHJlcXVlc3RfaW52YWxpZDtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIEFzIHBlciBHSENCIHNwZWMsIHJlcXVlc3RzIG9mIHR5cGUgTVNHX1JFUE9SVF9SRVEgYWxzbyBhbGxvdyBmb3JcXG5AQCAtNDMzNiw3ICs0MzQwLDcgQEAgc3RhdGljIGludCBzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXEoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGdwYV90IHJlcV9ncGEsIGdwYV90IHJcXG4gXFx0XFx0ICogY2VydGlmaWNhdGUgdGFibGUgaXMgdGVybWluYXRlZCBieSAyNC1ieXRlcyBvZiB6ZXJvZXMuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoZGF0YV9ucGFnZXMgXFx1MDAyNlxcdTAwMjYga3ZtX2NsZWFyX2d1ZXN0KGt2bSwgZGF0YV9ncGEsIDI0KSlcXG4tXFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuK1xcdFxcdFxcdGdvdG8gcmVxdWVzdF9pbnZhbGlkO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gc25wX2hhbmRsZV9ndWVzdF9yZXEoc3ZtLCByZXFfZ3BhLCByZXNwX2dwYSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjEzOjE2LjEyNjQyMTA4M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NjM5ODQ1MTUxMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiS1ZNX0FNRF9TRVZcIixcbiAgICBcIkNSWVBUT19ERVZfU1BfUFNQXCIsXG4gICAgXCJDUllQVE9fREVWX0NDUF9ERFwiLFxuICAgIFwiQU1EX0lPTU1VXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic25wX2hhbmRsZV9ndWVzdF9yZXFcIixcbiAgICBcInNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcVwiLFxuICAgIFwic2V2X2hhbmRsZV92bWdleGl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gS1ZNIEFNRCBTRVYtU05QIGd1ZXN0IHJlcXVlc3QgaGFuZGxpbmcgZnVuY3Rpb25zIChzbnBfaGFuZGxlX2d1ZXN0X3JlcSBhbmQgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxKS4gV2hlbiBndWVzdCBtZW1vcnkgcmVhZC93cml0ZSBvciBjZXJ0aWZpY2F0ZSB0YWJsZSBjbGVhcmFuY2UgZmFpbHMsIEtWTSBub3cgcmVwb3J0cyBHSENCX0VSUl9JTlZBTElEX0lOUFVUIHRvIHRoZSBndWVzdCBhbmQgcmVzdW1lcyBndWVzdCBleGVjdXRpb24gcmF0aGVyIHRoYW4gcmV0dXJuaW5nIC1FSU8gdG8gdXNlcnNwYWNlLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBLVk0gY29udHJvbCBmbG93IGFuZCBWTSBzdGF0ZSBoYW5kbGluZyBvbiBhbWQ2NC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4ZjgwYzc4N2JkM2RhMTM4YTZkN2E2NGI4Yjc4MGQxZjE0ZDk0NmQyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMjI6MTM6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuaW5kZXggNTcwNTcyM2YxZjQxMi4uZDA3NTYyMzEwNTE5YSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbkBAIC00MjI4LDggKzQyMjgsMTAgQEAgc3RhdGljIGludCBzbnBfaGFuZGxlX2d1ZXN0X3JlcShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgZ3BhX3QgcmVxX2dwYSwgZ3BhX3QgcmVzcF9cbiBcbiBcdGd1YXJkKG11dGV4KShcdTAwMjZzZXYtXHUwMDNlZ3Vlc3RfcmVxX211dGV4KTtcbiBcbi1cdGlmIChrdm1fcmVhZF9ndWVzdChrdm0sIHJlcV9ncGEsIHNldi1cdTAwM2VndWVzdF9yZXFfYnVmLCBQQUdFX1NJWkUpKVxuLVx0XHRyZXR1cm4gLUVJTztcbitcdGlmIChrdm1fcmVhZF9ndWVzdChrdm0sIHJlcV9ncGEsIHNldi1cdTAwM2VndWVzdF9yZXFfYnVmLCBQQUdFX1NJWkUpKSB7XG4rXHRcdHN2bV92bWdleGl0X2JhZF9pbnB1dChzdm0sIEdIQ0JfRVJSX0lOVkFMSURfSU5QVVQpO1xuK1x0XHRyZXR1cm4gMTtcbitcdH1cbiBcbiBcdGRhdGEuZ2N0eF9wYWRkciA9IF9fcHNwX3BhKHNldi1cdTAwM2VzbnBfY29udGV4dCk7XG4gXHRkYXRhLnJlcV9wYWRkciA9IF9fcHNwX3BhKHNldi1cdTAwM2VndWVzdF9yZXFfYnVmKTtcbkBAIC00MjQ0LDggKzQyNDYsMTAgQEAgc3RhdGljIGludCBzbnBfaGFuZGxlX2d1ZXN0X3JlcShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgZ3BhX3QgcmVxX2dwYSwgZ3BhX3QgcmVzcF9cbiBcdGlmIChyZXQgXHUwMDI2XHUwMDI2ICFmd19lcnIpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRpZiAoa3ZtX3dyaXRlX2d1ZXN0KGt2bSwgcmVzcF9ncGEsIHNldi1cdTAwM2VndWVzdF9yZXNwX2J1ZiwgUEFHRV9TSVpFKSlcbi1cdFx0cmV0dXJuIC1FSU87XG4rXHRpZiAoa3ZtX3dyaXRlX2d1ZXN0KGt2bSwgcmVzcF9ncGEsIHNldi1cdTAwM2VndWVzdF9yZXNwX2J1ZiwgUEFHRV9TSVpFKSkge1xuK1x0XHRzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX0lOUFVUKTtcbitcdFx0cmV0dXJuIDE7XG4rXHR9XG4gXG4gXHQvKiBObyBhY3Rpb24gaXMgcmVxdWVzdGVkICpmcm9tIEtWTSogaWYgdGhlcmUgd2FzIGEgZmlybXdhcmUgZXJyb3IuICovXG4gXHRzdm1fdm1nZXhpdF9ub19hY3Rpb24oc3ZtLCBTTlBfR1VFU1RfRVJSKDAsIGZ3X2VycikpO1xuQEAgLTQyOTYsNyArNDMwMCw3IEBAIHN0YXRpYyBpbnQgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBncGFfdCByZXFfZ3BhLCBncGFfdCByXG4gXG4gXHRpZiAoa3ZtX3JlYWRfZ3Vlc3Qoa3ZtLCByZXFfZ3BhICsgb2Zmc2V0b2Yoc3RydWN0IHNucF9ndWVzdF9tc2dfaGRyLCBtc2dfdHlwZSksXG4gXHRcdFx0ICAgXHUwMDI2bXNnX3R5cGUsIDEpKVxuLVx0XHRyZXR1cm4gLUVJTztcbitcdFx0Z290byByZXF1ZXN0X2ludmFsaWQ7XG4gXG4gXHQvKlxuIFx0ICogQXMgcGVyIEdIQ0Igc3BlYywgcmVxdWVzdHMgb2YgdHlwZSBNU0dfUkVQT1JUX1JFUSBhbHNvIGFsbG93IGZvclxuQEAgLTQzMzYsNyArNDM0MCw3IEBAIHN0YXRpYyBpbnQgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBncGFfdCByZXFfZ3BhLCBncGFfdCByXG4gXHRcdCAqIGNlcnRpZmljYXRlIHRhYmxlIGlzIHRlcm1pbmF0ZWQgYnkgMjQtYnl0ZXMgb2YgemVyb2VzLlxuIFx0XHQgKi9cbiBcdFx0aWYgKGRhdGFfbnBhZ2VzIFx1MDAyNlx1MDAyNiBrdm1fY2xlYXJfZ3Vlc3Qoa3ZtLCBkYXRhX2dwYSwgMjQpKVxuLVx0XHRcdHJldHVybiAtRUlPO1xuK1x0XHRcdGdvdG8gcmVxdWVzdF9pbnZhbGlkO1xuIFx0fVxuIFxuIFx0cmV0dXJuIHNucF9oYW5kbGVfZ3Vlc3RfcmVxKHN2bSwgcmVxX2dwYSwgcmVzcF9ncGEpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjI6MTM6MTYuMTI2NDIyMjIzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjA1NDM1NTY4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNFViBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgcGF0Y2ggaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhciBlbm91Z2gsIGFuZCB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBhbWQ2NCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIGNvbnRleHQgb2YgS1ZNIGFuZCBTRVYuIEknbSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgLiBUaGF0J3Mgd2hlcmUgdGhlIG1hZ2ljIHByb2JhYmx5IGhhcHBlbnMuXG5cbkknbGwgYmUgdXNpbmcgbXkgc3RhbmRhcmQgdG9vbGtpdCB0byBhbmFseXplIHRoaXM6IHN0YXRpYyBhbmFseXNpcywgbGlrZWx5IHN1cHBsZW1lbnRlZCBieSBkeW5hbWljIGFuYWx5c2lzIGlmIEkgbmVlZCBpdC4gSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgbm90IGp1c3QgdGhlIG1vZGlmaWVkIGxpbmVzLCBidXQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhlIGV4aXN0aW5nIGNvZGUgaXMgcGFyYW1vdW50IHRvIGdyYXNwaW5nIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZXNlIGNoYW5nZXMgYW5kIGFueSBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBjaGFuZ2VzIGludGVyYWN0IHdpdGggdGhlIFNFViBmcmFtZXdvcmsgaW4gcGFydGljdWxhciwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgbmV3IHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBvciBmZWF0dXJlcyB0aGF0IGFyZSBpbnRyb2R1Y2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTI4LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjoxMzoyMi4xODA3Nzk3NThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDkwMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MjIwLFxuICBcIkxpbmVDb3VudFwiOiA5MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MjIwOlxcdFxcdHN0cnVjdCBzZXZfZGF0YV9zbnBfZ3Vlc3RfcmVxdWVzdCBkYXRhID0gezB9O1xcbjQyMjE6XFx0XFx0c3RydWN0IGt2bSAqa3ZtID0gc3ZtLVxcdTAwM2V2Y3B1Lmt2bTtcXG40MjIyOlxcdFxcdHN0cnVjdCBrdm1fc2V2X2luZm8gKnNldiA9IHRvX2t2bV9zZXZfaW5mbyhrdm0pO1xcbjQyMjM6XFx0XFx0c2V2X3JldF9jb2RlIGZ3X2VyciA9IDA7XFxuNDIyNDpcXHRcXHRpbnQgcmV0O1xcbjQyMjU6XFx0XFxuNDIyNjpcXHRcXHRpZiAoIWlzX3Nldl9zbnBfZ3Vlc3QoXFx1MDAyNnN2bS1cXHUwMDNldmNwdSkpXFxuNDIyNzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40MjI4OlxcdFxcbjQyMjk6XFx0XFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZzZXYtXFx1MDAzZWd1ZXN0X3JlcV9tdXRleCk7XFxuNDIzMDpcXHRcXG40MjMxOlxcdFxcdGlmIChrdm1fcmVhZF9ndWVzdChrdm0sIHJlcV9ncGEsIHNldi1cXHUwMDNlZ3Vlc3RfcmVxX2J1ZiwgUEFHRV9TSVpFKSkge1xcbjQyMzI6XFx0XFx0XFx0c3ZtX3ZtZ2V4aXRfYmFkX2lucHV0KHN2bSwgR0hDQl9FUlJfSU5WQUxJRF9JTlBVVCk7XFxuNDIzMzpcXHRcXHRcXHRyZXR1cm4gMTtcXG40MjM0OlxcdFxcdH1cXG40MjM1OlxcdFxcbjQyMzY6XFx0XFx0ZGF0YS5nY3R4X3BhZGRyID0gX19wc3BfcGEoc2V2LVxcdTAwM2VzbnBfY29udGV4dCk7XFxuNDIzNzpcXHRcXHRkYXRhLnJlcV9wYWRkciA9IF9fcHNwX3BhKHNldi1cXHUwMDNlZ3Vlc3RfcmVxX2J1Zik7XFxuNDIzODpcXHRcXHRkYXRhLnJlc19wYWRkciA9IF9fcHNwX3BhKHNldi1cXHUwMDNlZ3Vlc3RfcmVzcF9idWYpO1xcbjQyMzk6XFx0XFxuNDI0MDpcXHRcXHQvKlxcbjQyNDE6XFx0XFx0ICogRmlybXdhcmUgZmFpbHVyZXMgYXJlIHByb3BhZ2F0ZWQgb24gdG8gZ3Vlc3QsIGJ1dCBhbnkgb3RoZXIgZmFpbHVyZVxcbjQyNDI6XFx0XFx0ICogY29uZGl0aW9uIGFsb25nIHRoZSB3YXkgc2hvdWxkIGJlIHJlcG9ydGVkIHRvIHVzZXJzcGFjZS4gRS5nLiBpZlxcbjQyNDM6XFx0XFx0ICogdGhlIFBTUCBpcyBkZWFkIGFuZCBjb21tYW5kcyBhcmUgdGltaW5nIG91dC5cXG40MjQ0OlxcdFxcdCAqL1xcbjQyNDU6XFx0XFx0cmV0ID0gc2V2X2lzc3VlX2NtZChrdm0sIFNFVl9DTURfU05QX0dVRVNUX1JFUVVFU1QsIFxcdTAwMjZkYXRhLCBcXHUwMDI2ZndfZXJyKTtcXG40MjQ2OlxcdFxcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgIWZ3X2VycilcXG40MjQ3OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuNDI0ODpcXHRcXG40MjQ5OlxcdFxcdGlmIChrdm1fd3JpdGVfZ3Vlc3Qoa3ZtLCByZXNwX2dwYSwgc2V2LVxcdTAwM2VndWVzdF9yZXNwX2J1ZiwgUEFHRV9TSVpFKSkge1xcbjQyNTA6XFx0XFx0XFx0c3ZtX3ZtZ2V4aXRfYmFkX2lucHV0KHN2bSwgR0hDQl9FUlJfSU5WQUxJRF9JTlBVVCk7XFxuNDI1MTpcXHRcXHRcXHRyZXR1cm4gMTtcXG40MjUyOlxcdFxcdH1cXG40MjUzOlxcdFxcbjQyNTQ6XFx0XFx0LyogTm8gYWN0aW9uIGlzIHJlcXVlc3RlZCAqZnJvbSBLVk0qIGlmIHRoZXJlIHdhcyBhIGZpcm13YXJlIGVycm9yLiAqL1xcbjQyNTU6XFx0XFx0c3ZtX3ZtZ2V4aXRfbm9fYWN0aW9uKHN2bSwgU05QX0dVRVNUX0VSUigwLCBmd19lcnIpKTtcXG40MjU2OlxcdFxcbjQyNTc6XFx0XFx0LyogcmVzdW1lIGd1ZXN0ICovXFxuNDI1ODpcXHRcXHRyZXR1cm4gMTtcXG40MjU5OlxcdH1cXG40MjYwOlxcdFxcbjQyNjE6XFx0c3RhdGljIGludCBzbnBfcmVxX2NlcnRzX2VycihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdTMyIHZtbV9lcnJvcilcXG40MjYyOlxcdHtcXG40MjYzOlxcdFxcdGdoY2Jfc2V0X3N3X2V4aXRfaW5mb18yKHN2bS1cXHUwMDNlc2V2X2VzLmdoY2IsIFNOUF9HVUVTVF9FUlIodm1tX2Vycm9yLCAwKSk7XFxuNDI2NDpcXHRcXG40MjY1OlxcdFxcdHJldHVybiAxOyAvKiByZXN1bWUgZ3Vlc3QgKi9cXG40MjY2OlxcdH1cXG40MjY3OlxcdFxcbjQyNjg6XFx0c3RhdGljIGludCBzbnBfY29tcGxldGVfcmVxX2NlcnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG40MjY5OlxcdHtcXG40MjcwOlxcdFxcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xcbjQyNzE6XFx0XFx0c3RydWN0IHZtY2JfY29udHJvbF9hcmVhICpjb250cm9sID0gXFx1MDAyNnN2bS1cXHUwMDNldm1jYi1cXHUwMDNlY29udHJvbDtcXG40MjcyOlxcdFxcbjQyNzM6XFx0XFx0c3dpdGNoIChSRUFEX09OQ0UodmNwdS1cXHUwMDNlcnVuLVxcdTAwM2VzbnBfcmVxX2NlcnRzLnJldCkpIHtcXG40Mjc0OlxcdFxcdGNhc2UgMDpcXG40Mjc1OlxcdFxcdFxcdHJldHVybiBzbnBfaGFuZGxlX2d1ZXN0X3JlcShzdm0sIGNvbnRyb2wtXFx1MDAzZWV4aXRfaW5mb18xLFxcbjQyNzY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGNvbnRyb2wtXFx1MDAzZWV4aXRfaW5mb18yKTtcXG40Mjc3OlxcdFxcdGNhc2UgRU5PU1BDOlxcbjQyNzg6XFx0XFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5yZWdzW1ZDUFVfUkVHU19SQlhdID0gdmNwdS1cXHUwMDNlcnVuLVxcdTAwM2VzbnBfcmVxX2NlcnRzLm5wYWdlcztcXG40Mjc5OlxcdFxcdFxcdHJldHVybiBzbnBfcmVxX2NlcnRzX2Vycihzdm0sIFNOUF9HVUVTVF9WTU1fRVJSX0lOVkFMSURfTEVOKTtcXG40MjgwOlxcdFxcdGNhc2UgRUFHQUlOOlxcbjQyODE6XFx0XFx0XFx0cmV0dXJuIHNucF9yZXFfY2VydHNfZXJyKHN2bSwgU05QX0dVRVNUX1ZNTV9FUlJfQlVTWSk7XFxuNDI4MjpcXHRcXHRjYXNlIEVJTzpcXG40MjgzOlxcdFxcdFxcdHJldHVybiBzbnBfcmVxX2NlcnRzX2Vycihzdm0sIFNOUF9HVUVTVF9WTU1fRVJSX0dFTkVSSUMpO1xcbjQyODQ6XFx0XFx0ZGVmYXVsdDpcXG40Mjg1OlxcdFxcdFxcdGJyZWFrO1xcbjQyODY6XFx0XFx0fVxcbjQyODc6XFx0XFxuNDI4ODpcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40Mjg5OlxcdH1cXG40MjkwOlxcdFxcbjQyOTE6XFx0c3RhdGljIGludCBzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXEoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGdwYV90IHJlcV9ncGEsIGdwYV90IHJlc3BfZ3BhKVxcbjQyOTI6XFx0e1xcbjQyOTM6XFx0XFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gXFx1MDAyNnN2bS1cXHUwMDNldmNwdTtcXG40Mjk0OlxcdFxcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXFx1MDAzZWt2bTtcXG40Mjk1OlxcdFxcbjQyOTY6XFx0XFx0dTggbXNnX3R5cGU7XFxuNDI5NzpcXHRcXG40Mjk4OlxcdFxcdGlmICghaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSlcXG40Mjk5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjQzMDA6XFx0XFxuNDMwMTpcXHRcXHRpZiAoa3ZtX3JlYWRfZ3Vlc3Qoa3ZtLCByZXFfZ3BhICsgb2Zmc2V0b2Yoc3RydWN0IHNucF9ndWVzdF9tc2dfaGRyLCBtc2dfdHlwZSksXFxuNDMwMjpcXHRcXHRcXHRcXHQgICBcXHUwMDI2bXNnX3R5cGUsIDEpKVxcbjQzMDM6XFx0XFx0XFx0Z290byByZXF1ZXN0X2ludmFsaWQ7XFxuNDMwNDpcXHRcXG40MzA1OlxcdFxcdC8qXFxuNDMwNjpcXHRcXHQgKiBBcyBwZXIgR0hDQiBzcGVjLCByZXF1ZXN0cyBvZiB0eXBlIE1TR19SRVBPUlRfUkVRIGFsc28gYWxsb3cgZm9yXFxuNDMwNzpcXHRcXHQgKiBhZGRpdGlvbmFsIGNlcnRpZmljYXRlIGRhdGEgdG8gYmUgcHJvdmlkZWQgYWxvbmdzaWRlIHRoZSBhdHRlc3RhdGlvblxcbjQzMDg6XFx0XFx0ICogcmVwb3J0IHZpYSB0aGUgZ3Vlc3QtcHJvdmlkZWQgZGF0YSBwYWdlcyBpbmRpY2F0ZWQgYnkgUkFYL1JCWC4gSWZcXG40MzA5OlxcdFxcdCAqIHVzZXJzcGFjZSBlbmFibGVzIEtWTV9FWElUX1NOUF9SRVFfQ0VSVFMsIHRoZW4gZXhpdCB0byB1c2Vyc3BhY2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjI6MTM6MjIuMTgwOTkwNDA4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIwNTAzNDY0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgYnJvYWRlciBTZWN1cmUgTmVzdGVkIFBhZ2luZyAoU05QKSBjb250ZXh0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgcHVycG9zZSBvZiB0aGUgZnVuY3Rpb24sIGFuZCB3aGF0IGV4dGVybmFsIGd1ZXN0IHJlcXVlc3RzIGl0IGlzIGhhbmRsaW5nLCBhbmQgaW4gd2hhdCBjb250ZXh0LiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgc29tZSBvZiB0aGUgY29tcGxleGl0eTsgSSdtIGV4cGVjdGluZyBzb21lIGtpbmQgb2YgZGlzcGF0Y2ggbWVjaGFuaXNtIG9yIHN3aXRjaCBzdGF0ZW1lbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXQncyBkb2luZyB3aXRoIHRoZXNlIGV4dGVybmFsIHJlcXVlc3RzLCB3aGV0aGVyIGl0J3MgdmFsaWRhdGluZyB0aGVtLCB0cmFuc2xhdGluZyB0aGVtLCBmb3J3YXJkaW5nIHRoZW0sIG9yIGFjdHVhbGx5IHByb2Nlc3NpbmcgdGhlbS4gV2hhdCByZXNvdXJjZXMgaXMgaXQgdG91Y2hpbmc/IERvZXMgaXQgaW52b2x2ZSBhbnkgVk0gZXhpdHMgb3IgcGFnZSB0YWJsZSBtYW5pcHVsYXRpb25zPyBJIHdpbGwgbmVlZCB0byBsb29rIHRvIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGl0IG1pZ2h0IGJlIHVzaW5nIHRvIHVuZGVyc3RhbmQgaWYgaXQncyBvcGVyYXRpbmcgb24gYW55IHBlci1WTSBvciBnbG9iYWwgZGF0YSwgYW5kIGhvdyBpdCBoYW5kbGVzIGNvbmN1cnJlbmN5IGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBndWVzdHMuIFRoZSBmbG93IG9mIHRoaXMgZnVuY3Rpb24gaXMgZ29pbmcgdG8gZ2l2ZSBtZSBhIHNvbGlkIGNsdWUuIEknbGwgZm9jdXMgb24gdGhlIGRhdGEgZmxvdyBhbmQgYW55IGludGVyYWN0aW9ucyB3aXRoIHRoZSBTTlAncyBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZXMsIGJlY2F1c2UgdGhhdCdzIHdoZXJlIHRoZSBtYWdpYyBpcy4gVGltZSB0byBkaWcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNzMsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjEzOjI0LjM4NjAyNzM4MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1OTMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQzMTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQzMTA6XFx0XFx0ICogdG8gZ2l2ZSB1c2Vyc3BhY2UgYW4gb3Bwb3J0dW5pdHkgdG8gcHJvdmlkZSB0aGUgY2VydGlmaWNhdGUgZGF0YVxcbjQzMTE6XFx0XFx0ICogYmVmb3JlIGlzc3VpbmcvY29tcGxldGluZyB0aGUgYXR0ZXN0YXRpb24gcmVxdWVzdC4gT3RoZXJ3aXNlLCByZXR1cm5cXG40MzEyOlxcdFxcdCAqIGFuIGVtcHR5IGNlcnRpZmljYXRlIHRhYmxlIGluIHRoZSBndWVzdC1wcm92aWRlZCBkYXRhIHBhZ2VzIGFuZFxcbjQzMTM6XFx0XFx0ICogaGFuZGxlIHRoZSBhdHRlc3RhdGlvbiByZXF1ZXN0IGltbWVkaWF0ZWx5LlxcbjQzMTQ6XFx0XFx0ICovXFxuNDMxNTpcXHRcXHRpZiAobXNnX3R5cGUgPT0gU05QX01TR19SRVBPUlRfUkVRKSB7XFxuNDMxNjpcXHRcXHRcXHRzdHJ1Y3Qga3ZtX3Nldl9pbmZvICpzZXYgPSBcXHUwMDI2dG9fa3ZtX3N2bShrdm0pLVxcdTAwM2VzZXZfaW5mbztcXG40MzE3OlxcdFxcdFxcdHU2NCBkYXRhX25wYWdlcztcXG40MzE4OlxcdFxcdFxcdGdwYV90IGRhdGFfZ3BhO1xcbjQzMTk6XFx0XFxuNDMyMDpcXHRcXHRcXHRpZiAoIWt2bV9naGNiX3JheF9pc192YWxpZChzdm0pIHx8ICFrdm1fZ2hjYl9yYnhfaXNfdmFsaWQoc3ZtKSlcXG40MzIxOlxcdFxcdFxcdFxcdGdvdG8gcmVxdWVzdF9pbnZhbGlkO1xcbjQzMjI6XFx0XFxuNDMyMzpcXHRcXHRcXHRkYXRhX2dwYSA9IHZjcHUtXFx1MDAzZWFyY2gucmVnc1tWQ1BVX1JFR1NfUkFYXTtcXG40MzI0OlxcdFxcdFxcdGRhdGFfbnBhZ2VzID0gdmNwdS1cXHUwMDNlYXJjaC5yZWdzW1ZDUFVfUkVHU19SQlhdO1xcbjQzMjU6XFx0XFxuNDMyNjpcXHRcXHRcXHRpZiAoIVBBR0VfQUxJR05FRChkYXRhX2dwYSkpXFxuNDMyNzpcXHRcXHRcXHRcXHRnb3RvIHJlcXVlc3RfaW52YWxpZDtcXG40MzI4OlxcdFxcbjQzMjk6XFx0XFx0XFx0aWYgKHNldi1cXHUwMDNlc25wX2NlcnRzX2VuYWJsZWQpIHtcXG40MzMwOlxcdFxcdFxcdFxcdHZjcHUtXFx1MDAzZXJ1bi1cXHUwMDNlZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9TTlBfUkVRX0NFUlRTO1xcbjQzMzE6XFx0XFx0XFx0XFx0dmNwdS1cXHUwMDNlcnVuLVxcdTAwM2VzbnBfcmVxX2NlcnRzLmdwYSA9IGRhdGFfZ3BhO1xcbjQzMzI6XFx0XFx0XFx0XFx0dmNwdS1cXHUwMDNlcnVuLVxcdTAwM2VzbnBfcmVxX2NlcnRzLm5wYWdlcyA9IGRhdGFfbnBhZ2VzO1xcbjQzMzM6XFx0XFx0XFx0XFx0dmNwdS1cXHUwMDNlcnVuLVxcdTAwM2VzbnBfcmVxX2NlcnRzLnJldCA9IDA7XFxuNDMzNDpcXHRcXHRcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLmNvbXBsZXRlX3VzZXJzcGFjZV9pbyA9IHNucF9jb21wbGV0ZV9yZXFfY2VydHM7XFxuNDMzNTpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG40MzM2OlxcdFxcdFxcdH1cXG40MzM3OlxcdFxcbjQzMzg6XFx0XFx0XFx0LypcXG40MzM5OlxcdFxcdFxcdCAqIEFzIHBlciBHSENCIHNwZWMgKHNlZSBcXFwiU05QIEV4dGVuZGVkIEd1ZXN0IFJlcXVlc3RcXFwiKSwgdGhlXFxuNDM0MDpcXHRcXHRcXHQgKiBjZXJ0aWZpY2F0ZSB0YWJsZSBpcyB0ZXJtaW5hdGVkIGJ5IDI0LWJ5dGVzIG9mIHplcm9lcy5cXG40MzQxOlxcdFxcdFxcdCAqL1xcbjQzNDI6XFx0XFx0XFx0aWYgKGRhdGFfbnBhZ2VzIFxcdTAwMjZcXHUwMDI2IGt2bV9jbGVhcl9ndWVzdChrdm0sIGRhdGFfZ3BhLCAyNCkpXFxuNDM0MzpcXHRcXHRcXHRcXHRnb3RvIHJlcXVlc3RfaW52YWxpZDtcXG40MzQ0OlxcdFxcdH1cXG40MzQ1OlxcdFxcbjQzNDY6XFx0XFx0cmV0dXJuIHNucF9oYW5kbGVfZ3Vlc3RfcmVxKHN2bSwgcmVxX2dwYSwgcmVzcF9ncGEpO1xcbjQzNDc6XFx0XFxuNDM0ODpcXHRyZXF1ZXN0X2ludmFsaWQ6XFxuNDM0OTpcXHRcXHRzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX0lOUFVUKTtcXG40MzUwOlxcdFxcdHJldHVybiAxOyAvKiByZXN1bWUgZ3Vlc3QgKi9cXG40MzUxOlxcdH1cXG40MzUyOlxcdFxcbjQzNTM6XFx0c3RhdGljIGludCBzZXZfaGFuZGxlX3ZtZ2V4aXRfbXNyX3Byb3RvY29sKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxcbjQzNTQ6XFx0e1xcbjQzNTU6XFx0XFx0c3RydWN0IHZtY2JfY29udHJvbF9hcmVhICpjb250cm9sID0gXFx1MDAyNnN2bS1cXHUwMDNldm1jYi1cXHUwMDNlY29udHJvbDtcXG40MzU2OlxcdFxcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IFxcdTAwMjZzdm0tXFx1MDAzZXZjcHU7XFxuNDM1NzpcXHRcXHRzdHJ1Y3Qga3ZtX3Nldl9pbmZvICpzZXYgPSB0b19rdm1fc2V2X2luZm8odmNwdS1cXHUwMDNla3ZtKTtcXG40MzU4OlxcdFxcdHU2NCBnaGNiX2luZm87XFxuNDM1OTpcXHRcXHRpbnQgcmV0ID0gMTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjI6MTM6MjQuMzg2Mjg4NDkyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkzNDM4NDM4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgY29kZS5cblxuKipJbnZlc3RpZ2F0aW5nIGBzbnBfaGFuZGxlX2d1ZXN0X3JlcWAgYW5kIGBzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXFgKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgYXJvdW5kIHRoZXNlIGZ1bmN0aW9ucywgYHNucF9oYW5kbGVfZ3Vlc3RfcmVxYCBhbmQgYHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcWAuIFRoZSBxdWlja2VzdCB3YXkgdG8gZG8gdGhpcyBpcyB0byBzZWUgd2hlcmUgdGhleSdyZSAqY2FsbGVkKiBmcm9tLiBJJ20gZ29pbmcgdG8gcmVhY2ggZm9yIGBncmVwYCBhbmQgc2VhcmNoIHRoZSBjb2RlYmFzZSBmb3IgZXZlcnkgaW5zdGFuY2Ugb2YgdGhvc2UgZnVuY3Rpb24gbmFtZXMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBwcmV0dHkgY2xlYXIgcGljdHVyZSBvZiB0aGVpciBlbnRyeSBwb2ludHMgYW5kIHRoZSBjb250ZXh0IGluIHdoaWNoIHRoZXkncmUgYmVpbmcgaW52b2tlZC4gVGhhdCBzaG91bGQgYmUgdGhlIHBlcmZlY3Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlaXIgcm9sZSB3aXRoaW4gdGhlIHN5c3RlbS4gTGV0J3MgZ2V0IGNyYWNraW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTU2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjoxMzoyNi4zMjA2NzUwNjFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ4MTUyNDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic25wX2hhbmRsZV8oZXh0Xyk/Z3Vlc3RfcmVxXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00MTQyPXN0YXRpYyBpbnQgc2V2X3NucF9hcF9jcmVhdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDIxNy1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQyMTg6c3RhdGljIGludCBzbnBfaGFuZGxlX2d1ZXN0X3JlcShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgZ3BhX3QgcmVxX2dwYSwgZ3BhX3QgcmVzcF9ncGEpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00MjE5LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDI2OD1zdGF0aWMgaW50IHNucF9jb21wbGV0ZV9yZXFfY2VydHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00Mjc0LVxcdGNhc2UgMDpcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQyNzU6XFx0XFx0cmV0dXJuIHNucF9oYW5kbGVfZ3Vlc3RfcmVxKHN2bSwgY29udHJvbC1cXHUwMDNlZXhpdF9pbmZvXzEsXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00Mjc2LVxcdFxcdFxcdFxcdFxcdCAgICBjb250cm9sLVxcdTAwM2VleGl0X2luZm9fMik7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQyOTAtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0MjkxOnN0YXRpYyBpbnQgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBncGFfdCByZXFfZ3BhLCBncGFfdCByZXNwX2dwYSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQyOTIte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00MzQ1LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDM0NjpcXHRyZXR1cm4gc25wX2hhbmRsZV9ndWVzdF9yZXEoc3ZtLCByZXFfZ3BhLCByZXNwX2dwYSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00MzQ3LVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00NTEwPWludCBzZXZfaGFuZGxlX3ZtZ2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NjgxLVxcdFxcdGlmIChjb250cm9sLVxcdTAwM2VleGl0X2NvZGUgPT0gU1ZNX1ZNR0VYSVRfR1VFU1RfUkVRVUVTVClcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ2ODI6XFx0XFx0XFx0cmV0dXJuIHNucF9oYW5kbGVfZ3Vlc3RfcmVxKHN2bSwgY29udHJvbC1cXHUwMDNlZXhpdF9pbmZvXzEsXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NjgzLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBjb250cm9sLVxcdTAwM2VleGl0X2luZm9fMik7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00Njg0LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDY4NTpcXHRcXHRyZXR1cm4gc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxKHN2bSwgY29udHJvbC1cXHUwMDNlZXhpdF9pbmZvXzEsXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00Njg2LVxcdFxcdFxcdFxcdFxcdFxcdGNvbnRyb2wtXFx1MDAzZWV4aXRfaW5mb18yKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjI6MTM6MjYuMzc1NDkzMjkyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzE5OTUzNzg4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU0VWLVNOUCBHdWVzdCBEZXRlY3Rpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgaXNfc2V2X3NucF9ndWVzdGAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBjcml0ZXJpYSBpdCdzIHVzaW5nIHRvIGRldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGFuIFNFVi1TTlAgZ3Vlc3QgZW52aXJvbm1lbnQuIE15IHByaW1hcnkgY29uY2VybiBoZXJlIGlzIHRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIHN0YW5kYXJkIHZpcnR1YWxpemF0aW9uLCBLVk0gd2l0aCBTVk0sIGFuZCB0aGUgZXhwbGljaXQgcmVxdWlyZW1lbnQgZm9yIHBoeXNpY2FsIEFNRCBTRVYtU05QIGhhcmR3YXJlLiBUaGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgd2UncmUgZ2V0dGluZyBmYWxzZSBwb3NpdGl2ZXMgb3IgbWlzc2luZyBzb21lIHBvdGVudGlhbCBjb25maWd1cmF0aW9ucy5cblxuRXNzZW50aWFsbHksIEkgd2FudCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIG9mIGBpc19zZXZfc25wX2d1ZXN0YCBhbmQgZXhhbWluZSB0aGUgU0VWLVNOUCBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgcmVsaWFibGUgdGhpcyBjaGVjayBpcyBpbiBpZGVudGlmeWluZyB0cnVlIFNFVi1TTlAgZ3Vlc3RzIGFjcm9zcyB2YXJpb3VzIHZpcnR1YWxpemF0aW9uIHNjZW5hcmlvcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGVkZ2UgY2FzZXMgdG8gZW5zdXJlIG91ciBsb2dpYyBpcyByb2J1c3QsIHNvIEknbGwgcHJvYmFibHkgc3BlbmQgYSBnb29kIGNodW5rIG9mIHRpbWUgZ29pbmcgdGhyb3VnaCBpdHMgaW1wbGVtZW50YXRpb25zLCBsb29raW5nIGZvciBhc3N1bXB0aW9ucywgYW5kIHZlcmlmeWluZyBpdHMgYWNjdXJhY3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1MjksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjoxMzoyOS41NzUwMzM1MzZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MzAyMzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlzX3Nldl9zbnBfZ3Vlc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTM1NDU9dm9pZCBzZXZfZnJlZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzU1OC1cXHQgKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjM1NTk6XFx0aWYgKGlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkpIHtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTM1NjAtXFx0XFx0dTY0IHBmbiA9IF9fcGEoc3ZtLVxcdTAwM2VzZXZfZXMudm1zYSkgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDIxOD1zdGF0aWMgaW50IHNucF9oYW5kbGVfZ3Vlc3RfcmVxKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBncGFfdCByZXFfZ3BhLCBncGFfdCByZXNwX2dwYSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDIyNS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQyMjY6XFx0aWYgKCFpc19zZXZfc25wX2d1ZXN0KFxcdTAwMjZzdm0tXFx1MDAzZXZjcHUpKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDIyNy1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDI5MT1zdGF0aWMgaW50IHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgZ3BhX3QgcmVxX2dwYSwgZ3BhX3QgcmVzcF9ncGEpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQyOTctXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0Mjk4OlxcdGlmICghaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQyOTktXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQzNTM9c3RhdGljIGludCBzZXZfaGFuZGxlX3ZtZ2V4aXRfbXNyX3Byb3RvY29sKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NDMyLVxcdGNhc2UgR0hDQl9NU1JfUFJFRl9HUEFfUkVROlxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDQzMzpcXHRcXHRpZiAoIWlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NDM0LVxcdFxcdFxcdGdvdG8gb3V0X3Rlcm1pbmF0ZTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDQ0My1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ0NDQ6XFx0XFx0aWYgKCFpc19zZXZfc25wX2d1ZXN0KHZjcHUpKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDQ0NS1cXHRcXHRcXHRnb3RvIG91dF90ZXJtaW5hdGU7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ0NTgtXFx0Y2FzZSBHSENCX01TUl9QU0NfUkVROlxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDQ1OTpcXHRcXHRpZiAoIWlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NDYwLVxcdFxcdFxcdGdvdG8gb3V0X3Rlcm1pbmF0ZTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDUxMD1pbnQgc2V2X2hhbmRsZV92bWdleGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDU0My1cXHQvKiBTRVYtU05QIGd1ZXN0IHJlcXVpcmVzIHRoYXQgdGhlIEdIQ0IgR1BBIG11c3QgYmUgcmVnaXN0ZXJlZCAqL1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDU0NDpcXHRpZiAoaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDU0NS1cXHQgICAgIWdoY2JfZ3BhX2lzX3JlZ2lzdGVyZWQoc3ZtLCBjb250cm9sLVxcdTAwM2VnaGNiX2dwYSkpIHtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDU1OS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ1NjA6XFx0aWYgKGlzX3NucF9vbmx5X3ZtZ2V4aXQoY29udHJvbC1cXHUwMDNlZXhpdF9jb2RlKSBcXHUwMDI2XFx1MDAyNiAhaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSkge1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDU2MS1cXHRcXHR2Y3B1X3VuaW1wbCh2Y3B1LCBcXFwidm1nZXhpdDogZXhpdCBjb2RlICUjbGx4IGlzIFNOUC1vbmx5XFxcXG5cXFwiLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00ODQ2PXZvaWQgc2V2X2luaXRfdm1jYihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgYm9vbCBpbml0X2V2ZW50KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00ODU4LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDg1OTpcXHRpZiAoaW5pdF9ldmVudCBcXHUwMDI2XFx1MDAyNiBpc19zZXZfc25wX2d1ZXN0KHZjcHUpKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDg2MC1cXHRcXHRzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlKHZjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00ODkzPXZvaWQgc2V2X2VzX3ByZXBhcmVfc3dpdGNoX3RvX2d1ZXN0KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qgc2V2X2VzX3NhdmVfYXJlYSAqaG9zdHNhKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTMzLVxcdCAgICAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9ERUJVR19TV0FQKSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDkzNDpcXHQgICAgIGlzX3Nldl9zbnBfZ3Vlc3QoXFx1MDAyNnN2bS1cXHUwMDNldmNwdSkpKSB7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTM1LVxcdFxcdGhvc3RzYS1cXHUwMDNlZHIwX2FkZHJfbWFzayA9IGFtZF9nZXRfZHJfYWRkcl9tYXNrKDApO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz01MzIwPXN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqc2V2X2RlY3J5cHRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUzNDAtXFx0LyogQ2hlY2sgaWYgdGhlIFNFViBwb2xpY3kgYWxsb3dzIGRlYnVnZ2luZyAqL1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NTM0MTpcXHRpZiAoaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSkge1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTM0Mi1cXHRcXHRpZiAoIShzZXYtXFx1MDAzZXBvbGljeSBcXHUwMDI2IFNOUF9QT0xJQ1lfTUFTS19ERUJVRykpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUzNDgtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo1MzQ5OlxcdGlmIChpc19zZXZfc25wX2d1ZXN0KHZjcHUpKSB7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MzUwLVxcdFxcdHN0cnVjdCBzZXZfZGF0YV9zbnBfZGJnIGRiZyA9IHswfTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MTk3ND1zdGF0aWMgaW50IG5wZl9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yMDIwLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MjAyMTpcXHRpZiAoaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSBcXHUwMDI2XFx1MDAyNiAoZXJyb3JfY29kZSBcXHUwMDI2IFBGRVJSX0dVRVNUX0VOQ19NQVNLKSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTIwMjItXFx0XFx0ZXJyb3JfY29kZSB8PSBQRkVSUl9QUklWQVRFX0FDQ0VTUztcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MzQyNj1zdGF0aWMgdm9pZCBkdW1wX3ZtY2Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNDQwLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MzQ0MTpcXHR2bV90eXBlID0gaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSA/IFxcXCJTRVYtU05QXFxcIiA6XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNDQyLVxcdFxcdCAgaXNfc2V2X2VzX2d1ZXN0KHZjcHUpID8gXFxcIlNFVi1FU1xcXCIgOlxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD00MjQ9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3Nldl9lc19ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTQyOC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjQyOTpzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfc2V2X3NucF9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC00MzAte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD00Mzg9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3Nldl9lc19ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTQ0Mi1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjQ0MzpzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfc2V2X3NucF9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC00NDQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjoxMzoyOS42MjIzNDAxNDlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzUwNTAxMzE3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgU2V2LVNOUCBHdWVzdCBDaGVjayoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgS1ZNIGh5cGVydmlzb3IgaXMgaGFuZGxpbmcgU0VWLVNOUCBndWVzdCBkZXRlY3Rpb24uIEknbSBnb2luZyBzdHJhaWdodCB0byB0aGUgc291cmNlIOKAkyB0aGUgYGFyY2gveDg2L2t2bS9zdm0vc3ZtLmhgIGZpbGUuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIGRlZmluaXRpb24gZm9yIGBpc19zZXZfc25wX2d1ZXN0YC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZSBoeXBlcnZpc29yIGlzIGRldGVybWluaW5nIGlmIGEgZ3Vlc3QgaXMgcnVubmluZyB1bmRlciBTRVYtU05QLCBhcyB0aGF0IGltcGFjdHMgYSBsb3Qgb2YgbXkgd29yayB3aXRoIHNlY3VyaXR5IG1vZHVsZXMuIEtub3dpbmcgdGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2VzIGFuZCBob3cgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gYXBwcm9hY2hlcyB0aGUgcHJvYmxlbS4gTGV0J3Mgc2VlIHdoYXQgdGhleSd2ZSBnb3QuLi4gaG9wZWZ1bGx5LCBpdCdzIHN0cmFpZ2h0Zm9yd2FyZCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTAwMzEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjoxMzozNy4xMjczNTY2MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDAyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zdm0uaFwiLFxuICBcIkZpcnN0TGluZVwiOiA0MjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MjA6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3Nldl9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIDQyMTpcXHR7XFxuIDQyMjpcXHRcXHRyZXR1cm4gX19fX3Nldl9ndWVzdCh2Y3B1LVxcdTAwM2Vrdm0pO1xcbiA0MjM6XFx0fVxcbiA0MjQ6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3Nldl9lc19ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIDQyNTpcXHR7XFxuIDQyNjpcXHRcXHRyZXR1cm4gX19fX3Nldl9lc19ndWVzdCh2Y3B1LVxcdTAwM2Vrdm0pO1xcbiA0Mjc6XFx0fVxcbiA0Mjg6XFx0XFxuIDQyOTpcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfc2V2X3NucF9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIDQzMDpcXHR7XFxuIDQzMTpcXHRcXHRyZXR1cm4gX19fX3Nldl9zbnBfZ3Vlc3QodmNwdS1cXHUwMDNla3ZtKTtcXG4gNDMyOlxcdH1cXG4gNDMzOlxcdCNlbHNlXFxuIDQzNDpcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfc2V2X2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gNDM1OlxcdHtcXG4gNDM2OlxcdFxcdHJldHVybiBmYWxzZTtcXG4gNDM3OlxcdH1cXG4gNDM4OlxcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19zZXZfZXNfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiA0Mzk6XFx0e1xcbiA0NDA6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA0NDE6XFx0fVxcbiA0NDI6XFx0XFxuIDQ0MzpcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfc2V2X3NucF9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIDQ0NDpcXHR7XFxuIDQ0NTpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDQ0NjpcXHR9XFxuIDQ0NzpcXHQjZW5kaWZcXG4gNDQ4OlxcdFxcbiA0NDk6XFx0c3RhdGljIGlubGluZSBib29sIGdoY2JfZ3BhX2lzX3JlZ2lzdGVyZWQoc3RydWN0IHZjcHVfc3ZtICpzdm0sIHU2NCB2YWwpXFxuIDQ1MDpcXHR7XFxuIDQ1MTpcXHRcXHRyZXR1cm4gc3ZtLVxcdTAwM2VzZXZfZXMuZ2hjYl9yZWdpc3RlcmVkX2dwYSA9PSB2YWw7XFxuIDQ1MjpcXHR9XFxuIDQ1MzpcXHRcXG4gNDU0OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCB2bWNiX21hcmtfYWxsX2RpcnR5KHN0cnVjdCB2bWNiICp2bWNiKVxcbiA0NTU6XFx0e1xcbiA0NTY6XFx0XFx0dm1jYi1cXHUwMDNlY29udHJvbC5jbGVhbiA9IDA7XFxuIDQ1NzpcXHR9XFxuIDQ1ODpcXHRcXG4gNDU5OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCB2bWNiX21hcmtfYWxsX2NsZWFuKHN0cnVjdCB2bWNiICp2bWNiKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjoxMzozNy4xMjc0NTgzOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTE4OTU4OTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGUgbWF0dGVyLCBzdW1tYXJpemVkIGFzIHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyB0aGUgU0VWLVNOUCBWTSBJbml0aWFsaXphdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCBzdGVwIGluIHVuZGVyc3RhbmRpbmcgdGhpcyBhcmNoaXRlY3R1cmUgaXMgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgYF9fX19zZXZfc25wX2d1ZXN0YC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgcHJlY2lzZWx5IHdoYXQgdGhpcyB2YXJpYWJsZSBvciBzdHJ1Y3R1cmUgcmVwcmVzZW50cyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgU0VWLVNOUC4gSXMgaXQgYSBmbGFnLCBhIGRlc2NyaXB0b3IsIGEgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBob2xkcyByZWxldmFudCBndWVzdCBpbmZvcm1hdGlvbiwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBuYW1lIGl0c2VsZiBzdWdnZXN0cyBpdCdzIGludGltYXRlbHkgdGllZCB0byB0aGUgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiB3aXRoIFNlY3VyZSBOZXN0ZWQgUGFnaW5nIChTRVYtU05QKSBndWVzdCwgYnV0IHRoZSBzcGVjaWZpY3MgYXJlIGNydWNpYWwuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gdHJlYXQgdGhpcyBhcyBhbiB1bmtub3duIHZhcmlhYmxlIGFuZCB0byB0cnkgdG8gZGV0ZXJtaW5lIGl0cyBzY29wZSBhbmQgYXBwbGljYXRpb24gd2l0aGluIHRoZSBTRVYtU05QIHN5c3RlbS5cblxuVGhlcmVmb3JlLCBteSBuZXh0IG1vdmUgaXMgdG8gaW5pdGlhdGUgYSBkZWVwIHNlYXJjaCB3aXRoaW4gdGhlIHJlbGV2YW50IGNvZGViYXNlIG9yIGRvY3VtZW50YXRpb24uIEknbSBnb2luZyB0byB0cmFjayBkb3duIGV2ZXJ5IGluc3RhbmNlIG9mIGBfX19fc2V2X3NucF9ndWVzdGAuIEhvcGVmdWxseSwgdGhpcyB3aWxsIGxlYWQgbWUgdG8gaXRzIGRlZmluaXRpb24sIHVzYWdlLCBhbmQgYW55IGFzc29jaWF0ZWQgaW5pdGlhbGl6YXRpb24gcm91dGluZXMuIFRoZSBnb2FsIGlzIHRvIHRyYWNlIHRoZSBsaWZlY3ljbGUgb2YgdGhpcyB2YXJpYWJsZTogd2hlcmUgaXMgaXQgZGVjbGFyZWQsIGhvdyBpcyBpdCBhc3NpZ25lZCBhIHZhbHVlLCB3aGF0IGZ1bmN0aW9ucyBvciBtb2R1bGVzIGludGVyYWN0IHdpdGggaXQsIGFuZCB3aGF0IGRhdGEgZG9lcyBpdCBjb250YWluPyBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgcGljdHVyZSBvZiB0aGUgU0VWLVNOUCBWTSBjcmVhdGlvbiBvciBpbml0aWFsaXphdGlvbi4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IHRvIHNlZSB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyB3aXRoaW4gdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4NjksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjEzOjQwLjA0NjQxOTIxOVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIwNzg3MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19fX3Nldl9zbnBfZ3Vlc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTE0Nj1zdGF0aWMgYm9vbCBzZXZfc25wX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTQ4LVxcdGt2bV9sb2NrZGVwX2Fzc2VydF9zZXZfbG9ja19oZWxkKGt2bSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxNDk6XFx0cmV0dXJuIF9fX19zZXZfc25wX2d1ZXN0KGt2bSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xNTAtfVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0zMzMzPXZvaWQgc2V2X2d1ZXN0X21lbW9yeV9yZWNsYWltZWQoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMzQ1LVxcdCAqL1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzM0NjpcXHRpZiAoIV9fX19zZXZfZ3Vlc3Qoa3ZtKSB8fCBfX19fc2V2X3NucF9ndWVzdChrdm0pKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzM0Ny1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTUyNzA9dm9pZCBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MjgyLVxcdCAqL1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NTI4MzpcXHRpZiAoIV9fX19zZXZfc25wX2d1ZXN0KGt2bSkpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01Mjg0LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9NDA1PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX19fc2V2X2VzX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDExLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6NDEyOnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX19fc2V2X3NucF9ndWVzdChzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC00MTMte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD00Mjk9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3Nldl9zbnBfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDMwLXtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjQzMTpcXHRyZXR1cm4gX19fX3Nldl9zbnBfZ3Vlc3QodmNwdS1cXHUwMDNla3ZtKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTQzMi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjEzOjQwLjA5ODUwMDE1MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDYwNDQ5NzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgYF9fX19zZXZfc25wX2d1ZXN0YCBmdW5jdGlvbiwgdGhpbmtpbmcgYWJvdXQgaXQgZnJvbSBteSBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgU0VWLVNOUCBHdWVzdCBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIGFuZCBkaXNzZWN0IHRoaXMgYF9fX19zZXZfc25wX2d1ZXN0YCBmdW5jdGlvbiB3aXRoaW4gdGhlIEFNRCBTRVYtU05QIGluZnJhc3RydWN0dXJlLiBJIGtub3cgaXQncyBkZWZpbmVkIGluIGBhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oYCwgYW5kIHRoYXQgc3VnZ2VzdHMgdGhpcyBpcyB0aGUgY29yZSBvZiBob3cgd2UgaGFuZGxlIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gd2l0aCBTZWN1cmUgTmVzdGVkIFBhZ2luZyB3aXRoaW4gdGhlIEtWTSBlbnZpcm9ubWVudC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgdGhhdCB0aGlzIGlzIGEgY3JpdGljYWwgcGllY2UsIGxpa2VseSB0aGUgZW50cnkgcG9pbnQgb3IgYSBjZW50cmFsIGhhbmRsZXIgZm9yIFNFVi1TTlAgZ3Vlc3Qgb3BlcmF0aW9ucy4gSXQncyBwcm9iYWJseSB0aGUgZnVuY3Rpb24gdGhhdCBLVk0gdXNlcyB0byBpbnRlcmZhY2Ugd2l0aCB0aGUgQU1EIFNlY3VyZSBQcm9jZXNzb3IuIEknbSBleHBlY3RpbmcgdG8gc2VlIG9wZXJhdGlvbnMgbGlrZTogc2V0dGluZyB1cCB0aGUgZ3Vlc3QncyBtZW1vcnkgZW5jcnlwdGlvbiBjb250ZXh0LCBoYW5kbGluZyBwYWdlIGZhdWx0cywgbWFuYWdpbmcgdGhlIGF0dGVzdGF0aW9uIHByb2Nlc3MsIGFuZCBtYXliZSBldmVuIGRlYWxpbmcgd2l0aCB0aGUgaW50cmljYWNpZXMgb2Ygc2VjdXJlIG1pZ3JhdGlvbi4gSSB3YW50IHRvIGNoZWNrIGhvdyB0aGUgY29kZSBkZWFscyB3aXRoIHRoZSBzcGVjaWZpYyBjaGFsbGVuZ2VzIG9mIG5lc3RlZCBwYWdpbmcgaW4gYW4gU0VWLVNOUCBjb250ZXh0IOKAkyB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlIGhvc3QncyBhbmQgZ3Vlc3QncyBwYWdlIHRhYmxlcyBtdXN0IGJlIGNvbXBsZXguXG5cbkknbSBhbHNvIGN1cmlvdXMgYWJvdXQgdGhlIGBzdHJ1Y3Qga3ZtICprdm1gIHBhcmFtZXRlci4gVGhpcyBsaWtlbHkgZ2l2ZXMgdXMgYWNjZXNzIHRvIGFsbCB0aGUgS1ZNIGNvbnRleHQgYW5kIHN0YXRlIHdlIG5lZWQgdG8gcHJvcGVybHkgbWFuYWdlIHRoZSBndWVzdCwgc28gbGV0J3MgZGlnIGluIGFuZCBzZWUgcHJlY2lzZWx5IHdoYXQgaW5mb3JtYXRpb24gaXQgcHJvdmlkZXMuIEnigJltIHRoaW5raW5nIHRoZXJlIHdpbGwgYmUgYSBsb3Qgb2YgY2FsbHMgdG8gdGhlIEFNRCBTZWN1cmUgUHJvY2Vzc29yLCBzbyBJJ20gZXhwZWN0aW5nIHRvIHNlZSBhIGxvdCBvZiBpbmxpbmUgYXNzZW1ibHksIG9yIHBlcmhhcHMgY2FsbHMgdG8gc3BlY2lmaWMgZHJpdmVyIGZ1bmN0aW9ucy4gSSdsbCBiZSBwYXJ0aWN1bGFybHkga2VlbiB0byBzZWUgaG93IHRoZXkgaGFuZGxlIG1lbW9yeSBtYW5hZ2VtZW50IGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIGFuIFNOUCBndWVzdC5cblxuTGV0J3MgZ2V0IHJlYWRpbmcgYW5kIHNlZSBob3cgd2VsbCBteSBhc3N1bXB0aW9ucyBhbGlnbiB3aXRoIHRoZSByZWFsaXR5IVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTg5MywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjEzOjQzLjE1ODk1MTgwN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwMCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQwMDpcXHRcXG4gNDAxOlxcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX19fc2V2X2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSlcXG4gNDAyOlxcdHtcXG4gNDAzOlxcdFxcdHJldHVybiB0b19rdm1fc2V2X2luZm8oa3ZtKS1cXHUwMDNlYWN0aXZlO1xcbiA0MDQ6XFx0fVxcbiA0MDU6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fX19zZXZfZXNfZ3Vlc3Qoc3RydWN0IGt2bSAqa3ZtKVxcbiA0MDY6XFx0e1xcbiA0MDc6XFx0XFx0c3RydWN0IGt2bV9zZXZfaW5mbyAqc2V2ID0gdG9fa3ZtX3Nldl9pbmZvKGt2bSk7XFxuIDQwODpcXHRcXG4gNDA5OlxcdFxcdHJldHVybiBzZXYtXFx1MDAzZWVzX2FjdGl2ZSBcXHUwMDI2XFx1MDAyNiAhV0FSTl9PTl9PTkNFKCFzZXYtXFx1MDAzZWFjdGl2ZSk7XFxuIDQxMDpcXHR9XFxuIDQxMTpcXHRcXG4gNDEyOlxcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX19fc2V2X3NucF9ndWVzdChzdHJ1Y3Qga3ZtICprdm0pXFxuIDQxMzpcXHR7XFxuIDQxNDpcXHRcXHRzdHJ1Y3Qga3ZtX3Nldl9pbmZvICpzZXYgPSB0b19rdm1fc2V2X2luZm8oa3ZtKTtcXG4gNDE1OlxcdFxcbiA0MTY6XFx0XFx0cmV0dXJuIChzZXYtXFx1MDAzZXZtc2FfZmVhdHVyZXMgXFx1MDAyNiBTVk1fU0VWX0ZFQVRfU05QX0FDVElWRSkgXFx1MDAyNlxcdTAwMjZcXG4gNDE3OlxcdFxcdCAgICAgICAhV0FSTl9PTl9PTkNFKCFfX19fc2V2X2VzX2d1ZXN0KGt2bSkpO1xcbiA0MTg6XFx0fVxcbiA0MTk6XFx0XFxuIDQyMDpcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfc2V2X2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gNDIxOlxcdHtcXG4gNDIyOlxcdFxcdHJldHVybiBfX19fc2V2X2d1ZXN0KHZjcHUtXFx1MDAzZWt2bSk7XFxuIDQyMzpcXHR9XFxuIDQyNDpcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfc2V2X2VzX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gNDI1OlxcdHtcXG4gNDI2OlxcdFxcdHJldHVybiBfX19fc2V2X2VzX2d1ZXN0KHZjcHUtXFx1MDAzZWt2bSk7XFxuIDQyNzpcXHR9XFxuIDQyODpcXHRcXG4gNDI5OlxcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19zZXZfc25wX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gNDMwOlxcdHtcXG4gNDMxOlxcdFxcdHJldHVybiBfX19fc2V2X3NucF9ndWVzdCh2Y3B1LVxcdTAwM2Vrdm0pO1xcbiA0MzI6XFx0fVxcbiA0MzM6XFx0I2Vsc2VcXG4gNDM0OlxcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19zZXZfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjoxMzo0My4xNTkwNDE2NjdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDI2NDg1NTUyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIEh5cG90aGVzaXM6IEtWTSBTVk0gYW5kIFNFVi1TTlAgdmlhIElvY3RscyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBmdXp6aW5nIEtWTSdzIFNWTSB3aXRoIFNFVi1TTlAuIFRoZSBjb3JlIHF1ZXN0aW9uIGlzOiBjYW4gSSBhY3R1YWxseSBsZXZlcmFnZSBLVk0gaW9jdGxzLCBvciBldmVuIFZNIGV4ZWN1dGlvbiBpbiBRRU1VL1N5emthbGxlciwgdG8gdHJpZ2dlciBhbmQgdGhlcmVmb3JlLCBmdXp6IHRoZSBTRVYtU05QIGZ1bmN0aW9uYWxpdHk/XG5cblJpZ2h0LCBTeXprYWxsZXIgYWxyZWFkeSBoZWF2aWx5IGV4ZXJjaXNlcyBLVk0uIEkga25vdyBpdCB0aHJvd3MgZXZlcnl0aGluZyBhdCB0aGUgYEtWTV9DUkVBVEVfVk1gLCBgS1ZNX01FTU9SWV9FTkNSWVBUX09QYCwgYEtWTV9SVU5gLCBhbmQgb3RoZXIgaW9jdGxzLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBCdXQgdGhlIHJlYWwga2V5IGlzLCAqd2hpY2gqIGlvY3RscyBzcGVjaWZpY2FsbHkgdG91Y2ggdGhlIFNFVi9TTlAgY29tbWFuZHMgb3IsIG1vcmUgY3JpdGljYWxseSwgdHJpZ2dlciBhIFZNR0VYSVQ/IFRoYXQncyB3aGVyZSB0aGUgaW50ZXJlc3Rpbmcgc3R1ZmYgaGFwcGVucy5cblxuSSd2ZSBnb3QgYSBodW5jaCB0aGF0IGBLVk1fTUVNT1JZX0VOQ1JZUFRfT1BgLCBhbmQgZnVuY3Rpb25zIGxpa2UgYHNldl9tZW1fZW5jX2lvY3RsYCBvciBgc2V2X2hhbmRsZV92bWdleGl0YCBhcmUgdGhlIHJlbGV2YW50IHRhcmdldHMuIFNvLCBJIG5lZWQgdG8gZGlnIGludG8gdGhvc2UuIExldCdzIHN0YXJ0IHdpdGggYSBmb2N1c2VkIHNlYXJjaCBmb3IgYHNldl9oYW5kbGVfdm1nZXhpdGAgaXRzZWxmLCBvciBtYXliZSBgS1ZNX0VYSVRfU05QX1JFUV9DRVJUU2Agb3IsIHBlcmhhcHMgbW9yZSBnZW5lcmFsbHksIGNhbGxzIHRvIGBzZXZfaXNzdWVfY21kYC4gVGhhdCBzaG91bGQgZ2V0IG1lIHBvaW50ZWQgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbi4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0IHN1cmZhY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjkzMiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjEzOjQ3LjQyMzkwMDk3MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI0MjQzNDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2V2X2hhbmRsZV92bWdleGl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00MjkxPXN0YXRpYyBpbnQgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBncGFfdCByZXFfZ3BhLCBncGFfdCByZXNwX2dwYSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDM1Mi1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQzNTM6c3RhdGljIGludCBzZXZfaGFuZGxlX3ZtZ2V4aXRfbXNyX3Byb3RvY29sKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDM1NC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQ0OTc9c3RhdGljIGJvb2wgaXNfc25wX29ubHlfdm1nZXhpdCh1NjQgZXhpdF9jb2RlKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NTA5LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDUxMDppbnQgc2V2X2hhbmRsZV92bWdleGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ1MTEte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NTE4LVxcdGlmIChnaGNiX2dwYSBcXHUwMDI2IEdIQ0JfTVNSX0lORk9fTUFTSylcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ1MTk6XFx0XFx0cmV0dXJuIHNldl9oYW5kbGVfdm1nZXhpdF9tc3JfcHJvdG9jb2woc3ZtKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ1MjAtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTMzNDc9c3RhdGljIGludCAoKmNvbnN0IHN2bV9leGl0X2hhbmRsZXJzW10pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkgPSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM0MjEtI2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MzQyMjpcXHRbU1ZNX0VYSVRfVk1HRVhJVF1cXHRcXHRcXHQ9IHNldl9oYW5kbGVfdm1nZXhpdCxcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM0MjMtI2VuZGlmXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTM2MzY9aW50IHN2bV9pbnZva2VfZXhpdF9oYW5kbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IF9fZXhpdF9jb2RlKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNjY0LVxcdGVsc2UgaWYgKGV4aXRfY29kZSA9PSBTVk1fRVhJVF9WTUdFWElUKVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MzY2NTpcXHRcXHRyZXR1cm4gc2V2X2hhbmRsZV92bWdleGl0KHZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzY2Ni0jZW5kaWZcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9OTkxPXZvaWQgc2V2X2d1ZXN0X21lbW9yeV9yZWNsYWltZWQoc3RydWN0IGt2bSAqa3ZtKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjk5MjppbnQgc2V2X2hhbmRsZV92bWdleGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC05OTMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjEzOjQ3LjQ3NjMzMDU1MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MTcyNTg0ODk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRXJyb3IgSGFuZGxpbmcgaW4gYHNldl9oYW5kbGVfdm1nZXhpdGAqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgc2V2X2hhbmRsZV92bWdleGl0YCBpcyB0aGUgZXhpdCBoYW5kbGVyIGZvciBgU1ZNX0VYSVRfVk1HRVhJVGAsIHNwZWNpZmljYWxseSBmb3IgQU1EJ3MgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSB3aXRoaW4gS1ZNLiBXaGVuIGEgZ3Vlc3QgdHJpZ2dlcnMgYSBWTUdFWElUIHdpdGggY2VydGFpbiBjb2Rlcywgc3BlY2lmaWNhbGx5IGBTVk1fVk1HRVhJVF9HVUVTVF9SRVFVRVNUYCBvciBgU1ZNX1ZNR0VYSVRfRVhUX0dVRVNUX1JFUVVFU1RgLCBpdCBjYWxscyBlaXRoZXIgYHNucF9oYW5kbGVfZ3Vlc3RfcmVxYCBvciBgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxYC4gSSBhbHNvIGtub3cgdGhhdCBgc25wX2NvbXBsZXRlX3JlcV9jZXJ0c2Ag4oCTIHdoaWNoIGl0c2VsZiByZWxpZXMgb24gYHNucF9oYW5kbGVfZ3Vlc3RfcmVxYCDigJMgaXMgdHJpZ2dlcmVkIGJ5IGB2Y3B1LVx1MDAzZWFyY2guY29tcGxldGVfdXNlcnNwYWNlX2lvYCBhZnRlciB1c2Vyc3BhY2UgY29tcGxldGVzIGBLVk1fRVhJVF9TTlBfUkVRX0NFUlRTYCBhbmQgY2FsbHMgYGlvY3RsKHZjcHVfZmQsIEtWTV9SVU4pYC5cblxuTm93LCB0aGUgcGF0Y2gncyBjaGFuZ2VzIGFyZSBjcnVjaWFsLiBJIG5lZWQgdG8gZm9jdXMgb24gaG93IHRoZSBlcnJvciBoYW5kbGluZyBoYXMgYmVlbiBtb2RpZmllZCB3aXRoaW4gYHNucF9oYW5kbGVfZ3Vlc3RfcmVxYCBhbmQgYHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcWAuXG5cblByZXZpb3VzbHksIGVycm9ycyBmcm9tIGBrdm1fcmVhZF9ndWVzdGAgYW5kIGBrdm1fd3JpdGVfZ3Vlc3RgIHdpdGhpbiBgc25wX2hhbmRsZV9ndWVzdF9yZXFgIHdvdWxkIHByb3BhZ2F0ZSBhcyBgLUVJT2AsIHdoaWNoIGVzc2VudGlhbGx5IG1lYW5zIGEgZ2VuZXJhbCBJL08gZXJyb3Igd291bGQgYmUgcmV0dXJuZWQgYWxsIHRoZSB3YXkgdXAgdG8gS1ZNIHVzZXJzcGFjZSB2aWEgYGt2bV92Y3B1X3J1bmAuIE5vdywgdGhlIHBhdGNoIHJlZGlyZWN0cyB0aGVzZSBlcnJvcnMuIEluc3RlYWQgb2YgcmV0dXJuaW5nIGAtRUlPYCwgZmFpbHVyZXMgbm93IGNhbGwgYHN2bV92bWdleGl0X2JhZF9pbnB1dChzdm0sIEdIQ0JfRVJSX0lOVkFMSURfSU5QVVQpOyByZXR1cm4gMTtgLiBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgaXQncyB3cml0aW5nIGFuIGVycm9yIGNvZGUgaW50byB0aGUgR0hDQiBhbmQgdGhlbiByZXN1bWluZyB0aGUgZ3Vlc3QgaW5zdGVhZCBvZiBleGl0aW5nIHRocm91Z2ggdGhlIHN0YW5kYXJkIEtWTSBlcnJvciBwYXRoLlxuXG5UaGUgc2FtZSBwYXR0ZXJuIGFwcGxpZXMgdG8gYHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcWAuIEVycm9ycyBmcm9tIGBrdm1fcmVhZF9ndWVzdGAgb2YgdGhlIGBtc2dfdHlwZWAgYW5kIGZyb20gYGt2bV9jbGVhcl9ndWVzdGAgb2YgdGhlIGNlcnRpZmljYXRlIHRhYmxlIGFsc28gcHJldmlvdXNseSByZXR1cm5lZCBgLUVJT2AuIFRoZSBwYXRjaCBjaGFuZ2VzIHRoZXNlIHRvIGp1bXAgdG8gYHJlcXVlc3RfaW52YWxpZGAsIHdoaWNoIHRoZW4gY2FsbHMgYHN2bV92bWdleGl0X2JhZF9pbnB1dGAgaW4gdGhlIHNhbWUgd2F5LCBwbGFjaW5nIGFuIGVycm9yIGluIHRoZSBHSENCIGFuZCByZXN1bWluZy4gVGhpcyBpbmRpY2F0ZXMgYW4gZWZmb3J0IHRvIGtlZXAgdGhlIGd1ZXN0IHJ1bm5pbmcsIGV2ZW4gaW4gdGhlIHByZXNlbmNlIG9mIHRoZXNlIGVycm9ycywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuXG5cblRvIGNvbXBsZXRlIHRoaXMgYW5hbHlzaXMsIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gY2hlY2sgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzIGZvciBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgbmV3IGNvbmZpZ3VyYXRpb24gaW1wbGljYXRpb25zLiBJIHNob3VsZCBzZWFyY2ggd2l0aGluIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjQ2LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDkxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjEzOjUyLjY0ODkxNzU2OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTExNTc1NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiS1ZNX0FNRF9TRVZ8S1ZNX0FNRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTIwPWNvbmZpZyBLVk1fWDg2XFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE6XFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyLVxcdHNlbGVjdCBLVk1fQ09NTU9OXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMzQ9Y29uZmlnIEtWTV9JTlRFTF9URFhcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVxcdGJvb2wgXFxcIkFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcXFwiXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU4LVxcdGRlZmF1bHQgeVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1OTpcXHRkZXBlbmRzIG9uIEtWTV9BTUQgXFx1MDAyNlxcdTAwMjYgWDg2XzY0XFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTYwOlxcdGRlcGVuZHMgb24gQ1JZUFRPX0RFVl9TUF9QU1AgXFx1MDAyNlxcdTAwMjYgIShLVk1fQU1EPXkgXFx1MDAyNlxcdTAwMjYgQ1JZUFRPX0RFVl9DQ1BfREQ9bSlcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNjEtXFx0c2VsZWN0IEFSQ0hfSEFTX0NDX1BMQVRGT1JNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU9MjQ9a3ZtLWFtZC15XFx0XFx0Kz0gc3ZtL3N2bS5vIHN2bS92bWVudGVyLm8gc3ZtL3BtdS5vIHN2bS9uZXN0ZWQubyBzdm0vYXZpYy5vXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlLTI1LVxcbmFyY2gveDg2L2t2bS9NYWtlZmlsZToyNjprdm0tYW1kLSQoQ09ORklHX0tWTV9BTURfU0VWKVxcdCs9IHN2bS9zZXYub1xcbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0yNy1rdm0tYW1kLSQoQ09ORklHX0tWTV9IWVBFUlYpXFx0Kz0gc3ZtL2h5cGVydi5vXFxuLS1cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU9MzY9b2JqLSQoQ09ORklHX0tWTV9JTlRFTClcXHQrPSBrdm0taW50ZWwub1xcbmFyY2gveDg2L2t2bS9NYWtlZmlsZTozNzpvYmotJChDT05GSUdfS1ZNX0FNRClcXHQrPSBrdm0tYW1kLm9cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtMzgtXFxuLS1cXG5hcmNoL3g4Ni9rdm0va3ZtLWFzbS1vZmZzZXRzLmM9MTM9c3RhdGljIHZvaWQgX191c2VkIGNvbW1vbih2b2lkKVxcbmFyY2gveDg2L2t2bS9rdm0tYXNtLW9mZnNldHMuYy0xNC17XFxuYXJjaC94ODYva3ZtL2t2bS1hc20tb2Zmc2V0cy5jOjE1OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19LVk1fQU1EKSkge1xcbmFyY2gveDg2L2t2bS9rdm0tYXNtLW9mZnNldHMuYy0xNi1cXHRcXHRCTEFOSygpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0zMDg2PXZvaWQgX19pbml0IHNldl9oYXJkd2FyZV9zZXR1cCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMTE2LVxcdCAqL1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzExNzpcXHRpZiAoSVNfQlVJTFRJTihDT05GSUdfS1ZNX0FNRCkgXFx1MDAyNlxcdTAwMjYgc2V2X21vZHVsZV9pbml0KCkpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMTE4LVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0zMzQ3PXN0YXRpYyBpbnQgKCpjb25zdCBzdm1fZXhpdF9oYW5kbGVyc1tdKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpID0ge1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNDIwLVxcdFtTVk1fRVhJVF9BVklDX1VOQUNDRUxFUkFURURfQUNDRVNTXVxcdD0gYXZpY191bmFjY2VsZXJhdGVkX2FjY2Vzc19pbnRlcmNlcHRpb24sXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozNDIxOiNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM0MjItXFx0W1NWTV9FWElUX1ZNR0VYSVRdXFx0XFx0XFx0PSBzZXZfaGFuZGxlX3ZtZ2V4aXQsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTM2MzY9aW50IHN2bV9pbnZva2VfZXhpdF9oYW5kbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IF9fZXhpdF9jb2RlKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNjYyLVxcdFxcdHJldHVybiBucGZfaW50ZXJjZXB0aW9uKHZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MzY2MzojaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNjY0LVxcdGVsc2UgaWYgKGV4aXRfY29kZSA9PSBTVk1fRVhJVF9WTUdFWElUKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz00NzA0PXN0YXRpYyBib29sIHN2bV9oYXNfZW11bGF0ZWRfbXNyKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00NzEzLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NDcxNDojaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00NzE1LVxcdFxcdC8qXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTUzMjg9c3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU0NDItXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo1NDQzOiNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU0NDQtXFx0LnZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24gPSBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbixcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9NjY9ZW51bSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTk3LVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6OTg6I2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtOTktc3RydWN0IGt2bV9zZXZfaW5mbyB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTEyNz1zdHJ1Y3Qga3ZtX3N2bSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTEzNS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjEzNjojaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC0xMzctXFx0c3RydWN0IGt2bV9zZXZfaW5mbyBzZXZfaW5mbztcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9MzkwPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IGt2bV9zdm0gKnRvX2t2bV9zdm0oc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC0zOTQtXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDozOTU6I2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMzk2LXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IGt2bV9zZXZfaW5mbyAqdG9fa3ZtX3Nldl9pbmZvKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9OTgwPXZvaWQgc2V2X2VzX3VubWFwX2doY2Ioc3RydWN0IHZjcHVfc3ZtICpzdm0pO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtOTgxLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6OTgyOiNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTk4My1ib29sIHNldl92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3ZtZW50ZXIuUz0yMTA9U1lNX0ZVTkNfRU5EKF9fc3ZtX3ZjcHVfcnVuKVxcbmFyY2gveDg2L2t2bS9zdm0vdm1lbnRlci5TLTIxMS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3ZtZW50ZXIuUzoyMTI6I2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9zdm0vdm1lbnRlci5TLTIxMy1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vdm1lbnRlci5TPTI4Mz1TWU1fRlVOQ19FTkQoX19zdm1fc2V2X2VzX3ZjcHVfcnVuKVxcbmFyY2gveDg2L2t2bS9zdm0vdm1lbnRlci5TOjI4NDojZW5kaWYgLyogQ09ORklHX0tWTV9BTURfU0VWICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjEzOjUyLjcwMDA3ODE0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0MDkzNjU0MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLVk0tQU1EIFNFViBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBgQ09ORklHX0tWTV9BTURfU0VWYCBhbmQgaXRzIGRlcGVuZGVuY2llcy4gSSBrbm93IHRoaXMgaW50aW1hdGVseTsgaXQncyB0aGUgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiBzdXBwb3J0IGZvciBBTUQgcHJvY2Vzc29ycywgYSBjcml0aWNhbCBjb21wb25lbnQuIFNvLCBJIG5lZWQgdG8gdmVyaWZ5IGl0cyBjb25maWd1cmF0aW9uLlxuXG5GaXJzdCwgSSBzZWUgdGhhdCBgS1ZNX0FNRGAgYW5kIGBYODZfNjRgIGFyZSByZXF1aXJlZCwgdGhhdCBtYWtlcyBzZW5zZSAtIEFNRCBwbGF0Zm9ybSBhbmQgNjQtYml0IGFyY2hpdGVjdHVyZSBhcmUgZXhwZWN0ZWQuIEFsc28sIGBDUllQVE9fREVWX1NQX1BTUGAgaXMgbmVlZGVkLiBUaGF04oCZcyBwcm9iYWJseSB0aGUgQU1EIFNlY3VyZSBQcm9jZXNzb3IsIG9yIFBTUCwgY3J5cHRvIGRldmljZSBkcml2ZXIuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhhdC4gRmluYWxseSwgdGhlcmUncyBhIG5lZ2F0aW9uOiBgIShLVk1fQU1EPXkgXHUwMDI2XHUwMDI2IENSWVBUT19ERVZfQ0NQX0REPW0pYC4gTWVhbmluZywgaXQncyBub3QgYWxsb3dlZCBmb3IgS1ZNX0FNRCB0byBiZSAneScgQU5EIGBDUllQVE9fREVWX0NDUF9ERGAgdG8gYmUgYSBtb2R1bGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYENSWVBUT19ERVZfQ0NQX0REYCBhY3R1YWxseSBpcyBhbmQgd2h5IGl0IGNhbm5vdCBiZSBhIG1vZHVsZSBpbiB0aGlzIGNvbnRleHQuXG5cblJpZ2h0LiBJIG5lZWQgdG8gZGVsdmUgaW50byB0aGUgYGRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnYCBmaWxlIHRvIHNlZSB3aGF0IGBDT05GSUdfQ1JZUFRPX0RFVl9TUF9QU1BgIGRlcGVuZHMgb24sIGFuZCB1bmRlcnN0YW5kIHRoaXMgZGVwZW5kZW5jeSBjaGFpbiBmdWxseS4gVGhpcyB3aWxsIGhlbHAgbWUgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBmb3IgdGhlIG92ZXJhbGwgS1ZNLUFNRCBTRVYgY29uZmlndXJhdGlvbi4gTGV0IG1lIHF1aWNrbHkgZ3JhYiB0aGUgS2NvbmZpZyBmaWxlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDk5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjI6MTM6NTYuMTA5NDQ3MjUxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTI3MzcwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ1JZUFRPX0RFVl9TUF9QU1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9jcnlwdG8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnPTIzPWNvbmZpZyBDUllQVE9fREVWX0NDUF9DUllQVE9cXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnLTM3LVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnOjM4OmNvbmZpZyBDUllQVE9fREVWX1NQX1BTUFxcbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIlBsYXRmb3JtIFNlY3VyaXR5IFByb2Nlc3NvciAoUFNQKSBkZXZpY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjEzOjU2LjE2NDcyNTkwMloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjgwMzIxNTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgQ3J5cHRvIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgYGRyaXZlcnMvY3J5cHRvL2NjcC9gIGRpcmVjdG9yeSwgc3BlY2lmaWNhbGx5IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0IHRoZSByZWxldmFudCBzZXR0aW5ncyBhcmUgcHJvYmFibHkgZGVmaW5lZCBpbiB0aGUgYEtjb25maWdgIGZpbGUgd2l0aGluIHRoYXQgZGlyZWN0b3J5LiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGFyb3VuZCBsaW5lIDM4LCBsaWtlbHkgd2hlcmUgY29yZSBvcHRpb25zIGFyZSBkZWZpbmVkLiBUaGlzIHdvdWxkIGdpdmUgbWUgdGhlIGJhc2UgZGVmaW5pdGlvbnMgSSBuZWVkIHRvIGV4cGxvcmUuIFRoaXMgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBkcml2ZXIgaXMgY29uZmlndXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwNDMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjoxMzo1OS44NDUwNDk3NFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyNTpcXHRcXHRkZWZhdWx0IG1cXG4gIDI2OlxcdFxcdGRlcGVuZHMgb24gQ1JZUFRPX0RFVl9DQ1BfRERcXG4gIDI3OlxcdFxcdGRlcGVuZHMgb24gQ1JZUFRPX0RFVl9TUF9DQ1BcXG4gIDI4OlxcdFxcdHNlbGVjdCBDUllQVE9fSEFTSFxcbiAgMjk6XFx0XFx0c2VsZWN0IENSWVBUT19TS0NJUEhFUlxcbiAgMzA6XFx0XFx0c2VsZWN0IENSWVBUT19BVVRIRU5DXFxuICAzMTpcXHRcXHRzZWxlY3QgQ1JZUFRPX1JTQVxcbiAgMzI6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfQUVTXFxuICAzMzpcXHRcXHRoZWxwXFxuICAzNDpcXHRcXHQgIFN1cHBvcnQgZm9yIHVzaW5nIHRoZSBjcnlwdG9ncmFwaGljIEFQSSB3aXRoIHRoZSBBTUQgQ3J5cHRvZ3JhcGhpY1xcbiAgMzU6XFx0XFx0ICBDb3Byb2Nlc3Nvci4gVGhpcyBtb2R1bGUgc3VwcG9ydHMgb2ZmbG9hZCBvZiBTSEEgYW5kIEFFUyBhbGdvcml0aG1zLlxcbiAgMzY6XFx0XFx0ICBJZiB5b3UgY2hvb3NlICdNJyBoZXJlLCB0aGlzIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjY3BfY3J5cHRvLlxcbiAgMzc6XFx0XFxuICAzODpcXHRjb25maWcgQ1JZUFRPX0RFVl9TUF9QU1BcXG4gIDM5OlxcdFxcdGJvb2wgXFxcIlBsYXRmb3JtIFNlY3VyaXR5IFByb2Nlc3NvciAoUFNQKSBkZXZpY2VcXFwiXFxuICA0MDpcXHRcXHRkZWZhdWx0IHlcXG4gIDQxOlxcdFxcdGRlcGVuZHMgb24gQ1JZUFRPX0RFVl9DQ1BfREQgXFx1MDAyNlxcdTAwMjYgWDg2XzY0IFxcdTAwMjZcXHUwMDI2IEFNRF9JT01NVVxcbiAgNDI6XFx0XFx0c2VsZWN0IFBDSV9UU00gaWYgUENJXFxuICA0MzpcXHRcXHRoZWxwXFxuICA0NDpcXHRcXHQgUHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgQU1EIFBsYXRmb3JtIFNlY3VyaXR5IFByb2Nlc3NvciAoUFNQKS5cXG4gIDQ1OlxcdFxcdCBUaGUgUFNQIGlzIGEgZGVkaWNhdGVkIHByb2Nlc3NvciB0aGF0IHByb3ZpZGVzIHN1cHBvcnQgZm9yIGtleVxcbiAgNDY6XFx0XFx0IG1hbmFnZW1lbnQgY29tbWFuZHMgaW4gU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBtb2RlLFxcbiAgNDc6XFx0XFx0IGFsb25nIHdpdGggc29mdHdhcmUtYmFzZWQgVHJ1c3RlZCBFeGVjdXRpb24gRW52aXJvbm1lbnQgKFRFRSkgdG9cXG4gIDQ4OlxcdFxcdCBlbmFibGUgdGhpcmQtcGFydHkgdHJ1c3RlZCBhcHBsaWNhdGlvbnMuXFxuICA0OTpcXHRcXG4gIDUwOlxcdGNvbmZpZyBDUllQVE9fREVWX0NDUF9ERUJVR0ZTXFxuICA1MTpcXHRcXHRib29sIFxcXCJFbmFibGUgQ0NQIEludGVybmFscyBpbiBEZWJ1Z0ZTXFxcIlxcbiAgNTI6XFx0XFx0ZGVmYXVsdCBuXFxuICA1MzpcXHRcXHRkZXBlbmRzIG9uIENSWVBUT19ERVZfU1BfQ0NQXFxuICA1NDpcXHRcXHRoZWxwXFxuICA1NTpcXHRcXHQgIEV4cG9zZSBDQ1AgZGV2aWNlIGluZm9ybWF0aW9uIHN1Y2ggYXMgb3BlcmF0aW9uIHN0YXRpc3RpY3MsIGZlYXR1cmVcXG4gIDU2OlxcdFxcdCAgaW5mb3JtYXRpb24sIGFuZCBkZXNjcmlwdG9yIHF1ZXVlIGNvbnRlbnRzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjoxMzo1OS44NDUxMzg0NloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5NTM4NzAzMjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLVk0tQU1EIFNFViBGdXp6aW5nIFJlYWNoYWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgd2UgaGF2ZSBhIGxpc3Qgb2YgcG90ZW50aWFsbHkgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zOiBgQ09ORklHX0tWTV9BTURgLCBgQ09ORklHX0tWTV9BTURfU0VWYCwgYENPTkZJR19DUllQVE9fREVWX1NQX1BTUGAsIGBDT05GSUdfQ1JZUFRPX0RFVl9DQ1BfRERgLCBhbmQgYENPTkZJR19BTURfSU9NTVVgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgaGlkZGVuIGRlcGVuZGVuY2llcy5cblxuTm93LCBmb2N1c2luZyBvbiBgS1ZNX0FNRF9TRVZgLCB0aGUgaW1tZWRpYXRlIHByZXJlcXVpc2l0ZXMgc2VlbSB0byBiZSBgS1ZNX0FNRGAsIGBDUllQVE9fREVWX1NQX1BTUGAsIGBDUllQVE9fREVWX0NDUF9ERGAsIGBBTURfSU9NTVVgLCBhbmQsIG9idmlvdXNseSwgYFg4Nl82NGAgZ2l2ZW4gdGhlIEFNRDY0IHRhcmdldC4gVGhhdCBtYWtlcyBzZW5zZS5cblxuVGhlIHJlYWwgcXVlc3Rpb24gaXMsIGlzIHRoaXMgY29kZSByZWFjaGFibGUgYW5kIHRoZXJlZm9yZSBmdXp6YWJsZT8gVGhlIGluc3RydWN0aW9ucyBlbXBoYXNpemUgcmVhY2hhYmlsaXR5IGFzIHRoZSBrZXkgY3JpdGVyaW9uLiBUaGV5IHN0YXRlIGZ1enppbmcgaXMgb25seSBlZmZlY3RpdmUgZm9yIGNvZGUgdGhhdCAqYWN0dWFsbHkqIGV4ZWN1dGVzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCB1c2luZyBzb2Z0d2FyZSBlbXVsYXRlZCBkZXZpY2VzLlxuXG5UaGUgY3JpdGljYWwgdW5jZXJ0YWludHkgaGVyZSBpcyB3aGV0aGVyIEFNRCBTRVYvU0VWLVNOUCBvcGVyYXRlcyBpbiB0aGVzZSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBjb250ZXh0cywgb3IgaWYgaXQgZGVtYW5kcyBuZXN0ZWQgdmlydHVhbGl6YXRpb24gb3Igc3BlY2lmaWMgUUVNVSBjb25maWd1cmF0aW9ucy4gQ2FuIEtWTSBiZSBlZmZlY3RpdmVseSBmdXp6ZWQgaW4gYSB0eXBpY2FsIFFFTVUgb3IgR0NFIHNldHVwP1xuXG5NeSBleHBlcmllbmNlIHdpdGggU3l6a2FsbGVyIGNvbWVzIGludG8gcGxheSBoZXJlLiBXZSdyZSBydW5uaW5nIFN5emthbGxlciBpbnN0YW5jZXMgKndpdGhpbiogUUVNVSBvciBHQ0UgVk1zLiBTeXprYWxsZXIgaGFzIGRlc2NyaXB0aW9ucyBmb3IgZnVuY3Rpb25zIGxpa2UgYHN5el9rdm1fc2V0dXBfY3B1YCBhbmQgYGlvY3RsJEtWTV8qYC4gU28sIGV2ZW4gd2l0aG91dCAqcGh5c2ljYWwqIFNFVi1TTlAgaGFyZHdhcmUgb24gdGhlIGhvc3QsIGlzIEtWTSBjb2RlIHN0aWxsIHJlYWNoYWJsZSB2aWEgdGhlc2UgbWVjaGFuaXNtcz8gRG9lcyBTRVYtU05QICpyZXF1aXJlKiB0aGUgaG9zdCB0byBoYXZlIHBoeXNpY2FsIFNFVi1TTlAgaGFyZHdhcmU/XG5cbkkgbmVlZCB0byBkaXZlIGRlZXBlci4gSSdtIGdvaW5nIHRvIGxvb2sgYXQgYHNldl9oYXJkd2FyZV9zZXR1cGAgYW5kIGBzZXZfc25wX2luaXRgIGluIGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYCB0byBzZWUgaWYgdGhvc2UgZnVuY3Rpb25zIHByb3ZpZGUgaW5zaWdodHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4Njg0LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjI6MTQ6MDkuMzgzODQ1MzAzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzYzMDY2NzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldl9zbnBfc3VwcG9ydGVkfHNucF9oYW5kbGVfZ3Vlc3RfcmVxXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0zMDg2PXZvaWQgX19pbml0IHNldl9oYXJkd2FyZV9zZXR1cCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMDg5LVxcdHN0cnVjdCBzZXZfcGxhdGZvcm1faW5pdF9hcmdzIGluaXRfYXJncyA9IHswfTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMwOTA6XFx0Ym9vbCBzZXZfc25wX3N1cHBvcnRlZCA9IGZhbHNlO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzA5MS1cXHRib29sIHNldl9lc19zdXBwb3J0ZWQgPSBmYWxzZTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzE5MC1cXHRzZXZfZXNfc3VwcG9ydGVkID0gdHJ1ZTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMxOTE6XFx0c2V2X3NucF9zdXBwb3J0ZWQgPSBzZXZfc25wX2VuYWJsZWQgXFx1MDAyNlxcdTAwMjYgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMxOTItXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyMDEtXFx0XFx0aWYgKHNldl9wbGF0Zm9ybV9pbml0KFxcdTAwMjZpbml0X2FyZ3MpKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzIwMjpcXHRcXHRcXHRzZXZfc3VwcG9ydGVkID0gc2V2X2VzX3N1cHBvcnRlZCA9IHNldl9zbnBfc3VwcG9ydGVkID0gZmFsc2U7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMjAzOlxcdFxcdGVsc2UgaWYgKHNldl9zbnBfc3VwcG9ydGVkKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzIwNDpcXHRcXHRcXHRzZXZfc25wX3N1cHBvcnRlZCA9IGlzX3Nldl9zbnBfaW5pdGlhbGl6ZWQoKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyMDUtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMjA2OlxcdFxcdGlmIChzZXZfc25wX3N1cHBvcnRlZCkge1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzIwNy1cXHRcXHRcXHRzbnBfc3VwcG9ydGVkX3BvbGljeV9iaXRzID0gc2V2X2dldF9zbnBfcG9saWN5X2JpdHMoKSBcXHUwMDI2XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyMzAtXFx0XFx0dm1fdHlwZXMgfD0gQklUKEtWTV9YODZfU0VWX0VTX1ZNKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMyMzE6XFx0aWYgKHNldl9zbnBfc3VwcG9ydGVkKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzIzMi1cXHRcXHR2bV90eXBlcyB8PSBCSVQoS1ZNX1g4Nl9TTlBfVk0pO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjQ2LVxcdFxcdHByX2luZm8oXFxcIlNFVi1TTlAgJXMgKEFTSURzICV1IC0gJXUpXFxcXG5cXFwiLFxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzI0NzpcXHRcXHRcXHRzZXZfc3RyX2ZlYXR1cmVfc3RhdGUoc2V2X3NucF9zdXBwb3J0ZWQsIHZtX3R5cGVzIFxcdTAwMjYgQklUKEtWTV9YODZfU05QX1ZNKSksXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjQ4LVxcdFxcdFxcdG1pbl9zbnBfYXNpZCwgbWF4X3NucF9hc2lkKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzI1MS1cXHRzZXZfZXNfZW5hYmxlZCA9IHNldl9lc19zdXBwb3J0ZWQ7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMjUyOlxcdHNldl9zbnBfZW5hYmxlZCA9IHNldl9zbnBfc3VwcG9ydGVkO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzI1My1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDE0Mj1zdGF0aWMgaW50IHNldl9zbnBfYXBfY3JlYXRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQyMTctXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0MjE4OnN0YXRpYyBpbnQgc25wX2hhbmRsZV9ndWVzdF9yZXEoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGdwYV90IHJlcV9ncGEsIGdwYV90IHJlc3BfZ3BhKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDIxOS17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQyNjg9c3RhdGljIGludCBzbnBfY29tcGxldGVfcmVxX2NlcnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDI3NC1cXHRjYXNlIDA6XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0Mjc1OlxcdFxcdHJldHVybiBzbnBfaGFuZGxlX2d1ZXN0X3JlcShzdm0sIGNvbnRyb2wtXFx1MDAzZWV4aXRfaW5mb18xLFxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDI3Ni1cXHRcXHRcXHRcXHRcXHQgICAgY29udHJvbC1cXHUwMDNlZXhpdF9pbmZvXzIpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00MjkxPXN0YXRpYyBpbnQgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBncGFfdCByZXFfZ3BhLCBncGFfdCByZXNwX2dwYSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDM0NS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQzNDY6XFx0cmV0dXJuIHNucF9oYW5kbGVfZ3Vlc3RfcmVxKHN2bSwgcmVxX2dwYSwgcmVzcF9ncGEpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDM0Ny1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDUxMD1pbnQgc2V2X2hhbmRsZV92bWdleGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDY4MS1cXHRcXHRpZiAoY29udHJvbC1cXHUwMDNlZXhpdF9jb2RlID09IFNWTV9WTUdFWElUX0dVRVNUX1JFUVVFU1QpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0NjgyOlxcdFxcdFxcdHJldHVybiBzbnBfaGFuZGxlX2d1ZXN0X3JlcShzdm0sIGNvbnRyb2wtXFx1MDAzZWV4aXRfaW5mb18xLFxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDY4My1cXHRcXHRcXHRcXHRcXHRcXHQgICAgY29udHJvbC1cXHUwMDNlZXhpdF9pbmZvXzIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjoxNDoxMC43NDY5MTYyMDNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTI4NjgxNjE3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLVk0gQU1EIFNFViBGdXp6aW5nIERlY2lzaW9uKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgd2UncmUgbG9va2luZyBhdCBhIHBhdGNoIGltcGFjdGluZyBLVk0sIHNwZWNpZmljYWxseSB0aGUgQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgaW1wbGVtZW50YXRpb24uIFRoZSBpbml0aWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyB3YXJyYW50cyBmdXp6aW5nLiBHaXZlbiB0aGUgcnVsZXMsIEtWTSBvbiB4ODYgaXMgZGVmaW5pdGVseSBhIHRhcmdldCB3b3J0aCBjb25zaWRlcmluZy5cblxuVGhlIHBhdGNoIG1vZGlmaWVzIGNvbnRyb2wgZmxvdyB3aXRoaW4gYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgLCB0b3VjaGluZyBgc25wX2hhbmRsZV9ndWVzdF9yZXFgIGFuZCBgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxYC4gVGhlIGNvcmUgY2hhbmdlIGludm9sdmVzIGVycm9yIGhhbmRsaW5nIGZvciBpbnZhbGlkIGd1ZXN0IHJlcXVlc3RzLCBzcGVjaWZpY2FsbHkgd2hlbiBga3ZtX3JlYWRfZ3Vlc3RgIG9yIGBrdm1fd3JpdGVfZ3Vlc3RgIGZhaWwuIEluc3RlYWQgb2YgYSBkaXJlY3QgYC1FSU9gIHJldHVybiwgdGhlIGNvZGUgbm93IHJlcG9ydHMgYSBgR0hDQl9FUlJfSU5WQUxJRF9JTlBVVGAgZXJyb3IgdG8gdGhlIGd1ZXN0IHZpYSBgc3ZtX3ZtZ2V4aXRfYmFkX2lucHV0YCBhbmQgcmVzdW1lcyBndWVzdCBleGVjdXRpb24uIFRoaXMgaXMgYSBzaWduaWZpY2FudCBhbHRlcmF0aW9uIGluIGVycm9yIGhhbmRsaW5nIHN0cmF0ZWd5LlxuXG5JbnNwZWN0aW5nIHRoZSBkaWZmIGZ1cnRoZXIsIHRoZSBjaGFuZ2VzIGFyZSBjbGVhcjogZXJyb3IgY29uZGl0aW9ucyB0aGF0IHByZXZpb3VzbHkgcmV0dXJuZWQgYW4gZXJyb3Igbm93IHRyaWdnZXIgdGhlIGBzdm1fdm1nZXhpdF9iYWRfaW5wdXRgIGZ1bmN0aW9uIGNhbGwsIHdoaWNoIG1vZGlmaWVzIGd1ZXN0IGJlaGF2aW9yIGFuZCBleGVjdXRpb24gcGF0aC4gVGhlc2UgZnVuY3Rpb25zLCBgc25wX2hhbmRsZV9ndWVzdF9yZXFgIGFuZCBgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxYCwgYXJlIHRoZSBmb2N1cyBoZXJlLlxuXG5UbyBhdm9pZCBkaWx1dGlvbiBvZiB0aGUgZnV6emluZyBzY29wZSwgd2UnbGwgZXh0cmFjdCBgRm9jdXNTeW1ib2xzYC4gQ29uc2lkZXJpbmcgdGhlIGNvbnRleHQsIGBzbnBfaGFuZGxlX2d1ZXN0X3JlcWAgYW5kIGBzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXFgLCBhcmUgc3RhdGljIGZ1bmN0aW9ucyBpbiB0aGUgYC5jYCBmaWxlIGFuZCBhcmUgbm9uLXRyaXZpYWwgZnVuY3Rpb25zIHdpdGggbXVsdGlwbGUgbGluZXMgb2YgY29kZSBhbmQgY2FsbHMgdG8gb3RoZXIgZnVuY3Rpb25zLiBUaGVyZWZvcmUsIHdlIHNob3VsZCBhbHNvIGluY2x1ZGUgdGhlIG5vbi1zdGF0aWMgY2FsbGVyIGFuZCBlbnRyeXBvaW50IHRvIHRoZXNlIGZ1bmN0aW9uczogYHNldl9oYW5kbGVfdm1nZXhpdGAuXG5cbkFzIGZvciBjb25maWd1cmF0aW9uLCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGFyZTogYEtWTV9BTURgLCBgS1ZNX0FNRF9TRVZgLCBgQ1JZUFRPX0RFVl9TUF9QU1BgLCBgQ1JZUFRPX0RFVl9DQ1BfRERgLCBhbmQgYEFNRF9JT01NVWAuIFRoZXNlIG9wdGlvbnMgbmVlZCB0byBiZSBlbmFibGVkIGZvciB0aGUgdGFyZ2V0ZWQgZnVuY3Rpb25hbGl0eSB0byBiZSBhY3RpdmUsIGFuZCB0aGVyZWZvcmUgZnV6emFibGUuXG5cbkJhc2VkIG9uIHRoZSBydWxlcyBhbmQgdGhlIG5hdHVyZSBvZiB0aGUgbW9kaWZpY2F0aW9ucywgYSBcIldvcnRoRnV6emluZz10cnVlXCIgZGVjaXNpb24gaXMgc3RyYWlnaHRmb3J3YXJkLiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSByZWFjaGFibGUsIGV4ZWN1dGFibGUgY29kZSByZWxhdGVkIHRvIGNvcmUgS1ZNIGZ1bmN0aW9uYWxpdHkuIFNwZWNpZmljYWxseSwgY2hhbmdlcyBpbiBlcnJvciBoYW5kbGluZyBhbmQgVk0gY29udHJvbCBmbG93IHdpdGhpbiBTRVYgZ3Vlc3QgcmVxdWVzdCBoYW5kbGluZyBhcmUgc2lnbmlmaWNhbnQuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBvbiBBTUQ2NCBzeXN0ZW1zIHdpdGggS1ZNIGFuZCBTRVYgZW5hYmxlZC4gVGhlIGZvY3VzIHdpbGwgYmUgb24gYHNucF9oYW5kbGVfZ3Vlc3RfcmVxYCwgYHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcWAgYW5kIHRoZSBlbnRyeXBvaW50IGBzZXZfaGFuZGxlX3ZtZ2V4aXRgLiBUaGUgc2V0LXJlc3VsdHMgY29tbWFuZCBzaG91bGQgcmVmbGVjdCB0aGlzIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTA0MywiT3V0cHV0VG9rZW5zIjoyMDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjE0OjIwLjAzMzczNTA0N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MTk0Mjk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1fQU1EXCIsXG4gICAgXCJLVk1fQU1EX1NFVlwiLFxuICAgIFwiQ1JZUFRPX0RFVl9TUF9QU1BcIixcbiAgICBcIkNSWVBUT19ERVZfQ0NQX0REXCIsXG4gICAgXCJBTURfSU9NTVVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzbnBfaGFuZGxlX2d1ZXN0X3JlcVwiLFxuICAgIFwic25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxXCIsXG4gICAgXCJzZXZfaGFuZGxlX3ZtZ2V4aXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiBLVk0gQU1EIFNFVi1TTlAgZ3Vlc3QgcmVxdWVzdCBoYW5kbGluZyBmdW5jdGlvbnMgKHNucF9oYW5kbGVfZ3Vlc3RfcmVxIGFuZCBzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXEpLiBXaGVuIGd1ZXN0IG1lbW9yeSByZWFkL3dyaXRlIG9yIGNlcnRpZmljYXRlIHRhYmxlIGNsZWFyYW5jZSBmYWlscywgS1ZNIG5vdyByZXBvcnRzIEdIQ0JfRVJSX0lOVkFMSURfSU5QVVQgdG8gdGhlIGd1ZXN0IGFuZCByZXN1bWVzIGd1ZXN0IGV4ZWN1dGlvbiByYXRoZXIgdGhhbiByZXR1cm5pbmcgLUVJTyB0byB1c2Vyc3BhY2UuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIEtWTSBjb250cm9sIGZsb3cgYW5kIFZNIHN0YXRlIGhhbmRsaW5nIG9uIGFtZDY0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTV9BTURcIixcbiAgICBcIktWTV9BTURfU0VWXCIsXG4gICAgXCJDUllQVE9fREVWX1NQX1BTUFwiLFxuICAgIFwiQ1JZUFRPX0RFVl9DQ1BfRERcIixcbiAgICBcIkFNRF9JT01NVVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNucF9oYW5kbGVfZ3Vlc3RfcmVxXCIsXG4gICAgXCJzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXFcIixcbiAgICBcInNldl9oYW5kbGVfdm1nZXhpdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIEtWTSBBTUQgU0VWLVNOUCBndWVzdCByZXF1ZXN0IGhhbmRsaW5nIGZ1bmN0aW9ucyAoc25wX2hhbmRsZV9ndWVzdF9yZXEgYW5kIHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcSkuIFdoZW4gZ3Vlc3QgbWVtb3J5IHJlYWQvd3JpdGUgb3IgY2VydGlmaWNhdGUgdGFibGUgY2xlYXJhbmNlIGZhaWxzLCBLVk0gbm93IHJlcG9ydHMgR0hDQl9FUlJfSU5WQUxJRF9JTlBVVCB0byB0aGUgZ3Vlc3QgYW5kIHJlc3VtZXMgZ3Vlc3QgZXhlY3V0aW9uIHJhdGhlciB0aGFuIHJldHVybmluZyAtRUlPIHRvIHVzZXJzcGFjZS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgS1ZNIGNvbnRyb2wgZmxvdyBhbmQgVk0gc3RhdGUgaGFuZGxpbmcgb24gYW1kNjQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjE0OjIwLjExMDkzOTc3NVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA0MjQ3ODI2MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjoxNDoyMC4xMTEzOTQxNzVaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMDQyNDMyNDA4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gS1ZNIFNFVi1TTlAgZ3Vlc3QgcmVxdWVzdCBoYW5kbGVycyAoYHNucF9oYW5kbGVfZ3Vlc3RfcmVxYCBhbmQgYHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcWApLiBTcGVjaWZpY2FsbHksIHdoZW4gcmVhZGluZy93cml0aW5nL2NsZWFyaW5nIGd1ZXN0IG1lbW9yeSBmYWlscyAoYGt2bV9yZWFkX2d1ZXN0YCwgYGt2bV93cml0ZV9ndWVzdGAsIG9yIGBrdm1fY2xlYXJfZ3Vlc3RgKSwgaW5zdGVhZCBvZiByZXR1cm5pbmcgYC1FSU9gICh3aGljaCBjYXVzZWQgS1ZNIHRvIGV4aXQgdG8gaG9zdCB1c2Vyc3BhY2UpLCBLVk0gbm93IGZvcm1hdHMgYSBHSENCIGJhZCBpbnB1dCBlcnJvciByZXNwb25zZSAoYEdIQ0JfRVJSX0lOVkFMSURfSU5QVVRgIHZpYSBgc3ZtX3ZtZ2V4aXRfYmFkX2lucHV0KClgKSBhbmQgcmVzdW1lcyB0aGUgZ3Vlc3QgKGByZXR1cm4gMWApLlxcblxcblRoZXNlIGNoYW5nZXMgc29sZWx5IGFmZmVjdCBlcnJvciByZXR1cm4gY29kZXMgYW5kIGNvbnRyb2wgZmxvdyBmb3IgZ3Vlc3QgZXJyb3IgcmVwb3J0aW5nOlxcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHN0cnVjdCBwYWRkaW5nIGlzIGNvcGllZCB0byB1c2Vyc3BhY2Ugb3IgdGhlIGd1ZXN0LlxcbjIuIEluIGBzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXFgLCBpZiByZWFkaW5nIGBtc2dfdHlwZWAgZmFpbHMsIGNvbnRyb2wganVtcHMgc3RyYWlnaHQgdG8gYHJlcXVlc3RfaW52YWxpZGAsIGF2b2lkaW5nIGFueSBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBgbXNnX3R5cGVgLlxcbjMuIE5vIGhlYXAvc3RhY2sgYWxsb2NhdGlvbnMgb3IgYnVmZmVyIHNpemUvb2Zmc2V0IG1hbmlwdWxhdGlvbnMgYXJlIGludHJvZHVjZWQuXFxuXFxuQXMgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGY4MGM3ODdiZDNkYTEzOGE2ZDdhNjRiOGI3ODBkMWYxNGQ5NDZkMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDEwIDIyOjEzOjEyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbmluZGV4IDU3MDU3MjNmMWY0MTIuLmQwNzU2MjMxMDUxOWEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5AQCAtNDIyOCw4ICs0MjI4LDEwIEBAIHN0YXRpYyBpbnQgc25wX2hhbmRsZV9ndWVzdF9yZXEoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGdwYV90IHJlcV9ncGEsIGdwYV90IHJlc3BfXG4gXG4gXHRndWFyZChtdXRleCkoXHUwMDI2c2V2LVx1MDAzZWd1ZXN0X3JlcV9tdXRleCk7XG4gXG4tXHRpZiAoa3ZtX3JlYWRfZ3Vlc3Qoa3ZtLCByZXFfZ3BhLCBzZXYtXHUwMDNlZ3Vlc3RfcmVxX2J1ZiwgUEFHRV9TSVpFKSlcbi1cdFx0cmV0dXJuIC1FSU87XG4rXHRpZiAoa3ZtX3JlYWRfZ3Vlc3Qoa3ZtLCByZXFfZ3BhLCBzZXYtXHUwMDNlZ3Vlc3RfcmVxX2J1ZiwgUEFHRV9TSVpFKSkge1xuK1x0XHRzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX0lOUFVUKTtcbitcdFx0cmV0dXJuIDE7XG4rXHR9XG4gXG4gXHRkYXRhLmdjdHhfcGFkZHIgPSBfX3BzcF9wYShzZXYtXHUwMDNlc25wX2NvbnRleHQpO1xuIFx0ZGF0YS5yZXFfcGFkZHIgPSBfX3BzcF9wYShzZXYtXHUwMDNlZ3Vlc3RfcmVxX2J1Zik7XG5AQCAtNDI0NCw4ICs0MjQ2LDEwIEBAIHN0YXRpYyBpbnQgc25wX2hhbmRsZV9ndWVzdF9yZXEoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGdwYV90IHJlcV9ncGEsIGdwYV90IHJlc3BfXG4gXHRpZiAocmV0IFx1MDAyNlx1MDAyNiAhZndfZXJyKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0aWYgKGt2bV93cml0ZV9ndWVzdChrdm0sIHJlc3BfZ3BhLCBzZXYtXHUwMDNlZ3Vlc3RfcmVzcF9idWYsIFBBR0VfU0laRSkpXG4tXHRcdHJldHVybiAtRUlPO1xuK1x0aWYgKGt2bV93cml0ZV9ndWVzdChrdm0sIHJlc3BfZ3BhLCBzZXYtXHUwMDNlZ3Vlc3RfcmVzcF9idWYsIFBBR0VfU0laRSkpIHtcbitcdFx0c3ZtX3ZtZ2V4aXRfYmFkX2lucHV0KHN2bSwgR0hDQl9FUlJfSU5WQUxJRF9JTlBVVCk7XG4rXHRcdHJldHVybiAxO1xuK1x0fVxuIFxuIFx0LyogTm8gYWN0aW9uIGlzIHJlcXVlc3RlZCAqZnJvbSBLVk0qIGlmIHRoZXJlIHdhcyBhIGZpcm13YXJlIGVycm9yLiAqL1xuIFx0c3ZtX3ZtZ2V4aXRfbm9fYWN0aW9uKHN2bSwgU05QX0dVRVNUX0VSUigwLCBmd19lcnIpKTtcbkBAIC00Mjk2LDcgKzQzMDAsNyBAQCBzdGF0aWMgaW50IHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgZ3BhX3QgcmVxX2dwYSwgZ3BhX3QgclxuIFxuIFx0aWYgKGt2bV9yZWFkX2d1ZXN0KGt2bSwgcmVxX2dwYSArIG9mZnNldG9mKHN0cnVjdCBzbnBfZ3Vlc3RfbXNnX2hkciwgbXNnX3R5cGUpLFxuIFx0XHRcdCAgIFx1MDAyNm1zZ190eXBlLCAxKSlcbi1cdFx0cmV0dXJuIC1FSU87XG4rXHRcdGdvdG8gcmVxdWVzdF9pbnZhbGlkO1xuIFxuIFx0LypcbiBcdCAqIEFzIHBlciBHSENCIHNwZWMsIHJlcXVlc3RzIG9mIHR5cGUgTVNHX1JFUE9SVF9SRVEgYWxzbyBhbGxvdyBmb3JcbkBAIC00MzM2LDcgKzQzNDAsNyBAQCBzdGF0aWMgaW50IHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgZ3BhX3QgcmVxX2dwYSwgZ3BhX3QgclxuIFx0XHQgKiBjZXJ0aWZpY2F0ZSB0YWJsZSBpcyB0ZXJtaW5hdGVkIGJ5IDI0LWJ5dGVzIG9mIHplcm9lcy5cbiBcdFx0ICovXG4gXHRcdGlmIChkYXRhX25wYWdlcyBcdTAwMjZcdTAwMjYga3ZtX2NsZWFyX2d1ZXN0KGt2bSwgZGF0YV9ncGEsIDI0KSlcbi1cdFx0XHRyZXR1cm4gLUVJTztcbitcdFx0XHRnb3RvIHJlcXVlc3RfaW52YWxpZDtcbiBcdH1cbiBcbiBcdHJldHVybiBzbnBfaGFuZGxlX2d1ZXN0X3JlcShzdm0sIHJlcV9ncGEsIHJlc3BfZ3BhKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjE0OjIwLjExMTM5NDk0NFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDAzMjI3OTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUaGlzIEtWTS9TVk0gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgdGhlIHNwZWNpZmljIG1vZGlmaWNhdGlvbnMuIEl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIHRoZSBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AgZmlsZS4gVGhlIGNoYW5nZXMgYXJlIGZvY3VzZWQgb24gaG93IHRoZSBjb2RlIGhhbmRsZXMgZmFpbHVyZXMgd2l0aGluIHRoZSBgc25wX2hhbmRsZV9ndWVzdF9yZXFgIGFuZCBgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxYCBmdW5jdGlvbnMuXG5cblNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSB0aGVyZSdzIGJlZW4gYSBjaGFuZ2UgaW4gZXJyb3IgaGFuZGxpbmcgcmVsYXRlZCB0byBga3ZtX3JlYWRfZ3Vlc3RgIGFuZCBga3ZtX3dyaXRlX2d1ZXN0YCBjYWxscywgYW5kIGBrdm1fY2xlYXJfZ3Vlc3RgLiBQcmV2aW91c2x5LCBhIHN0cmFpZ2h0Zm9yd2FyZCBgLUVJT2AgZXJyb3Igd291bGQgYmUgcmV0dXJuZWQgdXBvbiBmYWlsdXJlLiBOb3csIGluIHRoZSBgc25wX2hhbmRsZV9ndWVzdF9yZXFgIGZ1bmN0aW9uLCBvbiBhIHJlYWQgb3Igd3JpdGUgZmFpbHVyZSwgdGhlIGNvZGUgbm93IGNhbGxzIGBzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX0lOUFVUKWAgYW5kIHJldHVybnMgYDFgLiBBbmQgaW4gdGhlIGBzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXFgIGZ1bmN0aW9uLCBmYWlsdXJlcyBvbiBib3RoIHJlYWQgYW5kIGNsZWFyIG9wZXJhdGlvbnMgbm93IHRyaWdnZXIgYSBqdW1wIHRvIGEgYHJlcXVlc3RfaW52YWxpZDpgIGxhYmVsLlxuXG5UaGUgcXVlc3Rpb24gbm93IGJlY29tZXM6IFdoYXQgZG9lcyBgcmVxdWVzdF9pbnZhbGlkOmAgZG8/IEFuZCwgbW9yZSBpbXBvcnRhbnRseSwgd2hhdCdzIHRoZSBmdW5jdGlvbiBgc3ZtX3ZtZ2V4aXRfYmFkX2lucHV0YCBhbGwgYWJvdXQ/IFdoYXQncyBnb2luZyBvbiB3aXRoIHRoYXQgYEdIQ0JfRVJSX0lOVkFMSURfSU5QVVRgIGVycm9yIGNvZGU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIEl0IGxvb2tzIGxpa2UgdGhpcyBjb2RlIGlzIG5vdyBpbnRlbmRlZCB0byB0cmlnZ2VyIGEgdm1nZXhpdCB3aGVuIHdlIHNlZSBiYWQgaW5wdXQuXG5cbkknbSBnb2luZyB0byBzdGFydCBieSBnb2luZyB0byBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AgYW5kIGRpZyBpbnRvIHRoZXNlIHR3byBhcmVhcyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZSBhbmQgc2VlIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlIGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzQwLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjI6MTQ6MjQuMTE0NjI1MjM5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0ODUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQyMjAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MjIwOlxcdFxcdHN0cnVjdCBzZXZfZGF0YV9zbnBfZ3Vlc3RfcmVxdWVzdCBkYXRhID0gezB9O1xcbjQyMjE6XFx0XFx0c3RydWN0IGt2bSAqa3ZtID0gc3ZtLVxcdTAwM2V2Y3B1Lmt2bTtcXG40MjIyOlxcdFxcdHN0cnVjdCBrdm1fc2V2X2luZm8gKnNldiA9IHRvX2t2bV9zZXZfaW5mbyhrdm0pO1xcbjQyMjM6XFx0XFx0c2V2X3JldF9jb2RlIGZ3X2VyciA9IDA7XFxuNDIyNDpcXHRcXHRpbnQgcmV0O1xcbjQyMjU6XFx0XFxuNDIyNjpcXHRcXHRpZiAoIWlzX3Nldl9zbnBfZ3Vlc3QoXFx1MDAyNnN2bS1cXHUwMDNldmNwdSkpXFxuNDIyNzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40MjI4OlxcdFxcbjQyMjk6XFx0XFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZzZXYtXFx1MDAzZWd1ZXN0X3JlcV9tdXRleCk7XFxuNDIzMDpcXHRcXG40MjMxOlxcdFxcdGlmIChrdm1fcmVhZF9ndWVzdChrdm0sIHJlcV9ncGEsIHNldi1cXHUwMDNlZ3Vlc3RfcmVxX2J1ZiwgUEFHRV9TSVpFKSkge1xcbjQyMzI6XFx0XFx0XFx0c3ZtX3ZtZ2V4aXRfYmFkX2lucHV0KHN2bSwgR0hDQl9FUlJfSU5WQUxJRF9JTlBVVCk7XFxuNDIzMzpcXHRcXHRcXHRyZXR1cm4gMTtcXG40MjM0OlxcdFxcdH1cXG40MjM1OlxcdFxcbjQyMzY6XFx0XFx0ZGF0YS5nY3R4X3BhZGRyID0gX19wc3BfcGEoc2V2LVxcdTAwM2VzbnBfY29udGV4dCk7XFxuNDIzNzpcXHRcXHRkYXRhLnJlcV9wYWRkciA9IF9fcHNwX3BhKHNldi1cXHUwMDNlZ3Vlc3RfcmVxX2J1Zik7XFxuNDIzODpcXHRcXHRkYXRhLnJlc19wYWRkciA9IF9fcHNwX3BhKHNldi1cXHUwMDNlZ3Vlc3RfcmVzcF9idWYpO1xcbjQyMzk6XFx0XFxuNDI0MDpcXHRcXHQvKlxcbjQyNDE6XFx0XFx0ICogRmlybXdhcmUgZmFpbHVyZXMgYXJlIHByb3BhZ2F0ZWQgb24gdG8gZ3Vlc3QsIGJ1dCBhbnkgb3RoZXIgZmFpbHVyZVxcbjQyNDI6XFx0XFx0ICogY29uZGl0aW9uIGFsb25nIHRoZSB3YXkgc2hvdWxkIGJlIHJlcG9ydGVkIHRvIHVzZXJzcGFjZS4gRS5nLiBpZlxcbjQyNDM6XFx0XFx0ICogdGhlIFBTUCBpcyBkZWFkIGFuZCBjb21tYW5kcyBhcmUgdGltaW5nIG91dC5cXG40MjQ0OlxcdFxcdCAqL1xcbjQyNDU6XFx0XFx0cmV0ID0gc2V2X2lzc3VlX2NtZChrdm0sIFNFVl9DTURfU05QX0dVRVNUX1JFUVVFU1QsIFxcdTAwMjZkYXRhLCBcXHUwMDI2ZndfZXJyKTtcXG40MjQ2OlxcdFxcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgIWZ3X2VycilcXG40MjQ3OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuNDI0ODpcXHRcXG40MjQ5OlxcdFxcdGlmIChrdm1fd3JpdGVfZ3Vlc3Qoa3ZtLCByZXNwX2dwYSwgc2V2LVxcdTAwM2VndWVzdF9yZXNwX2J1ZiwgUEFHRV9TSVpFKSkge1xcbjQyNTA6XFx0XFx0XFx0c3ZtX3ZtZ2V4aXRfYmFkX2lucHV0KHN2bSwgR0hDQl9FUlJfSU5WQUxJRF9JTlBVVCk7XFxuNDI1MTpcXHRcXHRcXHRyZXR1cm4gMTtcXG40MjUyOlxcdFxcdH1cXG40MjUzOlxcdFxcbjQyNTQ6XFx0XFx0LyogTm8gYWN0aW9uIGlzIHJlcXVlc3RlZCAqZnJvbSBLVk0qIGlmIHRoZXJlIHdhcyBhIGZpcm13YXJlIGVycm9yLiAqL1xcbjQyNTU6XFx0XFx0c3ZtX3ZtZ2V4aXRfbm9fYWN0aW9uKHN2bSwgU05QX0dVRVNUX0VSUigwLCBmd19lcnIpKTtcXG40MjU2OlxcdFxcbjQyNTc6XFx0XFx0LyogcmVzdW1lIGd1ZXN0ICovXFxuNDI1ODpcXHRcXHRyZXR1cm4gMTtcXG40MjU5OlxcdH1cXG40MjYwOlxcdFxcbjQyNjE6XFx0c3RhdGljIGludCBzbnBfcmVxX2NlcnRzX2VycihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdTMyIHZtbV9lcnJvcilcXG40MjYyOlxcdHtcXG40MjYzOlxcdFxcdGdoY2Jfc2V0X3N3X2V4aXRfaW5mb18yKHN2bS1cXHUwMDNlc2V2X2VzLmdoY2IsIFNOUF9HVUVTVF9FUlIodm1tX2Vycm9yLCAwKSk7XFxuNDI2NDpcXHRcXG40MjY1OlxcdFxcdHJldHVybiAxOyAvKiByZXN1bWUgZ3Vlc3QgKi9cXG40MjY2OlxcdH1cXG40MjY3OlxcdFxcbjQyNjg6XFx0c3RhdGljIGludCBzbnBfY29tcGxldGVfcmVxX2NlcnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG40MjY5OlxcdHtcXG40MjcwOlxcdFxcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xcbjQyNzE6XFx0XFx0c3RydWN0IHZtY2JfY29udHJvbF9hcmVhICpjb250cm9sID0gXFx1MDAyNnN2bS1cXHUwMDNldm1jYi1cXHUwMDNlY29udHJvbDtcXG40MjcyOlxcdFxcbjQyNzM6XFx0XFx0c3dpdGNoIChSRUFEX09OQ0UodmNwdS1cXHUwMDNlcnVuLVxcdTAwM2VzbnBfcmVxX2NlcnRzLnJldCkpIHtcXG40Mjc0OlxcdFxcdGNhc2UgMDpcXG40Mjc1OlxcdFxcdFxcdHJldHVybiBzbnBfaGFuZGxlX2d1ZXN0X3JlcShzdm0sIGNvbnRyb2wtXFx1MDAzZWV4aXRfaW5mb18xLFxcbjQyNzY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGNvbnRyb2wtXFx1MDAzZWV4aXRfaW5mb18yKTtcXG40Mjc3OlxcdFxcdGNhc2UgRU5PU1BDOlxcbjQyNzg6XFx0XFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5yZWdzW1ZDUFVfUkVHU19SQlhdID0gdmNwdS1cXHUwMDNlcnVuLVxcdTAwM2VzbnBfcmVxX2NlcnRzLm5wYWdlcztcXG40Mjc5OlxcdFxcdFxcdHJldHVybiBzbnBfcmVxX2NlcnRzX2Vycihzdm0sIFNOUF9HVUVTVF9WTU1fRVJSX0lOVkFMSURfTEVOKTtcXG40MjgwOlxcdFxcdGNhc2UgRUFHQUlOOlxcbjQyODE6XFx0XFx0XFx0cmV0dXJuIHNucF9yZXFfY2VydHNfZXJyKHN2bSwgU05QX0dVRVNUX1ZNTV9FUlJfQlVTWSk7XFxuNDI4MjpcXHRcXHRjYXNlIEVJTzpcXG40MjgzOlxcdFxcdFxcdHJldHVybiBzbnBfcmVxX2NlcnRzX2Vycihzdm0sIFNOUF9HVUVTVF9WTU1fRVJSX0dFTkVSSUMpO1xcbjQyODQ6XFx0XFx0ZGVmYXVsdDpcXG40Mjg1OlxcdFxcdFxcdGJyZWFrO1xcbjQyODY6XFx0XFx0fVxcbjQyODc6XFx0XFxuNDI4ODpcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40Mjg5OlxcdH1cXG40MjkwOlxcdFxcbjQyOTE6XFx0c3RhdGljIGludCBzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXEoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGdwYV90IHJlcV9ncGEsIGdwYV90IHJlc3BfZ3BhKVxcbjQyOTI6XFx0e1xcbjQyOTM6XFx0XFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gXFx1MDAyNnN2bS1cXHUwMDNldmNwdTtcXG40Mjk0OlxcdFxcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXFx1MDAzZWt2bTtcXG40Mjk1OlxcdFxcbjQyOTY6XFx0XFx0dTggbXNnX3R5cGU7XFxuNDI5NzpcXHRcXG40Mjk4OlxcdFxcdGlmICghaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSlcXG40Mjk5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjQzMDA6XFx0XFxuNDMwMTpcXHRcXHRpZiAoa3ZtX3JlYWRfZ3Vlc3Qoa3ZtLCByZXFfZ3BhICsgb2Zmc2V0b2Yoc3RydWN0IHNucF9ndWVzdF9tc2dfaGRyLCBtc2dfdHlwZSksXFxuNDMwMjpcXHRcXHRcXHRcXHQgICBcXHUwMDI2bXNnX3R5cGUsIDEpKVxcbjQzMDM6XFx0XFx0XFx0Z290byByZXF1ZXN0X2ludmFsaWQ7XFxuNDMwNDpcXHRcXG40MzA1OlxcdFxcdC8qXFxuNDMwNjpcXHRcXHQgKiBBcyBwZXIgR0hDQiBzcGVjLCByZXF1ZXN0cyBvZiB0eXBlIE1TR19SRVBPUlRfUkVRIGFsc28gYWxsb3cgZm9yXFxuNDMwNzpcXHRcXHQgKiBhZGRpdGlvbmFsIGNlcnRpZmljYXRlIGRhdGEgdG8gYmUgcHJvdmlkZWQgYWxvbmdzaWRlIHRoZSBhdHRlc3RhdGlvblxcbjQzMDg6XFx0XFx0ICogcmVwb3J0IHZpYSB0aGUgZ3Vlc3QtcHJvdmlkZWQgZGF0YSBwYWdlcyBpbmRpY2F0ZWQgYnkgUkFYL1JCWC4gSWZcXG40MzA5OlxcdFxcdCAqIHVzZXJzcGFjZSBlbmFibGVzIEtWTV9FWElUX1NOUF9SRVFfQ0VSVFMsIHRoZW4gZXhpdCB0byB1c2Vyc3BhY2VcXG40MzEwOlxcdFxcdCAqIHRvIGdpdmUgdXNlcnNwYWNlIGFuIG9wcG9ydHVuaXR5IHRvIHByb3ZpZGUgdGhlIGNlcnRpZmljYXRlIGRhdGFcXG40MzExOlxcdFxcdCAqIGJlZm9yZSBpc3N1aW5nL2NvbXBsZXRpbmcgdGhlIGF0dGVzdGF0aW9uIHJlcXVlc3QuIE90aGVyd2lzZSwgcmV0dXJuXFxuNDMxMjpcXHRcXHQgKiBhbiBlbXB0eSBjZXJ0aWZpY2F0ZSB0YWJsZSBpbiB0aGUgZ3Vlc3QtcHJvdmlkZWQgZGF0YSBwYWdlcyBhbmRcXG40MzEzOlxcdFxcdCAqIGhhbmRsZSB0aGUgYXR0ZXN0YXRpb24gcmVxdWVzdCBpbW1lZGlhdGVseS5cXG40MzE0OlxcdFxcdCAqL1xcbjQzMTU6XFx0XFx0aWYgKG1zZ190eXBlID09IFNOUF9NU0dfUkVQT1JUX1JFUSkge1xcbjQzMTY6XFx0XFx0XFx0c3RydWN0IGt2bV9zZXZfaW5mbyAqc2V2ID0gXFx1MDAyNnRvX2t2bV9zdm0oa3ZtKS1cXHUwMDNlc2V2X2luZm87XFxuNDMxNzpcXHRcXHRcXHR1NjQgZGF0YV9ucGFnZXM7XFxuNDMxODpcXHRcXHRcXHRncGFfdCBkYXRhX2dwYTtcXG40MzE5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjoxNDoyNC4xMTUyOTYwMDlaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTU3OTQ3NTg1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcWAqKlxuXG5Pa2F5LCBsZXQncyBkaWcgaW50byB0aGlzIGBzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXFgIGZ1bmN0aW9uLiBJJ20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gd2hlcmUgaXQgaGFuZGxlcyByZXF1ZXN0IHZhbGlkaXR5LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGlkZW50aWZpZXMgYW5kIHJlYWN0cyB0byBhbiBpbnZhbGlkIHJlcXVlc3QuIE15IGZvY3VzIHdpbGwgYmUgb24gdGhlIHBhcnQgbGFiZWxlZCBhcyBgcmVxdWVzdF9pbnZhbGlkOmAuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBicmFuY2hpbmcgbG9naWMgdGhhdCBsZWFkcyB0byB0aGF0IHBvaW50IGFuZCwgY3J1Y2lhbGx5LCB3aGF0IGFjdGlvbnMgYXJlIHRha2VuIHdoZW4gYSByZXF1ZXN0IGlzIGRldGVybWluZWQgdG8gYmUgaW52YWxpZC4gSXQncyBwcm9iYWJseSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbiBvZiB0aGUgc2VjdXJpdHkgYm91bmRhcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyNTUsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjE0OjI1LjY5NDc3NDQyNVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODU3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MzIwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MzIwOlxcdFxcdFxcdGlmICgha3ZtX2doY2JfcmF4X2lzX3ZhbGlkKHN2bSkgfHwgIWt2bV9naGNiX3JieF9pc192YWxpZChzdm0pKVxcbjQzMjE6XFx0XFx0XFx0XFx0Z290byByZXF1ZXN0X2ludmFsaWQ7XFxuNDMyMjpcXHRcXG40MzIzOlxcdFxcdFxcdGRhdGFfZ3BhID0gdmNwdS1cXHUwMDNlYXJjaC5yZWdzW1ZDUFVfUkVHU19SQVhdO1xcbjQzMjQ6XFx0XFx0XFx0ZGF0YV9ucGFnZXMgPSB2Y3B1LVxcdTAwM2VhcmNoLnJlZ3NbVkNQVV9SRUdTX1JCWF07XFxuNDMyNTpcXHRcXG40MzI2OlxcdFxcdFxcdGlmICghUEFHRV9BTElHTkVEKGRhdGFfZ3BhKSlcXG40MzI3OlxcdFxcdFxcdFxcdGdvdG8gcmVxdWVzdF9pbnZhbGlkO1xcbjQzMjg6XFx0XFxuNDMyOTpcXHRcXHRcXHRpZiAoc2V2LVxcdTAwM2VzbnBfY2VydHNfZW5hYmxlZCkge1xcbjQzMzA6XFx0XFx0XFx0XFx0dmNwdS1cXHUwMDNlcnVuLVxcdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX1NOUF9SRVFfQ0VSVFM7XFxuNDMzMTpcXHRcXHRcXHRcXHR2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZXNucF9yZXFfY2VydHMuZ3BhID0gZGF0YV9ncGE7XFxuNDMzMjpcXHRcXHRcXHRcXHR2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZXNucF9yZXFfY2VydHMubnBhZ2VzID0gZGF0YV9ucGFnZXM7XFxuNDMzMzpcXHRcXHRcXHRcXHR2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZXNucF9yZXFfY2VydHMucmV0ID0gMDtcXG40MzM0OlxcdFxcdFxcdFxcdHZjcHUtXFx1MDAzZWFyY2guY29tcGxldGVfdXNlcnNwYWNlX2lvID0gc25wX2NvbXBsZXRlX3JlcV9jZXJ0cztcXG40MzM1OlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjQzMzY6XFx0XFx0XFx0fVxcbjQzMzc6XFx0XFxuNDMzODpcXHRcXHRcXHQvKlxcbjQzMzk6XFx0XFx0XFx0ICogQXMgcGVyIEdIQ0Igc3BlYyAoc2VlIFxcXCJTTlAgRXh0ZW5kZWQgR3Vlc3QgUmVxdWVzdFxcXCIpLCB0aGVcXG40MzQwOlxcdFxcdFxcdCAqIGNlcnRpZmljYXRlIHRhYmxlIGlzIHRlcm1pbmF0ZWQgYnkgMjQtYnl0ZXMgb2YgemVyb2VzLlxcbjQzNDE6XFx0XFx0XFx0ICovXFxuNDM0MjpcXHRcXHRcXHRpZiAoZGF0YV9ucGFnZXMgXFx1MDAyNlxcdTAwMjYga3ZtX2NsZWFyX2d1ZXN0KGt2bSwgZGF0YV9ncGEsIDI0KSlcXG40MzQzOlxcdFxcdFxcdFxcdGdvdG8gcmVxdWVzdF9pbnZhbGlkO1xcbjQzNDQ6XFx0XFx0fVxcbjQzNDU6XFx0XFxuNDM0NjpcXHRcXHRyZXR1cm4gc25wX2hhbmRsZV9ndWVzdF9yZXEoc3ZtLCByZXFfZ3BhLCByZXNwX2dwYSk7XFxuNDM0NzpcXHRcXG40MzQ4OlxcdHJlcXVlc3RfaW52YWxpZDpcXG40MzQ5OlxcdFxcdHN2bV92bWdleGl0X2JhZF9pbnB1dChzdm0sIEdIQ0JfRVJSX0lOVkFMSURfSU5QVVQpO1xcbjQzNTA6XFx0XFx0cmV0dXJuIDE7IC8qIHJlc3VtZSBndWVzdCAqL1xcbjQzNTE6XFx0fVxcbjQzNTI6XFx0XFxuNDM1MzpcXHRzdGF0aWMgaW50IHNldl9oYW5kbGVfdm1nZXhpdF9tc3JfcHJvdG9jb2woc3RydWN0IHZjcHVfc3ZtICpzdm0pXFxuNDM1NDpcXHR7XFxuNDM1NTpcXHRcXHRzdHJ1Y3Qgdm1jYl9jb250cm9sX2FyZWEgKmNvbnRyb2wgPSBcXHUwMDI2c3ZtLVxcdTAwM2V2bWNiLVxcdTAwM2Vjb250cm9sO1xcbjQzNTY6XFx0XFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gXFx1MDAyNnN2bS1cXHUwMDNldmNwdTtcXG40MzU3OlxcdFxcdHN0cnVjdCBrdm1fc2V2X2luZm8gKnNldiA9IHRvX2t2bV9zZXZfaW5mbyh2Y3B1LVxcdTAwM2Vrdm0pO1xcbjQzNTg6XFx0XFx0dTY0IGdoY2JfaW5mbztcXG40MzU5OlxcdFxcdGludCByZXQgPSAxO1xcbjQzNjA6XFx0XFxuNDM2MTpcXHRcXHRnaGNiX2luZm8gPSBjb250cm9sLVxcdTAwM2VnaGNiX2dwYSBcXHUwMDI2IEdIQ0JfTVNSX0lORk9fTUFTSztcXG40MzYyOlxcdFxcbjQzNjM6XFx0XFx0dHJhY2Vfa3ZtX3ZtZ2V4aXRfbXNyX3Byb3RvY29sX2VudGVyKHN2bS1cXHUwMDNldmNwdS52Y3B1X2lkLFxcbjQzNjQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBjb250cm9sLVxcdTAwM2VnaGNiX2dwYSk7XFxuNDM2NTpcXHRcXG40MzY2OlxcdFxcdHN3aXRjaCAoZ2hjYl9pbmZvKSB7XFxuNDM2NzpcXHRcXHRjYXNlIEdIQ0JfTVNSX1NFVl9JTkZPX1JFUTpcXG40MzY4OlxcdFxcdFxcdHNldF9naGNiX21zcihzdm0sIEdIQ0JfTVNSX1NFVl9JTkZPKChfX3U2NClzZXYtXFx1MDAzZWdoY2JfdmVyc2lvbixcXG40MzY5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBHSENCX1ZFUlNJT05fTUlOLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjoxNDoyNS42OTQ5NjE4MDVaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDEzMzI4MDQwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgS1ZNIFNFVi1TTlAgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGhvdyBLVk0gaGFuZGxlcyBmYWlsdXJlcyByZWxhdGVkIHRvIGd1ZXN0IG1lbW9yeSBhY2Nlc3MsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIFNFVi1TTlAgKFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gLSBTZWN1cmUgTmVzdGVkIFBhZ2luZykgY29udGV4dC4gUHJldmlvdXNseSwgaWYgS1ZNIGVuY291bnRlcmVkIGEgcHJvYmxlbSByZWFkaW5nIGZyb20sIHdyaXRpbmcgdG8sIG9yIGNsZWFyaW5nIGd1ZXN0IG1lbW9yeSAodXNpbmcgZnVuY3Rpb25zIGxpa2UgYGt2bV9yZWFkX2d1ZXN0YCwgYGt2bV93cml0ZV9ndWVzdGAsIG9yIGBrdm1fY2xlYXJfZ3Vlc3RgKSwgaXQgd291bGQgc2ltcGx5IHJldHVybiBhIGdlbmVyaWMgYC1FSU9gIGVycm9yLiBUaGlzLCBpbiB0dXJuLCB0cmlnZ2VyZWQgYW4gYEtWTV9FWElUX0lOVEVSTkFMX0VSUk9SYCBvciBzaW1pbGFyIGV4aXQgcmVhc29uLCBwb3RlbnRpYWxseSByZXN1bHRpbmcgaW4gS1ZNIGV4aXRpbmcgdG8gdXNlcnNwYWNlIHdpdGggYSBnZW5lcmFsIGAtRUlPYCByZXR1cm4gZnJvbSBgS1ZNX1JVTmAuIENsZWFybHksIHRoaXMgd2Fzbid0IGlkZWFsIGZvciBTRVYtU05QIG9wZXJhdGlvbnMuXG5cblRoZSBjb3JlIG9mIHRoZSBwYXRjaCBzZWVtcyB0byBiZSBhbGlnbmluZyBLVk0ncyBiZWhhdmlvciB3aXRoIHRoZSBHSENCIChHdWVzdCBIeXBlcnZpc29yIENvbW11bmljYXRpb24gQmxvY2spIHNwZWNpZmljYXRpb24uIEluc3RlYWQgb2YgdHJlYXRpbmcgdGhlc2UgbWVtb3J5IGFjY2VzcyBmYWlsdXJlcyBhcyBmYXRhbCBlcnJvcnMsIHRoZSBjb3JyZWN0IG1ldGhvZCBzZWVtcyB0byBiZSB0byByZXBvcnQgdGhlIGVycm9yIHN0YXR1cy4gVGhpcyBpbnZvbHZlcyBzZXR0aW5nIGEgVk1HRVhJVCBlcnJvciBzdGF0dXMsIGBzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX0lOUFVUKWAsIHdoZW4gdGhlIGd1ZXN0IHByb3ZpZGVzIGluY29ycmVjdCBHUEEgKEd1ZXN0IFBoeXNpY2FsIEFkZHJlc3MpIG9yIGludmFsaWQgaW5wdXQuIFN1YnNlcXVlbnRseSwgYSByZXR1cm4gdmFsdWUgb2YgYDFgIGlzIHVzZWQsIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSBndWVzdCBleGVjdXRpb24gc2hvdWxkIHJlc3VtZSB3aXRoIHRoZSBlcnJvciBjb2RlIHByb3ZpZGVkIGluIHRoZSBHSENCIGV4aXQgaW5mb3JtYXRpb24uIEVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggZW5zdXJlcyB0aGF0IHRoZSBndWVzdCBoYW5kbGVzIHRoZSBlcnJvciwgcmF0aGVyIHRoYW4gS1ZNIHRlcm1pbmF0aW5nIHRoZSBWQ1BVIHJ1biBhbmQgcmFpc2luZyBhbiBleGNlcHRpb24gdG8gdXNlcnNwYWNlLlxuXG5Ob3csIGxldCdzIHNoaWZ0IGdlYXJzIGFuZCBsb29rIGZvciBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgY29uY2VybnMuIE15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUgd2lsbCBsZWFkIG1lIHRvIGV4YW1pbmluZyB0aGUgYHN2bV92bWdleGl0X2JhZF9pbnB1dGAgZnVuY3Rpb24sIGxvb2tpbmcgZm9yIGFueSBwb3NzaWJsZSB2dWxuZXJhYmlsaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzNzgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjoxNDoyOS44MjgyNDQ3OTlaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NjU2MTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN2bV92bWdleGl0X2JhZF9pbnB1dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTM2MjQ9c3RhdGljIGludCBzZXR1cF92bWdleGl0X3NjcmF0Y2goc3RydWN0IHZjcHVfc3ZtICpzdm0sIGJvb2wgc3luYywgdTY0IG1pbl9sZW4pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTM3MTMtZV9zY3JhdGNoOlxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzcxNDpcXHRzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX1NDUkFUQ0hfQVJFQSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zNzE1LVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00MjE4PXN0YXRpYyBpbnQgc25wX2hhbmRsZV9ndWVzdF9yZXEoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGdwYV90IHJlcV9ncGEsIGdwYV90IHJlc3BfZ3BhKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00MjMxLVxcdGlmIChrdm1fcmVhZF9ndWVzdChrdm0sIHJlcV9ncGEsIHNldi1cXHUwMDNlZ3Vlc3RfcmVxX2J1ZiwgUEFHRV9TSVpFKSkge1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDIzMjpcXHRcXHRzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX0lOUFVUKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQyMzMtXFx0XFx0cmV0dXJuIDE7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQyNDktXFx0aWYgKGt2bV93cml0ZV9ndWVzdChrdm0sIHJlc3BfZ3BhLCBzZXYtXFx1MDAzZWd1ZXN0X3Jlc3BfYnVmLCBQQUdFX1NJWkUpKSB7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0MjUwOlxcdFxcdHN2bV92bWdleGl0X2JhZF9pbnB1dChzdm0sIEdIQ0JfRVJSX0lOVkFMSURfSU5QVVQpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDI1MS1cXHRcXHRyZXR1cm4gMTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDI5MT1zdGF0aWMgaW50IHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgZ3BhX3QgcmVxX2dwYSwgZ3BhX3QgcmVzcF9ncGEpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQzNDgtcmVxdWVzdF9pbnZhbGlkOlxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDM0OTpcXHRzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX0lOUFVUKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQzNTAtXFx0cmV0dXJuIDE7IC8qIHJlc3VtZSBndWVzdCAqL1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00NTEwPWludCBzZXZfaGFuZGxlX3ZtZ2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NTQ3LVxcdFxcdFxcdCAgICBjb250cm9sLVxcdTAwM2VnaGNiX2dwYSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0NTQ4OlxcdFxcdHN2bV92bWdleGl0X2JhZF9pbnB1dChzdm0sIEdIQ0JfRVJSX05PVF9SRUdJU1RFUkVEKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ1NDktXFx0XFx0cmV0dXJuIDE7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ1NTUtXFx0XFx0XFx0ICAgIHN2bS1cXHUwMDNlc2V2X2VzLmdoY2ItXFx1MDAzZWdoY2JfdXNhZ2UpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDU1NjpcXHRcXHRzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX1VTQUdFKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ1NTctXFx0XFx0cmV0dXJuIDE7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ1NjItXFx0XFx0XFx0ICAgIGNvbnRyb2wtXFx1MDAzZWV4aXRfY29kZSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0NTYzOlxcdFxcdHN2bV92bWdleGl0X2JhZF9pbnB1dChzdm0sIEdIQ0JfRVJSX0lOVkFMSURfRVZFTlQpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDU2NC1cXHRcXHRyZXR1cm4gMTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDU3NC1cXHRcXHRkdW1wX2doY2Ioc3ZtKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ1NzU6XFx0XFx0c3ZtX3ZtZ2V4aXRfYmFkX2lucHV0KHN2bSwgR0hDQl9FUlJfTUlTU0lOR19JTlBVVCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NTc2LVxcdFxcdHJldHVybiAxO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NjA5LVxcdFxcdGlmICh0b19rdm1fc2V2X2luZm8odmNwdS1cXHUwMDNla3ZtKS1cXHUwMDNlZ2hjYl92ZXJzaW9uIFxcdTAwM2U9IDIgXFx1MDAyNlxcdTAwMjYgbGVuIFxcdTAwM2UgOCkge1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDYxMDpcXHRcXHRcXHRzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX0lOUFVUKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ2MTEtXFx0XFx0XFx0cmV0dXJuIDE7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ2NDMtXFx0XFx0XFx0ICAgICAgIGNvbnRyb2wtXFx1MDAzZWV4aXRfaW5mb18xKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ2NDQ6XFx0XFx0XFx0c3ZtX3ZtZ2V4aXRfYmFkX2lucHV0KHN2bSwgR0hDQl9FUlJfSU5WQUxJRF9JTlBVVCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NjQ1LVxcdFxcdH1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDY2OS1cXHRcXHRpZiAoc2V2X3NucF9hcF9jcmVhdGlvbihzdm0pKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDY3MDpcXHRcXHRcXHRzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX0lOUFVUKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ2NzEtXFx0XFx0cmV0dXJuIDE7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ2NzYtXFx0XFx0ICAgIGNvbnRyb2wtXFx1MDAzZWV4aXRfaW5mb18xID09IGNvbnRyb2wtXFx1MDAzZWV4aXRfaW5mb18yKSB7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0Njc3OlxcdFxcdFxcdHN2bV92bWdleGl0X2JhZF9pbnB1dChzdm0sIEdIQ0JfRVJSX0lOVkFMSURfSU5QVVQpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDY3OC1cXHRcXHRcXHRyZXR1cm4gMTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDY5OC1cXHRcXHRcXHQgICAgY29udHJvbC1cXHUwMDNlZXhpdF9jb2RlKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ2OTk6XFx0XFx0c3ZtX3ZtZ2V4aXRfYmFkX2lucHV0KHN2bSwgR0hDQl9FUlJfSU5WQUxJRF9FVkVOVCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NzAwLVxcdFxcdHJldHVybiAxO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD03MTE9c3RhdGljIGlubGluZSB2b2lkIHN2bV92bWdleGl0X2luamVjdF9leGNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0sIHU4IHZlY3RvcilcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNzE3LVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6NzE4OnN0YXRpYyBpbmxpbmUgdm9pZCBzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3RydWN0IHZjcHVfc3ZtICpzdm0sIHU2NCBzdWJlcnJvcilcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTcxOS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjE0OjI5Ljg3NDkwNDkyMloiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjczOTMyMzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIGEgU3VzcGVjdGVkIFNWTSBWTUVYSVQgSXNzdWUqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBvdGVudGlhbCBwcm9ibGVtIG9uIG15IHJhZGFyLCBsaWtlbHkgcmVsYXRlZCB0byB0aGUgU2VjdXJlIFZpcnR1YWwgTWFjaGluZSAoU1ZNKSBvbiB4ODYsIHByb2JhYmx5IGFuIGlzc3VlIHdpdGggYSBiYWQgaW5wdXQgdHJpZ2dlcmluZyBhIGB2bWV4aXRgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBkZWZpbml0aW9uIGFuZCBwb3RlbnRpYWwgY2F1c2VzIG9mIHRoaXMgc3BlY2lmaWMgc2l0dWF0aW9uOiBgc3ZtX3ZtZ2V4aXRfYmFkX2lucHV0YC4gVGhlIGJlc3QgcGxhY2UgdG8gZmluZCB0aGUgYXV0aG9yaXRhdGl2ZSBkZWZpbml0aW9uIGZvciB0aGlzIGNvbmRpdGlvbiB3aWxsIGJlIHdpdGhpbiB0aGUgS1ZNIChLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lKSBzb3VyY2VzLCBzcGVjaWZpY2FsbHkgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyB4ODYgY29kZSBhbmQgcmVsYXRlZCBoZWFkZXIgZmlsZXMuIFRoZSBoZWFkZXIgZmlsZSBgYXJjaC94ODYva3ZtL3N2bS9zdm0uaGAgaXMgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIFRoYXQgZmlsZSB3aWxsIGNvbnRhaW4gdGhlIGVudW1lcmF0ZWQgZGVmaW5pdGlvbiBvZiB0aGUgcGFydGljdWxhciBWTUVYSVQgY29kZSB0aGF0IGludGVyZXN0cyBtZS4gTGV0J3Mgc2VlIGlmIHRoaXMgZGVmaW5pdGlvbiBwcm92aWRlcyBjbHVlcyBhYm91dCB0aGUgbmF0dXJlIG9mIHRoZSBiYWQgaW5wdXQsIHJlbGV2YW50IHJlZ2lzdGVycywgb3IgYW55IG90aGVyIGltcG9ydGFudCBjb250ZXh0LiBGcm9tIHRoZXJlLCBJIGNhbiBzdGFydCB0byBmb3JtdWxhdGUgYSBoeXBvdGhlc2lzIGFib3V0IHdoYXQgY29uZGl0aW9ucyBtaWdodCB0cmlnZ2VyIHRoaXMgc3BlY2lmaWMgVk1FWElUIGFuZCwgaG9wZWZ1bGx5LCBsZWFkIHRvIGEgZml4IG9yIGF0IGxlYXN0IGEgd29ya2Fyb3VuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg2NywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjE0OjMyLjE0ODg0MDQzNVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcxNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDcxNTpcXHRcXHRzdm1fdm1nZXhpdF9zZXRfcmV0dXJuX2NvZGUoc3ZtLCBHSENCX0hWX1JFU1BfSVNTVUVfRVhDRVBUSU9OLCBkYXRhKTtcXG4gNzE2OlxcdH1cXG4gNzE3OlxcdFxcbiA3MTg6XFx0c3RhdGljIGlubGluZSB2b2lkIHN2bV92bWdleGl0X2JhZF9pbnB1dChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdTY0IHN1YmVycm9yKVxcbiA3MTk6XFx0e1xcbiA3MjA6XFx0XFx0c3ZtX3ZtZ2V4aXRfc2V0X3JldHVybl9jb2RlKHN2bSwgR0hDQl9IVl9SRVNQX01BTEZPUk1FRF9JTlBVVCwgc3ViZXJyb3IpO1xcbiA3MjE6XFx0fVxcbiA3MjI6XFx0XFxuIDcyMzpcXHRzdGF0aWMgaW5saW5lIHZvaWQgc3ZtX3ZtZ2V4aXRfc3VjY2VzcyhzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdTY0IGRhdGEpXFxuIDcyNDpcXHR7XFxuIDcyNTpcXHRcXHRzdm1fdm1nZXhpdF9zZXRfcmV0dXJuX2NvZGUoc3ZtLCBHSENCX0hWX1JFU1BfTk9fQUNUSU9OLCBkYXRhKTtcXG4gNzI2OlxcdH1cXG4gNzI3OlxcdFxcbiA3Mjg6XFx0c3RhdGljIGlubGluZSB2b2lkIHN2bV92bWdleGl0X25vX2FjdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdTY0IGRhdGEpXFxuIDcyOTpcXHR7XFxuIDczMDpcXHRcXHRzdm1fdm1nZXhpdF9zZXRfcmV0dXJuX2NvZGUoc3ZtLCBHSENCX0hWX1JFU1BfTk9fQUNUSU9OLCBkYXRhKTtcXG4gNzMxOlxcdH1cXG4gNzMyOlxcdFxcbiA3MzM6XFx0LypcXG4gNzM0OlxcdCAqIFRoZSBNU1JQTSBpcyA4S2lCIGluIHNpemUsIGRpdmlkZWQgaW50byBmb3VyIDJLaUIgcmFuZ2VzICh0aGUgZm91cnRoIHJhbmdlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjE0OjMyLjE0ODkyNzk5NVoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODIxNjY4MDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHN1bW1hcml6aW5nIHRoZSBcInRob3VnaHRzXCIgcmVsYXRlZCB0byBgc3ZtX3ZtZ2V4aXRfc2V0X3JldHVybl9jb2RlYCwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZTpcblxuKipNeSBQZXJzcGVjdGl2ZSBvbiBgc3ZtX3ZtZ2V4aXRfc2V0X3JldHVybl9jb2RlYCoqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYHN2bV92bWdleGl0X3NldF9yZXR1cm5fY29kZWAuIEltbWVkaWF0ZWx5LCBteSBtaW5kIGp1bXBzIHRvIHRoZSBjb3JlIG9mIHRoaXM6IHdlJ3JlIGRlYWxpbmcgd2l0aCBhbiBTVk0gKFNlY3VyZSBWaXJ0dWFsIE1hY2hpbmUpIGFuZCwgbW9yZSBzcGVjaWZpY2FsbHksIGEgVk0tZXhpdC4gVGhlIGtleSBoZXJlIGlzICpzZXR0aW5nKiBhIHJldHVybiBjb2RlLiBUaGlzIHN1Z2dlc3RzIHdlIGFyZSBpbiB0aGUgcHJpdmlsZWdlZCBtb2RlIG9mIHRoZSBob3N0IE9TIGFuZCBtYW5pcHVsYXRpbmcgdGhlIGV4aXQgcHJvY2VzcyBhZnRlciBhIHRyYXAuXG5cbkZpcnN0LCBJIG5lZWQgdG8gY29uc2lkZXIgKndoeSogd2UncmUgc2V0dGluZyBhIHJldHVybiBjb2RlLiBJcyB0aGlzIHJlbGF0ZWQgdG8gYW4gZXhjZXB0aW9uPyBBIGd1ZXN0IGluc3RydWN0aW9uPyBBIHNlY3VyaXR5IGV2ZW50PyAgVGhlIHJlYXNvbiBpcyBmdW5kYW1lbnRhbCB0byB0aGUgY29udGV4dC4gQSBwcm9wZXJseSBjb2RlZCBzeXN0ZW0gc2hvdWxkIGF2b2lkIHRoZSByZXR1cm4gb2YgZ2VuZXJpYyBlcnJvcnMuXG5cblRoaW5raW5nIGFib3V0IHRoZSBjb2RlIGl0c2VsZiwgSSdtIGltYWdpbmluZyBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIFZNLWV4aXQgaGFuZGxlci4gSSdtIHZpc3VhbGl6aW5nIHRoZSBwb3RlbnRpYWwgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkOiB0aGUgVk1DUyAoVmlydHVhbCBNYWNoaW5lIENvbnRyb2wgU3RydWN0dXJlKSwgdGhlIGV4aXQgaW5mb3JtYXRpb24gYXJlYSwgdGhlIEdQUnMgKEdlbmVyYWwgUHVycG9zZSBSZWdpc3RlcnMpLCBhbmQgdGhlIG92ZXJhbGwgc3RhdGUgb2YgdGhlIHZpcnR1YWwgbWFjaGluZS4gIEknbSB0cnlpbmcgdG8gbWVudGFsbHkgdHJhY2UgdGhlIGV4ZWN1dGlvbiBmbG93LiBXaGVyZSBpbiB0aGUgcHJvY2VzcyBkb2VzIHRoaXMgY29kZSByZXNpZGU/IERvZXMgaXQgaGFwcGVuIGJlZm9yZSBvciBhZnRlciB0aGUgaGFuZGxpbmcgb2YgdGhlIFZNIGluc3RydWN0aW9uP1xuXG5UaGUgXCJzZXR0aW5nXCIgcGFydCBpcyB3aGF0IGludHJpZ3VlcyBtZS4gV2hhdCByYW5nZSBvZiByZXR1cm4gY29kZXMgYXJlIHdlIHRhbGtpbmcgYWJvdXQ/IEFyZSB3ZSBkZWFsaW5nIHdpdGggZXJyb3IgY29kZXMgZGVmaW5lZCBieSBBTUQsIGEgY3VzdG9tIHNldCwgb3IgcG9zc2libHkgYSBtYXBwaW5nIHRvIGEgc3BlY2lmaWMgT1MncyBlcnJvciBjb2Rlcz8gSWYgd2UncmUgc2V0dGluZyBhIGN1c3RvbSB2YWx1ZSwgSSBpbW1lZGlhdGVseSB3YW50IHRvIGludmVzdGlnYXRlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGlzIGN1c3RvbSBjYWxsLiBXZSBuZWVkIHRvIGJlIGNyeXN0YWwgY2xlYXIgYWJvdXQgdGhlIG1lYW5pbmcgb2YgdGhlc2UgY29kZXMgdG8gZW5zdXJlIHByb3BlciBlcnJvciBoYW5kbGluZyBvbiB0aGUgZ3Vlc3Qgc2lkZS4gV2UncmUgdGFsa2luZyBhYm91dCBsb3ctbGV2ZWwgVk0gYmVoYXZpb3JzLlxuXG5BbHNvLCBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIHBvdGVudGlhbCBwaXRmYWxsczogd2hhdCBoYXBwZW5zIGlmIHRoZSByZXR1cm4gY29kZSBpc24ndCBwcm9wZXJseSBoYW5kbGVkIGJ5IHRoZSBndWVzdD8gRG9lcyB0aGlzIGxlYWQgdG8gYSBjcmFzaD8gRG9lcyBpdCBleHBvc2UgYW55IHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcz8gUHJvcGVyIHRlc3RpbmcgaXMgb2J2aW91c2x5IGNyaXRpY2FsIGhlcmUsIGVzcGVjaWFsbHkgaW4gYSBzZWN1cml0eSBjb250ZXh0LlxuXG5GaW5hbGx5LCBJJ20gY29uc2lkZXJpbmcgdGhlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gVGhpcyBpcyBsaWtlbHkgYSB2ZXJ5IGZyZXF1ZW50bHktY2FsbGVkIGZ1bmN0aW9uLiAgSWYgdGhlcmUgYXJlIG9wdGltaXphdGlvbnMgdGhhdCBjYW4gYmUgZG9uZSB0byB0aGlzIGZ1bmN0aW9uLCB0aGV5IHNob3VsZCBiZSBpbnZlc3RpZ2F0ZWQgZWFybHkgb24uIENvdWxkIHdlIGNhY2hlIGluZm9ybWF0aW9uLCBzdHJlYW1saW5lIGRhdGEgc3RydWN0dXJlIGFjY2Vzcywgb3IgdXNlIG1vcmUgZWZmaWNpZW50IGVycm9yIGhhbmRsaW5nIHRlY2huaXF1ZXM/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1NTYsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjE0OjM1Ljk3MDU5ODM2OVoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ2MDEwMzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3ZtX3ZtZ2V4aXRfc2V0X3JldHVybl9jb2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9zdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9Njk0PXN0YXRpYyBpbmxpbmUgYm9vbCBpc192bm1pX2VuYWJsZWQoc3RydWN0IHZjcHVfc3ZtICpzdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTcwMy1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjcwNDpzdGF0aWMgaW5saW5lIHZvaWQgc3ZtX3ZtZ2V4aXRfc2V0X3JldHVybl9jb2RlKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLFxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNzA1LVxcdFxcdFxcdFxcdFxcdFxcdHU2NCByZXNwb25zZSwgdTY0IGRhdGEpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTcxMT1zdGF0aWMgaW5saW5lIHZvaWQgc3ZtX3ZtZ2V4aXRfaW5qZWN0X2V4Y2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdTggdmVjdG9yKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC03MTQtXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo3MTU6XFx0c3ZtX3ZtZ2V4aXRfc2V0X3JldHVybl9jb2RlKHN2bSwgR0hDQl9IVl9SRVNQX0lTU1VFX0VYQ0VQVElPTiwgZGF0YSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC03MTYtfVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD03MTg9c3RhdGljIGlubGluZSB2b2lkIHN2bV92bWdleGl0X2JhZF9pbnB1dChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdTY0IHN1YmVycm9yKVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNzE5LXtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjcyMDpcXHRzdm1fdm1nZXhpdF9zZXRfcmV0dXJuX2NvZGUoc3ZtLCBHSENCX0hWX1JFU1BfTUFMRk9STUVEX0lOUFVULCBzdWJlcnJvcik7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC03MjEtfVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD03MjM9c3RhdGljIGlubGluZSB2b2lkIHN2bV92bWdleGl0X3N1Y2Nlc3Moc3RydWN0IHZjcHVfc3ZtICpzdm0sIHU2NCBkYXRhKVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNzI0LXtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjcyNTpcXHRzdm1fdm1nZXhpdF9zZXRfcmV0dXJuX2NvZGUoc3ZtLCBHSENCX0hWX1JFU1BfTk9fQUNUSU9OLCBkYXRhKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTcyNi19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTcyOD1zdGF0aWMgaW5saW5lIHZvaWQgc3ZtX3ZtZ2V4aXRfbm9fYWN0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCB1NjQgZGF0YSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTcyOS17XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo3MzA6XFx0c3ZtX3ZtZ2V4aXRfc2V0X3JldHVybl9jb2RlKHN2bSwgR0hDQl9IVl9SRVNQX05PX0FDVElPTiwgZGF0YSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC03MzEtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjoxNDozNi4wMTUyMDQyNzJaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM4NjQ1NjI5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzLCBnZWFyZWQgdG93YXJkcyBhbiBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gYHN2bS5oYCAtIExpbmVzIDcwMC03MTAqKlxuXG5Pa2F5LCB0aW1lIHRvIHplcm8gaW4gb24gYSBzcGVjaWZpYyBzZWN0aW9uLiBMZXQncyBwdWxsIHVwIHRoZSBgc3ZtLmhgIGhlYWRlciBmaWxlIGFuZCBoZWFkIGRpcmVjdGx5IHRvIGxpbmVzIDcwMCB0aHJvdWdoIDcxMC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFyb3VuZCB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uIG9yIGRhdGEgc3RydWN0dXJlLiBUaGlzIGlzIGxpa2VseSB3aGVyZSBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBrZXJuZWwgY29tcHV0YXRpb24gaXMgdGFraW5nIHBsYWNlLiBXaGF0IEkgcmVhbGx5IG5lZWQgdG8ga25vdyBpcyB3aGV0aGVyIHRoaXMgc2VjdGlvbiBpcyB0aGUgY3JpdGljYWwgYm90dGxlbmVjaywgYW5kIHRoaXMgaW5mb3JtYXRpb24gbWF5IGhlbHAuIEknbGwgZm9jdXMgb24gdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgY29udHJvbCBmbG93LiBUaGVyZSdzIHByb2JhYmx5IHNvbWV0aGluZyBzdWJ0bGUgSSBuZWVkIHRvIGNhdGNoIGhlcmUgdGhhdCBJIGhhdmVuJ3Qgc2VlbiBkdXJpbmcgbXkgaW5pdGlhbCByZXZpZXcuIFRpbWUgdG8gZ2V0IG15IGhlYWQgaW4gdGhlIGdhbWUgYW5kIHVuZGVyc3RhbmQgdGhlIG51dHMgYW5kIGJvbHRzIG9mIHdoYXQncyBoYXBwZW5pbmcgaW4gdGhpcyBiaXQgb2YgY29kZS4gSSdtIGhvcGluZyBJIGNhbiByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBrZXJuZWwgaXMgaGFuZGxpbmcgdGhpcyBjcml0aWNhbCBwYXJ0IG9mIHRoZSBhbGdvcml0aG0gd2l0aCB0aGlzIGRlZXAgZGl2ZSwgd2hpY2ggaXMgY3JpdGljYWwgdG8gZW5oYW5jaW5nIHRoZSBjdXJyZW50IGRlc2lnbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4MzQsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjoxNDozOC40MDE2NjI3NzhaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODMzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zdm0uaFwiLFxuICBcIkZpcnN0TGluZVwiOiA3MDAsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MDA6XFx0XFx0ZWxzZVxcbiA3MDE6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA3MDI6XFx0fVxcbiA3MDM6XFx0XFxuIDcwNDpcXHRzdGF0aWMgaW5saW5lIHZvaWQgc3ZtX3ZtZ2V4aXRfc2V0X3JldHVybl9jb2RlKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLFxcbiA3MDU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0dTY0IHJlc3BvbnNlLCB1NjQgZGF0YSlcXG4gNzA2OlxcdHtcXG4gNzA3OlxcdFxcdGdoY2Jfc2V0X3N3X2V4aXRfaW5mb18xKHN2bS1cXHUwMDNlc2V2X2VzLmdoY2IsIHJlc3BvbnNlKTtcXG4gNzA4OlxcdFxcdGdoY2Jfc2V0X3N3X2V4aXRfaW5mb18yKHN2bS1cXHUwMDNlc2V2X2VzLmdoY2IsIGRhdGEpO1xcbiA3MDk6XFx0fVxcbiA3MTA6XFx0XFxuIDcxMTpcXHRzdGF0aWMgaW5saW5lIHZvaWQgc3ZtX3ZtZ2V4aXRfaW5qZWN0X2V4Y2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdTggdmVjdG9yKVxcbiA3MTI6XFx0e1xcbiA3MTM6XFx0XFx0dTY0IGRhdGEgPSBTVk1fRVZUSU5KX1ZBTElEIHwgU1ZNX0VWVElOSl9UWVBFX0VYRVBUIHwgdmVjdG9yO1xcbiA3MTQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjE0OjM4LjQwMTc0NzMyOFoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjEzMzk1MzkwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTi9LQVNBTiBBbmFseXNpcyBvZiBTRVYtU05QIFZNR0VYSVQgRXJyb3IgSGFuZGxpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gbWV0aWN1bG91c2x5LiBUaGlzIHBhdGNoIGZvY3VzZXMgb24gaG93IHdlIGhhbmRsZSBlcnJvcnMgd2l0aGluIHRoZSBLVk0gU0VWLVNOUCBWTUdFWElUIHByb2Nlc3MuIE15IHByaW1hcnkgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IHNhZmV0eSB2dWxuZXJhYmlsaXRpZXMgdGhhdCBLTVNBTiBvciBLQVNBTiB3b3VsZCBmbGFnLlxuXG5GaXJzdCwgSSBleGFtaW5lIHRoZSBjb2RlIGluIGRldGFpbCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBmdW5jdGlvbnMgYHNucF9oYW5kbGVfZ3Vlc3RfcmVxYCBhbmQgYHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcWAuIFRoZSBrZXkgY2hhbmdlcyBhcmUgaW4gaG93IHdlIGRlYWwgd2l0aCBmYWlsdXJlcyBmcm9tIGBrdm1fcmVhZF9ndWVzdGAgYW5kIGBrdm1fd3JpdGVfZ3Vlc3RgIGNhbGxzLiBQcmV2aW91c2x5LCBhIGZhaWx1cmUgcmVzdWx0ZWQgaW4gYSBgLUVJT2AgcmV0dXJuLCB3aGljaCB3b3VsZCBhYm9ydCB0byB0aGUgaG9zdCB1c2Vyc3BhY2UuIE5vdywgdGhlIHBhdGNoIHV0aWxpemVzIGBzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX0lOUFVUKWAgYW5kIHJldHVybnMgMSwgc2lnbmFsaW5nIGludmFsaWQgaW5wdXQgZGlyZWN0bHkgdG8gdGhlIGd1ZXN0IGFjY29yZGluZyB0byB0aGUgR0hDQiBzcGVjaWZpY2F0aW9uLlxuXG5JJ20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGZvdXIga2V5IGFyZWFzOiBcbiogICAqKlVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlOioqIEFyZSB3ZSByZWFkaW5nIG9yIHVzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIHRoaXMgbW9kaWZpZWQgbG9naWM/IFRoZSBjb2RlIHNldHMgYSBjb25zdGFudCBlcnJvciBjb2RlIGludG8gR0hDQiBhbmQgcmV0dXJucywgbm8uXG4qICAgKipVbmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9uOioqIEFyZSB3ZSBhbGxvY2F0aW5nIGFueSBuZXcgYnVmZmVycyB3aXRob3V0IGluaXRpYWxpemluZyB0aGVtPyBJIHNlZSBubyBuZXcgYnVmZmVyIGFsbG9jYXRpb25zLlxuKiAgICoqS2VybmVsIGluZm9ybWF0aW9uIGxlYWtzOioqIEFyZSB3ZSBjb3B5aW5nIGFueSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdGhlIGd1ZXN0IG9yIHVzZXIgc3BhY2U/IFdoZW4gdGhlIGBrdm1fcmVhZF9ndWVzdGAgb3IgYGt2bV93cml0ZV9ndWVzdGAgb3BlcmF0aW9ucyBmYWlsLCB0aGUgcGF0Y2ggc2ltcGx5IHNldHMgdGhlIGVycm9yIGNvZGUgaW4gdGhlIEdIQ0IgYW5kIHJldHVybnMgd2l0aG91dCBjb3B5aW5nIHRoZSBidWZmZXIsIHNvIG5vLlxuKiAgICoqQnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOioqIENvdWxkIHRoZSBuZXcgbG9naWMgYnJhbmNoIGJhc2VkIG9uIGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gdW5leHBlY3RlZCBiZWhhdmlvcj8gSW4gYHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcWAsIGlmIGBrdm1fcmVhZF9ndWVzdGAgZmFpbHMsIHRoZXJlIGlzIGEgYGdvdG8gcmVxdWVzdF9pbnZhbGlkO2AgYW5kIGBtc2dfdHlwZWAgaXMgbmV2ZXIgcmVhZC5cblxuSSdtIGNvbmZpZGVudCB0aGF0IHRoZSBjaGFuZ2VzIGFyZSBzYWZlIGFzIHRoZXkgYXJlIGNvcnJlY3RseSBzaWduYWxsaW5nIGludmFsaWQgaW5wdXQgdG8gdGhlIGd1ZXN0IGFzIGRlc2NyaWJlZCBpbiB0aGUgR0hDQiBzcGVjaWZpY2F0aW9uLlxuXG5JbiBjb25jbHVzaW9uLCB0aGlzIHBhdGNoIGlzIHNvbGVseSB1cGRhdGluZyB0aGUgZXJyb3IgaGFuZGxpbmcgdG8gYWxpZ24gd2l0aCB0aGUgR0hDQiBzcGVjaWZpY2F0aW9uIGFuZCBlbGltaW5hdGVzIHRoZSByaXNrcyBpZGVudGlmaWVkIGFib3ZlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG9mIHRoZSBLTVNBTiBvciBLQVNBTiB2dWxuZXJhYmlsaXRpZXMgSSdtIGxvb2tpbmcgZm9yLiBUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBgZmFsc2VgLiBJIGFtIHNhdGlzZmllZCB3aXRoIHRoaXMgYXNzZXNzbWVudCwgYnV0IEknbGwgZG91YmxlLWNoZWNrIGFsbCB0aGUgZGV0YWlscyBvbmUgbW9yZSB0aW1lIHRvIGJlIGFic29sdXRlbHkgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzODYsIk91dHB1dFRva2VucyI6Mjg1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjY3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjI6MTQ6NTAuNTM1NzAzNTQzWiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiBLVk0gU0VWLVNOUCBndWVzdCByZXF1ZXN0IGhhbmRsZXJzIChgc25wX2hhbmRsZV9ndWVzdF9yZXFgIGFuZCBgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxYCkuIFNwZWNpZmljYWxseSwgd2hlbiByZWFkaW5nL3dyaXRpbmcvY2xlYXJpbmcgZ3Vlc3QgbWVtb3J5IGZhaWxzIChga3ZtX3JlYWRfZ3Vlc3RgLCBga3ZtX3dyaXRlX2d1ZXN0YCwgb3IgYGt2bV9jbGVhcl9ndWVzdGApLCBpbnN0ZWFkIG9mIHJldHVybmluZyBgLUVJT2AgKHdoaWNoIGNhdXNlZCBLVk0gdG8gZXhpdCB0byBob3N0IHVzZXJzcGFjZSksIEtWTSBub3cgZm9ybWF0cyBhIEdIQ0IgYmFkIGlucHV0IGVycm9yIHJlc3BvbnNlIChgR0hDQl9FUlJfSU5WQUxJRF9JTlBVVGAgdmlhIGBzdm1fdm1nZXhpdF9iYWRfaW5wdXQoKWApIGFuZCByZXN1bWVzIHRoZSBndWVzdCAoYHJldHVybiAxYCkuXFxuXFxuVGhlc2UgY2hhbmdlcyBzb2xlbHkgYWZmZWN0IGVycm9yIHJldHVybiBjb2RlcyBhbmQgY29udHJvbCBmbG93IGZvciBndWVzdCBlcnJvciByZXBvcnRpbmc6XFxuMS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3Igc3RydWN0IHBhZGRpbmcgaXMgY29waWVkIHRvIHVzZXJzcGFjZSBvciB0aGUgZ3Vlc3QuXFxuMi4gSW4gYHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcWAsIGlmIHJlYWRpbmcgYG1zZ190eXBlYCBmYWlscywgY29udHJvbCBqdW1wcyBzdHJhaWdodCB0byBgcmVxdWVzdF9pbnZhbGlkYCwgYXZvaWRpbmcgYW55IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGBtc2dfdHlwZWAuXFxuMy4gTm8gaGVhcC9zdGFjayBhbGxvY2F0aW9ucyBvciBidWZmZXIgc2l6ZS9vZmZzZXQgbWFuaXB1bGF0aW9ucyBhcmUgaW50cm9kdWNlZC5cXG5cXG5BcyB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiBLVk0gU0VWLVNOUCBndWVzdCByZXF1ZXN0IGhhbmRsZXJzIChgc25wX2hhbmRsZV9ndWVzdF9yZXFgIGFuZCBgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxYCkuIFNwZWNpZmljYWxseSwgd2hlbiByZWFkaW5nL3dyaXRpbmcvY2xlYXJpbmcgZ3Vlc3QgbWVtb3J5IGZhaWxzIChga3ZtX3JlYWRfZ3Vlc3RgLCBga3ZtX3dyaXRlX2d1ZXN0YCwgb3IgYGt2bV9jbGVhcl9ndWVzdGApLCBpbnN0ZWFkIG9mIHJldHVybmluZyBgLUVJT2AgKHdoaWNoIGNhdXNlZCBLVk0gdG8gZXhpdCB0byBob3N0IHVzZXJzcGFjZSksIEtWTSBub3cgZm9ybWF0cyBhIEdIQ0IgYmFkIGlucHV0IGVycm9yIHJlc3BvbnNlIChgR0hDQl9FUlJfSU5WQUxJRF9JTlBVVGAgdmlhIGBzdm1fdm1nZXhpdF9iYWRfaW5wdXQoKWApIGFuZCByZXN1bWVzIHRoZSBndWVzdCAoYHJldHVybiAxYCkuXFxuXFxuVGhlc2UgY2hhbmdlcyBzb2xlbHkgYWZmZWN0IGVycm9yIHJldHVybiBjb2RlcyBhbmQgY29udHJvbCBmbG93IGZvciBndWVzdCBlcnJvciByZXBvcnRpbmc6XFxuMS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3Igc3RydWN0IHBhZGRpbmcgaXMgY29waWVkIHRvIHVzZXJzcGFjZSBvciB0aGUgZ3Vlc3QuXFxuMi4gSW4gYHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcWAsIGlmIHJlYWRpbmcgYG1zZ190eXBlYCBmYWlscywgY29udHJvbCBqdW1wcyBzdHJhaWdodCB0byBgcmVxdWVzdF9pbnZhbGlkYCwgYXZvaWRpbmcgYW55IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGBtc2dfdHlwZWAuXFxuMy4gTm8gaGVhcC9zdGFjayBhbGxvY2F0aW9ucyBvciBidWZmZXIgc2l6ZS9vZmZzZXQgbWFuaXB1bGF0aW9ucyBhcmUgaW50cm9kdWNlZC5cXG5cXG5BcyB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvs68w[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-10 22:09:43 +0000 UTC FinishedAt: 2026-09-10 22:14:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "50d05c7c76c96b90462f24debacca971d2e86713", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM_AMD", "KVM_AMD_SEV", "CRYPTO_DEV_SP_PSP", "CRYPTO_DEV_CCP_DD", "AMD_IOMMU" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "50d05c7c76c96b90462f24debacca971d2e86713", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM_AMD", "KVM_AMD_SEV", "CRYPTO_DEV_SP_PSP", "CRYPTO_DEV_CCP_DD", "AMD_IOMMU" ], "series_id": "e1aa4c5a-1130-4ea0-acf5-4261ab59168e" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "snp_handle_guest_req", "snp_handle_ext_guest_req", "sev_handle_vmgexit" ], "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+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTV9BTUQmIzM0OywKICAgICYjMzQ7S1ZNX0FNRF9TRVYmIzM0OywKICAgICYjMzQ7Q1JZUFRPX0RFVl9TUF9QU1AmIzM0OywKICAgICYjMzQ7Q1JZUFRPX0RFVl9DQ1BfREQmIzM0OywKICAgICYjMzQ7QU1EX0lPTU1VJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c25wX2hhbmRsZV9ndWVzdF9yZXEmIzM0OywKICAgICYjMzQ7c25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxJiMzNDssCiAgICAmIzM0O3Nldl9oYW5kbGVfdm1nZXhpdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIEtWTSBTRVYtU05QIGd1ZXN0IHJlcXVlc3QgaGFuZGxlcnMgKGBzbnBfaGFuZGxlX2d1ZXN0X3JlcWAgYW5kIGBzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXFgKS4gU3BlY2lmaWNhbGx5LCB3aGVuIHJlYWRpbmcvd3JpdGluZy9jbGVhcmluZyBndWVzdCBtZW1vcnkgZmFpbHMgKGBrdm1fcmVhZF9ndWVzdGAsIGBrdm1fd3JpdGVfZ3Vlc3RgLCBvciBga3ZtX2NsZWFyX2d1ZXN0YCksIGluc3RlYWQgb2YgcmV0dXJuaW5nIGAtRUlPYCAod2hpY2ggY2F1c2VkIEtWTSB0byBleGl0IHRvIGhvc3QgdXNlcnNwYWNlKSwgS1ZNIG5vdyBmb3JtYXRzIGEgR0hDQiBiYWQgaW5wdXQgZXJyb3IgcmVzcG9uc2UgKGBHSENCX0VSUl9JTlZBTElEX0lOUFVUYCB2aWEgYHN2bV92bWdleGl0X2JhZF9pbnB1dCgpYCkgYW5kIHJlc3VtZXMgdGhlIGd1ZXN0IChgcmV0dXJuIDFgKS5cblxuVGhlc2UgY2hhbmdlcyBzb2xlbHkgYWZmZWN0IGVycm9yIHJldHVybiBjb2RlcyBhbmQgY29udHJvbCBmbG93IGZvciBndWVzdCBlcnJvciByZXBvcnRpbmc6XG4xLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBzdHJ1Y3QgcGFkZGluZyBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlIG9yIHRoZSBndWVzdC5cbjIuIEluIGBzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXFgLCBpZiByZWFkaW5nIGBtc2dfdHlwZWAgZmFpbHMsIGNvbnRyb2wganVtcHMgc3RyYWlnaHQgdG8gYHJlcXVlc3RfaW52YWxpZGAsIGF2b2lkaW5nIGFueSBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBgbXNnX3R5cGVgLlxuMy4gTm8gaGVhcC9zdGFjayBhbGxvY2F0aW9ucyBvciBidWZmZXIgc2l6ZS9vZmZzZXQgbWFuaXB1bGF0aW9ucyBhcmUgaW50cm9kdWNlZC5cblxuQXMgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIEtWTSBBTUQgU0VWLVNOUCBndWVzdCByZXF1ZXN0IGhhbmRsaW5nIGZ1bmN0aW9ucyAoc25wX2hhbmRsZV9ndWVzdF9yZXEgYW5kIHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcSkuIFdoZW4gZ3Vlc3QgbWVtb3J5IHJlYWQvd3JpdGUgb3IgY2VydGlmaWNhdGUgdGFibGUgY2xlYXJhbmNlIGZhaWxzLCBLVk0gbm93IHJlcG9ydHMgR0hDQl9FUlJfSU5WQUxJRF9JTlBVVCB0byB0aGUgZ3Vlc3QgYW5kIHJlc3VtZXMgZ3Vlc3QgZXhlY3V0aW9uIHJhdGhlciB0aGFuIHJldHVybmluZyAtRUlPIHRvIHVzZXJzcGFjZS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgS1ZNIGNvbnRyb2wgZmxvdyBhbmQgVk0gc3RhdGUgaGFuZGxpbmcgb24gYW1kNjQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6MTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4ZjgwYzc4N2JkM2RhMTM4YTZkN2E2NGI4Yjc4MGQxZjE0ZDk0NmQyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMjI6MTM6MTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbmluZGV4IDU3MDU3MjNmMWY0MTIuLmQwNzU2MjMxMDUxOWEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5AQCAtNDIyOCw4ICYjNDM7NDIyOCwxMCBAQCBzdGF0aWMgaW50IHNucF9oYW5kbGVfZ3Vlc3RfcmVxKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBncGFfdCByZXFfZ3BhLCBncGFfdCByZXNwX1xuIFxuIFx0Z3VhcmQobXV0ZXgpKFx1MDAyNnNldi1cdTAwM2VndWVzdF9yZXFfbXV0ZXgpO1xuIFxuLVx0aWYgKGt2bV9yZWFkX2d1ZXN0KGt2bSwgcmVxX2dwYSwgc2V2LVx1MDAzZWd1ZXN0X3JlcV9idWYsIFBBR0VfU0laRSkpXG4tXHRcdHJldHVybiAtRUlPO1xuJiM0MztcdGlmIChrdm1fcmVhZF9ndWVzdChrdm0sIHJlcV9ncGEsIHNldi1cdTAwM2VndWVzdF9yZXFfYnVmLCBQQUdFX1NJWkUpKSB7XG4mIzQzO1x0XHRzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX0lOUFVUKTtcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcdH1cbiBcbiBcdGRhdGEuZ2N0eF9wYWRkciA9IF9fcHNwX3BhKHNldi1cdTAwM2VzbnBfY29udGV4dCk7XG4gXHRkYXRhLnJlcV9wYWRkciA9IF9fcHNwX3BhKHNldi1cdTAwM2VndWVzdF9yZXFfYnVmKTtcbkBAIC00MjQ0LDggJiM0Mzs0MjQ2LDEwIEBAIHN0YXRpYyBpbnQgc25wX2hhbmRsZV9ndWVzdF9yZXEoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGdwYV90IHJlcV9ncGEsIGdwYV90IHJlc3BfXG4gXHRpZiAocmV0IFx1MDAyNlx1MDAyNiAhZndfZXJyKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0aWYgKGt2bV93cml0ZV9ndWVzdChrdm0sIHJlc3BfZ3BhLCBzZXYtXHUwMDNlZ3Vlc3RfcmVzcF9idWYsIFBBR0VfU0laRSkpXG4tXHRcdHJldHVybiAtRUlPO1xuJiM0MztcdGlmIChrdm1fd3JpdGVfZ3Vlc3Qoa3ZtLCByZXNwX2dwYSwgc2V2LVx1MDAzZWd1ZXN0X3Jlc3BfYnVmLCBQQUdFX1NJWkUpKSB7XG4mIzQzO1x0XHRzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX0lOUFVUKTtcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcdH1cbiBcbiBcdC8qIE5vIGFjdGlvbiBpcyByZXF1ZXN0ZWQgKmZyb20gS1ZNKiBpZiB0aGVyZSB3YXMgYSBmaXJtd2FyZSBlcnJvci4gKi9cbiBcdHN2bV92bWdleGl0X25vX2FjdGlvbihzdm0sIFNOUF9HVUVTVF9FUlIoMCwgZndfZXJyKSk7XG5AQCAtNDI5Niw3ICYjNDM7NDMwMCw3IEBAIHN0YXRpYyBpbnQgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBncGFfdCByZXFfZ3BhLCBncGFfdCByXG4gXG4gXHRpZiAoa3ZtX3JlYWRfZ3Vlc3Qoa3ZtLCByZXFfZ3BhICYjNDM7IG9mZnNldG9mKHN0cnVjdCBzbnBfZ3Vlc3RfbXNnX2hkciwgbXNnX3R5cGUpLFxuIFx0XHRcdCAgIFx1MDAyNm1zZ190eXBlLCAxKSlcbi1cdFx0cmV0dXJuIC1FSU87XG4mIzQzO1x0XHRnb3RvIHJlcXVlc3RfaW52YWxpZDtcbiBcbiBcdC8qXG4gXHQgKiBBcyBwZXIgR0hDQiBzcGVjLCByZXF1ZXN0cyBvZiB0eXBlIE1TR19SRVBPUlRfUkVRIGFsc28gYWxsb3cgZm9yXG5AQCAtNDMzNiw3ICYjNDM7NDM0MCw3IEBAIHN0YXRpYyBpbnQgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBncGFfdCByZXFfZ3BhLCBncGFfdCByXG4gXHRcdCAqIGNlcnRpZmljYXRlIHRhYmxlIGlzIHRlcm1pbmF0ZWQgYnkgMjQtYnl0ZXMgb2YgemVyb2VzLlxuIFx0XHQgKi9cbiBcdFx0aWYgKGRhdGFfbnBhZ2VzIFx1MDAyNlx1MDAyNiBrdm1fY2xlYXJfZ3Vlc3Qoa3ZtLCBkYXRhX2dwYSwgMjQpKVxuLVx0XHRcdHJldHVybiAtRUlPO1xuJiM0MztcdFx0XHRnb3RvIHJlcXVlc3RfaW52YWxpZDtcbiBcdH1cbiBcbiBcdHJldHVybiBzbnBfaGFuZGxlX2d1ZXN0X3JlcShzdm0sIHJlcV9ncGEsIHJlc3BfZ3BhKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMjoxMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0tWTV9BTURfU0VWJiMzNDssCiAgICAmIzM0O0NSWVBUT19ERVZfU1BfUFNQJiMzNDssCiAgICAmIzM0O0NSWVBUT19ERVZfQ0NQX0REJiMzNDssCiAgICAmIzM0O0FNRF9JT01NVSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NucF9oYW5kbGVfZ3Vlc3RfcmVxJiMzNDssCiAgICAmIzM0O3NucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcSYjMzQ7LAogICAgJiMzNDtzZXZfaGFuZGxlX3ZtZ2V4aXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gS1ZNIEFNRCBTRVYtU05QIGd1ZXN0IHJlcXVlc3QgaGFuZGxpbmcgZnVuY3Rpb25zIChzbnBfaGFuZGxlX2d1ZXN0X3JlcSBhbmQgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxKS4gV2hlbiBndWVzdCBtZW1vcnkgcmVhZC93cml0ZSBvciBjZXJ0aWZpY2F0ZSB0YWJsZSBjbGVhcmFuY2UgZmFpbHMsIEtWTSBub3cgcmVwb3J0cyBHSENCX0VSUl9JTlZBTElEX0lOUFVUIHRvIHRoZSBndWVzdCBhbmQgcmVzdW1lcyBndWVzdCBleGVjdXRpb24gcmF0aGVyIHRoYW4gcmV0dXJuaW5nIC1FSU8gdG8gdXNlcnNwYWNlLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBLVk0gY29udHJvbCBmbG93IGFuZCBWTSBzdGF0ZSBoYW5kbGluZyBvbiBhbWQ2NC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDhmODBjNzg3YmQzZGExMzhhNmQ3YTY0YjhiNzgwZDFmMTRkOTQ2ZDIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAxMCAyMjoxMzoxMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jCmluZGV4IDU3MDU3MjNmMWY0MTIuLmQwNzU2MjMxMDUxOWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuYwpAQCAtNDIyOCw4ICYjNDM7NDIyOCwxMCBAQCBzdGF0aWMgaW50IHNucF9oYW5kbGVfZ3Vlc3RfcmVxKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBncGFfdCByZXFfZ3BhLCBncGFfdCByZXNwXwogCiAJZ3VhcmQobXV0ZXgpKCZhbXA7c2V2LSZndDtndWVzdF9yZXFfbXV0ZXgpOwogCi0JaWYgKGt2bV9yZWFkX2d1ZXN0KGt2bSwgcmVxX2dwYSwgc2V2LSZndDtndWVzdF9yZXFfYnVmLCBQQUdFX1NJWkUpKQotCQlyZXR1cm4gLUVJTzsKJiM0MzsJaWYgKGt2bV9yZWFkX2d1ZXN0KGt2bSwgcmVxX2dwYSwgc2V2LSZndDtndWVzdF9yZXFfYnVmLCBQQUdFX1NJWkUpKSB7CiYjNDM7CQlzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX0lOUFVUKTsKJiM0MzsJCXJldHVybiAxOwomIzQzOwl9CiAKIAlkYXRhLmdjdHhfcGFkZHIgPSBfX3BzcF9wYShzZXYtJmd0O3NucF9jb250ZXh0KTsKIAlkYXRhLnJlcV9wYWRkciA9IF9fcHNwX3BhKHNldi0mZ3Q7Z3Vlc3RfcmVxX2J1Zik7CkBAIC00MjQ0LDggJiM0Mzs0MjQ2LDEwIEBAIHN0YXRpYyBpbnQgc25wX2hhbmRsZV9ndWVzdF9yZXEoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGdwYV90IHJlcV9ncGEsIGdwYV90IHJlc3BfCiAJaWYgKHJldCAmYW1wOyZhbXA7ICFmd19lcnIpCiAJCXJldHVybiByZXQ7CiAKLQlpZiAoa3ZtX3dyaXRlX2d1ZXN0KGt2bSwgcmVzcF9ncGEsIHNldi0mZ3Q7Z3Vlc3RfcmVzcF9idWYsIFBBR0VfU0laRSkpCi0JCXJldHVybiAtRUlPOwomIzQzOwlpZiAoa3ZtX3dyaXRlX2d1ZXN0KGt2bSwgcmVzcF9ncGEsIHNldi0mZ3Q7Z3Vlc3RfcmVzcF9idWYsIFBBR0VfU0laRSkpIHsKJiM0MzsJCXN2bV92bWdleGl0X2JhZF9pbnB1dChzdm0sIEdIQ0JfRVJSX0lOVkFMSURfSU5QVVQpOwomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CX0KIAogCS8qIE5vIGFjdGlvbiBpcyByZXF1ZXN0ZWQgKmZyb20gS1ZNKiBpZiB0aGVyZSB3YXMgYSBmaXJtd2FyZSBlcnJvci4gKi8KIAlzdm1fdm1nZXhpdF9ub19hY3Rpb24oc3ZtLCBTTlBfR1VFU1RfRVJSKDAsIGZ3X2VycikpOwpAQCAtNDI5Niw3ICYjNDM7NDMwMCw3IEBAIHN0YXRpYyBpbnQgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBncGFfdCByZXFfZ3BhLCBncGFfdCByCiAKIAlpZiAoa3ZtX3JlYWRfZ3Vlc3Qoa3ZtLCByZXFfZ3BhICYjNDM7IG9mZnNldG9mKHN0cnVjdCBzbnBfZ3Vlc3RfbXNnX2hkciwgbXNnX3R5cGUpLAogCQkJICAgJmFtcDttc2dfdHlwZSwgMSkpCi0JCXJldHVybiAtRUlPOwomIzQzOwkJZ290byByZXF1ZXN0X2ludmFsaWQ7CiAKIAkvKgogCSAqIEFzIHBlciBHSENCIHNwZWMsIHJlcXVlc3RzIG9mIHR5cGUgTVNHX1JFUE9SVF9SRVEgYWxzbyBhbGxvdyBmb3IKQEAgLTQzMzYsNyAmIzQzOzQzNDAsNyBAQCBzdGF0aWMgaW50IHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgZ3BhX3QgcmVxX2dwYSwgZ3BhX3QgcgogCQkgKiBjZXJ0aWZpY2F0ZSB0YWJsZSBpcyB0ZXJtaW5hdGVkIGJ5IDI0LWJ5dGVzIG9mIHplcm9lcy4KIAkJICovCiAJCWlmIChkYXRhX25wYWdlcyAmYW1wOyZhbXA7IGt2bV9jbGVhcl9ndWVzdChrdm0sIGRhdGFfZ3BhLCAyNCkpCi0JCQlyZXR1cm4gLUVJTzsKJiM0MzsJCQlnb3RvIHJlcXVlc3RfaW52YWxpZDsKIAl9CiAKIAlyZXR1cm4gc25wX2hhbmRsZV9ndWVzdF9yZXEoc3ZtLCByZXFfZ3BhLCByZXNwX2dwYSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MjgKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNFViBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBwYXRjaCBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyIGVub3VnaCwgYW5kIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LCB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiB0aGUgY29udGV4dCBvZiBLVk0gYW5kIFNFVi4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBtYWdpYyBwcm9iYWJseSBoYXBwZW5zLgoKSSYjMzk7bGwgYmUgdXNpbmcgbXkgc3RhbmRhcmQgdG9vbGtpdCB0byBhbmFseXplIHRoaXM6IHN0YXRpYyBhbmFseXNpcywgbGlrZWx5IHN1cHBsZW1lbnRlZCBieSBkeW5hbWljIGFuYWx5c2lzIGlmIEkgbmVlZCBpdC4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIG5vdCBqdXN0IHRoZSBtb2RpZmllZCBsaW5lcywgYnV0IHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBVbmRlcnN0YW5kaW5nIHRoZSBleGlzdGluZyBjb2RlIGlzIHBhcmFtb3VudCB0byBncmFzcGluZyB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGVzZSBjaGFuZ2VzIGFuZCBhbnkgcG90ZW50aWFsIGltcGxpY2F0aW9ucy4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgY2hhbmdlcyBpbnRlcmFjdCB3aXRoIHRoZSBTRVYgZnJhbWV3b3JrIGluIHBhcnRpY3VsYXIsIGFuZCBpZiB0aGVyZSBhcmUgYW55IG5ldyBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgb3IgZmVhdHVyZXMgdGhhdCBhcmUgaW50cm9kdWNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MjIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQyMjA6XHRcdHN0cnVjdCBzZXZfZGF0YV9zbnBfZ3Vlc3RfcmVxdWVzdCBkYXRhID0gezB9O1xuNDIyMTpcdFx0c3RydWN0IGt2bSAqa3ZtID0gc3ZtLVx1MDAzZXZjcHUua3ZtO1xuNDIyMjpcdFx0c3RydWN0IGt2bV9zZXZfaW5mbyAqc2V2ID0gdG9fa3ZtX3Nldl9pbmZvKGt2bSk7XG40MjIzOlx0XHRzZXZfcmV0X2NvZGUgZndfZXJyID0gMDtcbjQyMjQ6XHRcdGludCByZXQ7XG40MjI1Olx0XG40MjI2Olx0XHRpZiAoIWlzX3Nldl9zbnBfZ3Vlc3QoXHUwMDI2c3ZtLVx1MDAzZXZjcHUpKVxuNDIyNzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQyMjg6XHRcbjQyMjk6XHRcdGd1YXJkKG11dGV4KShcdTAwMjZzZXYtXHUwMDNlZ3Vlc3RfcmVxX211dGV4KTtcbjQyMzA6XHRcbjQyMzE6XHRcdGlmIChrdm1fcmVhZF9ndWVzdChrdm0sIHJlcV9ncGEsIHNldi1cdTAwM2VndWVzdF9yZXFfYnVmLCBQQUdFX1NJWkUpKSB7XG40MjMyOlx0XHRcdHN2bV92bWdleGl0X2JhZF9pbnB1dChzdm0sIEdIQ0JfRVJSX0lOVkFMSURfSU5QVVQpO1xuNDIzMzpcdFx0XHRyZXR1cm4gMTtcbjQyMzQ6XHRcdH1cbjQyMzU6XHRcbjQyMzY6XHRcdGRhdGEuZ2N0eF9wYWRkciA9IF9fcHNwX3BhKHNldi1cdTAwM2VzbnBfY29udGV4dCk7XG40MjM3Olx0XHRkYXRhLnJlcV9wYWRkciA9IF9fcHNwX3BhKHNldi1cdTAwM2VndWVzdF9yZXFfYnVmKTtcbjQyMzg6XHRcdGRhdGEucmVzX3BhZGRyID0gX19wc3BfcGEoc2V2LVx1MDAzZWd1ZXN0X3Jlc3BfYnVmKTtcbjQyMzk6XHRcbjQyNDA6XHRcdC8qXG40MjQxOlx0XHQgKiBGaXJtd2FyZSBmYWlsdXJlcyBhcmUgcHJvcGFnYXRlZCBvbiB0byBndWVzdCwgYnV0IGFueSBvdGhlciBmYWlsdXJlXG40MjQyOlx0XHQgKiBjb25kaXRpb24gYWxvbmcgdGhlIHdheSBzaG91bGQgYmUgcmVwb3J0ZWQgdG8gdXNlcnNwYWNlLiBFLmcuIGlmXG40MjQzOlx0XHQgKiB0aGUgUFNQIGlzIGRlYWQgYW5kIGNvbW1hbmRzIGFyZSB0aW1pbmcgb3V0LlxuNDI0NDpcdFx0ICovXG40MjQ1Olx0XHRyZXQgPSBzZXZfaXNzdWVfY21kKGt2bSwgU0VWX0NNRF9TTlBfR1VFU1RfUkVRVUVTVCwgXHUwMDI2ZGF0YSwgXHUwMDI2ZndfZXJyKTtcbjQyNDY6XHRcdGlmIChyZXQgXHUwMDI2XHUwMDI2ICFmd19lcnIpXG40MjQ3Olx0XHRcdHJldHVybiByZXQ7XG40MjQ4Olx0XG40MjQ5Olx0XHRpZiAoa3ZtX3dyaXRlX2d1ZXN0KGt2bSwgcmVzcF9ncGEsIHNldi1cdTAwM2VndWVzdF9yZXNwX2J1ZiwgUEFHRV9TSVpFKSkge1xuNDI1MDpcdFx0XHRzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX0lOUFVUKTtcbjQyNTE6XHRcdFx0cmV0dXJuIDE7XG40MjUyOlx0XHR9XG40MjUzOlx0XG40MjU0Olx0XHQvKiBObyBhY3Rpb24gaXMgcmVxdWVzdGVkICpmcm9tIEtWTSogaWYgdGhlcmUgd2FzIGEgZmlybXdhcmUgZXJyb3IuICovXG40MjU1Olx0XHRzdm1fdm1nZXhpdF9ub19hY3Rpb24oc3ZtLCBTTlBfR1VFU1RfRVJSKDAsIGZ3X2VycikpO1xuNDI1NjpcdFxuNDI1NzpcdFx0LyogcmVzdW1lIGd1ZXN0ICovXG40MjU4Olx0XHRyZXR1cm4gMTtcbjQyNTk6XHR9XG40MjYwOlx0XG40MjYxOlx0c3RhdGljIGludCBzbnBfcmVxX2NlcnRzX2VycihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdTMyIHZtbV9lcnJvcilcbjQyNjI6XHR7XG40MjYzOlx0XHRnaGNiX3NldF9zd19leGl0X2luZm9fMihzdm0tXHUwMDNlc2V2X2VzLmdoY2IsIFNOUF9HVUVTVF9FUlIodm1tX2Vycm9yLCAwKSk7XG40MjY0Olx0XG40MjY1Olx0XHRyZXR1cm4gMTsgLyogcmVzdW1lIGd1ZXN0ICovXG40MjY2Olx0fVxuNDI2NzpcdFxuNDI2ODpcdHN0YXRpYyBpbnQgc25wX2NvbXBsZXRlX3JlcV9jZXJ0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG40MjY5Olx0e1xuNDI3MDpcdFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XG40MjcxOlx0XHRzdHJ1Y3Qgdm1jYl9jb250cm9sX2FyZWEgKmNvbnRyb2wgPSBcdTAwMjZzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sO1xuNDI3MjpcdFxuNDI3MzpcdFx0c3dpdGNoIChSRUFEX09OQ0UodmNwdS1cdTAwM2VydW4tXHUwMDNlc25wX3JlcV9jZXJ0cy5yZXQpKSB7XG40Mjc0Olx0XHRjYXNlIDA6XG40Mjc1Olx0XHRcdHJldHVybiBzbnBfaGFuZGxlX2d1ZXN0X3JlcShzdm0sIGNvbnRyb2wtXHUwMDNlZXhpdF9pbmZvXzEsXG40Mjc2Olx0XHRcdFx0XHRcdCAgICBjb250cm9sLVx1MDAzZWV4aXRfaW5mb18yKTtcbjQyNzc6XHRcdGNhc2UgRU5PU1BDOlxuNDI3ODpcdFx0XHR2Y3B1LVx1MDAzZWFyY2gucmVnc1tWQ1BVX1JFR1NfUkJYXSA9IHZjcHUtXHUwMDNlcnVuLVx1MDAzZXNucF9yZXFfY2VydHMubnBhZ2VzO1xuNDI3OTpcdFx0XHRyZXR1cm4gc25wX3JlcV9jZXJ0c19lcnIoc3ZtLCBTTlBfR1VFU1RfVk1NX0VSUl9JTlZBTElEX0xFTik7XG40MjgwOlx0XHRjYXNlIEVBR0FJTjpcbjQyODE6XHRcdFx0cmV0dXJuIHNucF9yZXFfY2VydHNfZXJyKHN2bSwgU05QX0dVRVNUX1ZNTV9FUlJfQlVTWSk7XG40MjgyOlx0XHRjYXNlIEVJTzpcbjQyODM6XHRcdFx0cmV0dXJuIHNucF9yZXFfY2VydHNfZXJyKHN2bSwgU05QX0dVRVNUX1ZNTV9FUlJfR0VORVJJQyk7XG40Mjg0Olx0XHRkZWZhdWx0OlxuNDI4NTpcdFx0XHRicmVhaztcbjQyODY6XHRcdH1cbjQyODc6XHRcbjQyODg6XHRcdHJldHVybiAtRUlOVkFMO1xuNDI4OTpcdH1cbjQyOTA6XHRcbjQyOTE6XHRzdGF0aWMgaW50IHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgZ3BhX3QgcmVxX2dwYSwgZ3BhX3QgcmVzcF9ncGEpXG40MjkyOlx0e1xuNDI5MzpcdFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gXHUwMDI2c3ZtLVx1MDAzZXZjcHU7XG40Mjk0Olx0XHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbjQyOTU6XHRcbjQyOTY6XHRcdHU4IG1zZ190eXBlO1xuNDI5NzpcdFxuNDI5ODpcdFx0aWYgKCFpc19zZXZfc25wX2d1ZXN0KHZjcHUpKVxuNDI5OTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQzMDA6XHRcbjQzMDE6XHRcdGlmIChrdm1fcmVhZF9ndWVzdChrdm0sIHJlcV9ncGEgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IHNucF9ndWVzdF9tc2dfaGRyLCBtc2dfdHlwZSksXG40MzAyOlx0XHRcdFx0ICAgXHUwMDI2bXNnX3R5cGUsIDEpKVxuNDMwMzpcdFx0XHRnb3RvIHJlcXVlc3RfaW52YWxpZDtcbjQzMDQ6XHRcbjQzMDU6XHRcdC8qXG40MzA2Olx0XHQgKiBBcyBwZXIgR0hDQiBzcGVjLCByZXF1ZXN0cyBvZiB0eXBlIE1TR19SRVBPUlRfUkVRIGFsc28gYWxsb3cgZm9yXG40MzA3Olx0XHQgKiBhZGRpdGlvbmFsIGNlcnRpZmljYXRlIGRhdGEgdG8gYmUgcHJvdmlkZWQgYWxvbmdzaWRlIHRoZSBhdHRlc3RhdGlvblxuNDMwODpcdFx0ICogcmVwb3J0IHZpYSB0aGUgZ3Vlc3QtcHJvdmlkZWQgZGF0YSBwYWdlcyBpbmRpY2F0ZWQgYnkgUkFYL1JCWC4gSWZcbjQzMDk6XHRcdCAqIHVzZXJzcGFjZSBlbmFibGVzIEtWTV9FWElUX1NOUF9SRVFfQ0VSVFMsIHRoZW4gZXhpdCB0byB1c2Vyc3BhY2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzczCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIFNlY3VyZSBOZXN0ZWQgUGFnaW5nIChTTlApIGNvbnRleHQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSBwdXJwb3NlIG9mIHRoZSBmdW5jdGlvbiwgYW5kIHdoYXQgZXh0ZXJuYWwgZ3Vlc3QgcmVxdWVzdHMgaXQgaXMgaGFuZGxpbmcsIGFuZCBpbiB3aGF0IGNvbnRleHQuIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgc29tZSBvZiB0aGUgY29tcGxleGl0eTsgSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBraW5kIG9mIGRpc3BhdGNoIG1lY2hhbmlzbSBvciBzd2l0Y2ggc3RhdGVtZW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0JiMzOTtzIGRvaW5nIHdpdGggdGhlc2UgZXh0ZXJuYWwgcmVxdWVzdHMsIHdoZXRoZXIgaXQmIzM5O3MgdmFsaWRhdGluZyB0aGVtLCB0cmFuc2xhdGluZyB0aGVtLCBmb3J3YXJkaW5nIHRoZW0sIG9yIGFjdHVhbGx5IHByb2Nlc3NpbmcgdGhlbS4gV2hhdCByZXNvdXJjZXMgaXMgaXQgdG91Y2hpbmc/IERvZXMgaXQgaW52b2x2ZSBhbnkgVk0gZXhpdHMgb3IgcGFnZSB0YWJsZSBtYW5pcHVsYXRpb25zPyBJIHdpbGwgbmVlZCB0byBsb29rIHRvIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGl0IG1pZ2h0IGJlIHVzaW5nIHRvIHVuZGVyc3RhbmQgaWYgaXQmIzM5O3Mgb3BlcmF0aW5nIG9uIGFueSBwZXItVk0gb3IgZ2xvYmFsIGRhdGEsIGFuZCBob3cgaXQgaGFuZGxlcyBjb25jdXJyZW5jeSBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgZ3Vlc3RzLiBUaGUgZmxvdyBvZiB0aGlzIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGdpdmUgbWUgYSBzb2xpZCBjbHVlLiBJJiMzOTtsbCBmb2N1cyBvbiB0aGUgZGF0YSBmbG93IGFuZCBhbnkgaW50ZXJhY3Rpb25zIHdpdGggdGhlIFNOUCYjMzk7cyBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZXMsIGJlY2F1c2UgdGhhdCYjMzk7cyB3aGVyZSB0aGUgbWFnaWMgaXMuIFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9zZXYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQzMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDMxMDpcdFx0ICogdG8gZ2l2ZSB1c2Vyc3BhY2UgYW4gb3Bwb3J0dW5pdHkgdG8gcHJvdmlkZSB0aGUgY2VydGlmaWNhdGUgZGF0YVxuNDMxMTpcdFx0ICogYmVmb3JlIGlzc3VpbmcvY29tcGxldGluZyB0aGUgYXR0ZXN0YXRpb24gcmVxdWVzdC4gT3RoZXJ3aXNlLCByZXR1cm5cbjQzMTI6XHRcdCAqIGFuIGVtcHR5IGNlcnRpZmljYXRlIHRhYmxlIGluIHRoZSBndWVzdC1wcm92aWRlZCBkYXRhIHBhZ2VzIGFuZFxuNDMxMzpcdFx0ICogaGFuZGxlIHRoZSBhdHRlc3RhdGlvbiByZXF1ZXN0IGltbWVkaWF0ZWx5LlxuNDMxNDpcdFx0ICovXG40MzE1Olx0XHRpZiAobXNnX3R5cGUgPT0gU05QX01TR19SRVBPUlRfUkVRKSB7XG40MzE2Olx0XHRcdHN0cnVjdCBrdm1fc2V2X2luZm8gKnNldiA9IFx1MDAyNnRvX2t2bV9zdm0oa3ZtKS1cdTAwM2VzZXZfaW5mbztcbjQzMTc6XHRcdFx0dTY0IGRhdGFfbnBhZ2VzO1xuNDMxODpcdFx0XHRncGFfdCBkYXRhX2dwYTtcbjQzMTk6XHRcbjQzMjA6XHRcdFx0aWYgKCFrdm1fZ2hjYl9yYXhfaXNfdmFsaWQoc3ZtKSB8fCAha3ZtX2doY2JfcmJ4X2lzX3ZhbGlkKHN2bSkpXG40MzIxOlx0XHRcdFx0Z290byByZXF1ZXN0X2ludmFsaWQ7XG40MzIyOlx0XG40MzIzOlx0XHRcdGRhdGFfZ3BhID0gdmNwdS1cdTAwM2VhcmNoLnJlZ3NbVkNQVV9SRUdTX1JBWF07XG40MzI0Olx0XHRcdGRhdGFfbnBhZ2VzID0gdmNwdS1cdTAwM2VhcmNoLnJlZ3NbVkNQVV9SRUdTX1JCWF07XG40MzI1Olx0XG40MzI2Olx0XHRcdGlmICghUEFHRV9BTElHTkVEKGRhdGFfZ3BhKSlcbjQzMjc6XHRcdFx0XHRnb3RvIHJlcXVlc3RfaW52YWxpZDtcbjQzMjg6XHRcbjQzMjk6XHRcdFx0aWYgKHNldi1cdTAwM2VzbnBfY2VydHNfZW5hYmxlZCkge1xuNDMzMDpcdFx0XHRcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZWV4aXRfcmVhc29uID0gS1ZNX0VYSVRfU05QX1JFUV9DRVJUUztcbjQzMzE6XHRcdFx0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VzbnBfcmVxX2NlcnRzLmdwYSA9IGRhdGFfZ3BhO1xuNDMzMjpcdFx0XHRcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZXNucF9yZXFfY2VydHMubnBhZ2VzID0gZGF0YV9ucGFnZXM7XG40MzMzOlx0XHRcdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlc25wX3JlcV9jZXJ0cy5yZXQgPSAwO1xuNDMzNDpcdFx0XHRcdHZjcHUtXHUwMDNlYXJjaC5jb21wbGV0ZV91c2Vyc3BhY2VfaW8gPSBzbnBfY29tcGxldGVfcmVxX2NlcnRzO1xuNDMzNTpcdFx0XHRcdHJldHVybiAwO1xuNDMzNjpcdFx0XHR9XG40MzM3Olx0XG40MzM4Olx0XHRcdC8qXG40MzM5Olx0XHRcdCAqIEFzIHBlciBHSENCIHNwZWMgKHNlZSBcJiMzNDtTTlAgRXh0ZW5kZWQgR3Vlc3QgUmVxdWVzdFwmIzM0OyksIHRoZVxuNDM0MDpcdFx0XHQgKiBjZXJ0aWZpY2F0ZSB0YWJsZSBpcyB0ZXJtaW5hdGVkIGJ5IDI0LWJ5dGVzIG9mIHplcm9lcy5cbjQzNDE6XHRcdFx0ICovXG40MzQyOlx0XHRcdGlmIChkYXRhX25wYWdlcyBcdTAwMjZcdTAwMjYga3ZtX2NsZWFyX2d1ZXN0KGt2bSwgZGF0YV9ncGEsIDI0KSlcbjQzNDM6XHRcdFx0XHRnb3RvIHJlcXVlc3RfaW52YWxpZDtcbjQzNDQ6XHRcdH1cbjQzNDU6XHRcbjQzNDY6XHRcdHJldHVybiBzbnBfaGFuZGxlX2d1ZXN0X3JlcShzdm0sIHJlcV9ncGEsIHJlc3BfZ3BhKTtcbjQzNDc6XHRcbjQzNDg6XHRyZXF1ZXN0X2ludmFsaWQ6XG40MzQ5Olx0XHRzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX0lOUFVUKTtcbjQzNTA6XHRcdHJldHVybiAxOyAvKiByZXN1bWUgZ3Vlc3QgKi9cbjQzNTE6XHR9XG40MzUyOlx0XG40MzUzOlx0c3RhdGljIGludCBzZXZfaGFuZGxlX3ZtZ2V4aXRfbXNyX3Byb3RvY29sKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxuNDM1NDpcdHtcbjQzNTU6XHRcdHN0cnVjdCB2bWNiX2NvbnRyb2xfYXJlYSAqY29udHJvbCA9IFx1MDAyNnN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2w7XG40MzU2Olx0XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBcdTAwMjZzdm0tXHUwMDNldmNwdTtcbjQzNTc6XHRcdHN0cnVjdCBrdm1fc2V2X2luZm8gKnNldiA9IHRvX2t2bV9zZXZfaW5mbyh2Y3B1LVx1MDAzZWt2bSk7XG40MzU4Olx0XHR1NjQgZ2hjYl9pbmZvO1xuNDM1OTpcdFx0aW50IHJldCA9IDE7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU1NgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4KCioqSW52ZXN0aWdhdGluZyBgc25wX2hhbmRsZV9ndWVzdF9yZXFgIGFuZCBgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxYCoqCgpSaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBhcm91bmQgdGhlc2UgZnVuY3Rpb25zLCBgc25wX2hhbmRsZV9ndWVzdF9yZXFgIGFuZCBgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxYC4gVGhlIHF1aWNrZXN0IHdheSB0byBkbyB0aGlzIGlzIHRvIHNlZSB3aGVyZSB0aGV5JiMzOTtyZSAqY2FsbGVkKiBmcm9tLiBJJiMzOTttIGdvaW5nIHRvIHJlYWNoIGZvciBgZ3JlcGAgYW5kIHNlYXJjaCB0aGUgY29kZWJhc2UgZm9yIGV2ZXJ5IGluc3RhbmNlIG9mIHRob3NlIGZ1bmN0aW9uIG5hbWVzLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgcHJldHR5IGNsZWFyIHBpY3R1cmUgb2YgdGhlaXIgZW50cnkgcG9pbnRzIGFuZCB0aGUgY29udGV4dCBpbiB3aGljaCB0aGV5JiMzOTtyZSBiZWluZyBpbnZva2VkLiBUaGF0IHNob3VsZCBiZSB0aGUgcGVyZmVjdCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGVpciByb2xlIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQmIzM5O3MgZ2V0IGNyYWNraW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NucF9oYW5kbGVfKGV4dF8pP2d1ZXN0X3JlcSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9zZXYuYz00MTQyPXN0YXRpYyBpbnQgc2V2X3NucF9hcF9jcmVhdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQyMTctXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQyMTg6c3RhdGljIGludCBzbnBfaGFuZGxlX2d1ZXN0X3JlcShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgZ3BhX3QgcmVxX2dwYSwgZ3BhX3QgcmVzcF9ncGEpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQyMTkte1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDI2OD1zdGF0aWMgaW50IHNucF9jb21wbGV0ZV9yZXFfY2VydHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDI3NC1cdGNhc2UgMDpcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDI3NTpcdFx0cmV0dXJuIHNucF9oYW5kbGVfZ3Vlc3RfcmVxKHN2bSwgY29udHJvbC1cdTAwM2VleGl0X2luZm9fMSxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDI3Ni1cdFx0XHRcdFx0ICAgIGNvbnRyb2wtXHUwMDNlZXhpdF9pbmZvXzIpO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDI5MC1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDI5MTpzdGF0aWMgaW50IHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgZ3BhX3QgcmVxX2dwYSwgZ3BhX3QgcmVzcF9ncGEpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQyOTIte1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDM0NS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDM0NjpcdHJldHVybiBzbnBfaGFuZGxlX2d1ZXN0X3JlcShzdm0sIHJlcV9ncGEsIHJlc3BfZ3BhKTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDM0Ny1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQ1MTA9aW50IHNldl9oYW5kbGVfdm1nZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NjgxLVx0XHRpZiAoY29udHJvbC1cdTAwM2VleGl0X2NvZGUgPT0gU1ZNX1ZNR0VYSVRfR1VFU1RfUkVRVUVTVClcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDY4MjpcdFx0XHRyZXR1cm4gc25wX2hhbmRsZV9ndWVzdF9yZXEoc3ZtLCBjb250cm9sLVx1MDAzZWV4aXRfaW5mb18xLFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NjgzLVx0XHRcdFx0XHRcdCAgICBjb250cm9sLVx1MDAzZWV4aXRfaW5mb18yKTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDY4NC1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDY4NTpcdFx0cmV0dXJuIHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcShzdm0sIGNvbnRyb2wtXHUwMDNlZXhpdF9pbmZvXzEsXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ2ODYtXHRcdFx0XHRcdFx0Y29udHJvbC1cdTAwM2VleGl0X2luZm9fMik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzUyOQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTRVYtU05QIEd1ZXN0IERldGVjdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGlzX3Nldl9zbnBfZ3Vlc3RgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgY3JpdGVyaWEgaXQmIzM5O3MgdXNpbmcgdG8gZGV0ZXJtaW5lIGlmIHdlJiMzOTtyZSBydW5uaW5nIGluIGFuIFNFVi1TTlAgZ3Vlc3QgZW52aXJvbm1lbnQuIE15IHByaW1hcnkgY29uY2VybiBoZXJlIGlzIHRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIHN0YW5kYXJkIHZpcnR1YWxpemF0aW9uLCBLVk0gd2l0aCBTVk0sIGFuZCB0aGUgZXhwbGljaXQgcmVxdWlyZW1lbnQgZm9yIHBoeXNpY2FsIEFNRCBTRVYtU05QIGhhcmR3YXJlLiBUaGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgd2UmIzM5O3JlIGdldHRpbmcgZmFsc2UgcG9zaXRpdmVzIG9yIG1pc3Npbmcgc29tZSBwb3RlbnRpYWwgY29uZmlndXJhdGlvbnMuCgpFc3NlbnRpYWxseSwgSSB3YW50IHRvIHRyYWNlIHRoZSBleGVjdXRpb24gb2YgYGlzX3Nldl9zbnBfZ3Vlc3RgIGFuZCBleGFtaW5lIHRoZSBTRVYtU05QIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyByZWxpYWJsZSB0aGlzIGNoZWNrIGlzIGluIGlkZW50aWZ5aW5nIHRydWUgU0VWLVNOUCBndWVzdHMgYWNyb3NzIHZhcmlvdXMgdmlydHVhbGl6YXRpb24gc2NlbmFyaW9zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZWRnZSBjYXNlcyB0byBlbnN1cmUgb3VyIGxvZ2ljIGlzIHJvYnVzdCwgc28gSSYjMzk7bGwgcHJvYmFibHkgc3BlbmQgYSBnb29kIGNodW5rIG9mIHRpbWUgZ29pbmcgdGhyb3VnaCBpdHMgaW1wbGVtZW50YXRpb25zLCBsb29raW5nIGZvciBhc3N1bXB0aW9ucywgYW5kIHZlcmlmeWluZyBpdHMgYWNjdXJhY3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lzX3Nldl9zbnBfZ3Vlc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzU0NT12b2lkIHNldl9mcmVlX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzU1OC1cdCAqL1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozNTU5Olx0aWYgKGlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkpIHtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzU2MC1cdFx0dTY0IHBmbiA9IF9fcGEoc3ZtLVx1MDAzZXNldl9lcy52bXNhKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQyMTg9c3RhdGljIGludCBzbnBfaGFuZGxlX2d1ZXN0X3JlcShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgZ3BhX3QgcmVxX2dwYSwgZ3BhX3QgcmVzcF9ncGEpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00MjI1LVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0MjI2Olx0aWYgKCFpc19zZXZfc25wX2d1ZXN0KFx1MDAyNnN2bS1cdTAwM2V2Y3B1KSlcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDIyNy1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00MjkxPXN0YXRpYyBpbnQgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBncGFfdCByZXFfZ3BhLCBncGFfdCByZXNwX2dwYSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQyOTctXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQyOTg6XHRpZiAoIWlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQyOTktXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDM1Mz1zdGF0aWMgaW50IHNldl9oYW5kbGVfdm1nZXhpdF9tc3JfcHJvdG9jb2woc3RydWN0IHZjcHVfc3ZtICpzdm0pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NDMyLVx0Y2FzZSBHSENCX01TUl9QUkVGX0dQQV9SRVE6XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ0MzM6XHRcdGlmICghaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSlcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDQzNC1cdFx0XHRnb3RvIG91dF90ZXJtaW5hdGU7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NDQzLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0NDQ0Olx0XHRpZiAoIWlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ0NDUtXHRcdFx0Z290byBvdXRfdGVybWluYXRlO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDQ1OC1cdGNhc2UgR0hDQl9NU1JfUFNDX1JFUTpcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDQ1OTpcdFx0aWYgKCFpc19zZXZfc25wX2d1ZXN0KHZjcHUpKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NDYwLVx0XHRcdGdvdG8gb3V0X3Rlcm1pbmF0ZTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQ1MTA9aW50IHNldl9oYW5kbGVfdm1nZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NTQzLVx0LyogU0VWLVNOUCBndWVzdCByZXF1aXJlcyB0aGF0IHRoZSBHSENCIEdQQSBtdXN0IGJlIHJlZ2lzdGVyZWQgKi9cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDU0NDpcdGlmIChpc19zZXZfc25wX2d1ZXN0KHZjcHUpIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NTQ1LVx0ICAgICFnaGNiX2dwYV9pc19yZWdpc3RlcmVkKHN2bSwgY29udHJvbC1cdTAwM2VnaGNiX2dwYSkpIHtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ1NTktXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ1NjA6XHRpZiAoaXNfc25wX29ubHlfdm1nZXhpdChjb250cm9sLVx1MDAzZWV4aXRfY29kZSkgXHUwMDI2XHUwMDI2ICFpc19zZXZfc25wX2d1ZXN0KHZjcHUpKSB7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ1NjEtXHRcdHZjcHVfdW5pbXBsKHZjcHUsIFwmIzM0O3ZtZ2V4aXQ6IGV4aXQgY29kZSAlI2xseCBpcyBTTlAtb25seVxcblwmIzM0Oyxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQ4NDY9dm9pZCBzZXZfaW5pdF92bWNiKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBib29sIGluaXRfZXZlbnQpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00ODU4LVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0ODU5Olx0aWYgKGluaXRfZXZlbnQgXHUwMDI2XHUwMDI2IGlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ4NjAtXHRcdHNldl9zbnBfaW5pdF9wcm90ZWN0ZWRfZ3Vlc3Rfc3RhdGUodmNwdSk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00ODkzPXZvaWQgc2V2X2VzX3ByZXBhcmVfc3dpdGNoX3RvX2d1ZXN0KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qgc2V2X2VzX3NhdmVfYXJlYSAqaG9zdHNhKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDkzMy1cdCAgICAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9ERUJVR19TV0FQKSBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDkzNDpcdCAgICAgaXNfc2V2X3NucF9ndWVzdChcdTAwMjZzdm0tXHUwMDNldmNwdSkpKSB7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ5MzUtXHRcdGhvc3RzYS1cdTAwM2VkcjBfYWRkcl9tYXNrID0gYW1kX2dldF9kcl9hZGRyX21hc2soMCk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz01MzIwPXN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqc2V2X2RlY3J5cHRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MzQwLVx0LyogQ2hlY2sgaWYgdGhlIFNFViBwb2xpY3kgYWxsb3dzIGRlYnVnZ2luZyAqL1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo1MzQxOlx0aWYgKGlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkpIHtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTM0Mi1cdFx0aWYgKCEoc2V2LVx1MDAzZXBvbGljeSBcdTAwMjYgU05QX1BPTElDWV9NQVNLX0RFQlVHKSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUzNDgtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjUzNDk6XHRpZiAoaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSkge1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MzUwLVx0XHRzdHJ1Y3Qgc2V2X2RhdGFfc25wX2RiZyBkYmcgPSB7MH07XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0xOTc0PXN0YXRpYyBpbnQgbnBmX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yMDIwLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyMDIxOlx0aWYgKGlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkgXHUwMDI2XHUwMDI2IChlcnJvcl9jb2RlIFx1MDAyNiBQRkVSUl9HVUVTVF9FTkNfTUFTSykpXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTIwMjItXHRcdGVycm9yX2NvZGUgfD0gUEZFUlJfUFJJVkFURV9BQ0NFU1M7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0zNDI2PXN0YXRpYyB2b2lkIGR1bXBfdm1jYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNDQwLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozNDQxOlx0dm1fdHlwZSA9IGlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkgPyBcJiMzNDtTRVYtU05QXCYjMzQ7IDpcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzQ0Mi1cdFx0ICBpc19zZXZfZXNfZ3Vlc3QodmNwdSkgPyBcJiMzNDtTRVYtRVNcJiMzNDsgOlxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9NDI0PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19zZXZfZXNfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDI4LVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo0Mjk6c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3Nldl9zbnBfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC00MzAte1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9NDM4PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19zZXZfZXNfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDQyLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo0NDM6c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3Nldl9zbnBfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC00NDQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDAzMQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIFNldi1TTlAgR3Vlc3QgQ2hlY2sqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBLVk0gaHlwZXJ2aXNvciBpcyBoYW5kbGluZyBTRVYtU05QIGd1ZXN0IGRldGVjdGlvbi4gSSYjMzk7bSBnb2luZyBzdHJhaWdodCB0byB0aGUgc291cmNlIOKAkyB0aGUgYGFyY2gveDg2L2t2bS9zdm0vc3ZtLmhgIGZpbGUuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBmb3IgYGlzX3Nldl9zbnBfZ3Vlc3RgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlIGh5cGVydmlzb3IgaXMgZGV0ZXJtaW5pbmcgaWYgYSBndWVzdCBpcyBydW5uaW5nIHVuZGVyIFNFVi1TTlAsIGFzIHRoYXQgaW1wYWN0cyBhIGxvdCBvZiBteSB3b3JrIHdpdGggc2VjdXJpdHkgbW9kdWxlcy4gS25vd2luZyB0aGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZXMgYW5kIGhvdyB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBhcHByb2FjaGVzIHRoZSBwcm9ibGVtLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhleSYjMzk7dmUgZ290Li4uIGhvcGVmdWxseSwgaXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc3ZtLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQyMDpcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19zZXZfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIDQyMTpcdHtcbiA0MjI6XHRcdHJldHVybiBfX19fc2V2X2d1ZXN0KHZjcHUtXHUwMDNla3ZtKTtcbiA0MjM6XHR9XG4gNDI0Olx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3Nldl9lc19ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gNDI1Olx0e1xuIDQyNjpcdFx0cmV0dXJuIF9fX19zZXZfZXNfZ3Vlc3QodmNwdS1cdTAwM2Vrdm0pO1xuIDQyNzpcdH1cbiA0Mjg6XHRcbiA0Mjk6XHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfc2V2X3NucF9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gNDMwOlx0e1xuIDQzMTpcdFx0cmV0dXJuIF9fX19zZXZfc25wX2d1ZXN0KHZjcHUtXHUwMDNla3ZtKTtcbiA0MzI6XHR9XG4gNDMzOlx0I2Vsc2VcbiA0MzQ6XHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfc2V2X2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiA0MzU6XHR7XG4gNDM2Olx0XHRyZXR1cm4gZmFsc2U7XG4gNDM3Olx0fVxuIDQzODpcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19zZXZfZXNfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIDQzOTpcdHtcbiA0NDA6XHRcdHJldHVybiBmYWxzZTtcbiA0NDE6XHR9XG4gNDQyOlx0XG4gNDQzOlx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3Nldl9zbnBfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIDQ0NDpcdHtcbiA0NDU6XHRcdHJldHVybiBmYWxzZTtcbiA0NDY6XHR9XG4gNDQ3Olx0I2VuZGlmXG4gNDQ4Olx0XG4gNDQ5Olx0c3RhdGljIGlubGluZSBib29sIGdoY2JfZ3BhX2lzX3JlZ2lzdGVyZWQoc3RydWN0IHZjcHVfc3ZtICpzdm0sIHU2NCB2YWwpXG4gNDUwOlx0e1xuIDQ1MTpcdFx0cmV0dXJuIHN2bS1cdTAwM2VzZXZfZXMuZ2hjYl9yZWdpc3RlcmVkX2dwYSA9PSB2YWw7XG4gNDUyOlx0fVxuIDQ1MzpcdFxuIDQ1NDpcdHN0YXRpYyBpbmxpbmUgdm9pZCB2bWNiX21hcmtfYWxsX2RpcnR5KHN0cnVjdCB2bWNiICp2bWNiKVxuIDQ1NTpcdHtcbiA0NTY6XHRcdHZtY2ItXHUwMDNlY29udHJvbC5jbGVhbiA9IDA7XG4gNDU3Olx0fVxuIDQ1ODpcdFxuIDQ1OTpcdHN0YXRpYyBpbmxpbmUgdm9pZCB2bWNiX21hcmtfYWxsX2NsZWFuKHN0cnVjdCB2bWNiICp2bWNiKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg2OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoZSBtYXR0ZXIsIHN1bW1hcml6ZWQgYXMgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyB0aGUgU0VWLVNOUCBWTSBJbml0aWFsaXphdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3Qgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIHRoaXMgYXJjaGl0ZWN0dXJlIGlzIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIGBfX19fc2V2X3NucF9ndWVzdGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHByZWNpc2VseSB3aGF0IHRoaXMgdmFyaWFibGUgb3Igc3RydWN0dXJlIHJlcHJlc2VudHMgd2l0aGluIHRoZSBjb250ZXh0IG9mIFNFVi1TTlAuIElzIGl0IGEgZmxhZywgYSBkZXNjcmlwdG9yLCBhIGRhdGEgc3RydWN0dXJlIHRoYXQgaG9sZHMgcmVsZXZhbnQgZ3Vlc3QgaW5mb3JtYXRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgbmFtZSBpdHNlbGYgc3VnZ2VzdHMgaXQmIzM5O3MgaW50aW1hdGVseSB0aWVkIHRvIHRoZSBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIHdpdGggU2VjdXJlIE5lc3RlZCBQYWdpbmcgKFNFVi1TTlApIGd1ZXN0LCBidXQgdGhlIHNwZWNpZmljcyBhcmUgY3J1Y2lhbC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB0cmVhdCB0aGlzIGFzIGFuIHVua25vd24gdmFyaWFibGUgYW5kIHRvIHRyeSB0byBkZXRlcm1pbmUgaXRzIHNjb3BlIGFuZCBhcHBsaWNhdGlvbiB3aXRoaW4gdGhlIFNFVi1TTlAgc3lzdGVtLgoKVGhlcmVmb3JlLCBteSBuZXh0IG1vdmUgaXMgdG8gaW5pdGlhdGUgYSBkZWVwIHNlYXJjaCB3aXRoaW4gdGhlIHJlbGV2YW50IGNvZGViYXNlIG9yIGRvY3VtZW50YXRpb24uIEkmIzM5O20gZ29pbmcgdG8gdHJhY2sgZG93biBldmVyeSBpbnN0YW5jZSBvZiBgX19fX3Nldl9zbnBfZ3Vlc3RgLiBIb3BlZnVsbHksIHRoaXMgd2lsbCBsZWFkIG1lIHRvIGl0cyBkZWZpbml0aW9uLCB1c2FnZSwgYW5kIGFueSBhc3NvY2lhdGVkIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLiBUaGUgZ29hbCBpcyB0byB0cmFjZSB0aGUgbGlmZWN5Y2xlIG9mIHRoaXMgdmFyaWFibGU6IHdoZXJlIGlzIGl0IGRlY2xhcmVkLCBob3cgaXMgaXQgYXNzaWduZWQgYSB2YWx1ZSwgd2hhdCBmdW5jdGlvbnMgb3IgbW9kdWxlcyBpbnRlcmFjdCB3aXRoIGl0LCBhbmQgd2hhdCBkYXRhIGRvZXMgaXQgY29udGFpbj8gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIHBpY3R1cmUgb2YgdGhlIFNFVi1TTlAgVk0gY3JlYXRpb24gb3IgaW5pdGlhbGl6YXRpb24uIFRoaXMgaXMgd2hlcmUgSSBzdGFydCB0byBzZWUgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMgd2l0aGluIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fX19zZXZfc25wX2d1ZXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTE0Nj1zdGF0aWMgYm9vbCBzZXZfc25wX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTE0OC1cdGt2bV9sb2NrZGVwX2Fzc2VydF9zZXZfbG9ja19oZWxkKGt2bSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjE0OTpcdHJldHVybiBfX19fc2V2X3NucF9ndWVzdChrdm0pO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xNTAtfVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzMzMz12b2lkIHNldl9ndWVzdF9tZW1vcnlfcmVjbGFpbWVkKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMzNDUtXHQgKi9cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzM0NjpcdGlmICghX19fX3Nldl9ndWVzdChrdm0pIHx8IF9fX19zZXZfc25wX2d1ZXN0KGt2bSkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMzNDctXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTUyNzA9dm9pZCBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTI4Mi1cdCAqL1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo1MjgzOlx0aWYgKCFfX19fc2V2X3NucF9ndWVzdChrdm0pKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01Mjg0LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD00MDU9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fX19zZXZfZXNfZ3Vlc3Qoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDExLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo0MTI6c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fX19zZXZfc25wX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSlcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDEzLXtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTQyOT1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfc2V2X3NucF9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTQzMC17XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjQzMTpcdHJldHVybiBfX19fc2V2X3NucF9ndWVzdCh2Y3B1LVx1MDAzZWt2bSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTQzMi19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODkzCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgYF9fX19zZXZfc25wX2d1ZXN0YCBmdW5jdGlvbiwgdGhpbmtpbmcgYWJvdXQgaXQgZnJvbSBteSBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIFNFVi1TTlAgR3Vlc3QgSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIGFuZCBkaXNzZWN0IHRoaXMgYF9fX19zZXZfc25wX2d1ZXN0YCBmdW5jdGlvbiB3aXRoaW4gdGhlIEFNRCBTRVYtU05QIGluZnJhc3RydWN0dXJlLiBJIGtub3cgaXQmIzM5O3MgZGVmaW5lZCBpbiBgYXJjaC94ODYva3ZtL3N2bS9zdm0uaGAsIGFuZCB0aGF0IHN1Z2dlc3RzIHRoaXMgaXMgdGhlIGNvcmUgb2YgaG93IHdlIGhhbmRsZSBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIHdpdGggU2VjdXJlIE5lc3RlZCBQYWdpbmcgd2l0aGluIHRoZSBLVk0gZW52aXJvbm1lbnQuCgpNeSBpbml0aWFsIHRob3VnaHRzIGFyZSB0aGF0IHRoaXMgaXMgYSBjcml0aWNhbCBwaWVjZSwgbGlrZWx5IHRoZSBlbnRyeSBwb2ludCBvciBhIGNlbnRyYWwgaGFuZGxlciBmb3IgU0VWLVNOUCBndWVzdCBvcGVyYXRpb25zLiBJdCYjMzk7cyBwcm9iYWJseSB0aGUgZnVuY3Rpb24gdGhhdCBLVk0gdXNlcyB0byBpbnRlcmZhY2Ugd2l0aCB0aGUgQU1EIFNlY3VyZSBQcm9jZXNzb3IuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBvcGVyYXRpb25zIGxpa2U6IHNldHRpbmcgdXAgdGhlIGd1ZXN0JiMzOTtzIG1lbW9yeSBlbmNyeXB0aW9uIGNvbnRleHQsIGhhbmRsaW5nIHBhZ2UgZmF1bHRzLCBtYW5hZ2luZyB0aGUgYXR0ZXN0YXRpb24gcHJvY2VzcywgYW5kIG1heWJlIGV2ZW4gZGVhbGluZyB3aXRoIHRoZSBpbnRyaWNhY2llcyBvZiBzZWN1cmUgbWlncmF0aW9uLiBJIHdhbnQgdG8gY2hlY2sgaG93IHRoZSBjb2RlIGRlYWxzIHdpdGggdGhlIHNwZWNpZmljIGNoYWxsZW5nZXMgb2YgbmVzdGVkIHBhZ2luZyBpbiBhbiBTRVYtU05QIGNvbnRleHQg4oCTIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGUgaG9zdCYjMzk7cyBhbmQgZ3Vlc3QmIzM5O3MgcGFnZSB0YWJsZXMgbXVzdCBiZSBjb21wbGV4LgoKSSYjMzk7bSBhbHNvIGN1cmlvdXMgYWJvdXQgdGhlIGBzdHJ1Y3Qga3ZtICprdm1gIHBhcmFtZXRlci4gVGhpcyBsaWtlbHkgZ2l2ZXMgdXMgYWNjZXNzIHRvIGFsbCB0aGUgS1ZNIGNvbnRleHQgYW5kIHN0YXRlIHdlIG5lZWQgdG8gcHJvcGVybHkgbWFuYWdlIHRoZSBndWVzdCwgc28gbGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHByZWNpc2VseSB3aGF0IGluZm9ybWF0aW9uIGl0IHByb3ZpZGVzLiBJ4oCZbSB0aGlua2luZyB0aGVyZSB3aWxsIGJlIGEgbG90IG9mIGNhbGxzIHRvIHRoZSBBTUQgU2VjdXJlIFByb2Nlc3Nvciwgc28gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGEgbG90IG9mIGlubGluZSBhc3NlbWJseSwgb3IgcGVyaGFwcyBjYWxscyB0byBzcGVjaWZpYyBkcml2ZXIgZnVuY3Rpb25zLiBJJiMzOTtsbCBiZSBwYXJ0aWN1bGFybHkga2VlbiB0byBzZWUgaG93IHRoZXkgaGFuZGxlIG1lbW9yeSBtYW5hZ2VtZW50IGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIGFuIFNOUCBndWVzdC4KCkxldCYjMzk7cyBnZXQgcmVhZGluZyBhbmQgc2VlIGhvdyB3ZWxsIG15IGFzc3VtcHRpb25zIGFsaWduIHdpdGggdGhlIHJlYWxpdHkhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9zdm0uaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDAwOlx0XG4gNDAxOlx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fX19zZXZfZ3Vlc3Qoc3RydWN0IGt2bSAqa3ZtKVxuIDQwMjpcdHtcbiA0MDM6XHRcdHJldHVybiB0b19rdm1fc2V2X2luZm8oa3ZtKS1cdTAwM2VhY3RpdmU7XG4gNDA0Olx0fVxuIDQwNTpcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX19fc2V2X2VzX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSlcbiA0MDY6XHR7XG4gNDA3Olx0XHRzdHJ1Y3Qga3ZtX3Nldl9pbmZvICpzZXYgPSB0b19rdm1fc2V2X2luZm8oa3ZtKTtcbiA0MDg6XHRcbiA0MDk6XHRcdHJldHVybiBzZXYtXHUwMDNlZXNfYWN0aXZlIFx1MDAyNlx1MDAyNiAhV0FSTl9PTl9PTkNFKCFzZXYtXHUwMDNlYWN0aXZlKTtcbiA0MTA6XHR9XG4gNDExOlx0XG4gNDEyOlx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fX19zZXZfc25wX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSlcbiA0MTM6XHR7XG4gNDE0Olx0XHRzdHJ1Y3Qga3ZtX3Nldl9pbmZvICpzZXYgPSB0b19rdm1fc2V2X2luZm8oa3ZtKTtcbiA0MTU6XHRcbiA0MTY6XHRcdHJldHVybiAoc2V2LVx1MDAzZXZtc2FfZmVhdHVyZXMgXHUwMDI2IFNWTV9TRVZfRkVBVF9TTlBfQUNUSVZFKSBcdTAwMjZcdTAwMjZcbiA0MTc6XHRcdCAgICAgICAhV0FSTl9PTl9PTkNFKCFfX19fc2V2X2VzX2d1ZXN0KGt2bSkpO1xuIDQxODpcdH1cbiA0MTk6XHRcbiA0MjA6XHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfc2V2X2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiA0MjE6XHR7XG4gNDIyOlx0XHRyZXR1cm4gX19fX3Nldl9ndWVzdCh2Y3B1LVx1MDAzZWt2bSk7XG4gNDIzOlx0fVxuIDQyNDpcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19zZXZfZXNfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIDQyNTpcdHtcbiA0MjY6XHRcdHJldHVybiBfX19fc2V2X2VzX2d1ZXN0KHZjcHUtXHUwMDNla3ZtKTtcbiA0Mjc6XHR9XG4gNDI4Olx0XG4gNDI5Olx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3Nldl9zbnBfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIDQzMDpcdHtcbiA0MzE6XHRcdHJldHVybiBfX19fc2V2X3NucF9ndWVzdCh2Y3B1LVx1MDAzZWt2bSk7XG4gNDMyOlx0fVxuIDQzMzpcdCNlbHNlXG4gNDM0Olx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3Nldl9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTMyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgSHlwb3RoZXNpczogS1ZNIFNWTSBhbmQgU0VWLVNOUCB2aWEgSW9jdGxzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgZnV6emluZyBLVk0mIzM5O3MgU1ZNIHdpdGggU0VWLVNOUC4gVGhlIGNvcmUgcXVlc3Rpb24gaXM6IGNhbiBJIGFjdHVhbGx5IGxldmVyYWdlIEtWTSBpb2N0bHMsIG9yIGV2ZW4gVk0gZXhlY3V0aW9uIGluIFFFTVUvU3l6a2FsbGVyLCB0byB0cmlnZ2VyIGFuZCB0aGVyZWZvcmUsIGZ1enogdGhlIFNFVi1TTlAgZnVuY3Rpb25hbGl0eT8KClJpZ2h0LCBTeXprYWxsZXIgYWxyZWFkeSBoZWF2aWx5IGV4ZXJjaXNlcyBLVk0uIEkga25vdyBpdCB0aHJvd3MgZXZlcnl0aGluZyBhdCB0aGUgYEtWTV9DUkVBVEVfVk1gLCBgS1ZNX01FTU9SWV9FTkNSWVBUX09QYCwgYEtWTV9SVU5gLCBhbmQgb3RoZXIgaW9jdGxzLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gQnV0IHRoZSByZWFsIGtleSBpcywgKndoaWNoKiBpb2N0bHMgc3BlY2lmaWNhbGx5IHRvdWNoIHRoZSBTRVYvU05QIGNvbW1hbmRzIG9yLCBtb3JlIGNyaXRpY2FsbHksIHRyaWdnZXIgYSBWTUdFWElUPyBUaGF0JiMzOTtzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBzdHVmZiBoYXBwZW5zLgoKSSYjMzk7dmUgZ290IGEgaHVuY2ggdGhhdCBgS1ZNX01FTU9SWV9FTkNSWVBUX09QYCwgYW5kIGZ1bmN0aW9ucyBsaWtlIGBzZXZfbWVtX2VuY19pb2N0bGAgb3IgYHNldl9oYW5kbGVfdm1nZXhpdGAgYXJlIHRoZSByZWxldmFudCB0YXJnZXRzLiBTbywgSSBuZWVkIHRvIGRpZyBpbnRvIHRob3NlLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIGZvY3VzZWQgc2VhcmNoIGZvciBgc2V2X2hhbmRsZV92bWdleGl0YCBpdHNlbGYsIG9yIG1heWJlIGBLVk1fRVhJVF9TTlBfUkVRX0NFUlRTYCBvciwgcGVyaGFwcyBtb3JlIGdlbmVyYWxseSwgY2FsbHMgdG8gYHNldl9pc3N1ZV9jbWRgLiBUaGF0IHNob3VsZCBnZXQgbWUgcG9pbnRlZCBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZSBhbmQgc2VlIHdoYXQgc3VyZmFjZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nldl9oYW5kbGVfdm1nZXhpdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9zZXYuYz00MjkxPXN0YXRpYyBpbnQgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBncGFfdCByZXFfZ3BhLCBncGFfdCByZXNwX2dwYSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQzNTItXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQzNTM6c3RhdGljIGludCBzZXZfaGFuZGxlX3ZtZ2V4aXRfbXNyX3Byb3RvY29sKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00MzU0LXtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQ0OTc9c3RhdGljIGJvb2wgaXNfc25wX29ubHlfdm1nZXhpdCh1NjQgZXhpdF9jb2RlKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDUwOS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDUxMDppbnQgc2V2X2hhbmRsZV92bWdleGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDUxMS17XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NTE4LVx0aWYgKGdoY2JfZ3BhIFx1MDAyNiBHSENCX01TUl9JTkZPX01BU0spXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ1MTk6XHRcdHJldHVybiBzZXZfaGFuZGxlX3ZtZ2V4aXRfbXNyX3Byb3RvY29sKHN2bSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ1MjAtXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0zMzQ3PXN0YXRpYyBpbnQgKCpjb25zdCBzdm1fZXhpdF9oYW5kbGVyc1tdKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpID0ge1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzQyMS0jaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjM0MjI6XHRbU1ZNX0VYSVRfVk1HRVhJVF1cdFx0XHQ9IHNldl9oYW5kbGVfdm1nZXhpdCxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzQyMy0jZW5kaWZcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTM2MzY9aW50IHN2bV9pbnZva2VfZXhpdF9oYW5kbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IF9fZXhpdF9jb2RlKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzY2NC1cdGVsc2UgaWYgKGV4aXRfY29kZSA9PSBTVk1fRVhJVF9WTUdFWElUKVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozNjY1Olx0XHRyZXR1cm4gc2V2X2hhbmRsZV92bWdleGl0KHZjcHUpO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNjY2LSNlbmRpZlxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9OTkxPXZvaWQgc2V2X2d1ZXN0X21lbW9yeV9yZWNsYWltZWQoc3RydWN0IGt2bSAqa3ZtKTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6OTkyOmludCBzZXZfaGFuZGxlX3ZtZ2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtOTkzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDI0NgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDQ5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEVycm9yIEhhbmRsaW5nIGluIGBzZXZfaGFuZGxlX3ZtZ2V4aXRgKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgc2V2X2hhbmRsZV92bWdleGl0YCBpcyB0aGUgZXhpdCBoYW5kbGVyIGZvciBgU1ZNX0VYSVRfVk1HRVhJVGAsIHNwZWNpZmljYWxseSBmb3IgQU1EJiMzOTtzIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgd2l0aGluIEtWTS4gV2hlbiBhIGd1ZXN0IHRyaWdnZXJzIGEgVk1HRVhJVCB3aXRoIGNlcnRhaW4gY29kZXMsIHNwZWNpZmljYWxseSBgU1ZNX1ZNR0VYSVRfR1VFU1RfUkVRVUVTVGAgb3IgYFNWTV9WTUdFWElUX0VYVF9HVUVTVF9SRVFVRVNUYCwgaXQgY2FsbHMgZWl0aGVyIGBzbnBfaGFuZGxlX2d1ZXN0X3JlcWAgb3IgYHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcWAuIEkgYWxzbyBrbm93IHRoYXQgYHNucF9jb21wbGV0ZV9yZXFfY2VydHNgIOKAkyB3aGljaCBpdHNlbGYgcmVsaWVzIG9uIGBzbnBfaGFuZGxlX2d1ZXN0X3JlcWAg4oCTIGlzIHRyaWdnZXJlZCBieSBgdmNwdS0mZ3Q7YXJjaC5jb21wbGV0ZV91c2Vyc3BhY2VfaW9gIGFmdGVyIHVzZXJzcGFjZSBjb21wbGV0ZXMgYEtWTV9FWElUX1NOUF9SRVFfQ0VSVFNgIGFuZCBjYWxscyBgaW9jdGwodmNwdV9mZCwgS1ZNX1JVTilgLgoKTm93LCB0aGUgcGF0Y2gmIzM5O3MgY2hhbmdlcyBhcmUgY3J1Y2lhbC4gSSBuZWVkIHRvIGZvY3VzIG9uIGhvdyB0aGUgZXJyb3IgaGFuZGxpbmcgaGFzIGJlZW4gbW9kaWZpZWQgd2l0aGluIGBzbnBfaGFuZGxlX2d1ZXN0X3JlcWAgYW5kIGBzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXFgLgoKUHJldmlvdXNseSwgZXJyb3JzIGZyb20gYGt2bV9yZWFkX2d1ZXN0YCBhbmQgYGt2bV93cml0ZV9ndWVzdGAgd2l0aGluIGBzbnBfaGFuZGxlX2d1ZXN0X3JlcWAgd291bGQgcHJvcGFnYXRlIGFzIGAtRUlPYCwgd2hpY2ggZXNzZW50aWFsbHkgbWVhbnMgYSBnZW5lcmFsIEkvTyBlcnJvciB3b3VsZCBiZSByZXR1cm5lZCBhbGwgdGhlIHdheSB1cCB0byBLVk0gdXNlcnNwYWNlIHZpYSBga3ZtX3ZjcHVfcnVuYC4gTm93LCB0aGUgcGF0Y2ggcmVkaXJlY3RzIHRoZXNlIGVycm9ycy4gSW5zdGVhZCBvZiByZXR1cm5pbmcgYC1FSU9gLCBmYWlsdXJlcyBub3cgY2FsbCBgc3ZtX3ZtZ2V4aXRfYmFkX2lucHV0KHN2bSwgR0hDQl9FUlJfSU5WQUxJRF9JTlBVVCk7IHJldHVybiAxO2AuIFRoaXMgaXMgc2lnbmlmaWNhbnQgYmVjYXVzZSBpdCYjMzk7cyB3cml0aW5nIGFuIGVycm9yIGNvZGUgaW50byB0aGUgR0hDQiBhbmQgdGhlbiByZXN1bWluZyB0aGUgZ3Vlc3QgaW5zdGVhZCBvZiBleGl0aW5nIHRocm91Z2ggdGhlIHN0YW5kYXJkIEtWTSBlcnJvciBwYXRoLgoKVGhlIHNhbWUgcGF0dGVybiBhcHBsaWVzIHRvIGBzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXFgLiBFcnJvcnMgZnJvbSBga3ZtX3JlYWRfZ3Vlc3RgIG9mIHRoZSBgbXNnX3R5cGVgIGFuZCBmcm9tIGBrdm1fY2xlYXJfZ3Vlc3RgIG9mIHRoZSBjZXJ0aWZpY2F0ZSB0YWJsZSBhbHNvIHByZXZpb3VzbHkgcmV0dXJuZWQgYC1FSU9gLiBUaGUgcGF0Y2ggY2hhbmdlcyB0aGVzZSB0byBqdW1wIHRvIGByZXF1ZXN0X2ludmFsaWRgLCB3aGljaCB0aGVuIGNhbGxzIGBzdm1fdm1nZXhpdF9iYWRfaW5wdXRgIGluIHRoZSBzYW1lIHdheSwgcGxhY2luZyBhbiBlcnJvciBpbiB0aGUgR0hDQiBhbmQgcmVzdW1pbmcuIFRoaXMgaW5kaWNhdGVzIGFuIGVmZm9ydCB0byBrZWVwIHRoZSBndWVzdCBydW5uaW5nLCBldmVuIGluIHRoZSBwcmVzZW5jZSBvZiB0aGVzZSBlcnJvcnMsIHdoaWNoIGlzIGludGVyZXN0aW5nLgoKVG8gY29tcGxldGUgdGhpcyBhbmFseXNpcywgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBjaGVjayB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgZm9yIGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBuZXcgY29uZmlndXJhdGlvbiBpbXBsaWNhdGlvbnMuIEkgc2hvdWxkIHNlYXJjaCB3aXRoaW4gYGFyY2gveDg2L2t2bS9LY29uZmlnYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7S1ZNX0FNRF9TRVZ8S1ZNX0FNRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MjA9Y29uZmlnIEtWTV9YODZcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxOlx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxuYXJjaC94ODYva3ZtL0tjb25maWctMjItXHRzZWxlY3QgS1ZNX0NPTU1PTlxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTEzND1jb25maWcgS1ZNX0lOVEVMX1REWFxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTgtXHRkZWZhdWx0IHlcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1OTpcdGRlcGVuZHMgb24gS1ZNX0FNRCBcdTAwMjZcdTAwMjYgWDg2XzY0XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNjA6XHRkZXBlbmRzIG9uIENSWVBUT19ERVZfU1BfUFNQIFx1MDAyNlx1MDAyNiAhKEtWTV9BTUQ9eSBcdTAwMjZcdTAwMjYgQ1JZUFRPX0RFVl9DQ1BfREQ9bSlcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE2MS1cdHNlbGVjdCBBUkNIX0hBU19DQ19QTEFURk9STVxuLS1cbmFyY2gveDg2L2t2bS9NYWtlZmlsZT0yND1rdm0tYW1kLXlcdFx0JiM0Mzs9IHN2bS9zdm0ubyBzdm0vdm1lbnRlci5vIHN2bS9wbXUubyBzdm0vbmVzdGVkLm8gc3ZtL2F2aWMub1xuYXJjaC94ODYva3ZtL01ha2VmaWxlLTI1LVxuYXJjaC94ODYva3ZtL01ha2VmaWxlOjI2Omt2bS1hbWQtJChDT05GSUdfS1ZNX0FNRF9TRVYpXHQmIzQzOz0gc3ZtL3Nldi5vXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtMjcta3ZtLWFtZC0kKENPTkZJR19LVk1fSFlQRVJWKVx0JiM0Mzs9IHN2bS9oeXBlcnYub1xuLS1cbmFyY2gveDg2L2t2bS9NYWtlZmlsZT0zNj1vYmotJChDT05GSUdfS1ZNX0lOVEVMKVx0JiM0Mzs9IGt2bS1pbnRlbC5vXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6Mzc6b2JqLSQoQ09ORklHX0tWTV9BTUQpXHQmIzQzOz0ga3ZtLWFtZC5vXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtMzgtXG4tLVxuYXJjaC94ODYva3ZtL2t2bS1hc20tb2Zmc2V0cy5jPTEzPXN0YXRpYyB2b2lkIF9fdXNlZCBjb21tb24odm9pZClcbmFyY2gveDg2L2t2bS9rdm0tYXNtLW9mZnNldHMuYy0xNC17XG5hcmNoL3g4Ni9rdm0va3ZtLWFzbS1vZmZzZXRzLmM6MTU6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfS1ZNX0FNRCkpIHtcbmFyY2gveDg2L2t2bS9rdm0tYXNtLW9mZnNldHMuYy0xNi1cdFx0QkxBTksoKTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTMwODY9dm9pZCBfX2luaXQgc2V2X2hhcmR3YXJlX3NldHVwKHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMTE2LVx0ICovXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMxMTc6XHRpZiAoSVNfQlVJTFRJTihDT05GSUdfS1ZNX0FNRCkgXHUwMDI2XHUwMDI2IHNldl9tb2R1bGVfaW5pdCgpKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMTE4LVx0XHRnb3RvIG91dDtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTMzNDc9c3RhdGljIGludCAoKmNvbnN0IHN2bV9leGl0X2hhbmRsZXJzW10pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkgPSB7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNDIwLVx0W1NWTV9FWElUX0FWSUNfVU5BQ0NFTEVSQVRFRF9BQ0NFU1NdXHQ9IGF2aWNfdW5hY2NlbGVyYXRlZF9hY2Nlc3NfaW50ZXJjZXB0aW9uLFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozNDIxOiNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzQyMi1cdFtTVk1fRVhJVF9WTUdFWElUXVx0XHRcdD0gc2V2X2hhbmRsZV92bWdleGl0LFxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MzYzNj1pbnQgc3ZtX2ludm9rZV9leGl0X2hhbmRsZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgX19leGl0X2NvZGUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNjYyLVx0XHRyZXR1cm4gbnBmX2ludGVyY2VwdGlvbih2Y3B1KTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MzY2MzojaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM2NjQtXHRlbHNlIGlmIChleGl0X2NvZGUgPT0gU1ZNX0VYSVRfVk1HRVhJVClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTQ3MDQ9c3RhdGljIGJvb2wgc3ZtX2hhc19lbXVsYXRlZF9tc3Ioc3RydWN0IGt2bSAqa3ZtLCB1MzIgaW5kZXgpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00NzEzLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo0NzE0OiNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDcxNS1cdFx0Lypcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTUzMjg9c3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NDQyLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo1NDQzOiNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTQ0NC1cdC52Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uID0gc2V2X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24sXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD02Nj1lbnVtIHtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTk3LVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo5ODojaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTk5LXN0cnVjdCBrdm1fc2V2X2luZm8ge1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9MTI3PXN0cnVjdCBrdm1fc3ZtIHtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTEzNS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6MTM2OiNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMTM3LVx0c3RydWN0IGt2bV9zZXZfaW5mbyBzZXZfaW5mbztcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTM5MD1zdGF0aWMgX19hbHdheXNfaW5saW5lIHN0cnVjdCBrdm1fc3ZtICp0b19rdm1fc3ZtKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTM5NC1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6Mzk1OiNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMzk2LXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IGt2bV9zZXZfaW5mbyAqdG9fa3ZtX3Nldl9pbmZvKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTk4MD12b2lkIHNldl9lc191bm1hcF9naGNiKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtOTgxLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo5ODI6I2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC05ODMtYm9vbCBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vdm1lbnRlci5TPTIxMD1TWU1fRlVOQ19FTkQoX19zdm1fdmNwdV9ydW4pXG5hcmNoL3g4Ni9rdm0vc3ZtL3ZtZW50ZXIuUy0yMTEtXG5hcmNoL3g4Ni9rdm0vc3ZtL3ZtZW50ZXIuUzoyMTI6I2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL3N2bS92bWVudGVyLlMtMjEzLVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vdm1lbnRlci5TPTI4Mz1TWU1fRlVOQ19FTkQoX19zdm1fc2V2X2VzX3ZjcHVfcnVuKVxuYXJjaC94ODYva3ZtL3N2bS92bWVudGVyLlM6Mjg0OiNlbmRpZiAvKiBDT05GSUdfS1ZNX0FNRF9TRVYgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0OTkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtWTS1BTUQgU0VWIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGBDT05GSUdfS1ZNX0FNRF9TRVZgIGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBJIGtub3cgdGhpcyBpbnRpbWF0ZWx5OyBpdCYjMzk7cyB0aGUgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiBzdXBwb3J0IGZvciBBTUQgcHJvY2Vzc29ycywgYSBjcml0aWNhbCBjb21wb25lbnQuIFNvLCBJIG5lZWQgdG8gdmVyaWZ5IGl0cyBjb25maWd1cmF0aW9uLgoKRmlyc3QsIEkgc2VlIHRoYXQgYEtWTV9BTURgIGFuZCBgWDg2XzY0YCBhcmUgcmVxdWlyZWQsIHRoYXQgbWFrZXMgc2Vuc2UgLSBBTUQgcGxhdGZvcm0gYW5kIDY0LWJpdCBhcmNoaXRlY3R1cmUgYXJlIGV4cGVjdGVkLiBBbHNvLCBgQ1JZUFRPX0RFVl9TUF9QU1BgIGlzIG5lZWRlZC4gVGhhdOKAmXMgcHJvYmFibHkgdGhlIEFNRCBTZWN1cmUgUHJvY2Vzc29yLCBvciBQU1AsIGNyeXB0byBkZXZpY2UgZHJpdmVyLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGF0LiBGaW5hbGx5LCB0aGVyZSYjMzk7cyBhIG5lZ2F0aW9uOiBgIShLVk1fQU1EPXkgJmFtcDsmYW1wOyBDUllQVE9fREVWX0NDUF9ERD1tKWAuIE1lYW5pbmcsIGl0JiMzOTtzIG5vdCBhbGxvd2VkIGZvciBLVk1fQU1EIHRvIGJlICYjMzk7eSYjMzk7IEFORCBgQ1JZUFRPX0RFVl9DQ1BfRERgIHRvIGJlIGEgbW9kdWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBDUllQVE9fREVWX0NDUF9ERGAgYWN0dWFsbHkgaXMgYW5kIHdoeSBpdCBjYW5ub3QgYmUgYSBtb2R1bGUgaW4gdGhpcyBjb250ZXh0LgoKUmlnaHQuIEkgbmVlZCB0byBkZWx2ZSBpbnRvIHRoZSBgZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWdgIGZpbGUgdG8gc2VlIHdoYXQgYENPTkZJR19DUllQVE9fREVWX1NQX1BTUGAgZGVwZW5kcyBvbiwgYW5kIHVuZGVyc3RhbmQgdGhpcyBkZXBlbmRlbmN5IGNoYWluIGZ1bGx5LiBUaGlzIHdpbGwgaGVscCBtZSBncmFzcCB0aGUgaW1wbGljYXRpb25zIGZvciB0aGUgb3ZlcmFsbCBLVk0tQU1EIFNFViBjb25maWd1cmF0aW9uLiBMZXQgbWUgcXVpY2tseSBncmFiIHRoZSBLY29uZmlnIGZpbGUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENSWVBUT19ERVZfU1BfUFNQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnPTIzPWNvbmZpZyBDUllQVE9fREVWX0NDUF9DUllQVE9cbi0tXG5kcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZy0zNy1cbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnOjM4OmNvbmZpZyBDUllQVE9fREVWX1NQX1BTUFxuZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWctMzktXHRib29sIFwmIzM0O1BsYXRmb3JtIFNlY3VyaXR5IFByb2Nlc3NvciAoUFNQKSBkZXZpY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgwNDMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgQ3J5cHRvIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBgZHJpdmVycy9jcnlwdG8vY2NwL2AgZGlyZWN0b3J5LCBzcGVjaWZpY2FsbHkgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgdGhlIHJlbGV2YW50IHNldHRpbmdzIGFyZSBwcm9iYWJseSBkZWZpbmVkIGluIHRoZSBgS2NvbmZpZ2AgZmlsZSB3aXRoaW4gdGhhdCBkaXJlY3RvcnkuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGFyb3VuZCBsaW5lIDM4LCBsaWtlbHkgd2hlcmUgY29yZSBvcHRpb25zIGFyZSBkZWZpbmVkLiBUaGlzIHdvdWxkIGdpdmUgbWUgdGhlIGJhc2UgZGVmaW5pdGlvbnMgSSBuZWVkIHRvIGV4cGxvcmUuIFRoaXMgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBkcml2ZXIgaXMgY29uZmlndXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjU6XHRcdGRlZmF1bHQgbVxuICAyNjpcdFx0ZGVwZW5kcyBvbiBDUllQVE9fREVWX0NDUF9ERFxuICAyNzpcdFx0ZGVwZW5kcyBvbiBDUllQVE9fREVWX1NQX0NDUFxuICAyODpcdFx0c2VsZWN0IENSWVBUT19IQVNIXG4gIDI5Olx0XHRzZWxlY3QgQ1JZUFRPX1NLQ0lQSEVSXG4gIDMwOlx0XHRzZWxlY3QgQ1JZUFRPX0FVVEhFTkNcbiAgMzE6XHRcdHNlbGVjdCBDUllQVE9fUlNBXG4gIDMyOlx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9BRVNcbiAgMzM6XHRcdGhlbHBcbiAgMzQ6XHRcdCAgU3VwcG9ydCBmb3IgdXNpbmcgdGhlIGNyeXB0b2dyYXBoaWMgQVBJIHdpdGggdGhlIEFNRCBDcnlwdG9ncmFwaGljXG4gIDM1Olx0XHQgIENvcHJvY2Vzc29yLiBUaGlzIG1vZHVsZSBzdXBwb3J0cyBvZmZsb2FkIG9mIFNIQSBhbmQgQUVTIGFsZ29yaXRobXMuXG4gIDM2Olx0XHQgIElmIHlvdSBjaG9vc2UgJiMzOTtNJiMzOTsgaGVyZSwgdGhpcyBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2NwX2NyeXB0by5cbiAgMzc6XHRcbiAgMzg6XHRjb25maWcgQ1JZUFRPX0RFVl9TUF9QU1BcbiAgMzk6XHRcdGJvb2wgXCYjMzQ7UGxhdGZvcm0gU2VjdXJpdHkgUHJvY2Vzc29yIChQU1ApIGRldmljZVwmIzM0O1xuICA0MDpcdFx0ZGVmYXVsdCB5XG4gIDQxOlx0XHRkZXBlbmRzIG9uIENSWVBUT19ERVZfQ0NQX0REIFx1MDAyNlx1MDAyNiBYODZfNjQgXHUwMDI2XHUwMDI2IEFNRF9JT01NVVxuICA0MjpcdFx0c2VsZWN0IFBDSV9UU00gaWYgUENJXG4gIDQzOlx0XHRoZWxwXG4gIDQ0Olx0XHQgUHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgQU1EIFBsYXRmb3JtIFNlY3VyaXR5IFByb2Nlc3NvciAoUFNQKS5cbiAgNDU6XHRcdCBUaGUgUFNQIGlzIGEgZGVkaWNhdGVkIHByb2Nlc3NvciB0aGF0IHByb3ZpZGVzIHN1cHBvcnQgZm9yIGtleVxuICA0NjpcdFx0IG1hbmFnZW1lbnQgY29tbWFuZHMgaW4gU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBtb2RlLFxuICA0NzpcdFx0IGFsb25nIHdpdGggc29mdHdhcmUtYmFzZWQgVHJ1c3RlZCBFeGVjdXRpb24gRW52aXJvbm1lbnQgKFRFRSkgdG9cbiAgNDg6XHRcdCBlbmFibGUgdGhpcmQtcGFydHkgdHJ1c3RlZCBhcHBsaWNhdGlvbnMuXG4gIDQ5Olx0XG4gIDUwOlx0Y29uZmlnIENSWVBUT19ERVZfQ0NQX0RFQlVHRlNcbiAgNTE6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIENDUCBJbnRlcm5hbHMgaW4gRGVidWdGU1wmIzM0O1xuICA1MjpcdFx0ZGVmYXVsdCBuXG4gIDUzOlx0XHRkZXBlbmRzIG9uIENSWVBUT19ERVZfU1BfQ0NQXG4gIDU0Olx0XHRoZWxwXG4gIDU1Olx0XHQgIEV4cG9zZSBDQ1AgZGV2aWNlIGluZm9ybWF0aW9uIHN1Y2ggYXMgb3BlcmF0aW9uIHN0YXRpc3RpY3MsIGZlYXR1cmVcbiAgNTY6XHRcdCAgaW5mb3JtYXRpb24sIGFuZCBkZXNjcmlwdG9yIHF1ZXVlIGNvbnRlbnRzLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODY4NAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDQ0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNLUFNRCBTRVYgRnV6emluZyBSZWFjaGFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgd2UgaGF2ZSBhIGxpc3Qgb2YgcG90ZW50aWFsbHkgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zOiBgQ09ORklHX0tWTV9BTURgLCBgQ09ORklHX0tWTV9BTURfU0VWYCwgYENPTkZJR19DUllQVE9fREVWX1NQX1BTUGAsIGBDT05GSUdfQ1JZUFRPX0RFVl9DQ1BfRERgLCBhbmQgYENPTkZJR19BTURfSU9NTVVgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGhpZGRlbiBkZXBlbmRlbmNpZXMuCgpOb3csIGZvY3VzaW5nIG9uIGBLVk1fQU1EX1NFVmAsIHRoZSBpbW1lZGlhdGUgcHJlcmVxdWlzaXRlcyBzZWVtIHRvIGJlIGBLVk1fQU1EYCwgYENSWVBUT19ERVZfU1BfUFNQYCwgYENSWVBUT19ERVZfQ0NQX0REYCwgYEFNRF9JT01NVWAsIGFuZCwgb2J2aW91c2x5LCBgWDg2XzY0YCBnaXZlbiB0aGUgQU1ENjQgdGFyZ2V0LiBUaGF0IG1ha2VzIHNlbnNlLgoKVGhlIHJlYWwgcXVlc3Rpb24gaXMsIGlzIHRoaXMgY29kZSByZWFjaGFibGUgYW5kIHRoZXJlZm9yZSBmdXp6YWJsZT8gVGhlIGluc3RydWN0aW9ucyBlbXBoYXNpemUgcmVhY2hhYmlsaXR5IGFzIHRoZSBrZXkgY3JpdGVyaW9uLiBUaGV5IHN0YXRlIGZ1enppbmcgaXMgb25seSBlZmZlY3RpdmUgZm9yIGNvZGUgdGhhdCAqYWN0dWFsbHkqIGV4ZWN1dGVzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCB1c2luZyBzb2Z0d2FyZSBlbXVsYXRlZCBkZXZpY2VzLgoKVGhlIGNyaXRpY2FsIHVuY2VydGFpbnR5IGhlcmUgaXMgd2hldGhlciBBTUQgU0VWL1NFVi1TTlAgb3BlcmF0ZXMgaW4gdGhlc2Ugc3RhbmRhcmQgdmlydHVhbGl6ZWQgY29udGV4dHMsIG9yIGlmIGl0IGRlbWFuZHMgbmVzdGVkIHZpcnR1YWxpemF0aW9uIG9yIHNwZWNpZmljIFFFTVUgY29uZmlndXJhdGlvbnMuIENhbiBLVk0gYmUgZWZmZWN0aXZlbHkgZnV6emVkIGluIGEgdHlwaWNhbCBRRU1VIG9yIEdDRSBzZXR1cD8KCk15IGV4cGVyaWVuY2Ugd2l0aCBTeXprYWxsZXIgY29tZXMgaW50byBwbGF5IGhlcmUuIFdlJiMzOTtyZSBydW5uaW5nIFN5emthbGxlciBpbnN0YW5jZXMgKndpdGhpbiogUUVNVSBvciBHQ0UgVk1zLiBTeXprYWxsZXIgaGFzIGRlc2NyaXB0aW9ucyBmb3IgZnVuY3Rpb25zIGxpa2UgYHN5el9rdm1fc2V0dXBfY3B1YCBhbmQgYGlvY3RsJEtWTV8qYC4gU28sIGV2ZW4gd2l0aG91dCAqcGh5c2ljYWwqIFNFVi1TTlAgaGFyZHdhcmUgb24gdGhlIGhvc3QsIGlzIEtWTSBjb2RlIHN0aWxsIHJlYWNoYWJsZSB2aWEgdGhlc2UgbWVjaGFuaXNtcz8gRG9lcyBTRVYtU05QICpyZXF1aXJlKiB0aGUgaG9zdCB0byBoYXZlIHBoeXNpY2FsIFNFVi1TTlAgaGFyZHdhcmU/CgpJIG5lZWQgdG8gZGl2ZSBkZWVwZXIuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCBgc2V2X2hhcmR3YXJlX3NldHVwYCBhbmQgYHNldl9zbnBfaW5pdGAgaW4gYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgIHRvIHNlZSBpZiB0aG9zZSBmdW5jdGlvbnMgcHJvdmlkZSBpbnNpZ2h0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2V2X3NucF9zdXBwb3J0ZWR8c25wX2hhbmRsZV9ndWVzdF9yZXEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzA4Nj12b2lkIF9faW5pdCBzZXZfaGFyZHdhcmVfc2V0dXAodm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMwODktXHRzdHJ1Y3Qgc2V2X3BsYXRmb3JtX2luaXRfYXJncyBpbml0X2FyZ3MgPSB7MH07XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMwOTA6XHRib29sIHNldl9zbnBfc3VwcG9ydGVkID0gZmFsc2U7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMwOTEtXHRib29sIHNldl9lc19zdXBwb3J0ZWQgPSBmYWxzZTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMxOTAtXHRzZXZfZXNfc3VwcG9ydGVkID0gdHJ1ZTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzE5MTpcdHNldl9zbnBfc3VwcG9ydGVkID0gc2V2X3NucF9lbmFibGVkIFx1MDAyNlx1MDAyNiBjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMTkyLVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzIwMS1cdFx0aWYgKHNldl9wbGF0Zm9ybV9pbml0KFx1MDAyNmluaXRfYXJncykpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMyMDI6XHRcdFx0c2V2X3N1cHBvcnRlZCA9IHNldl9lc19zdXBwb3J0ZWQgPSBzZXZfc25wX3N1cHBvcnRlZCA9IGZhbHNlO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMjAzOlx0XHRlbHNlIGlmIChzZXZfc25wX3N1cHBvcnRlZClcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzIwNDpcdFx0XHRzZXZfc25wX3N1cHBvcnRlZCA9IGlzX3Nldl9zbnBfaW5pdGlhbGl6ZWQoKTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzIwNS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzIwNjpcdFx0aWYgKHNldl9zbnBfc3VwcG9ydGVkKSB7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyMDctXHRcdFx0c25wX3N1cHBvcnRlZF9wb2xpY3lfYml0cyA9IHNldl9nZXRfc25wX3BvbGljeV9iaXRzKCkgXHUwMDI2XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjMwLVx0XHR2bV90eXBlcyB8PSBCSVQoS1ZNX1g4Nl9TRVZfRVNfVk0pO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMjMxOlx0aWYgKHNldl9zbnBfc3VwcG9ydGVkKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjMyLVx0XHR2bV90eXBlcyB8PSBCSVQoS1ZNX1g4Nl9TTlBfVk0pO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzI0Ni1cdFx0cHJfaW5mbyhcJiMzNDtTRVYtU05QICVzIChBU0lEcyAldSAtICV1KVxcblwmIzM0OyxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzI0NzpcdFx0XHRzZXZfc3RyX2ZlYXR1cmVfc3RhdGUoc2V2X3NucF9zdXBwb3J0ZWQsIHZtX3R5cGVzIFx1MDAyNiBCSVQoS1ZNX1g4Nl9TTlBfVk0pKSxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzI0OC1cdFx0XHRtaW5fc25wX2FzaWQsIG1heF9zbnBfYXNpZCk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjUxLVx0c2V2X2VzX2VuYWJsZWQgPSBzZXZfZXNfc3VwcG9ydGVkO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMjUyOlx0c2V2X3NucF9lbmFibGVkID0gc2V2X3NucF9zdXBwb3J0ZWQ7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyNTMtXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00MTQyPXN0YXRpYyBpbnQgc2V2X3NucF9hcF9jcmVhdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQyMTctXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQyMTg6c3RhdGljIGludCBzbnBfaGFuZGxlX2d1ZXN0X3JlcShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgZ3BhX3QgcmVxX2dwYSwgZ3BhX3QgcmVzcF9ncGEpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQyMTkte1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDI2OD1zdGF0aWMgaW50IHNucF9jb21wbGV0ZV9yZXFfY2VydHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDI3NC1cdGNhc2UgMDpcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDI3NTpcdFx0cmV0dXJuIHNucF9oYW5kbGVfZ3Vlc3RfcmVxKHN2bSwgY29udHJvbC1cdTAwM2VleGl0X2luZm9fMSxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDI3Ni1cdFx0XHRcdFx0ICAgIGNvbnRyb2wtXHUwMDNlZXhpdF9pbmZvXzIpO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDI5MT1zdGF0aWMgaW50IHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgZ3BhX3QgcmVxX2dwYSwgZ3BhX3QgcmVzcF9ncGEpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00MzQ1LVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0MzQ2Olx0cmV0dXJuIHNucF9oYW5kbGVfZ3Vlc3RfcmVxKHN2bSwgcmVxX2dwYSwgcmVzcF9ncGEpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00MzQ3LVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDUxMD1pbnQgc2V2X2hhbmRsZV92bWdleGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ2ODEtXHRcdGlmIChjb250cm9sLVx1MDAzZWV4aXRfY29kZSA9PSBTVk1fVk1HRVhJVF9HVUVTVF9SRVFVRVNUKVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0NjgyOlx0XHRcdHJldHVybiBzbnBfaGFuZGxlX2d1ZXN0X3JlcShzdm0sIGNvbnRyb2wtXHUwMDNlZXhpdF9pbmZvXzEsXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ2ODMtXHRcdFx0XHRcdFx0ICAgIGNvbnRyb2wtXHUwMDNlZXhpdF9pbmZvXzIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTA0MwoJCQkJCQkJb3V0cHV0OiAyMDMKCQkJCQkJCXRob3VnaHRzOiAyMDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktWTSBBTUQgU0VWIEZ1enppbmcgRGVjaXNpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgcGF0Y2ggaW1wYWN0aW5nIEtWTSwgc3BlY2lmaWNhbGx5IHRoZSBBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBpbXBsZW1lbnRhdGlvbi4gVGhlIGluaXRpYWwgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIHdhcnJhbnRzIGZ1enppbmcuIEdpdmVuIHRoZSBydWxlcywgS1ZNIG9uIHg4NiBpcyBkZWZpbml0ZWx5IGEgdGFyZ2V0IHdvcnRoIGNvbnNpZGVyaW5nLgoKVGhlIHBhdGNoIG1vZGlmaWVzIGNvbnRyb2wgZmxvdyB3aXRoaW4gYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgLCB0b3VjaGluZyBgc25wX2hhbmRsZV9ndWVzdF9yZXFgIGFuZCBgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxYC4gVGhlIGNvcmUgY2hhbmdlIGludm9sdmVzIGVycm9yIGhhbmRsaW5nIGZvciBpbnZhbGlkIGd1ZXN0IHJlcXVlc3RzLCBzcGVjaWZpY2FsbHkgd2hlbiBga3ZtX3JlYWRfZ3Vlc3RgIG9yIGBrdm1fd3JpdGVfZ3Vlc3RgIGZhaWwuIEluc3RlYWQgb2YgYSBkaXJlY3QgYC1FSU9gIHJldHVybiwgdGhlIGNvZGUgbm93IHJlcG9ydHMgYSBgR0hDQl9FUlJfSU5WQUxJRF9JTlBVVGAgZXJyb3IgdG8gdGhlIGd1ZXN0IHZpYSBgc3ZtX3ZtZ2V4aXRfYmFkX2lucHV0YCBhbmQgcmVzdW1lcyBndWVzdCBleGVjdXRpb24uIFRoaXMgaXMgYSBzaWduaWZpY2FudCBhbHRlcmF0aW9uIGluIGVycm9yIGhhbmRsaW5nIHN0cmF0ZWd5LgoKSW5zcGVjdGluZyB0aGUgZGlmZiBmdXJ0aGVyLCB0aGUgY2hhbmdlcyBhcmUgY2xlYXI6IGVycm9yIGNvbmRpdGlvbnMgdGhhdCBwcmV2aW91c2x5IHJldHVybmVkIGFuIGVycm9yIG5vdyB0cmlnZ2VyIHRoZSBgc3ZtX3ZtZ2V4aXRfYmFkX2lucHV0YCBmdW5jdGlvbiBjYWxsLCB3aGljaCBtb2RpZmllcyBndWVzdCBiZWhhdmlvciBhbmQgZXhlY3V0aW9uIHBhdGguIFRoZXNlIGZ1bmN0aW9ucywgYHNucF9oYW5kbGVfZ3Vlc3RfcmVxYCBhbmQgYHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcWAsIGFyZSB0aGUgZm9jdXMgaGVyZS4KClRvIGF2b2lkIGRpbHV0aW9uIG9mIHRoZSBmdXp6aW5nIHNjb3BlLCB3ZSYjMzk7bGwgZXh0cmFjdCBgRm9jdXNTeW1ib2xzYC4gQ29uc2lkZXJpbmcgdGhlIGNvbnRleHQsIGBzbnBfaGFuZGxlX2d1ZXN0X3JlcWAgYW5kIGBzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXFgLCBhcmUgc3RhdGljIGZ1bmN0aW9ucyBpbiB0aGUgYC5jYCBmaWxlIGFuZCBhcmUgbm9uLXRyaXZpYWwgZnVuY3Rpb25zIHdpdGggbXVsdGlwbGUgbGluZXMgb2YgY29kZSBhbmQgY2FsbHMgdG8gb3RoZXIgZnVuY3Rpb25zLiBUaGVyZWZvcmUsIHdlIHNob3VsZCBhbHNvIGluY2x1ZGUgdGhlIG5vbi1zdGF0aWMgY2FsbGVyIGFuZCBlbnRyeXBvaW50IHRvIHRoZXNlIGZ1bmN0aW9uczogYHNldl9oYW5kbGVfdm1nZXhpdGAuCgpBcyBmb3IgY29uZmlndXJhdGlvbiwgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyBhcmU6IGBLVk1fQU1EYCwgYEtWTV9BTURfU0VWYCwgYENSWVBUT19ERVZfU1BfUFNQYCwgYENSWVBUT19ERVZfQ0NQX0REYCwgYW5kIGBBTURfSU9NTVVgLiBUaGVzZSBvcHRpb25zIG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgdGhlIHRhcmdldGVkIGZ1bmN0aW9uYWxpdHkgdG8gYmUgYWN0aXZlLCBhbmQgdGhlcmVmb3JlIGZ1enphYmxlLgoKQmFzZWQgb24gdGhlIHJ1bGVzIGFuZCB0aGUgbmF0dXJlIG9mIHRoZSBtb2RpZmljYXRpb25zLCBhICYjMzQ7V29ydGhGdXp6aW5nPXRydWUmIzM0OyBkZWNpc2lvbiBpcyBzdHJhaWdodGZvcndhcmQuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSwgZXhlY3V0YWJsZSBjb2RlIHJlbGF0ZWQgdG8gY29yZSBLVk0gZnVuY3Rpb25hbGl0eS4gU3BlY2lmaWNhbGx5LCBjaGFuZ2VzIGluIGVycm9yIGhhbmRsaW5nIGFuZCBWTSBjb250cm9sIGZsb3cgd2l0aGluIFNFViBndWVzdCByZXF1ZXN0IGhhbmRsaW5nIGFyZSBzaWduaWZpY2FudC4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIG9uIEFNRDY0IHN5c3RlbXMgd2l0aCBLVk0gYW5kIFNFViBlbmFibGVkLiBUaGUgZm9jdXMgd2lsbCBiZSBvbiBgc25wX2hhbmRsZV9ndWVzdF9yZXFgLCBgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxYCBhbmQgdGhlIGVudHJ5cG9pbnQgYHNldl9oYW5kbGVfdm1nZXhpdGAuIFRoZSBzZXQtcmVzdWx0cyBjb21tYW5kIHNob3VsZCByZWZsZWN0IHRoaXMgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0tWTV9BTURfU0VWJiMzNDssCiAgICAmIzM0O0NSWVBUT19ERVZfU1BfUFNQJiMzNDssCiAgICAmIzM0O0NSWVBUT19ERVZfQ0NQX0REJiMzNDssCiAgICAmIzM0O0FNRF9JT01NVSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NucF9oYW5kbGVfZ3Vlc3RfcmVxJiMzNDssCiAgICAmIzM0O3NucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcSYjMzQ7LAogICAgJiMzNDtzZXZfaGFuZGxlX3ZtZ2V4aXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gS1ZNIEFNRCBTRVYtU05QIGd1ZXN0IHJlcXVlc3QgaGFuZGxpbmcgZnVuY3Rpb25zIChzbnBfaGFuZGxlX2d1ZXN0X3JlcSBhbmQgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxKS4gV2hlbiBndWVzdCBtZW1vcnkgcmVhZC93cml0ZSBvciBjZXJ0aWZpY2F0ZSB0YWJsZSBjbGVhcmFuY2UgZmFpbHMsIEtWTSBub3cgcmVwb3J0cyBHSENCX0VSUl9JTlZBTElEX0lOUFVUIHRvIHRoZSBndWVzdCBhbmQgcmVzdW1lcyBndWVzdCBleGVjdXRpb24gcmF0aGVyIHRoYW4gcmV0dXJuaW5nIC1FSU8gdG8gdXNlcnNwYWNlLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBLVk0gY29udHJvbCBmbG93IGFuZCBWTSBzdGF0ZSBoYW5kbGluZyBvbiBhbWQ2NC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtLVk1fQU1EX1NFViYjMzQ7LAogICAgJiMzNDtDUllQVE9fREVWX1NQX1BTUCYjMzQ7LAogICAgJiMzNDtDUllQVE9fREVWX0NDUF9ERCYjMzQ7LAogICAgJiMzNDtBTURfSU9NTVUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzbnBfaGFuZGxlX2d1ZXN0X3JlcSYjMzQ7LAogICAgJiMzNDtzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXEmIzM0OywKICAgICYjMzQ7c2V2X2hhbmRsZV92bWdleGl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIEtWTSBBTUQgU0VWLVNOUCBndWVzdCByZXF1ZXN0IGhhbmRsaW5nIGZ1bmN0aW9ucyAoc25wX2hhbmRsZV9ndWVzdF9yZXEgYW5kIHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcSkuIFdoZW4gZ3Vlc3QgbWVtb3J5IHJlYWQvd3JpdGUgb3IgY2VydGlmaWNhdGUgdGFibGUgY2xlYXJhbmNlIGZhaWxzLCBLVk0gbm93IHJlcG9ydHMgR0hDQl9FUlJfSU5WQUxJRF9JTlBVVCB0byB0aGUgZ3Vlc3QgYW5kIHJlc3VtZXMgZ3Vlc3QgZXhlY3V0aW9uIHJhdGhlciB0aGFuIHJldHVybmluZyAtRUlPIHRvIHVzZXJzcGFjZS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgS1ZNIGNvbnRyb2wgZmxvdyBhbmQgVk0gc3RhdGUgaGFuZGxpbmcgb24gYW1kNjQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjE0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6MTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiBLVk0gU0VWLVNOUCBndWVzdCByZXF1ZXN0IGhhbmRsZXJzIChgc25wX2hhbmRsZV9ndWVzdF9yZXFgIGFuZCBgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxYCkuIFNwZWNpZmljYWxseSwgd2hlbiByZWFkaW5nL3dyaXRpbmcvY2xlYXJpbmcgZ3Vlc3QgbWVtb3J5IGZhaWxzIChga3ZtX3JlYWRfZ3Vlc3RgLCBga3ZtX3dyaXRlX2d1ZXN0YCwgb3IgYGt2bV9jbGVhcl9ndWVzdGApLCBpbnN0ZWFkIG9mIHJldHVybmluZyBgLUVJT2AgKHdoaWNoIGNhdXNlZCBLVk0gdG8gZXhpdCB0byBob3N0IHVzZXJzcGFjZSksIEtWTSBub3cgZm9ybWF0cyBhIEdIQ0IgYmFkIGlucHV0IGVycm9yIHJlc3BvbnNlIChgR0hDQl9FUlJfSU5WQUxJRF9JTlBVVGAgdmlhIGBzdm1fdm1nZXhpdF9iYWRfaW5wdXQoKWApIGFuZCByZXN1bWVzIHRoZSBndWVzdCAoYHJldHVybiAxYCkuXG5cblRoZXNlIGNoYW5nZXMgc29sZWx5IGFmZmVjdCBlcnJvciByZXR1cm4gY29kZXMgYW5kIGNvbnRyb2wgZmxvdyBmb3IgZ3Vlc3QgZXJyb3IgcmVwb3J0aW5nOlxuMS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3Igc3RydWN0IHBhZGRpbmcgaXMgY29waWVkIHRvIHVzZXJzcGFjZSBvciB0aGUgZ3Vlc3QuXG4yLiBJbiBgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxYCwgaWYgcmVhZGluZyBgbXNnX3R5cGVgIGZhaWxzLCBjb250cm9sIGp1bXBzIHN0cmFpZ2h0IHRvIGByZXF1ZXN0X2ludmFsaWRgLCBhdm9pZGluZyBhbnkgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYG1zZ190eXBlYC5cbjMuIE5vIGhlYXAvc3RhY2sgYWxsb2NhdGlvbnMgb3IgYnVmZmVyIHNpemUvb2Zmc2V0IG1hbmlwdWxhdGlvbnMgYXJlIGludHJvZHVjZWQuXG5cbkFzIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOGY4MGM3ODdiZDNkYTEzOGE2ZDdhNjRiOGI3ODBkMWYxNGQ5NDZkMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDEwIDIyOjEzOjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMKaW5kZXggNTcwNTcyM2YxZjQxMi4uZDA3NTYyMzEwNTE5YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jCkBAIC00MjI4LDggJiM0Mzs0MjI4LDEwIEBAIHN0YXRpYyBpbnQgc25wX2hhbmRsZV9ndWVzdF9yZXEoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGdwYV90IHJlcV9ncGEsIGdwYV90IHJlc3BfCiAKIAlndWFyZChtdXRleCkoJmFtcDtzZXYtJmd0O2d1ZXN0X3JlcV9tdXRleCk7CiAKLQlpZiAoa3ZtX3JlYWRfZ3Vlc3Qoa3ZtLCByZXFfZ3BhLCBzZXYtJmd0O2d1ZXN0X3JlcV9idWYsIFBBR0VfU0laRSkpCi0JCXJldHVybiAtRUlPOwomIzQzOwlpZiAoa3ZtX3JlYWRfZ3Vlc3Qoa3ZtLCByZXFfZ3BhLCBzZXYtJmd0O2d1ZXN0X3JlcV9idWYsIFBBR0VfU0laRSkpIHsKJiM0MzsJCXN2bV92bWdleGl0X2JhZF9pbnB1dChzdm0sIEdIQ0JfRVJSX0lOVkFMSURfSU5QVVQpOwomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CX0KIAogCWRhdGEuZ2N0eF9wYWRkciA9IF9fcHNwX3BhKHNldi0mZ3Q7c25wX2NvbnRleHQpOwogCWRhdGEucmVxX3BhZGRyID0gX19wc3BfcGEoc2V2LSZndDtndWVzdF9yZXFfYnVmKTsKQEAgLTQyNDQsOCAmIzQzOzQyNDYsMTAgQEAgc3RhdGljIGludCBzbnBfaGFuZGxlX2d1ZXN0X3JlcShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgZ3BhX3QgcmVxX2dwYSwgZ3BhX3QgcmVzcF8KIAlpZiAocmV0ICZhbXA7JmFtcDsgIWZ3X2VycikKIAkJcmV0dXJuIHJldDsKIAotCWlmIChrdm1fd3JpdGVfZ3Vlc3Qoa3ZtLCByZXNwX2dwYSwgc2V2LSZndDtndWVzdF9yZXNwX2J1ZiwgUEFHRV9TSVpFKSkKLQkJcmV0dXJuIC1FSU87CiYjNDM7CWlmIChrdm1fd3JpdGVfZ3Vlc3Qoa3ZtLCByZXNwX2dwYSwgc2V2LSZndDtndWVzdF9yZXNwX2J1ZiwgUEFHRV9TSVpFKSkgewomIzQzOwkJc3ZtX3ZtZ2V4aXRfYmFkX2lucHV0KHN2bSwgR0hDQl9FUlJfSU5WQUxJRF9JTlBVVCk7CiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsJfQogCiAJLyogTm8gYWN0aW9uIGlzIHJlcXVlc3RlZCAqZnJvbSBLVk0qIGlmIHRoZXJlIHdhcyBhIGZpcm13YXJlIGVycm9yLiAqLwogCXN2bV92bWdleGl0X25vX2FjdGlvbihzdm0sIFNOUF9HVUVTVF9FUlIoMCwgZndfZXJyKSk7CkBAIC00Mjk2LDcgJiM0Mzs0MzAwLDcgQEAgc3RhdGljIGludCBzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXEoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGdwYV90IHJlcV9ncGEsIGdwYV90IHIKIAogCWlmIChrdm1fcmVhZF9ndWVzdChrdm0sIHJlcV9ncGEgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IHNucF9ndWVzdF9tc2dfaGRyLCBtc2dfdHlwZSksCiAJCQkgICAmYW1wO21zZ190eXBlLCAxKSkKLQkJcmV0dXJuIC1FSU87CiYjNDM7CQlnb3RvIHJlcXVlc3RfaW52YWxpZDsKIAogCS8qCiAJICogQXMgcGVyIEdIQ0Igc3BlYywgcmVxdWVzdHMgb2YgdHlwZSBNU0dfUkVQT1JUX1JFUSBhbHNvIGFsbG93IGZvcgpAQCAtNDMzNiw3ICYjNDM7NDM0MCw3IEBAIHN0YXRpYyBpbnQgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBncGFfdCByZXFfZ3BhLCBncGFfdCByCiAJCSAqIGNlcnRpZmljYXRlIHRhYmxlIGlzIHRlcm1pbmF0ZWQgYnkgMjQtYnl0ZXMgb2YgemVyb2VzLgogCQkgKi8KIAkJaWYgKGRhdGFfbnBhZ2VzICZhbXA7JmFtcDsga3ZtX2NsZWFyX2d1ZXN0KGt2bSwgZGF0YV9ncGEsIDI0KSkKLQkJCXJldHVybiAtRUlPOwomIzQzOwkJCWdvdG8gcmVxdWVzdF9pbnZhbGlkOwogCX0KIAogCXJldHVybiBzbnBfaGFuZGxlX2d1ZXN0X3JlcShzdm0sIHJlcV9ncGEsIHJlc3BfZ3BhKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NDAKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAzMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRoaXMgS1ZNL1NWTSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHRoZSBzcGVjaWZpYyBtb2RpZmljYXRpb25zLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYCBmaWxlLiBUaGUgY2hhbmdlcyBhcmUgZm9jdXNlZCBvbiBob3cgdGhlIGNvZGUgaGFuZGxlcyBmYWlsdXJlcyB3aXRoaW4gdGhlIGBzbnBfaGFuZGxlX2d1ZXN0X3JlcWAgYW5kIGBzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXFgIGZ1bmN0aW9ucy4KClNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSB0aGVyZSYjMzk7cyBiZWVuIGEgY2hhbmdlIGluIGVycm9yIGhhbmRsaW5nIHJlbGF0ZWQgdG8gYGt2bV9yZWFkX2d1ZXN0YCBhbmQgYGt2bV93cml0ZV9ndWVzdGAgY2FsbHMsIGFuZCBga3ZtX2NsZWFyX2d1ZXN0YC4gUHJldmlvdXNseSwgYSBzdHJhaWdodGZvcndhcmQgYC1FSU9gIGVycm9yIHdvdWxkIGJlIHJldHVybmVkIHVwb24gZmFpbHVyZS4gTm93LCBpbiB0aGUgYHNucF9oYW5kbGVfZ3Vlc3RfcmVxYCBmdW5jdGlvbiwgb24gYSByZWFkIG9yIHdyaXRlIGZhaWx1cmUsIHRoZSBjb2RlIG5vdyBjYWxscyBgc3ZtX3ZtZ2V4aXRfYmFkX2lucHV0KHN2bSwgR0hDQl9FUlJfSU5WQUxJRF9JTlBVVClgIGFuZCByZXR1cm5zIGAxYC4gQW5kIGluIHRoZSBgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxYCBmdW5jdGlvbiwgZmFpbHVyZXMgb24gYm90aCByZWFkIGFuZCBjbGVhciBvcGVyYXRpb25zIG5vdyB0cmlnZ2VyIGEganVtcCB0byBhIGByZXF1ZXN0X2ludmFsaWQ6YCBsYWJlbC4KClRoZSBxdWVzdGlvbiBub3cgYmVjb21lczogV2hhdCBkb2VzIGByZXF1ZXN0X2ludmFsaWQ6YCBkbz8gQW5kLCBtb3JlIGltcG9ydGFudGx5LCB3aGF0JiMzOTtzIHRoZSBmdW5jdGlvbiBgc3ZtX3ZtZ2V4aXRfYmFkX2lucHV0YCBhbGwgYWJvdXQ/IFdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGF0IGBHSENCX0VSUl9JTlZBTElEX0lOUFVUYCBlcnJvciBjb2RlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBJdCBsb29rcyBsaWtlIHRoaXMgY29kZSBpcyBub3cgaW50ZW5kZWQgdG8gdHJpZ2dlciBhIHZtZ2V4aXQgd2hlbiB3ZSBzZWUgYmFkIGlucHV0LgoKSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBnb2luZyB0byBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AgYW5kIGRpZyBpbnRvIHRoZXNlIHR3byBhcmVhcyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZSBhbmQgc2VlIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlIGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MjIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MjIwOlx0XHRzdHJ1Y3Qgc2V2X2RhdGFfc25wX2d1ZXN0X3JlcXVlc3QgZGF0YSA9IHswfTtcbjQyMjE6XHRcdHN0cnVjdCBrdm0gKmt2bSA9IHN2bS1cdTAwM2V2Y3B1Lmt2bTtcbjQyMjI6XHRcdHN0cnVjdCBrdm1fc2V2X2luZm8gKnNldiA9IHRvX2t2bV9zZXZfaW5mbyhrdm0pO1xuNDIyMzpcdFx0c2V2X3JldF9jb2RlIGZ3X2VyciA9IDA7XG40MjI0Olx0XHRpbnQgcmV0O1xuNDIyNTpcdFxuNDIyNjpcdFx0aWYgKCFpc19zZXZfc25wX2d1ZXN0KFx1MDAyNnN2bS1cdTAwM2V2Y3B1KSlcbjQyMjc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG40MjI4Olx0XG40MjI5Olx0XHRndWFyZChtdXRleCkoXHUwMDI2c2V2LVx1MDAzZWd1ZXN0X3JlcV9tdXRleCk7XG40MjMwOlx0XG40MjMxOlx0XHRpZiAoa3ZtX3JlYWRfZ3Vlc3Qoa3ZtLCByZXFfZ3BhLCBzZXYtXHUwMDNlZ3Vlc3RfcmVxX2J1ZiwgUEFHRV9TSVpFKSkge1xuNDIzMjpcdFx0XHRzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX0lOUFVUKTtcbjQyMzM6XHRcdFx0cmV0dXJuIDE7XG40MjM0Olx0XHR9XG40MjM1Olx0XG40MjM2Olx0XHRkYXRhLmdjdHhfcGFkZHIgPSBfX3BzcF9wYShzZXYtXHUwMDNlc25wX2NvbnRleHQpO1xuNDIzNzpcdFx0ZGF0YS5yZXFfcGFkZHIgPSBfX3BzcF9wYShzZXYtXHUwMDNlZ3Vlc3RfcmVxX2J1Zik7XG40MjM4Olx0XHRkYXRhLnJlc19wYWRkciA9IF9fcHNwX3BhKHNldi1cdTAwM2VndWVzdF9yZXNwX2J1Zik7XG40MjM5Olx0XG40MjQwOlx0XHQvKlxuNDI0MTpcdFx0ICogRmlybXdhcmUgZmFpbHVyZXMgYXJlIHByb3BhZ2F0ZWQgb24gdG8gZ3Vlc3QsIGJ1dCBhbnkgb3RoZXIgZmFpbHVyZVxuNDI0MjpcdFx0ICogY29uZGl0aW9uIGFsb25nIHRoZSB3YXkgc2hvdWxkIGJlIHJlcG9ydGVkIHRvIHVzZXJzcGFjZS4gRS5nLiBpZlxuNDI0MzpcdFx0ICogdGhlIFBTUCBpcyBkZWFkIGFuZCBjb21tYW5kcyBhcmUgdGltaW5nIG91dC5cbjQyNDQ6XHRcdCAqL1xuNDI0NTpcdFx0cmV0ID0gc2V2X2lzc3VlX2NtZChrdm0sIFNFVl9DTURfU05QX0dVRVNUX1JFUVVFU1QsIFx1MDAyNmRhdGEsIFx1MDAyNmZ3X2Vycik7XG40MjQ2Olx0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiAhZndfZXJyKVxuNDI0NzpcdFx0XHRyZXR1cm4gcmV0O1xuNDI0ODpcdFxuNDI0OTpcdFx0aWYgKGt2bV93cml0ZV9ndWVzdChrdm0sIHJlc3BfZ3BhLCBzZXYtXHUwMDNlZ3Vlc3RfcmVzcF9idWYsIFBBR0VfU0laRSkpIHtcbjQyNTA6XHRcdFx0c3ZtX3ZtZ2V4aXRfYmFkX2lucHV0KHN2bSwgR0hDQl9FUlJfSU5WQUxJRF9JTlBVVCk7XG40MjUxOlx0XHRcdHJldHVybiAxO1xuNDI1MjpcdFx0fVxuNDI1MzpcdFxuNDI1NDpcdFx0LyogTm8gYWN0aW9uIGlzIHJlcXVlc3RlZCAqZnJvbSBLVk0qIGlmIHRoZXJlIHdhcyBhIGZpcm13YXJlIGVycm9yLiAqL1xuNDI1NTpcdFx0c3ZtX3ZtZ2V4aXRfbm9fYWN0aW9uKHN2bSwgU05QX0dVRVNUX0VSUigwLCBmd19lcnIpKTtcbjQyNTY6XHRcbjQyNTc6XHRcdC8qIHJlc3VtZSBndWVzdCAqL1xuNDI1ODpcdFx0cmV0dXJuIDE7XG40MjU5Olx0fVxuNDI2MDpcdFxuNDI2MTpcdHN0YXRpYyBpbnQgc25wX3JlcV9jZXJ0c19lcnIoc3RydWN0IHZjcHVfc3ZtICpzdm0sIHUzMiB2bW1fZXJyb3IpXG40MjYyOlx0e1xuNDI2MzpcdFx0Z2hjYl9zZXRfc3dfZXhpdF9pbmZvXzIoc3ZtLVx1MDAzZXNldl9lcy5naGNiLCBTTlBfR1VFU1RfRVJSKHZtbV9lcnJvciwgMCkpO1xuNDI2NDpcdFxuNDI2NTpcdFx0cmV0dXJuIDE7IC8qIHJlc3VtZSBndWVzdCAqL1xuNDI2NjpcdH1cbjQyNjc6XHRcbjQyNjg6XHRzdGF0aWMgaW50IHNucF9jb21wbGV0ZV9yZXFfY2VydHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuNDI2OTpcdHtcbjQyNzA6XHRcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xuNDI3MTpcdFx0c3RydWN0IHZtY2JfY29udHJvbF9hcmVhICpjb250cm9sID0gXHUwMDI2c3ZtLVx1MDAzZXZtY2ItXHUwMDNlY29udHJvbDtcbjQyNzI6XHRcbjQyNzM6XHRcdHN3aXRjaCAoUkVBRF9PTkNFKHZjcHUtXHUwMDNlcnVuLVx1MDAzZXNucF9yZXFfY2VydHMucmV0KSkge1xuNDI3NDpcdFx0Y2FzZSAwOlxuNDI3NTpcdFx0XHRyZXR1cm4gc25wX2hhbmRsZV9ndWVzdF9yZXEoc3ZtLCBjb250cm9sLVx1MDAzZWV4aXRfaW5mb18xLFxuNDI3NjpcdFx0XHRcdFx0XHQgICAgY29udHJvbC1cdTAwM2VleGl0X2luZm9fMik7XG40Mjc3Olx0XHRjYXNlIEVOT1NQQzpcbjQyNzg6XHRcdFx0dmNwdS1cdTAwM2VhcmNoLnJlZ3NbVkNQVV9SRUdTX1JCWF0gPSB2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VzbnBfcmVxX2NlcnRzLm5wYWdlcztcbjQyNzk6XHRcdFx0cmV0dXJuIHNucF9yZXFfY2VydHNfZXJyKHN2bSwgU05QX0dVRVNUX1ZNTV9FUlJfSU5WQUxJRF9MRU4pO1xuNDI4MDpcdFx0Y2FzZSBFQUdBSU46XG40MjgxOlx0XHRcdHJldHVybiBzbnBfcmVxX2NlcnRzX2Vycihzdm0sIFNOUF9HVUVTVF9WTU1fRVJSX0JVU1kpO1xuNDI4MjpcdFx0Y2FzZSBFSU86XG40MjgzOlx0XHRcdHJldHVybiBzbnBfcmVxX2NlcnRzX2Vycihzdm0sIFNOUF9HVUVTVF9WTU1fRVJSX0dFTkVSSUMpO1xuNDI4NDpcdFx0ZGVmYXVsdDpcbjQyODU6XHRcdFx0YnJlYWs7XG40Mjg2Olx0XHR9XG40Mjg3Olx0XG40Mjg4Olx0XHRyZXR1cm4gLUVJTlZBTDtcbjQyODk6XHR9XG40MjkwOlx0XG40MjkxOlx0c3RhdGljIGludCBzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXEoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGdwYV90IHJlcV9ncGEsIGdwYV90IHJlc3BfZ3BhKVxuNDI5MjpcdHtcbjQyOTM6XHRcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IFx1MDAyNnN2bS1cdTAwM2V2Y3B1O1xuNDI5NDpcdFx0c3RydWN0IGt2bSAqa3ZtID0gdmNwdS1cdTAwM2Vrdm07XG40Mjk1Olx0XG40Mjk2Olx0XHR1OCBtc2dfdHlwZTtcbjQyOTc6XHRcbjQyOTg6XHRcdGlmICghaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSlcbjQyOTk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG40MzAwOlx0XG40MzAxOlx0XHRpZiAoa3ZtX3JlYWRfZ3Vlc3Qoa3ZtLCByZXFfZ3BhICYjNDM7IG9mZnNldG9mKHN0cnVjdCBzbnBfZ3Vlc3RfbXNnX2hkciwgbXNnX3R5cGUpLFxuNDMwMjpcdFx0XHRcdCAgIFx1MDAyNm1zZ190eXBlLCAxKSlcbjQzMDM6XHRcdFx0Z290byByZXF1ZXN0X2ludmFsaWQ7XG40MzA0Olx0XG40MzA1Olx0XHQvKlxuNDMwNjpcdFx0ICogQXMgcGVyIEdIQ0Igc3BlYywgcmVxdWVzdHMgb2YgdHlwZSBNU0dfUkVQT1JUX1JFUSBhbHNvIGFsbG93IGZvclxuNDMwNzpcdFx0ICogYWRkaXRpb25hbCBjZXJ0aWZpY2F0ZSBkYXRhIHRvIGJlIHByb3ZpZGVkIGFsb25nc2lkZSB0aGUgYXR0ZXN0YXRpb25cbjQzMDg6XHRcdCAqIHJlcG9ydCB2aWEgdGhlIGd1ZXN0LXByb3ZpZGVkIGRhdGEgcGFnZXMgaW5kaWNhdGVkIGJ5IFJBWC9SQlguIElmXG40MzA5Olx0XHQgKiB1c2Vyc3BhY2UgZW5hYmxlcyBLVk1fRVhJVF9TTlBfUkVRX0NFUlRTLCB0aGVuIGV4aXQgdG8gdXNlcnNwYWNlXG40MzEwOlx0XHQgKiB0byBnaXZlIHVzZXJzcGFjZSBhbiBvcHBvcnR1bml0eSB0byBwcm92aWRlIHRoZSBjZXJ0aWZpY2F0ZSBkYXRhXG40MzExOlx0XHQgKiBiZWZvcmUgaXNzdWluZy9jb21wbGV0aW5nIHRoZSBhdHRlc3RhdGlvbiByZXF1ZXN0LiBPdGhlcndpc2UsIHJldHVyblxuNDMxMjpcdFx0ICogYW4gZW1wdHkgY2VydGlmaWNhdGUgdGFibGUgaW4gdGhlIGd1ZXN0LXByb3ZpZGVkIGRhdGEgcGFnZXMgYW5kXG40MzEzOlx0XHQgKiBoYW5kbGUgdGhlIGF0dGVzdGF0aW9uIHJlcXVlc3QgaW1tZWRpYXRlbHkuXG40MzE0Olx0XHQgKi9cbjQzMTU6XHRcdGlmIChtc2dfdHlwZSA9PSBTTlBfTVNHX1JFUE9SVF9SRVEpIHtcbjQzMTY6XHRcdFx0c3RydWN0IGt2bV9zZXZfaW5mbyAqc2V2ID0gXHUwMDI2dG9fa3ZtX3N2bShrdm0pLVx1MDAzZXNldl9pbmZvO1xuNDMxNzpcdFx0XHR1NjQgZGF0YV9ucGFnZXM7XG40MzE4Olx0XHRcdGdwYV90IGRhdGFfZ3BhO1xuNDMxOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjU1CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcWAqKgoKT2theSwgbGV0JiMzOTtzIGRpZyBpbnRvIHRoaXMgYHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcWAgZnVuY3Rpb24uIEkmIzM5O20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gd2hlcmUgaXQgaGFuZGxlcyByZXF1ZXN0IHZhbGlkaXR5LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGlkZW50aWZpZXMgYW5kIHJlYWN0cyB0byBhbiBpbnZhbGlkIHJlcXVlc3QuIE15IGZvY3VzIHdpbGwgYmUgb24gdGhlIHBhcnQgbGFiZWxlZCBhcyBgcmVxdWVzdF9pbnZhbGlkOmAuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBicmFuY2hpbmcgbG9naWMgdGhhdCBsZWFkcyB0byB0aGF0IHBvaW50IGFuZCwgY3J1Y2lhbGx5LCB3aGF0IGFjdGlvbnMgYXJlIHRha2VuIHdoZW4gYSByZXF1ZXN0IGlzIGRldGVybWluZWQgdG8gYmUgaW52YWxpZC4gSXQmIzM5O3MgcHJvYmFibHkgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24gb2YgdGhlIHNlY3VyaXR5IGJvdW5kYXJ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MzIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQzMjA6XHRcdFx0aWYgKCFrdm1fZ2hjYl9yYXhfaXNfdmFsaWQoc3ZtKSB8fCAha3ZtX2doY2JfcmJ4X2lzX3ZhbGlkKHN2bSkpXG40MzIxOlx0XHRcdFx0Z290byByZXF1ZXN0X2ludmFsaWQ7XG40MzIyOlx0XG40MzIzOlx0XHRcdGRhdGFfZ3BhID0gdmNwdS1cdTAwM2VhcmNoLnJlZ3NbVkNQVV9SRUdTX1JBWF07XG40MzI0Olx0XHRcdGRhdGFfbnBhZ2VzID0gdmNwdS1cdTAwM2VhcmNoLnJlZ3NbVkNQVV9SRUdTX1JCWF07XG40MzI1Olx0XG40MzI2Olx0XHRcdGlmICghUEFHRV9BTElHTkVEKGRhdGFfZ3BhKSlcbjQzMjc6XHRcdFx0XHRnb3RvIHJlcXVlc3RfaW52YWxpZDtcbjQzMjg6XHRcbjQzMjk6XHRcdFx0aWYgKHNldi1cdTAwM2VzbnBfY2VydHNfZW5hYmxlZCkge1xuNDMzMDpcdFx0XHRcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZWV4aXRfcmVhc29uID0gS1ZNX0VYSVRfU05QX1JFUV9DRVJUUztcbjQzMzE6XHRcdFx0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VzbnBfcmVxX2NlcnRzLmdwYSA9IGRhdGFfZ3BhO1xuNDMzMjpcdFx0XHRcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZXNucF9yZXFfY2VydHMubnBhZ2VzID0gZGF0YV9ucGFnZXM7XG40MzMzOlx0XHRcdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlc25wX3JlcV9jZXJ0cy5yZXQgPSAwO1xuNDMzNDpcdFx0XHRcdHZjcHUtXHUwMDNlYXJjaC5jb21wbGV0ZV91c2Vyc3BhY2VfaW8gPSBzbnBfY29tcGxldGVfcmVxX2NlcnRzO1xuNDMzNTpcdFx0XHRcdHJldHVybiAwO1xuNDMzNjpcdFx0XHR9XG40MzM3Olx0XG40MzM4Olx0XHRcdC8qXG40MzM5Olx0XHRcdCAqIEFzIHBlciBHSENCIHNwZWMgKHNlZSBcJiMzNDtTTlAgRXh0ZW5kZWQgR3Vlc3QgUmVxdWVzdFwmIzM0OyksIHRoZVxuNDM0MDpcdFx0XHQgKiBjZXJ0aWZpY2F0ZSB0YWJsZSBpcyB0ZXJtaW5hdGVkIGJ5IDI0LWJ5dGVzIG9mIHplcm9lcy5cbjQzNDE6XHRcdFx0ICovXG40MzQyOlx0XHRcdGlmIChkYXRhX25wYWdlcyBcdTAwMjZcdTAwMjYga3ZtX2NsZWFyX2d1ZXN0KGt2bSwgZGF0YV9ncGEsIDI0KSlcbjQzNDM6XHRcdFx0XHRnb3RvIHJlcXVlc3RfaW52YWxpZDtcbjQzNDQ6XHRcdH1cbjQzNDU6XHRcbjQzNDY6XHRcdHJldHVybiBzbnBfaGFuZGxlX2d1ZXN0X3JlcShzdm0sIHJlcV9ncGEsIHJlc3BfZ3BhKTtcbjQzNDc6XHRcbjQzNDg6XHRyZXF1ZXN0X2ludmFsaWQ6XG40MzQ5Olx0XHRzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX0lOUFVUKTtcbjQzNTA6XHRcdHJldHVybiAxOyAvKiByZXN1bWUgZ3Vlc3QgKi9cbjQzNTE6XHR9XG40MzUyOlx0XG40MzUzOlx0c3RhdGljIGludCBzZXZfaGFuZGxlX3ZtZ2V4aXRfbXNyX3Byb3RvY29sKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxuNDM1NDpcdHtcbjQzNTU6XHRcdHN0cnVjdCB2bWNiX2NvbnRyb2xfYXJlYSAqY29udHJvbCA9IFx1MDAyNnN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2w7XG40MzU2Olx0XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBcdTAwMjZzdm0tXHUwMDNldmNwdTtcbjQzNTc6XHRcdHN0cnVjdCBrdm1fc2V2X2luZm8gKnNldiA9IHRvX2t2bV9zZXZfaW5mbyh2Y3B1LVx1MDAzZWt2bSk7XG40MzU4Olx0XHR1NjQgZ2hjYl9pbmZvO1xuNDM1OTpcdFx0aW50IHJldCA9IDE7XG40MzYwOlx0XG40MzYxOlx0XHRnaGNiX2luZm8gPSBjb250cm9sLVx1MDAzZWdoY2JfZ3BhIFx1MDAyNiBHSENCX01TUl9JTkZPX01BU0s7XG40MzYyOlx0XG40MzYzOlx0XHR0cmFjZV9rdm1fdm1nZXhpdF9tc3JfcHJvdG9jb2xfZW50ZXIoc3ZtLVx1MDAzZXZjcHUudmNwdV9pZCxcbjQzNjQ6XHRcdFx0XHRcdFx0ICAgICBjb250cm9sLVx1MDAzZWdoY2JfZ3BhKTtcbjQzNjU6XHRcbjQzNjY6XHRcdHN3aXRjaCAoZ2hjYl9pbmZvKSB7XG40MzY3Olx0XHRjYXNlIEdIQ0JfTVNSX1NFVl9JTkZPX1JFUTpcbjQzNjg6XHRcdFx0c2V0X2doY2JfbXNyKHN2bSwgR0hDQl9NU1JfU0VWX0lORk8oKF9fdTY0KXNldi1cdTAwM2VnaGNiX3ZlcnNpb24sXG40MzY5Olx0XHRcdFx0XHRcdFx0ICAgIEdIQ0JfVkVSU0lPTl9NSU4sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzNzgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEtWTSBTRVYtU05QIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGhvdyBLVk0gaGFuZGxlcyBmYWlsdXJlcyByZWxhdGVkIHRvIGd1ZXN0IG1lbW9yeSBhY2Nlc3MsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIFNFVi1TTlAgKFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gLSBTZWN1cmUgTmVzdGVkIFBhZ2luZykgY29udGV4dC4gUHJldmlvdXNseSwgaWYgS1ZNIGVuY291bnRlcmVkIGEgcHJvYmxlbSByZWFkaW5nIGZyb20sIHdyaXRpbmcgdG8sIG9yIGNsZWFyaW5nIGd1ZXN0IG1lbW9yeSAodXNpbmcgZnVuY3Rpb25zIGxpa2UgYGt2bV9yZWFkX2d1ZXN0YCwgYGt2bV93cml0ZV9ndWVzdGAsIG9yIGBrdm1fY2xlYXJfZ3Vlc3RgKSwgaXQgd291bGQgc2ltcGx5IHJldHVybiBhIGdlbmVyaWMgYC1FSU9gIGVycm9yLiBUaGlzLCBpbiB0dXJuLCB0cmlnZ2VyZWQgYW4gYEtWTV9FWElUX0lOVEVSTkFMX0VSUk9SYCBvciBzaW1pbGFyIGV4aXQgcmVhc29uLCBwb3RlbnRpYWxseSByZXN1bHRpbmcgaW4gS1ZNIGV4aXRpbmcgdG8gdXNlcnNwYWNlIHdpdGggYSBnZW5lcmFsIGAtRUlPYCByZXR1cm4gZnJvbSBgS1ZNX1JVTmAuIENsZWFybHksIHRoaXMgd2FzbiYjMzk7dCBpZGVhbCBmb3IgU0VWLVNOUCBvcGVyYXRpb25zLgoKVGhlIGNvcmUgb2YgdGhlIHBhdGNoIHNlZW1zIHRvIGJlIGFsaWduaW5nIEtWTSYjMzk7cyBiZWhhdmlvciB3aXRoIHRoZSBHSENCIChHdWVzdCBIeXBlcnZpc29yIENvbW11bmljYXRpb24gQmxvY2spIHNwZWNpZmljYXRpb24uIEluc3RlYWQgb2YgdHJlYXRpbmcgdGhlc2UgbWVtb3J5IGFjY2VzcyBmYWlsdXJlcyBhcyBmYXRhbCBlcnJvcnMsIHRoZSBjb3JyZWN0IG1ldGhvZCBzZWVtcyB0byBiZSB0byByZXBvcnQgdGhlIGVycm9yIHN0YXR1cy4gVGhpcyBpbnZvbHZlcyBzZXR0aW5nIGEgVk1HRVhJVCBlcnJvciBzdGF0dXMsIGBzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX0lOUFVUKWAsIHdoZW4gdGhlIGd1ZXN0IHByb3ZpZGVzIGluY29ycmVjdCBHUEEgKEd1ZXN0IFBoeXNpY2FsIEFkZHJlc3MpIG9yIGludmFsaWQgaW5wdXQuIFN1YnNlcXVlbnRseSwgYSByZXR1cm4gdmFsdWUgb2YgYDFgIGlzIHVzZWQsIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSBndWVzdCBleGVjdXRpb24gc2hvdWxkIHJlc3VtZSB3aXRoIHRoZSBlcnJvciBjb2RlIHByb3ZpZGVkIGluIHRoZSBHSENCIGV4aXQgaW5mb3JtYXRpb24uIEVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggZW5zdXJlcyB0aGF0IHRoZSBndWVzdCBoYW5kbGVzIHRoZSBlcnJvciwgcmF0aGVyIHRoYW4gS1ZNIHRlcm1pbmF0aW5nIHRoZSBWQ1BVIHJ1biBhbmQgcmFpc2luZyBhbiBleGNlcHRpb24gdG8gdXNlcnNwYWNlLgoKTm93LCBsZXQmIzM5O3Mgc2hpZnQgZ2VhcnMgYW5kIGxvb2sgZm9yIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucy4gTXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29kZSB3aWxsIGxlYWQgbWUgdG8gZXhhbWluaW5nIHRoZSBgc3ZtX3ZtZ2V4aXRfYmFkX2lucHV0YCBmdW5jdGlvbiwgbG9va2luZyBmb3IgYW55IHBvc3NpYmxlIHZ1bG5lcmFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3ZtX3ZtZ2V4aXRfYmFkX2lucHV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9zZXYuYz0zNjI0PXN0YXRpYyBpbnQgc2V0dXBfdm1nZXhpdF9zY3JhdGNoKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBib29sIHN5bmMsIHU2NCBtaW5fbGVuKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzcxMy1lX3NjcmF0Y2g6XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjM3MTQ6XHRzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX1NDUkFUQ0hfQVJFQSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTM3MTUtXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00MjE4PXN0YXRpYyBpbnQgc25wX2hhbmRsZV9ndWVzdF9yZXEoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGdwYV90IHJlcV9ncGEsIGdwYV90IHJlc3BfZ3BhKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDIzMS1cdGlmIChrdm1fcmVhZF9ndWVzdChrdm0sIHJlcV9ncGEsIHNldi1cdTAwM2VndWVzdF9yZXFfYnVmLCBQQUdFX1NJWkUpKSB7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQyMzI6XHRcdHN2bV92bWdleGl0X2JhZF9pbnB1dChzdm0sIEdIQ0JfRVJSX0lOVkFMSURfSU5QVVQpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00MjMzLVx0XHRyZXR1cm4gMTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQyNDktXHRpZiAoa3ZtX3dyaXRlX2d1ZXN0KGt2bSwgcmVzcF9ncGEsIHNldi1cdTAwM2VndWVzdF9yZXNwX2J1ZiwgUEFHRV9TSVpFKSkge1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0MjUwOlx0XHRzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX0lOUFVUKTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDI1MS1cdFx0cmV0dXJuIDE7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00MjkxPXN0YXRpYyBpbnQgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBncGFfdCByZXFfZ3BhLCBncGFfdCByZXNwX2dwYSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQzNDgtcmVxdWVzdF9pbnZhbGlkOlxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0MzQ5Olx0c3ZtX3ZtZ2V4aXRfYmFkX2lucHV0KHN2bSwgR0hDQl9FUlJfSU5WQUxJRF9JTlBVVCk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQzNTAtXHRyZXR1cm4gMTsgLyogcmVzdW1lIGd1ZXN0ICovXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00NTEwPWludCBzZXZfaGFuZGxlX3ZtZ2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDU0Ny1cdFx0XHQgICAgY29udHJvbC1cdTAwM2VnaGNiX2dwYSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ1NDg6XHRcdHN2bV92bWdleGl0X2JhZF9pbnB1dChzdm0sIEdIQ0JfRVJSX05PVF9SRUdJU1RFUkVEKTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDU0OS1cdFx0cmV0dXJuIDE7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NTU1LVx0XHRcdCAgICBzdm0tXHUwMDNlc2V2X2VzLmdoY2ItXHUwMDNlZ2hjYl91c2FnZSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ1NTY6XHRcdHN2bV92bWdleGl0X2JhZF9pbnB1dChzdm0sIEdIQ0JfRVJSX0lOVkFMSURfVVNBR0UpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NTU3LVx0XHRyZXR1cm4gMTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ1NjItXHRcdFx0ICAgIGNvbnRyb2wtXHUwMDNlZXhpdF9jb2RlKTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDU2MzpcdFx0c3ZtX3ZtZ2V4aXRfYmFkX2lucHV0KHN2bSwgR0hDQl9FUlJfSU5WQUxJRF9FVkVOVCk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ1NjQtXHRcdHJldHVybiAxO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDU3NC1cdFx0ZHVtcF9naGNiKHN2bSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ1NzU6XHRcdHN2bV92bWdleGl0X2JhZF9pbnB1dChzdm0sIEdIQ0JfRVJSX01JU1NJTkdfSU5QVVQpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NTc2LVx0XHRyZXR1cm4gMTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ2MDktXHRcdGlmICh0b19rdm1fc2V2X2luZm8odmNwdS1cdTAwM2Vrdm0pLVx1MDAzZWdoY2JfdmVyc2lvbiBcdTAwM2U9IDIgXHUwMDI2XHUwMDI2IGxlbiBcdTAwM2UgOCkge1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0NjEwOlx0XHRcdHN2bV92bWdleGl0X2JhZF9pbnB1dChzdm0sIEdIQ0JfRVJSX0lOVkFMSURfSU5QVVQpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NjExLVx0XHRcdHJldHVybiAxO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDY0My1cdFx0XHQgICAgICAgY29udHJvbC1cdTAwM2VleGl0X2luZm9fMSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ2NDQ6XHRcdFx0c3ZtX3ZtZ2V4aXRfYmFkX2lucHV0KHN2bSwgR0hDQl9FUlJfSU5WQUxJRF9JTlBVVCk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ2NDUtXHRcdH1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ2NjktXHRcdGlmIChzZXZfc25wX2FwX2NyZWF0aW9uKHN2bSkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ2NzA6XHRcdFx0c3ZtX3ZtZ2V4aXRfYmFkX2lucHV0KHN2bSwgR0hDQl9FUlJfSU5WQUxJRF9JTlBVVCk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ2NzEtXHRcdHJldHVybiAxO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDY3Ni1cdFx0ICAgIGNvbnRyb2wtXHUwMDNlZXhpdF9pbmZvXzEgPT0gY29udHJvbC1cdTAwM2VleGl0X2luZm9fMikge1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0Njc3Olx0XHRcdHN2bV92bWdleGl0X2JhZF9pbnB1dChzdm0sIEdIQ0JfRVJSX0lOVkFMSURfSU5QVVQpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00Njc4LVx0XHRcdHJldHVybiAxO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDY5OC1cdFx0XHQgICAgY29udHJvbC1cdTAwM2VleGl0X2NvZGUpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0Njk5Olx0XHRzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX0VWRU5UKTtcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDcwMC1cdFx0cmV0dXJuIDE7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD03MTE9c3RhdGljIGlubGluZSB2b2lkIHN2bV92bWdleGl0X2luamVjdF9leGNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0sIHU4IHZlY3Rvcilcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTcxNy1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6NzE4OnN0YXRpYyBpbmxpbmUgdm9pZCBzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3RydWN0IHZjcHVfc3ZtICpzdm0sIHU2NCBzdWJlcnJvcilcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNzE5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg2NwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgYSBTdXNwZWN0ZWQgU1ZNIFZNRVhJVCBJc3N1ZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwb3RlbnRpYWwgcHJvYmxlbSBvbiBteSByYWRhciwgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIFNlY3VyZSBWaXJ0dWFsIE1hY2hpbmUgKFNWTSkgb24geDg2LCBwcm9iYWJseSBhbiBpc3N1ZSB3aXRoIGEgYmFkIGlucHV0IHRyaWdnZXJpbmcgYSBgdm1leGl0YC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgZGVmaW5pdGlvbiBhbmQgcG90ZW50aWFsIGNhdXNlcyBvZiB0aGlzIHNwZWNpZmljIHNpdHVhdGlvbjogYHN2bV92bWdleGl0X2JhZF9pbnB1dGAuIFRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgdGhlIGF1dGhvcml0YXRpdmUgZGVmaW5pdGlvbiBmb3IgdGhpcyBjb25kaXRpb24gd2lsbCBiZSB3aXRoaW4gdGhlIEtWTSAoS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSkgc291cmNlcywgc3BlY2lmaWNhbGx5IHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgeDg2IGNvZGUgYW5kIHJlbGF0ZWQgaGVhZGVyIGZpbGVzLiBUaGUgaGVhZGVyIGZpbGUgYGFyY2gveDg2L2t2bS9zdm0vc3ZtLmhgIGlzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBUaGF0IGZpbGUgd2lsbCBjb250YWluIHRoZSBlbnVtZXJhdGVkIGRlZmluaXRpb24gb2YgdGhlIHBhcnRpY3VsYXIgVk1FWElUIGNvZGUgdGhhdCBpbnRlcmVzdHMgbWUuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBkZWZpbml0aW9uIHByb3ZpZGVzIGNsdWVzIGFib3V0IHRoZSBuYXR1cmUgb2YgdGhlIGJhZCBpbnB1dCwgcmVsZXZhbnQgcmVnaXN0ZXJzLCBvciBhbnkgb3RoZXIgaW1wb3J0YW50IGNvbnRleHQuIEZyb20gdGhlcmUsIEkgY2FuIHN0YXJ0IHRvIGZvcm11bGF0ZSBhIGh5cG90aGVzaXMgYWJvdXQgd2hhdCBjb25kaXRpb25zIG1pZ2h0IHRyaWdnZXIgdGhpcyBzcGVjaWZpYyBWTUVYSVQgYW5kLCBob3BlZnVsbHksIGxlYWQgdG8gYSBmaXggb3IgYXQgbGVhc3QgYSB3b3JrYXJvdW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc3ZtLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcxNTpcdFx0c3ZtX3ZtZ2V4aXRfc2V0X3JldHVybl9jb2RlKHN2bSwgR0hDQl9IVl9SRVNQX0lTU1VFX0VYQ0VQVElPTiwgZGF0YSk7XG4gNzE2Olx0fVxuIDcxNzpcdFxuIDcxODpcdHN0YXRpYyBpbmxpbmUgdm9pZCBzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3RydWN0IHZjcHVfc3ZtICpzdm0sIHU2NCBzdWJlcnJvcilcbiA3MTk6XHR7XG4gNzIwOlx0XHRzdm1fdm1nZXhpdF9zZXRfcmV0dXJuX2NvZGUoc3ZtLCBHSENCX0hWX1JFU1BfTUFMRk9STUVEX0lOUFVULCBzdWJlcnJvcik7XG4gNzIxOlx0fVxuIDcyMjpcdFxuIDcyMzpcdHN0YXRpYyBpbmxpbmUgdm9pZCBzdm1fdm1nZXhpdF9zdWNjZXNzKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCB1NjQgZGF0YSlcbiA3MjQ6XHR7XG4gNzI1Olx0XHRzdm1fdm1nZXhpdF9zZXRfcmV0dXJuX2NvZGUoc3ZtLCBHSENCX0hWX1JFU1BfTk9fQUNUSU9OLCBkYXRhKTtcbiA3MjY6XHR9XG4gNzI3Olx0XG4gNzI4Olx0c3RhdGljIGlubGluZSB2b2lkIHN2bV92bWdleGl0X25vX2FjdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdTY0IGRhdGEpXG4gNzI5Olx0e1xuIDczMDpcdFx0c3ZtX3ZtZ2V4aXRfc2V0X3JldHVybl9jb2RlKHN2bSwgR0hDQl9IVl9SRVNQX05PX0FDVElPTiwgZGF0YSk7XG4gNzMxOlx0fVxuIDczMjpcdFxuIDczMzpcdC8qXG4gNzM0Olx0ICogVGhlIE1TUlBNIGlzIDhLaUIgaW4gc2l6ZSwgZGl2aWRlZCBpbnRvIGZvdXIgMktpQiByYW5nZXMgKHRoZSBmb3VydGggcmFuZ2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU1NgoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHN1bW1hcml6aW5nIHRoZSAmIzM0O3Rob3VnaHRzJiMzNDsgcmVsYXRlZCB0byBgc3ZtX3ZtZ2V4aXRfc2V0X3JldHVybl9jb2RlYCwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZToKCioqTXkgUGVyc3BlY3RpdmUgb24gYHN2bV92bWdleGl0X3NldF9yZXR1cm5fY29kZWAqKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYHN2bV92bWdleGl0X3NldF9yZXR1cm5fY29kZWAuIEltbWVkaWF0ZWx5LCBteSBtaW5kIGp1bXBzIHRvIHRoZSBjb3JlIG9mIHRoaXM6IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYW4gU1ZNIChTZWN1cmUgVmlydHVhbCBNYWNoaW5lKSBhbmQsIG1vcmUgc3BlY2lmaWNhbGx5LCBhIFZNLWV4aXQuIFRoZSBrZXkgaGVyZSBpcyAqc2V0dGluZyogYSByZXR1cm4gY29kZS4gVGhpcyBzdWdnZXN0cyB3ZSBhcmUgaW4gdGhlIHByaXZpbGVnZWQgbW9kZSBvZiB0aGUgaG9zdCBPUyBhbmQgbWFuaXB1bGF0aW5nIHRoZSBleGl0IHByb2Nlc3MgYWZ0ZXIgYSB0cmFwLgoKRmlyc3QsIEkgbmVlZCB0byBjb25zaWRlciAqd2h5KiB3ZSYjMzk7cmUgc2V0dGluZyBhIHJldHVybiBjb2RlLiBJcyB0aGlzIHJlbGF0ZWQgdG8gYW4gZXhjZXB0aW9uPyBBIGd1ZXN0IGluc3RydWN0aW9uPyBBIHNlY3VyaXR5IGV2ZW50PyAgVGhlIHJlYXNvbiBpcyBmdW5kYW1lbnRhbCB0byB0aGUgY29udGV4dC4gQSBwcm9wZXJseSBjb2RlZCBzeXN0ZW0gc2hvdWxkIGF2b2lkIHRoZSByZXR1cm4gb2YgZ2VuZXJpYyBlcnJvcnMuCgpUaGlua2luZyBhYm91dCB0aGUgY29kZSBpdHNlbGYsIEkmIzM5O20gaW1hZ2luaW5nIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgVk0tZXhpdCBoYW5kbGVyLiBJJiMzOTttIHZpc3VhbGl6aW5nIHRoZSBwb3RlbnRpYWwgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkOiB0aGUgVk1DUyAoVmlydHVhbCBNYWNoaW5lIENvbnRyb2wgU3RydWN0dXJlKSwgdGhlIGV4aXQgaW5mb3JtYXRpb24gYXJlYSwgdGhlIEdQUnMgKEdlbmVyYWwgUHVycG9zZSBSZWdpc3RlcnMpLCBhbmQgdGhlIG92ZXJhbGwgc3RhdGUgb2YgdGhlIHZpcnR1YWwgbWFjaGluZS4gIEkmIzM5O20gdHJ5aW5nIHRvIG1lbnRhbGx5IHRyYWNlIHRoZSBleGVjdXRpb24gZmxvdy4gV2hlcmUgaW4gdGhlIHByb2Nlc3MgZG9lcyB0aGlzIGNvZGUgcmVzaWRlPyBEb2VzIGl0IGhhcHBlbiBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGhhbmRsaW5nIG9mIHRoZSBWTSBpbnN0cnVjdGlvbj8KClRoZSAmIzM0O3NldHRpbmcmIzM0OyBwYXJ0IGlzIHdoYXQgaW50cmlndWVzIG1lLiBXaGF0IHJhbmdlIG9mIHJldHVybiBjb2RlcyBhcmUgd2UgdGFsa2luZyBhYm91dD8gQXJlIHdlIGRlYWxpbmcgd2l0aCBlcnJvciBjb2RlcyBkZWZpbmVkIGJ5IEFNRCwgYSBjdXN0b20gc2V0LCBvciBwb3NzaWJseSBhIG1hcHBpbmcgdG8gYSBzcGVjaWZpYyBPUyYjMzk7cyBlcnJvciBjb2Rlcz8gSWYgd2UmIzM5O3JlIHNldHRpbmcgYSBjdXN0b20gdmFsdWUsIEkgaW1tZWRpYXRlbHkgd2FudCB0byBpbnZlc3RpZ2F0ZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhpcyBjdXN0b20gY2FsbC4gV2UgbmVlZCB0byBiZSBjcnlzdGFsIGNsZWFyIGFib3V0IHRoZSBtZWFuaW5nIG9mIHRoZXNlIGNvZGVzIHRvIGVuc3VyZSBwcm9wZXIgZXJyb3IgaGFuZGxpbmcgb24gdGhlIGd1ZXN0IHNpZGUuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGxvdy1sZXZlbCBWTSBiZWhhdmlvcnMuCgpBbHNvLCBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoZSBwb3RlbnRpYWwgcGl0ZmFsbHM6IHdoYXQgaGFwcGVucyBpZiB0aGUgcmV0dXJuIGNvZGUgaXNuJiMzOTt0IHByb3Blcmx5IGhhbmRsZWQgYnkgdGhlIGd1ZXN0PyBEb2VzIHRoaXMgbGVhZCB0byBhIGNyYXNoPyBEb2VzIGl0IGV4cG9zZSBhbnkgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzPyBQcm9wZXIgdGVzdGluZyBpcyBvYnZpb3VzbHkgY3JpdGljYWwgaGVyZSwgZXNwZWNpYWxseSBpbiBhIHNlY3VyaXR5IGNvbnRleHQuCgpGaW5hbGx5LCBJJiMzOTttIGNvbnNpZGVyaW5nIHRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIFRoaXMgaXMgbGlrZWx5IGEgdmVyeSBmcmVxdWVudGx5LWNhbGxlZCBmdW5jdGlvbi4gIElmIHRoZXJlIGFyZSBvcHRpbWl6YXRpb25zIHRoYXQgY2FuIGJlIGRvbmUgdG8gdGhpcyBmdW5jdGlvbiwgdGhleSBzaG91bGQgYmUgaW52ZXN0aWdhdGVkIGVhcmx5IG9uLiBDb3VsZCB3ZSBjYWNoZSBpbmZvcm1hdGlvbiwgc3RyZWFtbGluZSBkYXRhIHN0cnVjdHVyZSBhY2Nlc3MsIG9yIHVzZSBtb3JlIGVmZmljaWVudCBlcnJvciBoYW5kbGluZyB0ZWNobmlxdWVzPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAyMjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdm1fdm1nZXhpdF9zZXRfcmV0dXJuX2NvZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTY5ND1zdGF0aWMgaW5saW5lIGJvb2wgaXNfdm5taV9lbmFibGVkKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNzAzLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo3MDQ6c3RhdGljIGlubGluZSB2b2lkIHN2bV92bWdleGl0X3NldF9yZXR1cm5fY29kZShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNzA1LVx0XHRcdFx0XHRcdHU2NCByZXNwb25zZSwgdTY0IGRhdGEpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD03MTE9c3RhdGljIGlubGluZSB2b2lkIHN2bV92bWdleGl0X2luamVjdF9leGNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0sIHU4IHZlY3Rvcilcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTcxNC1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6NzE1Olx0c3ZtX3ZtZ2V4aXRfc2V0X3JldHVybl9jb2RlKHN2bSwgR0hDQl9IVl9SRVNQX0lTU1VFX0VYQ0VQVElPTiwgZGF0YSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTcxNi19XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD03MTg9c3RhdGljIGlubGluZSB2b2lkIHN2bV92bWdleGl0X2JhZF9pbnB1dChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdTY0IHN1YmVycm9yKVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC03MTkte1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo3MjA6XHRzdm1fdm1nZXhpdF9zZXRfcmV0dXJuX2NvZGUoc3ZtLCBHSENCX0hWX1JFU1BfTUFMRk9STUVEX0lOUFVULCBzdWJlcnJvcik7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTcyMS19XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD03MjM9c3RhdGljIGlubGluZSB2b2lkIHN2bV92bWdleGl0X3N1Y2Nlc3Moc3RydWN0IHZjcHVfc3ZtICpzdm0sIHU2NCBkYXRhKVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC03MjQte1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo3MjU6XHRzdm1fdm1nZXhpdF9zZXRfcmV0dXJuX2NvZGUoc3ZtLCBHSENCX0hWX1JFU1BfTk9fQUNUSU9OLCBkYXRhKTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNzI2LX1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTcyOD1zdGF0aWMgaW5saW5lIHZvaWQgc3ZtX3ZtZ2V4aXRfbm9fYWN0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCB1NjQgZGF0YSlcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNzI5LXtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6NzMwOlx0c3ZtX3ZtZ2V4aXRfc2V0X3JldHVybl9jb2RlKHN2bSwgR0hDQl9IVl9SRVNQX05PX0FDVElPTiwgZGF0YSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTczMS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODM0CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHMsIGdlYXJlZCB0b3dhcmRzIGFuIGV4cGVydDoKCioqRGl2aW5nIGludG8gYHN2bS5oYCAtIExpbmVzIDcwMC03MTAqKgoKT2theSwgdGltZSB0byB6ZXJvIGluIG9uIGEgc3BlY2lmaWMgc2VjdGlvbi4gTGV0JiMzOTtzIHB1bGwgdXAgdGhlIGBzdm0uaGAgaGVhZGVyIGZpbGUgYW5kIGhlYWQgZGlyZWN0bHkgdG8gbGluZXMgNzAwIHRocm91Z2ggNzEwLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYXJvdW5kIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24gb3IgZGF0YSBzdHJ1Y3R1cmUuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIGtlcm5lbCBjb21wdXRhdGlvbiBpcyB0YWtpbmcgcGxhY2UuIFdoYXQgSSByZWFsbHkgbmVlZCB0byBrbm93IGlzIHdoZXRoZXIgdGhpcyBzZWN0aW9uIGlzIHRoZSBjcml0aWNhbCBib3R0bGVuZWNrLCBhbmQgdGhpcyBpbmZvcm1hdGlvbiBtYXkgaGVscC4gSSYjMzk7bGwgZm9jdXMgb24gdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgY29udHJvbCBmbG93LiBUaGVyZSYjMzk7cyBwcm9iYWJseSBzb21ldGhpbmcgc3VidGxlIEkgbmVlZCB0byBjYXRjaCBoZXJlIHRoYXQgSSBoYXZlbiYjMzk7dCBzZWVuIGR1cmluZyBteSBpbml0aWFsIHJldmlldy4gVGltZSB0byBnZXQgbXkgaGVhZCBpbiB0aGUgZ2FtZSBhbmQgdW5kZXJzdGFuZCB0aGUgbnV0cyBhbmQgYm9sdHMgb2Ygd2hhdCYjMzk7cyBoYXBwZW5pbmcgaW4gdGhpcyBiaXQgb2YgY29kZS4gSSYjMzk7bSBob3BpbmcgSSBjYW4gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUga2VybmVsIGlzIGhhbmRsaW5nIHRoaXMgY3JpdGljYWwgcGFydCBvZiB0aGUgYWxnb3JpdGhtIHdpdGggdGhpcyBkZWVwIGRpdmUsIHdoaWNoIGlzIGNyaXRpY2FsIHRvIGVuaGFuY2luZyB0aGUgY3VycmVudCBkZXNpZ24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9zdm0uaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzAwOlx0XHRlbHNlXG4gNzAxOlx0XHRcdHJldHVybiBmYWxzZTtcbiA3MDI6XHR9XG4gNzAzOlx0XG4gNzA0Olx0c3RhdGljIGlubGluZSB2b2lkIHN2bV92bWdleGl0X3NldF9yZXR1cm5fY29kZShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSxcbiA3MDU6XHRcdFx0XHRcdFx0XHR1NjQgcmVzcG9uc2UsIHU2NCBkYXRhKVxuIDcwNjpcdHtcbiA3MDc6XHRcdGdoY2Jfc2V0X3N3X2V4aXRfaW5mb18xKHN2bS1cdTAwM2VzZXZfZXMuZ2hjYiwgcmVzcG9uc2UpO1xuIDcwODpcdFx0Z2hjYl9zZXRfc3dfZXhpdF9pbmZvXzIoc3ZtLVx1MDAzZXNldl9lcy5naGNiLCBkYXRhKTtcbiA3MDk6XHR9XG4gNzEwOlx0XG4gNzExOlx0c3RhdGljIGlubGluZSB2b2lkIHN2bV92bWdleGl0X2luamVjdF9leGNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0sIHU4IHZlY3RvcilcbiA3MTI6XHR7XG4gNzEzOlx0XHR1NjQgZGF0YSA9IFNWTV9FVlRJTkpfVkFMSUQgfCBTVk1fRVZUSU5KX1RZUEVfRVhFUFQgfCB2ZWN0b3I7XG4gNzE0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIyOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzg2CgkJCQkJCQlvdXRwdXQ6IDI4NQoJCQkJCQkJdGhvdWdodHM6IDY2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTi9LQVNBTiBBbmFseXNpcyBvZiBTRVYtU05QIFZNR0VYSVQgRXJyb3IgSGFuZGxpbmcgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBtZXRpY3Vsb3VzbHkuIFRoaXMgcGF0Y2ggZm9jdXNlcyBvbiBob3cgd2UgaGFuZGxlIGVycm9ycyB3aXRoaW4gdGhlIEtWTSBTRVYtU05QIFZNR0VYSVQgcHJvY2Vzcy4gTXkgcHJpbWFyeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgc2FmZXR5IHZ1bG5lcmFiaWxpdGllcyB0aGF0IEtNU0FOIG9yIEtBU0FOIHdvdWxkIGZsYWcuCgpGaXJzdCwgSSBleGFtaW5lIHRoZSBjb2RlIGluIGRldGFpbCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBmdW5jdGlvbnMgYHNucF9oYW5kbGVfZ3Vlc3RfcmVxYCBhbmQgYHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcWAuIFRoZSBrZXkgY2hhbmdlcyBhcmUgaW4gaG93IHdlIGRlYWwgd2l0aCBmYWlsdXJlcyBmcm9tIGBrdm1fcmVhZF9ndWVzdGAgYW5kIGBrdm1fd3JpdGVfZ3Vlc3RgIGNhbGxzLiBQcmV2aW91c2x5LCBhIGZhaWx1cmUgcmVzdWx0ZWQgaW4gYSBgLUVJT2AgcmV0dXJuLCB3aGljaCB3b3VsZCBhYm9ydCB0byB0aGUgaG9zdCB1c2Vyc3BhY2UuIE5vdywgdGhlIHBhdGNoIHV0aWxpemVzIGBzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX0lOUFVUKWAgYW5kIHJldHVybnMgMSwgc2lnbmFsaW5nIGludmFsaWQgaW5wdXQgZGlyZWN0bHkgdG8gdGhlIGd1ZXN0IGFjY29yZGluZyB0byB0aGUgR0hDQiBzcGVjaWZpY2F0aW9uLgoKSSYjMzk7bSBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgZm91ciBrZXkgYXJlYXM6IAoqICAgKipVbmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZToqKiBBcmUgd2UgcmVhZGluZyBvciB1c2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiB0aGlzIG1vZGlmaWVkIGxvZ2ljPyBUaGUgY29kZSBzZXRzIGEgY29uc3RhbnQgZXJyb3IgY29kZSBpbnRvIEdIQ0IgYW5kIHJldHVybnMsIG5vLgoqICAgKipVbmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9uOioqIEFyZSB3ZSBhbGxvY2F0aW5nIGFueSBuZXcgYnVmZmVycyB3aXRob3V0IGluaXRpYWxpemluZyB0aGVtPyBJIHNlZSBubyBuZXcgYnVmZmVyIGFsbG9jYXRpb25zLgoqICAgKipLZXJuZWwgaW5mb3JtYXRpb24gbGVha3M6KiogQXJlIHdlIGNvcHlpbmcgYW55IHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB0aGUgZ3Vlc3Qgb3IgdXNlciBzcGFjZT8gV2hlbiB0aGUgYGt2bV9yZWFkX2d1ZXN0YCBvciBga3ZtX3dyaXRlX2d1ZXN0YCBvcGVyYXRpb25zIGZhaWwsIHRoZSBwYXRjaCBzaW1wbHkgc2V0cyB0aGUgZXJyb3IgY29kZSBpbiB0aGUgR0hDQiBhbmQgcmV0dXJucyB3aXRob3V0IGNvcHlpbmcgdGhlIGJ1ZmZlciwgc28gbm8uCiogICAqKkJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlczoqKiBDb3VsZCB0aGUgbmV3IGxvZ2ljIGJyYW5jaCBiYXNlZCBvbiBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3I/IEluIGBzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXFgLCBpZiBga3ZtX3JlYWRfZ3Vlc3RgIGZhaWxzLCB0aGVyZSBpcyBhIGBnb3RvIHJlcXVlc3RfaW52YWxpZDtgIGFuZCBgbXNnX3R5cGVgIGlzIG5ldmVyIHJlYWQuCgpJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoZSBjaGFuZ2VzIGFyZSBzYWZlIGFzIHRoZXkgYXJlIGNvcnJlY3RseSBzaWduYWxsaW5nIGludmFsaWQgaW5wdXQgdG8gdGhlIGd1ZXN0IGFzIGRlc2NyaWJlZCBpbiB0aGUgR0hDQiBzcGVjaWZpY2F0aW9uLgoKSW4gY29uY2x1c2lvbiwgdGhpcyBwYXRjaCBpcyBzb2xlbHkgdXBkYXRpbmcgdGhlIGVycm9yIGhhbmRsaW5nIHRvIGFsaWduIHdpdGggdGhlIEdIQ0Igc3BlY2lmaWNhdGlvbiBhbmQgZWxpbWluYXRlcyB0aGUgcmlza3MgaWRlbnRpZmllZCBhYm92ZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBvZiB0aGUgS01TQU4gb3IgS0FTQU4gdnVsbmVyYWJpbGl0aWVzIEkmIzM5O20gbG9va2luZyBmb3IuIFRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGBmYWxzZWAuIEkgYW0gc2F0aXNmaWVkIHdpdGggdGhpcyBhc3Nlc3NtZW50LCBidXQgSSYjMzk7bGwgZG91YmxlLWNoZWNrIGFsbCB0aGUgZGV0YWlscyBvbmUgbW9yZSB0aW1lIHRvIGJlIGFic29sdXRlbHkgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjI6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gS1ZNIFNFVi1TTlAgZ3Vlc3QgcmVxdWVzdCBoYW5kbGVycyAoYHNucF9oYW5kbGVfZ3Vlc3RfcmVxYCBhbmQgYHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcWApLiBTcGVjaWZpY2FsbHksIHdoZW4gcmVhZGluZy93cml0aW5nL2NsZWFyaW5nIGd1ZXN0IG1lbW9yeSBmYWlscyAoYGt2bV9yZWFkX2d1ZXN0YCwgYGt2bV93cml0ZV9ndWVzdGAsIG9yIGBrdm1fY2xlYXJfZ3Vlc3RgKSwgaW5zdGVhZCBvZiByZXR1cm5pbmcgYC1FSU9gICh3aGljaCBjYXVzZWQgS1ZNIHRvIGV4aXQgdG8gaG9zdCB1c2Vyc3BhY2UpLCBLVk0gbm93IGZvcm1hdHMgYSBHSENCIGJhZCBpbnB1dCBlcnJvciByZXNwb25zZSAoYEdIQ0JfRVJSX0lOVkFMSURfSU5QVVRgIHZpYSBgc3ZtX3ZtZ2V4aXRfYmFkX2lucHV0KClgKSBhbmQgcmVzdW1lcyB0aGUgZ3Vlc3QgKGByZXR1cm4gMWApLlxuXG5UaGVzZSBjaGFuZ2VzIHNvbGVseSBhZmZlY3QgZXJyb3IgcmV0dXJuIGNvZGVzIGFuZCBjb250cm9sIGZsb3cgZm9yIGd1ZXN0IGVycm9yIHJlcG9ydGluZzpcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHN0cnVjdCBwYWRkaW5nIGlzIGNvcGllZCB0byB1c2Vyc3BhY2Ugb3IgdGhlIGd1ZXN0LlxuMi4gSW4gYHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcWAsIGlmIHJlYWRpbmcgYG1zZ190eXBlYCBmYWlscywgY29udHJvbCBqdW1wcyBzdHJhaWdodCB0byBgcmVxdWVzdF9pbnZhbGlkYCwgYXZvaWRpbmcgYW55IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGBtc2dfdHlwZWAuXG4zLiBObyBoZWFwL3N0YWNrIGFsbG9jYXRpb25zIG9yIGJ1ZmZlciBzaXplL29mZnNldCBtYW5pcHVsYXRpb25zIGFyZSBpbnRyb2R1Y2VkLlxuXG5BcyB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIEtWTSBTRVYtU05QIGd1ZXN0IHJlcXVlc3QgaGFuZGxlcnMgKGBzbnBfaGFuZGxlX2d1ZXN0X3JlcWAgYW5kIGBzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXFgKS4gU3BlY2lmaWNhbGx5LCB3aGVuIHJlYWRpbmcvd3JpdGluZy9jbGVhcmluZyBndWVzdCBtZW1vcnkgZmFpbHMgKGBrdm1fcmVhZF9ndWVzdGAsIGBrdm1fd3JpdGVfZ3Vlc3RgLCBvciBga3ZtX2NsZWFyX2d1ZXN0YCksIGluc3RlYWQgb2YgcmV0dXJuaW5nIGAtRUlPYCAod2hpY2ggY2F1c2VkIEtWTSB0byBleGl0IHRvIGhvc3QgdXNlcnNwYWNlKSwgS1ZNIG5vdyBmb3JtYXRzIGEgR0hDQiBiYWQgaW5wdXQgZXJyb3IgcmVzcG9uc2UgKGBHSENCX0VSUl9JTlZBTElEX0lOUFVUYCB2aWEgYHN2bV92bWdleGl0X2JhZF9pbnB1dCgpYCkgYW5kIHJlc3VtZXMgdGhlIGd1ZXN0IChgcmV0dXJuIDFgKS5cblxuVGhlc2UgY2hhbmdlcyBzb2xlbHkgYWZmZWN0IGVycm9yIHJldHVybiBjb2RlcyBhbmQgY29udHJvbCBmbG93IGZvciBndWVzdCBlcnJvciByZXBvcnRpbmc6XG4xLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBzdHJ1Y3QgcGFkZGluZyBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlIG9yIHRoZSBndWVzdC5cbjIuIEluIGBzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXFgLCBpZiByZWFkaW5nIGBtc2dfdHlwZWAgZmFpbHMsIGNvbnRyb2wganVtcHMgc3RyYWlnaHQgdG8gYHJlcXVlc3RfaW52YWxpZGAsIGF2b2lkaW5nIGFueSBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBgbXNnX3R5cGVgLlxuMy4gTm8gaGVhcC9zdGFjayBhbGxvY2F0aW9ucyBvciBidWZmZXIgc2l6ZS9vZmZzZXQgbWFuaXB1bGF0aW9ucyBhcmUgaW50cm9kdWNlZC5cblxuQXMgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjEzOjE0LjY3NTg4Nzc4NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1ODU5ODQzMjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTV9BTURcIixcbiAgICBcIktWTV9BTURfU0VWXCIsXG4gICAgXCJDUllQVE9fREVWX1NQX1BTUFwiLFxuICAgIFwiQ1JZUFRPX0RFVl9DQ1BfRERcIixcbiAgICBcIkFNRF9JT01NVVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNucF9oYW5kbGVfZ3Vlc3RfcmVxXCIsXG4gICAgXCJzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXFcIixcbiAgICBcInNldl9oYW5kbGVfdm1nZXhpdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gS1ZNIFNFVi1TTlAgZ3Vlc3QgcmVxdWVzdCBoYW5kbGVycyAoYHNucF9oYW5kbGVfZ3Vlc3RfcmVxYCBhbmQgYHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcWApLiBTcGVjaWZpY2FsbHksIHdoZW4gcmVhZGluZy93cml0aW5nL2NsZWFyaW5nIGd1ZXN0IG1lbW9yeSBmYWlscyAoYGt2bV9yZWFkX2d1ZXN0YCwgYGt2bV93cml0ZV9ndWVzdGAsIG9yIGBrdm1fY2xlYXJfZ3Vlc3RgKSwgaW5zdGVhZCBvZiByZXR1cm5pbmcgYC1FSU9gICh3aGljaCBjYXVzZWQgS1ZNIHRvIGV4aXQgdG8gaG9zdCB1c2Vyc3BhY2UpLCBLVk0gbm93IGZvcm1hdHMgYSBHSENCIGJhZCBpbnB1dCBlcnJvciByZXNwb25zZSAoYEdIQ0JfRVJSX0lOVkFMSURfSU5QVVRgIHZpYSBgc3ZtX3ZtZ2V4aXRfYmFkX2lucHV0KClgKSBhbmQgcmVzdW1lcyB0aGUgZ3Vlc3QgKGByZXR1cm4gMWApLlxcblxcblRoZXNlIGNoYW5nZXMgc29sZWx5IGFmZmVjdCBlcnJvciByZXR1cm4gY29kZXMgYW5kIGNvbnRyb2wgZmxvdyBmb3IgZ3Vlc3QgZXJyb3IgcmVwb3J0aW5nOlxcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHN0cnVjdCBwYWRkaW5nIGlzIGNvcGllZCB0byB1c2Vyc3BhY2Ugb3IgdGhlIGd1ZXN0LlxcbjIuIEluIGBzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXFgLCBpZiByZWFkaW5nIGBtc2dfdHlwZWAgZmFpbHMsIGNvbnRyb2wganVtcHMgc3RyYWlnaHQgdG8gYHJlcXVlc3RfaW52YWxpZGAsIGF2b2lkaW5nIGFueSBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBgbXNnX3R5cGVgLlxcbjMuIE5vIGhlYXAvc3RhY2sgYWxsb2NhdGlvbnMgb3IgYnVmZmVyIHNpemUvb2Zmc2V0IG1hbmlwdWxhdGlvbnMgYXJlIGludHJvZHVjZWQuXFxuXFxuQXMgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gS1ZNIEFNRCBTRVYtU05QIGd1ZXN0IHJlcXVlc3QgaGFuZGxpbmcgZnVuY3Rpb25zIChzbnBfaGFuZGxlX2d1ZXN0X3JlcSBhbmQgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxKS4gV2hlbiBndWVzdCBtZW1vcnkgcmVhZC93cml0ZSBvciBjZXJ0aWZpY2F0ZSB0YWJsZSBjbGVhcmFuY2UgZmFpbHMsIEtWTSBub3cgcmVwb3J0cyBHSENCX0VSUl9JTlZBTElEX0lOUFVUIHRvIHRoZSBndWVzdCBhbmQgcmVzdW1lcyBndWVzdCBleGVjdXRpb24gcmF0aGVyIHRoYW4gcmV0dXJuaW5nIC1FSU8gdG8gdXNlcnNwYWNlLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBLVk0gY29udHJvbCBmbG93IGFuZCBWTSBzdGF0ZSBoYW5kbGluZyBvbiBhbWQ2NC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjI6MTM6MTQuNjc1ODkxNjk2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ5OTIzNjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOGY4MGM3ODdiZDNkYTEzOGE2ZDdhNjRiOGI3ODBkMWYxNGQ5NDZkMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAxMCAyMjoxMzoxMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xcbmluZGV4IDU3MDU3MjNmMWY0MTIuLmQwNzU2MjMxMDUxOWEgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcXG5AQCAtNDIyOCw4ICs0MjI4LDEwIEBAIHN0YXRpYyBpbnQgc25wX2hhbmRsZV9ndWVzdF9yZXEoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGdwYV90IHJlcV9ncGEsIGdwYV90IHJlc3BfXFxuIFxcbiBcXHRndWFyZChtdXRleCkoXFx1MDAyNnNldi1cXHUwMDNlZ3Vlc3RfcmVxX211dGV4KTtcXG4gXFxuLVxcdGlmIChrdm1fcmVhZF9ndWVzdChrdm0sIHJlcV9ncGEsIHNldi1cXHUwMDNlZ3Vlc3RfcmVxX2J1ZiwgUEFHRV9TSVpFKSlcXG4tXFx0XFx0cmV0dXJuIC1FSU87XFxuK1xcdGlmIChrdm1fcmVhZF9ndWVzdChrdm0sIHJlcV9ncGEsIHNldi1cXHUwMDNlZ3Vlc3RfcmVxX2J1ZiwgUEFHRV9TSVpFKSkge1xcbitcXHRcXHRzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX0lOUFVUKTtcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcdH1cXG4gXFxuIFxcdGRhdGEuZ2N0eF9wYWRkciA9IF9fcHNwX3BhKHNldi1cXHUwMDNlc25wX2NvbnRleHQpO1xcbiBcXHRkYXRhLnJlcV9wYWRkciA9IF9fcHNwX3BhKHNldi1cXHUwMDNlZ3Vlc3RfcmVxX2J1Zik7XFxuQEAgLTQyNDQsOCArNDI0NiwxMCBAQCBzdGF0aWMgaW50IHNucF9oYW5kbGVfZ3Vlc3RfcmVxKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBncGFfdCByZXFfZ3BhLCBncGFfdCByZXNwX1xcbiBcXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2ICFmd19lcnIpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHRpZiAoa3ZtX3dyaXRlX2d1ZXN0KGt2bSwgcmVzcF9ncGEsIHNldi1cXHUwMDNlZ3Vlc3RfcmVzcF9idWYsIFBBR0VfU0laRSkpXFxuLVxcdFxcdHJldHVybiAtRUlPO1xcbitcXHRpZiAoa3ZtX3dyaXRlX2d1ZXN0KGt2bSwgcmVzcF9ncGEsIHNldi1cXHUwMDNlZ3Vlc3RfcmVzcF9idWYsIFBBR0VfU0laRSkpIHtcXG4rXFx0XFx0c3ZtX3ZtZ2V4aXRfYmFkX2lucHV0KHN2bSwgR0hDQl9FUlJfSU5WQUxJRF9JTlBVVCk7XFxuK1xcdFxcdHJldHVybiAxO1xcbitcXHR9XFxuIFxcbiBcXHQvKiBObyBhY3Rpb24gaXMgcmVxdWVzdGVkICpmcm9tIEtWTSogaWYgdGhlcmUgd2FzIGEgZmlybXdhcmUgZXJyb3IuICovXFxuIFxcdHN2bV92bWdleGl0X25vX2FjdGlvbihzdm0sIFNOUF9HVUVTVF9FUlIoMCwgZndfZXJyKSk7XFxuQEAgLTQyOTYsNyArNDMwMCw3IEBAIHN0YXRpYyBpbnQgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBncGFfdCByZXFfZ3BhLCBncGFfdCByXFxuIFxcbiBcXHRpZiAoa3ZtX3JlYWRfZ3Vlc3Qoa3ZtLCByZXFfZ3BhICsgb2Zmc2V0b2Yoc3RydWN0IHNucF9ndWVzdF9tc2dfaGRyLCBtc2dfdHlwZSksXFxuIFxcdFxcdFxcdCAgIFxcdTAwMjZtc2dfdHlwZSwgMSkpXFxuLVxcdFxcdHJldHVybiAtRUlPO1xcbitcXHRcXHRnb3RvIHJlcXVlc3RfaW52YWxpZDtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIEFzIHBlciBHSENCIHNwZWMsIHJlcXVlc3RzIG9mIHR5cGUgTVNHX1JFUE9SVF9SRVEgYWxzbyBhbGxvdyBmb3JcXG5AQCAtNDMzNiw3ICs0MzQwLDcgQEAgc3RhdGljIGludCBzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXEoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGdwYV90IHJlcV9ncGEsIGdwYV90IHJcXG4gXFx0XFx0ICogY2VydGlmaWNhdGUgdGFibGUgaXMgdGVybWluYXRlZCBieSAyNC1ieXRlcyBvZiB6ZXJvZXMuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoZGF0YV9ucGFnZXMgXFx1MDAyNlxcdTAwMjYga3ZtX2NsZWFyX2d1ZXN0KGt2bSwgZGF0YV9ncGEsIDI0KSlcXG4tXFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuK1xcdFxcdFxcdGdvdG8gcmVxdWVzdF9pbnZhbGlkO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gc25wX2hhbmRsZV9ndWVzdF9yZXEoc3ZtLCByZXFfZ3BhLCByZXNwX2dwYSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjEzOjE2LjEyNjQyMTA4M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NjM5ODQ1MTUxMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiS1ZNX0FNRF9TRVZcIixcbiAgICBcIkNSWVBUT19ERVZfU1BfUFNQXCIsXG4gICAgXCJDUllQVE9fREVWX0NDUF9ERFwiLFxuICAgIFwiQU1EX0lPTU1VXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic25wX2hhbmRsZV9ndWVzdF9yZXFcIixcbiAgICBcInNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcVwiLFxuICAgIFwic2V2X2hhbmRsZV92bWdleGl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gS1ZNIEFNRCBTRVYtU05QIGd1ZXN0IHJlcXVlc3QgaGFuZGxpbmcgZnVuY3Rpb25zIChzbnBfaGFuZGxlX2d1ZXN0X3JlcSBhbmQgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxKS4gV2hlbiBndWVzdCBtZW1vcnkgcmVhZC93cml0ZSBvciBjZXJ0aWZpY2F0ZSB0YWJsZSBjbGVhcmFuY2UgZmFpbHMsIEtWTSBub3cgcmVwb3J0cyBHSENCX0VSUl9JTlZBTElEX0lOUFVUIHRvIHRoZSBndWVzdCBhbmQgcmVzdW1lcyBndWVzdCBleGVjdXRpb24gcmF0aGVyIHRoYW4gcmV0dXJuaW5nIC1FSU8gdG8gdXNlcnNwYWNlLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBLVk0gY29udHJvbCBmbG93IGFuZCBWTSBzdGF0ZSBoYW5kbGluZyBvbiBhbWQ2NC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4ZjgwYzc4N2JkM2RhMTM4YTZkN2E2NGI4Yjc4MGQxZjE0ZDk0NmQyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMjI6MTM6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuaW5kZXggNTcwNTcyM2YxZjQxMi4uZDA3NTYyMzEwNTE5YSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbkBAIC00MjI4LDggKzQyMjgsMTAgQEAgc3RhdGljIGludCBzbnBfaGFuZGxlX2d1ZXN0X3JlcShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgZ3BhX3QgcmVxX2dwYSwgZ3BhX3QgcmVzcF9cbiBcbiBcdGd1YXJkKG11dGV4KShcdTAwMjZzZXYtXHUwMDNlZ3Vlc3RfcmVxX211dGV4KTtcbiBcbi1cdGlmIChrdm1fcmVhZF9ndWVzdChrdm0sIHJlcV9ncGEsIHNldi1cdTAwM2VndWVzdF9yZXFfYnVmLCBQQUdFX1NJWkUpKVxuLVx0XHRyZXR1cm4gLUVJTztcbitcdGlmIChrdm1fcmVhZF9ndWVzdChrdm0sIHJlcV9ncGEsIHNldi1cdTAwM2VndWVzdF9yZXFfYnVmLCBQQUdFX1NJWkUpKSB7XG4rXHRcdHN2bV92bWdleGl0X2JhZF9pbnB1dChzdm0sIEdIQ0JfRVJSX0lOVkFMSURfSU5QVVQpO1xuK1x0XHRyZXR1cm4gMTtcbitcdH1cbiBcbiBcdGRhdGEuZ2N0eF9wYWRkciA9IF9fcHNwX3BhKHNldi1cdTAwM2VzbnBfY29udGV4dCk7XG4gXHRkYXRhLnJlcV9wYWRkciA9IF9fcHNwX3BhKHNldi1cdTAwM2VndWVzdF9yZXFfYnVmKTtcbkBAIC00MjQ0LDggKzQyNDYsMTAgQEAgc3RhdGljIGludCBzbnBfaGFuZGxlX2d1ZXN0X3JlcShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgZ3BhX3QgcmVxX2dwYSwgZ3BhX3QgcmVzcF9cbiBcdGlmIChyZXQgXHUwMDI2XHUwMDI2ICFmd19lcnIpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRpZiAoa3ZtX3dyaXRlX2d1ZXN0KGt2bSwgcmVzcF9ncGEsIHNldi1cdTAwM2VndWVzdF9yZXNwX2J1ZiwgUEFHRV9TSVpFKSlcbi1cdFx0cmV0dXJuIC1FSU87XG4rXHRpZiAoa3ZtX3dyaXRlX2d1ZXN0KGt2bSwgcmVzcF9ncGEsIHNldi1cdTAwM2VndWVzdF9yZXNwX2J1ZiwgUEFHRV9TSVpFKSkge1xuK1x0XHRzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX0lOUFVUKTtcbitcdFx0cmV0dXJuIDE7XG4rXHR9XG4gXG4gXHQvKiBObyBhY3Rpb24gaXMgcmVxdWVzdGVkICpmcm9tIEtWTSogaWYgdGhlcmUgd2FzIGEgZmlybXdhcmUgZXJyb3IuICovXG4gXHRzdm1fdm1nZXhpdF9ub19hY3Rpb24oc3ZtLCBTTlBfR1VFU1RfRVJSKDAsIGZ3X2VycikpO1xuQEAgLTQyOTYsNyArNDMwMCw3IEBAIHN0YXRpYyBpbnQgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBncGFfdCByZXFfZ3BhLCBncGFfdCByXG4gXG4gXHRpZiAoa3ZtX3JlYWRfZ3Vlc3Qoa3ZtLCByZXFfZ3BhICsgb2Zmc2V0b2Yoc3RydWN0IHNucF9ndWVzdF9tc2dfaGRyLCBtc2dfdHlwZSksXG4gXHRcdFx0ICAgXHUwMDI2bXNnX3R5cGUsIDEpKVxuLVx0XHRyZXR1cm4gLUVJTztcbitcdFx0Z290byByZXF1ZXN0X2ludmFsaWQ7XG4gXG4gXHQvKlxuIFx0ICogQXMgcGVyIEdIQ0Igc3BlYywgcmVxdWVzdHMgb2YgdHlwZSBNU0dfUkVQT1JUX1JFUSBhbHNvIGFsbG93IGZvclxuQEAgLTQzMzYsNyArNDM0MCw3IEBAIHN0YXRpYyBpbnQgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBncGFfdCByZXFfZ3BhLCBncGFfdCByXG4gXHRcdCAqIGNlcnRpZmljYXRlIHRhYmxlIGlzIHRlcm1pbmF0ZWQgYnkgMjQtYnl0ZXMgb2YgemVyb2VzLlxuIFx0XHQgKi9cbiBcdFx0aWYgKGRhdGFfbnBhZ2VzIFx1MDAyNlx1MDAyNiBrdm1fY2xlYXJfZ3Vlc3Qoa3ZtLCBkYXRhX2dwYSwgMjQpKVxuLVx0XHRcdHJldHVybiAtRUlPO1xuK1x0XHRcdGdvdG8gcmVxdWVzdF9pbnZhbGlkO1xuIFx0fVxuIFxuIFx0cmV0dXJuIHNucF9oYW5kbGVfZ3Vlc3RfcmVxKHN2bSwgcmVxX2dwYSwgcmVzcF9ncGEpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjI6MTM6MTYuMTI2NDIyMjIzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjA1NDM1NTY4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNFViBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgcGF0Y2ggaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhciBlbm91Z2gsIGFuZCB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBhbWQ2NCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIGNvbnRleHQgb2YgS1ZNIGFuZCBTRVYuIEknbSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgLiBUaGF0J3Mgd2hlcmUgdGhlIG1hZ2ljIHByb2JhYmx5IGhhcHBlbnMuXG5cbkknbGwgYmUgdXNpbmcgbXkgc3RhbmRhcmQgdG9vbGtpdCB0byBhbmFseXplIHRoaXM6IHN0YXRpYyBhbmFseXNpcywgbGlrZWx5IHN1cHBsZW1lbnRlZCBieSBkeW5hbWljIGFuYWx5c2lzIGlmIEkgbmVlZCBpdC4gSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgbm90IGp1c3QgdGhlIG1vZGlmaWVkIGxpbmVzLCBidXQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhlIGV4aXN0aW5nIGNvZGUgaXMgcGFyYW1vdW50IHRvIGdyYXNwaW5nIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZXNlIGNoYW5nZXMgYW5kIGFueSBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBjaGFuZ2VzIGludGVyYWN0IHdpdGggdGhlIFNFViBmcmFtZXdvcmsgaW4gcGFydGljdWxhciwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgbmV3IHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBvciBmZWF0dXJlcyB0aGF0IGFyZSBpbnRyb2R1Y2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTI4LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjoxMzoyMi4xODA3Nzk3NThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDkwMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MjIwLFxuICBcIkxpbmVDb3VudFwiOiA5MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MjIwOlxcdFxcdHN0cnVjdCBzZXZfZGF0YV9zbnBfZ3Vlc3RfcmVxdWVzdCBkYXRhID0gezB9O1xcbjQyMjE6XFx0XFx0c3RydWN0IGt2bSAqa3ZtID0gc3ZtLVxcdTAwM2V2Y3B1Lmt2bTtcXG40MjIyOlxcdFxcdHN0cnVjdCBrdm1fc2V2X2luZm8gKnNldiA9IHRvX2t2bV9zZXZfaW5mbyhrdm0pO1xcbjQyMjM6XFx0XFx0c2V2X3JldF9jb2RlIGZ3X2VyciA9IDA7XFxuNDIyNDpcXHRcXHRpbnQgcmV0O1xcbjQyMjU6XFx0XFxuNDIyNjpcXHRcXHRpZiAoIWlzX3Nldl9zbnBfZ3Vlc3QoXFx1MDAyNnN2bS1cXHUwMDNldmNwdSkpXFxuNDIyNzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40MjI4OlxcdFxcbjQyMjk6XFx0XFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZzZXYtXFx1MDAzZWd1ZXN0X3JlcV9tdXRleCk7XFxuNDIzMDpcXHRcXG40MjMxOlxcdFxcdGlmIChrdm1fcmVhZF9ndWVzdChrdm0sIHJlcV9ncGEsIHNldi1cXHUwMDNlZ3Vlc3RfcmVxX2J1ZiwgUEFHRV9TSVpFKSkge1xcbjQyMzI6XFx0XFx0XFx0c3ZtX3ZtZ2V4aXRfYmFkX2lucHV0KHN2bSwgR0hDQl9FUlJfSU5WQUxJRF9JTlBVVCk7XFxuNDIzMzpcXHRcXHRcXHRyZXR1cm4gMTtcXG40MjM0OlxcdFxcdH1cXG40MjM1OlxcdFxcbjQyMzY6XFx0XFx0ZGF0YS5nY3R4X3BhZGRyID0gX19wc3BfcGEoc2V2LVxcdTAwM2VzbnBfY29udGV4dCk7XFxuNDIzNzpcXHRcXHRkYXRhLnJlcV9wYWRkciA9IF9fcHNwX3BhKHNldi1cXHUwMDNlZ3Vlc3RfcmVxX2J1Zik7XFxuNDIzODpcXHRcXHRkYXRhLnJlc19wYWRkciA9IF9fcHNwX3BhKHNldi1cXHUwMDNlZ3Vlc3RfcmVzcF9idWYpO1xcbjQyMzk6XFx0XFxuNDI0MDpcXHRcXHQvKlxcbjQyNDE6XFx0XFx0ICogRmlybXdhcmUgZmFpbHVyZXMgYXJlIHByb3BhZ2F0ZWQgb24gdG8gZ3Vlc3QsIGJ1dCBhbnkgb3RoZXIgZmFpbHVyZVxcbjQyNDI6XFx0XFx0ICogY29uZGl0aW9uIGFsb25nIHRoZSB3YXkgc2hvdWxkIGJlIHJlcG9ydGVkIHRvIHVzZXJzcGFjZS4gRS5nLiBpZlxcbjQyNDM6XFx0XFx0ICogdGhlIFBTUCBpcyBkZWFkIGFuZCBjb21tYW5kcyBhcmUgdGltaW5nIG91dC5cXG40MjQ0OlxcdFxcdCAqL1xcbjQyNDU6XFx0XFx0cmV0ID0gc2V2X2lzc3VlX2NtZChrdm0sIFNFVl9DTURfU05QX0dVRVNUX1JFUVVFU1QsIFxcdTAwMjZkYXRhLCBcXHUwMDI2ZndfZXJyKTtcXG40MjQ2OlxcdFxcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgIWZ3X2VycilcXG40MjQ3OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuNDI0ODpcXHRcXG40MjQ5OlxcdFxcdGlmIChrdm1fd3JpdGVfZ3Vlc3Qoa3ZtLCByZXNwX2dwYSwgc2V2LVxcdTAwM2VndWVzdF9yZXNwX2J1ZiwgUEFHRV9TSVpFKSkge1xcbjQyNTA6XFx0XFx0XFx0c3ZtX3ZtZ2V4aXRfYmFkX2lucHV0KHN2bSwgR0hDQl9FUlJfSU5WQUxJRF9JTlBVVCk7XFxuNDI1MTpcXHRcXHRcXHRyZXR1cm4gMTtcXG40MjUyOlxcdFxcdH1cXG40MjUzOlxcdFxcbjQyNTQ6XFx0XFx0LyogTm8gYWN0aW9uIGlzIHJlcXVlc3RlZCAqZnJvbSBLVk0qIGlmIHRoZXJlIHdhcyBhIGZpcm13YXJlIGVycm9yLiAqL1xcbjQyNTU6XFx0XFx0c3ZtX3ZtZ2V4aXRfbm9fYWN0aW9uKHN2bSwgU05QX0dVRVNUX0VSUigwLCBmd19lcnIpKTtcXG40MjU2OlxcdFxcbjQyNTc6XFx0XFx0LyogcmVzdW1lIGd1ZXN0ICovXFxuNDI1ODpcXHRcXHRyZXR1cm4gMTtcXG40MjU5OlxcdH1cXG40MjYwOlxcdFxcbjQyNjE6XFx0c3RhdGljIGludCBzbnBfcmVxX2NlcnRzX2VycihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdTMyIHZtbV9lcnJvcilcXG40MjYyOlxcdHtcXG40MjYzOlxcdFxcdGdoY2Jfc2V0X3N3X2V4aXRfaW5mb18yKHN2bS1cXHUwMDNlc2V2X2VzLmdoY2IsIFNOUF9HVUVTVF9FUlIodm1tX2Vycm9yLCAwKSk7XFxuNDI2NDpcXHRcXG40MjY1OlxcdFxcdHJldHVybiAxOyAvKiByZXN1bWUgZ3Vlc3QgKi9cXG40MjY2OlxcdH1cXG40MjY3OlxcdFxcbjQyNjg6XFx0c3RhdGljIGludCBzbnBfY29tcGxldGVfcmVxX2NlcnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG40MjY5OlxcdHtcXG40MjcwOlxcdFxcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xcbjQyNzE6XFx0XFx0c3RydWN0IHZtY2JfY29udHJvbF9hcmVhICpjb250cm9sID0gXFx1MDAyNnN2bS1cXHUwMDNldm1jYi1cXHUwMDNlY29udHJvbDtcXG40MjcyOlxcdFxcbjQyNzM6XFx0XFx0c3dpdGNoIChSRUFEX09OQ0UodmNwdS1cXHUwMDNlcnVuLVxcdTAwM2VzbnBfcmVxX2NlcnRzLnJldCkpIHtcXG40Mjc0OlxcdFxcdGNhc2UgMDpcXG40Mjc1OlxcdFxcdFxcdHJldHVybiBzbnBfaGFuZGxlX2d1ZXN0X3JlcShzdm0sIGNvbnRyb2wtXFx1MDAzZWV4aXRfaW5mb18xLFxcbjQyNzY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGNvbnRyb2wtXFx1MDAzZWV4aXRfaW5mb18yKTtcXG40Mjc3OlxcdFxcdGNhc2UgRU5PU1BDOlxcbjQyNzg6XFx0XFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5yZWdzW1ZDUFVfUkVHU19SQlhdID0gdmNwdS1cXHUwMDNlcnVuLVxcdTAwM2VzbnBfcmVxX2NlcnRzLm5wYWdlcztcXG40Mjc5OlxcdFxcdFxcdHJldHVybiBzbnBfcmVxX2NlcnRzX2Vycihzdm0sIFNOUF9HVUVTVF9WTU1fRVJSX0lOVkFMSURfTEVOKTtcXG40MjgwOlxcdFxcdGNhc2UgRUFHQUlOOlxcbjQyODE6XFx0XFx0XFx0cmV0dXJuIHNucF9yZXFfY2VydHNfZXJyKHN2bSwgU05QX0dVRVNUX1ZNTV9FUlJfQlVTWSk7XFxuNDI4MjpcXHRcXHRjYXNlIEVJTzpcXG40MjgzOlxcdFxcdFxcdHJldHVybiBzbnBfcmVxX2NlcnRzX2Vycihzdm0sIFNOUF9HVUVTVF9WTU1fRVJSX0dFTkVSSUMpO1xcbjQyODQ6XFx0XFx0ZGVmYXVsdDpcXG40Mjg1OlxcdFxcdFxcdGJyZWFrO1xcbjQyODY6XFx0XFx0fVxcbjQyODc6XFx0XFxuNDI4ODpcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40Mjg5OlxcdH1cXG40MjkwOlxcdFxcbjQyOTE6XFx0c3RhdGljIGludCBzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXEoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGdwYV90IHJlcV9ncGEsIGdwYV90IHJlc3BfZ3BhKVxcbjQyOTI6XFx0e1xcbjQyOTM6XFx0XFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gXFx1MDAyNnN2bS1cXHUwMDNldmNwdTtcXG40Mjk0OlxcdFxcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXFx1MDAzZWt2bTtcXG40Mjk1OlxcdFxcbjQyOTY6XFx0XFx0dTggbXNnX3R5cGU7XFxuNDI5NzpcXHRcXG40Mjk4OlxcdFxcdGlmICghaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSlcXG40Mjk5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjQzMDA6XFx0XFxuNDMwMTpcXHRcXHRpZiAoa3ZtX3JlYWRfZ3Vlc3Qoa3ZtLCByZXFfZ3BhICsgb2Zmc2V0b2Yoc3RydWN0IHNucF9ndWVzdF9tc2dfaGRyLCBtc2dfdHlwZSksXFxuNDMwMjpcXHRcXHRcXHRcXHQgICBcXHUwMDI2bXNnX3R5cGUsIDEpKVxcbjQzMDM6XFx0XFx0XFx0Z290byByZXF1ZXN0X2ludmFsaWQ7XFxuNDMwNDpcXHRcXG40MzA1OlxcdFxcdC8qXFxuNDMwNjpcXHRcXHQgKiBBcyBwZXIgR0hDQiBzcGVjLCByZXF1ZXN0cyBvZiB0eXBlIE1TR19SRVBPUlRfUkVRIGFsc28gYWxsb3cgZm9yXFxuNDMwNzpcXHRcXHQgKiBhZGRpdGlvbmFsIGNlcnRpZmljYXRlIGRhdGEgdG8gYmUgcHJvdmlkZWQgYWxvbmdzaWRlIHRoZSBhdHRlc3RhdGlvblxcbjQzMDg6XFx0XFx0ICogcmVwb3J0IHZpYSB0aGUgZ3Vlc3QtcHJvdmlkZWQgZGF0YSBwYWdlcyBpbmRpY2F0ZWQgYnkgUkFYL1JCWC4gSWZcXG40MzA5OlxcdFxcdCAqIHVzZXJzcGFjZSBlbmFibGVzIEtWTV9FWElUX1NOUF9SRVFfQ0VSVFMsIHRoZW4gZXhpdCB0byB1c2Vyc3BhY2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjI6MTM6MjIuMTgwOTkwNDA4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIwNTAzNDY0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgYnJvYWRlciBTZWN1cmUgTmVzdGVkIFBhZ2luZyAoU05QKSBjb250ZXh0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgcHVycG9zZSBvZiB0aGUgZnVuY3Rpb24sIGFuZCB3aGF0IGV4dGVybmFsIGd1ZXN0IHJlcXVlc3RzIGl0IGlzIGhhbmRsaW5nLCBhbmQgaW4gd2hhdCBjb250ZXh0LiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgc29tZSBvZiB0aGUgY29tcGxleGl0eTsgSSdtIGV4cGVjdGluZyBzb21lIGtpbmQgb2YgZGlzcGF0Y2ggbWVjaGFuaXNtIG9yIHN3aXRjaCBzdGF0ZW1lbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXQncyBkb2luZyB3aXRoIHRoZXNlIGV4dGVybmFsIHJlcXVlc3RzLCB3aGV0aGVyIGl0J3MgdmFsaWRhdGluZyB0aGVtLCB0cmFuc2xhdGluZyB0aGVtLCBmb3J3YXJkaW5nIHRoZW0sIG9yIGFjdHVhbGx5IHByb2Nlc3NpbmcgdGhlbS4gV2hhdCByZXNvdXJjZXMgaXMgaXQgdG91Y2hpbmc/IERvZXMgaXQgaW52b2x2ZSBhbnkgVk0gZXhpdHMgb3IgcGFnZSB0YWJsZSBtYW5pcHVsYXRpb25zPyBJIHdpbGwgbmVlZCB0byBsb29rIHRvIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGl0IG1pZ2h0IGJlIHVzaW5nIHRvIHVuZGVyc3RhbmQgaWYgaXQncyBvcGVyYXRpbmcgb24gYW55IHBlci1WTSBvciBnbG9iYWwgZGF0YSwgYW5kIGhvdyBpdCBoYW5kbGVzIGNvbmN1cnJlbmN5IGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBndWVzdHMuIFRoZSBmbG93IG9mIHRoaXMgZnVuY3Rpb24gaXMgZ29pbmcgdG8gZ2l2ZSBtZSBhIHNvbGlkIGNsdWUuIEknbGwgZm9jdXMgb24gdGhlIGRhdGEgZmxvdyBhbmQgYW55IGludGVyYWN0aW9ucyB3aXRoIHRoZSBTTlAncyBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZXMsIGJlY2F1c2UgdGhhdCdzIHdoZXJlIHRoZSBtYWdpYyBpcy4gVGltZSB0byBkaWcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNzMsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjEzOjI0LjM4NjAyNzM4MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1OTMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQzMTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQzMTA6XFx0XFx0ICogdG8gZ2l2ZSB1c2Vyc3BhY2UgYW4gb3Bwb3J0dW5pdHkgdG8gcHJvdmlkZSB0aGUgY2VydGlmaWNhdGUgZGF0YVxcbjQzMTE6XFx0XFx0ICogYmVmb3JlIGlzc3VpbmcvY29tcGxldGluZyB0aGUgYXR0ZXN0YXRpb24gcmVxdWVzdC4gT3RoZXJ3aXNlLCByZXR1cm5cXG40MzEyOlxcdFxcdCAqIGFuIGVtcHR5IGNlcnRpZmljYXRlIHRhYmxlIGluIHRoZSBndWVzdC1wcm92aWRlZCBkYXRhIHBhZ2VzIGFuZFxcbjQzMTM6XFx0XFx0ICogaGFuZGxlIHRoZSBhdHRlc3RhdGlvbiByZXF1ZXN0IGltbWVkaWF0ZWx5LlxcbjQzMTQ6XFx0XFx0ICovXFxuNDMxNTpcXHRcXHRpZiAobXNnX3R5cGUgPT0gU05QX01TR19SRVBPUlRfUkVRKSB7XFxuNDMxNjpcXHRcXHRcXHRzdHJ1Y3Qga3ZtX3Nldl9pbmZvICpzZXYgPSBcXHUwMDI2dG9fa3ZtX3N2bShrdm0pLVxcdTAwM2VzZXZfaW5mbztcXG40MzE3OlxcdFxcdFxcdHU2NCBkYXRhX25wYWdlcztcXG40MzE4OlxcdFxcdFxcdGdwYV90IGRhdGFfZ3BhO1xcbjQzMTk6XFx0XFxuNDMyMDpcXHRcXHRcXHRpZiAoIWt2bV9naGNiX3JheF9pc192YWxpZChzdm0pIHx8ICFrdm1fZ2hjYl9yYnhfaXNfdmFsaWQoc3ZtKSlcXG40MzIxOlxcdFxcdFxcdFxcdGdvdG8gcmVxdWVzdF9pbnZhbGlkO1xcbjQzMjI6XFx0XFxuNDMyMzpcXHRcXHRcXHRkYXRhX2dwYSA9IHZjcHUtXFx1MDAzZWFyY2gucmVnc1tWQ1BVX1JFR1NfUkFYXTtcXG40MzI0OlxcdFxcdFxcdGRhdGFfbnBhZ2VzID0gdmNwdS1cXHUwMDNlYXJjaC5yZWdzW1ZDUFVfUkVHU19SQlhdO1xcbjQzMjU6XFx0XFxuNDMyNjpcXHRcXHRcXHRpZiAoIVBBR0VfQUxJR05FRChkYXRhX2dwYSkpXFxuNDMyNzpcXHRcXHRcXHRcXHRnb3RvIHJlcXVlc3RfaW52YWxpZDtcXG40MzI4OlxcdFxcbjQzMjk6XFx0XFx0XFx0aWYgKHNldi1cXHUwMDNlc25wX2NlcnRzX2VuYWJsZWQpIHtcXG40MzMwOlxcdFxcdFxcdFxcdHZjcHUtXFx1MDAzZXJ1bi1cXHUwMDNlZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9TTlBfUkVRX0NFUlRTO1xcbjQzMzE6XFx0XFx0XFx0XFx0dmNwdS1cXHUwMDNlcnVuLVxcdTAwM2VzbnBfcmVxX2NlcnRzLmdwYSA9IGRhdGFfZ3BhO1xcbjQzMzI6XFx0XFx0XFx0XFx0dmNwdS1cXHUwMDNlcnVuLVxcdTAwM2VzbnBfcmVxX2NlcnRzLm5wYWdlcyA9IGRhdGFfbnBhZ2VzO1xcbjQzMzM6XFx0XFx0XFx0XFx0dmNwdS1cXHUwMDNlcnVuLVxcdTAwM2VzbnBfcmVxX2NlcnRzLnJldCA9IDA7XFxuNDMzNDpcXHRcXHRcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLmNvbXBsZXRlX3VzZXJzcGFjZV9pbyA9IHNucF9jb21wbGV0ZV9yZXFfY2VydHM7XFxuNDMzNTpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG40MzM2OlxcdFxcdFxcdH1cXG40MzM3OlxcdFxcbjQzMzg6XFx0XFx0XFx0LypcXG40MzM5OlxcdFxcdFxcdCAqIEFzIHBlciBHSENCIHNwZWMgKHNlZSBcXFwiU05QIEV4dGVuZGVkIEd1ZXN0IFJlcXVlc3RcXFwiKSwgdGhlXFxuNDM0MDpcXHRcXHRcXHQgKiBjZXJ0aWZpY2F0ZSB0YWJsZSBpcyB0ZXJtaW5hdGVkIGJ5IDI0LWJ5dGVzIG9mIHplcm9lcy5cXG40MzQxOlxcdFxcdFxcdCAqL1xcbjQzNDI6XFx0XFx0XFx0aWYgKGRhdGFfbnBhZ2VzIFxcdTAwMjZcXHUwMDI2IGt2bV9jbGVhcl9ndWVzdChrdm0sIGRhdGFfZ3BhLCAyNCkpXFxuNDM0MzpcXHRcXHRcXHRcXHRnb3RvIHJlcXVlc3RfaW52YWxpZDtcXG40MzQ0OlxcdFxcdH1cXG40MzQ1OlxcdFxcbjQzNDY6XFx0XFx0cmV0dXJuIHNucF9oYW5kbGVfZ3Vlc3RfcmVxKHN2bSwgcmVxX2dwYSwgcmVzcF9ncGEpO1xcbjQzNDc6XFx0XFxuNDM0ODpcXHRyZXF1ZXN0X2ludmFsaWQ6XFxuNDM0OTpcXHRcXHRzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX0lOUFVUKTtcXG40MzUwOlxcdFxcdHJldHVybiAxOyAvKiByZXN1bWUgZ3Vlc3QgKi9cXG40MzUxOlxcdH1cXG40MzUyOlxcdFxcbjQzNTM6XFx0c3RhdGljIGludCBzZXZfaGFuZGxlX3ZtZ2V4aXRfbXNyX3Byb3RvY29sKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxcbjQzNTQ6XFx0e1xcbjQzNTU6XFx0XFx0c3RydWN0IHZtY2JfY29udHJvbF9hcmVhICpjb250cm9sID0gXFx1MDAyNnN2bS1cXHUwMDNldm1jYi1cXHUwMDNlY29udHJvbDtcXG40MzU2OlxcdFxcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IFxcdTAwMjZzdm0tXFx1MDAzZXZjcHU7XFxuNDM1NzpcXHRcXHRzdHJ1Y3Qga3ZtX3Nldl9pbmZvICpzZXYgPSB0b19rdm1fc2V2X2luZm8odmNwdS1cXHUwMDNla3ZtKTtcXG40MzU4OlxcdFxcdHU2NCBnaGNiX2luZm87XFxuNDM1OTpcXHRcXHRpbnQgcmV0ID0gMTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjI6MTM6MjQuMzg2Mjg4NDkyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkzNDM4NDM4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgY29kZS5cblxuKipJbnZlc3RpZ2F0aW5nIGBzbnBfaGFuZGxlX2d1ZXN0X3JlcWAgYW5kIGBzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXFgKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgYXJvdW5kIHRoZXNlIGZ1bmN0aW9ucywgYHNucF9oYW5kbGVfZ3Vlc3RfcmVxYCBhbmQgYHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcWAuIFRoZSBxdWlja2VzdCB3YXkgdG8gZG8gdGhpcyBpcyB0byBzZWUgd2hlcmUgdGhleSdyZSAqY2FsbGVkKiBmcm9tLiBJJ20gZ29pbmcgdG8gcmVhY2ggZm9yIGBncmVwYCBhbmQgc2VhcmNoIHRoZSBjb2RlYmFzZSBmb3IgZXZlcnkgaW5zdGFuY2Ugb2YgdGhvc2UgZnVuY3Rpb24gbmFtZXMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBwcmV0dHkgY2xlYXIgcGljdHVyZSBvZiB0aGVpciBlbnRyeSBwb2ludHMgYW5kIHRoZSBjb250ZXh0IGluIHdoaWNoIHRoZXkncmUgYmVpbmcgaW52b2tlZC4gVGhhdCBzaG91bGQgYmUgdGhlIHBlcmZlY3Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlaXIgcm9sZSB3aXRoaW4gdGhlIHN5c3RlbS4gTGV0J3MgZ2V0IGNyYWNraW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTU2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjoxMzoyNi4zMjA2NzUwNjFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ4MTUyNDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic25wX2hhbmRsZV8oZXh0Xyk/Z3Vlc3RfcmVxXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00MTQyPXN0YXRpYyBpbnQgc2V2X3NucF9hcF9jcmVhdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDIxNy1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQyMTg6c3RhdGljIGludCBzbnBfaGFuZGxlX2d1ZXN0X3JlcShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgZ3BhX3QgcmVxX2dwYSwgZ3BhX3QgcmVzcF9ncGEpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00MjE5LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDI2OD1zdGF0aWMgaW50IHNucF9jb21wbGV0ZV9yZXFfY2VydHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00Mjc0LVxcdGNhc2UgMDpcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQyNzU6XFx0XFx0cmV0dXJuIHNucF9oYW5kbGVfZ3Vlc3RfcmVxKHN2bSwgY29udHJvbC1cXHUwMDNlZXhpdF9pbmZvXzEsXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00Mjc2LVxcdFxcdFxcdFxcdFxcdCAgICBjb250cm9sLVxcdTAwM2VleGl0X2luZm9fMik7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQyOTAtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0MjkxOnN0YXRpYyBpbnQgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBncGFfdCByZXFfZ3BhLCBncGFfdCByZXNwX2dwYSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQyOTIte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00MzQ1LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDM0NjpcXHRyZXR1cm4gc25wX2hhbmRsZV9ndWVzdF9yZXEoc3ZtLCByZXFfZ3BhLCByZXNwX2dwYSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00MzQ3LVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00NTEwPWludCBzZXZfaGFuZGxlX3ZtZ2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NjgxLVxcdFxcdGlmIChjb250cm9sLVxcdTAwM2VleGl0X2NvZGUgPT0gU1ZNX1ZNR0VYSVRfR1VFU1RfUkVRVUVTVClcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ2ODI6XFx0XFx0XFx0cmV0dXJuIHNucF9oYW5kbGVfZ3Vlc3RfcmVxKHN2bSwgY29udHJvbC1cXHUwMDNlZXhpdF9pbmZvXzEsXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NjgzLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBjb250cm9sLVxcdTAwM2VleGl0X2luZm9fMik7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00Njg0LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDY4NTpcXHRcXHRyZXR1cm4gc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxKHN2bSwgY29udHJvbC1cXHUwMDNlZXhpdF9pbmZvXzEsXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00Njg2LVxcdFxcdFxcdFxcdFxcdFxcdGNvbnRyb2wtXFx1MDAzZWV4aXRfaW5mb18yKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjI6MTM6MjYuMzc1NDkzMjkyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzE5OTUzNzg4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU0VWLVNOUCBHdWVzdCBEZXRlY3Rpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgaXNfc2V2X3NucF9ndWVzdGAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBjcml0ZXJpYSBpdCdzIHVzaW5nIHRvIGRldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGFuIFNFVi1TTlAgZ3Vlc3QgZW52aXJvbm1lbnQuIE15IHByaW1hcnkgY29uY2VybiBoZXJlIGlzIHRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIHN0YW5kYXJkIHZpcnR1YWxpemF0aW9uLCBLVk0gd2l0aCBTVk0sIGFuZCB0aGUgZXhwbGljaXQgcmVxdWlyZW1lbnQgZm9yIHBoeXNpY2FsIEFNRCBTRVYtU05QIGhhcmR3YXJlLiBUaGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgd2UncmUgZ2V0dGluZyBmYWxzZSBwb3NpdGl2ZXMgb3IgbWlzc2luZyBzb21lIHBvdGVudGlhbCBjb25maWd1cmF0aW9ucy5cblxuRXNzZW50aWFsbHksIEkgd2FudCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIG9mIGBpc19zZXZfc25wX2d1ZXN0YCBhbmQgZXhhbWluZSB0aGUgU0VWLVNOUCBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgcmVsaWFibGUgdGhpcyBjaGVjayBpcyBpbiBpZGVudGlmeWluZyB0cnVlIFNFVi1TTlAgZ3Vlc3RzIGFjcm9zcyB2YXJpb3VzIHZpcnR1YWxpemF0aW9uIHNjZW5hcmlvcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGVkZ2UgY2FzZXMgdG8gZW5zdXJlIG91ciBsb2dpYyBpcyByb2J1c3QsIHNvIEknbGwgcHJvYmFibHkgc3BlbmQgYSBnb29kIGNodW5rIG9mIHRpbWUgZ29pbmcgdGhyb3VnaCBpdHMgaW1wbGVtZW50YXRpb25zLCBsb29raW5nIGZvciBhc3N1bXB0aW9ucywgYW5kIHZlcmlmeWluZyBpdHMgYWNjdXJhY3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1MjksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjoxMzoyOS41NzUwMzM1MzZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MzAyMzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlzX3Nldl9zbnBfZ3Vlc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTM1NDU9dm9pZCBzZXZfZnJlZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzU1OC1cXHQgKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjM1NTk6XFx0aWYgKGlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkpIHtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTM1NjAtXFx0XFx0dTY0IHBmbiA9IF9fcGEoc3ZtLVxcdTAwM2VzZXZfZXMudm1zYSkgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDIxOD1zdGF0aWMgaW50IHNucF9oYW5kbGVfZ3Vlc3RfcmVxKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBncGFfdCByZXFfZ3BhLCBncGFfdCByZXNwX2dwYSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDIyNS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQyMjY6XFx0aWYgKCFpc19zZXZfc25wX2d1ZXN0KFxcdTAwMjZzdm0tXFx1MDAzZXZjcHUpKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDIyNy1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDI5MT1zdGF0aWMgaW50IHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgZ3BhX3QgcmVxX2dwYSwgZ3BhX3QgcmVzcF9ncGEpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQyOTctXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0Mjk4OlxcdGlmICghaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQyOTktXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQzNTM9c3RhdGljIGludCBzZXZfaGFuZGxlX3ZtZ2V4aXRfbXNyX3Byb3RvY29sKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NDMyLVxcdGNhc2UgR0hDQl9NU1JfUFJFRl9HUEFfUkVROlxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDQzMzpcXHRcXHRpZiAoIWlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NDM0LVxcdFxcdFxcdGdvdG8gb3V0X3Rlcm1pbmF0ZTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDQ0My1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ0NDQ6XFx0XFx0aWYgKCFpc19zZXZfc25wX2d1ZXN0KHZjcHUpKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDQ0NS1cXHRcXHRcXHRnb3RvIG91dF90ZXJtaW5hdGU7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ0NTgtXFx0Y2FzZSBHSENCX01TUl9QU0NfUkVROlxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDQ1OTpcXHRcXHRpZiAoIWlzX3Nldl9zbnBfZ3Vlc3QodmNwdSkpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NDYwLVxcdFxcdFxcdGdvdG8gb3V0X3Rlcm1pbmF0ZTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDUxMD1pbnQgc2V2X2hhbmRsZV92bWdleGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDU0My1cXHQvKiBTRVYtU05QIGd1ZXN0IHJlcXVpcmVzIHRoYXQgdGhlIEdIQ0IgR1BBIG11c3QgYmUgcmVnaXN0ZXJlZCAqL1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDU0NDpcXHRpZiAoaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDU0NS1cXHQgICAgIWdoY2JfZ3BhX2lzX3JlZ2lzdGVyZWQoc3ZtLCBjb250cm9sLVxcdTAwM2VnaGNiX2dwYSkpIHtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDU1OS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ1NjA6XFx0aWYgKGlzX3NucF9vbmx5X3ZtZ2V4aXQoY29udHJvbC1cXHUwMDNlZXhpdF9jb2RlKSBcXHUwMDI2XFx1MDAyNiAhaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSkge1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDU2MS1cXHRcXHR2Y3B1X3VuaW1wbCh2Y3B1LCBcXFwidm1nZXhpdDogZXhpdCBjb2RlICUjbGx4IGlzIFNOUC1vbmx5XFxcXG5cXFwiLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00ODQ2PXZvaWQgc2V2X2luaXRfdm1jYihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgYm9vbCBpbml0X2V2ZW50KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00ODU4LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDg1OTpcXHRpZiAoaW5pdF9ldmVudCBcXHUwMDI2XFx1MDAyNiBpc19zZXZfc25wX2d1ZXN0KHZjcHUpKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDg2MC1cXHRcXHRzZXZfc25wX2luaXRfcHJvdGVjdGVkX2d1ZXN0X3N0YXRlKHZjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00ODkzPXZvaWQgc2V2X2VzX3ByZXBhcmVfc3dpdGNoX3RvX2d1ZXN0KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qgc2V2X2VzX3NhdmVfYXJlYSAqaG9zdHNhKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTMzLVxcdCAgICAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9ERUJVR19TV0FQKSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDkzNDpcXHQgICAgIGlzX3Nldl9zbnBfZ3Vlc3QoXFx1MDAyNnN2bS1cXHUwMDNldmNwdSkpKSB7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTM1LVxcdFxcdGhvc3RzYS1cXHUwMDNlZHIwX2FkZHJfbWFzayA9IGFtZF9nZXRfZHJfYWRkcl9tYXNrKDApO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz01MzIwPXN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqc2V2X2RlY3J5cHRfdm1zYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUzNDAtXFx0LyogQ2hlY2sgaWYgdGhlIFNFViBwb2xpY3kgYWxsb3dzIGRlYnVnZ2luZyAqL1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NTM0MTpcXHRpZiAoaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSkge1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNTM0Mi1cXHRcXHRpZiAoIShzZXYtXFx1MDAzZXBvbGljeSBcXHUwMDI2IFNOUF9QT0xJQ1lfTUFTS19ERUJVRykpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTUzNDgtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo1MzQ5OlxcdGlmIChpc19zZXZfc25wX2d1ZXN0KHZjcHUpKSB7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MzUwLVxcdFxcdHN0cnVjdCBzZXZfZGF0YV9zbnBfZGJnIGRiZyA9IHswfTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MTk3ND1zdGF0aWMgaW50IG5wZl9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yMDIwLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MjAyMTpcXHRpZiAoaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSBcXHUwMDI2XFx1MDAyNiAoZXJyb3JfY29kZSBcXHUwMDI2IFBGRVJSX0dVRVNUX0VOQ19NQVNLKSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTIwMjItXFx0XFx0ZXJyb3JfY29kZSB8PSBQRkVSUl9QUklWQVRFX0FDQ0VTUztcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MzQyNj1zdGF0aWMgdm9pZCBkdW1wX3ZtY2Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNDQwLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MzQ0MTpcXHR2bV90eXBlID0gaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSA/IFxcXCJTRVYtU05QXFxcIiA6XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNDQyLVxcdFxcdCAgaXNfc2V2X2VzX2d1ZXN0KHZjcHUpID8gXFxcIlNFVi1FU1xcXCIgOlxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD00MjQ9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3Nldl9lc19ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTQyOC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjQyOTpzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfc2V2X3NucF9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC00MzAte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD00Mzg9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3Nldl9lc19ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTQ0Mi1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjQ0MzpzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfc2V2X3NucF9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC00NDQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjoxMzoyOS42MjIzNDAxNDlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzUwNTAxMzE3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgU2V2LVNOUCBHdWVzdCBDaGVjayoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgS1ZNIGh5cGVydmlzb3IgaXMgaGFuZGxpbmcgU0VWLVNOUCBndWVzdCBkZXRlY3Rpb24uIEknbSBnb2luZyBzdHJhaWdodCB0byB0aGUgc291cmNlIOKAkyB0aGUgYGFyY2gveDg2L2t2bS9zdm0vc3ZtLmhgIGZpbGUuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIGRlZmluaXRpb24gZm9yIGBpc19zZXZfc25wX2d1ZXN0YC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZSBoeXBlcnZpc29yIGlzIGRldGVybWluaW5nIGlmIGEgZ3Vlc3QgaXMgcnVubmluZyB1bmRlciBTRVYtU05QLCBhcyB0aGF0IGltcGFjdHMgYSBsb3Qgb2YgbXkgd29yayB3aXRoIHNlY3VyaXR5IG1vZHVsZXMuIEtub3dpbmcgdGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2VzIGFuZCBob3cgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gYXBwcm9hY2hlcyB0aGUgcHJvYmxlbS4gTGV0J3Mgc2VlIHdoYXQgdGhleSd2ZSBnb3QuLi4gaG9wZWZ1bGx5LCBpdCdzIHN0cmFpZ2h0Zm9yd2FyZCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTAwMzEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjoxMzozNy4xMjczNTY2MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDAyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zdm0uaFwiLFxuICBcIkZpcnN0TGluZVwiOiA0MjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MjA6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3Nldl9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIDQyMTpcXHR7XFxuIDQyMjpcXHRcXHRyZXR1cm4gX19fX3Nldl9ndWVzdCh2Y3B1LVxcdTAwM2Vrdm0pO1xcbiA0MjM6XFx0fVxcbiA0MjQ6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3Nldl9lc19ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIDQyNTpcXHR7XFxuIDQyNjpcXHRcXHRyZXR1cm4gX19fX3Nldl9lc19ndWVzdCh2Y3B1LVxcdTAwM2Vrdm0pO1xcbiA0Mjc6XFx0fVxcbiA0Mjg6XFx0XFxuIDQyOTpcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfc2V2X3NucF9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIDQzMDpcXHR7XFxuIDQzMTpcXHRcXHRyZXR1cm4gX19fX3Nldl9zbnBfZ3Vlc3QodmNwdS1cXHUwMDNla3ZtKTtcXG4gNDMyOlxcdH1cXG4gNDMzOlxcdCNlbHNlXFxuIDQzNDpcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfc2V2X2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gNDM1OlxcdHtcXG4gNDM2OlxcdFxcdHJldHVybiBmYWxzZTtcXG4gNDM3OlxcdH1cXG4gNDM4OlxcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19zZXZfZXNfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiA0Mzk6XFx0e1xcbiA0NDA6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA0NDE6XFx0fVxcbiA0NDI6XFx0XFxuIDQ0MzpcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfc2V2X3NucF9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIDQ0NDpcXHR7XFxuIDQ0NTpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDQ0NjpcXHR9XFxuIDQ0NzpcXHQjZW5kaWZcXG4gNDQ4OlxcdFxcbiA0NDk6XFx0c3RhdGljIGlubGluZSBib29sIGdoY2JfZ3BhX2lzX3JlZ2lzdGVyZWQoc3RydWN0IHZjcHVfc3ZtICpzdm0sIHU2NCB2YWwpXFxuIDQ1MDpcXHR7XFxuIDQ1MTpcXHRcXHRyZXR1cm4gc3ZtLVxcdTAwM2VzZXZfZXMuZ2hjYl9yZWdpc3RlcmVkX2dwYSA9PSB2YWw7XFxuIDQ1MjpcXHR9XFxuIDQ1MzpcXHRcXG4gNDU0OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCB2bWNiX21hcmtfYWxsX2RpcnR5KHN0cnVjdCB2bWNiICp2bWNiKVxcbiA0NTU6XFx0e1xcbiA0NTY6XFx0XFx0dm1jYi1cXHUwMDNlY29udHJvbC5jbGVhbiA9IDA7XFxuIDQ1NzpcXHR9XFxuIDQ1ODpcXHRcXG4gNDU5OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCB2bWNiX21hcmtfYWxsX2NsZWFuKHN0cnVjdCB2bWNiICp2bWNiKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjoxMzozNy4xMjc0NTgzOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTE4OTU4OTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGUgbWF0dGVyLCBzdW1tYXJpemVkIGFzIHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyB0aGUgU0VWLVNOUCBWTSBJbml0aWFsaXphdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCBzdGVwIGluIHVuZGVyc3RhbmRpbmcgdGhpcyBhcmNoaXRlY3R1cmUgaXMgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgYF9fX19zZXZfc25wX2d1ZXN0YC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgcHJlY2lzZWx5IHdoYXQgdGhpcyB2YXJpYWJsZSBvciBzdHJ1Y3R1cmUgcmVwcmVzZW50cyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgU0VWLVNOUC4gSXMgaXQgYSBmbGFnLCBhIGRlc2NyaXB0b3IsIGEgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBob2xkcyByZWxldmFudCBndWVzdCBpbmZvcm1hdGlvbiwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBuYW1lIGl0c2VsZiBzdWdnZXN0cyBpdCdzIGludGltYXRlbHkgdGllZCB0byB0aGUgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiB3aXRoIFNlY3VyZSBOZXN0ZWQgUGFnaW5nIChTRVYtU05QKSBndWVzdCwgYnV0IHRoZSBzcGVjaWZpY3MgYXJlIGNydWNpYWwuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gdHJlYXQgdGhpcyBhcyBhbiB1bmtub3duIHZhcmlhYmxlIGFuZCB0byB0cnkgdG8gZGV0ZXJtaW5lIGl0cyBzY29wZSBhbmQgYXBwbGljYXRpb24gd2l0aGluIHRoZSBTRVYtU05QIHN5c3RlbS5cblxuVGhlcmVmb3JlLCBteSBuZXh0IG1vdmUgaXMgdG8gaW5pdGlhdGUgYSBkZWVwIHNlYXJjaCB3aXRoaW4gdGhlIHJlbGV2YW50IGNvZGViYXNlIG9yIGRvY3VtZW50YXRpb24uIEknbSBnb2luZyB0byB0cmFjayBkb3duIGV2ZXJ5IGluc3RhbmNlIG9mIGBfX19fc2V2X3NucF9ndWVzdGAuIEhvcGVmdWxseSwgdGhpcyB3aWxsIGxlYWQgbWUgdG8gaXRzIGRlZmluaXRpb24sIHVzYWdlLCBhbmQgYW55IGFzc29jaWF0ZWQgaW5pdGlhbGl6YXRpb24gcm91dGluZXMuIFRoZSBnb2FsIGlzIHRvIHRyYWNlIHRoZSBsaWZlY3ljbGUgb2YgdGhpcyB2YXJpYWJsZTogd2hlcmUgaXMgaXQgZGVjbGFyZWQsIGhvdyBpcyBpdCBhc3NpZ25lZCBhIHZhbHVlLCB3aGF0IGZ1bmN0aW9ucyBvciBtb2R1bGVzIGludGVyYWN0IHdpdGggaXQsIGFuZCB3aGF0IGRhdGEgZG9lcyBpdCBjb250YWluPyBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgcGljdHVyZSBvZiB0aGUgU0VWLVNOUCBWTSBjcmVhdGlvbiBvciBpbml0aWFsaXphdGlvbi4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IHRvIHNlZSB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyB3aXRoaW4gdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4NjksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjEzOjQwLjA0NjQxOTIxOVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIwNzg3MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19fX3Nldl9zbnBfZ3Vlc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTE0Nj1zdGF0aWMgYm9vbCBzZXZfc25wX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMTQ4LVxcdGt2bV9sb2NrZGVwX2Fzc2VydF9zZXZfbG9ja19oZWxkKGt2bSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoxNDk6XFx0cmV0dXJuIF9fX19zZXZfc25wX2d1ZXN0KGt2bSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0xNTAtfVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0zMzMzPXZvaWQgc2V2X2d1ZXN0X21lbW9yeV9yZWNsYWltZWQoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMzQ1LVxcdCAqL1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzM0NjpcXHRpZiAoIV9fX19zZXZfZ3Vlc3Qoa3ZtKSB8fCBfX19fc2V2X3NucF9ndWVzdChrdm0pKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzM0Ny1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTUyNzA9dm9pZCBzZXZfZ21lbV9pbnZhbGlkYXRlX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01MjgyLVxcdCAqL1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NTI4MzpcXHRpZiAoIV9fX19zZXZfc25wX2d1ZXN0KGt2bSkpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy01Mjg0LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9NDA1PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX19fc2V2X2VzX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDExLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6NDEyOnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX19fc2V2X3NucF9ndWVzdChzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC00MTMte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD00Mjk9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3Nldl9zbnBfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNDMwLXtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjQzMTpcXHRyZXR1cm4gX19fX3Nldl9zbnBfZ3Vlc3QodmNwdS1cXHUwMDNla3ZtKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTQzMi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjEzOjQwLjA5ODUwMDE1MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDYwNDQ5NzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgYF9fX19zZXZfc25wX2d1ZXN0YCBmdW5jdGlvbiwgdGhpbmtpbmcgYWJvdXQgaXQgZnJvbSBteSBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgU0VWLVNOUCBHdWVzdCBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIGFuZCBkaXNzZWN0IHRoaXMgYF9fX19zZXZfc25wX2d1ZXN0YCBmdW5jdGlvbiB3aXRoaW4gdGhlIEFNRCBTRVYtU05QIGluZnJhc3RydWN0dXJlLiBJIGtub3cgaXQncyBkZWZpbmVkIGluIGBhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oYCwgYW5kIHRoYXQgc3VnZ2VzdHMgdGhpcyBpcyB0aGUgY29yZSBvZiBob3cgd2UgaGFuZGxlIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gd2l0aCBTZWN1cmUgTmVzdGVkIFBhZ2luZyB3aXRoaW4gdGhlIEtWTSBlbnZpcm9ubWVudC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgdGhhdCB0aGlzIGlzIGEgY3JpdGljYWwgcGllY2UsIGxpa2VseSB0aGUgZW50cnkgcG9pbnQgb3IgYSBjZW50cmFsIGhhbmRsZXIgZm9yIFNFVi1TTlAgZ3Vlc3Qgb3BlcmF0aW9ucy4gSXQncyBwcm9iYWJseSB0aGUgZnVuY3Rpb24gdGhhdCBLVk0gdXNlcyB0byBpbnRlcmZhY2Ugd2l0aCB0aGUgQU1EIFNlY3VyZSBQcm9jZXNzb3IuIEknbSBleHBlY3RpbmcgdG8gc2VlIG9wZXJhdGlvbnMgbGlrZTogc2V0dGluZyB1cCB0aGUgZ3Vlc3QncyBtZW1vcnkgZW5jcnlwdGlvbiBjb250ZXh0LCBoYW5kbGluZyBwYWdlIGZhdWx0cywgbWFuYWdpbmcgdGhlIGF0dGVzdGF0aW9uIHByb2Nlc3MsIGFuZCBtYXliZSBldmVuIGRlYWxpbmcgd2l0aCB0aGUgaW50cmljYWNpZXMgb2Ygc2VjdXJlIG1pZ3JhdGlvbi4gSSB3YW50IHRvIGNoZWNrIGhvdyB0aGUgY29kZSBkZWFscyB3aXRoIHRoZSBzcGVjaWZpYyBjaGFsbGVuZ2VzIG9mIG5lc3RlZCBwYWdpbmcgaW4gYW4gU0VWLVNOUCBjb250ZXh0IOKAkyB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlIGhvc3QncyBhbmQgZ3Vlc3QncyBwYWdlIHRhYmxlcyBtdXN0IGJlIGNvbXBsZXguXG5cbkknbSBhbHNvIGN1cmlvdXMgYWJvdXQgdGhlIGBzdHJ1Y3Qga3ZtICprdm1gIHBhcmFtZXRlci4gVGhpcyBsaWtlbHkgZ2l2ZXMgdXMgYWNjZXNzIHRvIGFsbCB0aGUgS1ZNIGNvbnRleHQgYW5kIHN0YXRlIHdlIG5lZWQgdG8gcHJvcGVybHkgbWFuYWdlIHRoZSBndWVzdCwgc28gbGV0J3MgZGlnIGluIGFuZCBzZWUgcHJlY2lzZWx5IHdoYXQgaW5mb3JtYXRpb24gaXQgcHJvdmlkZXMuIEnigJltIHRoaW5raW5nIHRoZXJlIHdpbGwgYmUgYSBsb3Qgb2YgY2FsbHMgdG8gdGhlIEFNRCBTZWN1cmUgUHJvY2Vzc29yLCBzbyBJJ20gZXhwZWN0aW5nIHRvIHNlZSBhIGxvdCBvZiBpbmxpbmUgYXNzZW1ibHksIG9yIHBlcmhhcHMgY2FsbHMgdG8gc3BlY2lmaWMgZHJpdmVyIGZ1bmN0aW9ucy4gSSdsbCBiZSBwYXJ0aWN1bGFybHkga2VlbiB0byBzZWUgaG93IHRoZXkgaGFuZGxlIG1lbW9yeSBtYW5hZ2VtZW50IGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIGFuIFNOUCBndWVzdC5cblxuTGV0J3MgZ2V0IHJlYWRpbmcgYW5kIHNlZSBob3cgd2VsbCBteSBhc3N1bXB0aW9ucyBhbGlnbiB3aXRoIHRoZSByZWFsaXR5IVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTg5MywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjEzOjQzLjE1ODk1MTgwN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwMCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQwMDpcXHRcXG4gNDAxOlxcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX19fc2V2X2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSlcXG4gNDAyOlxcdHtcXG4gNDAzOlxcdFxcdHJldHVybiB0b19rdm1fc2V2X2luZm8oa3ZtKS1cXHUwMDNlYWN0aXZlO1xcbiA0MDQ6XFx0fVxcbiA0MDU6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fX19zZXZfZXNfZ3Vlc3Qoc3RydWN0IGt2bSAqa3ZtKVxcbiA0MDY6XFx0e1xcbiA0MDc6XFx0XFx0c3RydWN0IGt2bV9zZXZfaW5mbyAqc2V2ID0gdG9fa3ZtX3Nldl9pbmZvKGt2bSk7XFxuIDQwODpcXHRcXG4gNDA5OlxcdFxcdHJldHVybiBzZXYtXFx1MDAzZWVzX2FjdGl2ZSBcXHUwMDI2XFx1MDAyNiAhV0FSTl9PTl9PTkNFKCFzZXYtXFx1MDAzZWFjdGl2ZSk7XFxuIDQxMDpcXHR9XFxuIDQxMTpcXHRcXG4gNDEyOlxcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX19fc2V2X3NucF9ndWVzdChzdHJ1Y3Qga3ZtICprdm0pXFxuIDQxMzpcXHR7XFxuIDQxNDpcXHRcXHRzdHJ1Y3Qga3ZtX3Nldl9pbmZvICpzZXYgPSB0b19rdm1fc2V2X2luZm8oa3ZtKTtcXG4gNDE1OlxcdFxcbiA0MTY6XFx0XFx0cmV0dXJuIChzZXYtXFx1MDAzZXZtc2FfZmVhdHVyZXMgXFx1MDAyNiBTVk1fU0VWX0ZFQVRfU05QX0FDVElWRSkgXFx1MDAyNlxcdTAwMjZcXG4gNDE3OlxcdFxcdCAgICAgICAhV0FSTl9PTl9PTkNFKCFfX19fc2V2X2VzX2d1ZXN0KGt2bSkpO1xcbiA0MTg6XFx0fVxcbiA0MTk6XFx0XFxuIDQyMDpcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfc2V2X2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gNDIxOlxcdHtcXG4gNDIyOlxcdFxcdHJldHVybiBfX19fc2V2X2d1ZXN0KHZjcHUtXFx1MDAzZWt2bSk7XFxuIDQyMzpcXHR9XFxuIDQyNDpcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfc2V2X2VzX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gNDI1OlxcdHtcXG4gNDI2OlxcdFxcdHJldHVybiBfX19fc2V2X2VzX2d1ZXN0KHZjcHUtXFx1MDAzZWt2bSk7XFxuIDQyNzpcXHR9XFxuIDQyODpcXHRcXG4gNDI5OlxcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19zZXZfc25wX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gNDMwOlxcdHtcXG4gNDMxOlxcdFxcdHJldHVybiBfX19fc2V2X3NucF9ndWVzdCh2Y3B1LVxcdTAwM2Vrdm0pO1xcbiA0MzI6XFx0fVxcbiA0MzM6XFx0I2Vsc2VcXG4gNDM0OlxcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19zZXZfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjoxMzo0My4xNTkwNDE2NjdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDI2NDg1NTUyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIEh5cG90aGVzaXM6IEtWTSBTVk0gYW5kIFNFVi1TTlAgdmlhIElvY3RscyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBmdXp6aW5nIEtWTSdzIFNWTSB3aXRoIFNFVi1TTlAuIFRoZSBjb3JlIHF1ZXN0aW9uIGlzOiBjYW4gSSBhY3R1YWxseSBsZXZlcmFnZSBLVk0gaW9jdGxzLCBvciBldmVuIFZNIGV4ZWN1dGlvbiBpbiBRRU1VL1N5emthbGxlciwgdG8gdHJpZ2dlciBhbmQgdGhlcmVmb3JlLCBmdXp6IHRoZSBTRVYtU05QIGZ1bmN0aW9uYWxpdHk/XG5cblJpZ2h0LCBTeXprYWxsZXIgYWxyZWFkeSBoZWF2aWx5IGV4ZXJjaXNlcyBLVk0uIEkga25vdyBpdCB0aHJvd3MgZXZlcnl0aGluZyBhdCB0aGUgYEtWTV9DUkVBVEVfVk1gLCBgS1ZNX01FTU9SWV9FTkNSWVBUX09QYCwgYEtWTV9SVU5gLCBhbmQgb3RoZXIgaW9jdGxzLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBCdXQgdGhlIHJlYWwga2V5IGlzLCAqd2hpY2gqIGlvY3RscyBzcGVjaWZpY2FsbHkgdG91Y2ggdGhlIFNFVi9TTlAgY29tbWFuZHMgb3IsIG1vcmUgY3JpdGljYWxseSwgdHJpZ2dlciBhIFZNR0VYSVQ/IFRoYXQncyB3aGVyZSB0aGUgaW50ZXJlc3Rpbmcgc3R1ZmYgaGFwcGVucy5cblxuSSd2ZSBnb3QgYSBodW5jaCB0aGF0IGBLVk1fTUVNT1JZX0VOQ1JZUFRfT1BgLCBhbmQgZnVuY3Rpb25zIGxpa2UgYHNldl9tZW1fZW5jX2lvY3RsYCBvciBgc2V2X2hhbmRsZV92bWdleGl0YCBhcmUgdGhlIHJlbGV2YW50IHRhcmdldHMuIFNvLCBJIG5lZWQgdG8gZGlnIGludG8gdGhvc2UuIExldCdzIHN0YXJ0IHdpdGggYSBmb2N1c2VkIHNlYXJjaCBmb3IgYHNldl9oYW5kbGVfdm1nZXhpdGAgaXRzZWxmLCBvciBtYXliZSBgS1ZNX0VYSVRfU05QX1JFUV9DRVJUU2Agb3IsIHBlcmhhcHMgbW9yZSBnZW5lcmFsbHksIGNhbGxzIHRvIGBzZXZfaXNzdWVfY21kYC4gVGhhdCBzaG91bGQgZ2V0IG1lIHBvaW50ZWQgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbi4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0IHN1cmZhY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjkzMiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjEzOjQ3LjQyMzkwMDk3MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI0MjQzNDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2V2X2hhbmRsZV92bWdleGl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00MjkxPXN0YXRpYyBpbnQgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBncGFfdCByZXFfZ3BhLCBncGFfdCByZXNwX2dwYSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDM1Mi1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQzNTM6c3RhdGljIGludCBzZXZfaGFuZGxlX3ZtZ2V4aXRfbXNyX3Byb3RvY29sKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDM1NC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQ0OTc9c3RhdGljIGJvb2wgaXNfc25wX29ubHlfdm1nZXhpdCh1NjQgZXhpdF9jb2RlKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NTA5LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDUxMDppbnQgc2V2X2hhbmRsZV92bWdleGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ1MTEte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NTE4LVxcdGlmIChnaGNiX2dwYSBcXHUwMDI2IEdIQ0JfTVNSX0lORk9fTUFTSylcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ1MTk6XFx0XFx0cmV0dXJuIHNldl9oYW5kbGVfdm1nZXhpdF9tc3JfcHJvdG9jb2woc3ZtKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ1MjAtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTMzNDc9c3RhdGljIGludCAoKmNvbnN0IHN2bV9leGl0X2hhbmRsZXJzW10pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkgPSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM0MjEtI2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MzQyMjpcXHRbU1ZNX0VYSVRfVk1HRVhJVF1cXHRcXHRcXHQ9IHNldl9oYW5kbGVfdm1nZXhpdCxcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM0MjMtI2VuZGlmXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTM2MzY9aW50IHN2bV9pbnZva2VfZXhpdF9oYW5kbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IF9fZXhpdF9jb2RlKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNjY0LVxcdGVsc2UgaWYgKGV4aXRfY29kZSA9PSBTVk1fRVhJVF9WTUdFWElUKVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MzY2NTpcXHRcXHRyZXR1cm4gc2V2X2hhbmRsZV92bWdleGl0KHZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzY2Ni0jZW5kaWZcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9OTkxPXZvaWQgc2V2X2d1ZXN0X21lbW9yeV9yZWNsYWltZWQoc3RydWN0IGt2bSAqa3ZtKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjk5MjppbnQgc2V2X2hhbmRsZV92bWdleGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC05OTMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjEzOjQ3LjQ3NjMzMDU1MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MTcyNTg0ODk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRXJyb3IgSGFuZGxpbmcgaW4gYHNldl9oYW5kbGVfdm1nZXhpdGAqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgc2V2X2hhbmRsZV92bWdleGl0YCBpcyB0aGUgZXhpdCBoYW5kbGVyIGZvciBgU1ZNX0VYSVRfVk1HRVhJVGAsIHNwZWNpZmljYWxseSBmb3IgQU1EJ3MgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSB3aXRoaW4gS1ZNLiBXaGVuIGEgZ3Vlc3QgdHJpZ2dlcnMgYSBWTUdFWElUIHdpdGggY2VydGFpbiBjb2Rlcywgc3BlY2lmaWNhbGx5IGBTVk1fVk1HRVhJVF9HVUVTVF9SRVFVRVNUYCBvciBgU1ZNX1ZNR0VYSVRfRVhUX0dVRVNUX1JFUVVFU1RgLCBpdCBjYWxscyBlaXRoZXIgYHNucF9oYW5kbGVfZ3Vlc3RfcmVxYCBvciBgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxYC4gSSBhbHNvIGtub3cgdGhhdCBgc25wX2NvbXBsZXRlX3JlcV9jZXJ0c2Ag4oCTIHdoaWNoIGl0c2VsZiByZWxpZXMgb24gYHNucF9oYW5kbGVfZ3Vlc3RfcmVxYCDigJMgaXMgdHJpZ2dlcmVkIGJ5IGB2Y3B1LVx1MDAzZWFyY2guY29tcGxldGVfdXNlcnNwYWNlX2lvYCBhZnRlciB1c2Vyc3BhY2UgY29tcGxldGVzIGBLVk1fRVhJVF9TTlBfUkVRX0NFUlRTYCBhbmQgY2FsbHMgYGlvY3RsKHZjcHVfZmQsIEtWTV9SVU4pYC5cblxuTm93LCB0aGUgcGF0Y2gncyBjaGFuZ2VzIGFyZSBjcnVjaWFsLiBJIG5lZWQgdG8gZm9jdXMgb24gaG93IHRoZSBlcnJvciBoYW5kbGluZyBoYXMgYmVlbiBtb2RpZmllZCB3aXRoaW4gYHNucF9oYW5kbGVfZ3Vlc3RfcmVxYCBhbmQgYHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcWAuXG5cblByZXZpb3VzbHksIGVycm9ycyBmcm9tIGBrdm1fcmVhZF9ndWVzdGAgYW5kIGBrdm1fd3JpdGVfZ3Vlc3RgIHdpdGhpbiBgc25wX2hhbmRsZV9ndWVzdF9yZXFgIHdvdWxkIHByb3BhZ2F0ZSBhcyBgLUVJT2AsIHdoaWNoIGVzc2VudGlhbGx5IG1lYW5zIGEgZ2VuZXJhbCBJL08gZXJyb3Igd291bGQgYmUgcmV0dXJuZWQgYWxsIHRoZSB3YXkgdXAgdG8gS1ZNIHVzZXJzcGFjZSB2aWEgYGt2bV92Y3B1X3J1bmAuIE5vdywgdGhlIHBhdGNoIHJlZGlyZWN0cyB0aGVzZSBlcnJvcnMuIEluc3RlYWQgb2YgcmV0dXJuaW5nIGAtRUlPYCwgZmFpbHVyZXMgbm93IGNhbGwgYHN2bV92bWdleGl0X2JhZF9pbnB1dChzdm0sIEdIQ0JfRVJSX0lOVkFMSURfSU5QVVQpOyByZXR1cm4gMTtgLiBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgaXQncyB3cml0aW5nIGFuIGVycm9yIGNvZGUgaW50byB0aGUgR0hDQiBhbmQgdGhlbiByZXN1bWluZyB0aGUgZ3Vlc3QgaW5zdGVhZCBvZiBleGl0aW5nIHRocm91Z2ggdGhlIHN0YW5kYXJkIEtWTSBlcnJvciBwYXRoLlxuXG5UaGUgc2FtZSBwYXR0ZXJuIGFwcGxpZXMgdG8gYHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcWAuIEVycm9ycyBmcm9tIGBrdm1fcmVhZF9ndWVzdGAgb2YgdGhlIGBtc2dfdHlwZWAgYW5kIGZyb20gYGt2bV9jbGVhcl9ndWVzdGAgb2YgdGhlIGNlcnRpZmljYXRlIHRhYmxlIGFsc28gcHJldmlvdXNseSByZXR1cm5lZCBgLUVJT2AuIFRoZSBwYXRjaCBjaGFuZ2VzIHRoZXNlIHRvIGp1bXAgdG8gYHJlcXVlc3RfaW52YWxpZGAsIHdoaWNoIHRoZW4gY2FsbHMgYHN2bV92bWdleGl0X2JhZF9pbnB1dGAgaW4gdGhlIHNhbWUgd2F5LCBwbGFjaW5nIGFuIGVycm9yIGluIHRoZSBHSENCIGFuZCByZXN1bWluZy4gVGhpcyBpbmRpY2F0ZXMgYW4gZWZmb3J0IHRvIGtlZXAgdGhlIGd1ZXN0IHJ1bm5pbmcsIGV2ZW4gaW4gdGhlIHByZXNlbmNlIG9mIHRoZXNlIGVycm9ycywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuXG5cblRvIGNvbXBsZXRlIHRoaXMgYW5hbHlzaXMsIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gY2hlY2sgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzIGZvciBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgbmV3IGNvbmZpZ3VyYXRpb24gaW1wbGljYXRpb25zLiBJIHNob3VsZCBzZWFyY2ggd2l0aGluIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjQ2LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDkxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjEzOjUyLjY0ODkxNzU2OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTExNTc1NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiS1ZNX0FNRF9TRVZ8S1ZNX0FNRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTIwPWNvbmZpZyBLVk1fWDg2XFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE6XFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyLVxcdHNlbGVjdCBLVk1fQ09NTU9OXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMzQ9Y29uZmlnIEtWTV9JTlRFTF9URFhcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVxcdGJvb2wgXFxcIkFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcXFwiXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU4LVxcdGRlZmF1bHQgeVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1OTpcXHRkZXBlbmRzIG9uIEtWTV9BTUQgXFx1MDAyNlxcdTAwMjYgWDg2XzY0XFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTYwOlxcdGRlcGVuZHMgb24gQ1JZUFRPX0RFVl9TUF9QU1AgXFx1MDAyNlxcdTAwMjYgIShLVk1fQU1EPXkgXFx1MDAyNlxcdTAwMjYgQ1JZUFRPX0RFVl9DQ1BfREQ9bSlcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNjEtXFx0c2VsZWN0IEFSQ0hfSEFTX0NDX1BMQVRGT1JNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU9MjQ9a3ZtLWFtZC15XFx0XFx0Kz0gc3ZtL3N2bS5vIHN2bS92bWVudGVyLm8gc3ZtL3BtdS5vIHN2bS9uZXN0ZWQubyBzdm0vYXZpYy5vXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlLTI1LVxcbmFyY2gveDg2L2t2bS9NYWtlZmlsZToyNjprdm0tYW1kLSQoQ09ORklHX0tWTV9BTURfU0VWKVxcdCs9IHN2bS9zZXYub1xcbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0yNy1rdm0tYW1kLSQoQ09ORklHX0tWTV9IWVBFUlYpXFx0Kz0gc3ZtL2h5cGVydi5vXFxuLS1cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU9MzY9b2JqLSQoQ09ORklHX0tWTV9JTlRFTClcXHQrPSBrdm0taW50ZWwub1xcbmFyY2gveDg2L2t2bS9NYWtlZmlsZTozNzpvYmotJChDT05GSUdfS1ZNX0FNRClcXHQrPSBrdm0tYW1kLm9cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtMzgtXFxuLS1cXG5hcmNoL3g4Ni9rdm0va3ZtLWFzbS1vZmZzZXRzLmM9MTM9c3RhdGljIHZvaWQgX191c2VkIGNvbW1vbih2b2lkKVxcbmFyY2gveDg2L2t2bS9rdm0tYXNtLW9mZnNldHMuYy0xNC17XFxuYXJjaC94ODYva3ZtL2t2bS1hc20tb2Zmc2V0cy5jOjE1OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19LVk1fQU1EKSkge1xcbmFyY2gveDg2L2t2bS9rdm0tYXNtLW9mZnNldHMuYy0xNi1cXHRcXHRCTEFOSygpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0zMDg2PXZvaWQgX19pbml0IHNldl9oYXJkd2FyZV9zZXR1cCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMTE2LVxcdCAqL1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzExNzpcXHRpZiAoSVNfQlVJTFRJTihDT05GSUdfS1ZNX0FNRCkgXFx1MDAyNlxcdTAwMjYgc2V2X21vZHVsZV9pbml0KCkpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMTE4LVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0zMzQ3PXN0YXRpYyBpbnQgKCpjb25zdCBzdm1fZXhpdF9oYW5kbGVyc1tdKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpID0ge1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNDIwLVxcdFtTVk1fRVhJVF9BVklDX1VOQUNDRUxFUkFURURfQUNDRVNTXVxcdD0gYXZpY191bmFjY2VsZXJhdGVkX2FjY2Vzc19pbnRlcmNlcHRpb24sXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozNDIxOiNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTM0MjItXFx0W1NWTV9FWElUX1ZNR0VYSVRdXFx0XFx0XFx0PSBzZXZfaGFuZGxlX3ZtZ2V4aXQsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTM2MzY9aW50IHN2bV9pbnZva2VfZXhpdF9oYW5kbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IF9fZXhpdF9jb2RlKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNjYyLVxcdFxcdHJldHVybiBucGZfaW50ZXJjZXB0aW9uKHZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MzY2MzojaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zNjY0LVxcdGVsc2UgaWYgKGV4aXRfY29kZSA9PSBTVk1fRVhJVF9WTUdFWElUKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz00NzA0PXN0YXRpYyBib29sIHN2bV9oYXNfZW11bGF0ZWRfbXNyKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGluZGV4KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00NzEzLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NDcxNDojaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00NzE1LVxcdFxcdC8qXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTUzMjg9c3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU0NDItXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo1NDQzOiNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU0NDQtXFx0LnZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24gPSBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbixcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9NjY9ZW51bSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTk3LVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6OTg6I2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtOTktc3RydWN0IGt2bV9zZXZfaW5mbyB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTEyNz1zdHJ1Y3Qga3ZtX3N2bSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTEzNS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjEzNjojaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC0xMzctXFx0c3RydWN0IGt2bV9zZXZfaW5mbyBzZXZfaW5mbztcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9MzkwPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IGt2bV9zdm0gKnRvX2t2bV9zdm0oc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC0zOTQtXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDozOTU6I2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtMzk2LXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IGt2bV9zZXZfaW5mbyAqdG9fa3ZtX3Nldl9pbmZvKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9OTgwPXZvaWQgc2V2X2VzX3VubWFwX2doY2Ioc3RydWN0IHZjcHVfc3ZtICpzdm0pO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtOTgxLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6OTgyOiNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTk4My1ib29sIHNldl92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3ZtZW50ZXIuUz0yMTA9U1lNX0ZVTkNfRU5EKF9fc3ZtX3ZjcHVfcnVuKVxcbmFyY2gveDg2L2t2bS9zdm0vdm1lbnRlci5TLTIxMS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3ZtZW50ZXIuUzoyMTI6I2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9zdm0vdm1lbnRlci5TLTIxMy1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vdm1lbnRlci5TPTI4Mz1TWU1fRlVOQ19FTkQoX19zdm1fc2V2X2VzX3ZjcHVfcnVuKVxcbmFyY2gveDg2L2t2bS9zdm0vdm1lbnRlci5TOjI4NDojZW5kaWYgLyogQ09ORklHX0tWTV9BTURfU0VWICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjEzOjUyLjcwMDA3ODE0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0MDkzNjU0MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLVk0tQU1EIFNFViBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBgQ09ORklHX0tWTV9BTURfU0VWYCBhbmQgaXRzIGRlcGVuZGVuY2llcy4gSSBrbm93IHRoaXMgaW50aW1hdGVseTsgaXQncyB0aGUgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiBzdXBwb3J0IGZvciBBTUQgcHJvY2Vzc29ycywgYSBjcml0aWNhbCBjb21wb25lbnQuIFNvLCBJIG5lZWQgdG8gdmVyaWZ5IGl0cyBjb25maWd1cmF0aW9uLlxuXG5GaXJzdCwgSSBzZWUgdGhhdCBgS1ZNX0FNRGAgYW5kIGBYODZfNjRgIGFyZSByZXF1aXJlZCwgdGhhdCBtYWtlcyBzZW5zZSAtIEFNRCBwbGF0Zm9ybSBhbmQgNjQtYml0IGFyY2hpdGVjdHVyZSBhcmUgZXhwZWN0ZWQuIEFsc28sIGBDUllQVE9fREVWX1NQX1BTUGAgaXMgbmVlZGVkLiBUaGF04oCZcyBwcm9iYWJseSB0aGUgQU1EIFNlY3VyZSBQcm9jZXNzb3IsIG9yIFBTUCwgY3J5cHRvIGRldmljZSBkcml2ZXIuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhhdC4gRmluYWxseSwgdGhlcmUncyBhIG5lZ2F0aW9uOiBgIShLVk1fQU1EPXkgXHUwMDI2XHUwMDI2IENSWVBUT19ERVZfQ0NQX0REPW0pYC4gTWVhbmluZywgaXQncyBub3QgYWxsb3dlZCBmb3IgS1ZNX0FNRCB0byBiZSAneScgQU5EIGBDUllQVE9fREVWX0NDUF9ERGAgdG8gYmUgYSBtb2R1bGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYENSWVBUT19ERVZfQ0NQX0REYCBhY3R1YWxseSBpcyBhbmQgd2h5IGl0IGNhbm5vdCBiZSBhIG1vZHVsZSBpbiB0aGlzIGNvbnRleHQuXG5cblJpZ2h0LiBJIG5lZWQgdG8gZGVsdmUgaW50byB0aGUgYGRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnYCBmaWxlIHRvIHNlZSB3aGF0IGBDT05GSUdfQ1JZUFRPX0RFVl9TUF9QU1BgIGRlcGVuZHMgb24sIGFuZCB1bmRlcnN0YW5kIHRoaXMgZGVwZW5kZW5jeSBjaGFpbiBmdWxseS4gVGhpcyB3aWxsIGhlbHAgbWUgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBmb3IgdGhlIG92ZXJhbGwgS1ZNLUFNRCBTRVYgY29uZmlndXJhdGlvbi4gTGV0IG1lIHF1aWNrbHkgZ3JhYiB0aGUgS2NvbmZpZyBmaWxlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDk5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjI6MTM6NTYuMTA5NDQ3MjUxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTI3MzcwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ1JZUFRPX0RFVl9TUF9QU1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9jcnlwdG8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnPTIzPWNvbmZpZyBDUllQVE9fREVWX0NDUF9DUllQVE9cXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnLTM3LVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnOjM4OmNvbmZpZyBDUllQVE9fREVWX1NQX1BTUFxcbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIlBsYXRmb3JtIFNlY3VyaXR5IFByb2Nlc3NvciAoUFNQKSBkZXZpY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjEzOjU2LjE2NDcyNTkwMloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjgwMzIxNTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgQ3J5cHRvIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgYGRyaXZlcnMvY3J5cHRvL2NjcC9gIGRpcmVjdG9yeSwgc3BlY2lmaWNhbGx5IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0IHRoZSByZWxldmFudCBzZXR0aW5ncyBhcmUgcHJvYmFibHkgZGVmaW5lZCBpbiB0aGUgYEtjb25maWdgIGZpbGUgd2l0aGluIHRoYXQgZGlyZWN0b3J5LiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGFyb3VuZCBsaW5lIDM4LCBsaWtlbHkgd2hlcmUgY29yZSBvcHRpb25zIGFyZSBkZWZpbmVkLiBUaGlzIHdvdWxkIGdpdmUgbWUgdGhlIGJhc2UgZGVmaW5pdGlvbnMgSSBuZWVkIHRvIGV4cGxvcmUuIFRoaXMgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBkcml2ZXIgaXMgY29uZmlndXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwNDMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjoxMzo1OS44NDUwNDk3NFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyNTpcXHRcXHRkZWZhdWx0IG1cXG4gIDI2OlxcdFxcdGRlcGVuZHMgb24gQ1JZUFRPX0RFVl9DQ1BfRERcXG4gIDI3OlxcdFxcdGRlcGVuZHMgb24gQ1JZUFRPX0RFVl9TUF9DQ1BcXG4gIDI4OlxcdFxcdHNlbGVjdCBDUllQVE9fSEFTSFxcbiAgMjk6XFx0XFx0c2VsZWN0IENSWVBUT19TS0NJUEhFUlxcbiAgMzA6XFx0XFx0c2VsZWN0IENSWVBUT19BVVRIRU5DXFxuICAzMTpcXHRcXHRzZWxlY3QgQ1JZUFRPX1JTQVxcbiAgMzI6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfQUVTXFxuICAzMzpcXHRcXHRoZWxwXFxuICAzNDpcXHRcXHQgIFN1cHBvcnQgZm9yIHVzaW5nIHRoZSBjcnlwdG9ncmFwaGljIEFQSSB3aXRoIHRoZSBBTUQgQ3J5cHRvZ3JhcGhpY1xcbiAgMzU6XFx0XFx0ICBDb3Byb2Nlc3Nvci4gVGhpcyBtb2R1bGUgc3VwcG9ydHMgb2ZmbG9hZCBvZiBTSEEgYW5kIEFFUyBhbGdvcml0aG1zLlxcbiAgMzY6XFx0XFx0ICBJZiB5b3UgY2hvb3NlICdNJyBoZXJlLCB0aGlzIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjY3BfY3J5cHRvLlxcbiAgMzc6XFx0XFxuICAzODpcXHRjb25maWcgQ1JZUFRPX0RFVl9TUF9QU1BcXG4gIDM5OlxcdFxcdGJvb2wgXFxcIlBsYXRmb3JtIFNlY3VyaXR5IFByb2Nlc3NvciAoUFNQKSBkZXZpY2VcXFwiXFxuICA0MDpcXHRcXHRkZWZhdWx0IHlcXG4gIDQxOlxcdFxcdGRlcGVuZHMgb24gQ1JZUFRPX0RFVl9DQ1BfREQgXFx1MDAyNlxcdTAwMjYgWDg2XzY0IFxcdTAwMjZcXHUwMDI2IEFNRF9JT01NVVxcbiAgNDI6XFx0XFx0c2VsZWN0IFBDSV9UU00gaWYgUENJXFxuICA0MzpcXHRcXHRoZWxwXFxuICA0NDpcXHRcXHQgUHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgQU1EIFBsYXRmb3JtIFNlY3VyaXR5IFByb2Nlc3NvciAoUFNQKS5cXG4gIDQ1OlxcdFxcdCBUaGUgUFNQIGlzIGEgZGVkaWNhdGVkIHByb2Nlc3NvciB0aGF0IHByb3ZpZGVzIHN1cHBvcnQgZm9yIGtleVxcbiAgNDY6XFx0XFx0IG1hbmFnZW1lbnQgY29tbWFuZHMgaW4gU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBtb2RlLFxcbiAgNDc6XFx0XFx0IGFsb25nIHdpdGggc29mdHdhcmUtYmFzZWQgVHJ1c3RlZCBFeGVjdXRpb24gRW52aXJvbm1lbnQgKFRFRSkgdG9cXG4gIDQ4OlxcdFxcdCBlbmFibGUgdGhpcmQtcGFydHkgdHJ1c3RlZCBhcHBsaWNhdGlvbnMuXFxuICA0OTpcXHRcXG4gIDUwOlxcdGNvbmZpZyBDUllQVE9fREVWX0NDUF9ERUJVR0ZTXFxuICA1MTpcXHRcXHRib29sIFxcXCJFbmFibGUgQ0NQIEludGVybmFscyBpbiBEZWJ1Z0ZTXFxcIlxcbiAgNTI6XFx0XFx0ZGVmYXVsdCBuXFxuICA1MzpcXHRcXHRkZXBlbmRzIG9uIENSWVBUT19ERVZfU1BfQ0NQXFxuICA1NDpcXHRcXHRoZWxwXFxuICA1NTpcXHRcXHQgIEV4cG9zZSBDQ1AgZGV2aWNlIGluZm9ybWF0aW9uIHN1Y2ggYXMgb3BlcmF0aW9uIHN0YXRpc3RpY3MsIGZlYXR1cmVcXG4gIDU2OlxcdFxcdCAgaW5mb3JtYXRpb24sIGFuZCBkZXNjcmlwdG9yIHF1ZXVlIGNvbnRlbnRzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjoxMzo1OS44NDUxMzg0NloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5NTM4NzAzMjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLVk0tQU1EIFNFViBGdXp6aW5nIFJlYWNoYWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgd2UgaGF2ZSBhIGxpc3Qgb2YgcG90ZW50aWFsbHkgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zOiBgQ09ORklHX0tWTV9BTURgLCBgQ09ORklHX0tWTV9BTURfU0VWYCwgYENPTkZJR19DUllQVE9fREVWX1NQX1BTUGAsIGBDT05GSUdfQ1JZUFRPX0RFVl9DQ1BfRERgLCBhbmQgYENPTkZJR19BTURfSU9NTVVgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgaGlkZGVuIGRlcGVuZGVuY2llcy5cblxuTm93LCBmb2N1c2luZyBvbiBgS1ZNX0FNRF9TRVZgLCB0aGUgaW1tZWRpYXRlIHByZXJlcXVpc2l0ZXMgc2VlbSB0byBiZSBgS1ZNX0FNRGAsIGBDUllQVE9fREVWX1NQX1BTUGAsIGBDUllQVE9fREVWX0NDUF9ERGAsIGBBTURfSU9NTVVgLCBhbmQsIG9idmlvdXNseSwgYFg4Nl82NGAgZ2l2ZW4gdGhlIEFNRDY0IHRhcmdldC4gVGhhdCBtYWtlcyBzZW5zZS5cblxuVGhlIHJlYWwgcXVlc3Rpb24gaXMsIGlzIHRoaXMgY29kZSByZWFjaGFibGUgYW5kIHRoZXJlZm9yZSBmdXp6YWJsZT8gVGhlIGluc3RydWN0aW9ucyBlbXBoYXNpemUgcmVhY2hhYmlsaXR5IGFzIHRoZSBrZXkgY3JpdGVyaW9uLiBUaGV5IHN0YXRlIGZ1enppbmcgaXMgb25seSBlZmZlY3RpdmUgZm9yIGNvZGUgdGhhdCAqYWN0dWFsbHkqIGV4ZWN1dGVzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCB1c2luZyBzb2Z0d2FyZSBlbXVsYXRlZCBkZXZpY2VzLlxuXG5UaGUgY3JpdGljYWwgdW5jZXJ0YWludHkgaGVyZSBpcyB3aGV0aGVyIEFNRCBTRVYvU0VWLVNOUCBvcGVyYXRlcyBpbiB0aGVzZSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBjb250ZXh0cywgb3IgaWYgaXQgZGVtYW5kcyBuZXN0ZWQgdmlydHVhbGl6YXRpb24gb3Igc3BlY2lmaWMgUUVNVSBjb25maWd1cmF0aW9ucy4gQ2FuIEtWTSBiZSBlZmZlY3RpdmVseSBmdXp6ZWQgaW4gYSB0eXBpY2FsIFFFTVUgb3IgR0NFIHNldHVwP1xuXG5NeSBleHBlcmllbmNlIHdpdGggU3l6a2FsbGVyIGNvbWVzIGludG8gcGxheSBoZXJlLiBXZSdyZSBydW5uaW5nIFN5emthbGxlciBpbnN0YW5jZXMgKndpdGhpbiogUUVNVSBvciBHQ0UgVk1zLiBTeXprYWxsZXIgaGFzIGRlc2NyaXB0aW9ucyBmb3IgZnVuY3Rpb25zIGxpa2UgYHN5el9rdm1fc2V0dXBfY3B1YCBhbmQgYGlvY3RsJEtWTV8qYC4gU28sIGV2ZW4gd2l0aG91dCAqcGh5c2ljYWwqIFNFVi1TTlAgaGFyZHdhcmUgb24gdGhlIGhvc3QsIGlzIEtWTSBjb2RlIHN0aWxsIHJlYWNoYWJsZSB2aWEgdGhlc2UgbWVjaGFuaXNtcz8gRG9lcyBTRVYtU05QICpyZXF1aXJlKiB0aGUgaG9zdCB0byBoYXZlIHBoeXNpY2FsIFNFVi1TTlAgaGFyZHdhcmU/XG5cbkkgbmVlZCB0byBkaXZlIGRlZXBlci4gSSdtIGdvaW5nIHRvIGxvb2sgYXQgYHNldl9oYXJkd2FyZV9zZXR1cGAgYW5kIGBzZXZfc25wX2luaXRgIGluIGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYCB0byBzZWUgaWYgdGhvc2UgZnVuY3Rpb25zIHByb3ZpZGUgaW5zaWdodHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4Njg0LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjI6MTQ6MDkuMzgzODQ1MzAzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzYzMDY2NzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldl9zbnBfc3VwcG9ydGVkfHNucF9oYW5kbGVfZ3Vlc3RfcmVxXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0zMDg2PXZvaWQgX19pbml0IHNldl9oYXJkd2FyZV9zZXR1cCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMDg5LVxcdHN0cnVjdCBzZXZfcGxhdGZvcm1faW5pdF9hcmdzIGluaXRfYXJncyA9IHswfTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMwOTA6XFx0Ym9vbCBzZXZfc25wX3N1cHBvcnRlZCA9IGZhbHNlO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzA5MS1cXHRib29sIHNldl9lc19zdXBwb3J0ZWQgPSBmYWxzZTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzE5MC1cXHRzZXZfZXNfc3VwcG9ydGVkID0gdHJ1ZTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMxOTE6XFx0c2V2X3NucF9zdXBwb3J0ZWQgPSBzZXZfc25wX2VuYWJsZWQgXFx1MDAyNlxcdTAwMjYgY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfSE9TVF9TRVZfU05QKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMxOTItXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyMDEtXFx0XFx0aWYgKHNldl9wbGF0Zm9ybV9pbml0KFxcdTAwMjZpbml0X2FyZ3MpKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzIwMjpcXHRcXHRcXHRzZXZfc3VwcG9ydGVkID0gc2V2X2VzX3N1cHBvcnRlZCA9IHNldl9zbnBfc3VwcG9ydGVkID0gZmFsc2U7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMjAzOlxcdFxcdGVsc2UgaWYgKHNldl9zbnBfc3VwcG9ydGVkKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzIwNDpcXHRcXHRcXHRzZXZfc25wX3N1cHBvcnRlZCA9IGlzX3Nldl9zbnBfaW5pdGlhbGl6ZWQoKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyMDUtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMjA2OlxcdFxcdGlmIChzZXZfc25wX3N1cHBvcnRlZCkge1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzIwNy1cXHRcXHRcXHRzbnBfc3VwcG9ydGVkX3BvbGljeV9iaXRzID0gc2V2X2dldF9zbnBfcG9saWN5X2JpdHMoKSBcXHUwMDI2XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMyMzAtXFx0XFx0dm1fdHlwZXMgfD0gQklUKEtWTV9YODZfU0VWX0VTX1ZNKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMyMzE6XFx0aWYgKHNldl9zbnBfc3VwcG9ydGVkKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzIzMi1cXHRcXHR2bV90eXBlcyB8PSBCSVQoS1ZNX1g4Nl9TTlBfVk0pO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjQ2LVxcdFxcdHByX2luZm8oXFxcIlNFVi1TTlAgJXMgKEFTSURzICV1IC0gJXUpXFxcXG5cXFwiLFxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzI0NzpcXHRcXHRcXHRzZXZfc3RyX2ZlYXR1cmVfc3RhdGUoc2V2X3NucF9zdXBwb3J0ZWQsIHZtX3R5cGVzIFxcdTAwMjYgQklUKEtWTV9YODZfU05QX1ZNKSksXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMjQ4LVxcdFxcdFxcdG1pbl9zbnBfYXNpZCwgbWF4X3NucF9hc2lkKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzI1MS1cXHRzZXZfZXNfZW5hYmxlZCA9IHNldl9lc19zdXBwb3J0ZWQ7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMjUyOlxcdHNldl9zbnBfZW5hYmxlZCA9IHNldl9zbnBfc3VwcG9ydGVkO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzI1My1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDE0Mj1zdGF0aWMgaW50IHNldl9zbnBfYXBfY3JlYXRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQyMTctXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0MjE4OnN0YXRpYyBpbnQgc25wX2hhbmRsZV9ndWVzdF9yZXEoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGdwYV90IHJlcV9ncGEsIGdwYV90IHJlc3BfZ3BhKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDIxOS17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQyNjg9c3RhdGljIGludCBzbnBfY29tcGxldGVfcmVxX2NlcnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDI3NC1cXHRjYXNlIDA6XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0Mjc1OlxcdFxcdHJldHVybiBzbnBfaGFuZGxlX2d1ZXN0X3JlcShzdm0sIGNvbnRyb2wtXFx1MDAzZWV4aXRfaW5mb18xLFxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDI3Ni1cXHRcXHRcXHRcXHRcXHQgICAgY29udHJvbC1cXHUwMDNlZXhpdF9pbmZvXzIpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00MjkxPXN0YXRpYyBpbnQgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBncGFfdCByZXFfZ3BhLCBncGFfdCByZXNwX2dwYSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDM0NS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQzNDY6XFx0cmV0dXJuIHNucF9oYW5kbGVfZ3Vlc3RfcmVxKHN2bSwgcmVxX2dwYSwgcmVzcF9ncGEpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDM0Ny1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDUxMD1pbnQgc2V2X2hhbmRsZV92bWdleGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDY4MS1cXHRcXHRpZiAoY29udHJvbC1cXHUwMDNlZXhpdF9jb2RlID09IFNWTV9WTUdFWElUX0dVRVNUX1JFUVVFU1QpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0NjgyOlxcdFxcdFxcdHJldHVybiBzbnBfaGFuZGxlX2d1ZXN0X3JlcShzdm0sIGNvbnRyb2wtXFx1MDAzZWV4aXRfaW5mb18xLFxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDY4My1cXHRcXHRcXHRcXHRcXHRcXHQgICAgY29udHJvbC1cXHUwMDNlZXhpdF9pbmZvXzIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjoxNDoxMC43NDY5MTYyMDNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTI4NjgxNjE3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLVk0gQU1EIFNFViBGdXp6aW5nIERlY2lzaW9uKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgd2UncmUgbG9va2luZyBhdCBhIHBhdGNoIGltcGFjdGluZyBLVk0sIHNwZWNpZmljYWxseSB0aGUgQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgaW1wbGVtZW50YXRpb24uIFRoZSBpbml0aWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyB3YXJyYW50cyBmdXp6aW5nLiBHaXZlbiB0aGUgcnVsZXMsIEtWTSBvbiB4ODYgaXMgZGVmaW5pdGVseSBhIHRhcmdldCB3b3J0aCBjb25zaWRlcmluZy5cblxuVGhlIHBhdGNoIG1vZGlmaWVzIGNvbnRyb2wgZmxvdyB3aXRoaW4gYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgLCB0b3VjaGluZyBgc25wX2hhbmRsZV9ndWVzdF9yZXFgIGFuZCBgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxYC4gVGhlIGNvcmUgY2hhbmdlIGludm9sdmVzIGVycm9yIGhhbmRsaW5nIGZvciBpbnZhbGlkIGd1ZXN0IHJlcXVlc3RzLCBzcGVjaWZpY2FsbHkgd2hlbiBga3ZtX3JlYWRfZ3Vlc3RgIG9yIGBrdm1fd3JpdGVfZ3Vlc3RgIGZhaWwuIEluc3RlYWQgb2YgYSBkaXJlY3QgYC1FSU9gIHJldHVybiwgdGhlIGNvZGUgbm93IHJlcG9ydHMgYSBgR0hDQl9FUlJfSU5WQUxJRF9JTlBVVGAgZXJyb3IgdG8gdGhlIGd1ZXN0IHZpYSBgc3ZtX3ZtZ2V4aXRfYmFkX2lucHV0YCBhbmQgcmVzdW1lcyBndWVzdCBleGVjdXRpb24uIFRoaXMgaXMgYSBzaWduaWZpY2FudCBhbHRlcmF0aW9uIGluIGVycm9yIGhhbmRsaW5nIHN0cmF0ZWd5LlxuXG5JbnNwZWN0aW5nIHRoZSBkaWZmIGZ1cnRoZXIsIHRoZSBjaGFuZ2VzIGFyZSBjbGVhcjogZXJyb3IgY29uZGl0aW9ucyB0aGF0IHByZXZpb3VzbHkgcmV0dXJuZWQgYW4gZXJyb3Igbm93IHRyaWdnZXIgdGhlIGBzdm1fdm1nZXhpdF9iYWRfaW5wdXRgIGZ1bmN0aW9uIGNhbGwsIHdoaWNoIG1vZGlmaWVzIGd1ZXN0IGJlaGF2aW9yIGFuZCBleGVjdXRpb24gcGF0aC4gVGhlc2UgZnVuY3Rpb25zLCBgc25wX2hhbmRsZV9ndWVzdF9yZXFgIGFuZCBgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxYCwgYXJlIHRoZSBmb2N1cyBoZXJlLlxuXG5UbyBhdm9pZCBkaWx1dGlvbiBvZiB0aGUgZnV6emluZyBzY29wZSwgd2UnbGwgZXh0cmFjdCBgRm9jdXNTeW1ib2xzYC4gQ29uc2lkZXJpbmcgdGhlIGNvbnRleHQsIGBzbnBfaGFuZGxlX2d1ZXN0X3JlcWAgYW5kIGBzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXFgLCBhcmUgc3RhdGljIGZ1bmN0aW9ucyBpbiB0aGUgYC5jYCBmaWxlIGFuZCBhcmUgbm9uLXRyaXZpYWwgZnVuY3Rpb25zIHdpdGggbXVsdGlwbGUgbGluZXMgb2YgY29kZSBhbmQgY2FsbHMgdG8gb3RoZXIgZnVuY3Rpb25zLiBUaGVyZWZvcmUsIHdlIHNob3VsZCBhbHNvIGluY2x1ZGUgdGhlIG5vbi1zdGF0aWMgY2FsbGVyIGFuZCBlbnRyeXBvaW50IHRvIHRoZXNlIGZ1bmN0aW9uczogYHNldl9oYW5kbGVfdm1nZXhpdGAuXG5cbkFzIGZvciBjb25maWd1cmF0aW9uLCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGFyZTogYEtWTV9BTURgLCBgS1ZNX0FNRF9TRVZgLCBgQ1JZUFRPX0RFVl9TUF9QU1BgLCBgQ1JZUFRPX0RFVl9DQ1BfRERgLCBhbmQgYEFNRF9JT01NVWAuIFRoZXNlIG9wdGlvbnMgbmVlZCB0byBiZSBlbmFibGVkIGZvciB0aGUgdGFyZ2V0ZWQgZnVuY3Rpb25hbGl0eSB0byBiZSBhY3RpdmUsIGFuZCB0aGVyZWZvcmUgZnV6emFibGUuXG5cbkJhc2VkIG9uIHRoZSBydWxlcyBhbmQgdGhlIG5hdHVyZSBvZiB0aGUgbW9kaWZpY2F0aW9ucywgYSBcIldvcnRoRnV6emluZz10cnVlXCIgZGVjaXNpb24gaXMgc3RyYWlnaHRmb3J3YXJkLiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSByZWFjaGFibGUsIGV4ZWN1dGFibGUgY29kZSByZWxhdGVkIHRvIGNvcmUgS1ZNIGZ1bmN0aW9uYWxpdHkuIFNwZWNpZmljYWxseSwgY2hhbmdlcyBpbiBlcnJvciBoYW5kbGluZyBhbmQgVk0gY29udHJvbCBmbG93IHdpdGhpbiBTRVYgZ3Vlc3QgcmVxdWVzdCBoYW5kbGluZyBhcmUgc2lnbmlmaWNhbnQuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBvbiBBTUQ2NCBzeXN0ZW1zIHdpdGggS1ZNIGFuZCBTRVYgZW5hYmxlZC4gVGhlIGZvY3VzIHdpbGwgYmUgb24gYHNucF9oYW5kbGVfZ3Vlc3RfcmVxYCwgYHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcWAgYW5kIHRoZSBlbnRyeXBvaW50IGBzZXZfaGFuZGxlX3ZtZ2V4aXRgLiBUaGUgc2V0LXJlc3VsdHMgY29tbWFuZCBzaG91bGQgcmVmbGVjdCB0aGlzIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTA0MywiT3V0cHV0VG9rZW5zIjoyMDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjE0OjIwLjAzMzczNTA0N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MTk0Mjk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1fQU1EXCIsXG4gICAgXCJLVk1fQU1EX1NFVlwiLFxuICAgIFwiQ1JZUFRPX0RFVl9TUF9QU1BcIixcbiAgICBcIkNSWVBUT19ERVZfQ0NQX0REXCIsXG4gICAgXCJBTURfSU9NTVVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzbnBfaGFuZGxlX2d1ZXN0X3JlcVwiLFxuICAgIFwic25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxXCIsXG4gICAgXCJzZXZfaGFuZGxlX3ZtZ2V4aXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiBLVk0gQU1EIFNFVi1TTlAgZ3Vlc3QgcmVxdWVzdCBoYW5kbGluZyBmdW5jdGlvbnMgKHNucF9oYW5kbGVfZ3Vlc3RfcmVxIGFuZCBzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXEpLiBXaGVuIGd1ZXN0IG1lbW9yeSByZWFkL3dyaXRlIG9yIGNlcnRpZmljYXRlIHRhYmxlIGNsZWFyYW5jZSBmYWlscywgS1ZNIG5vdyByZXBvcnRzIEdIQ0JfRVJSX0lOVkFMSURfSU5QVVQgdG8gdGhlIGd1ZXN0IGFuZCByZXN1bWVzIGd1ZXN0IGV4ZWN1dGlvbiByYXRoZXIgdGhhbiByZXR1cm5pbmcgLUVJTyB0byB1c2Vyc3BhY2UuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIEtWTSBjb250cm9sIGZsb3cgYW5kIFZNIHN0YXRlIGhhbmRsaW5nIG9uIGFtZDY0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTV9BTURcIixcbiAgICBcIktWTV9BTURfU0VWXCIsXG4gICAgXCJDUllQVE9fREVWX1NQX1BTUFwiLFxuICAgIFwiQ1JZUFRPX0RFVl9DQ1BfRERcIixcbiAgICBcIkFNRF9JT01NVVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNucF9oYW5kbGVfZ3Vlc3RfcmVxXCIsXG4gICAgXCJzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXFcIixcbiAgICBcInNldl9oYW5kbGVfdm1nZXhpdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIEtWTSBBTUQgU0VWLVNOUCBndWVzdCByZXF1ZXN0IGhhbmRsaW5nIGZ1bmN0aW9ucyAoc25wX2hhbmRsZV9ndWVzdF9yZXEgYW5kIHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcSkuIFdoZW4gZ3Vlc3QgbWVtb3J5IHJlYWQvd3JpdGUgb3IgY2VydGlmaWNhdGUgdGFibGUgY2xlYXJhbmNlIGZhaWxzLCBLVk0gbm93IHJlcG9ydHMgR0hDQl9FUlJfSU5WQUxJRF9JTlBVVCB0byB0aGUgZ3Vlc3QgYW5kIHJlc3VtZXMgZ3Vlc3QgZXhlY3V0aW9uIHJhdGhlciB0aGFuIHJldHVybmluZyAtRUlPIHRvIHVzZXJzcGFjZS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgS1ZNIGNvbnRyb2wgZmxvdyBhbmQgVk0gc3RhdGUgaGFuZGxpbmcgb24gYW1kNjQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjE0OjIwLjExMDkzOTc3NVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA0MjQ3ODI2MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjoxNDoyMC4xMTEzOTQxNzVaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMDQyNDMyNDA4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgaW4gS1ZNIFNFVi1TTlAgZ3Vlc3QgcmVxdWVzdCBoYW5kbGVycyAoYHNucF9oYW5kbGVfZ3Vlc3RfcmVxYCBhbmQgYHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcWApLiBTcGVjaWZpY2FsbHksIHdoZW4gcmVhZGluZy93cml0aW5nL2NsZWFyaW5nIGd1ZXN0IG1lbW9yeSBmYWlscyAoYGt2bV9yZWFkX2d1ZXN0YCwgYGt2bV93cml0ZV9ndWVzdGAsIG9yIGBrdm1fY2xlYXJfZ3Vlc3RgKSwgaW5zdGVhZCBvZiByZXR1cm5pbmcgYC1FSU9gICh3aGljaCBjYXVzZWQgS1ZNIHRvIGV4aXQgdG8gaG9zdCB1c2Vyc3BhY2UpLCBLVk0gbm93IGZvcm1hdHMgYSBHSENCIGJhZCBpbnB1dCBlcnJvciByZXNwb25zZSAoYEdIQ0JfRVJSX0lOVkFMSURfSU5QVVRgIHZpYSBgc3ZtX3ZtZ2V4aXRfYmFkX2lucHV0KClgKSBhbmQgcmVzdW1lcyB0aGUgZ3Vlc3QgKGByZXR1cm4gMWApLlxcblxcblRoZXNlIGNoYW5nZXMgc29sZWx5IGFmZmVjdCBlcnJvciByZXR1cm4gY29kZXMgYW5kIGNvbnRyb2wgZmxvdyBmb3IgZ3Vlc3QgZXJyb3IgcmVwb3J0aW5nOlxcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHN0cnVjdCBwYWRkaW5nIGlzIGNvcGllZCB0byB1c2Vyc3BhY2Ugb3IgdGhlIGd1ZXN0LlxcbjIuIEluIGBzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXFgLCBpZiByZWFkaW5nIGBtc2dfdHlwZWAgZmFpbHMsIGNvbnRyb2wganVtcHMgc3RyYWlnaHQgdG8gYHJlcXVlc3RfaW52YWxpZGAsIGF2b2lkaW5nIGFueSBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBgbXNnX3R5cGVgLlxcbjMuIE5vIGhlYXAvc3RhY2sgYWxsb2NhdGlvbnMgb3IgYnVmZmVyIHNpemUvb2Zmc2V0IG1hbmlwdWxhdGlvbnMgYXJlIGludHJvZHVjZWQuXFxuXFxuQXMgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGY4MGM3ODdiZDNkYTEzOGE2ZDdhNjRiOGI3ODBkMWYxNGQ5NDZkMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDEwIDIyOjEzOjEyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbmluZGV4IDU3MDU3MjNmMWY0MTIuLmQwNzU2MjMxMDUxOWEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5AQCAtNDIyOCw4ICs0MjI4LDEwIEBAIHN0YXRpYyBpbnQgc25wX2hhbmRsZV9ndWVzdF9yZXEoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGdwYV90IHJlcV9ncGEsIGdwYV90IHJlc3BfXG4gXG4gXHRndWFyZChtdXRleCkoXHUwMDI2c2V2LVx1MDAzZWd1ZXN0X3JlcV9tdXRleCk7XG4gXG4tXHRpZiAoa3ZtX3JlYWRfZ3Vlc3Qoa3ZtLCByZXFfZ3BhLCBzZXYtXHUwMDNlZ3Vlc3RfcmVxX2J1ZiwgUEFHRV9TSVpFKSlcbi1cdFx0cmV0dXJuIC1FSU87XG4rXHRpZiAoa3ZtX3JlYWRfZ3Vlc3Qoa3ZtLCByZXFfZ3BhLCBzZXYtXHUwMDNlZ3Vlc3RfcmVxX2J1ZiwgUEFHRV9TSVpFKSkge1xuK1x0XHRzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX0lOUFVUKTtcbitcdFx0cmV0dXJuIDE7XG4rXHR9XG4gXG4gXHRkYXRhLmdjdHhfcGFkZHIgPSBfX3BzcF9wYShzZXYtXHUwMDNlc25wX2NvbnRleHQpO1xuIFx0ZGF0YS5yZXFfcGFkZHIgPSBfX3BzcF9wYShzZXYtXHUwMDNlZ3Vlc3RfcmVxX2J1Zik7XG5AQCAtNDI0NCw4ICs0MjQ2LDEwIEBAIHN0YXRpYyBpbnQgc25wX2hhbmRsZV9ndWVzdF9yZXEoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGdwYV90IHJlcV9ncGEsIGdwYV90IHJlc3BfXG4gXHRpZiAocmV0IFx1MDAyNlx1MDAyNiAhZndfZXJyKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0aWYgKGt2bV93cml0ZV9ndWVzdChrdm0sIHJlc3BfZ3BhLCBzZXYtXHUwMDNlZ3Vlc3RfcmVzcF9idWYsIFBBR0VfU0laRSkpXG4tXHRcdHJldHVybiAtRUlPO1xuK1x0aWYgKGt2bV93cml0ZV9ndWVzdChrdm0sIHJlc3BfZ3BhLCBzZXYtXHUwMDNlZ3Vlc3RfcmVzcF9idWYsIFBBR0VfU0laRSkpIHtcbitcdFx0c3ZtX3ZtZ2V4aXRfYmFkX2lucHV0KHN2bSwgR0hDQl9FUlJfSU5WQUxJRF9JTlBVVCk7XG4rXHRcdHJldHVybiAxO1xuK1x0fVxuIFxuIFx0LyogTm8gYWN0aW9uIGlzIHJlcXVlc3RlZCAqZnJvbSBLVk0qIGlmIHRoZXJlIHdhcyBhIGZpcm13YXJlIGVycm9yLiAqL1xuIFx0c3ZtX3ZtZ2V4aXRfbm9fYWN0aW9uKHN2bSwgU05QX0dVRVNUX0VSUigwLCBmd19lcnIpKTtcbkBAIC00Mjk2LDcgKzQzMDAsNyBAQCBzdGF0aWMgaW50IHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgZ3BhX3QgcmVxX2dwYSwgZ3BhX3QgclxuIFxuIFx0aWYgKGt2bV9yZWFkX2d1ZXN0KGt2bSwgcmVxX2dwYSArIG9mZnNldG9mKHN0cnVjdCBzbnBfZ3Vlc3RfbXNnX2hkciwgbXNnX3R5cGUpLFxuIFx0XHRcdCAgIFx1MDAyNm1zZ190eXBlLCAxKSlcbi1cdFx0cmV0dXJuIC1FSU87XG4rXHRcdGdvdG8gcmVxdWVzdF9pbnZhbGlkO1xuIFxuIFx0LypcbiBcdCAqIEFzIHBlciBHSENCIHNwZWMsIHJlcXVlc3RzIG9mIHR5cGUgTVNHX1JFUE9SVF9SRVEgYWxzbyBhbGxvdyBmb3JcbkBAIC00MzM2LDcgKzQzNDAsNyBAQCBzdGF0aWMgaW50IHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgZ3BhX3QgcmVxX2dwYSwgZ3BhX3QgclxuIFx0XHQgKiBjZXJ0aWZpY2F0ZSB0YWJsZSBpcyB0ZXJtaW5hdGVkIGJ5IDI0LWJ5dGVzIG9mIHplcm9lcy5cbiBcdFx0ICovXG4gXHRcdGlmIChkYXRhX25wYWdlcyBcdTAwMjZcdTAwMjYga3ZtX2NsZWFyX2d1ZXN0KGt2bSwgZGF0YV9ncGEsIDI0KSlcbi1cdFx0XHRyZXR1cm4gLUVJTztcbitcdFx0XHRnb3RvIHJlcXVlc3RfaW52YWxpZDtcbiBcdH1cbiBcbiBcdHJldHVybiBzbnBfaGFuZGxlX2d1ZXN0X3JlcShzdm0sIHJlcV9ncGEsIHJlc3BfZ3BhKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjE0OjIwLjExMTM5NDk0NFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDAzMjI3OTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUaGlzIEtWTS9TVk0gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgdGhlIHNwZWNpZmljIG1vZGlmaWNhdGlvbnMuIEl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIHRoZSBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AgZmlsZS4gVGhlIGNoYW5nZXMgYXJlIGZvY3VzZWQgb24gaG93IHRoZSBjb2RlIGhhbmRsZXMgZmFpbHVyZXMgd2l0aGluIHRoZSBgc25wX2hhbmRsZV9ndWVzdF9yZXFgIGFuZCBgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxYCBmdW5jdGlvbnMuXG5cblNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSB0aGVyZSdzIGJlZW4gYSBjaGFuZ2UgaW4gZXJyb3IgaGFuZGxpbmcgcmVsYXRlZCB0byBga3ZtX3JlYWRfZ3Vlc3RgIGFuZCBga3ZtX3dyaXRlX2d1ZXN0YCBjYWxscywgYW5kIGBrdm1fY2xlYXJfZ3Vlc3RgLiBQcmV2aW91c2x5LCBhIHN0cmFpZ2h0Zm9yd2FyZCBgLUVJT2AgZXJyb3Igd291bGQgYmUgcmV0dXJuZWQgdXBvbiBmYWlsdXJlLiBOb3csIGluIHRoZSBgc25wX2hhbmRsZV9ndWVzdF9yZXFgIGZ1bmN0aW9uLCBvbiBhIHJlYWQgb3Igd3JpdGUgZmFpbHVyZSwgdGhlIGNvZGUgbm93IGNhbGxzIGBzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX0lOUFVUKWAgYW5kIHJldHVybnMgYDFgLiBBbmQgaW4gdGhlIGBzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXFgIGZ1bmN0aW9uLCBmYWlsdXJlcyBvbiBib3RoIHJlYWQgYW5kIGNsZWFyIG9wZXJhdGlvbnMgbm93IHRyaWdnZXIgYSBqdW1wIHRvIGEgYHJlcXVlc3RfaW52YWxpZDpgIGxhYmVsLlxuXG5UaGUgcXVlc3Rpb24gbm93IGJlY29tZXM6IFdoYXQgZG9lcyBgcmVxdWVzdF9pbnZhbGlkOmAgZG8/IEFuZCwgbW9yZSBpbXBvcnRhbnRseSwgd2hhdCdzIHRoZSBmdW5jdGlvbiBgc3ZtX3ZtZ2V4aXRfYmFkX2lucHV0YCBhbGwgYWJvdXQ/IFdoYXQncyBnb2luZyBvbiB3aXRoIHRoYXQgYEdIQ0JfRVJSX0lOVkFMSURfSU5QVVRgIGVycm9yIGNvZGU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIEl0IGxvb2tzIGxpa2UgdGhpcyBjb2RlIGlzIG5vdyBpbnRlbmRlZCB0byB0cmlnZ2VyIGEgdm1nZXhpdCB3aGVuIHdlIHNlZSBiYWQgaW5wdXQuXG5cbkknbSBnb2luZyB0byBzdGFydCBieSBnb2luZyB0byBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AgYW5kIGRpZyBpbnRvIHRoZXNlIHR3byBhcmVhcyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZSBhbmQgc2VlIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlIGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzQwLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjI6MTQ6MjQuMTE0NjI1MjM5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0ODUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQyMjAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MjIwOlxcdFxcdHN0cnVjdCBzZXZfZGF0YV9zbnBfZ3Vlc3RfcmVxdWVzdCBkYXRhID0gezB9O1xcbjQyMjE6XFx0XFx0c3RydWN0IGt2bSAqa3ZtID0gc3ZtLVxcdTAwM2V2Y3B1Lmt2bTtcXG40MjIyOlxcdFxcdHN0cnVjdCBrdm1fc2V2X2luZm8gKnNldiA9IHRvX2t2bV9zZXZfaW5mbyhrdm0pO1xcbjQyMjM6XFx0XFx0c2V2X3JldF9jb2RlIGZ3X2VyciA9IDA7XFxuNDIyNDpcXHRcXHRpbnQgcmV0O1xcbjQyMjU6XFx0XFxuNDIyNjpcXHRcXHRpZiAoIWlzX3Nldl9zbnBfZ3Vlc3QoXFx1MDAyNnN2bS1cXHUwMDNldmNwdSkpXFxuNDIyNzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40MjI4OlxcdFxcbjQyMjk6XFx0XFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZzZXYtXFx1MDAzZWd1ZXN0X3JlcV9tdXRleCk7XFxuNDIzMDpcXHRcXG40MjMxOlxcdFxcdGlmIChrdm1fcmVhZF9ndWVzdChrdm0sIHJlcV9ncGEsIHNldi1cXHUwMDNlZ3Vlc3RfcmVxX2J1ZiwgUEFHRV9TSVpFKSkge1xcbjQyMzI6XFx0XFx0XFx0c3ZtX3ZtZ2V4aXRfYmFkX2lucHV0KHN2bSwgR0hDQl9FUlJfSU5WQUxJRF9JTlBVVCk7XFxuNDIzMzpcXHRcXHRcXHRyZXR1cm4gMTtcXG40MjM0OlxcdFxcdH1cXG40MjM1OlxcdFxcbjQyMzY6XFx0XFx0ZGF0YS5nY3R4X3BhZGRyID0gX19wc3BfcGEoc2V2LVxcdTAwM2VzbnBfY29udGV4dCk7XFxuNDIzNzpcXHRcXHRkYXRhLnJlcV9wYWRkciA9IF9fcHNwX3BhKHNldi1cXHUwMDNlZ3Vlc3RfcmVxX2J1Zik7XFxuNDIzODpcXHRcXHRkYXRhLnJlc19wYWRkciA9IF9fcHNwX3BhKHNldi1cXHUwMDNlZ3Vlc3RfcmVzcF9idWYpO1xcbjQyMzk6XFx0XFxuNDI0MDpcXHRcXHQvKlxcbjQyNDE6XFx0XFx0ICogRmlybXdhcmUgZmFpbHVyZXMgYXJlIHByb3BhZ2F0ZWQgb24gdG8gZ3Vlc3QsIGJ1dCBhbnkgb3RoZXIgZmFpbHVyZVxcbjQyNDI6XFx0XFx0ICogY29uZGl0aW9uIGFsb25nIHRoZSB3YXkgc2hvdWxkIGJlIHJlcG9ydGVkIHRvIHVzZXJzcGFjZS4gRS5nLiBpZlxcbjQyNDM6XFx0XFx0ICogdGhlIFBTUCBpcyBkZWFkIGFuZCBjb21tYW5kcyBhcmUgdGltaW5nIG91dC5cXG40MjQ0OlxcdFxcdCAqL1xcbjQyNDU6XFx0XFx0cmV0ID0gc2V2X2lzc3VlX2NtZChrdm0sIFNFVl9DTURfU05QX0dVRVNUX1JFUVVFU1QsIFxcdTAwMjZkYXRhLCBcXHUwMDI2ZndfZXJyKTtcXG40MjQ2OlxcdFxcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgIWZ3X2VycilcXG40MjQ3OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuNDI0ODpcXHRcXG40MjQ5OlxcdFxcdGlmIChrdm1fd3JpdGVfZ3Vlc3Qoa3ZtLCByZXNwX2dwYSwgc2V2LVxcdTAwM2VndWVzdF9yZXNwX2J1ZiwgUEFHRV9TSVpFKSkge1xcbjQyNTA6XFx0XFx0XFx0c3ZtX3ZtZ2V4aXRfYmFkX2lucHV0KHN2bSwgR0hDQl9FUlJfSU5WQUxJRF9JTlBVVCk7XFxuNDI1MTpcXHRcXHRcXHRyZXR1cm4gMTtcXG40MjUyOlxcdFxcdH1cXG40MjUzOlxcdFxcbjQyNTQ6XFx0XFx0LyogTm8gYWN0aW9uIGlzIHJlcXVlc3RlZCAqZnJvbSBLVk0qIGlmIHRoZXJlIHdhcyBhIGZpcm13YXJlIGVycm9yLiAqL1xcbjQyNTU6XFx0XFx0c3ZtX3ZtZ2V4aXRfbm9fYWN0aW9uKHN2bSwgU05QX0dVRVNUX0VSUigwLCBmd19lcnIpKTtcXG40MjU2OlxcdFxcbjQyNTc6XFx0XFx0LyogcmVzdW1lIGd1ZXN0ICovXFxuNDI1ODpcXHRcXHRyZXR1cm4gMTtcXG40MjU5OlxcdH1cXG40MjYwOlxcdFxcbjQyNjE6XFx0c3RhdGljIGludCBzbnBfcmVxX2NlcnRzX2VycihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdTMyIHZtbV9lcnJvcilcXG40MjYyOlxcdHtcXG40MjYzOlxcdFxcdGdoY2Jfc2V0X3N3X2V4aXRfaW5mb18yKHN2bS1cXHUwMDNlc2V2X2VzLmdoY2IsIFNOUF9HVUVTVF9FUlIodm1tX2Vycm9yLCAwKSk7XFxuNDI2NDpcXHRcXG40MjY1OlxcdFxcdHJldHVybiAxOyAvKiByZXN1bWUgZ3Vlc3QgKi9cXG40MjY2OlxcdH1cXG40MjY3OlxcdFxcbjQyNjg6XFx0c3RhdGljIGludCBzbnBfY29tcGxldGVfcmVxX2NlcnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG40MjY5OlxcdHtcXG40MjcwOlxcdFxcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xcbjQyNzE6XFx0XFx0c3RydWN0IHZtY2JfY29udHJvbF9hcmVhICpjb250cm9sID0gXFx1MDAyNnN2bS1cXHUwMDNldm1jYi1cXHUwMDNlY29udHJvbDtcXG40MjcyOlxcdFxcbjQyNzM6XFx0XFx0c3dpdGNoIChSRUFEX09OQ0UodmNwdS1cXHUwMDNlcnVuLVxcdTAwM2VzbnBfcmVxX2NlcnRzLnJldCkpIHtcXG40Mjc0OlxcdFxcdGNhc2UgMDpcXG40Mjc1OlxcdFxcdFxcdHJldHVybiBzbnBfaGFuZGxlX2d1ZXN0X3JlcShzdm0sIGNvbnRyb2wtXFx1MDAzZWV4aXRfaW5mb18xLFxcbjQyNzY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGNvbnRyb2wtXFx1MDAzZWV4aXRfaW5mb18yKTtcXG40Mjc3OlxcdFxcdGNhc2UgRU5PU1BDOlxcbjQyNzg6XFx0XFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5yZWdzW1ZDUFVfUkVHU19SQlhdID0gdmNwdS1cXHUwMDNlcnVuLVxcdTAwM2VzbnBfcmVxX2NlcnRzLm5wYWdlcztcXG40Mjc5OlxcdFxcdFxcdHJldHVybiBzbnBfcmVxX2NlcnRzX2Vycihzdm0sIFNOUF9HVUVTVF9WTU1fRVJSX0lOVkFMSURfTEVOKTtcXG40MjgwOlxcdFxcdGNhc2UgRUFHQUlOOlxcbjQyODE6XFx0XFx0XFx0cmV0dXJuIHNucF9yZXFfY2VydHNfZXJyKHN2bSwgU05QX0dVRVNUX1ZNTV9FUlJfQlVTWSk7XFxuNDI4MjpcXHRcXHRjYXNlIEVJTzpcXG40MjgzOlxcdFxcdFxcdHJldHVybiBzbnBfcmVxX2NlcnRzX2Vycihzdm0sIFNOUF9HVUVTVF9WTU1fRVJSX0dFTkVSSUMpO1xcbjQyODQ6XFx0XFx0ZGVmYXVsdDpcXG40Mjg1OlxcdFxcdFxcdGJyZWFrO1xcbjQyODY6XFx0XFx0fVxcbjQyODc6XFx0XFxuNDI4ODpcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40Mjg5OlxcdH1cXG40MjkwOlxcdFxcbjQyOTE6XFx0c3RhdGljIGludCBzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXEoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGdwYV90IHJlcV9ncGEsIGdwYV90IHJlc3BfZ3BhKVxcbjQyOTI6XFx0e1xcbjQyOTM6XFx0XFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gXFx1MDAyNnN2bS1cXHUwMDNldmNwdTtcXG40Mjk0OlxcdFxcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXFx1MDAzZWt2bTtcXG40Mjk1OlxcdFxcbjQyOTY6XFx0XFx0dTggbXNnX3R5cGU7XFxuNDI5NzpcXHRcXG40Mjk4OlxcdFxcdGlmICghaXNfc2V2X3NucF9ndWVzdCh2Y3B1KSlcXG40Mjk5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjQzMDA6XFx0XFxuNDMwMTpcXHRcXHRpZiAoa3ZtX3JlYWRfZ3Vlc3Qoa3ZtLCByZXFfZ3BhICsgb2Zmc2V0b2Yoc3RydWN0IHNucF9ndWVzdF9tc2dfaGRyLCBtc2dfdHlwZSksXFxuNDMwMjpcXHRcXHRcXHRcXHQgICBcXHUwMDI2bXNnX3R5cGUsIDEpKVxcbjQzMDM6XFx0XFx0XFx0Z290byByZXF1ZXN0X2ludmFsaWQ7XFxuNDMwNDpcXHRcXG40MzA1OlxcdFxcdC8qXFxuNDMwNjpcXHRcXHQgKiBBcyBwZXIgR0hDQiBzcGVjLCByZXF1ZXN0cyBvZiB0eXBlIE1TR19SRVBPUlRfUkVRIGFsc28gYWxsb3cgZm9yXFxuNDMwNzpcXHRcXHQgKiBhZGRpdGlvbmFsIGNlcnRpZmljYXRlIGRhdGEgdG8gYmUgcHJvdmlkZWQgYWxvbmdzaWRlIHRoZSBhdHRlc3RhdGlvblxcbjQzMDg6XFx0XFx0ICogcmVwb3J0IHZpYSB0aGUgZ3Vlc3QtcHJvdmlkZWQgZGF0YSBwYWdlcyBpbmRpY2F0ZWQgYnkgUkFYL1JCWC4gSWZcXG40MzA5OlxcdFxcdCAqIHVzZXJzcGFjZSBlbmFibGVzIEtWTV9FWElUX1NOUF9SRVFfQ0VSVFMsIHRoZW4gZXhpdCB0byB1c2Vyc3BhY2VcXG40MzEwOlxcdFxcdCAqIHRvIGdpdmUgdXNlcnNwYWNlIGFuIG9wcG9ydHVuaXR5IHRvIHByb3ZpZGUgdGhlIGNlcnRpZmljYXRlIGRhdGFcXG40MzExOlxcdFxcdCAqIGJlZm9yZSBpc3N1aW5nL2NvbXBsZXRpbmcgdGhlIGF0dGVzdGF0aW9uIHJlcXVlc3QuIE90aGVyd2lzZSwgcmV0dXJuXFxuNDMxMjpcXHRcXHQgKiBhbiBlbXB0eSBjZXJ0aWZpY2F0ZSB0YWJsZSBpbiB0aGUgZ3Vlc3QtcHJvdmlkZWQgZGF0YSBwYWdlcyBhbmRcXG40MzEzOlxcdFxcdCAqIGhhbmRsZSB0aGUgYXR0ZXN0YXRpb24gcmVxdWVzdCBpbW1lZGlhdGVseS5cXG40MzE0OlxcdFxcdCAqL1xcbjQzMTU6XFx0XFx0aWYgKG1zZ190eXBlID09IFNOUF9NU0dfUkVQT1JUX1JFUSkge1xcbjQzMTY6XFx0XFx0XFx0c3RydWN0IGt2bV9zZXZfaW5mbyAqc2V2ID0gXFx1MDAyNnRvX2t2bV9zdm0oa3ZtKS1cXHUwMDNlc2V2X2luZm87XFxuNDMxNzpcXHRcXHRcXHR1NjQgZGF0YV9ucGFnZXM7XFxuNDMxODpcXHRcXHRcXHRncGFfdCBkYXRhX2dwYTtcXG40MzE5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjoxNDoyNC4xMTUyOTYwMDlaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTU3OTQ3NTg1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcWAqKlxuXG5Pa2F5LCBsZXQncyBkaWcgaW50byB0aGlzIGBzbnBfaGFuZGxlX2V4dF9ndWVzdF9yZXFgIGZ1bmN0aW9uLiBJJ20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gd2hlcmUgaXQgaGFuZGxlcyByZXF1ZXN0IHZhbGlkaXR5LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGlkZW50aWZpZXMgYW5kIHJlYWN0cyB0byBhbiBpbnZhbGlkIHJlcXVlc3QuIE15IGZvY3VzIHdpbGwgYmUgb24gdGhlIHBhcnQgbGFiZWxlZCBhcyBgcmVxdWVzdF9pbnZhbGlkOmAuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBicmFuY2hpbmcgbG9naWMgdGhhdCBsZWFkcyB0byB0aGF0IHBvaW50IGFuZCwgY3J1Y2lhbGx5LCB3aGF0IGFjdGlvbnMgYXJlIHRha2VuIHdoZW4gYSByZXF1ZXN0IGlzIGRldGVybWluZWQgdG8gYmUgaW52YWxpZC4gSXQncyBwcm9iYWJseSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbiBvZiB0aGUgc2VjdXJpdHkgYm91bmRhcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyNTUsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjE0OjI1LjY5NDc3NDQyNVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODU3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MzIwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MzIwOlxcdFxcdFxcdGlmICgha3ZtX2doY2JfcmF4X2lzX3ZhbGlkKHN2bSkgfHwgIWt2bV9naGNiX3JieF9pc192YWxpZChzdm0pKVxcbjQzMjE6XFx0XFx0XFx0XFx0Z290byByZXF1ZXN0X2ludmFsaWQ7XFxuNDMyMjpcXHRcXG40MzIzOlxcdFxcdFxcdGRhdGFfZ3BhID0gdmNwdS1cXHUwMDNlYXJjaC5yZWdzW1ZDUFVfUkVHU19SQVhdO1xcbjQzMjQ6XFx0XFx0XFx0ZGF0YV9ucGFnZXMgPSB2Y3B1LVxcdTAwM2VhcmNoLnJlZ3NbVkNQVV9SRUdTX1JCWF07XFxuNDMyNTpcXHRcXG40MzI2OlxcdFxcdFxcdGlmICghUEFHRV9BTElHTkVEKGRhdGFfZ3BhKSlcXG40MzI3OlxcdFxcdFxcdFxcdGdvdG8gcmVxdWVzdF9pbnZhbGlkO1xcbjQzMjg6XFx0XFxuNDMyOTpcXHRcXHRcXHRpZiAoc2V2LVxcdTAwM2VzbnBfY2VydHNfZW5hYmxlZCkge1xcbjQzMzA6XFx0XFx0XFx0XFx0dmNwdS1cXHUwMDNlcnVuLVxcdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX1NOUF9SRVFfQ0VSVFM7XFxuNDMzMTpcXHRcXHRcXHRcXHR2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZXNucF9yZXFfY2VydHMuZ3BhID0gZGF0YV9ncGE7XFxuNDMzMjpcXHRcXHRcXHRcXHR2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZXNucF9yZXFfY2VydHMubnBhZ2VzID0gZGF0YV9ucGFnZXM7XFxuNDMzMzpcXHRcXHRcXHRcXHR2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZXNucF9yZXFfY2VydHMucmV0ID0gMDtcXG40MzM0OlxcdFxcdFxcdFxcdHZjcHUtXFx1MDAzZWFyY2guY29tcGxldGVfdXNlcnNwYWNlX2lvID0gc25wX2NvbXBsZXRlX3JlcV9jZXJ0cztcXG40MzM1OlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjQzMzY6XFx0XFx0XFx0fVxcbjQzMzc6XFx0XFxuNDMzODpcXHRcXHRcXHQvKlxcbjQzMzk6XFx0XFx0XFx0ICogQXMgcGVyIEdIQ0Igc3BlYyAoc2VlIFxcXCJTTlAgRXh0ZW5kZWQgR3Vlc3QgUmVxdWVzdFxcXCIpLCB0aGVcXG40MzQwOlxcdFxcdFxcdCAqIGNlcnRpZmljYXRlIHRhYmxlIGlzIHRlcm1pbmF0ZWQgYnkgMjQtYnl0ZXMgb2YgemVyb2VzLlxcbjQzNDE6XFx0XFx0XFx0ICovXFxuNDM0MjpcXHRcXHRcXHRpZiAoZGF0YV9ucGFnZXMgXFx1MDAyNlxcdTAwMjYga3ZtX2NsZWFyX2d1ZXN0KGt2bSwgZGF0YV9ncGEsIDI0KSlcXG40MzQzOlxcdFxcdFxcdFxcdGdvdG8gcmVxdWVzdF9pbnZhbGlkO1xcbjQzNDQ6XFx0XFx0fVxcbjQzNDU6XFx0XFxuNDM0NjpcXHRcXHRyZXR1cm4gc25wX2hhbmRsZV9ndWVzdF9yZXEoc3ZtLCByZXFfZ3BhLCByZXNwX2dwYSk7XFxuNDM0NzpcXHRcXG40MzQ4OlxcdHJlcXVlc3RfaW52YWxpZDpcXG40MzQ5OlxcdFxcdHN2bV92bWdleGl0X2JhZF9pbnB1dChzdm0sIEdIQ0JfRVJSX0lOVkFMSURfSU5QVVQpO1xcbjQzNTA6XFx0XFx0cmV0dXJuIDE7IC8qIHJlc3VtZSBndWVzdCAqL1xcbjQzNTE6XFx0fVxcbjQzNTI6XFx0XFxuNDM1MzpcXHRzdGF0aWMgaW50IHNldl9oYW5kbGVfdm1nZXhpdF9tc3JfcHJvdG9jb2woc3RydWN0IHZjcHVfc3ZtICpzdm0pXFxuNDM1NDpcXHR7XFxuNDM1NTpcXHRcXHRzdHJ1Y3Qgdm1jYl9jb250cm9sX2FyZWEgKmNvbnRyb2wgPSBcXHUwMDI2c3ZtLVxcdTAwM2V2bWNiLVxcdTAwM2Vjb250cm9sO1xcbjQzNTY6XFx0XFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gXFx1MDAyNnN2bS1cXHUwMDNldmNwdTtcXG40MzU3OlxcdFxcdHN0cnVjdCBrdm1fc2V2X2luZm8gKnNldiA9IHRvX2t2bV9zZXZfaW5mbyh2Y3B1LVxcdTAwM2Vrdm0pO1xcbjQzNTg6XFx0XFx0dTY0IGdoY2JfaW5mbztcXG40MzU5OlxcdFxcdGludCByZXQgPSAxO1xcbjQzNjA6XFx0XFxuNDM2MTpcXHRcXHRnaGNiX2luZm8gPSBjb250cm9sLVxcdTAwM2VnaGNiX2dwYSBcXHUwMDI2IEdIQ0JfTVNSX0lORk9fTUFTSztcXG40MzYyOlxcdFxcbjQzNjM6XFx0XFx0dHJhY2Vfa3ZtX3ZtZ2V4aXRfbXNyX3Byb3RvY29sX2VudGVyKHN2bS1cXHUwMDNldmNwdS52Y3B1X2lkLFxcbjQzNjQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBjb250cm9sLVxcdTAwM2VnaGNiX2dwYSk7XFxuNDM2NTpcXHRcXG40MzY2OlxcdFxcdHN3aXRjaCAoZ2hjYl9pbmZvKSB7XFxuNDM2NzpcXHRcXHRjYXNlIEdIQ0JfTVNSX1NFVl9JTkZPX1JFUTpcXG40MzY4OlxcdFxcdFxcdHNldF9naGNiX21zcihzdm0sIEdIQ0JfTVNSX1NFVl9JTkZPKChfX3U2NClzZXYtXFx1MDAzZWdoY2JfdmVyc2lvbixcXG40MzY5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBHSENCX1ZFUlNJT05fTUlOLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjoxNDoyNS42OTQ5NjE4MDVaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDEzMzI4MDQwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgS1ZNIFNFVi1TTlAgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGhvdyBLVk0gaGFuZGxlcyBmYWlsdXJlcyByZWxhdGVkIHRvIGd1ZXN0IG1lbW9yeSBhY2Nlc3MsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIFNFVi1TTlAgKFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gLSBTZWN1cmUgTmVzdGVkIFBhZ2luZykgY29udGV4dC4gUHJldmlvdXNseSwgaWYgS1ZNIGVuY291bnRlcmVkIGEgcHJvYmxlbSByZWFkaW5nIGZyb20sIHdyaXRpbmcgdG8sIG9yIGNsZWFyaW5nIGd1ZXN0IG1lbW9yeSAodXNpbmcgZnVuY3Rpb25zIGxpa2UgYGt2bV9yZWFkX2d1ZXN0YCwgYGt2bV93cml0ZV9ndWVzdGAsIG9yIGBrdm1fY2xlYXJfZ3Vlc3RgKSwgaXQgd291bGQgc2ltcGx5IHJldHVybiBhIGdlbmVyaWMgYC1FSU9gIGVycm9yLiBUaGlzLCBpbiB0dXJuLCB0cmlnZ2VyZWQgYW4gYEtWTV9FWElUX0lOVEVSTkFMX0VSUk9SYCBvciBzaW1pbGFyIGV4aXQgcmVhc29uLCBwb3RlbnRpYWxseSByZXN1bHRpbmcgaW4gS1ZNIGV4aXRpbmcgdG8gdXNlcnNwYWNlIHdpdGggYSBnZW5lcmFsIGAtRUlPYCByZXR1cm4gZnJvbSBgS1ZNX1JVTmAuIENsZWFybHksIHRoaXMgd2Fzbid0IGlkZWFsIGZvciBTRVYtU05QIG9wZXJhdGlvbnMuXG5cblRoZSBjb3JlIG9mIHRoZSBwYXRjaCBzZWVtcyB0byBiZSBhbGlnbmluZyBLVk0ncyBiZWhhdmlvciB3aXRoIHRoZSBHSENCIChHdWVzdCBIeXBlcnZpc29yIENvbW11bmljYXRpb24gQmxvY2spIHNwZWNpZmljYXRpb24uIEluc3RlYWQgb2YgdHJlYXRpbmcgdGhlc2UgbWVtb3J5IGFjY2VzcyBmYWlsdXJlcyBhcyBmYXRhbCBlcnJvcnMsIHRoZSBjb3JyZWN0IG1ldGhvZCBzZWVtcyB0byBiZSB0byByZXBvcnQgdGhlIGVycm9yIHN0YXR1cy4gVGhpcyBpbnZvbHZlcyBzZXR0aW5nIGEgVk1HRVhJVCBlcnJvciBzdGF0dXMsIGBzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX0lOUFVUKWAsIHdoZW4gdGhlIGd1ZXN0IHByb3ZpZGVzIGluY29ycmVjdCBHUEEgKEd1ZXN0IFBoeXNpY2FsIEFkZHJlc3MpIG9yIGludmFsaWQgaW5wdXQuIFN1YnNlcXVlbnRseSwgYSByZXR1cm4gdmFsdWUgb2YgYDFgIGlzIHVzZWQsIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSBndWVzdCBleGVjdXRpb24gc2hvdWxkIHJlc3VtZSB3aXRoIHRoZSBlcnJvciBjb2RlIHByb3ZpZGVkIGluIHRoZSBHSENCIGV4aXQgaW5mb3JtYXRpb24uIEVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggZW5zdXJlcyB0aGF0IHRoZSBndWVzdCBoYW5kbGVzIHRoZSBlcnJvciwgcmF0aGVyIHRoYW4gS1ZNIHRlcm1pbmF0aW5nIHRoZSBWQ1BVIHJ1biBhbmQgcmFpc2luZyBhbiBleGNlcHRpb24gdG8gdXNlcnNwYWNlLlxuXG5Ob3csIGxldCdzIHNoaWZ0IGdlYXJzIGFuZCBsb29rIGZvciBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgY29uY2VybnMuIE15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUgd2lsbCBsZWFkIG1lIHRvIGV4YW1pbmluZyB0aGUgYHN2bV92bWdleGl0X2JhZF9pbnB1dGAgZnVuY3Rpb24sIGxvb2tpbmcgZm9yIGFueSBwb3NzaWJsZSB2dWxuZXJhYmlsaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzNzgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjoxNDoyOS44MjgyNDQ3OTlaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NjU2MTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN2bV92bWdleGl0X2JhZF9pbnB1dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTM2MjQ9c3RhdGljIGludCBzZXR1cF92bWdleGl0X3NjcmF0Y2goc3RydWN0IHZjcHVfc3ZtICpzdm0sIGJvb2wgc3luYywgdTY0IG1pbl9sZW4pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTM3MTMtZV9zY3JhdGNoOlxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzcxNDpcXHRzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX1NDUkFUQ0hfQVJFQSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zNzE1LVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00MjE4PXN0YXRpYyBpbnQgc25wX2hhbmRsZV9ndWVzdF9yZXEoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGdwYV90IHJlcV9ncGEsIGdwYV90IHJlc3BfZ3BhKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00MjMxLVxcdGlmIChrdm1fcmVhZF9ndWVzdChrdm0sIHJlcV9ncGEsIHNldi1cXHUwMDNlZ3Vlc3RfcmVxX2J1ZiwgUEFHRV9TSVpFKSkge1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDIzMjpcXHRcXHRzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX0lOUFVUKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQyMzMtXFx0XFx0cmV0dXJuIDE7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQyNDktXFx0aWYgKGt2bV93cml0ZV9ndWVzdChrdm0sIHJlc3BfZ3BhLCBzZXYtXFx1MDAzZWd1ZXN0X3Jlc3BfYnVmLCBQQUdFX1NJWkUpKSB7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0MjUwOlxcdFxcdHN2bV92bWdleGl0X2JhZF9pbnB1dChzdm0sIEdIQ0JfRVJSX0lOVkFMSURfSU5QVVQpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDI1MS1cXHRcXHRyZXR1cm4gMTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDI5MT1zdGF0aWMgaW50IHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgZ3BhX3QgcmVxX2dwYSwgZ3BhX3QgcmVzcF9ncGEpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQzNDgtcmVxdWVzdF9pbnZhbGlkOlxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDM0OTpcXHRzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX0lOUFVUKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQzNTAtXFx0cmV0dXJuIDE7IC8qIHJlc3VtZSBndWVzdCAqL1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz00NTEwPWludCBzZXZfaGFuZGxlX3ZtZ2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NTQ3LVxcdFxcdFxcdCAgICBjb250cm9sLVxcdTAwM2VnaGNiX2dwYSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0NTQ4OlxcdFxcdHN2bV92bWdleGl0X2JhZF9pbnB1dChzdm0sIEdIQ0JfRVJSX05PVF9SRUdJU1RFUkVEKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ1NDktXFx0XFx0cmV0dXJuIDE7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ1NTUtXFx0XFx0XFx0ICAgIHN2bS1cXHUwMDNlc2V2X2VzLmdoY2ItXFx1MDAzZWdoY2JfdXNhZ2UpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDU1NjpcXHRcXHRzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX1VTQUdFKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ1NTctXFx0XFx0cmV0dXJuIDE7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ1NjItXFx0XFx0XFx0ICAgIGNvbnRyb2wtXFx1MDAzZWV4aXRfY29kZSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0NTYzOlxcdFxcdHN2bV92bWdleGl0X2JhZF9pbnB1dChzdm0sIEdIQ0JfRVJSX0lOVkFMSURfRVZFTlQpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDU2NC1cXHRcXHRyZXR1cm4gMTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDU3NC1cXHRcXHRkdW1wX2doY2Ioc3ZtKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ1NzU6XFx0XFx0c3ZtX3ZtZ2V4aXRfYmFkX2lucHV0KHN2bSwgR0hDQl9FUlJfTUlTU0lOR19JTlBVVCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NTc2LVxcdFxcdHJldHVybiAxO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NjA5LVxcdFxcdGlmICh0b19rdm1fc2V2X2luZm8odmNwdS1cXHUwMDNla3ZtKS1cXHUwMDNlZ2hjYl92ZXJzaW9uIFxcdTAwM2U9IDIgXFx1MDAyNlxcdTAwMjYgbGVuIFxcdTAwM2UgOCkge1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDYxMDpcXHRcXHRcXHRzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX0lOUFVUKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ2MTEtXFx0XFx0XFx0cmV0dXJuIDE7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ2NDMtXFx0XFx0XFx0ICAgICAgIGNvbnRyb2wtXFx1MDAzZWV4aXRfaW5mb18xKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ2NDQ6XFx0XFx0XFx0c3ZtX3ZtZ2V4aXRfYmFkX2lucHV0KHN2bSwgR0hDQl9FUlJfSU5WQUxJRF9JTlBVVCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NjQ1LVxcdFxcdH1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDY2OS1cXHRcXHRpZiAoc2V2X3NucF9hcF9jcmVhdGlvbihzdm0pKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NDY3MDpcXHRcXHRcXHRzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX0lOUFVUKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ2NzEtXFx0XFx0cmV0dXJuIDE7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ2NzYtXFx0XFx0ICAgIGNvbnRyb2wtXFx1MDAzZWV4aXRfaW5mb18xID09IGNvbnRyb2wtXFx1MDAzZWV4aXRfaW5mb18yKSB7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0Njc3OlxcdFxcdFxcdHN2bV92bWdleGl0X2JhZF9pbnB1dChzdm0sIEdIQ0JfRVJSX0lOVkFMSURfSU5QVVQpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDY3OC1cXHRcXHRcXHRyZXR1cm4gMTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDY5OC1cXHRcXHRcXHQgICAgY29udHJvbC1cXHUwMDNlZXhpdF9jb2RlKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ2OTk6XFx0XFx0c3ZtX3ZtZ2V4aXRfYmFkX2lucHV0KHN2bSwgR0hDQl9FUlJfSU5WQUxJRF9FVkVOVCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00NzAwLVxcdFxcdHJldHVybiAxO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD03MTE9c3RhdGljIGlubGluZSB2b2lkIHN2bV92bWdleGl0X2luamVjdF9leGNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0sIHU4IHZlY3RvcilcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNzE3LVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6NzE4OnN0YXRpYyBpbmxpbmUgdm9pZCBzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3RydWN0IHZjcHVfc3ZtICpzdm0sIHU2NCBzdWJlcnJvcilcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTcxOS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjE0OjI5Ljg3NDkwNDkyMloiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjczOTMyMzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIGEgU3VzcGVjdGVkIFNWTSBWTUVYSVQgSXNzdWUqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBvdGVudGlhbCBwcm9ibGVtIG9uIG15IHJhZGFyLCBsaWtlbHkgcmVsYXRlZCB0byB0aGUgU2VjdXJlIFZpcnR1YWwgTWFjaGluZSAoU1ZNKSBvbiB4ODYsIHByb2JhYmx5IGFuIGlzc3VlIHdpdGggYSBiYWQgaW5wdXQgdHJpZ2dlcmluZyBhIGB2bWV4aXRgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBkZWZpbml0aW9uIGFuZCBwb3RlbnRpYWwgY2F1c2VzIG9mIHRoaXMgc3BlY2lmaWMgc2l0dWF0aW9uOiBgc3ZtX3ZtZ2V4aXRfYmFkX2lucHV0YC4gVGhlIGJlc3QgcGxhY2UgdG8gZmluZCB0aGUgYXV0aG9yaXRhdGl2ZSBkZWZpbml0aW9uIGZvciB0aGlzIGNvbmRpdGlvbiB3aWxsIGJlIHdpdGhpbiB0aGUgS1ZNIChLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lKSBzb3VyY2VzLCBzcGVjaWZpY2FsbHkgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyB4ODYgY29kZSBhbmQgcmVsYXRlZCBoZWFkZXIgZmlsZXMuIFRoZSBoZWFkZXIgZmlsZSBgYXJjaC94ODYva3ZtL3N2bS9zdm0uaGAgaXMgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIFRoYXQgZmlsZSB3aWxsIGNvbnRhaW4gdGhlIGVudW1lcmF0ZWQgZGVmaW5pdGlvbiBvZiB0aGUgcGFydGljdWxhciBWTUVYSVQgY29kZSB0aGF0IGludGVyZXN0cyBtZS4gTGV0J3Mgc2VlIGlmIHRoaXMgZGVmaW5pdGlvbiBwcm92aWRlcyBjbHVlcyBhYm91dCB0aGUgbmF0dXJlIG9mIHRoZSBiYWQgaW5wdXQsIHJlbGV2YW50IHJlZ2lzdGVycywgb3IgYW55IG90aGVyIGltcG9ydGFudCBjb250ZXh0LiBGcm9tIHRoZXJlLCBJIGNhbiBzdGFydCB0byBmb3JtdWxhdGUgYSBoeXBvdGhlc2lzIGFib3V0IHdoYXQgY29uZGl0aW9ucyBtaWdodCB0cmlnZ2VyIHRoaXMgc3BlY2lmaWMgVk1FWElUIGFuZCwgaG9wZWZ1bGx5LCBsZWFkIHRvIGEgZml4IG9yIGF0IGxlYXN0IGEgd29ya2Fyb3VuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg2NywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjE0OjMyLjE0ODg0MDQzNVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcxNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDcxNTpcXHRcXHRzdm1fdm1nZXhpdF9zZXRfcmV0dXJuX2NvZGUoc3ZtLCBHSENCX0hWX1JFU1BfSVNTVUVfRVhDRVBUSU9OLCBkYXRhKTtcXG4gNzE2OlxcdH1cXG4gNzE3OlxcdFxcbiA3MTg6XFx0c3RhdGljIGlubGluZSB2b2lkIHN2bV92bWdleGl0X2JhZF9pbnB1dChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdTY0IHN1YmVycm9yKVxcbiA3MTk6XFx0e1xcbiA3MjA6XFx0XFx0c3ZtX3ZtZ2V4aXRfc2V0X3JldHVybl9jb2RlKHN2bSwgR0hDQl9IVl9SRVNQX01BTEZPUk1FRF9JTlBVVCwgc3ViZXJyb3IpO1xcbiA3MjE6XFx0fVxcbiA3MjI6XFx0XFxuIDcyMzpcXHRzdGF0aWMgaW5saW5lIHZvaWQgc3ZtX3ZtZ2V4aXRfc3VjY2VzcyhzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdTY0IGRhdGEpXFxuIDcyNDpcXHR7XFxuIDcyNTpcXHRcXHRzdm1fdm1nZXhpdF9zZXRfcmV0dXJuX2NvZGUoc3ZtLCBHSENCX0hWX1JFU1BfTk9fQUNUSU9OLCBkYXRhKTtcXG4gNzI2OlxcdH1cXG4gNzI3OlxcdFxcbiA3Mjg6XFx0c3RhdGljIGlubGluZSB2b2lkIHN2bV92bWdleGl0X25vX2FjdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdTY0IGRhdGEpXFxuIDcyOTpcXHR7XFxuIDczMDpcXHRcXHRzdm1fdm1nZXhpdF9zZXRfcmV0dXJuX2NvZGUoc3ZtLCBHSENCX0hWX1JFU1BfTk9fQUNUSU9OLCBkYXRhKTtcXG4gNzMxOlxcdH1cXG4gNzMyOlxcdFxcbiA3MzM6XFx0LypcXG4gNzM0OlxcdCAqIFRoZSBNU1JQTSBpcyA4S2lCIGluIHNpemUsIGRpdmlkZWQgaW50byBmb3VyIDJLaUIgcmFuZ2VzICh0aGUgZm91cnRoIHJhbmdlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjE0OjMyLjE0ODkyNzk5NVoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODIxNjY4MDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHN1bW1hcml6aW5nIHRoZSBcInRob3VnaHRzXCIgcmVsYXRlZCB0byBgc3ZtX3ZtZ2V4aXRfc2V0X3JldHVybl9jb2RlYCwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZTpcblxuKipNeSBQZXJzcGVjdGl2ZSBvbiBgc3ZtX3ZtZ2V4aXRfc2V0X3JldHVybl9jb2RlYCoqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYHN2bV92bWdleGl0X3NldF9yZXR1cm5fY29kZWAuIEltbWVkaWF0ZWx5LCBteSBtaW5kIGp1bXBzIHRvIHRoZSBjb3JlIG9mIHRoaXM6IHdlJ3JlIGRlYWxpbmcgd2l0aCBhbiBTVk0gKFNlY3VyZSBWaXJ0dWFsIE1hY2hpbmUpIGFuZCwgbW9yZSBzcGVjaWZpY2FsbHksIGEgVk0tZXhpdC4gVGhlIGtleSBoZXJlIGlzICpzZXR0aW5nKiBhIHJldHVybiBjb2RlLiBUaGlzIHN1Z2dlc3RzIHdlIGFyZSBpbiB0aGUgcHJpdmlsZWdlZCBtb2RlIG9mIHRoZSBob3N0IE9TIGFuZCBtYW5pcHVsYXRpbmcgdGhlIGV4aXQgcHJvY2VzcyBhZnRlciBhIHRyYXAuXG5cbkZpcnN0LCBJIG5lZWQgdG8gY29uc2lkZXIgKndoeSogd2UncmUgc2V0dGluZyBhIHJldHVybiBjb2RlLiBJcyB0aGlzIHJlbGF0ZWQgdG8gYW4gZXhjZXB0aW9uPyBBIGd1ZXN0IGluc3RydWN0aW9uPyBBIHNlY3VyaXR5IGV2ZW50PyAgVGhlIHJlYXNvbiBpcyBmdW5kYW1lbnRhbCB0byB0aGUgY29udGV4dC4gQSBwcm9wZXJseSBjb2RlZCBzeXN0ZW0gc2hvdWxkIGF2b2lkIHRoZSByZXR1cm4gb2YgZ2VuZXJpYyBlcnJvcnMuXG5cblRoaW5raW5nIGFib3V0IHRoZSBjb2RlIGl0c2VsZiwgSSdtIGltYWdpbmluZyBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIFZNLWV4aXQgaGFuZGxlci4gSSdtIHZpc3VhbGl6aW5nIHRoZSBwb3RlbnRpYWwgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkOiB0aGUgVk1DUyAoVmlydHVhbCBNYWNoaW5lIENvbnRyb2wgU3RydWN0dXJlKSwgdGhlIGV4aXQgaW5mb3JtYXRpb24gYXJlYSwgdGhlIEdQUnMgKEdlbmVyYWwgUHVycG9zZSBSZWdpc3RlcnMpLCBhbmQgdGhlIG92ZXJhbGwgc3RhdGUgb2YgdGhlIHZpcnR1YWwgbWFjaGluZS4gIEknbSB0cnlpbmcgdG8gbWVudGFsbHkgdHJhY2UgdGhlIGV4ZWN1dGlvbiBmbG93LiBXaGVyZSBpbiB0aGUgcHJvY2VzcyBkb2VzIHRoaXMgY29kZSByZXNpZGU/IERvZXMgaXQgaGFwcGVuIGJlZm9yZSBvciBhZnRlciB0aGUgaGFuZGxpbmcgb2YgdGhlIFZNIGluc3RydWN0aW9uP1xuXG5UaGUgXCJzZXR0aW5nXCIgcGFydCBpcyB3aGF0IGludHJpZ3VlcyBtZS4gV2hhdCByYW5nZSBvZiByZXR1cm4gY29kZXMgYXJlIHdlIHRhbGtpbmcgYWJvdXQ/IEFyZSB3ZSBkZWFsaW5nIHdpdGggZXJyb3IgY29kZXMgZGVmaW5lZCBieSBBTUQsIGEgY3VzdG9tIHNldCwgb3IgcG9zc2libHkgYSBtYXBwaW5nIHRvIGEgc3BlY2lmaWMgT1MncyBlcnJvciBjb2Rlcz8gSWYgd2UncmUgc2V0dGluZyBhIGN1c3RvbSB2YWx1ZSwgSSBpbW1lZGlhdGVseSB3YW50IHRvIGludmVzdGlnYXRlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGlzIGN1c3RvbSBjYWxsLiBXZSBuZWVkIHRvIGJlIGNyeXN0YWwgY2xlYXIgYWJvdXQgdGhlIG1lYW5pbmcgb2YgdGhlc2UgY29kZXMgdG8gZW5zdXJlIHByb3BlciBlcnJvciBoYW5kbGluZyBvbiB0aGUgZ3Vlc3Qgc2lkZS4gV2UncmUgdGFsa2luZyBhYm91dCBsb3ctbGV2ZWwgVk0gYmVoYXZpb3JzLlxuXG5BbHNvLCBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIHBvdGVudGlhbCBwaXRmYWxsczogd2hhdCBoYXBwZW5zIGlmIHRoZSByZXR1cm4gY29kZSBpc24ndCBwcm9wZXJseSBoYW5kbGVkIGJ5IHRoZSBndWVzdD8gRG9lcyB0aGlzIGxlYWQgdG8gYSBjcmFzaD8gRG9lcyBpdCBleHBvc2UgYW55IHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcz8gUHJvcGVyIHRlc3RpbmcgaXMgb2J2aW91c2x5IGNyaXRpY2FsIGhlcmUsIGVzcGVjaWFsbHkgaW4gYSBzZWN1cml0eSBjb250ZXh0LlxuXG5GaW5hbGx5LCBJJ20gY29uc2lkZXJpbmcgdGhlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gVGhpcyBpcyBsaWtlbHkgYSB2ZXJ5IGZyZXF1ZW50bHktY2FsbGVkIGZ1bmN0aW9uLiAgSWYgdGhlcmUgYXJlIG9wdGltaXphdGlvbnMgdGhhdCBjYW4gYmUgZG9uZSB0byB0aGlzIGZ1bmN0aW9uLCB0aGV5IHNob3VsZCBiZSBpbnZlc3RpZ2F0ZWQgZWFybHkgb24uIENvdWxkIHdlIGNhY2hlIGluZm9ybWF0aW9uLCBzdHJlYW1saW5lIGRhdGEgc3RydWN0dXJlIGFjY2Vzcywgb3IgdXNlIG1vcmUgZWZmaWNpZW50IGVycm9yIGhhbmRsaW5nIHRlY2huaXF1ZXM/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1NTYsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjE0OjM1Ljk3MDU5ODM2OVoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ2MDEwMzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3ZtX3ZtZ2V4aXRfc2V0X3JldHVybl9jb2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9zdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9Njk0PXN0YXRpYyBpbmxpbmUgYm9vbCBpc192bm1pX2VuYWJsZWQoc3RydWN0IHZjcHVfc3ZtICpzdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTcwMy1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjcwNDpzdGF0aWMgaW5saW5lIHZvaWQgc3ZtX3ZtZ2V4aXRfc2V0X3JldHVybl9jb2RlKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLFxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNzA1LVxcdFxcdFxcdFxcdFxcdFxcdHU2NCByZXNwb25zZSwgdTY0IGRhdGEpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTcxMT1zdGF0aWMgaW5saW5lIHZvaWQgc3ZtX3ZtZ2V4aXRfaW5qZWN0X2V4Y2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdTggdmVjdG9yKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC03MTQtXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo3MTU6XFx0c3ZtX3ZtZ2V4aXRfc2V0X3JldHVybl9jb2RlKHN2bSwgR0hDQl9IVl9SRVNQX0lTU1VFX0VYQ0VQVElPTiwgZGF0YSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC03MTYtfVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD03MTg9c3RhdGljIGlubGluZSB2b2lkIHN2bV92bWdleGl0X2JhZF9pbnB1dChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdTY0IHN1YmVycm9yKVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNzE5LXtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjcyMDpcXHRzdm1fdm1nZXhpdF9zZXRfcmV0dXJuX2NvZGUoc3ZtLCBHSENCX0hWX1JFU1BfTUFMRk9STUVEX0lOUFVULCBzdWJlcnJvcik7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC03MjEtfVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD03MjM9c3RhdGljIGlubGluZSB2b2lkIHN2bV92bWdleGl0X3N1Y2Nlc3Moc3RydWN0IHZjcHVfc3ZtICpzdm0sIHU2NCBkYXRhKVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNzI0LXtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjcyNTpcXHRzdm1fdm1nZXhpdF9zZXRfcmV0dXJuX2NvZGUoc3ZtLCBHSENCX0hWX1JFU1BfTk9fQUNUSU9OLCBkYXRhKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTcyNi19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTcyOD1zdGF0aWMgaW5saW5lIHZvaWQgc3ZtX3ZtZ2V4aXRfbm9fYWN0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCB1NjQgZGF0YSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTcyOS17XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo3MzA6XFx0c3ZtX3ZtZ2V4aXRfc2V0X3JldHVybl9jb2RlKHN2bSwgR0hDQl9IVl9SRVNQX05PX0FDVElPTiwgZGF0YSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC03MzEtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjoxNDozNi4wMTUyMDQyNzJaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM4NjQ1NjI5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzLCBnZWFyZWQgdG93YXJkcyBhbiBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gYHN2bS5oYCAtIExpbmVzIDcwMC03MTAqKlxuXG5Pa2F5LCB0aW1lIHRvIHplcm8gaW4gb24gYSBzcGVjaWZpYyBzZWN0aW9uLiBMZXQncyBwdWxsIHVwIHRoZSBgc3ZtLmhgIGhlYWRlciBmaWxlIGFuZCBoZWFkIGRpcmVjdGx5IHRvIGxpbmVzIDcwMCB0aHJvdWdoIDcxMC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFyb3VuZCB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uIG9yIGRhdGEgc3RydWN0dXJlLiBUaGlzIGlzIGxpa2VseSB3aGVyZSBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBrZXJuZWwgY29tcHV0YXRpb24gaXMgdGFraW5nIHBsYWNlLiBXaGF0IEkgcmVhbGx5IG5lZWQgdG8ga25vdyBpcyB3aGV0aGVyIHRoaXMgc2VjdGlvbiBpcyB0aGUgY3JpdGljYWwgYm90dGxlbmVjaywgYW5kIHRoaXMgaW5mb3JtYXRpb24gbWF5IGhlbHAuIEknbGwgZm9jdXMgb24gdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgY29udHJvbCBmbG93LiBUaGVyZSdzIHByb2JhYmx5IHNvbWV0aGluZyBzdWJ0bGUgSSBuZWVkIHRvIGNhdGNoIGhlcmUgdGhhdCBJIGhhdmVuJ3Qgc2VlbiBkdXJpbmcgbXkgaW5pdGlhbCByZXZpZXcuIFRpbWUgdG8gZ2V0IG15IGhlYWQgaW4gdGhlIGdhbWUgYW5kIHVuZGVyc3RhbmQgdGhlIG51dHMgYW5kIGJvbHRzIG9mIHdoYXQncyBoYXBwZW5pbmcgaW4gdGhpcyBiaXQgb2YgY29kZS4gSSdtIGhvcGluZyBJIGNhbiByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBrZXJuZWwgaXMgaGFuZGxpbmcgdGhpcyBjcml0aWNhbCBwYXJ0IG9mIHRoZSBhbGdvcml0aG0gd2l0aCB0aGlzIGRlZXAgZGl2ZSwgd2hpY2ggaXMgY3JpdGljYWwgdG8gZW5oYW5jaW5nIHRoZSBjdXJyZW50IGRlc2lnbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4MzQsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMjoxNDozOC40MDE2NjI3NzhaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODMzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zdm0uaFwiLFxuICBcIkZpcnN0TGluZVwiOiA3MDAsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MDA6XFx0XFx0ZWxzZVxcbiA3MDE6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA3MDI6XFx0fVxcbiA3MDM6XFx0XFxuIDcwNDpcXHRzdGF0aWMgaW5saW5lIHZvaWQgc3ZtX3ZtZ2V4aXRfc2V0X3JldHVybl9jb2RlKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLFxcbiA3MDU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0dTY0IHJlc3BvbnNlLCB1NjQgZGF0YSlcXG4gNzA2OlxcdHtcXG4gNzA3OlxcdFxcdGdoY2Jfc2V0X3N3X2V4aXRfaW5mb18xKHN2bS1cXHUwMDNlc2V2X2VzLmdoY2IsIHJlc3BvbnNlKTtcXG4gNzA4OlxcdFxcdGdoY2Jfc2V0X3N3X2V4aXRfaW5mb18yKHN2bS1cXHUwMDNlc2V2X2VzLmdoY2IsIGRhdGEpO1xcbiA3MDk6XFx0fVxcbiA3MTA6XFx0XFxuIDcxMTpcXHRzdGF0aWMgaW5saW5lIHZvaWQgc3ZtX3ZtZ2V4aXRfaW5qZWN0X2V4Y2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdTggdmVjdG9yKVxcbiA3MTI6XFx0e1xcbiA3MTM6XFx0XFx0dTY0IGRhdGEgPSBTVk1fRVZUSU5KX1ZBTElEIHwgU1ZNX0VWVElOSl9UWVBFX0VYRVBUIHwgdmVjdG9yO1xcbiA3MTQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIyOjE0OjM4LjQwMTc0NzMyOFoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjEzMzk1MzkwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTi9LQVNBTiBBbmFseXNpcyBvZiBTRVYtU05QIFZNR0VYSVQgRXJyb3IgSGFuZGxpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gbWV0aWN1bG91c2x5LiBUaGlzIHBhdGNoIGZvY3VzZXMgb24gaG93IHdlIGhhbmRsZSBlcnJvcnMgd2l0aGluIHRoZSBLVk0gU0VWLVNOUCBWTUdFWElUIHByb2Nlc3MuIE15IHByaW1hcnkgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IHNhZmV0eSB2dWxuZXJhYmlsaXRpZXMgdGhhdCBLTVNBTiBvciBLQVNBTiB3b3VsZCBmbGFnLlxuXG5GaXJzdCwgSSBleGFtaW5lIHRoZSBjb2RlIGluIGRldGFpbCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBmdW5jdGlvbnMgYHNucF9oYW5kbGVfZ3Vlc3RfcmVxYCBhbmQgYHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcWAuIFRoZSBrZXkgY2hhbmdlcyBhcmUgaW4gaG93IHdlIGRlYWwgd2l0aCBmYWlsdXJlcyBmcm9tIGBrdm1fcmVhZF9ndWVzdGAgYW5kIGBrdm1fd3JpdGVfZ3Vlc3RgIGNhbGxzLiBQcmV2aW91c2x5LCBhIGZhaWx1cmUgcmVzdWx0ZWQgaW4gYSBgLUVJT2AgcmV0dXJuLCB3aGljaCB3b3VsZCBhYm9ydCB0byB0aGUgaG9zdCB1c2Vyc3BhY2UuIE5vdywgdGhlIHBhdGNoIHV0aWxpemVzIGBzdm1fdm1nZXhpdF9iYWRfaW5wdXQoc3ZtLCBHSENCX0VSUl9JTlZBTElEX0lOUFVUKWAgYW5kIHJldHVybnMgMSwgc2lnbmFsaW5nIGludmFsaWQgaW5wdXQgZGlyZWN0bHkgdG8gdGhlIGd1ZXN0IGFjY29yZGluZyB0byB0aGUgR0hDQiBzcGVjaWZpY2F0aW9uLlxuXG5JJ20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGZvdXIga2V5IGFyZWFzOiBcbiogICAqKlVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlOioqIEFyZSB3ZSByZWFkaW5nIG9yIHVzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIHRoaXMgbW9kaWZpZWQgbG9naWM/IFRoZSBjb2RlIHNldHMgYSBjb25zdGFudCBlcnJvciBjb2RlIGludG8gR0hDQiBhbmQgcmV0dXJucywgbm8uXG4qICAgKipVbmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9uOioqIEFyZSB3ZSBhbGxvY2F0aW5nIGFueSBuZXcgYnVmZmVycyB3aXRob3V0IGluaXRpYWxpemluZyB0aGVtPyBJIHNlZSBubyBuZXcgYnVmZmVyIGFsbG9jYXRpb25zLlxuKiAgICoqS2VybmVsIGluZm9ybWF0aW9uIGxlYWtzOioqIEFyZSB3ZSBjb3B5aW5nIGFueSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdGhlIGd1ZXN0IG9yIHVzZXIgc3BhY2U/IFdoZW4gdGhlIGBrdm1fcmVhZF9ndWVzdGAgb3IgYGt2bV93cml0ZV9ndWVzdGAgb3BlcmF0aW9ucyBmYWlsLCB0aGUgcGF0Y2ggc2ltcGx5IHNldHMgdGhlIGVycm9yIGNvZGUgaW4gdGhlIEdIQ0IgYW5kIHJldHVybnMgd2l0aG91dCBjb3B5aW5nIHRoZSBidWZmZXIsIHNvIG5vLlxuKiAgICoqQnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOioqIENvdWxkIHRoZSBuZXcgbG9naWMgYnJhbmNoIGJhc2VkIG9uIGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gdW5leHBlY3RlZCBiZWhhdmlvcj8gSW4gYHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcWAsIGlmIGBrdm1fcmVhZF9ndWVzdGAgZmFpbHMsIHRoZXJlIGlzIGEgYGdvdG8gcmVxdWVzdF9pbnZhbGlkO2AgYW5kIGBtc2dfdHlwZWAgaXMgbmV2ZXIgcmVhZC5cblxuSSdtIGNvbmZpZGVudCB0aGF0IHRoZSBjaGFuZ2VzIGFyZSBzYWZlIGFzIHRoZXkgYXJlIGNvcnJlY3RseSBzaWduYWxsaW5nIGludmFsaWQgaW5wdXQgdG8gdGhlIGd1ZXN0IGFzIGRlc2NyaWJlZCBpbiB0aGUgR0hDQiBzcGVjaWZpY2F0aW9uLlxuXG5JbiBjb25jbHVzaW9uLCB0aGlzIHBhdGNoIGlzIHNvbGVseSB1cGRhdGluZyB0aGUgZXJyb3IgaGFuZGxpbmcgdG8gYWxpZ24gd2l0aCB0aGUgR0hDQiBzcGVjaWZpY2F0aW9uIGFuZCBlbGltaW5hdGVzIHRoZSByaXNrcyBpZGVudGlmaWVkIGFib3ZlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG9mIHRoZSBLTVNBTiBvciBLQVNBTiB2dWxuZXJhYmlsaXRpZXMgSSdtIGxvb2tpbmcgZm9yLiBUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBgZmFsc2VgLiBJIGFtIHNhdGlzZmllZCB3aXRoIHRoaXMgYXNzZXNzbWVudCwgYnV0IEknbGwgZG91YmxlLWNoZWNrIGFsbCB0aGUgZGV0YWlscyBvbmUgbW9yZSB0aW1lIHRvIGJlIGFic29sdXRlbHkgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzODYsIk91dHB1dFRva2VucyI6Mjg1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjY3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMjI6MTQ6NTAuNTM1NzAzNTQzWiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiBLVk0gU0VWLVNOUCBndWVzdCByZXF1ZXN0IGhhbmRsZXJzIChgc25wX2hhbmRsZV9ndWVzdF9yZXFgIGFuZCBgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxYCkuIFNwZWNpZmljYWxseSwgd2hlbiByZWFkaW5nL3dyaXRpbmcvY2xlYXJpbmcgZ3Vlc3QgbWVtb3J5IGZhaWxzIChga3ZtX3JlYWRfZ3Vlc3RgLCBga3ZtX3dyaXRlX2d1ZXN0YCwgb3IgYGt2bV9jbGVhcl9ndWVzdGApLCBpbnN0ZWFkIG9mIHJldHVybmluZyBgLUVJT2AgKHdoaWNoIGNhdXNlZCBLVk0gdG8gZXhpdCB0byBob3N0IHVzZXJzcGFjZSksIEtWTSBub3cgZm9ybWF0cyBhIEdIQ0IgYmFkIGlucHV0IGVycm9yIHJlc3BvbnNlIChgR0hDQl9FUlJfSU5WQUxJRF9JTlBVVGAgdmlhIGBzdm1fdm1nZXhpdF9iYWRfaW5wdXQoKWApIGFuZCByZXN1bWVzIHRoZSBndWVzdCAoYHJldHVybiAxYCkuXFxuXFxuVGhlc2UgY2hhbmdlcyBzb2xlbHkgYWZmZWN0IGVycm9yIHJldHVybiBjb2RlcyBhbmQgY29udHJvbCBmbG93IGZvciBndWVzdCBlcnJvciByZXBvcnRpbmc6XFxuMS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3Igc3RydWN0IHBhZGRpbmcgaXMgY29waWVkIHRvIHVzZXJzcGFjZSBvciB0aGUgZ3Vlc3QuXFxuMi4gSW4gYHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcWAsIGlmIHJlYWRpbmcgYG1zZ190eXBlYCBmYWlscywgY29udHJvbCBqdW1wcyBzdHJhaWdodCB0byBgcmVxdWVzdF9pbnZhbGlkYCwgYXZvaWRpbmcgYW55IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGBtc2dfdHlwZWAuXFxuMy4gTm8gaGVhcC9zdGFjayBhbGxvY2F0aW9ucyBvciBidWZmZXIgc2l6ZS9vZmZzZXQgbWFuaXB1bGF0aW9ucyBhcmUgaW50cm9kdWNlZC5cXG5cXG5BcyB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiBLVk0gU0VWLVNOUCBndWVzdCByZXF1ZXN0IGhhbmRsZXJzIChgc25wX2hhbmRsZV9ndWVzdF9yZXFgIGFuZCBgc25wX2hhbmRsZV9leHRfZ3Vlc3RfcmVxYCkuIFNwZWNpZmljYWxseSwgd2hlbiByZWFkaW5nL3dyaXRpbmcvY2xlYXJpbmcgZ3Vlc3QgbWVtb3J5IGZhaWxzIChga3ZtX3JlYWRfZ3Vlc3RgLCBga3ZtX3dyaXRlX2d1ZXN0YCwgb3IgYGt2bV9jbGVhcl9ndWVzdGApLCBpbnN0ZWFkIG9mIHJldHVybmluZyBgLUVJT2AgKHdoaWNoIGNhdXNlZCBLVk0gdG8gZXhpdCB0byBob3N0IHVzZXJzcGFjZSksIEtWTSBub3cgZm9ybWF0cyBhIEdIQ0IgYmFkIGlucHV0IGVycm9yIHJlc3BvbnNlIChgR0hDQl9FUlJfSU5WQUxJRF9JTlBVVGAgdmlhIGBzdm1fdm1nZXhpdF9iYWRfaW5wdXQoKWApIGFuZCByZXN1bWVzIHRoZSBndWVzdCAoYHJldHVybiAxYCkuXFxuXFxuVGhlc2UgY2hhbmdlcyBzb2xlbHkgYWZmZWN0IGVycm9yIHJldHVybiBjb2RlcyBhbmQgY29udHJvbCBmbG93IGZvciBndWVzdCBlcnJvciByZXBvcnRpbmc6XFxuMS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3Igc3RydWN0IHBhZGRpbmcgaXMgY29waWVkIHRvIHVzZXJzcGFjZSBvciB0aGUgZ3Vlc3QuXFxuMi4gSW4gYHNucF9oYW5kbGVfZXh0X2d1ZXN0X3JlcWAsIGlmIHJlYWRpbmcgYG1zZ190eXBlYCBmYWlscywgY29udHJvbCBqdW1wcyBzdHJhaWdodCB0byBgcmVxdWVzdF9pbnZhbGlkYCwgYXZvaWRpbmcgYW55IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGBtc2dfdHlwZWAuXFxuMy4gTm8gaGVhcC9zdGFjayBhbGxvY2F0aW9ucyBvciBidWZmZXIgc2l6ZS9vZmZzZXQgbWFuaXB1bGF0aW9ucyBhcmUgaW50cm9kdWNlZC5cXG5cXG5BcyB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvs68w[1] Phase: Succeeded StartedAt: 2026-09-10 22:15:01 +0000 UTC FinishedAt: 2026-09-10 22:15:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvs68w[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-10 22:15:01 +0000 UTC FinishedAt: 2026-09-10 22:15:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvs68w[2] Phase: Succeeded StartedAt: 2026-09-10 22:15:01 +0000 UTC FinishedAt: 2026-09-10 23:25:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvs68w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/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":["snp_handle_guest_req","snp_handle_ext_guest_req","sev_handle_vmgexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"e1aa4c5a-1130-4ea0-acf5-4261ab59168e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-10 22:15:01 +0000 UTC FinishedAt: 2026-09-10 23:25:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/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":["snp_handle_guest_req","snp_handle_ext_guest_req","sev_handle_vmgexit"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"e1aa4c5a-1130-4ea0-acf5-4261ab59168e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowvs68w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/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":["snp_handle_guest_req","snp_handle_ext_guest_req","sev_handle_vmgexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"e1aa4c5a-1130-4ea0-acf5-4261ab59168e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-10 22:15:01 +0000 UTC FinishedAt: 2026-09-10 22:15:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvs68w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/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":["snp_handle_guest_req","snp_handle_ext_guest_req","sev_handle_vmgexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"e1aa4c5a-1130-4ea0-acf5-4261ab59168e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-10 22:15:01 +0000 UTC FinishedAt: 2026-09-10 22:15:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/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-workflowvs68w/series-workflowvs68w-convert-artifact-224345702/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvs68w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/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":["snp_handle_guest_req","snp_handle_ext_guest_req","sev_handle_vmgexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"e1aa4c5a-1130-4ea0-acf5-4261ab59168e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-10 22:15:11 +0000 UTC FinishedAt: 2026-09-10 22:31:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvs68w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/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":["snp_handle_guest_req","snp_handle_ext_guest_req","sev_handle_vmgexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"e1aa4c5a-1130-4ea0-acf5-4261ab59168e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-10 22:15:11 +0000 UTC FinishedAt: 2026-09-10 22:31:08 +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:*fddad2dd-ee46-4a0e-9cea-9e7c7891ded7,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-workflowvs68w/series-workflowvs68w-convert-artifact-224345702/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": "a43a9246-5bd5-4507-a9bc-ab9d40d355d7", "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-workflowvs68w/series-workflowvs68w-build-action-3848265212/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvs68w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/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":["snp_handle_guest_req","snp_handle_ext_guest_req","sev_handle_vmgexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"e1aa4c5a-1130-4ea0-acf5-4261ab59168e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-10 22:15:11 +0000 UTC FinishedAt: 2026-09-10 22:30:58 +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:*fddad2dd-ee46-4a0e-9cea-9e7c7891ded7,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-workflowvs68w/series-workflowvs68w-convert-artifact-224345702/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": "a43a9246-5bd5-4507-a9bc-ab9d40d355d7", "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-workflowvs68w/series-workflowvs68w-build-action-3848265212/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvs68w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/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":["snp_handle_guest_req","snp_handle_ext_guest_req","sev_handle_vmgexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"e1aa4c5a-1130-4ea0-acf5-4261ab59168e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-10 22:31:08 +0000 UTC FinishedAt: 2026-09-10 22:31:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvs68w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/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":["snp_handle_guest_req","snp_handle_ext_guest_req","sev_handle_vmgexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"e1aa4c5a-1130-4ea0-acf5-4261ab59168e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-10 22:31:08 +0000 UTC FinishedAt: 2026-09-10 22:31:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvs68w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/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":["snp_handle_guest_req","snp_handle_ext_guest_req","sev_handle_vmgexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"e1aa4c5a-1130-4ea0-acf5-4261ab59168e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-10 22:31:08 +0000 UTC FinishedAt: 2026-09-10 22:31:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvs68w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/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":["snp_handle_guest_req","snp_handle_ext_guest_req","sev_handle_vmgexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"e1aa4c5a-1130-4ea0-acf5-4261ab59168e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-10 22:31:08 +0000 UTC FinishedAt: 2026-09-10 22:31:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"e1aa4c5a-1130-4ea0-acf5-4261ab59168e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/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-workflowvs68w/series-workflowvs68w-convert-artifact-840741561/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvs68w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/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":["snp_handle_guest_req","snp_handle_ext_guest_req","sev_handle_vmgexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"e1aa4c5a-1130-4ea0-acf5-4261ab59168e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-10 22:31:18 +0000 UTC FinishedAt: 2026-09-10 22:33:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvs68w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/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":["snp_handle_guest_req","snp_handle_ext_guest_req","sev_handle_vmgexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"e1aa4c5a-1130-4ea0-acf5-4261ab59168e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-10 22:31:18 +0000 UTC FinishedAt: 2026-09-10 22:33:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a43a9246-5bd5-4507-a9bc-ab9d40d355d7,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-workflowvs68w/series-workflowvs68w-build-action-3848265212/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-workflowvs68w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/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":["snp_handle_guest_req","snp_handle_ext_guest_req","sev_handle_vmgexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"e1aa4c5a-1130-4ea0-acf5-4261ab59168e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-10 22:33:12 +0000 UTC FinishedAt: 2026-09-10 22:33:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvs68w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/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":["snp_handle_guest_req","snp_handle_ext_guest_req","sev_handle_vmgexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"e1aa4c5a-1130-4ea0-acf5-4261ab59168e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-10 22:33:12 +0000 UTC FinishedAt: 2026-09-10 22:33:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvs68w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/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":["snp_handle_guest_req","snp_handle_ext_guest_req","sev_handle_vmgexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"e1aa4c5a-1130-4ea0-acf5-4261ab59168e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-10 22:33:12 +0000 UTC FinishedAt: 2026-09-10 22:50:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvs68w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/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":["snp_handle_guest_req","snp_handle_ext_guest_req","sev_handle_vmgexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"e1aa4c5a-1130-4ea0-acf5-4261ab59168e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-10 22:33:12 +0000 UTC FinishedAt: 2026-09-10 22:50:35 +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:*fddad2dd-ee46-4a0e-9cea-9e7c7891ded7,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-workflowvs68w/series-workflowvs68w-convert-artifact-840741561/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": "7a53577f-939d-4643-aa88-43ae3765db5a", "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-workflowvs68w/series-workflowvs68w-build-action-4141386645/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvs68w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/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":["snp_handle_guest_req","snp_handle_ext_guest_req","sev_handle_vmgexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"e1aa4c5a-1130-4ea0-acf5-4261ab59168e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-10 22:33:12 +0000 UTC FinishedAt: 2026-09-10 22:50:25 +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:*fddad2dd-ee46-4a0e-9cea-9e7c7891ded7,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-workflowvs68w/series-workflowvs68w-convert-artifact-840741561/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": "7a53577f-939d-4643-aa88-43ae3765db5a", "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-workflowvs68w/series-workflowvs68w-build-action-4141386645/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvs68w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/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":["snp_handle_guest_req","snp_handle_ext_guest_req","sev_handle_vmgexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"e1aa4c5a-1130-4ea0-acf5-4261ab59168e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-10 22:50:35 +0000 UTC FinishedAt: 2026-09-10 22:50:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvs68w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/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":["snp_handle_guest_req","snp_handle_ext_guest_req","sev_handle_vmgexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"e1aa4c5a-1130-4ea0-acf5-4261ab59168e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-10 22:50:35 +0000 UTC FinishedAt: 2026-09-10 22:50:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvs68w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/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":["snp_handle_guest_req","snp_handle_ext_guest_req","sev_handle_vmgexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"e1aa4c5a-1130-4ea0-acf5-4261ab59168e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-10 22:50:35 +0000 UTC FinishedAt: 2026-09-10 22:52:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvs68w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/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":["snp_handle_guest_req","snp_handle_ext_guest_req","sev_handle_vmgexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"e1aa4c5a-1130-4ea0-acf5-4261ab59168e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-10 22:50:35 +0000 UTC FinishedAt: 2026-09-10 22:52:28 +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:*7a53577f-939d-4643-aa88-43ae3765db5a,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-workflowvs68w/series-workflowvs68w-build-action-4141386645/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-workflowvs68w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/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":["snp_handle_guest_req","snp_handle_ext_guest_req","sev_handle_vmgexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"e1aa4c5a-1130-4ea0-acf5-4261ab59168e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-10 22:52:38 +0000 UTC FinishedAt: 2026-09-10 23:25:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvs68w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/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":["snp_handle_guest_req","snp_handle_ext_guest_req","sev_handle_vmgexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"e1aa4c5a-1130-4ea0-acf5-4261ab59168e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-10 22:52:38 +0000 UTC FinishedAt: 2026-09-10 23:25:44 +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":["snp_handle_guest_req","snp_handle_ext_guest_req","sev_handle_vmgexit"],"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:*a43a9246-5bd5-4507-a9bc-ab9d40d355d7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7a53577f-939d-4643-aa88-43ae3765db5a,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-workflowvs68w/series-workflowvs68w-build-action-3848265212/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-workflowvs68w/series-workflowvs68w-build-action-4141386645/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowvs68w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/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":["snp_handle_guest_req","snp_handle_ext_guest_req","sev_handle_vmgexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"e1aa4c5a-1130-4ea0-acf5-4261ab59168e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-10 22:52:38 +0000 UTC FinishedAt: 2026-09-10 22:52:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvs68w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/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":["snp_handle_guest_req","snp_handle_ext_guest_req","sev_handle_vmgexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"e1aa4c5a-1130-4ea0-acf5-4261ab59168e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-10 22:52:38 +0000 UTC FinishedAt: 2026-09-10 22:52:45 +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":["snp_handle_guest_req","snp_handle_ext_guest_req","sev_handle_vmgexit"],"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-workflowvs68w/series-workflowvs68w-convert-artifact-1746328622/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvs68w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/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":["snp_handle_guest_req","snp_handle_ext_guest_req","sev_handle_vmgexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"e1aa4c5a-1130-4ea0-acf5-4261ab59168e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-10 22:52:38 +0000 UTC FinishedAt: 2026-09-10 22:52:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvs68w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/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":["snp_handle_guest_req","snp_handle_ext_guest_req","sev_handle_vmgexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"e1aa4c5a-1130-4ea0-acf5-4261ab59168e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-10 22:52:38 +0000 UTC FinishedAt: 2026-09-10 22:52:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvs68w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/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":["snp_handle_guest_req","snp_handle_ext_guest_req","sev_handle_vmgexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"e1aa4c5a-1130-4ea0-acf5-4261ab59168e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-10 22:52:38 +0000 UTC FinishedAt: 2026-09-10 22:52:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvs68w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/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":["snp_handle_guest_req","snp_handle_ext_guest_req","sev_handle_vmgexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"e1aa4c5a-1130-4ea0-acf5-4261ab59168e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-10 22:52:58 +0000 UTC FinishedAt: 2026-09-10 23:25:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvs68w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/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":["snp_handle_guest_req","snp_handle_ext_guest_req","sev_handle_vmgexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50d05c7c76c96b90462f24debacca971d2e86713","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU"],"series_id":"e1aa4c5a-1130-4ea0-acf5-4261ab59168e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-10 22:52:58 +0000 UTC FinishedAt: 2026-09-10 23:25:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a43a9246-5bd5-4507-a9bc-ab9d40d355d7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7a53577f-939d-4643-aa88-43ae3765db5a,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-workflowvs68w/series-workflowvs68w-build-action-3848265212/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-workflowvs68w/series-workflowvs68w-build-action-4141386645/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-workflowvs68w/series-workflowvs68w-convert-artifact-1746328622/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,}