Name: series-workflowvd7bt Phase: Succeeded StartedAt: 2026-09-11 16:02:48 +0000 UTC FinishedAt: 2026-09-11 21:05:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvd7bt[0] Phase: Succeeded StartedAt: 2026-09-11 16:02:48 +0000 UTC FinishedAt: 2026-09-11 17:19:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvd7bt[0].run-triage Phase: Succeeded StartedAt: 2026-09-11 16:02:48 +0000 UTC FinishedAt: 2026-09-11 17:19:24 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "78445023439506ebd83b86d40b1e428a3b309d4a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "BRIDGE_VLAN_FILTERING", "VLAN_8021Q", "NET_SWITCHDEV" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "78445023439506ebd83b86d40b1e428a3b309d4a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "BRIDGE_VLAN_FILTERING", "VLAN_8021Q", "NET_SWITCHDEV" ], "series_id": "90b7f8e7-7e7a-4caa-9d43-c9cb9d55529f" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "br_mst_set_state", "br_mst_process", "br_mst_set_enabled", "br_set_state" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "78445023439506ebd83b86d40b1e428a3b309d4a", "base_tree": "net" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE3OjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtCUklER0VfVkxBTl9GSUxURVJJTkcmIzM0OywKICAgICYjMzQ7VkxBTl84MDIxUSYjMzQ7LAogICAgJiMzNDtORVRfU1dJVENIREVWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJfbXN0X3NldF9zdGF0ZSYjMzQ7LAogICAgJiMzNDticl9tc3RfcHJvY2VzcyYjMzQ7LAogICAgJiMzNDticl9tc3Rfc2V0X2VuYWJsZWQmIzM0OywKICAgICYjMzQ7YnJfc2V0X3N0YXRlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBzbGVlcC1pbi1hdG9taWMgYnVnIGluIGBicl9tc3Rfc2V0X3N0YXRlKClgIGJ5IG1vdmluZyBgc3dpdGNoZGV2X3BvcnRfYXR0cl9zZXQoKWAgKHdoaWNoIG1heSBzbGVlcCkgb3V0c2lkZSBvZiB0aGUgYHJjdV9yZWFkX2xvY2soKWAgY3JpdGljYWwgc2VjdGlvbiwgYWRkaW5nIGBBU1NFUlRfUlROTCgpYCwgYW5kIG9ubHkgYWNxdWlyaW5nIGByY3VfcmVhZF9sb2NrKClgIHdoZW4gcmVhZGluZyB0aGUgVkxBTiBncm91cCBhbmQgaXRlcmF0aW5nIG92ZXIgdGhlIFZMQU4gbGlzdC5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcywgZG9lcyBub3QgYWZmZWN0IGJ1ZmZlciBib3VuZHMgb3IgY29weSBsZW5ndGhzLCBhbmQgZG9lcyBub3QgYWx0ZXIgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gU2xlZXBpbmcgd2hpbGUgaG9sZGluZyBhbiBSQ1UgcmVhZCBsb2NrIGlzIGRldGVjdGVkIGJ5IHN0YW5kYXJkIGRlYnVnIGNvbmZpZ3VyYXRpb25zIChgQ09ORklHX0RFQlVHX0FUT01JQ19TTEVFUGAgLyBgbWlnaHRfc2xlZXAoKWApLCBhbmQgbG9jayBpbnZhcmlhbnRzIGFyZSB2ZXJpZmllZCBieSBgQVNTRVJUX1JUTkwoKWAgLyBgTE9DS0RFUGAuIEJlY2F1c2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBpbiBgYnJfbXN0X3NldF9zdGF0ZSgpYCB3aXRoaW4gdGhlIEV0aGVybmV0IGJyaWRnZSBNU1QgaW1wbGVtZW50YXRpb246IGl0IG1vdmVzIGEgcG90ZW50aWFsbHkgc2xlZXBpbmcgc3dpdGNoZGV2IGNhbGwgb3V0c2lkZSBvZiB0aGUgYHJjdV9yZWFkX2xvY2soKWAgY3JpdGljYWwgc2VjdGlvbiBhbmQgYWRkcyBhbiBgQVNTRVJUX1JUTkwoKWAgaW52YXJpYW50IGNoZWNrLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGFjY2Vzc2libGUgdmlhIG5ldGxpbmsgYW5kIGJyaWRnZSBTVFAgY29uZmlndXJhdGlvbiBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTc6MTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4MGE1MDg0ZDAwMjZhODY1OGYzNTA2Y2Q5MjU3NjFlYWEzZjk2NWVkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMTc6MTY6MDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9tc3QuYyBiL25ldC9icmlkZ2UvYnJfbXN0LmNcbmluZGV4IDQzYTMwMGFlNmJmYWYuLjE2NTRlZmQzMDQ1YjAgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX21zdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvYnJpZGdlL2JyX21zdC5jXG5AQCAtMTA3LDIxICYjNDM7MTA3LDI0IEBAIGludCBicl9tc3Rfc2V0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHUxNiBtc3RpLCB1OCBzdGF0ZSxcbiBcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnY7XG4gXHRpbnQgZXJyID0gMDtcbiBcbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cdHZnID0gbmJwX3ZsYW5fZ3JvdXBfcmN1KHApO1xuLVx0aWYgKCF2Zylcbi1cdFx0Z290byBvdXQ7XG4tXG4gXHQvKiBNU1RJIDAgKENTVCkgc3RhdGUgY2hhbmdlcyBhcmUgbm90aWZpZWQgdmlhIHRoZSByZWd1bGFyXG4tXHQgKiBTV0lUQ0hERVZfQVRUUl9JRF9QT1JUX1NUUF9TVEFURS5cbiYjNDM7XHQgKiBTV0lUQ0hERVZfQVRUUl9JRF9QT1JUX1NUUF9TVEFURS4gQWxsIG90aGVyIE1TVElzIGFyZSBoYW5kbGVkIHZpYVxuJiM0MztcdCAqIG5ldGxpbmsgd2l0aCBSVE5MIGhlbGRcbiBcdCAqL1xuIFx0aWYgKG1zdGkpIHtcbiYjNDM7XHRcdEFTU0VSVF9SVE5MKCk7XG4mIzQzO1xuIFx0XHRlcnIgPSBzd2l0Y2hkZXZfcG9ydF9hdHRyX3NldChwLVx1MDAzZWRldiwgXHUwMDI2YXR0ciwgZXh0YWNrKTtcbiBcdFx0aWYgKGVyciBcdTAwMjZcdTAwMjYgZXJyICE9IC1FT1BOT1RTVVBQKVxuIFx0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0ZXJyID0gMDtcbiBcdH1cbiBcbi1cdGVyciA9IDA7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdHZnID0gbmJwX3ZsYW5fZ3JvdXBfcmN1KHApO1xuJiM0MztcdGlmICghdmcpXG4mIzQzO1x0XHRnb3RvIG91dF9yY3VfdW5sb2NrO1xuJiM0MztcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHYsIFx1MDAyNnZnLVx1MDAzZXZsYW5fbGlzdCwgdmxpc3QpIHtcbiBcdFx0aWYgKHYtXHUwMDNlYnJ2bGFuLVx1MDAzZW1zdGkgIT0gbXN0aSlcbiBcdFx0XHRjb250aW51ZTtcbkBAIC0xMjksOCAmIzQzOzEzMiw5IEBAIGludCBicl9tc3Rfc2V0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHUxNiBtc3RpLCB1OCBzdGF0ZSxcbiBcdFx0YnJfbXN0X3ZsYW5fc2V0X3N0YXRlKHZnLCB2LCBzdGF0ZSk7XG4gXHR9XG4gXG4tb3V0OlxuJiM0MztvdXRfcmN1X3VubG9jazpcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztvdXQ6XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNzoxNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUklER0UmIzM0OywKICAgICYjMzQ7QlJJREdFX1ZMQU5fRklMVEVSSU5HJiMzNDssCiAgICAmIzM0O1ZMQU5fODAyMVEmIzM0OywKICAgICYjMzQ7TkVUX1NXSVRDSERFViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JyX21zdF9zZXRfc3RhdGUmIzM0OywKICAgICYjMzQ7YnJfbXN0X3Byb2Nlc3MmIzM0OywKICAgICYjMzQ7YnJfbXN0X3NldF9lbmFibGVkJiMzNDssCiAgICAmIzM0O2JyX3NldF9zdGF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBsb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24gaW4gYGJyX21zdF9zZXRfc3RhdGUoKWAgd2l0aGluIHRoZSBFdGhlcm5ldCBicmlkZ2UgTVNUIGltcGxlbWVudGF0aW9uOiBpdCBtb3ZlcyBhIHBvdGVudGlhbGx5IHNsZWVwaW5nIHN3aXRjaGRldiBjYWxsIG91dHNpZGUgb2YgdGhlIGByY3VfcmVhZF9sb2NrKClgIGNyaXRpY2FsIHNlY3Rpb24gYW5kIGFkZHMgYW4gYEFTU0VSVF9SVE5MKClgIGludmFyaWFudCBjaGVjay4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rIGFuZCBicmlkZ2UgU1RQIGNvbmZpZ3VyYXRpb24gaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODBhNTA4NGQwMDI2YTg2NThmMzUwNmNkOTI1NzYxZWFhM2Y5NjVlZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDE3OjE2OjA2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9tc3QuYyBiL25ldC9icmlkZ2UvYnJfbXN0LmMKaW5kZXggNDNhMzAwYWU2YmZhZi4uMTY1NGVmZDMwNDViMCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9tc3QuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYnJpZGdlL2JyX21zdC5jCkBAIC0xMDcsMjEgJiM0MzsxMDcsMjQgQEAgaW50IGJyX21zdF9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IG1zdGksIHU4IHN0YXRlLAogCXN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnY7CiAJaW50IGVyciA9IDA7CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JdmcgPSBuYnBfdmxhbl9ncm91cF9yY3UocCk7Ci0JaWYgKCF2ZykKLQkJZ290byBvdXQ7Ci0KIAkvKiBNU1RJIDAgKENTVCkgc3RhdGUgY2hhbmdlcyBhcmUgbm90aWZpZWQgdmlhIHRoZSByZWd1bGFyCi0JICogU1dJVENIREVWX0FUVFJfSURfUE9SVF9TVFBfU1RBVEUuCiYjNDM7CSAqIFNXSVRDSERFVl9BVFRSX0lEX1BPUlRfU1RQX1NUQVRFLiBBbGwgb3RoZXIgTVNUSXMgYXJlIGhhbmRsZWQgdmlhCiYjNDM7CSAqIG5ldGxpbmsgd2l0aCBSVE5MIGhlbGQKIAkgKi8KIAlpZiAobXN0aSkgewomIzQzOwkJQVNTRVJUX1JUTkwoKTsKJiM0MzsKIAkJZXJyID0gc3dpdGNoZGV2X3BvcnRfYXR0cl9zZXQocC0mZ3Q7ZGV2LCAmYW1wO2F0dHIsIGV4dGFjayk7CiAJCWlmIChlcnIgJmFtcDsmYW1wOyBlcnIgIT0gLUVPUE5PVFNVUFApCiAJCQlnb3RvIG91dDsKJiM0MzsJCWVyciA9IDA7CiAJfQogCi0JZXJyID0gMDsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwl2ZyA9IG5icF92bGFuX2dyb3VwX3JjdShwKTsKJiM0MzsJaWYgKCF2ZykKJiM0MzsJCWdvdG8gb3V0X3JjdV91bmxvY2s7CiYjNDM7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodiwgJmFtcDt2Zy0mZ3Q7dmxhbl9saXN0LCB2bGlzdCkgewogCQlpZiAodi0mZ3Q7YnJ2bGFuLSZndDttc3RpICE9IG1zdGkpCiAJCQljb250aW51ZTsKQEAgLTEyOSw4ICYjNDM7MTMyLDkgQEAgaW50IGJyX21zdF9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IG1zdGksIHU4IHN0YXRlLAogCQlicl9tc3Rfdmxhbl9zZXRfc3RhdGUodmcsIHYsIHN0YXRlKTsKIAl9CiAKLW91dDoKJiM0MztvdXRfcmN1X3VubG9jazoKIAlyY3VfcmVhZF91bmxvY2soKTsKJiM0MztvdXQ6CiAJcmV0dXJuIGVycjsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjI2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIHN5emthbGxlciBQYXRjaCBmb3IgQU1ENjQgQXJjaGl0ZWN0dXJlKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBzeXprYWxsZXIgcGF0Y2guIFRoZSB1c2VyIHdhbnRzIG1lIHRvIGV2YWx1YXRlIGl0LCBmb2N1c2luZyBvbiB0aGUgYGFtZDY0YCBhcmNoaXRlY3R1cmUuIFRoZSB0YXJnZXQgZmlsZSBpcyBgbmV0L2JyaWRnZS9icl9tc3QuY2AsIHNwZWNpZmljYWxseSB0aGUgYGJyX21zdF9zZXRfc3RhdGVgIGZ1bmN0aW9uLgoKTG9va2luZyBhdCB0aGUgZGlmZiwgdGhlIG1haW4gY2hhbmdlIHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gaG93IE1TVElzIChNdWx0aXBsZSBTcGFubmluZyBUcmVlIEluc3RhbmNlcykgYXJlIGhhbmRsZWQuICBUaGUgY29kZSBub3cgZXhwbGljaXRseSBub3RlcyB0aGF0IGNoYW5nZXMgdG8gTVNUSSAwIGFyZSBoYW5kbGVkIGRpZmZlcmVudGx5IHZpYSBgU1dJVENIREVWX0FUVFJfSURfUE9SVF9TVFBfU1RBVEVgLCB3aGljaCBpcyBleHBlY3RlZCwgd2hpbGUgb3RoZXIgTVNUSXMgcmVxdWlyZSBuZXRsaW5rIGNvbW11bmljYXRpb24gd2l0aCBSVE5MIGhlbGQuIEEgZ29vZCBhZGRpdGlvbiBpcyB0aGUgYEFTU0VSVF9SVE5MKClgIGNhbGwgd2l0aGluIHRoZSBgaWYgKG1zdGkpYCBibG9jay4gVGhpcyBpcyBhIHZlcnkgd2VsY29tZSBzYW5pdHkgY2hlY2suIEl0IGNsZWFybHkgaW5kaWNhdGVzIHRoYXQgdGhlIGNvZGUgZXhwZWN0cyB0aGUgUlROTCBsb2NrIHRvIGJlIGhlbGQgZm9yIG5vbi1DU1QgTVNUSSBzdGF0ZSBjaGFuZ2VzLCB3aGljaCBpcyBjcnVjaWFsIGZvciBzeW5jaHJvbml6YXRpb24uCgpUaGUgcGF0Y2ggYWxzbyBzZWVtcyB0byByZW9yZGVyIGEgbGl0dGxlLiBUaGUgYHJjdV9yZWFkX2xvY2tgIGFuZCBgcmN1X3JlYWRfdW5sb2NrYCBjYWxscyBoYXZlIGJlZW4gbW92ZWQgYXJvdW5kLiBUaGV5IG5vdyBicmFja2V0IHRoZSBWTEFOIGxpc3QgdHJhdmVyc2FsLiBMb29rcyBnb29kIHRvIG1lLCBhcyB0aGlzIGlzIHRoZSBzdGFuZGFyZCBwYXR0ZXJuLiBXZSBlbnN1cmUgdGhhdCB3ZSByZWxlYXNlIHRoZSBSQ1UgbG9jaywgaW4gY2FzZSBvZiBhbiBlcnJvciwgd2hpY2ggaXMgdGhlIGRlc2lyZWQgYmVoYXZpb3IgYW5kIHByZXZlbnRzIHBvdGVudGlhbCBpc3N1ZXMuIFRoZSBgZ290b2AgbGFiZWxzIGhhdmUgYmVlbiB1cGRhdGVkIHRvIHJlZmxlY3QgdGhlIFJDVSBjaGFuZ2VzIHRvby4KCkkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCB0aGUgY29tbWl0IG1lc3NhZ2UgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGVzZSBjaGFuZ2VzIGFuZCBlbnN1cmUgdGhpcyBpcyBhIGNvcnJlY3QgYW5kIHNhZmUgYXBwcm9hY2guIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHRvb2xzIHRvIGRvIHNvLiBPdmVyYWxsLCB0aG91Z2gsIHRoZSBwYXRjaCBzZWVtcyByZWFzb25hYmxlIGFuZCBhZGRyZXNzZXMgYSBzcGVjaWZpYyBudWFuY2UgaW4gTVNUIGhhbmRsaW5nLiBJJiMzOTtsbCBmbGFnIHRoZSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIFJUTkwgbG9jayBhbmQgdGhlIHRpbWluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbXN0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDkwOlx0XHRcdGJyX3ZsYW5fc2V0X3B2aWRfc3RhdGUodmcsIHN0YXRlKTtcbiAgOTE6XHRcbiAgOTI6XHRcdGJyX3ZsYW5fc2V0X3N0YXRlKHYsIHN0YXRlKTtcbiAgOTM6XHR9XG4gIDk0Olx0XG4gIDk1Olx0aW50IGJyX21zdF9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IG1zdGksIHU4IHN0YXRlLFxuICA5NjpcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiAgOTc6XHR7XG4gIDk4Olx0XHRzdHJ1Y3Qgc3dpdGNoZGV2X2F0dHIgYXR0ciA9IHtcbiAgOTk6XHRcdFx0LmlkID0gU1dJVENIREVWX0FUVFJfSURfUE9SVF9NU1RfU1RBVEUsXG4gMTAwOlx0XHRcdC5vcmlnX2RldiA9IHAtXHUwMDNlZGV2LFxuIDEwMTpcdFx0XHQudS5tc3Rfc3RhdGUgPSB7XG4gMTAyOlx0XHRcdFx0Lm1zdGkgPSBtc3RpLFxuIDEwMzpcdFx0XHRcdC5zdGF0ZSA9IHN0YXRlLFxuIDEwNDpcdFx0XHR9LFxuIDEwNTpcdFx0fTtcbiAxMDY6XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnO1xuIDEwNzpcdFx0c3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdjtcbiAxMDg6XHRcdGludCBlcnIgPSAwO1xuIDEwOTpcdFxuIDExMDpcdFx0LyogTVNUSSAwIChDU1QpIHN0YXRlIGNoYW5nZXMgYXJlIG5vdGlmaWVkIHZpYSB0aGUgcmVndWxhclxuIDExMTpcdFx0ICogU1dJVENIREVWX0FUVFJfSURfUE9SVF9TVFBfU1RBVEUuIEFsbCBvdGhlciBNU1RJcyBhcmUgaGFuZGxlZCB2aWFcbiAxMTI6XHRcdCAqIG5ldGxpbmsgd2l0aCBSVE5MIGhlbGRcbiAxMTM6XHRcdCAqL1xuIDExNDpcdFx0aWYgKG1zdGkpIHtcbiAxMTU6XHRcdFx0QVNTRVJUX1JUTkwoKTtcbiAxMTY6XHRcbiAxMTc6XHRcdFx0ZXJyID0gc3dpdGNoZGV2X3BvcnRfYXR0cl9zZXQocC1cdTAwM2VkZXYsIFx1MDAyNmF0dHIsIGV4dGFjayk7XG4gMTE4Olx0XHRcdGlmIChlcnIgXHUwMDI2XHUwMDI2IGVyciAhPSAtRU9QTk9UU1VQUClcbiAxMTk6XHRcdFx0XHRnb3RvIG91dDtcbiAxMjA6XHRcdFx0ZXJyID0gMDtcbiAxMjE6XHRcdH1cbiAxMjI6XHRcbiAxMjM6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiAxMjQ6XHRcdHZnID0gbmJwX3ZsYW5fZ3JvdXBfcmN1KHApO1xuIDEyNTpcdFx0aWYgKCF2ZylcbiAxMjY6XHRcdFx0Z290byBvdXRfcmN1X3VubG9jaztcbiAxMjc6XHRcbiAxMjg6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHYsIFx1MDAyNnZnLVx1MDAzZXZsYW5fbGlzdCwgdmxpc3QpIHtcbiAxMjk6XHRcdFx0aWYgKHYtXHUwMDNlYnJ2bGFuLVx1MDAzZW1zdGkgIT0gbXN0aSlcbiAxMzA6XHRcdFx0XHRjb250aW51ZTtcbiAxMzE6XHRcbiAxMzI6XHRcdFx0YnJfbXN0X3ZsYW5fc2V0X3N0YXRlKHZnLCB2LCBzdGF0ZSk7XG4gMTMzOlx0XHR9XG4gMTM0Olx0XG4gMTM1Olx0b3V0X3JjdV91bmxvY2s6XG4gMTM2Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAxMzc6XHRvdXQ6XG4gMTM4Olx0XHRyZXR1cm4gZXJyO1xuIDEzOTpcdH1cbiAxNDA6XHRcbiAxNDE6XHRzdGF0aWMgdm9pZCBicl9tc3Rfdmxhbl9zeW5jX3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnB2LCB1MTYgbXN0aSlcbiAxNDI6XHR7XG4gMTQzOlx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZyA9IG5icF92bGFuX2dyb3VwKHB2LVx1MDAzZXBvcnQpO1xuIDE0NDpcdFx0c3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdjtcbiAxNDU6XHRcbiAxNDY6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkodiwgXHUwMDI2dmctXHUwMDNldmxhbl9saXN0LCB2bGlzdCkge1xuIDE0NzpcdFx0XHQvKiBJZiB0aGlzIHBvcnQgYWxyZWFkeSBoYXMgYSBkZWZpbmVkIHN0YXRlIGluIHRoaXNcbiAxNDg6XHRcdFx0ICogTVNUSSAodGhyb3VnaCBzb21lIG90aGVyIFZMQU4gbWVtYmVyc2hpcCksIGluaGVyaXRcbiAxNDk6XHRcdFx0ICogaXQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTc6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTEwOAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYGJyX21zdF9zZXRfc3RhdGVgIENhbGxlcnMgYW5kIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgYnJfbXN0X3NldF9zdGF0ZWAgaXMgYmVpbmcgdXNlZC4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGwgc2l0ZXMuIFRoYXTigJlzIHRoZSBtb3N0IGVmZmljaWVudCBzdGFydGluZyBwb2ludC4gSSB3YW50IHRvIHNlZSB3aGljaCBvdGhlciBtb2R1bGVzIG9yIGZ1bmN0aW9ucyBkZXBlbmQgb24gaXQgYW5kIHdoYXQgYXJndW1lbnRzIHRoZXkgYXJlIHBhc3NpbmcuIFRoaXMgd2lsbCBpbW1lZGlhdGVseSBjbHVlIG1lIGludG8gdGhlIHNjZW5hcmlvcyB0aGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGZvci4KCkZyb20gdGhlcmUsIEkmIzM5O2xsIGRyaWxsIGRvd24gb24gdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4gR2l2ZW4gdGhlIGZ1bmN0aW9uJiMzOTtzIG5hbWUgYW5kIGdlbmVyYWwgcHVycG9zZSwgSSBhbnRpY2lwYXRlIGl0JiMzOTtsbCBiZSBoZWF2aWx5IGluZmx1ZW5jZWQgYnkgTVNUIChNdWx0aXBsZSBTcGFubmluZyBUcmVlKSBzZXR1cC4gQnV0IEkgYWxzbyBleHBlY3QgaXQgbWF5IGRlcGVuZCBvbiB0aGUgYnJpZGdlIGNvbmZpZ3VyYXRpb24gYXMgYSB3aG9sZS4gV2hhdCBmbGFncyBhcmUgc2V0LCB3aGljaCBWTEFOcyBhcmUgaW52b2x2ZWQ/IEnigJlsbCBuZWVkIHRvIGFuYWx5emUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIHdoaWNoIGNvbmZpZyBwYXJhbWV0ZXJzIGFyZSBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVuY3Rpb24mIzM5O3Mgb3BlcmF0aW9uYWwgY29udGV4dC4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIHdoYXQgdGhlIGZ1bmN0aW9uIGV4cGVjdHMgYW5kIGhvdyB0aGUgc3RhdGUgaXMgYmVpbmcgbWFuYWdlZCBleHRlcm5hbGx5LCBvciBpZiB0aGUgZnVuY3Rpb24gaXMgY29udHJvbGxpbmcgdGhhdCBzdGF0ZSBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaW4gcGxheS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIHRlbGxzIG1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE3OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyX21zdF9zZXRfc3RhdGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9tc3QuYz04Mj1zdGF0aWMgdm9pZCBicl9tc3Rfdmxhbl9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcsXG4tLVxubmV0L2JyaWRnZS9icl9tc3QuYy05NC1cbm5ldC9icmlkZ2UvYnJfbXN0LmM6OTU6aW50IGJyX21zdF9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IG1zdGksIHU4IHN0YXRlLFxubmV0L2JyaWRnZS9icl9tc3QuYy05Ni1cdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2JyaWRnZS9icl9tc3QuYz0zMDg9c3RhdGljIGludCBicl9tc3RfcHJvY2Vzc19vbmUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcbi0tXG5uZXQvYnJpZGdlL2JyX21zdC5jLTMzNC1cbm5ldC9icmlkZ2UvYnJfbXN0LmM6MzM1Olx0cmV0dXJuIGJyX21zdF9zZXRfc3RhdGUocCwgbXN0aSwgc3RhdGUsIGV4dGFjayk7XG5uZXQvYnJpZGdlL2JyX21zdC5jLTMzNi19XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTk1MD1zdGF0aWMgaW5saW5lIGJvb2wgYnJfbXN0X2lzX2VuYWJsZWQoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcClcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTU3LVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTk1ODppbnQgYnJfbXN0X3NldF9zdGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCB1MTYgbXN0aSwgdTggc3RhdGUsXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTU5LVx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTk3MT1zdGF0aWMgaW5saW5lIGJvb2wgYnJfbXN0X2lzX2VuYWJsZWQoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcClcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTc1LVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTk3NjpzdGF0aWMgaW5saW5lIGludCBicl9tc3Rfc2V0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHUxNiBtc3RpLFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk3Ny1cdFx0XHRcdCAgIHU4IHN0YXRlLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2JyaWRnZS9icl9zdHAuYz0yOT12b2lkIGJyX3NldF9zdGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCB1bnNpZ25lZCBpbnQgc3RhdGUpXG4tLVxubmV0L2JyaWRnZS9icl9zdHAuYy00Ni1cdGlmIChicl9vcHRfZ2V0KHAtXHUwMDNlYnIsIEJST1BUX01TVF9FTkFCTEVEKSkge1xubmV0L2JyaWRnZS9icl9zdHAuYzo0NzpcdFx0ZXJyID0gYnJfbXN0X3NldF9zdGF0ZShwLCAwLCBzdGF0ZSwgTlVMTCk7XG5uZXQvYnJpZGdlL2JyX3N0cC5jLTQ4LVx0XHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE3OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwMzYKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA0MjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTVFAgU3RhdGUgQ2hhbmdlIGluIE5ldHdvcmsgQnJpZGdlIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcmVjZW50IHBhdGNoIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBhIGtleSBjaGFuZ2UuIFByZXZpb3VzbHksIHdlIGhhZCBgc3dpdGNoZGV2X3BvcnRfYXR0cl9zZXQocC0mZ3Q7ZGV2LCAmYW1wO2F0dHIsIGV4dGFjaylgIHJ1bm5pbmcgd2l0aGluIGFuIGByY3VfcmVhZF9sb2NrKClgIGJsb2NrLiBUaGF0JiMzOTtzIGEgcmVkIGZsYWchIGBzd2l0Y2hkZXZfcG9ydF9hdHRyX3NldGAgY2FuIHBvdGVudGlhbGx5IHNsZWVwLCB0cmlnZ2VyIGRyaXZlciBjYWxsYmFja3MsIG9yIGRvIGFsbCBzb3J0cyBvZiB0aGluZ3MgdGhhdCBhcmUgaW5jb21wYXRpYmxlIHdpdGggaG9sZGluZyBhbiBSQ1UgcmVhZCBsb2NrLiBUaGUgb2xkIGNvZGUgd2FzOgoKYGBgYwotCXJjdV9yZWFkX2xvY2soKTsKLQl2ZyA9IG5icF92bGFuX2dyb3VwX3JjdShwKTsKLQlpZiAoIXZnKQotCQlnb3RvIG91dDsKYGBgCgpBbmQgbm93IGxvb2tzIGxpa2UgdGhpczoKCmBgYGMKIAkvKiBNU1RJIDAgKENTVCkgc3RhdGUgY2hhbmdlcyBhcmUgbm90aWZpZWQgdmlhIHRoZSByZWd1bGFyCi0JICogU1dJVENIREVWX0FUVFJfSURfUE9SVF9TVFBfU1RBVEUuCiYjNDM7CSAqIFNXSVRDSERFVl9BVFRSX0lEX1BPUlRfU1RQX1NUQVRFLiBBbGwgb3RoZXIgTVNUSXMgYXJlIGhhbmRsZWQgdmlhCiYjNDM7CSAqIG5ldGxpbmsgd2l0aCBSVE5MIGhlbGQKIAkgKi8KIAlpZiAobXN0aSkgewomIzQzOwkJQVNTRVJUX1JUTkwoKTsKJiM0MzsKIAkJZXJyID0gc3dpdGNoZGV2X3BvcnRfYXR0cl9zZXQocC0mZ3Q7ZGV2LCAmYW1wO2F0dHIsIGV4dGFjayk7CiAJCWlmIChlcnIgJmFtcDsmYW1wOyBlcnIgIT0gLUVPUE5PVFNVUFApCiAJCQlnb3RvIG91dDsKJiM0MzsJCWVyciA9IDA7CiAJfQpgYGAKClRoZSBwYXRjaCBjbGVhcmx5IGFkZHJlc3NlcyB0aGlzIGJ5IG1vdmluZyB0aGUgY2FsbCBvdXRzaWRlIHRoZSBSQ1UgcmVhZCBsb2NrIGFuZCwgY3J1Y2lhbGx5LCBhZGRpbmcgYW4gYEFTU0VSVF9SVE5MKClgIGNoZWNrLiBBaGEhIFRoaXMgaXMgaW50ZXJlc3RpbmcuIFRoaXMgYEFTU0VSVF9SVE5MKClgIGNhbGwgaXMgZXF1aXZhbGVudCB0byBgUlROTF9XQVJOX1VOTE9DS0VEKClgLiAgVGhlIGNvbW1lbnQgaW4gdGhlIHBhdGNoIGlzIGFsc28gc2lnbmlmaWNhbnQuICBJdCByZW1pbmRzIHVzIHRoYXQgKmFueSogbmV3IGFzc2VydGlvbiwgb3IgbW9kaWZpY2F0aW9uIHRvIG9uZSwgdGhhdCYjMzk7cyBpbiBhIHJlYWNoYWJsZSBjb2RlIHBhdGggbmVlZHMgdG8gYmUgdGhvcm91Z2hseSBmdXp6ZWQuIFRoYXQgbWVhbnMgd2UmIzM5O3JlIGVuZm9yY2luZyBhIG5ldyBpbnZhcmlhbnQ6IHdlICptdXN0KiBob2xkIHRoZSBSVE5MIGR1cmluZyB0aGlzIHBvcnRpb24gb2YgdGhlIGNvZGUgd2hlbiBoYW5kbGluZyBNU1RJcyBvdGhlciB0aGFuIE1TVEkgMCwgc28gZnV6emluZyBpcyBnb2luZyB0byBiZSBpbXBvcnRhbnQgdG8gdmVyaWZ5IHRoZSBSVE5MIGlzIGFsd2F5cyBoZWxkIHVuZGVyIGFsbCBjaXJjdW1zdGFuY2VzLiBJIHNob3VsZCBjaGVjayBob3cgYGJyX21zdC5jYCBpcyBjb21waWxlZCBhbmQgd2hhdCBLY29uZmlnIG9wdGlvbnMgYXJlIGludm9sdmVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTc6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJfbXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL01ha2VmaWxlPTIxPWJyaWRnZS0kKENPTkZJR19CUklER0VfSUdNUF9TTk9PUElORykgJiM0Mzs9IGJyX211bHRpY2FzdC5vIGJyX21kYi5vIGJyX211bHRpY2FzdF9laHQub1xubmV0L2JyaWRnZS9NYWtlZmlsZS0yMi1cbm5ldC9icmlkZ2UvTWFrZWZpbGU6MjM6YnJpZGdlLSQoQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklORykgJiM0Mzs9IGJyX3ZsYW4ubyBicl92bGFuX3R1bm5lbC5vIGJyX3ZsYW5fb3B0aW9ucy5vIGJyX21zdC5vXG5uZXQvYnJpZGdlL01ha2VmaWxlLTI0LVxuLS1cbm5ldC9icmlkZ2UvYnIuYz0yOTQ9aW50IGJyX2Jvb2xvcHRfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgZW51bSBicl9ib29sb3B0X2lkIG9wdCwgYm9vbCBvbixcbi0tXG5uZXQvYnJpZGdlL2JyLmMtMzA2LVx0Y2FzZSBCUl9CT09MT1BUX01TVF9FTkFCTEU6XG5uZXQvYnJpZGdlL2JyLmM6MzA3Olx0XHRlcnIgPSBicl9tc3Rfc2V0X2VuYWJsZWQoYnIsIG9uLCBleHRhY2spO1xubmV0L2JyaWRnZS9ici5jLTMwOC1cdFx0YnJlYWs7XG4tLVxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmM9MjE9c3RhdGljIGlubGluZSBpbnQgc2hvdWxkX2RlbGl2ZXIoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcbi0tXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0yNy1cdHJldHVybiAodGVzdF9iaXQoQlJfSEFJUlBJTl9NT0RFX0JJVCwgXHUwMDI2cC1cdTAwM2VmbGFncykgfHwgc2tiLVx1MDAzZWRldiAhPSBwLVx1MDAzZWRldikgXHUwMDI2XHUwMDI2XG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYzoyODpcdFx0KGJyX21zdF9pc19lbmFibGVkKHApIHx8IHAtXHUwMDNlc3RhdGUgPT0gQlJfU1RBVEVfRk9SV0FSRElORykgXHUwMDI2XHUwMDI2XG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0yOS1cdFx0YnJfYWxsb3dlZF9lZ3Jlc3ModmcsIHNrYikgXHUwMDI2XHUwMDI2IG5icF9zd2l0Y2hkZXZfYWxsb3dlZF9lZ3Jlc3MocCwgc2tiKSBcdTAwMjZcdTAwMjZcbi0tXG5uZXQvYnJpZGdlL2JyX2lmLmM9MzgxPXZvaWQgYnJfZGV2X2RlbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuLS1cbm5ldC9icmlkZ2UvYnJfaWYuYy0zODktXG5uZXQvYnJpZGdlL2JyX2lmLmM6MzkwOlx0YnJfbXN0X3VuaW5pdChicik7XG5uZXQvYnJpZGdlL2JyX2lmLmMtMzkxLVx0YnJfcmVjYWxjdWxhdGVfbmVpZ2hfc3VwcHJlc3NfZW5hYmxlZChicik7XG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTc2PWludCBicl9oYW5kbGVfZnJhbWVfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy05Ni1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo5NzpcdGlmIChicl9tc3RfaXNfZW5hYmxlZChwKSkge1xubmV0L2JyaWRnZS9icl9pbnB1dC5jLTk4LVx0XHRzdGF0ZSA9IEJSX1NUQVRFX0ZPUldBUkRJTkc7XG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTM0Nz1zdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBicl9oYW5kbGVfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy00NDAtZm9yd2FyZDpcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo0NDE6XHRpZiAoYnJfbXN0X2lzX2VuYWJsZWQocCkpXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNDQyLVx0XHRnb3RvIGRlZmVyX3N0cF9maWx0ZXJpbmc7XG4tLVxubmV0L2JyaWRnZS9icl9tc3QuYy0xMy1cbm5ldC9icmlkZ2UvYnJfbXN0LmM6MTQ6REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoYnJfbXN0X3VzZWQpO1xubmV0L2JyaWRnZS9icl9tc3QuYy0xNS1cbm5ldC9icmlkZ2UvYnJfbXN0LmM6MTY6Ym9vbCBicl9tc3RfZW5hYmxlZChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2JyaWRnZS9icl9tc3QuYy0xNy17XG4tLVxubmV0L2JyaWRnZS9icl9tc3QuYy0yMi19XG5uZXQvYnJpZGdlL2JyX21zdC5jOjIzOkVYUE9SVF9TWU1CT0xfR1BMKGJyX21zdF9lbmFibGVkKTtcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMjQtXG5uZXQvYnJpZGdlL2JyX21zdC5jOjI1OnZvaWQgYnJfbXN0X3VuaW5pdChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXG5uZXQvYnJpZGdlL2JyX21zdC5jLTI2LXtcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMjctXHRpZiAoYnJfb3B0X2dldChiciwgQlJPUFRfTVNUX0VOQUJMRUQpKVxubmV0L2JyaWRnZS9icl9tc3QuYzoyODpcdFx0c3RhdGljX2JyYW5jaF9kZWMoXHUwMDI2YnJfbXN0X3VzZWQpO1xubmV0L2JyaWRnZS9icl9tc3QuYy0yOS19XG5uZXQvYnJpZGdlL2JyX21zdC5jLTMwLVxubmV0L2JyaWRnZS9icl9tc3QuYzozMTppbnQgYnJfbXN0X2dldF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBtc3RpLCB1bnNpZ25lZCBsb25nICp2aWRzKVxubmV0L2JyaWRnZS9icl9tc3QuYy0zMi17XG4tLVxubmV0L2JyaWRnZS9icl9tc3QuYy01NC19XG5uZXQvYnJpZGdlL2JyX21zdC5jOjU1OkVYUE9SVF9TWU1CT0xfR1BMKGJyX21zdF9nZXRfaW5mbyk7XG5uZXQvYnJpZGdlL2JyX21zdC5jLTU2LVxubmV0L2JyaWRnZS9icl9tc3QuYzo1NzppbnQgYnJfbXN0X2dldF9zdGF0ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgbXN0aSwgdTggKnN0YXRlKVxubmV0L2JyaWRnZS9icl9tc3QuYy01OC17XG4tLVxubmV0L2JyaWRnZS9icl9tc3QuYy03OS19XG5uZXQvYnJpZGdlL2JyX21zdC5jOjgwOkVYUE9SVF9TWU1CT0xfR1BMKGJyX21zdF9nZXRfc3RhdGUpO1xubmV0L2JyaWRnZS9icl9tc3QuYy04MS1cbm5ldC9icmlkZ2UvYnJfbXN0LmM6ODI6c3RhdGljIHZvaWQgYnJfbXN0X3ZsYW5fc2V0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnLFxubmV0L2JyaWRnZS9icl9tc3QuYy04My1cdFx0XHRcdCAgc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdixcbi0tXG5uZXQvYnJpZGdlL2JyX21zdC5jLTk0LVxubmV0L2JyaWRnZS9icl9tc3QuYzo5NTppbnQgYnJfbXN0X3NldF9zdGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCB1MTYgbXN0aSwgdTggc3RhdGUsXG5uZXQvYnJpZGdlL2JyX21zdC5jLTk2LVx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvYnJpZGdlL2JyX21zdC5jLTEzMS1cbm5ldC9icmlkZ2UvYnJfbXN0LmM6MTMyOlx0XHRicl9tc3Rfdmxhbl9zZXRfc3RhdGUodmcsIHYsIHN0YXRlKTtcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMTMzLVx0fVxuLS1cbm5ldC9icmlkZ2UvYnJfbXN0LmMtMTQwLVxubmV0L2JyaWRnZS9icl9tc3QuYzoxNDE6c3RhdGljIHZvaWQgYnJfbXN0X3ZsYW5fc3luY19zdGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICpwdiwgdTE2IG1zdGkpXG5uZXQvYnJpZGdlL2JyX21zdC5jLTE0Mi17XG4tLVxubmV0L2JyaWRnZS9icl9tc3QuYy0xNTEtXHRcdGlmICh2ICE9IHB2IFx1MDAyNlx1MDAyNiB2LVx1MDAzZWJydmxhbi1cdTAwM2Vtc3RpID09IG1zdGkpIHtcbm5ldC9icmlkZ2UvYnJfbXN0LmM6MTUyOlx0XHRcdGJyX21zdF92bGFuX3NldF9zdGF0ZSh2ZywgcHYsIHYtXHUwMDNlc3RhdGUpO1xubmV0L2JyaWRnZS9icl9tc3QuYy0xNTMtXHRcdFx0cmV0dXJuO1xuLS1cbm5ldC9icmlkZ2UvYnJfbXN0LmMtMTU3LVx0LyogT3RoZXJ3aXNlLCBzdGFydCBvdXQgaW4gYSBuZXcgTVNUSSB3aXRoIGFsbCBwb3J0cyBkaXNhYmxlZC4gKi9cbm5ldC9icmlkZ2UvYnJfbXN0LmM6MTU4Olx0cmV0dXJuIGJyX21zdF92bGFuX3NldF9zdGF0ZSh2ZywgcHYsIEJSX1NUQVRFX0RJU0FCTEVEKTtcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMTU5LX1cbm5ldC9icmlkZ2UvYnJfbXN0LmMtMTYwLVxubmV0L2JyaWRnZS9icl9tc3QuYzoxNjE6aW50IGJyX21zdF92bGFuX3NldF9tc3RpKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKm12LCB1MTYgbXN0aSlcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMTYyLXtcbi0tXG5uZXQvYnJpZGdlL2JyX21zdC5jLTE4OS1cdFx0aWYgKHB2KVxubmV0L2JyaWRnZS9icl9tc3QuYzoxOTA6XHRcdFx0YnJfbXN0X3ZsYW5fc3luY19zdGF0ZShwdiwgbXN0aSk7XG5uZXQvYnJpZGdlL2JyX21zdC5jLTE5MS1cdH1cbi0tXG5uZXQvYnJpZGdlL2JyX21zdC5jLTE5NS1cbm5ldC9icmlkZ2UvYnJfbXN0LmM6MTk2OnZvaWQgYnJfbXN0X3ZsYW5faW5pdF9zdGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2KVxubmV0L2JyaWRnZS9icl9tc3QuYy0xOTcte1xuLS1cbm5ldC9icmlkZ2UvYnJfbXN0LmMtMjA2LVxubmV0L2JyaWRnZS9icl9tc3QuYzoyMDc6aW50IGJyX21zdF9zZXRfZW5hYmxlZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXG5uZXQvYnJpZGdlL2JyX21zdC5jLTIwOC1cdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvYnJpZGdlL2JyX21zdC5jLTIzNy1cdGlmIChvbilcbm5ldC9icmlkZ2UvYnJfbXN0LmM6MjM4Olx0XHRzdGF0aWNfYnJhbmNoX2luYyhcdTAwMjZicl9tc3RfdXNlZCk7XG5uZXQvYnJpZGdlL2JyX21zdC5jLTIzOS1cdGVsc2Vcbm5ldC9icmlkZ2UvYnJfbXN0LmM6MjQwOlx0XHRzdGF0aWNfYnJhbmNoX2RlYyhcdTAwMjZicl9tc3RfdXNlZCk7XG5uZXQvYnJpZGdlL2JyX21zdC5jLTI0MS1cbi0tXG5uZXQvYnJpZGdlL2JyX21zdC5jLTI0NS1cbm5ldC9icmlkZ2UvYnJfbXN0LmM6MjQ2OnNpemVfdCBicl9tc3RfaW5mb19zaXplKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnKVxubmV0L2JyaWRnZS9icl9tc3QuYy0yNDcte1xuLS1cbm5ldC9icmlkZ2UvYnJfbXN0LmMtMjcxLVxubmV0L2JyaWRnZS9icl9tc3QuYzoyNzI6aW50IGJyX21zdF9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMjczLVx0XHQgICAgIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXN0LmMtMjk4LVxubmV0L2JyaWRnZS9icl9tc3QuYzoyOTk6c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGJyX21zdF9ubF9wb2xpY3lbSUZMQV9CUklER0VfTVNUX0VOVFJZX01BWCAmIzQzOyAxXSA9IHtcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMzAwLVx0W0lGTEFfQlJJREdFX01TVF9FTlRSWV9NU1RJXSA9IE5MQV9QT0xJQ1lfUkFOR0UoTkxBX1UxNixcbi0tXG5uZXQvYnJpZGdlL2JyX21zdC5jLTMwNy1cbm5ldC9icmlkZ2UvYnJfbXN0LmM6MzA4OnN0YXRpYyBpbnQgYnJfbXN0X3Byb2Nlc3Nfb25lKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG5uZXQvYnJpZGdlL2JyX21zdC5jLTMwOS1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXN0LmMtMzE3LVx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgSUZMQV9CUklER0VfTVNUX0VOVFJZX01BWCwgYXR0cixcbm5ldC9icmlkZ2UvYnJfbXN0LmM6MzE4Olx0XHRcdCAgICAgICBicl9tc3RfbmxfcG9saWN5LCBleHRhY2spO1xubmV0L2JyaWRnZS9icl9tc3QuYy0zMTktXHRpZiAoZXJyKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXN0LmMtMzM0LVxubmV0L2JyaWRnZS9icl9tc3QuYzozMzU6XHRyZXR1cm4gYnJfbXN0X3NldF9zdGF0ZShwLCBtc3RpLCBzdGF0ZSwgZXh0YWNrKTtcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMzM2LX1cbm5ldC9icmlkZ2UvYnJfbXN0LmMtMzM3LVxubmV0L2JyaWRnZS9icl9tc3QuYzozMzg6aW50IGJyX21zdF9wcm9jZXNzKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIGNvbnN0IHN0cnVjdCBubGF0dHIgKm1zdF9hdHRyLFxubmV0L2JyaWRnZS9icl9tc3QuYy0zMzktXHRcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvYnJpZGdlL2JyX21zdC5jLTM1Mi1cdFx0Y2FzZSBJRkxBX0JSSURHRV9NU1RfRU5UUlk6XG5uZXQvYnJpZGdlL2JyX21zdC5jOjM1MzpcdFx0XHRlcnIgPSBicl9tc3RfcHJvY2Vzc19vbmUocCwgYXR0ciwgZXh0YWNrKTtcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMzU0LVx0XHRcdGJyZWFrO1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jPTkzPXN0YXRpYyBzaXplX3QgYnJfZ2V0X2xpbmtfYWZfc2l6ZV9maWx0ZXJlZChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTEyMi1cdGlmIChwIFx1MDAyNlx1MDAyNiB2ZyBcdTAwMjZcdTAwMjYgKGZpbHRlcl9tYXNrIFx1MDAyNiBSVEVYVF9GSUxURVJfTVNUKSlcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjEyMzpcdFx0dmluZm9fc3ogJiM0Mzs9IGJyX21zdF9pbmZvX3NpemUodmcpO1xubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTI0LVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jPTQ1OD1zdGF0aWMgaW50IGJyX2ZpbGxfaWZpbmZvKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtNjA2LVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6NjA3Olx0XHRlcnIgPSBicl9tc3RfZmlsbF9pbmZvKHNrYiwgdmcpO1xubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtNjA4LVx0XHRpZiAoZXJyKVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jPTgwOT1zdGF0aWMgaW50IGJyX2Fmc3BlYyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtODcwLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6ODcxOlx0XHRcdGVyciA9IGJyX21zdF9wcm9jZXNzKHAsIGF0dHIsIGV4dGFjayk7XG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy04NzItXHRcdFx0aWYgKGVycilcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xOTM0PXN0YXRpYyBpbmxpbmUgYm9vbCBicl92bGFuX3N0YXRlX2FsbG93ZWQodTggc3RhdGUsIGJvb2wgbGVhcm5fYWxsb3cpXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk0Ni1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE5NDc6LyogYnJfbXN0LmMgKi9cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NDgtI2lmZGVmIENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE5NDk6REVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKGJyX21zdF91c2VkKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE5NTA6c3RhdGljIGlubGluZSBib29sIGJyX21zdF9pc19lbmFibGVkKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTUxLXtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NTItXHQvKiBjaGVjayB0aGUgcG9ydCYjMzk7cyB2bGFuIGdyb3VwIHRvIGF2b2lkIHJhY2luZyB3aXRoIHBvcnQgZGVsZXRpb24gKi9cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE5NTM6XHRyZXR1cm4gc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZicl9tc3RfdXNlZCkgXHUwMDI2XHUwMDI2XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTU0LVx0ICAgICAgIGJyX29wdF9nZXQocC1cdTAwM2ViciwgQlJPUFRfTVNUX0VOQUJMRUQpIFx1MDAyNlx1MDAyNlxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NTctXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTU4OmludCBicl9tc3Rfc2V0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHUxNiBtc3RpLCB1OCBzdGF0ZSxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NTktXHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE5NjA6aW50IGJyX21zdF92bGFuX3NldF9tc3RpKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHUxNiBtc3RpKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE5NjE6dm9pZCBicl9tc3Rfdmxhbl9pbml0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYpO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTk2MjppbnQgYnJfbXN0X3NldF9lbmFibGVkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NjMtXHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTk2NDpzaXplX3QgYnJfbXN0X2luZm9fc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2Zyk7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTY1OmludCBicl9tc3RfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTY2LVx0XHQgICAgIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE5Njc6aW50IGJyX21zdF9wcm9jZXNzKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIGNvbnN0IHN0cnVjdCBubGF0dHIgKm1zdF9hdHRyLFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk2OC1cdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE5Njk6dm9pZCBicl9tc3RfdW5pbml0KHN0cnVjdCBuZXRfYnJpZGdlICpicik7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTcwLSNlbHNlXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTcxOnN0YXRpYyBpbmxpbmUgYm9vbCBicl9tc3RfaXNfZW5hYmxlZChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk3Mi17XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk3NS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE5NzY6c3RhdGljIGlubGluZSBpbnQgYnJfbXN0X3NldF9zdGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCB1MTYgbXN0aSxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NzctXHRcdFx0XHQgICB1OCBzdGF0ZSwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5ODEtXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTgyOnN0YXRpYyBpbmxpbmUgaW50IGJyX21zdF9zZXRfZW5hYmxlZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTgzLVx0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk4Ny1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE5ODg6c3RhdGljIGlubGluZSBzaXplX3QgYnJfbXN0X2luZm9fc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2Zylcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5ODkte1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5OTItXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTkzOnN0YXRpYyBpbmxpbmUgaW50IGJyX21zdF9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5OTQtXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2Zylcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTk4LVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTk5OTpzdGF0aWMgaW5saW5lIGludCBicl9tc3RfcHJvY2VzcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMjAwMC1cdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmxhdHRyICptc3RfYXR0cixcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0yMDA1LVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MjAwNjpzdGF0aWMgaW5saW5lIHZvaWQgYnJfbXN0X3VuaW5pdChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0yMDA3LXtcbi0tXG5uZXQvYnJpZGdlL2JyX3N0cC5jPTI5PXZvaWQgYnJfc2V0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHVuc2lnbmVkIGludCBzdGF0ZSlcbi0tXG5uZXQvYnJpZGdlL2JyX3N0cC5jLTQ2LVx0aWYgKGJyX29wdF9nZXQocC1cdTAwM2ViciwgQlJPUFRfTVNUX0VOQUJMRUQpKSB7XG5uZXQvYnJpZGdlL2JyX3N0cC5jOjQ3Olx0XHRlcnIgPSBicl9tc3Rfc2V0X3N0YXRlKHAsIDAsIHN0YXRlLCBOVUxMKTtcbm5ldC9icmlkZ2UvYnJfc3RwLmMtNDgtXHRcdGlmIChlcnIpXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9MjM0PXN0YXRpYyB2b2lkIGJyX3ZsYW5faW5pdF9zdGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2KVxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTI0My1cdGlmIChicl9vcHRfZ2V0KGJyLCBCUk9QVF9NU1RfRU5BQkxFRCkpIHtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjI0NDpcdFx0YnJfbXN0X3ZsYW5faW5pdF9zdGF0ZSh2KTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTI0NS1cdFx0cmV0dXJuO1xuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmM9NTUwPXN0YXRpYyBpbnQgYnJfdmxhbl9wcm9jZXNzX2dsb2JhbF9vbmVfb3B0cyhjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYy02NTctXHRcdG1zdGkgPSBubGFfZ2V0X3UxNih0YltCUklER0VfVkxBTkRCX0dPUFRTX01TVEldKTtcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmM6NjU4Olx0XHRlcnIgPSBicl9tc3Rfdmxhbl9zZXRfbXN0aSh2LCBtc3RpKTtcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmMtNjU5LVx0XHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE3OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODA3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBhIGZpcnN0LXBlcnNvbiBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBCcmlkZ2UgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIEtjb25maWcgZmlsZXMgcmVsYXRlZCB0byB0aGUgYnJpZGdpbmcgZnVuY3Rpb25hbGl0eS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGZvY3VzaW5nIG9uICYjMzQ7QlJJREdFJiMzNDsgYW5kICYjMzQ7QlJJREdFX1ZMQU5fRklMVEVSSU5HLiYjMzQ7IFVuZGVyc3RhbmRpbmcgdGhlc2UgY29uZmlndXJhdGlvbnMgaXMgY3J1Y2lhbCBmb3IgZmluZS10dW5pbmcgdGhlIGJyaWRnaW5nIGltcGxlbWVudGF0aW9uLiBJIGtub3cgdGhleSYjMzk7cmUgcHJvYmFibHkgaW50ZXJjb25uZWN0ZWQsIGFuZCBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBvcHRpb25zIGFyZSBwcmVzZW50ZWQgdG8gdGhlIGVuZC11c2VyLiBJIGV4cGVjdCB0byBiZSBhYmxlIHRvIGlkZW50aWZ5IGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRoZW0sIGFuZCB0byBsb29rIGF0IHRoZSBoZWxwIHRleHQgYW5kIGRlZmF1bHQgdmFsdWVzIHRvIHVuZGVyc3RhbmQgdGhlaXIgaW50ZW5kZWQgdXNlIGFuZCBpbXBhY3Qgb24gdGhlIG92ZXJhbGwgY29uZmlndXJhdGlvbi4gVGhpcyBpcyBrZXkgdG8gZW5zdXJpbmcgdGhlIGJyaWRnZSBiZWhhdmVzIGFzIGV4cGVjdGVkLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aG9zZSBvcHRpb25zIGFyZSBzdHJ1Y3R1cmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlJJREdFX1ZMQU5fRklMVEVSSU5HJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL0tjb25maWc9MzY9Y29uZmlnIEJSSURHRV9JR01QX1NOT09QSU5HXG4tLVxubmV0L2JyaWRnZS9LY29uZmlnLTQ5LVxubmV0L2JyaWRnZS9LY29uZmlnOjUwOmNvbmZpZyBCUklER0VfVkxBTl9GSUxURVJJTkdcbm5ldC9icmlkZ2UvS2NvbmZpZy01MS1cdGJvb2wgXCYjMzQ7VkxBTiBmaWx0ZXJpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTc6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxMDkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyB0aGUgQnJpZGdlIENvbmZpZ3VyYXRpb24gRmlsZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgbmV0L2JyaWRnZS9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNTAuIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCYjMzk7cyB3aGVyZSBzb21lIG9mIHRoZSBjb3JlIGJyaWRnZSBmdW5jdGlvbmFsaXR5IG9wdGlvbnMgYXJlIGRlZmluZWQuIEkmIzM5O20gbGlrZWx5IGFmdGVyIHRoZSBib29sZWFuIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWFuYWdlIHRoZSBicmlkZ2UgaXRzZWxmLCBvciBwb3RlbnRpYWxseSB0aGUgcGFyYW1ldGVycyBvZiBhIGJyaWRnZSBwb3J0LiBJIHdhbnQgdG8gYXNzZXNzIHRoZSBjb25maWd1cmFiaWxpdHkgb2YgdGhlIGZlYXR1cmVzIGFuZCB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBhdCBjb21waWxlIHRpbWUuIFBlcmhhcHMgSSYjMzk7bSBsb29raW5nIHRvIHVuZGVyc3RhbmQgaG93IGEgc3BlY2lmaWMgZmVhdHVyZSBpcyBlbmFibGVkIG9yIGRpc2FibGVkLCBvciBtYXliZSBJJiMzOTttIHRyeWluZyB0byBkaWFnbm9zZSBhIGJ1aWxkIGlzc3VlIHJlbGF0ZWQgdG8gYnJpZGdpbmcuIEhvcGVmdWxseSwgdGhlIEtjb25maWcgZW50cmllcyBhcmUgd2VsbC1kb2N1bWVudGVkLCBtYWtpbmcgdGhpcyBhbmFseXNpcyByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZC4gSSYjMzk7bSBwcmVwYXJpbmcgbXlzZWxmIHRvIHBhcnNlIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhlbHAgc3RyaW5ncyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZSBvZiBhbnkgcGFydGljdWxhciBvcHRpb24gSSYjMzk7bSBpbnRlcmVzdGVkIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNDU6XHRcbiAgNDY6XHRcdCAgU2F5IE4gdG8gZXhjbHVkZSB0aGlzIHN1cHBvcnQgYW5kIHJlZHVjZSB0aGUgYmluYXJ5IHNpemUuXG4gIDQ3Olx0XG4gIDQ4Olx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gIDQ5Olx0XG4gIDUwOlx0Y29uZmlnIEJSSURHRV9WTEFOX0ZJTFRFUklOR1xuICA1MTpcdFx0Ym9vbCBcJiMzNDtWTEFOIGZpbHRlcmluZ1wmIzM0O1xuICA1MjpcdFx0ZGVwZW5kcyBvbiBCUklER0VcbiAgNTM6XHRcdGRlcGVuZHMgb24gVkxBTl84MDIxUVxuICA1NDpcdFx0ZGVmYXVsdCBuXG4gIDU1Olx0XHRoZWxwXG4gIDU2Olx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHRoZSBFdGhlcm5ldCBicmlkZ2Ugd2lsbCBiZSBhYmxlIHNlbGVjdGl2ZWx5XG4gIDU3Olx0XHQgIHJlY2VpdmUgYW5kIGZvcndhcmQgdHJhZmZpYyBiYXNlZCBvbiBWTEFOIGluZm9ybWF0aW9uIGluIHRoZSBwYWNrZXRcbiAgNTg6XHRcdCAgYW55IFZMQU4gaW5mb3JtYXRpb24gY29uZmlndXJlZCBvbiB0aGUgYnJpZGdlIHBvcnQgb3IgYnJpZGdlIGRldmljZS5cbiAgNTk6XHRcbiAgNjA6XHRcdCAgU2F5IE4gdG8gZXhjbHVkZSB0aGlzIHN1cHBvcnQgYW5kIHJlZHVjZSB0aGUgYmluYXJ5IHNpemUuXG4gIDYxOlx0XG4gIDYyOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gIDYzOlx0XG4gIDY0Olx0Y29uZmlnIEJSSURHRV9NUlBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTc6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1OTQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOgoKKipEZXBlbmRlbmNpZXMgYW5kIFN3aXRjaGRldiBJbnRlZ3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYEJSSURHRV9WTEFOX0ZJTFRFUklOR2AuIEl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGl0IGhhcyBkZXBlbmRlbmNpZXMgb24gYEJSSURHRWAgYW5kIGBWTEFOXzgwMjFRYCDigJMgdGhhdCYjMzk7cyBleHBlY3RlZC4gTm93LCB3aGF0JiMzOTtzIG5hZ2dpbmcgbWUgaXMgdGhlIHN3aXRjaGRldiBpbnZvbHZlbWVudC4gSSYjMzk7bSBzZWVpbmcgYHN3aXRjaGRldl9wb3J0X2F0dHJfc2V0YCBiZWluZyB1c2VkLCBhbmQgdGhhdCBtYWtlcyBtZSB3b25kZXIgaWYgYE5FVF9TV0lUQ0hERVZgIGlzIGEgKmhhcmQqIHJlcXVpcmVtZW50IGhlcmUuIEkgbmVlZCB0byBjbGFyaWZ5IHRoYXQuIFJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBjb2Rl4oCmIEkmIzM5O2xsIGhlYWQgb3ZlciB0byBgaW5jbHVkZS9uZXQvc3dpdGNoZGV2LmhgIGFuZCBjaGVjayB3aGVyZSBgc3dpdGNoZGV2X3BvcnRfYXR0cl9zZXRgIGlzIGFjdHVhbGx5IGRlZmluZWQuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGRlZmluaXRpdmUgYW5zd2VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzd2l0Y2hkZXZfcG9ydF9hdHRyX3NldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3N3aXRjaGRldi5oPTMwOD12b2lkIHN3aXRjaGRldl9kZWZlcnJlZF9wcm9jZXNzKHZvaWQpO1xuaW5jbHVkZS9uZXQvc3dpdGNoZGV2Lmg6MzA5OmludCBzd2l0Y2hkZXZfcG9ydF9hdHRyX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuaW5jbHVkZS9uZXQvc3dpdGNoZGV2LmgtMzEwLVx0XHRcdCAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoZGV2X2F0dHIgKmF0dHIsXG4tLVxuaW5jbHVkZS9uZXQvc3dpdGNoZGV2Lmg9Mzk2PXN0YXRpYyBpbmxpbmUgdm9pZCBzd2l0Y2hkZXZfZGVmZXJyZWRfcHJvY2Vzcyh2b2lkKVxuLS1cbmluY2x1ZGUvbmV0L3N3aXRjaGRldi5oLTM5OS1cbmluY2x1ZGUvbmV0L3N3aXRjaGRldi5oOjQwMDpzdGF0aWMgaW5saW5lIGludCBzd2l0Y2hkZXZfcG9ydF9hdHRyX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuaW5jbHVkZS9uZXQvc3dpdGNoZGV2LmgtNDAxLVx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfYXR0ciAqYXR0cixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTc6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwNzkKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgTkVUX1NXSVRDSERFVmAgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYE5FVF9TV0lUQ0hERVZgLiBSaWdodCwgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBkZWZpbmVkIGluIGBuZXQvS2NvbmZpZ2AsIHNvIHRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LiBMZXQmIzM5O3MgaGVhZCBvdmVyIHRoZXJlIGFuZCB0YWtlIGEgbG9vayBhdCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggYE5FVF9TV0lUQ0hERVZgLiBOZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcywgdGhlIGRlc2NyaXB0aW9uLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIG9uZS4gVGltZSB0byBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE3OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfU1dJVENIREVWJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zd2l0Y2hkZXYvS2NvbmZpZy01LVxubmV0L3N3aXRjaGRldi9LY29uZmlnOjY6Y29uZmlnIE5FVF9TV0lUQ0hERVZcbm5ldC9zd2l0Y2hkZXYvS2NvbmZpZy03LVx0Ym9vbCBcJiMzNDtTd2l0Y2ggKGFuZCBzd2l0Y2gtaXNoKSBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI5NQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDYwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBTd2l0Y2hkZXYsIEJyaWRnZSwgYW5kIFZMQU4gSW50ZXJhY3Rpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBgc3dpdGNoZGV2X3BvcnRfYXR0cl9zZXRgIGlzIHRoZSBrZXkuIEkgc2VlIGl0JiMzOTtzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgdW5kZXIgYENPTkZJR19ORVRfU1dJVENIREVWYC4gSWYgdGhhdCYjMzk7cyAqbm90KiBlbmFibGVkLCBpdCByZXR1cm5zIGAtRU9QTk9UU1VQUGAsIHdoaWNoIGlzIGFzIGV4cGVjdGVkLiBgTkVUX1NXSVRDSERFVmAgaXMgdHlwaWNhbGx5IHNlbGVjdGVkIHdoZW4gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzd2l0Y2hkZXYgb2ZmbG9hZHMsIHNvIHRoYXQgbWFrZXMgc2Vuc2UuIFdlJiMzOTtyZSBvYnZpb3VzbHkgZGVhbGluZyB3aXRoIGJyaWRnaW5nLiBTbywgYENPTkZJR19CUklER0VgIGFuZCBwcm9iYWJseSBgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR2AsIGFuZCBgQ09ORklHX1ZMQU5fODAyMVFgIGFyZSBhbHNvIGluIHBsYXkgaGVyZS4KCk5vdywgbG9va2luZyBhdCB0aGUgcGF0Y2ggaXRzZWxmLCB0aGUgbWFpbiBjaGFuZ2Ugc2VlbXMgdG8gYmUgd2l0aGluIGBicl9tc3Rfc2V0X3N0YXRlYC4gU3BlY2lmaWNhbGx5LCB3ZSBhcmUgcmVtb3ZpbmcgdGhlIFJDVSByZWFkIGxvY2svdW5sb2NrIGFyb3VuZCB0aGUgYHN3aXRjaGRldl9wb3J0X2F0dHJfc2V0YCBjYWxsIGFuZCB0aGUgdmxhbiBsaXN0IGl0ZXJhdGlvbi4gSXQgbG9va3MgbGlrZSBpdCB3YXMgb25seSBiZWluZyBjYWxsZWQgZm9yIG5vbi16ZXJvIGBtc3RpYCwgYW5kIHRoaXMgY29kZSBpcyBtYW5hZ2luZyBNU1RJcyBhbmQgdGhlaXIgc3RhdGVzLiBUaGUgY29tbWVudCBjbGFyaWZpZXMgdGhhdCBNU1RJIDAgKENTVCkgc3RhdGUgY2hhbmdlcyBhcmUgaGFuZGxlZCB2aWEgYFNXSVRDSERFVl9BVFRSX0lEX1BPUlRfU1RQX1NUQVRFYCwgd2hpbGUgb3RoZXIgTVNUSXMgKG5vbi16ZXJvKSBhcmUgaGFuZGxlZCB2aWEgbmV0bGluayB3aXRoIFJUTkwgaGVsZC4gVGhlIGFkZGVkIGBBU1NFUlRfUlROTCgpYCBtYWtlcyBpdCBleHBsaWNpdCB0aGF0IHdlIGV4cGVjdCB0aGUgUlROTCBsb2NrIHRvIGJlIGhlbGQgaW4gdGhhdCBicmFuY2guIFRoZSBSQ1UgcmVhZCBsb2NrIGlzIG5vdyBkb25lIGFmdGVyIHRoZSBwb3RlbnRpYWxseSBmYWlsaW5nIGNhbGwgdG8gYHN3aXRjaGRldl9wb3J0X2F0dHJfc2V0YC4KClNvLCB0aGUgaXNzdWUgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGBzd2l0Y2hkZXZgIHBhdGgsIHdoaWNoIHVzZXMgbmV0bGluaywgYW5kIHRoZSBWTEFOIHN0YXRlIG1hbmFnZW1lbnQgaW4gdGhlIGJyaWRnZS4gTXkgZ3Vlc3MgaXMgdGhhdCB0aGUgb3JpZ2luYWwgY29kZSBjb3VsZCBsZWFkIHRvIGEgcmFjZSBjb25kaXRpb24gb3Igc29tZSBvdGhlciBjb25jdXJyZW5jeSBpc3N1ZSB3aGVuIHNldHRpbmcgTVNUSSBzdGF0ZXMuCgpJIG5lZWQgdG8gZGlnIGludG8gdGhlIGdpdCBsb2cgb3IgdGhlIHNwZWNpZmljIGNvbW1pdCBtZXNzYWdlIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBjaGFuZ2Ugd2FzIG5lY2Vzc2FyeS4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgZXhhY3QgcHJvYmxlbSBpdCYjMzk7cyBzb2x2aW5nIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2Ygc3dpdGNoZGV2IGFuZCBicmlkZ2luZyBpbiB0aGUga2VybmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NsZWVwaW5nIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIGludmFsaWQgY29udGV4dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDM5MQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDk2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEFuYWx5c2lzIG9mIGEgS2VybmVsIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBleGFtaW5lIHRoaXMgYHN3aXRjaGRldl9wb3J0X2F0dHJfc2V0YCBmdW5jdGlvbi4gVGhlIGtleSBoZXJlIGlzIHRoZSBwb3RlbnRpYWwgZm9yIGJsb2NraW5nIG5vdGlmaWVycywgdXNpbmcgdGhhdCBgcndzZW1gLCB3aGljaCBjYW4gbGVhZCB0byBzbGVlcGluZyBpbiBhIHBvdGVudGlhbGx5IGludmFsaWQgY29udGV4dCwgc3BlY2lmaWNhbGx5IGluc2lkZSBvZiBgcmN1X3JlYWRfbG9jaygpYC4gVGhlIGZpeCBwcm9wb3NlcyBtb3ZpbmcgdGhlIFJDVSBsb2NrLCB3aGljaCBpbW1lZGlhdGVseSByYWlzZXMgYSByZWQgZmxhZyBmb3IgbWUg4oCTIGFueSBjaGFuZ2UgaW4gbG9ja2luZyBvcmRlciBkZW1hbmRzIHNjcnV0aW55LiBUaGUgYWRkaXRpb24gb2YgYEFTU0VSVF9SVE5MKClgIHdoZW4gYG1zdGkgIT0gMGAgaXMgYW5vdGhlciBwb2ludCBvZiBpbnRlcmVzdC4KClRoZSBuZXh0IGNyaXRpY2FsIHN0ZXAgaXMgYXNzZXNzaW5nIHJlYWNoYWJpbGl0eSBpbiB0eXBpY2FsIGZ1enppbmcgZW52aXJvbm1lbnRzLiBUaGFua2Z1bGx5LCBpdCBsb29rcyBsaWtlIHRoaXMgY29kZSAqaXMqIHJlYWNoYWJsZS4gU3l6a2FsbGVyIGFjdGl2ZWx5IG1hbmlwdWxhdGVzIGJyaWRnZSBkZXZpY2VzIGFuZCBjb25maWd1cmF0aW9ucyB2aWEgcnRuZXRsaW5rLCB3aXRoIG9wZXJhdGlvbnMgbGlrZSBzZXR0aW5nIFZMQU5zLCBNU1QsIGFuZCBuZXRsaW5rIGF0dHJpYnV0ZXMsIHV0aWxpemluZyBgUlRNX1NFVExJTktgIGFuZCB2YXJpb3VzIGBJRkxBXypgIGF0dHJpYnV0ZXMuICBGdXJ0aGVybW9yZSwgYGJyX21zdF9zZXRfc3RhdGVgIGFwcGVhcnMgcmVhY2hhYmxlIHRocm91Z2ggYm90aCBuZXRsaW5rICh2aWEgYGJyX2Fmc3BlY2AgLSZndDsgYGJyX21zdF9wcm9jZXNzYCAtJmd0OyBgYnJfbXN0X3Byb2Nlc3Nfb25lYCAtJmd0OyBgYnJfbXN0X3NldF9zdGF0ZWApIGFuZCBhbHNvIHZpYSBgYnJfc3RwLmNgICh0aHJvdWdoIGBicl9zZXRfc3RhdGVgKS4KCk5vdywgY29uc2lkZXJpbmcgdGhlIHBhdGNoJiMzOTtzIGNvcmUgY2hhbmdlIG9mIGFsdGVyaW5nIHRoZSBsb2NraW5nIG9yZGVyIGFuZCBpbnRyb2R1Y2luZyBhbiBhc3NlcnRpb24sIHRoaXMgKmFic29sdXRlbHkqIHNjcmVhbXMgZm9yIGZ1enppbmcuIFBlciBvdXIgZXN0YWJsaXNoZWQgdHJpYWdlIHBoaWxvc29waHksIGFueSBtb2RpZmljYXRpb24gb2YgYXNzZXJ0aW9ucyBpbiByZWFjaGFibGUgY29kZSBwYXRocywgZXNwZWNpYWxseSB0aG9zZSBlbmZvcmNpbmcgbmV3IGludmFyaWFudHMsIHJlcXVpcmVzIHRob3JvdWdoIGZ1enppbmcuIFRoaXMgYXBwbGllcyBlc3BlY2lhbGx5IHNpbmNlIHRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCwgc3luY2hyb25pemF0aW9uLCBhbmQgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uYWxpdGllcyB3aGljaCBhcmUgd2l0aGluIHRoZSBzY29wZSBvZiBjb2RlIHdlIGNvbnNpZGVyIHdvcnRoeSBvZiBmdXp6aW5nLiBUaGVyZWZvcmUsIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGlzIGlzIGEgZGVmaW5pdGUgYFdvcnRoRnV6emluZyA9IHRydWVgIHNpdHVhdGlvbi4KCk5leHQsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgY3J1Y2lhbCBzeW1ib2xzIHRvIHRhcmdldCB3aXRoIHRoZSBmdXp6ZXIuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gZnVuY3Rpb25zIG9mIGludGVyZXN0IGFyZTogYGJyX21zdF9zZXRfc3RhdGVgICh0aGUgbW9kaWZpZWQgZnVuY3Rpb24gaXRzZWxmKSwgYGJyX21zdF9wcm9jZXNzYCAodGhlIG5ldGxpbmsgZW50cnkpLCBgYnJfbXN0X3Byb2Nlc3Nfb25lYCwgYGJyX3NldF9zdGF0ZWAsIGFuZCBgYnJfbXN0X3NldF9lbmFibGVkYC4gQSBxdWljayBjaGVjayByZXZlYWxzIHRoYXQgdGhlc2Ugc3ltYm9scyBhcmUgbm90IGRlY2xhcmVkIGFzIHN0YXRpYyAodGhleSBhcmUgZGVjbGFyZWQgaW4gYG5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oYCkgd2hpY2ggbWVhbnMgdGhhdCBzeXprYWxsZXIsIHdoaWNoIHR5cGljYWxseSBmb2N1c2VzIG9uIG5vbi1zdGF0aWMgb3IgZXhwb3J0ZWQvZ2xvYmFsIHN5bWJvbHMsIGNhbiB0YXJnZXQgdGhlbS4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgYGJyX21zdF9wcm9jZXNzX29uZWAgaXNuJiMzOTt0IGlubGluZWQsIGJ1dCBzaW5jZSBpdCBpcyBjYWxsZWQgd2l0aGluIG5vbi1zdGF0aWMgc3ltYm9scywgSSB0aGluayB3ZSBhcmUgZ29vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTc6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IGJyX21zdF8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbXN0LmM9MjU9dm9pZCBicl9tc3RfdW5pbml0KHN0cnVjdCBuZXRfYnJpZGdlICpicilcbi0tXG5uZXQvYnJpZGdlL2JyX21zdC5jLTMwLVxubmV0L2JyaWRnZS9icl9tc3QuYzozMTppbnQgYnJfbXN0X2dldF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBtc3RpLCB1bnNpZ25lZCBsb25nICp2aWRzKVxubmV0L2JyaWRnZS9icl9tc3QuYy0zMi17XG4tLVxubmV0L2JyaWRnZS9icl9tc3QuYz01NT1FWFBPUlRfU1lNQk9MX0dQTChicl9tc3RfZ2V0X2luZm8pO1xubmV0L2JyaWRnZS9icl9tc3QuYy01Ni1cbm5ldC9icmlkZ2UvYnJfbXN0LmM6NTc6aW50IGJyX21zdF9nZXRfc3RhdGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IG1zdGksIHU4ICpzdGF0ZSlcbm5ldC9icmlkZ2UvYnJfbXN0LmMtNTgte1xuLS1cbm5ldC9icmlkZ2UvYnJfbXN0LmM9ODI9c3RhdGljIHZvaWQgYnJfbXN0X3ZsYW5fc2V0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXN0LmMtOTQtXG5uZXQvYnJpZGdlL2JyX21zdC5jOjk1OmludCBicl9tc3Rfc2V0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHUxNiBtc3RpLCB1OCBzdGF0ZSxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtOTYtXHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXN0LmM9MTQxPXN0YXRpYyB2b2lkIGJyX21zdF92bGFuX3N5bmNfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqcHYsIHUxNiBtc3RpKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXN0LmMtMTYwLVxubmV0L2JyaWRnZS9icl9tc3QuYzoxNjE6aW50IGJyX21zdF92bGFuX3NldF9tc3RpKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKm12LCB1MTYgbXN0aSlcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMTYyLXtcbi0tXG5uZXQvYnJpZGdlL2JyX21zdC5jPTE5Nj12b2lkIGJyX21zdF92bGFuX2luaXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdilcbi0tXG5uZXQvYnJpZGdlL2JyX21zdC5jLTIwNi1cbm5ldC9icmlkZ2UvYnJfbXN0LmM6MjA3OmludCBicl9tc3Rfc2V0X2VuYWJsZWQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxubmV0L2JyaWRnZS9icl9tc3QuYy0yMDgtXHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2JyaWRnZS9icl9tc3QuYz0yNDY9c2l6ZV90IGJyX21zdF9pbmZvX3NpemUoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcpXG4tLVxubmV0L2JyaWRnZS9icl9tc3QuYy0yNzEtXG5uZXQvYnJpZGdlL2JyX21zdC5jOjI3MjppbnQgYnJfbXN0X2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2JyaWRnZS9icl9tc3QuYy0yNzMtXHRcdCAgICAgY29uc3Qgc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcpXG4tLVxubmV0L2JyaWRnZS9icl9tc3QuYz0yOTk9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGJyX21zdF9ubF9wb2xpY3lbSUZMQV9CUklER0VfTVNUX0VOVFJZX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvYnJpZGdlL2JyX21zdC5jLTMwNy1cbm5ldC9icmlkZ2UvYnJfbXN0LmM6MzA4OnN0YXRpYyBpbnQgYnJfbXN0X3Byb2Nlc3Nfb25lKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG5uZXQvYnJpZGdlL2JyX21zdC5jLTMwOS1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXN0LmMtMzM3LVxubmV0L2JyaWRnZS9icl9tc3QuYzozMzg6aW50IGJyX21zdF9wcm9jZXNzKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIGNvbnN0IHN0cnVjdCBubGF0dHIgKm1zdF9hdHRyLFxubmV0L2JyaWRnZS9icl9tc3QuYy0zMzktXHRcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xOTUwPXN0YXRpYyBpbmxpbmUgYm9vbCBicl9tc3RfaXNfZW5hYmxlZChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKVxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NTctXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTU4OmludCBicl9tc3Rfc2V0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHUxNiBtc3RpLCB1OCBzdGF0ZSxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NTktXHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE5NjA6aW50IGJyX21zdF92bGFuX3NldF9tc3RpKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHUxNiBtc3RpKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NjEtdm9pZCBicl9tc3Rfdmxhbl9pbml0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYpO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTk2MjppbnQgYnJfbXN0X3NldF9lbmFibGVkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NjMtXHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTk2ND1zaXplX3QgYnJfbXN0X2luZm9fc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2Zyk7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTY1OmludCBicl9tc3RfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTY2LVx0XHQgICAgIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE5Njc6aW50IGJyX21zdF9wcm9jZXNzKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIGNvbnN0IHN0cnVjdCBubGF0dHIgKm1zdF9hdHRyLFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk2OC1cdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xOTcxPXN0YXRpYyBpbmxpbmUgYm9vbCBicl9tc3RfaXNfZW5hYmxlZChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKVxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NzUtXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTc2OnN0YXRpYyBpbmxpbmUgaW50IGJyX21zdF9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IG1zdGksXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTc3LVx0XHRcdFx0ICAgdTggc3RhdGUsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTgxLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTk4MjpzdGF0aWMgaW5saW5lIGludCBicl9tc3Rfc2V0X2VuYWJsZWQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk4My1cdFx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE5ODg9c3RhdGljIGlubGluZSBzaXplX3QgYnJfbXN0X2luZm9fc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2Zylcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTkyLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTk5MzpzdGF0aWMgaW5saW5lIGludCBicl9tc3RfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTk0LVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcpXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk5OC1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE5OTk6c3RhdGljIGlubGluZSBpbnQgYnJfbXN0X3Byb2Nlc3Moc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTIwMDAtXHRcdFx0XHQgY29uc3Qgc3RydWN0IG5sYXR0ciAqbXN0X2F0dHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE3OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzI0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTVNUIFN0YXRlIENvbmZpZ3VyYXRpb24gUHJvY2VzcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIGBicl9tc3Rfc2V0X3N0YXRlYCBpcyB0aGUgY29yZSBmdW5jdGlvbiB3ZSYjMzk7cmUgaW50ZXJlc3RlZCBpbi4gVGhlIG1vZGlmaWNhdGlvbiBzZWVtcyB0byBjZW50ZXIgdGhlcmUuIFRoZSBjcnVjaWFsIGxpbmsgYXBwZWFycyB0byBiZSBgYnJfbXN0X3Byb2Nlc3NgLCB0aGUgbmV0bGluayBoYW5kbGVyLCB3aGljaCBjYWxscyBgYnJfbXN0X3NldF9zdGF0ZWAgdGhyb3VnaCBgYnJfbXN0X3Byb2Nlc3Nfb25lYC4gVGhpcyBzdWdnZXN0cyBuZXRsaW5rIGlzIGhvdyB0aGUgTVNUIHN0YXRlIGlzIGJlaW5nIHVwZGF0ZWQsIHdoaWNoIGlzIHByZXR0eSBzdGFuZGFyZC4gSW50ZXJlc3RpbmcgdG9vLCBgYnJfc2V0X3N0YXRlYCBpbiBgYnJfc3RwLmNgIGFsc28gY2FsbHMgYGJyX21zdF9zZXRfc3RhdGVgIGJ1dCB3aXRoIHNvbWUgc3BlY2lmaWMgYXJndW1lbnRzOyBwYXJ0aWN1bGFybHkgYDBgIGFuZCBgTlVMTGAuIFRoaXMgbWF5IGJlIGFuIGluaXRpYWxpemF0aW9uIG9yIGRlZmF1bHQgc3RhdGUgc2V0dGVyLgoKTm93LCB0byBnZXQgYSBoYW5kbGUgb24gaG93IE1TVCBlbnRyaWVzIGFyZSBhY3R1YWxseSAqY29uZmlndXJlZCogaW4gdGhlIGZpcnN0IHBsYWNlLCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBgYnJfbXN0X3Byb2Nlc3NgIGFnYWluIGFuZCBhbHNvIGxvb2sgaW50byBgYnJfYWZzcGVjYC4gVGhleSYjMzk7cmUgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciB0aGUgaW5pdGlhbCBzZXR1cCBvZiB0aGVzZSBlbnRyaWVzLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRob3NlIG1vZHVsZXMgYW5kIHNlZSBob3cgdGhpcyBhbGwgZml0cyB0b2dldGhlciB0byBjb250cm9sIHRoZSBNU1Qgc3RhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE3OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9tc3QuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzMwOlx0XHR9XG4gMzMxOlx0XG4gMzMyOlx0XHRtc3RpID0gbmxhX2dldF91MTYodGJbSUZMQV9CUklER0VfTVNUX0VOVFJZX01TVEldKTtcbiAzMzM6XHRcdHN0YXRlID0gbmxhX2dldF91OCh0YltJRkxBX0JSSURHRV9NU1RfRU5UUllfU1RBVEVdKTtcbiAzMzQ6XHRcbiAzMzU6XHRcdHJldHVybiBicl9tc3Rfc2V0X3N0YXRlKHAsIG1zdGksIHN0YXRlLCBleHRhY2spO1xuIDMzNjpcdH1cbiAzMzc6XHRcbiAzMzg6XHRpbnQgYnJfbXN0X3Byb2Nlc3Moc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgY29uc3Qgc3RydWN0IG5sYXR0ciAqbXN0X2F0dHIsXG4gMzM5Olx0XHRcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiAzNDA6XHR7XG4gMzQxOlx0XHRzdHJ1Y3QgbmxhdHRyICphdHRyO1xuIDM0MjpcdFx0aW50IGVyciwgbXN0cyA9IDA7XG4gMzQzOlx0XHRpbnQgcmVtO1xuIDM0NDpcdFxuIDM0NTpcdFx0aWYgKCFicl9vcHRfZ2V0KHAtXHUwMDNlYnIsIEJST1BUX01TVF9FTkFCTEVEKSkge1xuIDM0NjpcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtDYW4mIzM5O3QgbW9kaWZ5IE1TVCBzdGF0ZSB3aGVuIE1TVCBpcyBkaXNhYmxlZFwmIzM0Oyk7XG4gMzQ3Olx0XHRcdHJldHVybiAtRUJVU1k7XG4gMzQ4Olx0XHR9XG4gMzQ5Olx0XG4gMzUwOlx0XHRubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIG1zdF9hdHRyLCByZW0pIHtcbiAzNTE6XHRcdFx0c3dpdGNoIChubGFfdHlwZShhdHRyKSkge1xuIDM1MjpcdFx0XHRjYXNlIElGTEFfQlJJREdFX01TVF9FTlRSWTpcbiAzNTM6XHRcdFx0XHRlcnIgPSBicl9tc3RfcHJvY2Vzc19vbmUocCwgYXR0ciwgZXh0YWNrKTtcbiAzNTQ6XHRcdFx0XHRicmVhaztcbiAzNTU6XHRcdFx0ZGVmYXVsdDpcbiAzNTY6XHRcdFx0XHRjb250aW51ZTtcbiAzNTc6XHRcdFx0fVxuIDM1ODpcdFxuIDM1OTpcdFx0XHRtc3RzJiM0MzsmIzQzOztcbiAzNjA6XHRcdFx0aWYgKGVycilcbiAzNjE6XHRcdFx0XHRicmVhaztcbiAzNjI6XHRcdH1cbiAzNjM6XHRcbiAzNjQ6XHRcdGlmICghbXN0cykge1xuIDM2NTpcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtGb3VuZCBubyBNU1QgZW50cmllcyB0byBwcm9jZXNzXCYjMzQ7KTtcbiAzNjY6XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiAzNjc6XHRcdH1cbiAzNjg6XHRcbiAzNjk6XHRcdHJldHVybiBlcnI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE3OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4Njk1CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBBU1NFUlRfUlROTCgpYCBNYWNybyoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgQVNTRVJUX1JUTkwoKWAgbWFjcm8gaXMgZG9pbmcuIExldCYjMzk7cyBkaWcgaW50byBpdHMgZGVmaW5pdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQmIzM5O3MgdXNlZCBhbmQgd2hhdCBzb3J0IG9mIGNvbmRpdGlvbnMgaXQmIzM5O3MgZGVzaWduZWQgdG8gY2hlY2suIElzIGl0IHJlbGF0ZWQgdG8gZW5zdXJpbmcgYSBwYXJ0aWN1bGFyIFJUTkwgc2VxdWVuY2Ugb3Igc3RhdGU/IElzIGl0IHVzZWQgZm9yIGRlYnVnZ2luZywgb3IgaXMgaXQgZGlyZWN0bHkgdGllZCB0byBjcml0aWNhbCBydW50aW1lIGxvZ2ljPyBLbm93aW5nIGl0cyBleGFjdCBpbXBsZW1lbnRhdGlvbiBpcyB0aGUgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGNvZGViYXNlLiBXaGF0IGRlcGVuZGVuY2llcyBkb2VzIGl0IHJlbHkgb24/IEFyZSB0aGVyZSBhbnkgc3VidGxlIHNpZGUgZWZmZWN0cyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gSSBuZWVkIHRvIGJ1aWxkIGEgbWVudGFsIG1vZGVsIG9mIHRoaXMgbWFjcm8gYW5kIGhvdyBpdCBvcGVyYXRlcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNzoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIEFTU0VSVF9SVE5MJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmg9NTM9ZXh0ZXJuIHN0cnVjdCByd19zZW1hcGhvcmUgbmV0X3J3c2VtO1xuaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaC01NC1cbmluY2x1ZGUvbGludXgvcnRuZXRsaW5rLmg6NTU6I2RlZmluZSBBU1NFUlRfUlROTCgpIFxcXG5pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oLTU2LVx0V0FSTl9PTkNFKCFydG5sX2lzX2xvY2tlZCgpLCBcXFxuLS1cbmluY2x1ZGUvbGludXgvcnRuZXRsaW5rLmg9MTA5PWJvb2wgcnRubF9uZXRfaXNfbG9ja2VkKHN0cnVjdCBuZXQgKm5ldCk7XG5pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oLTExMC1cbmluY2x1ZGUvbGludXgvcnRuZXRsaW5rLmg6MTExOiNkZWZpbmUgQVNTRVJUX1JUTkxfTkVUKG5ldClcdFx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaC0xMTItXHRXQVJOX09OQ0UoIXJ0bmxfbmV0X2lzX2xvY2tlZChuZXQpLFx0XHRcdFx0XFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTc6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxMDkKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA3MzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSVE5MIExvY2sgQXNzZXJ0aW9uIGluIEJyaWRnZSBNU1QgU3RhdGUgU2V0dGluZyoqCgpPa2F5LCBzbyBgQVNTRVJUX1JUTkwoKWAgaXMganVzdCBhIGBXQVJOX09OQ0VgIG1hY3JvLCB0aGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZC4gSXQmIzM5O3MgbWVhbnQgdG8gZmxhZyBpZiB0aGUgUlROTCAoUm91dGluZyBUYWJsZSBOZXh0IExldmVsKSBsb2NrIGlzbiYjMzk7dCBoZWxkIHdoZW4gaXQmIzM5O3MgY2FsbGVkLiBUaGlzIGFzc2VydGlvbiB3YXMgYWRkZWQgd2l0aGluIHRoZSBgYnJfbXN0X3NldF9zdGF0ZWAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBpZiAobXN0aSlgIGJyYW5jaC4gVGhlIHByaW1hcnkgcXVlc3Rpb24gYmVjb21lczogKnVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcyBpcyBgYnJfbXN0X3NldF9zdGF0ZWAgaW52b2tlZCBhbmQgd2h5IGlzIGhvbGRpbmcgdGhlIFJUTkwgbG9jayBjcml0aWNhbCB0aGVyZT8qCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGNhbGxlcnMuIEkgcmVtZW1iZXI6CgoxLiAgYGJyX21zdF9wcm9jZXNzX29uZWAsIHRoZW4gdGhyb3VnaCBgYnJfbXN0X3Byb2Nlc3NgLCB0aGVuIGBicl9hZnNwZWNgLCBhbmQgZmluYWxseSBgYnJfc2V0bGlua2AuICBDcnVjaWFsbHksIGBicl9zZXRsaW5rYCAqZG9lcyogaG9sZCB0aGUgUlROTCBsb2NrLgoyLiAgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgdGhlICpvbmx5KiBjYWxsIHBhdGguCiAgICBBIHF1aWNrIHNjYW4gb2YgdGhlIGBicl9tc3Rfc2V0X3N0YXRlYCBmdW5jdGlvbiBpdHNlbGYgcmV2ZWFscyBhbm90aGVyIGNhbGwgaW4gYGJyX3NldF9zdGF0ZWAuIEhvd2V2ZXIsIHRoaXMgY2FsbCBwYXNzZXMgYG1zdGkgPSAwYCwgc28gdGhlIGFzc2VydGlvbiBpbiB0aGUgYGlmYCBzdGF0ZW1lbnQgd29uJiMzOTt0IHRyaWdnZXIuCgpTaW5jZSBgYnJfbXN0X3NldF9zdGF0ZWAgaXMgbm9uLXN0YXRpYyBhbmQgZGVjbGFyZWQgaW4gYGJyX3ByaXZhdGUuaGAsIEkgbmVlZCB0byBrZWVwIGFuIG9wZW4gbWluZCBmb3IgYWRkaXRpb25hbCBjYWxsIHNpdGVzIHRoYXQgbWlnaHQgZXhpc3Qgb3V0c2lkZSBvZiB0aGUgdXN1YWwgc3VzcGVjdHMuIEkgbXVzdCBjb25zaWRlciB3aGF0IGVsc2UgbWlnaHQgY2FsbCB0aGlzIGZ1bmN0aW9uLgoKSSBhbHNvIHJlbWVtYmVyIGEga2V5IGNoYW5nZSByZWxhdGVkIHRvIGxvY2tpbmcuIFByZXZpb3VzbHksIGFuIGByY3VfcmVhZF9sb2NrKClgIHdhcyBoZWxkIGFjcm9zcyB0aGUgY2FsbCB0byBgc3dpdGNoZGV2X3BvcnRfYXR0cl9zZXQoKWAsIGEgYmxvY2tpbmcgbm90aWZpZXIgdGhhdCBjYXVzZWQgYSBidWcgKGEgc2xlZXBpbmcgZnVuY3Rpb24gYmVpbmcgY2FsbGVkIGZyb20gYW4gaW52YWxpZCBjb250ZXh0KS4gVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQuIE5vdywgdGhlIFJDVSBsb2NrIGlzIG9ubHkgaGVsZCAqYWZ0ZXIqIHRoZSBgc3dpdGNoZGV2YCBjYWxsLiBUaGlzIHJlZmFjdG9yaW5nIGlzIGltcG9ydGFudCBjb250ZXh0LiBUaGUgYEFTU0VSVF9SVE5MKClgIGlzIHNwZWNpZmljYWxseSB0aGVyZSB0byBlbnN1cmUgdGhhdCBmb3IgTVNUIHN0YXRlIHNldHRpbmcgKHdoZW4gYG1zdGkgIT0gMGApIHRoZSBSVE5MIGxvY2sgaXMgcHJvcGVybHkgaGVsZC4gVGhpcyBpcyBjcml0aWNhbCBiZWNhdXNlIGlmIHRoaXMgbG9jayBpc24mIzM5O3QgaGVsZCwgdGhlbiB0aGVyZSBpcyBhIHJpc2sgb2YgYSByYWNlIGNvbmRpdGlvbjogd2hlcmUgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBicmlkZ2UgY2hhbmdlcyBkdWUgdG8gY2hhbmdlcyB0byBgdmdgLCBvciBpdCBiZWluZyBmcmVlZCwgYmV0d2VlbiB0aGUgc3RhcnQgb2YgdGhlIGZ1bmN0aW9uIGFuZCB0aGUgcG9pbnQgdGhhdCBgbmJwX3ZsYW5fZ3JvdXBfcmN1KHApYCBpcyBjYWxsZWQuICBPciBpZiBzd2l0Y2hkZXYgZmFpbHMuCgpTbywgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgc2NlbmFyaW9zOgoqICAgUmFjZSBjb25kaXRpb24gYmV0d2VlbiBgdmdgIGNoYW5nZS9mcmVlIGFuZCBgbmJwX3ZsYW5fZ3JvdXBfcmN1KHApYC4KKiAgIFJUTkwgbG9jayAqbm90KiBiZWluZyBoZWxkIHdoZW4gYG1zdGkgIT0gMGAuCiogICBTd2l0Y2hkZXYgZmFpbHVyZXMuCgpOZXh0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIFRoZSBuZWNlc3NhcnkgY29uZmlncyBhcmU6IGBDT05GSUdfQlJJREdFYCwgYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgLCBgQ09ORklHX1ZMQU5fODAyMVFgLCBhbmQgYENPTkZJR19ORVRfU1dJVENIREVWYC4gSSB3aWxsIGNoZWNrIGlmIGVpdGhlciBgQlJJREdFYCBvciBgQlJJREdFX1ZMQU5fRklMVEVSSU5HYCBkaXJlY3RseSBzZWxlY3Qgb3IgZGVwZW5kIG9uIGBORVRfU1dJVENIREVWYCBpbiBgbmV0L2JyaWRnZS9LY29uZmlnYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTc6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U1dJVENIREVWJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL01ha2VmaWxlPTIzPWJyaWRnZS0kKENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkcpICYjNDM7PSBicl92bGFuLm8gYnJfdmxhbl90dW5uZWwubyBicl92bGFuX29wdGlvbnMubyBicl9tc3Qub1xubmV0L2JyaWRnZS9NYWtlZmlsZS0yNC1cbm5ldC9icmlkZ2UvTWFrZWZpbGU6MjU6YnJpZGdlLSQoQ09ORklHX05FVF9TV0lUQ0hERVYpICYjNDM7PSBicl9zd2l0Y2hkZXYub1xubmV0L2JyaWRnZS9NYWtlZmlsZS0yNi1cbi0tXG5uZXQvYnJpZGdlL2JyLmM9MTYyPXN0YXRpYyBpbnQgYnJfc3dpdGNoZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLFxuLS1cbm5ldC9icmlkZ2UvYnIuYy0xNzctXHRzd2l0Y2ggKGV2ZW50KSB7XG5uZXQvYnJpZGdlL2JyLmM6MTc4Olx0Y2FzZSBTV0lUQ0hERVZfRkRCX0FERF9UT19CUklER0U6XG5uZXQvYnJpZGdlL2JyLmMtMTc5LVx0XHRmZGJfaW5mbyA9IHB0cjtcbi0tXG5uZXQvYnJpZGdlL2JyLmMtMTg5LVx0XHRicmVhaztcbm5ldC9icmlkZ2UvYnIuYzoxOTA6XHRjYXNlIFNXSVRDSERFVl9GREJfREVMX1RPX0JSSURHRTpcbm5ldC9icmlkZ2UvYnIuYy0xOTEtXHRcdGZkYl9pbmZvID0gcHRyO1xuLS1cbm5ldC9icmlkZ2UvYnIuYy0xOTYtXHRcdGJyZWFrO1xubmV0L2JyaWRnZS9ici5jOjE5NzpcdGNhc2UgU1dJVENIREVWX0ZEQl9PRkZMT0FERUQ6XG5uZXQvYnJpZGdlL2JyLmMtMTk4LVx0XHRmZGJfaW5mbyA9IHB0cjtcbi0tXG5uZXQvYnJpZGdlL2JyLmMtMjAxLVx0XHRicmVhaztcbm5ldC9icmlkZ2UvYnIuYzoyMDI6XHRjYXNlIFNXSVRDSERFVl9GREJfRkxVU0hfVE9fQlJJREdFOlxubmV0L2JyaWRnZS9ici5jLTIwMy1cdFx0ZmRiX2luZm8gPSBwdHI7XG4tLVxubmV0L2JyaWRnZS9ici5jPTIxOD1zdGF0aWMgaW50IGJyX3N3aXRjaGRldl9ibG9ja2luZ19ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuLS1cbm5ldC9icmlkZ2UvYnIuYy0yMzItXHRzd2l0Y2ggKGV2ZW50KSB7XG5uZXQvYnJpZGdlL2JyLmM6MjMzOlx0Y2FzZSBTV0lUQ0hERVZfQlJQT1JUX09GRkxPQURFRDpcbm5ldC9icmlkZ2UvYnIuYy0yMzQtXHRcdGJycG9ydF9pbmZvID0gcHRyO1xuLS1cbm5ldC9icmlkZ2UvYnIuYy0yNDEtXHRcdGJyZWFrO1xubmV0L2JyaWRnZS9ici5jOjI0MjpcdGNhc2UgU1dJVENIREVWX0JSUE9SVF9VTk9GRkxPQURFRDpcbm5ldC9icmlkZ2UvYnIuYy0yNDMtXHRcdGJycG9ydF9pbmZvID0gcHRyO1xuLS1cbm5ldC9icmlkZ2UvYnIuYy0yNDgtXHRcdGJyZWFrO1xubmV0L2JyaWRnZS9ici5jOjI0OTpcdGNhc2UgU1dJVENIREVWX0JSUE9SVF9SRVBMQVk6XG5uZXQvYnJpZGdlL2JyLmMtMjUwLVx0XHRicnBvcnRfaW5mbyA9IHB0cjtcbi0tXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYz0zMT1pbnQgYnJfbXJwX3N3aXRjaGRldl9hZGQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwICptcnApXG4tLVxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtMzQtXHRcdC5vYmoub3JpZ19kZXYgPSBici1cdTAwM2VkZXYsXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYzozNTpcdFx0Lm9iai5pZCA9IFNXSVRDSERFVl9PQkpfSURfTVJQLFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtMzYtXHRcdC5wX3BvcnQgPSBydG5sX2RlcmVmZXJlbmNlKG1ycC1cdTAwM2VwX3BvcnQpLVx1MDAzZWRldixcbi0tXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYy00MS1cbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jOjQyOlx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ORVRfU1dJVENIREVWKSlcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTQzLVx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYz00OD1pbnQgYnJfbXJwX3N3aXRjaGRldl9kZWwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwICptcnApXG4tLVxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtNTEtXHRcdC5vYmoub3JpZ19kZXYgPSBici1cdTAwM2VkZXYsXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYzo1MjpcdFx0Lm9iai5pZCA9IFNXSVRDSERFVl9PQkpfSURfTVJQLFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtNTMtXHRcdC5wX3BvcnQgPSBOVUxMLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTU3LVxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmM6NTg6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX05FVF9TV0lUQ0hERVYpKVxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtNTktXHRcdHJldHVybiAwO1xuLS1cbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jPTY1PWJyX21ycF9zd2l0Y2hkZXZfc2V0X3Jpbmdfcm9sZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9tcnAgKm1ycCxcbi0tXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYy02OS1cdFx0Lm9iai5vcmlnX2RldiA9IGJyLVx1MDAzZWRldixcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jOjcwOlx0XHQub2JqLmlkID0gU1dJVENIREVWX09CSl9JRF9SSU5HX1JPTEVfTVJQLFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtNzEtXHRcdC5yaW5nX3JvbGUgPSByb2xlLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTc3LVxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmM6Nzg6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX05FVF9TV0lUQ0hERVYpKVxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtNzktXHRcdHJldHVybiBCUl9NUlBfU1c7XG4tLVxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmM9MTAyPWJyX21ycF9zd2l0Y2hkZXZfc2VuZF9yaW5nX3Rlc3Qoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwICptcnAsXG4tLVxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtMTA3LVx0XHQub2JqLm9yaWdfZGV2ID0gYnItXHUwMDNlZGV2LFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmM6MTA4Olx0XHQub2JqLmlkID0gU1dJVENIREVWX09CSl9JRF9SSU5HX1RFU1RfTVJQLFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtMTA5LVx0XHQuaW50ZXJ2YWwgPSBpbnRlcnZhbCxcbi0tXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYy0xMTUtXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYzoxMTY6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX05FVF9TV0lUQ0hERVYpKVxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtMTE3LVx0XHRyZXR1cm4gQlJfTVJQX1NXO1xuLS1cbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jPTEyMj1pbnQgYnJfbXJwX3N3aXRjaGRldl9zZXRfcmluZ19zdGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtMTI3LVx0XHQub2JqLm9yaWdfZGV2ID0gYnItXHUwMDNlZGV2LFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmM6MTI4Olx0XHQub2JqLmlkID0gU1dJVENIREVWX09CSl9JRF9SSU5HX1NUQVRFX01SUCxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTEyOS1cdFx0LnJpbmdfc3RhdGUgPSBzdGF0ZSxcbi0tXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYy0xMzItXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYzoxMzM6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX05FVF9TV0lUQ0hERVYpKVxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtMTM0LVx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYz0xNDA9YnJfbXJwX3N3aXRjaGRldl9zZXRfaW5fcm9sZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9tcnAgKm1ycCxcbi0tXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYy0xNDUtXHRcdC5vYmoub3JpZ19kZXYgPSBici1cdTAwM2VkZXYsXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYzoxNDY6XHRcdC5vYmouaWQgPSBTV0lUQ0hERVZfT0JKX0lEX0lOX1JPTEVfTVJQLFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtMTQ3LVx0XHQuaW5fcm9sZSA9IHJvbGUsXG4tLVxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtMTU1LVxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmM6MTU2Olx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ORVRfU1dJVENIREVWKSlcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTE1Ny1cdFx0cmV0dXJuIEJSX01SUF9TVztcbi0tXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYz0xNzk9aW50IGJyX21ycF9zd2l0Y2hkZXZfc2V0X2luX3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX21ycCAqbXJwLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTE4My1cdFx0Lm9iai5vcmlnX2RldiA9IGJyLVx1MDAzZWRldixcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jOjE4NDpcdFx0Lm9iai5pZCA9IFNXSVRDSERFVl9PQkpfSURfSU5fU1RBVEVfTVJQLFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtMTg1LVx0XHQuaW5fc3RhdGUgPSBzdGF0ZSxcbi0tXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYy0xODgtXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYzoxODk6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX05FVF9TV0lUQ0hERVYpKVxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtMTkwLVx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYz0xOTY9YnJfbXJwX3N3aXRjaGRldl9zZW5kX2luX3Rlc3Qoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwICptcnAsXG4tLVxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtMjAwLVx0XHQub2JqLm9yaWdfZGV2ID0gYnItXHUwMDNlZGV2LFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmM6MjAxOlx0XHQub2JqLmlkID0gU1dJVENIREVWX09CSl9JRF9JTl9URVNUX01SUCxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTIwMi1cdFx0LmludGVydmFsID0gaW50ZXJ2YWwsXG4tLVxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtMjA3LVxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmM6MjA4Olx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ORVRfU1dJVENIREVWKSlcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTIwOS1cdFx0cmV0dXJuIEJSX01SUF9TVztcbi0tXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYz0yMTQ9aW50IGJyX21ycF9wb3J0X3N3aXRjaGRldl9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTMyIHN0YXRlKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTIxNy1cdFx0Lm9yaWdfZGV2ID0gcC1cdTAwM2VkZXYsXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYzoyMTg6XHRcdC5pZCA9IFNXSVRDSERFVl9BVFRSX0lEX1BPUlRfU1RQX1NUQVRFLFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtMjE5LVx0XHQudS5zdHBfc3RhdGUgPSBzdGF0ZSxcbi0tXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYy0yMjEtXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYzoyMjI6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX05FVF9TV0lUQ0hERVYpKVxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtMjIzLVx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYz0yMjg9aW50IGJyX21ycF9wb3J0X3N3aXRjaGRldl9zZXRfcm9sZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTIzMi1cdFx0Lm9yaWdfZGV2ID0gcC1cdTAwM2VkZXYsXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYzoyMzM6XHRcdC5pZCA9IFNXSVRDSERFVl9BVFRSX0lEX01SUF9QT1JUX1JPTEUsXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYy0yMzQtXHRcdC51Lm1ycF9wb3J0X3JvbGUgPSByb2xlLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTIzNi1cbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jOjIzNzpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfTkVUX1NXSVRDSERFVikpXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYy0yMzgtXHRcdHJldHVybiAwO1xuLS1cbm5ldC9icmlkZ2UvYnJfbXN0LmM9OTU9aW50IGJyX21zdF9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IG1zdGksIHU4IHN0YXRlLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXN0LmMtOTgtXHRzdHJ1Y3Qgc3dpdGNoZGV2X2F0dHIgYXR0ciA9IHtcbm5ldC9icmlkZ2UvYnJfbXN0LmM6OTk6XHRcdC5pZCA9IFNXSVRDSERFVl9BVFRSX0lEX1BPUlRfTVNUX1NUQVRFLFxubmV0L2JyaWRnZS9icl9tc3QuYy0xMDAtXHRcdC5vcmlnX2RldiA9IHAtXHUwMDNlZGV2LFxuLS1cbm5ldC9icmlkZ2UvYnJfbXN0LmMtMTEwLVx0LyogTVNUSSAwIChDU1QpIHN0YXRlIGNoYW5nZXMgYXJlIG5vdGlmaWVkIHZpYSB0aGUgcmVndWxhclxubmV0L2JyaWRnZS9icl9tc3QuYzoxMTE6XHQgKiBTV0lUQ0hERVZfQVRUUl9JRF9QT1JUX1NUUF9TVEFURS4gQWxsIG90aGVyIE1TVElzIGFyZSBoYW5kbGVkIHZpYVxubmV0L2JyaWRnZS9icl9tc3QuYy0xMTItXHQgKiBuZXRsaW5rIHdpdGggUlROTCBoZWxkXG4tLVxubmV0L2JyaWRnZS9icl9tc3QuYz0xNjE9aW50IGJyX21zdF92bGFuX3NldF9tc3RpKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKm12LCB1MTYgbXN0aSlcbi0tXG5uZXQvYnJpZGdlL2JyX21zdC5jLTE2My1cdHN0cnVjdCBzd2l0Y2hkZXZfYXR0ciBhdHRyID0ge1xubmV0L2JyaWRnZS9icl9tc3QuYzoxNjQ6XHRcdC5pZCA9IFNXSVRDSERFVl9BVFRSX0lEX1ZMQU5fTVNUSSxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMTY1LVx0XHQub3JpZ19kZXYgPSBtdi1cdTAwM2Vici1cdTAwM2VkZXYsXG4tLVxubmV0L2JyaWRnZS9icl9tc3QuYz0yMDc9aW50IGJyX21zdF9zZXRfZW5hYmxlZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXG4tLVxubmV0L2JyaWRnZS9icl9tc3QuYy0yMTAtXHRzdHJ1Y3Qgc3dpdGNoZGV2X2F0dHIgYXR0ciA9IHtcbm5ldC9icmlkZ2UvYnJfbXN0LmM6MjExOlx0XHQuaWQgPSBTV0lUQ0hERVZfQVRUUl9JRF9CUklER0VfTVNULFxubmV0L2JyaWRnZS9icl9tc3QuYy0yMTItXHRcdC5vcmlnX2RldiA9IGJyLVx1MDAzZWRldixcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTE2ODk9c3RhdGljIHZvaWQgYnJfbWNfcm91dGVyX3N0YXRlX2NoYW5nZShzdHJ1Y3QgbmV0X2JyaWRnZSAqcCxcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTE2OTMtXHRcdC5vcmlnX2RldiA9IHAtXHUwMDNlZGV2LFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoxNjk0Olx0XHQuaWQgPSBTV0lUQ0hERVZfQVRUUl9JRF9CUklER0VfTVJPVVRFUixcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MTY5NTpcdFx0LmZsYWdzID0gU1dJVENIREVWX0ZfREVGRVIsXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTE2OTYtXHRcdC51Lm1yb3V0ZXIgPSBpc19tY19yb3V0ZXIsXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMDQ2PXN0YXRpYyBpbnQgYnJfbWNfZGlzYWJsZWRfdXBkYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdmFsdWUsXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMDUwLVx0XHQub3JpZ19kZXYgPSBkZXYsXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIwNTE6XHRcdC5pZCA9IFNXSVRDSERFVl9BVFRSX0lEX0JSSURHRV9NQ19ESVNBQkxFRCxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjA1MjpcdFx0LmZsYWdzID0gU1dJVENIREVWX0ZfREVGRVIsXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIwNTMtXHRcdC51Lm1jX2Rpc2FibGVkID0gIXZhbHVlLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MzM0Mj1zdGF0aWMgdm9pZCBicl9wb3J0X21jX3JvdXRlcl9zdGF0ZV9jaGFuZ2Uoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTMzNDYtXHRcdC5vcmlnX2RldiA9IHAtXHUwMDNlZGV2LFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzozMzQ3Olx0XHQuaWQgPSBTV0lUQ0hERVZfQVRUUl9JRF9QT1JUX01ST1VURVIsXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjMzNDg6XHRcdC5mbGFncyA9IFNXSVRDSERFVl9GX0RFRkVSLFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zMzQ5LVx0XHQudS5tcm91dGVyID0gaXNfbWNfcm91dGVyLFxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE4Mz1lbnVtIHtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE4NC1cdEJSX1ZMRkxBR19QRVJfUE9SVF9TVEFUUyA9IEJJVCgwKSxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE4NTpcdEJSX1ZMRkxBR19BRERFRF9CWV9TV0lUQ0hERVYgPSBCSVQoMSksXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xODYtXHRCUl9WTEZMQUdfTUNBU1RfRU5BQkxFRCA9IEJJVCgyKSxcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xODgtXHRCUl9WTEZMQUdfTkVJR0hfU1VQUFJFU1NfRU5BQkxFRCA9IEJJVCg0KSxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE4OTpcdEJSX1ZMRkxBR19UQUdHSU5HX0JZX1NXSVRDSERFViA9IEJJVCg1KSxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5MC1cdEJSX1ZMRkxBR19ORUlHSF9GT1JXQVJEX0dSQVRfRU5BQkxFRCA9IEJJVCg2KSxcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0zOTI9c3RydWN0IG5ldF9icmlkZ2VfcG9ydCB7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNDQxLSNlbmRpZlxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6NDQyOiNpZmRlZiBDT05GSUdfTkVUX1NXSVRDSERFVlxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNDQzLVx0LyogSWRlbnRpZmllciB1c2VkIHRvIGdyb3VwIHBvcnRzIHRoYXQgc2hhcmUgdGhlIHNhbWUgc3dpdGNoZGV2XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9NTAyPXN0cnVjdCBuZXRfYnJpZGdlIHtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC01NzktXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo1ODA6I2lmZGVmIENPTkZJR19ORVRfU1dJVENIREVWXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC01ODEtXHQvKiBDb3VudGVyIHVzZWQgdG8gbWFrZSBzdXJlIHRoYXQgaGFyZHdhcmUgZG9tYWlucyBnZXQgdW5pcXVlXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9NTk4PXN0cnVjdCBicl9pbnB1dF9za2JfY2Ige1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTYxNi1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjYxNzojaWZkZWYgQ09ORklHX05FVF9TV0lUQ0hERVZcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTYxOC1cdC8qIFNldCBpZiBUWCBkYXRhIHBsYW5lIG9mZmxvYWRpbmcgaXMgdXNlZCB0b3dhcmRzIGF0IGxlYXN0IG9uZVxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTIyMDI9c3RhdGljIGlubGluZSB2b2lkIGJyX3N5c2ZzX2RlbGJyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsgcmV0dXJuOyB9XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMjIwNS0vKiBicl9zd2l0Y2hkZXYuYyAqL1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MjIwNjojaWZkZWYgQ09ORklHX05FVF9TV0lUQ0hERVZcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTIyMDctaW50IGJyX3N3aXRjaGRldl9wb3J0X29mZmxvYWQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0yMzYyPXN0YXRpYyBpbmxpbmUgdm9pZCBicl9zd2l0Y2hkZXZfaW5pdChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMjM2NS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjIzNjY6I2VuZGlmIC8qIENPTkZJR19ORVRfU1dJVENIREVWICovXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0yMzY3LVxuLS1cbm5ldC9icmlkZ2UvYnJfc3RwLmM9Mjk9dm9pZCBicl9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdW5zaWduZWQgaW50IHN0YXRlKVxuLS1cbm5ldC9icmlkZ2UvYnJfc3RwLmMtMzItXHRcdC5vcmlnX2RldiA9IHAtXHUwMDNlZGV2LFxubmV0L2JyaWRnZS9icl9zdHAuYzozMzpcdFx0LmlkID0gU1dJVENIREVWX0FUVFJfSURfUE9SVF9TVFBfU1RBVEUsXG5uZXQvYnJpZGdlL2JyX3N0cC5jOjM0Olx0XHQuZmxhZ3MgPSBTV0lUQ0hERVZfRl9ERUZFUixcbm5ldC9icmlkZ2UvYnJfc3RwLmMtMzUtXHRcdC51LnN0cF9zdGF0ZSA9IHN0YXRlLFxuLS1cbm5ldC9icmlkZ2UvYnJfc3RwLmM9NjE2PWludCBfX3NldF9hZ2VpbmdfdGltZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIHQpXG4tLVxubmV0L2JyaWRnZS9icl9zdHAuYy02MTktXHRcdC5vcmlnX2RldiA9IGRldixcbm5ldC9icmlkZ2UvYnJfc3RwLmM6NjIwOlx0XHQuaWQgPSBTV0lUQ0hERVZfQVRUUl9JRF9CUklER0VfQUdFSU5HX1RJTUUsXG5uZXQvYnJpZGdlL2JyX3N0cC5jOjYyMTpcdFx0LmZsYWdzID0gU1dJVENIREVWX0ZfU0tJUF9FT1BOT1RTVVBQIHwgU1dJVENIREVWX0ZfREVGRVIsXG5uZXQvYnJpZGdlL2JyX3N0cC5jLTYyMi1cdFx0LnUuYWdlaW5nX3RpbWUgPSBqaWZmaWVzX3RvX2Nsb2NrX3QodCksXG4tLVxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYz04MT1pbnQgYnJfc3dpdGNoZGV2X3NldF9wb3J0X2ZsYWcoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcbi0tXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTk3LVxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYzo5ODpcdGF0dHIuaWQgPSBTV0lUQ0hERVZfQVRUUl9JRF9QT1JUX1BSRV9CUklER0VfRkxBR1M7XG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTk5LVx0YXR0ci51LmJycG9ydF9mbGFncy52YWwgPSBmbGFncztcbi0tXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTEwMS1cbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM6MTAyOlx0ZXJyID0gY2FsbF9zd2l0Y2hkZXZfbm90aWZpZXJzKFNXSVRDSERFVl9QT1JUX0FUVFJfU0VULCBwLVx1MDAzZWRldixcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtMTAzLVx0XHRcdFx0ICAgICAgIFx1MDAyNmluZm8uaW5mbywgZXh0YWNrKTtcbi0tXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTExMy1cbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM6MTE0Olx0YXR0ci5pZCA9IFNXSVRDSERFVl9BVFRSX0lEX1BPUlRfQlJJREdFX0ZMQUdTO1xubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYzoxMTU6XHRhdHRyLmZsYWdzID0gU1dJVENIREVWX0ZfREVGRVI7XG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTExNi1cbi0tXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jPTE0NT1icl9zd2l0Y2hkZXZfZmRiX25vdGlmeShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy0xNjctXHRjYXNlIFJUTV9ERUxORUlHSDpcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM6MTY4Olx0XHRjYWxsX3N3aXRjaGRldl9ub3RpZmllcnMoU1dJVENIREVWX0ZEQl9ERUxfVE9fREVWSUNFLFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy0xNjktXHRcdFx0XHRcdCBpdGVtLmluZm8uZGV2LCBcdTAwMjZpdGVtLmluZm8sIE5VTEwpO1xuLS1cbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtMTcxLVx0Y2FzZSBSVE1fTkVXTkVJR0g6XG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jOjE3MjpcdFx0Y2FsbF9zd2l0Y2hkZXZfbm90aWZpZXJzKFNXSVRDSERFVl9GREJfQUREX1RPX0RFVklDRSxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtMTczLVx0XHRcdFx0XHQgaXRlbS5pbmZvLmRldiwgXHUwMDI2aXRlbS5pbmZvLCBOVUxMKTtcbi0tXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jPTE3OD1pbnQgYnJfc3dpdGNoZGV2X3BvcnRfdmxhbl9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHZpZCwgdTE2IGZsYWdzLFxuLS1cbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtMTgyLVx0XHQub2JqLm9yaWdfZGV2ID0gZGV2LFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYzoxODM6XHRcdC5vYmouaWQgPSBTV0lUQ0hERVZfT0JKX0lEX1BPUlRfVkxBTixcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtMTg0LVx0XHQuZmxhZ3MgPSBmbGFncyxcbi0tXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jPTE5Mj1pbnQgYnJfc3dpdGNoZGV2X3BvcnRfdmxhbl9ub19mb3JlaWduX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgdmlkLCB1MTYgZmxhZ3MsXG4tLVxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy0xOTYtXHRcdC5vYmoub3JpZ19kZXYgPSBkZXYsXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jOjE5NzpcdFx0Lm9iai5pZCA9IFNXSVRDSERFVl9PQkpfSURfUE9SVF9WTEFOLFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYzoxOTg6XHRcdC5vYmouZmxhZ3MgPSBTV0lUQ0hERVZfRl9OT19GT1JFSUdOLFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy0xOTktXHRcdC5mbGFncyA9IGZsYWdzLFxuLS1cbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM9MjA3PWludCBicl9zd2l0Y2hkZXZfcG9ydF92bGFuX2RlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgdmlkKVxuLS1cbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtMjEwLVx0XHQub2JqLm9yaWdfZGV2ID0gZGV2LFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYzoyMTE6XHRcdC5vYmouaWQgPSBTV0lUQ0hERVZfT0JKX0lEX1BPUlRfVkxBTixcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtMjEyLVx0XHQudmlkID0gdmlkLFxuLS1cbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM9MzMxPWJyX3N3aXRjaGRldl9mZGJfcmVwbGF5KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpicl9kZXYsIGNvbnN0IHZvaWQgKmN0eCxcbi0tXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTM0Ny1cdGlmIChhZGRpbmcpXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jOjM0ODpcdFx0YWN0aW9uID0gU1dJVENIREVWX0ZEQl9BRERfVE9fREVWSUNFO1xubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy0zNDktXHRlbHNlXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jOjM1MDpcdFx0YWN0aW9uID0gU1dJVENIREVWX0ZEQl9ERUxfVE9fREVWSUNFO1xubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy0zNTEtXG4tLVxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYz0zNjU9c3RhdGljIGludCBicl9zd2l0Y2hkZXZfdmxhbl9hdHRyX3JlcGxheShzdHJ1Y3QgbmV0X2RldmljZSAqYnJfZGV2LFxuLS1cbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtMzkxLVx0XHRpZiAodi1cdTAwM2Vtc3RpKSB7XG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jOjM5MjpcdFx0XHRhdHRyLmlkID0gU1dJVENIREVWX0FUVFJfSURfVkxBTl9NU1RJO1xubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy0zOTMtXHRcdFx0YXR0ci51LnZsYW5fbXN0aS52aWQgPSB2LVx1MDAzZXZpZDtcbi0tXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTM5NS1cbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM6Mzk2Olx0XHRcdGVyciA9IG5iLVx1MDAzZW5vdGlmaWVyX2NhbGwobmIsIFNXSVRDSERFVl9QT1JUX0FUVFJfU0VULFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy0zOTctXHRcdFx0XHRcdFx0XHUwMDI2YXR0cl9pbmZvKTtcbi0tXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jPTQyOD1zdGF0aWMgaW50IGJyX3N3aXRjaGRldl92bGFuX3JlcGxheV9ncm91cChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuLS1cbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtNDQ1LVx0XHRcdC5vYmoub3JpZ19kZXYgPSBkZXYsXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jOjQ0NjpcdFx0XHQub2JqLmlkID0gU1dJVENIREVWX09CSl9JRF9QT1JUX1ZMQU4sXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTQ0Ny1cdFx0XHQuZmxhZ3MgPSBicl92bGFuX2ZsYWdzKHYsIHB2aWQpLFxuLS1cbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM9NDYzPXN0YXRpYyBpbnQgYnJfc3dpdGNoZGV2X3ZsYW5fcmVwbGF5KHN0cnVjdCBuZXRfZGV2aWNlICpicl9kZXYsXG4tLVxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy00ODEtXHRpZiAoYWRkaW5nKVxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYzo0ODI6XHRcdGFjdGlvbiA9IFNXSVRDSERFVl9QT1JUX09CSl9BREQ7XG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTQ4My1cdGVsc2Vcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM6NDg0Olx0XHRhY3Rpb24gPSBTV0lUQ0hERVZfUE9SVF9PQkpfREVMO1xubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy00ODUtXG4tLVxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYz01NjQ9c3RhdGljIHZvaWQgYnJfc3dpdGNoZGV2X2hvc3RfbWRiX29uZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtNTcwLVx0XHQub2JqID0ge1xubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYzo1NzE6XHRcdFx0LmlkID0gU1dJVENIREVWX09CSl9JRF9IT1NUX01EQixcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM6NTcyOlx0XHRcdC5mbGFncyA9IFNXSVRDSERFVl9GX0RFRkVSLFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy01NzMtXHRcdFx0Lm9yaWdfZGV2ID0gZGV2LFxuLS1cbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM9NjE5PXN0YXRpYyBpbnQgYnJfc3dpdGNoZGV2X21kYl9xdWV1ZV9vbmUoc3RydWN0IGxpc3RfaGVhZCAqbWRiX2xpc3QsXG4tLVxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy02MzUtXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jOjYzNjpcdGlmIChhY3Rpb24gPT0gU1dJVENIREVWX1BPUlRfT0JKX0FERCBcdTAwMjZcdTAwMjZcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtNjM3LVx0ICAgIHN3aXRjaGRldl9wb3J0X29ial9hY3RfaXNfZGVmZXJyZWQoZGV2LCBhY3Rpb24sIFx1MDAyNm1kYi5vYmopKSB7XG4tLVxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYz02NTc9dm9pZCBicl9zd2l0Y2hkZXZfbWRiX25vdGlmeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtNjY0LVx0XHQub2JqID0ge1xubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYzo2NjU6XHRcdFx0LmlkID0gU1dJVENIREVWX09CSl9JRF9QT1JUX01EQixcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM6NjY2Olx0XHRcdC5mbGFncyA9IFNXSVRDSERFVl9GX0RFRkVSLFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy02NjctXHRcdH0sXG4tLVxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYz02OTY9YnJfc3dpdGNoZGV2X21kYl9yZXBsYXkoc3RydWN0IG5ldF9kZXZpY2UgKmJyX2Rldiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTcyMS1cdGlmIChhZGRpbmcpXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jOjcyMjpcdFx0YWN0aW9uID0gU1dJVENIREVWX1BPUlRfT0JKX0FERDtcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtNzIzLVx0ZWxzZVxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYzo3MjQ6XHRcdGFjdGlvbiA9IFNXSVRDSERFVl9QT1JUX09CSl9ERUw7XG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTcyNS1cbi0tXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTc0MC1cdFx0XHRlcnIgPSBicl9zd2l0Y2hkZXZfbWRiX3F1ZXVlX29uZShcdTAwMjZtZGJfbGlzdCwgZGV2LCBhY3Rpb24sXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jOjc0MTpcdFx0XHRcdFx0XHRcdCBTV0lUQ0hERVZfT0JKX0lEX0hPU1RfTURCLFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy03NDItXHRcdFx0XHRcdFx0XHQgbXAsIGJyX2Rldik7XG4tLVxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy03NTQtXHRcdFx0ZXJyID0gYnJfc3dpdGNoZGV2X21kYl9xdWV1ZV9vbmUoXHUwMDI2bWRiX2xpc3QsIGRldiwgYWN0aW9uLFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYzo3NTU6XHRcdFx0XHRcdFx0XHQgU1dJVENIREVWX09CSl9JRF9QT1JUX01EQixcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtNzU2LVx0XHRcdFx0XHRcdFx0IG1wLCBkZXYpO1xuLS1cbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtNzY3LVx0XHRlcnIgPSBicl9zd2l0Y2hkZXZfbWRiX3JlcGxheV9vbmUobmIsIGRldixcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM6NzY4Olx0XHRcdFx0XHRcdCAgU1dJVENIREVWX09CSl9QT1JUX01EQihvYmopLFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy03NjktXHRcdFx0XHRcdFx0ICBhY3Rpb24sIGN0eCwgZXh0YWNrKTtcbi0tXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTc3OC1cdFx0bGlzdF9kZWwoXHUwMDI2b2JqLVx1MDAzZWxpc3QpO1xubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYzo3Nzk6XHRcdGtmcmVlKFNXSVRDSERFVl9PQkpfUE9SVF9NREIob2JqKSk7XG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTc4MC1cdH1cbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0xMDM9c3RhdGljIGludCBfX3ZsYW5fdmlkX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMTEzLVx0aWYgKGVyciAhPSAtRU9QTk9UU1VQUCkge1xubmV0L2JyaWRnZS9icl92bGFuLmM6MTE0Olx0XHR2LVx1MDAzZXByaXZfZmxhZ3MgfD0gQlJfVkxGTEFHX0FEREVEX0JZX1NXSVRDSERFViB8IEJSX1ZMRkxBR19UQUdHSU5HX0JZX1NXSVRDSERFVjtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTExNS1cdFx0cmV0dXJuIGVycjtcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMTktXHRcdHJldHVybiB2bGFuX3ZpZF9hZGQoZGV2LCBici1cdTAwM2V2bGFuX3Byb3RvLCB2LVx1MDAzZXZpZCk7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoxMjA6XHR2LVx1MDAzZXByaXZfZmxhZ3MgfD0gQlJfVkxGTEFHX0FEREVEX0JZX1NXSVRDSERFVjtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTEyMS1cdHJldHVybiBlcnI7XG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9MTQ5PXN0YXRpYyBpbnQgX192bGFuX3ZpZF9kZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTE1Ny1cdGVyciA9IGJyX3N3aXRjaGRldl9wb3J0X3ZsYW5fZGVsKGRldiwgdi1cdTAwM2V2aWQpO1xubmV0L2JyaWRnZS9icl92bGFuLmM6MTU4Olx0aWYgKCEodi1cdTAwM2Vwcml2X2ZsYWdzIFx1MDAyNiBCUl9WTEZMQUdfQURERURfQllfU1dJVENIREVWKSlcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTE1OS1cdFx0dmxhbl92aWRfZGVsKGRldiwgYnItXHUwMDNldmxhbl9wcm90bywgdi1cdTAwM2V2aWQpO1xuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTg5ND1pbnQgYnJfdmxhbl9maWx0ZXJfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdW5zaWduZWQgbG9uZyB2YWwsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtODk4LVx0XHQub3JpZ19kZXYgPSBici1cdTAwM2VkZXYsXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo4OTk6XHRcdC5pZCA9IFNXSVRDSERFVl9BVFRSX0lEX0JSSURHRV9WTEFOX0ZJTFRFUklORyxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjkwMDpcdFx0LmZsYWdzID0gU1dJVENIREVWX0ZfU0tJUF9FT1BOT1RTVVBQLFxubmV0L2JyaWRnZS9icl92bGFuLmMtOTAxLVx0XHQudS52bGFuX2ZpbHRlcmluZyA9IHZhbCxcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz05NDU9aW50IF9fYnJfdmxhbl9zZXRfcHJvdG8oc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBfX2JlMTYgcHJvdG8sXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtOTQ5LVx0XHQub3JpZ19kZXYgPSBici1cdTAwM2VkZXYsXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo5NTA6XHRcdC5pZCA9IFNXSVRDSERFVl9BVFRSX0lEX0JSSURHRV9WTEFOX1BST1RPQ09MLFxubmV0L2JyaWRnZS9icl92bGFuLmM6OTUxOlx0XHQuZmxhZ3MgPSBTV0lUQ0hERVZfRl9TS0lQX0VPUE5PVFNVUFAsXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy05NTItXHRcdC51LnZsYW5fcHJvdG9jb2wgPSBudG9ocyhwcm90byksXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtOTcwLVx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZsYW4sIFx1MDAyNnZnLVx1MDAzZXZsYW5fbGlzdCwgdmxpc3QpIHtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjk3MTpcdFx0XHRpZiAodmxhbi1cdTAwM2Vwcml2X2ZsYWdzIFx1MDAyNiBCUl9WTEZMQUdfQURERURfQllfU1dJVENIREVWKVxubmV0L2JyaWRnZS9icl92bGFuLmMtOTcyLVx0XHRcdFx0Y29udGludWU7XG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtOTg3LVx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZsYW4sIFx1MDAyNnZnLVx1MDAzZXZsYW5fbGlzdCwgdmxpc3QpIHtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjk4ODpcdFx0XHRpZiAodmxhbi1cdTAwM2Vwcml2X2ZsYWdzIFx1MDAyNiBCUl9WTEZMQUdfQURERURfQllfU1dJVENIREVWKVxubmV0L2JyaWRnZS9icl92bGFuLmMtOTg5LVx0XHRcdFx0Y29udGludWU7XG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMTAwMC1cdGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmV2ZXJzZSh2bGFuLCBcdTAwMjZ2Zy1cdTAwM2V2bGFuX2xpc3QsIHZsaXN0KSB7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoxMDAxOlx0XHRpZiAodmxhbi1cdTAwM2Vwcml2X2ZsYWdzIFx1MDAyNiBCUl9WTEZMQUdfQURERURfQllfU1dJVENIREVWKVxubmV0L2JyaWRnZS9icl92bGFuLmMtMTAwMi1cdFx0XHRjb250aW51ZTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMDA4LVx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZsYW4sIFx1MDAyNnZnLVx1MDAzZXZsYW5fbGlzdCwgdmxpc3QpIHtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjEwMDk6XHRcdFx0aWYgKHZsYW4tXHUwMDNlcHJpdl9mbGFncyBcdTAwMjYgQlJfVkxGTEFHX0FEREVEX0JZX1NXSVRDSERFVilcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTEwMTAtXHRcdFx0XHRjb250aW51ZTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0xMjU3PWludCBuYnBfdmxhbl9pbml0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMjYwLVx0XHQub3JpZ19kZXYgPSBwLVx1MDAzZWJyLVx1MDAzZWRldixcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjEyNjE6XHRcdC5pZCA9IFNXSVRDSERFVl9BVFRSX0lEX0JSSURHRV9WTEFOX0ZJTFRFUklORyxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjEyNjI6XHRcdC5mbGFncyA9IFNXSVRDSERFVl9GX1NLSVBfRU9QTk9UU1VQUCxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTEyNjMtXHRcdC51LnZsYW5fZmlsdGVyaW5nID0gYnJfb3B0X2dldChwLVx1MDAzZWJyLCBCUk9QVF9WTEFOX0VOQUJMRUQpLFxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTE0Nzk9aW50IGJyX3ZsYW5fZmlsbF9mb3J3YXJkX3BhdGhfbW9kZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMTQ5OC1cdFx0cGF0aC1cdTAwM2VicmlkZ2Uudmxhbl9tb2RlID0gREVWX1BBVEhfQlJfVkxBTl9LRUVQO1xubmV0L2JyaWRnZS9icl92bGFuLmM6MTQ5OTpcdGVsc2UgaWYgKHYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjYgQlJfVkxGTEFHX1RBR0dJTkdfQllfU1dJVENIREVWKVxubmV0L2JyaWRnZS9icl92bGFuLmMtMTUwMC1cdFx0cGF0aC1cdTAwM2VicmlkZ2Uudmxhbl9tb2RlID0gREVWX1BBVEhfQlJfVkxBTl9VTlRBR19IVztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTc6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk0MDYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJyaWRnZSBWTEFOIEZpbHRlcmluZyBDb21waWxhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhpcyBsaW5lIGBicmlkZ2UtJChDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HKSAmIzQzOz0gYnJfdmxhbi5vIGJyX3ZsYW5fdHVubmVsLm8gYnJfdmxhbl9vcHRpb25zLm8gYnJfbXN0Lm9gIHRlbGxzIG1lIHRoYXQgdGhlIGBicl9tc3QuY2Agb2JqZWN0IGZpbGUsIGFtb25nIG90aGVycywgZ2V0cyBpbmNsdWRlZCBpbiB0aGUgYnJpZGdlIG1vZHVsZSBidWlsZCBwcm9jZXNzICpvbmx5KiB3aGVuIGBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYCBpcyBkZWZpbmVkLiBUaGF0JiMzOTtzIHRoZSBrZXkgY29uZGl0aW9uLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIG9mIGBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYC4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSBpdCYjMzk7cyBnb2luZyB0byBiZSBuZXN0ZWQsIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIGBCUklER0VgIGFuZCBgVkxBTl84MDIxUWAgZm9yIHRoaXMgY29uZmlndXJhdGlvbi4gQW5kIGxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IGxvb2tzIGxpa2UgYE5FVF9TV0lUQ0hERVZgIGlzIGFsc28gcmVsZXZhbnQgaGVyZS4gU3BlY2lmaWNhbGx5LCBJIHNlZSBhIGNhbGwgdG8gYHN3aXRjaGRldl9wb3J0X2F0dHJfc2V0YCwgYW5kIHRoZSB1c2Ugb2Ygc3dpdGNoZGV2IGJsb2NraW5nIG5vdGlmaWVycyB3aGljaCBtYWtlcyBtZSB0aGluayBpdCBoYXMgc29tZSBiZWFyaW5nIG9uIHRoaXMgc2V0dXAgaWYgYE5FVF9TV0lUQ0hERVZgIGlzIGFsc28gZW5hYmxlZC4KCkkgbmVlZCB0byBzZWUgaWYgYE5FVF9TV0lUQ0hERVZgIGl0c2VsZiBoYXMgYW55IGRlcGVuZGVuY2llcywgc28gSSBjYW4gZW5zdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBjb25maWd1cmF0aW9uIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE3OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfU1dJVENIREVWJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc3dpdGNoZGV2L0tjb25maWctNS1cbm5ldC9zd2l0Y2hkZXYvS2NvbmZpZzo2OmNvbmZpZyBORVRfU1dJVENIREVWXG5uZXQvc3dpdGNoZGV2L0tjb25maWctNy1cdGJvb2wgXCYjMzQ7U3dpdGNoIChhbmQgc3dpdGNoLWlzaCkgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTc6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk5MjIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIGBORVRfU1dJVENIREVWYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBgTkVUX1NXSVRDSERFVmAgY29uZmlnIG9wdGlvbi4gVGhlIGRvY3VtZW50YXRpb24gc2VlbXMgdG8gc3VnZ2VzdCBpdCYjMzk7cyBlaXRoZXIgZW50aXJlbHkgaW5kZXBlbmRlbnQsIG9yIGF0IG1vc3QsIHJlbGllcyBvbiB0aGUgYnJvYWRlciBgTkVUYCBmZWF0dXJlLiBUaGF0JiMzOTtzIGEgbGl0dGxlIHVudXN1YWwsIGdpdmVuIHRoZSBjb21wbGV4IG5hdHVyZSBvZiBzd2l0Y2ggZGV2aWNlIHN1cHBvcnQuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdC4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZGl2ZSBpbnRvIHRoZSBgbmV0L3N3aXRjaGRldi9LY29uZmlnYCBmaWxlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZGVmaW5pdGl2ZSBhbnN3ZXIgYWJvdXQgaXRzIGRlcGVuZGVuY2llcyBhbmQgYW55IHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGl0LiBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlc2UgcmVsYXRpb25zaGlwcyB0byBlbnN1cmUgcHJvcGVyIGNvbmZpZ3VyYXRpb24gYW5kIGF2b2lkIGFueSB1bmV4cGVjdGVkIGNvbmZsaWN0cyBvciBtaXNzaW5nIGZ1bmN0aW9uYWxpdHkgd2hlbiBkZWFsaW5nIHdpdGggbmV0d29ya2luZyBkZXZpY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zd2l0Y2hkZXYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIENvbmZpZ3VyYXRpb24gZm9yIFN3aXRjaCBkZXZpY2Ugc3VwcG9ydFxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgTkVUX1NXSVRDSERFVlxuICAgNzpcdFx0Ym9vbCBcJiMzNDtTd2l0Y2ggKGFuZCBzd2l0Y2gtaXNoKSBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuICAgODpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGdsdWUgYmV0d2VlbiBjb3JlIG5ldHdvcmtpbmcgY29kZSBhbmQgZGV2aWNlXG4gIDExOlx0XHQgIGRyaXZlcnMgaW4gb3JkZXIgdG8gc3VwcG9ydCBoYXJkd2FyZSBzd2l0Y2ggY2hpcHMgaW4gdmVyeSBnZW5lcmljXG4gIDEyOlx0XHQgIG1lYW5pbmcgb2YgdGhlIHdvcmQgXCYjMzQ7c3dpdGNoXCYjMzQ7LiBUaGlzIGluY2x1ZGUgZGV2aWNlcyBzdXBwb3J0aW5nIEwyL0wzIGJ1dFxuICAxMzpcdFx0ICBhbHNvIHZhcmlvdXMgZmxvdyBvZmZsb2FkaW5nIGNoaXBzLCBpbmNsdWRpbmcgc3dpdGNoZXMgZW1iZWRkZWQgaW50b1xuICAxNDpcdFx0ICBTUi1JT1YgTklDcy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTc6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAzNDYKCQkJCQkJCW91dHB1dDogMTczCgkJCQkJCQl0aG91Z2h0czogNTU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBhbmQgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIGRlcGVuZGVuY2llcyBhcmUgY2xlYXI6IGBORVRfU1dJVENIREVWYCByZWxpZXMgb24gYElORVRgLiBgQlJJREdFYCBjb3JyZXNwb25kcyB0byBgQ09ORklHX0JSSURHRWAsIGFuZCBzaW1pbGFybHksIGBCUklER0VfVkxBTl9GSUxURVJJTkdgIG1hcHMgdG8gYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgLCBhbmQgYFZMQU5fODAyMVFgIG1hcHMgdG8gYENPTkZJR19WTEFOXzgwMjFRYC4gSSBuZWVkIHRvIGJlIGNhcmVmdWwgdG8gc3RyaXAgdGhlIGBDT05GSUdfYCBwcmVmaXggd2hlbiBzcGVjaWZ5aW5nIHRoZSByZXF1aXJlZCBjb25maWdzLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zOiBgQlJJREdFYCwgYEJSSURHRV9WTEFOX0ZJTFRFUklOR2AsIGBWTEFOXzgwMjFRYCwgYW5kIGBORVRfU1dJVENIREVWYCBhcmUgYWxsIGVzc2VudGlhbC4gQ2hlY2suIE5leHQsIEkgbmVlZCB0byBsb29rIGF0IHRoZSBgRm9jdXNTeW1ib2xzYC4KCkkgc2VlIGBicl9tc3Rfc2V0X3N0YXRlYCAtIHRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHRoZSBwYXRjaCBtb2RpZmllZCEgQWxzbyBgYnJfbXN0X3Byb2Nlc3NgLCBhbmQgYGJyX21zdF9zZXRfZW5hYmxlZGAgd2hpY2ggc2VlbXMgdG8gYmUgdGhlIE1TVCBlbmFibGUgZW50cnkgcG9pbnQuIEFuZCBgYnJfc2V0X3N0YXRlYCwgd2hpY2ggY2FsbHMgYGJyX21zdF9zZXRfc3RhdGVgLiBUaGVzZSBhcmUgKm5vdCogdWJpcXVpdG91cyBmdW5jdGlvbnMuIFRoZXkgYXJlICpoaWdobHkqIHNwZWNpZmljIHRvIEV0aGVybmV0IEJyaWRnZSBNdWx0aXBsZSBTcGFubmluZyBUcmVlIChNU1QpIGZ1bmN0aW9uYWxpdHkuIFRoaXMgaXMgZ29vZDsgd2UmIzM5O3JlIGF2b2lkaW5nIHRob3NlIGNvbW1vbiBob3RzcG90cy4KCk5vdywgdGhlIHJlYXNvbmluZzogVGhlIHBhdGNoIG1vZGlmaWVzIGBicl9tc3Rfc2V0X3N0YXRlKClgIHRvIG1vdmUgYHN3aXRjaGRldl9wb3J0X2F0dHJfc2V0KClgIG91dCBvZiBhbiBgcmN1X3JlYWRfbG9jaygpYCBjcml0aWNhbCBzZWN0aW9uIGFuZCBpbnRyb2R1Y2VzIGFuIGBBU1NFUlRfUlROTCgpYCBhc3NlcnRpb24uIFRoaXMgY2hhbmdlcyB0aGUgbG9ja2luZyBhbmQgaW50cm9kdWNlcyBhIG5ldyBydW50aW1lIGFzc2VydGlvbiBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUsIHNwZWNpZmljYWxseSBFdGhlcm5ldCBicmlkZ2UgTVNUIHN1cHBvcnQuCgpMZXQmIzM5O3MgcmV2aWV3IHRoZSBndWlkZWxpbmVzLCBzdGVwIGJ5IHN0ZXA6CiogICAqKlJlYWNoYWJpbGl0eToqKiBTdGFuZGFyZCBRRU1VL3N5emthbGxlciBjYW4gZWFzaWx5IGNvbmZpZ3VyZSBicmlkZ2UgZGV2aWNlcyB3aXRoIFZMQU4gZmlsdGVyaW5nIGFuZCBNU1QgdXNpbmcgbmV0bGluay4gVGhpcyBpcyBnb29kLiBObyB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgaXMgbmVlZGVkLgoqICAgKipSZWZhY3RvcmluZ3MgYW5kIEFzc2VydGlvbnM6KiogVGhlIHBhdGNoIGNsZWFybHkgaW52b2x2ZXMgYW4gUkNVIGNyaXRpY2FsIHNlY3Rpb24gbW92ZSBhbmQgYSBuZXcgYEFTU0VSVF9SVE5MKClgIGFzc2VydGlvbiwgd2hpY2ggaXMgcGVyZmVjdC4KKiAgICoqRm9jdXNTeW1ib2xzOioqIEkmIzM5O20gdGFyZ2V0aW5nIHNwZWNpZmljIGZlYXR1cmUgbG9naWMgd2l0aCB0aGVzZSBmdW5jdGlvbnMsIGFuZCBub3QgaG90IHBhdGhzLiBDaGVjay4KKiAgICoqRW5hYmxlQ29uZmlnczoqKiBDb25maXJtZWQ6IGBCUklER0VgLCBgQlJJREdFX1ZMQU5fRklMVEVSSU5HYCwgYFZMQU5fODAyMVFgLCBhbmQgYE5FVF9TV0lUQ0hERVZgLiBTdHJpcHBlZCB0aGUgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4LgoKRXZlcnl0aGluZyBhbGlnbnMuIEkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlJJREdFJiMzNDssCiAgICAmIzM0O0JSSURHRV9WTEFOX0ZJTFRFUklORyYjMzQ7LAogICAgJiMzNDtWTEFOXzgwMjFRJiMzNDssCiAgICAmIzM0O05FVF9TV0lUQ0hERVYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticl9tc3Rfc2V0X3N0YXRlJiMzNDssCiAgICAmIzM0O2JyX21zdF9wcm9jZXNzJiMzNDssCiAgICAmIzM0O2JyX21zdF9zZXRfZW5hYmxlZCYjMzQ7LAogICAgJiMzNDticl9zZXRfc3RhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uIGluIGBicl9tc3Rfc2V0X3N0YXRlKClgIHdpdGhpbiB0aGUgRXRoZXJuZXQgYnJpZGdlIE1TVCBpbXBsZW1lbnRhdGlvbjogaXQgbW92ZXMgYSBwb3RlbnRpYWxseSBzbGVlcGluZyBzd2l0Y2hkZXYgY2FsbCBvdXRzaWRlIG9mIHRoZSBgcmN1X3JlYWRfbG9jaygpYCBjcml0aWNhbCBzZWN0aW9uIGFuZCBhZGRzIGFuIGBBU1NFUlRfUlROTCgpYCBpbnZhcmlhbnQgY2hlY2suIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgYWNjZXNzaWJsZSB2aWEgbmV0bGluayBhbmQgYnJpZGdlIFNUUCBjb25maWd1cmF0aW9uIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlJJREdFJiMzNDssCiAgICAmIzM0O0JSSURHRV9WTEFOX0ZJTFRFUklORyYjMzQ7LAogICAgJiMzNDtWTEFOXzgwMjFRJiMzNDssCiAgICAmIzM0O05FVF9TV0lUQ0hERVYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticl9tc3Rfc2V0X3N0YXRlJiMzNDssCiAgICAmIzM0O2JyX21zdF9wcm9jZXNzJiMzNDssCiAgICAmIzM0O2JyX21zdF9zZXRfZW5hYmxlZCYjMzQ7LAogICAgJiMzNDticl9zZXRfc3RhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uIGluIGBicl9tc3Rfc2V0X3N0YXRlKClgIHdpdGhpbiB0aGUgRXRoZXJuZXQgYnJpZGdlIE1TVCBpbXBsZW1lbnRhdGlvbjogaXQgbW92ZXMgYSBwb3RlbnRpYWxseSBzbGVlcGluZyBzd2l0Y2hkZXYgY2FsbCBvdXRzaWRlIG9mIHRoZSBgcmN1X3JlYWRfbG9jaygpYCBjcml0aWNhbCBzZWN0aW9uIGFuZCBhZGRzIGFuIGBBU1NFUlRfUlROTCgpYCBpbnZhcmlhbnQgY2hlY2suIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgYWNjZXNzaWJsZSB2aWEgbmV0bGluayBhbmQgYnJpZGdlIFNUUCBjb25maWd1cmF0aW9uIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTc6MTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNzoxODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgc2xlZXAtaW4tYXRvbWljIGJ1ZyBpbiBgYnJfbXN0X3NldF9zdGF0ZSgpYCBieSBtb3ZpbmcgYHN3aXRjaGRldl9wb3J0X2F0dHJfc2V0KClgICh3aGljaCBtYXkgc2xlZXApIG91dHNpZGUgb2YgdGhlIGByY3VfcmVhZF9sb2NrKClgIGNyaXRpY2FsIHNlY3Rpb24sIGFkZGluZyBgQVNTRVJUX1JUTkwoKWAsIGFuZCBvbmx5IGFjcXVpcmluZyBgcmN1X3JlYWRfbG9jaygpYCB3aGVuIHJlYWRpbmcgdGhlIFZMQU4gZ3JvdXAgYW5kIGl0ZXJhdGluZyBvdmVyIHRoZSBWTEFOIGxpc3QuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMsIGRvZXMgbm90IGFmZmVjdCBidWZmZXIgYm91bmRzIG9yIGNvcHkgbGVuZ3RocywgYW5kIGRvZXMgbm90IGFsdGVyIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UuIFNsZWVwaW5nIHdoaWxlIGhvbGRpbmcgYW4gUkNVIHJlYWQgbG9jayBpcyBkZXRlY3RlZCBieSBzdGFuZGFyZCBkZWJ1ZyBjb25maWd1cmF0aW9ucyAoYENPTkZJR19ERUJVR19BVE9NSUNfU0xFRVBgIC8gYG1pZ2h0X3NsZWVwKClgKSwgYW5kIGxvY2sgaW52YXJpYW50cyBhcmUgdmVyaWZpZWQgYnkgYEFTU0VSVF9SVE5MKClgIC8gYExPQ0tERVBgLiBCZWNhdXNlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODBhNTA4NGQwMDI2YTg2NThmMzUwNmNkOTI1NzYxZWFhM2Y5NjVlZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDE3OjE2OjA2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9tc3QuYyBiL25ldC9icmlkZ2UvYnJfbXN0LmMKaW5kZXggNDNhMzAwYWU2YmZhZi4uMTY1NGVmZDMwNDViMCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9tc3QuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYnJpZGdlL2JyX21zdC5jCkBAIC0xMDcsMjEgJiM0MzsxMDcsMjQgQEAgaW50IGJyX21zdF9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IG1zdGksIHU4IHN0YXRlLAogCXN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnY7CiAJaW50IGVyciA9IDA7CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JdmcgPSBuYnBfdmxhbl9ncm91cF9yY3UocCk7Ci0JaWYgKCF2ZykKLQkJZ290byBvdXQ7Ci0KIAkvKiBNU1RJIDAgKENTVCkgc3RhdGUgY2hhbmdlcyBhcmUgbm90aWZpZWQgdmlhIHRoZSByZWd1bGFyCi0JICogU1dJVENIREVWX0FUVFJfSURfUE9SVF9TVFBfU1RBVEUuCiYjNDM7CSAqIFNXSVRDSERFVl9BVFRSX0lEX1BPUlRfU1RQX1NUQVRFLiBBbGwgb3RoZXIgTVNUSXMgYXJlIGhhbmRsZWQgdmlhCiYjNDM7CSAqIG5ldGxpbmsgd2l0aCBSVE5MIGhlbGQKIAkgKi8KIAlpZiAobXN0aSkgewomIzQzOwkJQVNTRVJUX1JUTkwoKTsKJiM0MzsKIAkJZXJyID0gc3dpdGNoZGV2X3BvcnRfYXR0cl9zZXQocC0mZ3Q7ZGV2LCAmYW1wO2F0dHIsIGV4dGFjayk7CiAJCWlmIChlcnIgJmFtcDsmYW1wOyBlcnIgIT0gLUVPUE5PVFNVUFApCiAJCQlnb3RvIG91dDsKJiM0MzsJCWVyciA9IDA7CiAJfQogCi0JZXJyID0gMDsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwl2ZyA9IG5icF92bGFuX2dyb3VwX3JjdShwKTsKJiM0MzsJaWYgKCF2ZykKJiM0MzsJCWdvdG8gb3V0X3JjdV91bmxvY2s7CiYjNDM7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodiwgJmFtcDt2Zy0mZ3Q7dmxhbl9saXN0LCB2bGlzdCkgewogCQlpZiAodi0mZ3Q7YnJ2bGFuLSZndDttc3RpICE9IG1zdGkpCiAJCQljb250aW51ZTsKQEAgLTEyOSw4ICYjNDM7MTMyLDkgQEAgaW50IGJyX21zdF9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IG1zdGksIHU4IHN0YXRlLAogCQlicl9tc3Rfdmxhbl9zZXRfc3RhdGUodmcsIHYsIHN0YXRlKTsKIAl9CiAKLW91dDoKJiM0MztvdXRfcmN1X3VubG9jazoKIAlyY3VfcmVhZF91bmxvY2soKTsKJiM0MztvdXQ6CiAJcmV0dXJuIGVycjsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTc6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQzOAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4KCioqSW5zcGVjdGluZyB0aGUgQ29kZSoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgcGF0Y2guIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBzZWUgaXQmIzM5O3MgdG91Y2hpbmcgYG5ldC9icmlkZ2UvYnJfbXN0LmNgLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCDigJMgTVNUUCwgYnJpZGdpbmcsIGFuZCBzcGFubmluZyB0cmVlIHByb3RvY29sLCBhbGwgY29yZSBjb25jZXB0cy4gTm93LCBsZXQgbWUgbG9jYXRlIHRoZSBhcmVhIGJlaW5nIG1vZGlmaWVkIGluIHRoYXQgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiBhcm91bmQgbGluZSAxMDcuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgYXJvdW5kIHRoYXQgc3BlY2lmaWMgbGluZSB3aWxsIGJlIGtleSB0byBncmFzcGluZyB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE3OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9tc3QuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgOTA6XHRcdFx0YnJfdmxhbl9zZXRfcHZpZF9zdGF0ZSh2Zywgc3RhdGUpO1xuICA5MTpcdFxuICA5MjpcdFx0YnJfdmxhbl9zZXRfc3RhdGUodiwgc3RhdGUpO1xuICA5MzpcdH1cbiAgOTQ6XHRcbiAgOTU6XHRpbnQgYnJfbXN0X3NldF9zdGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCB1MTYgbXN0aSwgdTggc3RhdGUsXG4gIDk2Olx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuICA5NzpcdHtcbiAgOTg6XHRcdHN0cnVjdCBzd2l0Y2hkZXZfYXR0ciBhdHRyID0ge1xuICA5OTpcdFx0XHQuaWQgPSBTV0lUQ0hERVZfQVRUUl9JRF9QT1JUX01TVF9TVEFURSxcbiAxMDA6XHRcdFx0Lm9yaWdfZGV2ID0gcC1cdTAwM2VkZXYsXG4gMTAxOlx0XHRcdC51Lm1zdF9zdGF0ZSA9IHtcbiAxMDI6XHRcdFx0XHQubXN0aSA9IG1zdGksXG4gMTAzOlx0XHRcdFx0LnN0YXRlID0gc3RhdGUsXG4gMTA0Olx0XHRcdH0sXG4gMTA1Olx0XHR9O1xuIDEwNjpcdFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmc7XG4gMTA3Olx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2O1xuIDEwODpcdFx0aW50IGVyciA9IDA7XG4gMTA5Olx0XG4gMTEwOlx0XHQvKiBNU1RJIDAgKENTVCkgc3RhdGUgY2hhbmdlcyBhcmUgbm90aWZpZWQgdmlhIHRoZSByZWd1bGFyXG4gMTExOlx0XHQgKiBTV0lUQ0hERVZfQVRUUl9JRF9QT1JUX1NUUF9TVEFURS4gQWxsIG90aGVyIE1TVElzIGFyZSBoYW5kbGVkIHZpYVxuIDExMjpcdFx0ICogbmV0bGluayB3aXRoIFJUTkwgaGVsZFxuIDExMzpcdFx0ICovXG4gMTE0Olx0XHRpZiAobXN0aSkge1xuIDExNTpcdFx0XHRBU1NFUlRfUlROTCgpO1xuIDExNjpcdFxuIDExNzpcdFx0XHRlcnIgPSBzd2l0Y2hkZXZfcG9ydF9hdHRyX3NldChwLVx1MDAzZWRldiwgXHUwMDI2YXR0ciwgZXh0YWNrKTtcbiAxMTg6XHRcdFx0aWYgKGVyciBcdTAwMjZcdTAwMjYgZXJyICE9IC1FT1BOT1RTVVBQKVxuIDExOTpcdFx0XHRcdGdvdG8gb3V0O1xuIDEyMDpcdFx0XHRlcnIgPSAwO1xuIDEyMTpcdFx0fVxuIDEyMjpcdFxuIDEyMzpcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDEyNDpcdFx0dmcgPSBuYnBfdmxhbl9ncm91cF9yY3UocCk7XG4gMTI1Olx0XHRpZiAoIXZnKVxuIDEyNjpcdFx0XHRnb3RvIG91dF9yY3VfdW5sb2NrO1xuIDEyNzpcdFxuIDEyODpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodiwgXHUwMDI2dmctXHUwMDNldmxhbl9saXN0LCB2bGlzdCkge1xuIDEyOTpcdFx0XHRpZiAodi1cdTAwM2VicnZsYW4tXHUwMDNlbXN0aSAhPSBtc3RpKVxuIDEzMDpcdFx0XHRcdGNvbnRpbnVlO1xuIDEzMTpcdFxuIDEzMjpcdFx0XHRicl9tc3Rfdmxhbl9zZXRfc3RhdGUodmcsIHYsIHN0YXRlKTtcbiAxMzM6XHRcdH1cbiAxMzQ6XHRcbiAxMzU6XHRvdXRfcmN1X3VubG9jazpcbiAxMzY6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDEzNzpcdG91dDpcbiAxMzg6XHRcdHJldHVybiBlcnI7XG4gMTM5Olx0fVxuIDE0MDpcdFxuIDE0MTpcdHN0YXRpYyB2b2lkIGJyX21zdF92bGFuX3N5bmNfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqcHYsIHUxNiBtc3RpKVxuIDE0MjpcdHtcbiAxNDM6XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnID0gbmJwX3ZsYW5fZ3JvdXAocHYtXHUwMDNlcG9ydCk7XG4gMTQ0Olx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2O1xuIDE0NTpcdFxuIDE0NjpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh2LCBcdTAwMjZ2Zy1cdTAwM2V2bGFuX2xpc3QsIHZsaXN0KSB7XG4gMTQ3Olx0XHRcdC8qIElmIHRoaXMgcG9ydCBhbHJlYWR5IGhhcyBhIGRlZmluZWQgc3RhdGUgaW4gdGhpc1xuIDE0ODpcdFx0XHQgKiBNU1RJICh0aHJvdWdoIHNvbWUgb3RoZXIgVkxBTiBtZW1iZXJzaGlwKSwgaW5oZXJpdFxuIDE0OTpcdFx0XHQgKiBpdC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTc6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU1MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqSW52ZXN0aWdhdGluZyB0aGUgYGJyX21zdC5jYCBJc3N1ZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBHaXQgaGlzdG9yeS4gTGV0IG1lIGZpcmUgdXAgYGdpdCBsb2dgIGFuZCBzZWUgd2hhdCB0aGUgY29tbWl0IGhpc3Rvcnkgb2YgYGJyX21zdC5jYCByZXZlYWxzLiBIb3BlZnVsbHksIHdoYXRldmVyIGZpeCBvciBmZWF0dXJlIHRoaXMgaXMgcmVsYXRlZCB0byB3aWxsIGJlIGFwcGFyZW50IGluIHRoZSBjb21taXQgbWVzc2FnZXMuIEkmIzM5O20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGJ1ZyB0aGlzIGNvZGUgYWRkcmVzc2VzLiBJZiB0aGUgbG9nIGlzbiYjMzk7dCBpbW1lZGlhdGVseSBoZWxwZnVsLCBJIGNhbiBzZWFyY2ggZm9yIGEgc3BlY2lmaWMgY29tbWl0IGhhc2gg4oCTIGlmIEkgaGF2ZSBvbmUg4oCTIG9yIHJlbGV2YW50IGtleXdvcmRzIHRvIHBpbnBvaW50IHRoZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gdGhlIHByb2JsZW0uIEl0JiMzOTtzIHRpbWUgdG8gYmVjb21lIGEgZGV0ZWN0aXZlIGFuZCB0cmFjayBkb3duIHRoZSByb290IGNhdXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticl9tc3Rfc2V0X3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX21zdC5jPTgyPXN0YXRpYyB2b2lkIGJyX21zdF92bGFuX3NldF9zdGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2Zyxcbi0tXG5uZXQvYnJpZGdlL2JyX21zdC5jLTk0LVxubmV0L2JyaWRnZS9icl9tc3QuYzo5NTppbnQgYnJfbXN0X3NldF9zdGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCB1MTYgbXN0aSwgdTggc3RhdGUsXG5uZXQvYnJpZGdlL2JyX21zdC5jLTk2LVx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvYnJpZGdlL2JyX21zdC5jPTMwOD1zdGF0aWMgaW50IGJyX21zdF9wcm9jZXNzX29uZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXN0LmMtMzM0LVxubmV0L2JyaWRnZS9icl9tc3QuYzozMzU6XHRyZXR1cm4gYnJfbXN0X3NldF9zdGF0ZShwLCBtc3RpLCBzdGF0ZSwgZXh0YWNrKTtcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMzM2LX1cbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xOTUwPXN0YXRpYyBpbmxpbmUgYm9vbCBicl9tc3RfaXNfZW5hYmxlZChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKVxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NTctXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTU4OmludCBicl9tc3Rfc2V0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHUxNiBtc3RpLCB1OCBzdGF0ZSxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NTktXHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xOTcxPXN0YXRpYyBpbmxpbmUgYm9vbCBicl9tc3RfaXNfZW5hYmxlZChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKVxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NzUtXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTc2OnN0YXRpYyBpbmxpbmUgaW50IGJyX21zdF9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IG1zdGksXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTc3LVx0XHRcdFx0ICAgdTggc3RhdGUsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvYnJpZGdlL2JyX3N0cC5jPTI5PXZvaWQgYnJfc2V0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHVuc2lnbmVkIGludCBzdGF0ZSlcbi0tXG5uZXQvYnJpZGdlL2JyX3N0cC5jLTQ2LVx0aWYgKGJyX29wdF9nZXQocC1cdTAwM2ViciwgQlJPUFRfTVNUX0VOQUJMRUQpKSB7XG5uZXQvYnJpZGdlL2JyX3N0cC5jOjQ3Olx0XHRlcnIgPSBicl9tc3Rfc2V0X3N0YXRlKHAsIDAsIHN0YXRlLCBOVUxMKTtcbm5ldC9icmlkZ2UvYnJfc3RwLmMtNDgtXHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE3OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzOTIKCQkJCQkJCW91dHB1dDogMjE2CgkJCQkJCQl0aG91Z2h0czogODAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29tbWl0IGZvciBDb25jdXJyZW5jeSBhbmQgTWVtb3J5IFNhZmV0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB3aGF0IHRoaXMgY29tbWl0IGlzIGRvaW5nLiBNeSBwcmltYXJ5IGNvbmNlcm4gaGVyZSBpcyB0aGF0IHRoZSBvcmlnaW5hbCBjb2RlIGhhZCBgc3dpdGNoZGV2X3BvcnRfYXR0cl9zZXQoKWAgY2FsbGVkICppbnNpZGUqIGFuIGByY3VfcmVhZF9sb2NrKClgIHNlY3Rpb24uIFRoYXQmIzM5O3MgYSBodWdlIHJlZCBmbGFnIGJlY2F1c2UgYHN3aXRjaGRldl9wb3J0X2F0dHJfc2V0YCBjYW4gcG90ZW50aWFsbHkgc2xlZXAsIHdoaWNoIGlzIGEgYmlnIG5vLW5vIHdoZW4geW91JiMzOTtyZSBpbiBhbiBhdG9taWMgY29udGV4dCBwcm90ZWN0ZWQgYnkgUkNVLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyAmIzM0O3NsZWVwaW5nIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIGludmFsaWQgY29udGV4dCYjMzQ7IGJ1Zywgb3IgYSBzY2hlZHVsaW5nLXdoaWxlLWF0b21pYyBpc3N1ZSwgb3Igc29tZXRoaW5nIHNpbWlsYXIuIFRoZXkgd2VyZSBhbHNvIGFkZGluZyBgQVNTRVJUX1JUTkwoKWAgd2hpY2ggcmVpbmZvcmNlcyB0aGF0IGNvbmNlcm4uCgpUaGUgcGF0Y2gmIzM5O3Mgc29sdXRpb24gaXMgcXVpdGUgc2Vuc2libGUuIEl0IG1vdmVzIHRoZSBvZmZlbmRpbmcgY2FsbCBvdXRzaWRlIG9mIHRoZSBgcmN1X3JlYWRfbG9jaygpYCByZWdpb24gZW50aXJlbHksIGFuZCBpbmNsdWRlcyBhbiBgQVNTRVJUX1JUTkwoKWAgY2FsbC4gSXQgYWxzbyBhZGRzIGEgcXVpY2sgY2hlY2sgZm9yIHRoZSByZXN1bHQgb2YgYHN3aXRjaGRldl9wb3J0X2F0dHJfc2V0KClgIGFuZCByZXR1cm5zIGltbWVkaWF0ZWx5IGlmIGl0IGVycm9ycywgKmJlZm9yZSogZXZlbiBhY3F1aXJpbmcgdGhlIFJDVSBsb2NrLiBGaW5hbGx5LCB0aGUgUkNVIGxvY2sgaXMgbmFycm93ZWQgdG8gb25seSBjb3ZlciB0aGUgaXRlcmF0aW9uIG92ZXIgYHZnLSZndDt2bGFuX2xpc3RgLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgaXQgc2hvdWxkIGJlIHByb3RlY3RpbmcuCgpOb3csIGxldCYjMzk7cyB0aGluayBhYm91dCBtZW1vcnkgc2FmZXR5LiBJIHNlZSB0aGF0IHRoZSBgYXR0cmAgc3RydWN0IGlzIGluaXRpYWxpemVkIHdpdGggZGVzaWduYXRlZCBpbml0aWFsaXplcnMsIHNvIHRoZSBjb21waWxlciB3aWxsIHplcm8gb3V0IHRoZSB1bm1lbnRpb25lZCBmaWVsZHMuIFRoaXMgd2FzIGFscmVhZHkgaW4gdGhlIG9yaWdpbmFsIGNvZGUsIGFuZCB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgY2hhbmdlIGFueXRoaW5nIGFib3V0ICpob3cqIGBhdHRyYCBpcyBpbml0aWFsaXplZCwgb25seSAqd2hlbiogaXQmIzM5O3MgdXNlZC4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBhcmUgaGFwcGVuaW5nIGhlcmUsIGFuZCB0aGVyZSBhcmVuJiMzOTt0IGFueSBvYnZpb3VzIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdHMgYmVpbmcgdXNlZC4gVGhpcyBjaGFuZ2UgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UuIEl0IGFsc28gZG9lc24mIzM5O3QgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGZvciBjb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcuIFNsZWVwaW5nIGluc2lkZSBhbiBhdG9taWMgY29udGV4dCBpcyBlYXNpbHkgY2F1Z2h0IGJ5IGBtaWdodF9zbGVlcCgpYCBhbmQgdGhlIHN0YW5kYXJkIGtlcm5lbCBkZWJ1ZyBjb25maWd1cmF0aW9ucy4gTG9ja2luZyBhbmQgUlROTCBhc3NlcnRpb25zIGFyZSBjYXVnaHQgYnkgUlROTCwgbG9ja2RlcCwgYW5kIGRlYnVnIGFzc2VydHMuCgpPa2F5LCBsZXQmIzM5O3MgcXVpY2tseSBjbGFyaWZ5IEtBU0FOIHZlcnN1cyBLTVNBTi4gS01TQU4gaXMgYWxsIGFib3V0IGRldGVjdGluZyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgcG90ZW50aWFsIGluZm8tbGVha3MuIEtBU0FOIGZvY3VzZXMgb24gYSBicm9hZGVyIHJhbmdlIG9mIG1lbW9yeSBlcnJvcnMuIEluIHRoaXMgY2FzZSwgdGhpcyBpcyBhIGJ1ZyBmaXggZm9yIHNsZWVwLWluLWF0b21pYywgbm90IGEgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLiBUaGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIG9yIGFsdGVyIGFueSBvZiB0aGUgdGhpbmdzIHRoYXQgS01TQU4gd291bGQgY2F0Y2guIFRoaXMgaXNuJiMzOTt0IGEgS01TQU4gaXNzdWU7IHRoaXMgaXMgYSBjb25jdXJyZW5jeS9hdG9taWMgY29udGV4dCBpc3N1ZS4gVGhlcmVmb3JlLCBOZWVkc0tNU0FOIHNob3VsZCBiZSBmYWxzZS4KClNvLCBhbGwgZ29vZC4gVGhlIHBhdGNoIGlzIGNsZWFuIGFuZCBzdHJhaWdodGZvcndhcmQuIFdlJiMzOTtyZSBnb29kIHRvIGdvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHNsZWVwLWluLWF0b21pYyBidWcgaW4gYGJyX21zdF9zZXRfc3RhdGUoKWAgYnkgbW92aW5nIGBzd2l0Y2hkZXZfcG9ydF9hdHRyX3NldCgpYCAod2hpY2ggbWF5IHNsZWVwKSBvdXRzaWRlIG9mIHRoZSBgcmN1X3JlYWRfbG9jaygpYCBjcml0aWNhbCBzZWN0aW9uLCBhZGRpbmcgYEFTU0VSVF9SVE5MKClgLCBhbmQgb25seSBhY3F1aXJpbmcgYHJjdV9yZWFkX2xvY2soKWAgd2hlbiByZWFkaW5nIHRoZSBWTEFOIGdyb3VwIGFuZCBpdGVyYXRpbmcgb3ZlciB0aGUgVkxBTiBsaXN0LlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzLCBkb2VzIG5vdCBhZmZlY3QgYnVmZmVyIGJvdW5kcyBvciBjb3B5IGxlbmd0aHMsIGFuZCBkb2VzIG5vdCBhbHRlciBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLiBTbGVlcGluZyB3aGlsZSBob2xkaW5nIGFuIFJDVSByZWFkIGxvY2sgaXMgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgZGVidWcgY29uZmlndXJhdGlvbnMgKGBDT05GSUdfREVCVUdfQVRPTUlDX1NMRUVQYCAvIGBtaWdodF9zbGVlcCgpYCksIGFuZCBsb2NrIGludmFyaWFudHMgYXJlIHZlcmlmaWVkIGJ5IGBBU1NFUlRfUlROTCgpYCAvIGBMT0NLREVQYC4gQmVjYXVzZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgc2xlZXAtaW4tYXRvbWljIGJ1ZyBpbiBgYnJfbXN0X3NldF9zdGF0ZSgpYCBieSBtb3ZpbmcgYHN3aXRjaGRldl9wb3J0X2F0dHJfc2V0KClgICh3aGljaCBtYXkgc2xlZXApIG91dHNpZGUgb2YgdGhlIGByY3VfcmVhZF9sb2NrKClgIGNyaXRpY2FsIHNlY3Rpb24sIGFkZGluZyBgQVNTRVJUX1JUTkwoKWAsIGFuZCBvbmx5IGFjcXVpcmluZyBgcmN1X3JlYWRfbG9jaygpYCB3aGVuIHJlYWRpbmcgdGhlIFZMQU4gZ3JvdXAgYW5kIGl0ZXJhdGluZyBvdmVyIHRoZSBWTEFOIGxpc3QuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMsIGRvZXMgbm90IGFmZmVjdCBidWZmZXIgYm91bmRzIG9yIGNvcHkgbGVuZ3RocywgYW5kIGRvZXMgbm90IGFsdGVyIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UuIFNsZWVwaW5nIHdoaWxlIGhvbGRpbmcgYW4gUkNVIHJlYWQgbG9jayBpcyBkZXRlY3RlZCBieSBzdGFuZGFyZCBkZWJ1ZyBjb25maWd1cmF0aW9ucyAoYENPTkZJR19ERUJVR19BVE9NSUNfU0xFRVBgIC8gYG1pZ2h0X3NsZWVwKClgKSwgYW5kIGxvY2sgaW52YXJpYW50cyBhcmUgdmVyaWZpZWQgYnkgYEFTU0VSVF9SVE5MKClgIC8gYExPQ0tERVBgLiBCZWNhdXNlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNzoxNjowOC41Njc5NjM1MTFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODUzNjU4MjgwNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlJJREdFXCIsXG4gICAgXCJCUklER0VfVkxBTl9GSUxURVJJTkdcIixcbiAgICBcIlZMQU5fODAyMVFcIixcbiAgICBcIk5FVF9TV0lUQ0hERVZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicl9tc3Rfc2V0X3N0YXRlXCIsXG4gICAgXCJicl9tc3RfcHJvY2Vzc1wiLFxuICAgIFwiYnJfbXN0X3NldF9lbmFibGVkXCIsXG4gICAgXCJicl9zZXRfc3RhdGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgc2xlZXAtaW4tYXRvbWljIGJ1ZyBpbiBgYnJfbXN0X3NldF9zdGF0ZSgpYCBieSBtb3ZpbmcgYHN3aXRjaGRldl9wb3J0X2F0dHJfc2V0KClgICh3aGljaCBtYXkgc2xlZXApIG91dHNpZGUgb2YgdGhlIGByY3VfcmVhZF9sb2NrKClgIGNyaXRpY2FsIHNlY3Rpb24sIGFkZGluZyBgQVNTRVJUX1JUTkwoKWAsIGFuZCBvbmx5IGFjcXVpcmluZyBgcmN1X3JlYWRfbG9jaygpYCB3aGVuIHJlYWRpbmcgdGhlIFZMQU4gZ3JvdXAgYW5kIGl0ZXJhdGluZyBvdmVyIHRoZSBWTEFOIGxpc3QuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcywgZG9lcyBub3QgYWZmZWN0IGJ1ZmZlciBib3VuZHMgb3IgY29weSBsZW5ndGhzLCBhbmQgZG9lcyBub3QgYWx0ZXIgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gU2xlZXBpbmcgd2hpbGUgaG9sZGluZyBhbiBSQ1UgcmVhZCBsb2NrIGlzIGRldGVjdGVkIGJ5IHN0YW5kYXJkIGRlYnVnIGNvbmZpZ3VyYXRpb25zIChgQ09ORklHX0RFQlVHX0FUT01JQ19TTEVFUGAgLyBgbWlnaHRfc2xlZXAoKWApLCBhbmQgbG9jayBpbnZhcmlhbnRzIGFyZSB2ZXJpZmllZCBieSBgQVNTRVJUX1JUTkwoKWAgLyBgTE9DS0RFUGAuIEJlY2F1c2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uIGluIGBicl9tc3Rfc2V0X3N0YXRlKClgIHdpdGhpbiB0aGUgRXRoZXJuZXQgYnJpZGdlIE1TVCBpbXBsZW1lbnRhdGlvbjogaXQgbW92ZXMgYSBwb3RlbnRpYWxseSBzbGVlcGluZyBzd2l0Y2hkZXYgY2FsbCBvdXRzaWRlIG9mIHRoZSBgcmN1X3JlYWRfbG9jaygpYCBjcml0aWNhbCBzZWN0aW9uIGFuZCBhZGRzIGFuIGBBU1NFUlRfUlROTCgpYCBpbnZhcmlhbnQgY2hlY2suIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgYWNjZXNzaWJsZSB2aWEgbmV0bGluayBhbmQgYnJpZGdlIFNUUCBjb25maWd1cmF0aW9uIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTc6MTY6MDguNTY3OTY4OTYxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE1ODIyMDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODBhNTA4NGQwMDI2YTg2NThmMzUwNmNkOTI1NzYxZWFhM2Y5NjVlZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCAxMSAxNzoxNjowNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX21zdC5jIGIvbmV0L2JyaWRnZS9icl9tc3QuY1xcbmluZGV4IDQzYTMwMGFlNmJmYWYuLjE2NTRlZmQzMDQ1YjAgMTAwNjQ0XFxuLS0tIGEvbmV0L2JyaWRnZS9icl9tc3QuY1xcbisrKyBiL25ldC9icmlkZ2UvYnJfbXN0LmNcXG5AQCAtMTA3LDIxICsxMDcsMjQgQEAgaW50IGJyX21zdF9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IG1zdGksIHU4IHN0YXRlLFxcbiBcXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2O1xcbiBcXHRpbnQgZXJyID0gMDtcXG4gXFxuLVxcdHJjdV9yZWFkX2xvY2soKTtcXG4tXFx0dmcgPSBuYnBfdmxhbl9ncm91cF9yY3UocCk7XFxuLVxcdGlmICghdmcpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbi1cXG4gXFx0LyogTVNUSSAwIChDU1QpIHN0YXRlIGNoYW5nZXMgYXJlIG5vdGlmaWVkIHZpYSB0aGUgcmVndWxhclxcbi1cXHQgKiBTV0lUQ0hERVZfQVRUUl9JRF9QT1JUX1NUUF9TVEFURS5cXG4rXFx0ICogU1dJVENIREVWX0FUVFJfSURfUE9SVF9TVFBfU1RBVEUuIEFsbCBvdGhlciBNU1RJcyBhcmUgaGFuZGxlZCB2aWFcXG4rXFx0ICogbmV0bGluayB3aXRoIFJUTkwgaGVsZFxcbiBcXHQgKi9cXG4gXFx0aWYgKG1zdGkpIHtcXG4rXFx0XFx0QVNTRVJUX1JUTkwoKTtcXG4rXFxuIFxcdFxcdGVyciA9IHN3aXRjaGRldl9wb3J0X2F0dHJfc2V0KHAtXFx1MDAzZWRldiwgXFx1MDAyNmF0dHIsIGV4dGFjayk7XFxuIFxcdFxcdGlmIChlcnIgXFx1MDAyNlxcdTAwMjYgZXJyICE9IC1FT1BOT1RTVVBQKVxcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0ZXJyID0gMDtcXG4gXFx0fVxcbiBcXG4tXFx0ZXJyID0gMDtcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHR2ZyA9IG5icF92bGFuX2dyb3VwX3JjdShwKTtcXG4rXFx0aWYgKCF2ZylcXG4rXFx0XFx0Z290byBvdXRfcmN1X3VubG9jaztcXG4rXFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHYsIFxcdTAwMjZ2Zy1cXHUwMDNldmxhbl9saXN0LCB2bGlzdCkge1xcbiBcXHRcXHRpZiAodi1cXHUwMDNlYnJ2bGFuLVxcdTAwM2Vtc3RpICE9IG1zdGkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbkBAIC0xMjksOCArMTMyLDkgQEAgaW50IGJyX21zdF9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IG1zdGksIHU4IHN0YXRlLFxcbiBcXHRcXHRicl9tc3Rfdmxhbl9zZXRfc3RhdGUodmcsIHYsIHN0YXRlKTtcXG4gXFx0fVxcbiBcXG4tb3V0OlxcbitvdXRfcmN1X3VubG9jazpcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK291dDpcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTc6MTY6MDkuOTg0NDQxNjExWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMjk4NTA5NjQwMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlJJREdFXCIsXG4gICAgXCJCUklER0VfVkxBTl9GSUxURVJJTkdcIixcbiAgICBcIlZMQU5fODAyMVFcIixcbiAgICBcIk5FVF9TV0lUQ0hERVZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicl9tc3Rfc2V0X3N0YXRlXCIsXG4gICAgXCJicl9tc3RfcHJvY2Vzc1wiLFxuICAgIFwiYnJfbXN0X3NldF9lbmFibGVkXCIsXG4gICAgXCJicl9zZXRfc3RhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBsb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24gaW4gYGJyX21zdF9zZXRfc3RhdGUoKWAgd2l0aGluIHRoZSBFdGhlcm5ldCBicmlkZ2UgTVNUIGltcGxlbWVudGF0aW9uOiBpdCBtb3ZlcyBhIHBvdGVudGlhbGx5IHNsZWVwaW5nIHN3aXRjaGRldiBjYWxsIG91dHNpZGUgb2YgdGhlIGByY3VfcmVhZF9sb2NrKClgIGNyaXRpY2FsIHNlY3Rpb24gYW5kIGFkZHMgYW4gYEFTU0VSVF9SVE5MKClgIGludmFyaWFudCBjaGVjay4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rIGFuZCBicmlkZ2UgU1RQIGNvbmZpZ3VyYXRpb24gaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDgwYTUwODRkMDAyNmE4NjU4ZjM1MDZjZDkyNTc2MWVhYTNmOTY1ZWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAxNzoxNjowNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbXN0LmMgYi9uZXQvYnJpZGdlL2JyX21zdC5jXG5pbmRleCA0M2EzMDBhZTZiZmFmLi4xNjU0ZWZkMzA0NWIwIDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9tc3QuY1xuKysrIGIvbmV0L2JyaWRnZS9icl9tc3QuY1xuQEAgLTEwNywyMSArMTA3LDI0IEBAIGludCBicl9tc3Rfc2V0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHUxNiBtc3RpLCB1OCBzdGF0ZSxcbiBcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnY7XG4gXHRpbnQgZXJyID0gMDtcbiBcbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cdHZnID0gbmJwX3ZsYW5fZ3JvdXBfcmN1KHApO1xuLVx0aWYgKCF2Zylcbi1cdFx0Z290byBvdXQ7XG4tXG4gXHQvKiBNU1RJIDAgKENTVCkgc3RhdGUgY2hhbmdlcyBhcmUgbm90aWZpZWQgdmlhIHRoZSByZWd1bGFyXG4tXHQgKiBTV0lUQ0hERVZfQVRUUl9JRF9QT1JUX1NUUF9TVEFURS5cbitcdCAqIFNXSVRDSERFVl9BVFRSX0lEX1BPUlRfU1RQX1NUQVRFLiBBbGwgb3RoZXIgTVNUSXMgYXJlIGhhbmRsZWQgdmlhXG4rXHQgKiBuZXRsaW5rIHdpdGggUlROTCBoZWxkXG4gXHQgKi9cbiBcdGlmIChtc3RpKSB7XG4rXHRcdEFTU0VSVF9SVE5MKCk7XG4rXG4gXHRcdGVyciA9IHN3aXRjaGRldl9wb3J0X2F0dHJfc2V0KHAtXHUwMDNlZGV2LCBcdTAwMjZhdHRyLCBleHRhY2spO1xuIFx0XHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBlcnIgIT0gLUVPUE5PVFNVUFApXG4gXHRcdFx0Z290byBvdXQ7XG4rXHRcdGVyciA9IDA7XG4gXHR9XG4gXG4tXHRlcnIgPSAwO1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0dmcgPSBuYnBfdmxhbl9ncm91cF9yY3UocCk7XG4rXHRpZiAoIXZnKVxuK1x0XHRnb3RvIG91dF9yY3VfdW5sb2NrO1xuK1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodiwgXHUwMDI2dmctXHUwMDNldmxhbl9saXN0LCB2bGlzdCkge1xuIFx0XHRpZiAodi1cdTAwM2VicnZsYW4tXHUwMDNlbXN0aSAhPSBtc3RpKVxuIFx0XHRcdGNvbnRpbnVlO1xuQEAgLTEyOSw4ICsxMzIsOSBAQCBpbnQgYnJfbXN0X3NldF9zdGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCB1MTYgbXN0aSwgdTggc3RhdGUsXG4gXHRcdGJyX21zdF92bGFuX3NldF9zdGF0ZSh2Zywgdiwgc3RhdGUpO1xuIFx0fVxuIFxuLW91dDpcbitvdXRfcmN1X3VubG9jazpcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuK291dDpcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTc6MTY6MDkuOTg0NDQ0NzMxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTI5MTk3NTMzNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgc3l6a2FsbGVyIFBhdGNoIGZvciBBTUQ2NCBBcmNoaXRlY3R1cmUqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBzeXprYWxsZXIgcGF0Y2guIFRoZSB1c2VyIHdhbnRzIG1lIHRvIGV2YWx1YXRlIGl0LCBmb2N1c2luZyBvbiB0aGUgYGFtZDY0YCBhcmNoaXRlY3R1cmUuIFRoZSB0YXJnZXQgZmlsZSBpcyBgbmV0L2JyaWRnZS9icl9tc3QuY2AsIHNwZWNpZmljYWxseSB0aGUgYGJyX21zdF9zZXRfc3RhdGVgIGZ1bmN0aW9uLlxuXG5Mb29raW5nIGF0IHRoZSBkaWZmLCB0aGUgbWFpbiBjaGFuZ2Ugc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBob3cgTVNUSXMgKE11bHRpcGxlIFNwYW5uaW5nIFRyZWUgSW5zdGFuY2VzKSBhcmUgaGFuZGxlZC4gIFRoZSBjb2RlIG5vdyBleHBsaWNpdGx5IG5vdGVzIHRoYXQgY2hhbmdlcyB0byBNU1RJIDAgYXJlIGhhbmRsZWQgZGlmZmVyZW50bHkgdmlhIGBTV0lUQ0hERVZfQVRUUl9JRF9QT1JUX1NUUF9TVEFURWAsIHdoaWNoIGlzIGV4cGVjdGVkLCB3aGlsZSBvdGhlciBNU1RJcyByZXF1aXJlIG5ldGxpbmsgY29tbXVuaWNhdGlvbiB3aXRoIFJUTkwgaGVsZC4gQSBnb29kIGFkZGl0aW9uIGlzIHRoZSBgQVNTRVJUX1JUTkwoKWAgY2FsbCB3aXRoaW4gdGhlIGBpZiAobXN0aSlgIGJsb2NrLiBUaGlzIGlzIGEgdmVyeSB3ZWxjb21lIHNhbml0eSBjaGVjay4gSXQgY2xlYXJseSBpbmRpY2F0ZXMgdGhhdCB0aGUgY29kZSBleHBlY3RzIHRoZSBSVE5MIGxvY2sgdG8gYmUgaGVsZCBmb3Igbm9uLUNTVCBNU1RJIHN0YXRlIGNoYW5nZXMsIHdoaWNoIGlzIGNydWNpYWwgZm9yIHN5bmNocm9uaXphdGlvbi5cblxuVGhlIHBhdGNoIGFsc28gc2VlbXMgdG8gcmVvcmRlciBhIGxpdHRsZS4gVGhlIGByY3VfcmVhZF9sb2NrYCBhbmQgYHJjdV9yZWFkX3VubG9ja2AgY2FsbHMgaGF2ZSBiZWVuIG1vdmVkIGFyb3VuZC4gVGhleSBub3cgYnJhY2tldCB0aGUgVkxBTiBsaXN0IHRyYXZlcnNhbC4gTG9va3MgZ29vZCB0byBtZSwgYXMgdGhpcyBpcyB0aGUgc3RhbmRhcmQgcGF0dGVybi4gV2UgZW5zdXJlIHRoYXQgd2UgcmVsZWFzZSB0aGUgUkNVIGxvY2ssIGluIGNhc2Ugb2YgYW4gZXJyb3IsIHdoaWNoIGlzIHRoZSBkZXNpcmVkIGJlaGF2aW9yIGFuZCBwcmV2ZW50cyBwb3RlbnRpYWwgaXNzdWVzLiBUaGUgYGdvdG9gIGxhYmVscyBoYXZlIGJlZW4gdXBkYXRlZCB0byByZWZsZWN0IHRoZSBSQ1UgY2hhbmdlcyB0b28uXG5cbkknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHRoZSBjb21taXQgbWVzc2FnZSB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZXNlIGNoYW5nZXMgYW5kIGVuc3VyZSB0aGlzIGlzIGEgY29ycmVjdCBhbmQgc2FmZSBhcHByb2FjaC4gSSdsbCBuZWVkIHRvIHVzZSBteSB0b29scyB0byBkbyBzby4gT3ZlcmFsbCwgdGhvdWdoLCB0aGUgcGF0Y2ggc2VlbXMgcmVhc29uYWJsZSBhbmQgYWRkcmVzc2VzIGEgc3BlY2lmaWMgbnVhbmNlIGluIE1TVCBoYW5kbGluZy4gSSdsbCBmbGFnIHRoZSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIFJUTkwgbG9jayBhbmQgdGhlIHRpbWluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIyNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE3OjE2OjIyLjkwNDIwMDE1NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9icmlkZ2UvYnJfbXN0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgOTA6XFx0XFx0XFx0YnJfdmxhbl9zZXRfcHZpZF9zdGF0ZSh2Zywgc3RhdGUpO1xcbiAgOTE6XFx0XFxuICA5MjpcXHRcXHRicl92bGFuX3NldF9zdGF0ZSh2LCBzdGF0ZSk7XFxuICA5MzpcXHR9XFxuICA5NDpcXHRcXG4gIDk1OlxcdGludCBicl9tc3Rfc2V0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHUxNiBtc3RpLCB1OCBzdGF0ZSxcXG4gIDk2OlxcdFxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiAgOTc6XFx0e1xcbiAgOTg6XFx0XFx0c3RydWN0IHN3aXRjaGRldl9hdHRyIGF0dHIgPSB7XFxuICA5OTpcXHRcXHRcXHQuaWQgPSBTV0lUQ0hERVZfQVRUUl9JRF9QT1JUX01TVF9TVEFURSxcXG4gMTAwOlxcdFxcdFxcdC5vcmlnX2RldiA9IHAtXFx1MDAzZWRldixcXG4gMTAxOlxcdFxcdFxcdC51Lm1zdF9zdGF0ZSA9IHtcXG4gMTAyOlxcdFxcdFxcdFxcdC5tc3RpID0gbXN0aSxcXG4gMTAzOlxcdFxcdFxcdFxcdC5zdGF0ZSA9IHN0YXRlLFxcbiAxMDQ6XFx0XFx0XFx0fSxcXG4gMTA1OlxcdFxcdH07XFxuIDEwNjpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZztcXG4gMTA3OlxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnY7XFxuIDEwODpcXHRcXHRpbnQgZXJyID0gMDtcXG4gMTA5OlxcdFxcbiAxMTA6XFx0XFx0LyogTVNUSSAwIChDU1QpIHN0YXRlIGNoYW5nZXMgYXJlIG5vdGlmaWVkIHZpYSB0aGUgcmVndWxhclxcbiAxMTE6XFx0XFx0ICogU1dJVENIREVWX0FUVFJfSURfUE9SVF9TVFBfU1RBVEUuIEFsbCBvdGhlciBNU1RJcyBhcmUgaGFuZGxlZCB2aWFcXG4gMTEyOlxcdFxcdCAqIG5ldGxpbmsgd2l0aCBSVE5MIGhlbGRcXG4gMTEzOlxcdFxcdCAqL1xcbiAxMTQ6XFx0XFx0aWYgKG1zdGkpIHtcXG4gMTE1OlxcdFxcdFxcdEFTU0VSVF9SVE5MKCk7XFxuIDExNjpcXHRcXG4gMTE3OlxcdFxcdFxcdGVyciA9IHN3aXRjaGRldl9wb3J0X2F0dHJfc2V0KHAtXFx1MDAzZWRldiwgXFx1MDAyNmF0dHIsIGV4dGFjayk7XFxuIDExODpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwMjZcXHUwMDI2IGVyciAhPSAtRU9QTk9UU1VQUClcXG4gMTE5OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiAxMjA6XFx0XFx0XFx0ZXJyID0gMDtcXG4gMTIxOlxcdFxcdH1cXG4gMTIyOlxcdFxcbiAxMjM6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiAxMjQ6XFx0XFx0dmcgPSBuYnBfdmxhbl9ncm91cF9yY3UocCk7XFxuIDEyNTpcXHRcXHRpZiAoIXZnKVxcbiAxMjY6XFx0XFx0XFx0Z290byBvdXRfcmN1X3VubG9jaztcXG4gMTI3OlxcdFxcbiAxMjg6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodiwgXFx1MDAyNnZnLVxcdTAwM2V2bGFuX2xpc3QsIHZsaXN0KSB7XFxuIDEyOTpcXHRcXHRcXHRpZiAodi1cXHUwMDNlYnJ2bGFuLVxcdTAwM2Vtc3RpICE9IG1zdGkpXFxuIDEzMDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gMTMxOlxcdFxcbiAxMzI6XFx0XFx0XFx0YnJfbXN0X3ZsYW5fc2V0X3N0YXRlKHZnLCB2LCBzdGF0ZSk7XFxuIDEzMzpcXHRcXHR9XFxuIDEzNDpcXHRcXG4gMTM1OlxcdG91dF9yY3VfdW5sb2NrOlxcbiAxMzY6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDEzNzpcXHRvdXQ6XFxuIDEzODpcXHRcXHRyZXR1cm4gZXJyO1xcbiAxMzk6XFx0fVxcbiAxNDA6XFx0XFxuIDE0MTpcXHRzdGF0aWMgdm9pZCBicl9tc3Rfdmxhbl9zeW5jX3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnB2LCB1MTYgbXN0aSlcXG4gMTQyOlxcdHtcXG4gMTQzOlxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnID0gbmJwX3ZsYW5fZ3JvdXAocHYtXFx1MDAzZXBvcnQpO1xcbiAxNDQ6XFx0XFx0c3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdjtcXG4gMTQ1OlxcdFxcbiAxNDY6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh2LCBcXHUwMDI2dmctXFx1MDAzZXZsYW5fbGlzdCwgdmxpc3QpIHtcXG4gMTQ3OlxcdFxcdFxcdC8qIElmIHRoaXMgcG9ydCBhbHJlYWR5IGhhcyBhIGRlZmluZWQgc3RhdGUgaW4gdGhpc1xcbiAxNDg6XFx0XFx0XFx0ICogTVNUSSAodGhyb3VnaCBzb21lIG90aGVyIFZMQU4gbWVtYmVyc2hpcCksIGluaGVyaXRcXG4gMTQ5OlxcdFxcdFxcdCAqIGl0LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNzoxNjoyMi45MDQyNzI1MTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNjAwNDc0ODA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBicl9tc3Rfc2V0X3N0YXRlYCBDYWxsZXJzIGFuZCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgYnJfbXN0X3NldF9zdGF0ZWAgaXMgYmVpbmcgdXNlZC4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGwgc2l0ZXMuIFRoYXTigJlzIHRoZSBtb3N0IGVmZmljaWVudCBzdGFydGluZyBwb2ludC4gSSB3YW50IHRvIHNlZSB3aGljaCBvdGhlciBtb2R1bGVzIG9yIGZ1bmN0aW9ucyBkZXBlbmQgb24gaXQgYW5kIHdoYXQgYXJndW1lbnRzIHRoZXkgYXJlIHBhc3NpbmcuIFRoaXMgd2lsbCBpbW1lZGlhdGVseSBjbHVlIG1lIGludG8gdGhlIHNjZW5hcmlvcyB0aGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGZvci5cblxuRnJvbSB0aGVyZSwgSSdsbCBkcmlsbCBkb3duIG9uIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEdpdmVuIHRoZSBmdW5jdGlvbidzIG5hbWUgYW5kIGdlbmVyYWwgcHVycG9zZSwgSSBhbnRpY2lwYXRlIGl0J2xsIGJlIGhlYXZpbHkgaW5mbHVlbmNlZCBieSBNU1QgKE11bHRpcGxlIFNwYW5uaW5nIFRyZWUpIHNldHVwLiBCdXQgSSBhbHNvIGV4cGVjdCBpdCBtYXkgZGVwZW5kIG9uIHRoZSBicmlkZ2UgY29uZmlndXJhdGlvbiBhcyBhIHdob2xlLiBXaGF0IGZsYWdzIGFyZSBzZXQsIHdoaWNoIFZMQU5zIGFyZSBpbnZvbHZlZD8gSeKAmWxsIG5lZWQgdG8gYW5hbHl6ZSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgd2hpY2ggY29uZmlnIHBhcmFtZXRlcnMgYXJlIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdW5jdGlvbidzIG9wZXJhdGlvbmFsIGNvbnRleHQuIEknbSB0aGlua2luZyBJJ2xsIG5lZWQgdG8gZm9jdXMgb24gd2hhdCB0aGUgZnVuY3Rpb24gZXhwZWN0cyBhbmQgaG93IHRoZSBzdGF0ZSBpcyBiZWluZyBtYW5hZ2VkIGV4dGVybmFsbHksIG9yIGlmIHRoZSBmdW5jdGlvbiBpcyBjb250cm9sbGluZyB0aGF0IHN0YXRlIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGluIHBsYXkuIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIHRlbGxzIG1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTA4LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNzoxNjoyNS41MDQ3NDkzMjRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzODg4Nzc1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicl9tc3Rfc2V0X3N0YXRlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfbXN0LmM9ODI9c3RhdGljIHZvaWQgYnJfbXN0X3ZsYW5fc2V0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tc3QuYy05NC1cXG5uZXQvYnJpZGdlL2JyX21zdC5jOjk1OmludCBicl9tc3Rfc2V0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHUxNiBtc3RpLCB1OCBzdGF0ZSxcXG5uZXQvYnJpZGdlL2JyX21zdC5jLTk2LVxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tc3QuYz0zMDg9c3RhdGljIGludCBicl9tc3RfcHJvY2Vzc19vbmUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMzM0LVxcbm5ldC9icmlkZ2UvYnJfbXN0LmM6MzM1OlxcdHJldHVybiBicl9tc3Rfc2V0X3N0YXRlKHAsIG1zdGksIHN0YXRlLCBleHRhY2spO1xcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMzM2LX1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE5NTA9c3RhdGljIGlubGluZSBib29sIGJyX21zdF9pc19lbmFibGVkKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTU3LVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE5NTg6aW50IGJyX21zdF9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IG1zdGksIHU4IHN0YXRlLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NTktXFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTk3MT1zdGF0aWMgaW5saW5lIGJvb2wgYnJfbXN0X2lzX2VuYWJsZWQoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NzUtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTk3NjpzdGF0aWMgaW5saW5lIGludCBicl9tc3Rfc2V0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHUxNiBtc3RpLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NzctXFx0XFx0XFx0XFx0ICAgdTggc3RhdGUsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfc3RwLmM9Mjk9dm9pZCBicl9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdW5zaWduZWQgaW50IHN0YXRlKVxcbi0tXFxubmV0L2JyaWRnZS9icl9zdHAuYy00Ni1cXHRpZiAoYnJfb3B0X2dldChwLVxcdTAwM2ViciwgQlJPUFRfTVNUX0VOQUJMRUQpKSB7XFxubmV0L2JyaWRnZS9icl9zdHAuYzo0NzpcXHRcXHRlcnIgPSBicl9tc3Rfc2V0X3N0YXRlKHAsIDAsIHN0YXRlLCBOVUxMKTtcXG5uZXQvYnJpZGdlL2JyX3N0cC5jLTQ4LVxcdFxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE3OjE2OjI3LjE0MzY3NzM2OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ4ODgyMzkwMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTVFAgU3RhdGUgQ2hhbmdlIGluIE5ldHdvcmsgQnJpZGdlIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHJlY2VudCBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgYSBrZXkgY2hhbmdlLiBQcmV2aW91c2x5LCB3ZSBoYWQgYHN3aXRjaGRldl9wb3J0X2F0dHJfc2V0KHAtXHUwMDNlZGV2LCBcdTAwMjZhdHRyLCBleHRhY2spYCBydW5uaW5nIHdpdGhpbiBhbiBgcmN1X3JlYWRfbG9jaygpYCBibG9jay4gVGhhdCdzIGEgcmVkIGZsYWchIGBzd2l0Y2hkZXZfcG9ydF9hdHRyX3NldGAgY2FuIHBvdGVudGlhbGx5IHNsZWVwLCB0cmlnZ2VyIGRyaXZlciBjYWxsYmFja3MsIG9yIGRvIGFsbCBzb3J0cyBvZiB0aGluZ3MgdGhhdCBhcmUgaW5jb21wYXRpYmxlIHdpdGggaG9sZGluZyBhbiBSQ1UgcmVhZCBsb2NrLiBUaGUgb2xkIGNvZGUgd2FzOlxuXG5gYGBjXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHR2ZyA9IG5icF92bGFuX2dyb3VwX3JjdShwKTtcbi1cdGlmICghdmcpXG4tXHRcdGdvdG8gb3V0O1xuYGBgXG5cbkFuZCBub3cgbG9va3MgbGlrZSB0aGlzOlxuXG5gYGBjXG4gXHQvKiBNU1RJIDAgKENTVCkgc3RhdGUgY2hhbmdlcyBhcmUgbm90aWZpZWQgdmlhIHRoZSByZWd1bGFyXG4tXHQgKiBTV0lUQ0hERVZfQVRUUl9JRF9QT1JUX1NUUF9TVEFURS5cbitcdCAqIFNXSVRDSERFVl9BVFRSX0lEX1BPUlRfU1RQX1NUQVRFLiBBbGwgb3RoZXIgTVNUSXMgYXJlIGhhbmRsZWQgdmlhXG4rXHQgKiBuZXRsaW5rIHdpdGggUlROTCBoZWxkXG4gXHQgKi9cbiBcdGlmIChtc3RpKSB7XG4rXHRcdEFTU0VSVF9SVE5MKCk7XG4rXG4gXHRcdGVyciA9IHN3aXRjaGRldl9wb3J0X2F0dHJfc2V0KHAtXHUwMDNlZGV2LCBcdTAwMjZhdHRyLCBleHRhY2spO1xuIFx0XHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBlcnIgIT0gLUVPUE5PVFNVUFApXG4gXHRcdFx0Z290byBvdXQ7XG4rXHRcdGVyciA9IDA7XG4gXHR9XG5gYGBcblxuVGhlIHBhdGNoIGNsZWFybHkgYWRkcmVzc2VzIHRoaXMgYnkgbW92aW5nIHRoZSBjYWxsIG91dHNpZGUgdGhlIFJDVSByZWFkIGxvY2sgYW5kLCBjcnVjaWFsbHksIGFkZGluZyBhbiBgQVNTRVJUX1JUTkwoKWAgY2hlY2suIEFoYSEgVGhpcyBpcyBpbnRlcmVzdGluZy4gVGhpcyBgQVNTRVJUX1JUTkwoKWAgY2FsbCBpcyBlcXVpdmFsZW50IHRvIGBSVE5MX1dBUk5fVU5MT0NLRUQoKWAuICBUaGUgY29tbWVudCBpbiB0aGUgcGF0Y2ggaXMgYWxzbyBzaWduaWZpY2FudC4gIEl0IHJlbWluZHMgdXMgdGhhdCAqYW55KiBuZXcgYXNzZXJ0aW9uLCBvciBtb2RpZmljYXRpb24gdG8gb25lLCB0aGF0J3MgaW4gYSByZWFjaGFibGUgY29kZSBwYXRoIG5lZWRzIHRvIGJlIHRob3JvdWdobHkgZnV6emVkLiBUaGF0IG1lYW5zIHdlJ3JlIGVuZm9yY2luZyBhIG5ldyBpbnZhcmlhbnQ6IHdlICptdXN0KiBob2xkIHRoZSBSVE5MIGR1cmluZyB0aGlzIHBvcnRpb24gb2YgdGhlIGNvZGUgd2hlbiBoYW5kbGluZyBNU1RJcyBvdGhlciB0aGFuIE1TVEkgMCwgc28gZnV6emluZyBpcyBnb2luZyB0byBiZSBpbXBvcnRhbnQgdG8gdmVyaWZ5IHRoZSBSVE5MIGlzIGFsd2F5cyBoZWxkIHVuZGVyIGFsbCBjaXJjdW1zdGFuY2VzLiBJIHNob3VsZCBjaGVjayBob3cgYGJyX21zdC5jYCBpcyBjb21waWxlZCBhbmQgd2hhdCBLY29uZmlnIG9wdGlvbnMgYXJlIGludm9sdmVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwMzYsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTc6MTY6MzIuMDMxOTIwNjY2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MTgxOTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyX21zdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvTWFrZWZpbGU9MjE9YnJpZGdlLSQoQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HKSArPSBicl9tdWx0aWNhc3QubyBicl9tZGIubyBicl9tdWx0aWNhc3RfZWh0Lm9cXG5uZXQvYnJpZGdlL01ha2VmaWxlLTIyLVxcbm5ldC9icmlkZ2UvTWFrZWZpbGU6MjM6YnJpZGdlLSQoQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklORykgKz0gYnJfdmxhbi5vIGJyX3ZsYW5fdHVubmVsLm8gYnJfdmxhbl9vcHRpb25zLm8gYnJfbXN0Lm9cXG5uZXQvYnJpZGdlL01ha2VmaWxlLTI0LVxcbi0tXFxubmV0L2JyaWRnZS9ici5jPTI5ND1pbnQgYnJfYm9vbG9wdF90b2dnbGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBlbnVtIGJyX2Jvb2xvcHRfaWQgb3B0LCBib29sIG9uLFxcbi0tXFxubmV0L2JyaWRnZS9ici5jLTMwNi1cXHRjYXNlIEJSX0JPT0xPUFRfTVNUX0VOQUJMRTpcXG5uZXQvYnJpZGdlL2JyLmM6MzA3OlxcdFxcdGVyciA9IGJyX21zdF9zZXRfZW5hYmxlZChiciwgb24sIGV4dGFjayk7XFxubmV0L2JyaWRnZS9ici5jLTMwOC1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jPTIxPXN0YXRpYyBpbmxpbmUgaW50IHNob3VsZF9kZWxpdmVyKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0yNy1cXHRyZXR1cm4gKHRlc3RfYml0KEJSX0hBSVJQSU5fTU9ERV9CSVQsIFxcdTAwMjZwLVxcdTAwM2VmbGFncykgfHwgc2tiLVxcdTAwM2VkZXYgIT0gcC1cXHUwMDNlZGV2KSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jOjI4OlxcdFxcdChicl9tc3RfaXNfZW5hYmxlZChwKSB8fCBwLVxcdTAwM2VzdGF0ZSA9PSBCUl9TVEFURV9GT1JXQVJESU5HKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jLTI5LVxcdFxcdGJyX2FsbG93ZWRfZWdyZXNzKHZnLCBza2IpIFxcdTAwMjZcXHUwMDI2IG5icF9zd2l0Y2hkZXZfYWxsb3dlZF9lZ3Jlc3MocCwgc2tiKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubmV0L2JyaWRnZS9icl9pZi5jPTM4MT12b2lkIGJyX2Rldl9kZWxldGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaWYuYy0zODktXFxubmV0L2JyaWRnZS9icl9pZi5jOjM5MDpcXHRicl9tc3RfdW5pbml0KGJyKTtcXG5uZXQvYnJpZGdlL2JyX2lmLmMtMzkxLVxcdGJyX3JlY2FsY3VsYXRlX25laWdoX3N1cHByZXNzX2VuYWJsZWQoYnIpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTc2PWludCBicl9oYW5kbGVfZnJhbWVfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTk2LVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo5NzpcXHRpZiAoYnJfbXN0X2lzX2VuYWJsZWQocCkpIHtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtOTgtXFx0XFx0c3RhdGUgPSBCUl9TVEFURV9GT1JXQVJESU5HO1xcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTM0Nz1zdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBicl9oYW5kbGVfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTQ0MC1mb3J3YXJkOlxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo0NDE6XFx0aWYgKGJyX21zdF9pc19lbmFibGVkKHApKVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy00NDItXFx0XFx0Z290byBkZWZlcl9zdHBfZmlsdGVyaW5nO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tc3QuYy0xMy1cXG5uZXQvYnJpZGdlL2JyX21zdC5jOjE0OkRFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGJyX21zdF91c2VkKTtcXG5uZXQvYnJpZGdlL2JyX21zdC5jLTE1LVxcbm5ldC9icmlkZ2UvYnJfbXN0LmM6MTY6Ym9vbCBicl9tc3RfZW5hYmxlZChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMTcte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tc3QuYy0yMi19XFxubmV0L2JyaWRnZS9icl9tc3QuYzoyMzpFWFBPUlRfU1lNQk9MX0dQTChicl9tc3RfZW5hYmxlZCk7XFxubmV0L2JyaWRnZS9icl9tc3QuYy0yNC1cXG5uZXQvYnJpZGdlL2JyX21zdC5jOjI1OnZvaWQgYnJfbXN0X3VuaW5pdChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXFxubmV0L2JyaWRnZS9icl9tc3QuYy0yNi17XFxubmV0L2JyaWRnZS9icl9tc3QuYy0yNy1cXHRpZiAoYnJfb3B0X2dldChiciwgQlJPUFRfTVNUX0VOQUJMRUQpKVxcbm5ldC9icmlkZ2UvYnJfbXN0LmM6Mjg6XFx0XFx0c3RhdGljX2JyYW5jaF9kZWMoXFx1MDAyNmJyX21zdF91c2VkKTtcXG5uZXQvYnJpZGdlL2JyX21zdC5jLTI5LX1cXG5uZXQvYnJpZGdlL2JyX21zdC5jLTMwLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmM6MzE6aW50IGJyX21zdF9nZXRfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgbXN0aSwgdW5zaWduZWQgbG9uZyAqdmlkcylcXG5uZXQvYnJpZGdlL2JyX21zdC5jLTMyLXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtNTQtfVxcbm5ldC9icmlkZ2UvYnJfbXN0LmM6NTU6RVhQT1JUX1NZTUJPTF9HUEwoYnJfbXN0X2dldF9pbmZvKTtcXG5uZXQvYnJpZGdlL2JyX21zdC5jLTU2LVxcbm5ldC9icmlkZ2UvYnJfbXN0LmM6NTc6aW50IGJyX21zdF9nZXRfc3RhdGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IG1zdGksIHU4ICpzdGF0ZSlcXG5uZXQvYnJpZGdlL2JyX21zdC5jLTU4LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtNzktfVxcbm5ldC9icmlkZ2UvYnJfbXN0LmM6ODA6RVhQT1JUX1NZTUJPTF9HUEwoYnJfbXN0X2dldF9zdGF0ZSk7XFxubmV0L2JyaWRnZS9icl9tc3QuYy04MS1cXG5uZXQvYnJpZGdlL2JyX21zdC5jOjgyOnN0YXRpYyB2b2lkIGJyX21zdF92bGFuX3NldF9zdGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZyxcXG5uZXQvYnJpZGdlL2JyX21zdC5jLTgzLVxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtOTQtXFxubmV0L2JyaWRnZS9icl9tc3QuYzo5NTppbnQgYnJfbXN0X3NldF9zdGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCB1MTYgbXN0aSwgdTggc3RhdGUsXFxubmV0L2JyaWRnZS9icl9tc3QuYy05Ni1cXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMTMxLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmM6MTMyOlxcdFxcdGJyX21zdF92bGFuX3NldF9zdGF0ZSh2Zywgdiwgc3RhdGUpO1xcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMTMzLVxcdH1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMTQwLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmM6MTQxOnN0YXRpYyB2b2lkIGJyX21zdF92bGFuX3N5bmNfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqcHYsIHUxNiBtc3RpKVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMTQyLXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMTUxLVxcdFxcdGlmICh2ICE9IHB2IFxcdTAwMjZcXHUwMDI2IHYtXFx1MDAzZWJydmxhbi1cXHUwMDNlbXN0aSA9PSBtc3RpKSB7XFxubmV0L2JyaWRnZS9icl9tc3QuYzoxNTI6XFx0XFx0XFx0YnJfbXN0X3ZsYW5fc2V0X3N0YXRlKHZnLCBwdiwgdi1cXHUwMDNlc3RhdGUpO1xcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMTUzLVxcdFxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMTU3LVxcdC8qIE90aGVyd2lzZSwgc3RhcnQgb3V0IGluIGEgbmV3IE1TVEkgd2l0aCBhbGwgcG9ydHMgZGlzYWJsZWQuICovXFxubmV0L2JyaWRnZS9icl9tc3QuYzoxNTg6XFx0cmV0dXJuIGJyX21zdF92bGFuX3NldF9zdGF0ZSh2ZywgcHYsIEJSX1NUQVRFX0RJU0FCTEVEKTtcXG5uZXQvYnJpZGdlL2JyX21zdC5jLTE1OS19XFxubmV0L2JyaWRnZS9icl9tc3QuYy0xNjAtXFxubmV0L2JyaWRnZS9icl9tc3QuYzoxNjE6aW50IGJyX21zdF92bGFuX3NldF9tc3RpKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKm12LCB1MTYgbXN0aSlcXG5uZXQvYnJpZGdlL2JyX21zdC5jLTE2Mi17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21zdC5jLTE4OS1cXHRcXHRpZiAocHYpXFxubmV0L2JyaWRnZS9icl9tc3QuYzoxOTA6XFx0XFx0XFx0YnJfbXN0X3ZsYW5fc3luY19zdGF0ZShwdiwgbXN0aSk7XFxubmV0L2JyaWRnZS9icl9tc3QuYy0xOTEtXFx0fVxcbi0tXFxubmV0L2JyaWRnZS9icl9tc3QuYy0xOTUtXFxubmV0L2JyaWRnZS9icl9tc3QuYzoxOTY6dm9pZCBicl9tc3Rfdmxhbl9pbml0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYpXFxubmV0L2JyaWRnZS9icl9tc3QuYy0xOTcte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tc3QuYy0yMDYtXFxubmV0L2JyaWRnZS9icl9tc3QuYzoyMDc6aW50IGJyX21zdF9zZXRfZW5hYmxlZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXFxubmV0L2JyaWRnZS9icl9tc3QuYy0yMDgtXFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMjM3LVxcdGlmIChvbilcXG5uZXQvYnJpZGdlL2JyX21zdC5jOjIzODpcXHRcXHRzdGF0aWNfYnJhbmNoX2luYyhcXHUwMDI2YnJfbXN0X3VzZWQpO1xcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMjM5LVxcdGVsc2VcXG5uZXQvYnJpZGdlL2JyX21zdC5jOjI0MDpcXHRcXHRzdGF0aWNfYnJhbmNoX2RlYyhcXHUwMDI2YnJfbXN0X3VzZWQpO1xcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMjQxLVxcbi0tXFxubmV0L2JyaWRnZS9icl9tc3QuYy0yNDUtXFxubmV0L2JyaWRnZS9icl9tc3QuYzoyNDY6c2l6ZV90IGJyX21zdF9pbmZvX3NpemUoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcpXFxubmV0L2JyaWRnZS9icl9tc3QuYy0yNDcte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tc3QuYy0yNzEtXFxubmV0L2JyaWRnZS9icl9tc3QuYzoyNzI6aW50IGJyX21zdF9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvYnJpZGdlL2JyX21zdC5jLTI3My1cXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tc3QuYy0yOTgtXFxubmV0L2JyaWRnZS9icl9tc3QuYzoyOTk6c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGJyX21zdF9ubF9wb2xpY3lbSUZMQV9CUklER0VfTVNUX0VOVFJZX01BWCArIDFdID0ge1xcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMzAwLVxcdFtJRkxBX0JSSURHRV9NU1RfRU5UUllfTVNUSV0gPSBOTEFfUE9MSUNZX1JBTkdFKE5MQV9VMTYsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21zdC5jLTMwNy1cXG5uZXQvYnJpZGdlL2JyX21zdC5jOjMwODpzdGF0aWMgaW50IGJyX21zdF9wcm9jZXNzX29uZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMzA5LVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21zdC5jLTMxNy1cXHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkKHRiLCBJRkxBX0JSSURHRV9NU1RfRU5UUllfTUFYLCBhdHRyLFxcbm5ldC9icmlkZ2UvYnJfbXN0LmM6MzE4OlxcdFxcdFxcdCAgICAgICBicl9tc3RfbmxfcG9saWN5LCBleHRhY2spO1xcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMzE5LVxcdGlmIChlcnIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21zdC5jLTMzNC1cXG5uZXQvYnJpZGdlL2JyX21zdC5jOjMzNTpcXHRyZXR1cm4gYnJfbXN0X3NldF9zdGF0ZShwLCBtc3RpLCBzdGF0ZSwgZXh0YWNrKTtcXG5uZXQvYnJpZGdlL2JyX21zdC5jLTMzNi19XFxubmV0L2JyaWRnZS9icl9tc3QuYy0zMzctXFxubmV0L2JyaWRnZS9icl9tc3QuYzozMzg6aW50IGJyX21zdF9wcm9jZXNzKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIGNvbnN0IHN0cnVjdCBubGF0dHIgKm1zdF9hdHRyLFxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMzM5LVxcdFxcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMzUyLVxcdFxcdGNhc2UgSUZMQV9CUklER0VfTVNUX0VOVFJZOlxcbm5ldC9icmlkZ2UvYnJfbXN0LmM6MzUzOlxcdFxcdFxcdGVyciA9IGJyX21zdF9wcm9jZXNzX29uZShwLCBhdHRyLCBleHRhY2spO1xcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMzU0LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9OTM9c3RhdGljIHNpemVfdCBicl9nZXRfbGlua19hZl9zaXplX2ZpbHRlcmVkKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xMjItXFx0aWYgKHAgXFx1MDAyNlxcdTAwMjYgdmcgXFx1MDAyNlxcdTAwMjYgKGZpbHRlcl9tYXNrIFxcdTAwMjYgUlRFWFRfRklMVEVSX01TVCkpXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTIzOlxcdFxcdHZpbmZvX3N6ICs9IGJyX21zdF9pbmZvX3NpemUodmcpO1xcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTEyNC1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jPTQ1OD1zdGF0aWMgaW50IGJyX2ZpbGxfaWZpbmZvKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy02MDYtXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6NjA3OlxcdFxcdGVyciA9IGJyX21zdF9maWxsX2luZm8oc2tiLCB2Zyk7XFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtNjA4LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYz04MDk9c3RhdGljIGludCBicl9hZnNwZWMoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtODcwLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjg3MTpcXHRcXHRcXHRlcnIgPSBicl9tc3RfcHJvY2VzcyhwLCBhdHRyLCBleHRhY2spO1xcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTg3Mi1cXHRcXHRcXHRpZiAoZXJyKVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTkzND1zdGF0aWMgaW5saW5lIGJvb2wgYnJfdmxhbl9zdGF0ZV9hbGxvd2VkKHU4IHN0YXRlLCBib29sIGxlYXJuX2FsbG93KVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk0Ni1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTQ3Oi8qIGJyX21zdC5jICovXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk0OC0jaWZkZWYgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE5NDk6REVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKGJyX21zdF91c2VkKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTUwOnN0YXRpYyBpbmxpbmUgYm9vbCBicl9tc3RfaXNfZW5hYmxlZChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NTEte1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NTItXFx0LyogY2hlY2sgdGhlIHBvcnQncyB2bGFuIGdyb3VwIHRvIGF2b2lkIHJhY2luZyB3aXRoIHBvcnQgZGVsZXRpb24gKi9cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTUzOlxcdHJldHVybiBzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZicl9tc3RfdXNlZCkgXFx1MDAyNlxcdTAwMjZcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTU0LVxcdCAgICAgICBicl9vcHRfZ2V0KHAtXFx1MDAzZWJyLCBCUk9QVF9NU1RfRU5BQkxFRCkgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NTctXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTk1ODppbnQgYnJfbXN0X3NldF9zdGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCB1MTYgbXN0aSwgdTggc3RhdGUsXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk1OS1cXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTk2MDppbnQgYnJfbXN0X3ZsYW5fc2V0X21zdGkoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTE2IG1zdGkpO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE5NjE6dm9pZCBicl9tc3Rfdmxhbl9pbml0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYpO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE5NjI6aW50IGJyX21zdF9zZXRfZW5hYmxlZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk2My1cXHRcXHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTY0OnNpemVfdCBicl9tc3RfaW5mb19zaXplKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTY1OmludCBicl9tc3RfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk2Ni1cXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTY3OmludCBicl9tc3RfcHJvY2VzcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBjb25zdCBzdHJ1Y3QgbmxhdHRyICptc3RfYXR0cixcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTY4LVxcdFxcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTk2OTp2b2lkIGJyX21zdF91bmluaXQoc3RydWN0IG5ldF9icmlkZ2UgKmJyKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTcwLSNlbHNlXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTk3MTpzdGF0aWMgaW5saW5lIGJvb2wgYnJfbXN0X2lzX2VuYWJsZWQoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcClcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTcyLXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NzUtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTk3NjpzdGF0aWMgaW5saW5lIGludCBicl9tc3Rfc2V0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHUxNiBtc3RpLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NzctXFx0XFx0XFx0XFx0ICAgdTggc3RhdGUsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5ODEtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTk4MjpzdGF0aWMgaW5saW5lIGludCBicl9tc3Rfc2V0X2VuYWJsZWQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5ODMtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTg3LVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE5ODg6c3RhdGljIGlubGluZSBzaXplX3QgYnJfbXN0X2luZm9fc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZylcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTg5LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5OTItXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTk5MzpzdGF0aWMgaW5saW5lIGludCBicl9tc3RfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk5NC1cXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5OTgtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTk5OTpzdGF0aWMgaW5saW5lIGludCBicl9tc3RfcHJvY2VzcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTIwMDAtXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBubGF0dHIgKm1zdF9hdHRyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMjAwNS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoyMDA2OnN0YXRpYyBpbmxpbmUgdm9pZCBicl9tc3RfdW5pbml0KHN0cnVjdCBuZXRfYnJpZGdlICpicilcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0yMDA3LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfc3RwLmM9Mjk9dm9pZCBicl9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdW5zaWduZWQgaW50IHN0YXRlKVxcbi0tXFxubmV0L2JyaWRnZS9icl9zdHAuYy00Ni1cXHRpZiAoYnJfb3B0X2dldChwLVxcdTAwM2ViciwgQlJPUFRfTVNUX0VOQUJMRUQpKSB7XFxubmV0L2JyaWRnZS9icl9zdHAuYzo0NzpcXHRcXHRlcnIgPSBicl9tc3Rfc2V0X3N0YXRlKHAsIDAsIHN0YXRlLCBOVUxMKTtcXG5uZXQvYnJpZGdlL2JyX3N0cC5jLTQ4LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0yMzQ9c3RhdGljIHZvaWQgYnJfdmxhbl9pbml0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0yNDMtXFx0aWYgKGJyX29wdF9nZXQoYnIsIEJST1BUX01TVF9FTkFCTEVEKSkge1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjI0NDpcXHRcXHRicl9tc3Rfdmxhbl9pbml0X3N0YXRlKHYpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTI0NS1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW5fb3B0aW9ucy5jPTU1MD1zdGF0aWMgaW50IGJyX3ZsYW5fcHJvY2Vzc19nbG9iYWxfb25lX29wdHMoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYy02NTctXFx0XFx0bXN0aSA9IG5sYV9nZXRfdTE2KHRiW0JSSURHRV9WTEFOREJfR09QVFNfTVNUSV0pO1xcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmM6NjU4OlxcdFxcdGVyciA9IGJyX21zdF92bGFuX3NldF9tc3RpKHYsIG1zdGkpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmMtNjU5LVxcdFxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE3OjE2OjMyLjA4MTEyNTE2OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMwNDM1OTQwMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIGEgZmlyc3QtcGVyc29uIGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgQnJpZGdlIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgS2NvbmZpZyBmaWxlcyByZWxhdGVkIHRvIHRoZSBicmlkZ2luZyBmdW5jdGlvbmFsaXR5LiBTcGVjaWZpY2FsbHksIEknbSBmb2N1c2luZyBvbiBcIkJSSURHRVwiIGFuZCBcIkJSSURHRV9WTEFOX0ZJTFRFUklORy5cIiBVbmRlcnN0YW5kaW5nIHRoZXNlIGNvbmZpZ3VyYXRpb25zIGlzIGNydWNpYWwgZm9yIGZpbmUtdHVuaW5nIHRoZSBicmlkZ2luZyBpbXBsZW1lbnRhdGlvbi4gSSBrbm93IHRoZXkncmUgcHJvYmFibHkgaW50ZXJjb25uZWN0ZWQsIGFuZCBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBvcHRpb25zIGFyZSBwcmVzZW50ZWQgdG8gdGhlIGVuZC11c2VyLiBJIGV4cGVjdCB0byBiZSBhYmxlIHRvIGlkZW50aWZ5IGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRoZW0sIGFuZCB0byBsb29rIGF0IHRoZSBoZWxwIHRleHQgYW5kIGRlZmF1bHQgdmFsdWVzIHRvIHVuZGVyc3RhbmQgdGhlaXIgaW50ZW5kZWQgdXNlIGFuZCBpbXBhY3Qgb24gdGhlIG92ZXJhbGwgY29uZmlndXJhdGlvbi4gVGhpcyBpcyBrZXkgdG8gZW5zdXJpbmcgdGhlIGJyaWRnZSBiZWhhdmVzIGFzIGV4cGVjdGVkLiBMZXQncyBzZWUgaG93IHRob3NlIG9wdGlvbnMgYXJlIHN0cnVjdHVyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODA3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTc6MTY6MzUuMTI0NzIyMzY1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTA1NjU5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlJJREdFX1ZMQU5fRklMVEVSSU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9LY29uZmlnPTM2PWNvbmZpZyBCUklER0VfSUdNUF9TTk9PUElOR1xcbi0tXFxubmV0L2JyaWRnZS9LY29uZmlnLTQ5LVxcbm5ldC9icmlkZ2UvS2NvbmZpZzo1MDpjb25maWcgQlJJREdFX1ZMQU5fRklMVEVSSU5HXFxubmV0L2JyaWRnZS9LY29uZmlnLTUxLVxcdGJvb2wgXFxcIlZMQU4gZmlsdGVyaW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNzoxNjozNS4xNjk3ODQzNDhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzQ5OTY2MTkwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgdGhlIEJyaWRnZSBDb25maWd1cmF0aW9uIEZpbGUqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGBuZXQvYnJpZGdlL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA1MC4gSSdtIGd1ZXNzaW5nIHRoYXQncyB3aGVyZSBzb21lIG9mIHRoZSBjb3JlIGJyaWRnZSBmdW5jdGlvbmFsaXR5IG9wdGlvbnMgYXJlIGRlZmluZWQuIEknbSBsaWtlbHkgYWZ0ZXIgdGhlIGJvb2xlYW4gY29uZmlndXJhdGlvbnMgdGhhdCBtYW5hZ2UgdGhlIGJyaWRnZSBpdHNlbGYsIG9yIHBvdGVudGlhbGx5IHRoZSBwYXJhbWV0ZXJzIG9mIGEgYnJpZGdlIHBvcnQuIEkgd2FudCB0byBhc3Nlc3MgdGhlIGNvbmZpZ3VyYWJpbGl0eSBvZiB0aGUgZmVhdHVyZXMgYW5kIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGF0IGNvbXBpbGUgdGltZS4gUGVyaGFwcyBJJ20gbG9va2luZyB0byB1bmRlcnN0YW5kIGhvdyBhIHNwZWNpZmljIGZlYXR1cmUgaXMgZW5hYmxlZCBvciBkaXNhYmxlZCwgb3IgbWF5YmUgSSdtIHRyeWluZyB0byBkaWFnbm9zZSBhIGJ1aWxkIGlzc3VlIHJlbGF0ZWQgdG8gYnJpZGdpbmcuIEhvcGVmdWxseSwgdGhlIEtjb25maWcgZW50cmllcyBhcmUgd2VsbC1kb2N1bWVudGVkLCBtYWtpbmcgdGhpcyBhbmFseXNpcyByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZC4gSSdtIHByZXBhcmluZyBteXNlbGYgdG8gcGFyc2UgdGhlIGRlcGVuZGVuY2llcyBhbmQgaGVscCBzdHJpbmdzIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlIG9mIGFueSBwYXJ0aWN1bGFyIG9wdGlvbiBJJ20gaW50ZXJlc3RlZCBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxMDksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNzoxNjozOC42Njk0NDg5OTJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzcwNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JyaWRnZS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQ1OlxcdFxcbiAgNDY6XFx0XFx0ICBTYXkgTiB0byBleGNsdWRlIHRoaXMgc3VwcG9ydCBhbmQgcmVkdWNlIHRoZSBiaW5hcnkgc2l6ZS5cXG4gIDQ3OlxcdFxcbiAgNDg6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAgNDk6XFx0XFxuICA1MDpcXHRjb25maWcgQlJJREdFX1ZMQU5fRklMVEVSSU5HXFxuICA1MTpcXHRcXHRib29sIFxcXCJWTEFOIGZpbHRlcmluZ1xcXCJcXG4gIDUyOlxcdFxcdGRlcGVuZHMgb24gQlJJREdFXFxuICA1MzpcXHRcXHRkZXBlbmRzIG9uIFZMQU5fODAyMVFcXG4gIDU0OlxcdFxcdGRlZmF1bHQgblxcbiAgNTU6XFx0XFx0aGVscFxcbiAgNTY6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB0aGUgRXRoZXJuZXQgYnJpZGdlIHdpbGwgYmUgYWJsZSBzZWxlY3RpdmVseVxcbiAgNTc6XFx0XFx0ICByZWNlaXZlIGFuZCBmb3J3YXJkIHRyYWZmaWMgYmFzZWQgb24gVkxBTiBpbmZvcm1hdGlvbiBpbiB0aGUgcGFja2V0XFxuICA1ODpcXHRcXHQgIGFueSBWTEFOIGluZm9ybWF0aW9uIGNvbmZpZ3VyZWQgb24gdGhlIGJyaWRnZSBwb3J0IG9yIGJyaWRnZSBkZXZpY2UuXFxuICA1OTpcXHRcXG4gIDYwOlxcdFxcdCAgU2F5IE4gdG8gZXhjbHVkZSB0aGlzIHN1cHBvcnQgYW5kIHJlZHVjZSB0aGUgYmluYXJ5IHNpemUuXFxuICA2MTpcXHRcXG4gIDYyOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gIDYzOlxcdFxcbiAgNjQ6XFx0Y29uZmlnIEJSSURHRV9NUlBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTc6MTY6MzguNjY5NTI4MDEyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIyODI2ODE5ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6XG5cbioqRGVwZW5kZW5jaWVzIGFuZCBTd2l0Y2hkZXYgSW50ZWdyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgQlJJREdFX1ZMQU5fRklMVEVSSU5HYC4gSXQncyBwcmV0dHkgY2xlYXIgdGhhdCBpdCBoYXMgZGVwZW5kZW5jaWVzIG9uIGBCUklER0VgIGFuZCBgVkxBTl84MDIxUWAg4oCTIHRoYXQncyBleHBlY3RlZC4gTm93LCB3aGF0J3MgbmFnZ2luZyBtZSBpcyB0aGUgc3dpdGNoZGV2IGludm9sdmVtZW50LiBJJ20gc2VlaW5nIGBzd2l0Y2hkZXZfcG9ydF9hdHRyX3NldGAgYmVpbmcgdXNlZCwgYW5kIHRoYXQgbWFrZXMgbWUgd29uZGVyIGlmIGBORVRfU1dJVENIREVWYCBpcyBhICpoYXJkKiByZXF1aXJlbWVudCBoZXJlLiBJIG5lZWQgdG8gY2xhcmlmeSB0aGF0LiBSaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgY29kZeKApiBJJ2xsIGhlYWQgb3ZlciB0byBgaW5jbHVkZS9uZXQvc3dpdGNoZGV2LmhgIGFuZCBjaGVjayB3aGVyZSBgc3dpdGNoZGV2X3BvcnRfYXR0cl9zZXRgIGlzIGFjdHVhbGx5IGRlZmluZWQuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGRlZmluaXRpdmUgYW5zd2VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjU5NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTc6MTY6NDAuOTUyMjEzMzEzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjIzNTEyNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3dpdGNoZGV2X3BvcnRfYXR0cl9zZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvc3dpdGNoZGV2Lmg9MzA4PXZvaWQgc3dpdGNoZGV2X2RlZmVycmVkX3Byb2Nlc3Modm9pZCk7XFxuaW5jbHVkZS9uZXQvc3dpdGNoZGV2Lmg6MzA5OmludCBzd2l0Y2hkZXZfcG9ydF9hdHRyX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmluY2x1ZGUvbmV0L3N3aXRjaGRldi5oLTMxMC1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHN3aXRjaGRldl9hdHRyICphdHRyLFxcbi0tXFxuaW5jbHVkZS9uZXQvc3dpdGNoZGV2Lmg9Mzk2PXN0YXRpYyBpbmxpbmUgdm9pZCBzd2l0Y2hkZXZfZGVmZXJyZWRfcHJvY2Vzcyh2b2lkKVxcbi0tXFxuaW5jbHVkZS9uZXQvc3dpdGNoZGV2LmgtMzk5LVxcbmluY2x1ZGUvbmV0L3N3aXRjaGRldi5oOjQwMDpzdGF0aWMgaW5saW5lIGludCBzd2l0Y2hkZXZfcG9ydF9hdHRyX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmluY2x1ZGUvbmV0L3N3aXRjaGRldi5oLTQwMS1cXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfYXR0ciAqYXR0cixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTc6MTY6NDEuMDc0NTcwNDAzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjk2NTI2MzIyODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBORVRfU1dJVENIREVWYCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYE5FVF9TV0lUQ0hERVZgLiBSaWdodCwgaXQgbG9va3MgbGlrZSBpdCdzIGRlZmluZWQgaW4gYG5ldC9LY29uZmlnYCwgc28gdGhhdCdzIHdoZXJlIEkgbmVlZCB0byBzdGFydC4gTGV0J3MgaGVhZCBvdmVyIHRoZXJlIGFuZCB0YWtlIGEgbG9vayBhdCB3aGF0J3MgZ29pbmcgb24gd2l0aCBgTkVUX1NXSVRDSERFVmAuIE5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgZGVzY3JpcHRpb24sIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgb25lLiBUaW1lIHRvIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwNzksIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNzoxNjo1MC43MjcyMDQ3MjFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDQ3MzM1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9TV0lUQ0hERVZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3N3aXRjaGRldi9LY29uZmlnLTUtXFxubmV0L3N3aXRjaGRldi9LY29uZmlnOjY6Y29uZmlnIE5FVF9TV0lUQ0hERVZcXG5uZXQvc3dpdGNoZGV2L0tjb25maWctNy1cXHRib29sIFxcXCJTd2l0Y2ggKGFuZCBzd2l0Y2gtaXNoKSBkZXZpY2Ugc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTc6MTY6NTIuMjcxOTQ0NTUxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ5MzQzOTI1MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogU3dpdGNoZGV2LCBCcmlkZ2UsIGFuZCBWTEFOIEludGVyYWN0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGBzd2l0Y2hkZXZfcG9ydF9hdHRyX3NldGAgaXMgdGhlIGtleS4gSSBzZWUgaXQncyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIHVuZGVyIGBDT05GSUdfTkVUX1NXSVRDSERFVmAuIElmIHRoYXQncyAqbm90KiBlbmFibGVkLCBpdCByZXR1cm5zIGAtRU9QTk9UU1VQUGAsIHdoaWNoIGlzIGFzIGV4cGVjdGVkLiBgTkVUX1NXSVRDSERFVmAgaXMgdHlwaWNhbGx5IHNlbGVjdGVkIHdoZW4gd2UncmUgZGVhbGluZyB3aXRoIHN3aXRjaGRldiBvZmZsb2Fkcywgc28gdGhhdCBtYWtlcyBzZW5zZS4gV2UncmUgb2J2aW91c2x5IGRlYWxpbmcgd2l0aCBicmlkZ2luZy4gU28sIGBDT05GSUdfQlJJREdFYCBhbmQgcHJvYmFibHkgYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgLCBhbmQgYENPTkZJR19WTEFOXzgwMjFRYCBhcmUgYWxzbyBpbiBwbGF5IGhlcmUuXG5cbk5vdywgbG9va2luZyBhdCB0aGUgcGF0Y2ggaXRzZWxmLCB0aGUgbWFpbiBjaGFuZ2Ugc2VlbXMgdG8gYmUgd2l0aGluIGBicl9tc3Rfc2V0X3N0YXRlYC4gU3BlY2lmaWNhbGx5LCB3ZSBhcmUgcmVtb3ZpbmcgdGhlIFJDVSByZWFkIGxvY2svdW5sb2NrIGFyb3VuZCB0aGUgYHN3aXRjaGRldl9wb3J0X2F0dHJfc2V0YCBjYWxsIGFuZCB0aGUgdmxhbiBsaXN0IGl0ZXJhdGlvbi4gSXQgbG9va3MgbGlrZSBpdCB3YXMgb25seSBiZWluZyBjYWxsZWQgZm9yIG5vbi16ZXJvIGBtc3RpYCwgYW5kIHRoaXMgY29kZSBpcyBtYW5hZ2luZyBNU1RJcyBhbmQgdGhlaXIgc3RhdGVzLiBUaGUgY29tbWVudCBjbGFyaWZpZXMgdGhhdCBNU1RJIDAgKENTVCkgc3RhdGUgY2hhbmdlcyBhcmUgaGFuZGxlZCB2aWEgYFNXSVRDSERFVl9BVFRSX0lEX1BPUlRfU1RQX1NUQVRFYCwgd2hpbGUgb3RoZXIgTVNUSXMgKG5vbi16ZXJvKSBhcmUgaGFuZGxlZCB2aWEgbmV0bGluayB3aXRoIFJUTkwgaGVsZC4gVGhlIGFkZGVkIGBBU1NFUlRfUlROTCgpYCBtYWtlcyBpdCBleHBsaWNpdCB0aGF0IHdlIGV4cGVjdCB0aGUgUlROTCBsb2NrIHRvIGJlIGhlbGQgaW4gdGhhdCBicmFuY2guIFRoZSBSQ1UgcmVhZCBsb2NrIGlzIG5vdyBkb25lIGFmdGVyIHRoZSBwb3RlbnRpYWxseSBmYWlsaW5nIGNhbGwgdG8gYHN3aXRjaGRldl9wb3J0X2F0dHJfc2V0YC5cblxuU28sIHRoZSBpc3N1ZSBpcyBsaWtlbHkgcmVsYXRlZCB0byB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgYHN3aXRjaGRldmAgcGF0aCwgd2hpY2ggdXNlcyBuZXRsaW5rLCBhbmQgdGhlIFZMQU4gc3RhdGUgbWFuYWdlbWVudCBpbiB0aGUgYnJpZGdlLiBNeSBndWVzcyBpcyB0aGF0IHRoZSBvcmlnaW5hbCBjb2RlIGNvdWxkIGxlYWQgdG8gYSByYWNlIGNvbmRpdGlvbiBvciBzb21lIG90aGVyIGNvbmN1cnJlbmN5IGlzc3VlIHdoZW4gc2V0dGluZyBNU1RJIHN0YXRlcy5cblxuSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBnaXQgbG9nIG9yIHRoZSBzcGVjaWZpYyBjb21taXQgbWVzc2FnZSB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgY2hhbmdlIHdhcyBuZWNlc3NhcnkuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGV4YWN0IHByb2JsZW0gaXQncyBzb2x2aW5nIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2Ygc3dpdGNoZGV2IGFuZCBicmlkZ2luZyBpbiB0aGUga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI5NSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNzoxNjo1Ny4yMDYzMzk1MjNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTA0MTQxMywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2xlZXBpbmcgZnVuY3Rpb24gY2FsbGVkIGZyb20gaW52YWxpZCBjb250ZXh0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE3OjE2OjU3LjQzMTM4ODU2NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3MzEwMjk5OTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgQW5hbHlzaXMgb2YgYSBLZXJuZWwgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBleGFtaW5lIHRoaXMgYHN3aXRjaGRldl9wb3J0X2F0dHJfc2V0YCBmdW5jdGlvbi4gVGhlIGtleSBoZXJlIGlzIHRoZSBwb3RlbnRpYWwgZm9yIGJsb2NraW5nIG5vdGlmaWVycywgdXNpbmcgdGhhdCBgcndzZW1gLCB3aGljaCBjYW4gbGVhZCB0byBzbGVlcGluZyBpbiBhIHBvdGVudGlhbGx5IGludmFsaWQgY29udGV4dCwgc3BlY2lmaWNhbGx5IGluc2lkZSBvZiBgcmN1X3JlYWRfbG9jaygpYC4gVGhlIGZpeCBwcm9wb3NlcyBtb3ZpbmcgdGhlIFJDVSBsb2NrLCB3aGljaCBpbW1lZGlhdGVseSByYWlzZXMgYSByZWQgZmxhZyBmb3IgbWUg4oCTIGFueSBjaGFuZ2UgaW4gbG9ja2luZyBvcmRlciBkZW1hbmRzIHNjcnV0aW55LiBUaGUgYWRkaXRpb24gb2YgYEFTU0VSVF9SVE5MKClgIHdoZW4gYG1zdGkgIT0gMGAgaXMgYW5vdGhlciBwb2ludCBvZiBpbnRlcmVzdC5cblxuVGhlIG5leHQgY3JpdGljYWwgc3RlcCBpcyBhc3Nlc3NpbmcgcmVhY2hhYmlsaXR5IGluIHR5cGljYWwgZnV6emluZyBlbnZpcm9ubWVudHMuIFRoYW5rZnVsbHksIGl0IGxvb2tzIGxpa2UgdGhpcyBjb2RlICppcyogcmVhY2hhYmxlLiBTeXprYWxsZXIgYWN0aXZlbHkgbWFuaXB1bGF0ZXMgYnJpZGdlIGRldmljZXMgYW5kIGNvbmZpZ3VyYXRpb25zIHZpYSBydG5ldGxpbmssIHdpdGggb3BlcmF0aW9ucyBsaWtlIHNldHRpbmcgVkxBTnMsIE1TVCwgYW5kIG5ldGxpbmsgYXR0cmlidXRlcywgdXRpbGl6aW5nIGBSVE1fU0VUTElOS2AgYW5kIHZhcmlvdXMgYElGTEFfKmAgYXR0cmlidXRlcy4gIEZ1cnRoZXJtb3JlLCBgYnJfbXN0X3NldF9zdGF0ZWAgYXBwZWFycyByZWFjaGFibGUgdGhyb3VnaCBib3RoIG5ldGxpbmsgKHZpYSBgYnJfYWZzcGVjYCAtXHUwMDNlIGBicl9tc3RfcHJvY2Vzc2AgLVx1MDAzZSBgYnJfbXN0X3Byb2Nlc3Nfb25lYCAtXHUwMDNlIGBicl9tc3Rfc2V0X3N0YXRlYCkgYW5kIGFsc28gdmlhIGBicl9zdHAuY2AgKHRocm91Z2ggYGJyX3NldF9zdGF0ZWApLlxuXG5Ob3csIGNvbnNpZGVyaW5nIHRoZSBwYXRjaCdzIGNvcmUgY2hhbmdlIG9mIGFsdGVyaW5nIHRoZSBsb2NraW5nIG9yZGVyIGFuZCBpbnRyb2R1Y2luZyBhbiBhc3NlcnRpb24sIHRoaXMgKmFic29sdXRlbHkqIHNjcmVhbXMgZm9yIGZ1enppbmcuIFBlciBvdXIgZXN0YWJsaXNoZWQgdHJpYWdlIHBoaWxvc29waHksIGFueSBtb2RpZmljYXRpb24gb2YgYXNzZXJ0aW9ucyBpbiByZWFjaGFibGUgY29kZSBwYXRocywgZXNwZWNpYWxseSB0aG9zZSBlbmZvcmNpbmcgbmV3IGludmFyaWFudHMsIHJlcXVpcmVzIHRob3JvdWdoIGZ1enppbmcuIFRoaXMgYXBwbGllcyBlc3BlY2lhbGx5IHNpbmNlIHRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCwgc3luY2hyb25pemF0aW9uLCBhbmQgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uYWxpdGllcyB3aGljaCBhcmUgd2l0aGluIHRoZSBzY29wZSBvZiBjb2RlIHdlIGNvbnNpZGVyIHdvcnRoeSBvZiBmdXp6aW5nLiBUaGVyZWZvcmUsIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGlzIGlzIGEgZGVmaW5pdGUgYFdvcnRoRnV6emluZyA9IHRydWVgIHNpdHVhdGlvbi5cblxuTmV4dCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBjcnVjaWFsIHN5bWJvbHMgdG8gdGFyZ2V0IHdpdGggdGhlIGZ1enplci4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiBmdW5jdGlvbnMgb2YgaW50ZXJlc3QgYXJlOiBgYnJfbXN0X3NldF9zdGF0ZWAgKHRoZSBtb2RpZmllZCBmdW5jdGlvbiBpdHNlbGYpLCBgYnJfbXN0X3Byb2Nlc3NgICh0aGUgbmV0bGluayBlbnRyeSksIGBicl9tc3RfcHJvY2Vzc19vbmVgLCBgYnJfc2V0X3N0YXRlYCwgYW5kIGBicl9tc3Rfc2V0X2VuYWJsZWRgLiBBIHF1aWNrIGNoZWNrIHJldmVhbHMgdGhhdCB0aGVzZSBzeW1ib2xzIGFyZSBub3QgZGVjbGFyZWQgYXMgc3RhdGljICh0aGV5IGFyZSBkZWNsYXJlZCBpbiBgbmV0L2JyaWRnZS9icl9wcml2YXRlLmhgKSB3aGljaCBtZWFucyB0aGF0IHN5emthbGxlciwgd2hpY2ggdHlwaWNhbGx5IGZvY3VzZXMgb24gbm9uLXN0YXRpYyBvciBleHBvcnRlZC9nbG9iYWwgc3ltYm9scywgY2FuIHRhcmdldCB0aGVtLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBicl9tc3RfcHJvY2Vzc19vbmVgIGlzbid0IGlubGluZWQsIGJ1dCBzaW5jZSBpdCBpcyBjYWxsZWQgd2l0aGluIG5vbi1zdGF0aWMgc3ltYm9scywgSSB0aGluayB3ZSBhcmUgZ29vZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzOTEsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTc6MTc6MDQuNzQxNjkxNjY0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjUyMzYyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgYnJfbXN0X1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfbXN0LmM9MjU9dm9pZCBicl9tc3RfdW5pbml0KHN0cnVjdCBuZXRfYnJpZGdlICpicilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMzAtXFxubmV0L2JyaWRnZS9icl9tc3QuYzozMTppbnQgYnJfbXN0X2dldF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBtc3RpLCB1bnNpZ25lZCBsb25nICp2aWRzKVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMzIte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tc3QuYz01NT1FWFBPUlRfU1lNQk9MX0dQTChicl9tc3RfZ2V0X2luZm8pO1xcbm5ldC9icmlkZ2UvYnJfbXN0LmMtNTYtXFxubmV0L2JyaWRnZS9icl9tc3QuYzo1NzppbnQgYnJfbXN0X2dldF9zdGF0ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgbXN0aSwgdTggKnN0YXRlKVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtNTgte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tc3QuYz04Mj1zdGF0aWMgdm9pZCBicl9tc3Rfdmxhbl9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21zdC5jLTk0LVxcbm5ldC9icmlkZ2UvYnJfbXN0LmM6OTU6aW50IGJyX21zdF9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IG1zdGksIHU4IHN0YXRlLFxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtOTYtXFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21zdC5jPTE0MT1zdGF0aWMgdm9pZCBicl9tc3Rfdmxhbl9zeW5jX3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnB2LCB1MTYgbXN0aSlcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMTYwLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmM6MTYxOmludCBicl9tc3Rfdmxhbl9zZXRfbXN0aShzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICptdiwgdTE2IG1zdGkpXFxubmV0L2JyaWRnZS9icl9tc3QuYy0xNjIte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tc3QuYz0xOTY9dm9pZCBicl9tc3Rfdmxhbl9pbml0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21zdC5jLTIwNi1cXG5uZXQvYnJpZGdlL2JyX21zdC5jOjIwNzppbnQgYnJfbXN0X3NldF9lbmFibGVkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcXG5uZXQvYnJpZGdlL2JyX21zdC5jLTIwOC1cXHRcXHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tc3QuYz0yNDY9c2l6ZV90IGJyX21zdF9pbmZvX3NpemUoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21zdC5jLTI3MS1cXG5uZXQvYnJpZGdlL2JyX21zdC5jOjI3MjppbnQgYnJfbXN0X2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMjczLVxcdFxcdCAgICAgY29uc3Qgc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21zdC5jPTI5OT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgYnJfbXN0X25sX3BvbGljeVtJRkxBX0JSSURHRV9NU1RfRU5UUllfTUFYICsgMV0gPSB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21zdC5jLTMwNy1cXG5uZXQvYnJpZGdlL2JyX21zdC5jOjMwODpzdGF0aWMgaW50IGJyX21zdF9wcm9jZXNzX29uZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMzA5LVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21zdC5jLTMzNy1cXG5uZXQvYnJpZGdlL2JyX21zdC5jOjMzODppbnQgYnJfbXN0X3Byb2Nlc3Moc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgY29uc3Qgc3RydWN0IG5sYXR0ciAqbXN0X2F0dHIsXFxubmV0L2JyaWRnZS9icl9tc3QuYy0zMzktXFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTk1MD1zdGF0aWMgaW5saW5lIGJvb2wgYnJfbXN0X2lzX2VuYWJsZWQoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NTctXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTk1ODppbnQgYnJfbXN0X3NldF9zdGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCB1MTYgbXN0aSwgdTggc3RhdGUsXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk1OS1cXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTk2MDppbnQgYnJfbXN0X3ZsYW5fc2V0X21zdGkoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTE2IG1zdGkpO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NjEtdm9pZCBicl9tc3Rfdmxhbl9pbml0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYpO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE5NjI6aW50IGJyX21zdF9zZXRfZW5hYmxlZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk2My1cXHRcXHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xOTY0PXNpemVfdCBicl9tc3RfaW5mb19zaXplKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTY1OmludCBicl9tc3RfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk2Ni1cXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTY3OmludCBicl9tc3RfcHJvY2VzcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBjb25zdCBzdHJ1Y3QgbmxhdHRyICptc3RfYXR0cixcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTY4LVxcdFxcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xOTcxPXN0YXRpYyBpbmxpbmUgYm9vbCBicl9tc3RfaXNfZW5hYmxlZChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk3NS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTc2OnN0YXRpYyBpbmxpbmUgaW50IGJyX21zdF9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IG1zdGksXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk3Ny1cXHRcXHRcXHRcXHQgICB1OCBzdGF0ZSwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk4MS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTgyOnN0YXRpYyBpbmxpbmUgaW50IGJyX21zdF9zZXRfZW5hYmxlZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk4My1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE5ODg9c3RhdGljIGlubGluZSBzaXplX3QgYnJfbXN0X2luZm9fc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5OTItXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTk5MzpzdGF0aWMgaW5saW5lIGludCBicl9tc3RfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk5NC1cXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5OTgtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTk5OTpzdGF0aWMgaW5saW5lIGludCBicl9tc3RfcHJvY2VzcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTIwMDAtXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBubGF0dHIgKm1zdF9hdHRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNzoxNzowNC43ODgyMjE3MDZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjA4MTg4MTAxMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNU1QgU3RhdGUgQ29uZmlndXJhdGlvbiBQcm9jZXNzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIGBicl9tc3Rfc2V0X3N0YXRlYCBpcyB0aGUgY29yZSBmdW5jdGlvbiB3ZSdyZSBpbnRlcmVzdGVkIGluLiBUaGUgbW9kaWZpY2F0aW9uIHNlZW1zIHRvIGNlbnRlciB0aGVyZS4gVGhlIGNydWNpYWwgbGluayBhcHBlYXJzIHRvIGJlIGBicl9tc3RfcHJvY2Vzc2AsIHRoZSBuZXRsaW5rIGhhbmRsZXIsIHdoaWNoIGNhbGxzIGBicl9tc3Rfc2V0X3N0YXRlYCB0aHJvdWdoIGBicl9tc3RfcHJvY2Vzc19vbmVgLiBUaGlzIHN1Z2dlc3RzIG5ldGxpbmsgaXMgaG93IHRoZSBNU1Qgc3RhdGUgaXMgYmVpbmcgdXBkYXRlZCwgd2hpY2ggaXMgcHJldHR5IHN0YW5kYXJkLiBJbnRlcmVzdGluZyB0b28sIGBicl9zZXRfc3RhdGVgIGluIGBicl9zdHAuY2AgYWxzbyBjYWxscyBgYnJfbXN0X3NldF9zdGF0ZWAgYnV0IHdpdGggc29tZSBzcGVjaWZpYyBhcmd1bWVudHM7IHBhcnRpY3VsYXJseSBgMGAgYW5kIGBOVUxMYC4gVGhpcyBtYXkgYmUgYW4gaW5pdGlhbGl6YXRpb24gb3IgZGVmYXVsdCBzdGF0ZSBzZXR0ZXIuXG5cbk5vdywgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBNU1QgZW50cmllcyBhcmUgYWN0dWFsbHkgKmNvbmZpZ3VyZWQqIGluIHRoZSBmaXJzdCBwbGFjZSwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgYGJyX21zdF9wcm9jZXNzYCBhZ2FpbiBhbmQgYWxzbyBsb29rIGludG8gYGJyX2Fmc3BlY2AuIFRoZXkncmUgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciB0aGUgaW5pdGlhbCBzZXR1cCBvZiB0aGVzZSBlbnRyaWVzLiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhvc2UgbW9kdWxlcyBhbmQgc2VlIGhvdyB0aGlzIGFsbCBmaXRzIHRvZ2V0aGVyIHRvIGNvbnRyb2wgdGhlIE1TVCBzdGF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc3MjQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTc6MTc6MjUuNjA3MDM1NDE4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9icmlkZ2UvYnJfbXN0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzMwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzMwOlxcdFxcdH1cXG4gMzMxOlxcdFxcbiAzMzI6XFx0XFx0bXN0aSA9IG5sYV9nZXRfdTE2KHRiW0lGTEFfQlJJREdFX01TVF9FTlRSWV9NU1RJXSk7XFxuIDMzMzpcXHRcXHRzdGF0ZSA9IG5sYV9nZXRfdTgodGJbSUZMQV9CUklER0VfTVNUX0VOVFJZX1NUQVRFXSk7XFxuIDMzNDpcXHRcXG4gMzM1OlxcdFxcdHJldHVybiBicl9tc3Rfc2V0X3N0YXRlKHAsIG1zdGksIHN0YXRlLCBleHRhY2spO1xcbiAzMzY6XFx0fVxcbiAzMzc6XFx0XFxuIDMzODpcXHRpbnQgYnJfbXN0X3Byb2Nlc3Moc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgY29uc3Qgc3RydWN0IG5sYXR0ciAqbXN0X2F0dHIsXFxuIDMzOTpcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDM0MDpcXHR7XFxuIDM0MTpcXHRcXHRzdHJ1Y3QgbmxhdHRyICphdHRyO1xcbiAzNDI6XFx0XFx0aW50IGVyciwgbXN0cyA9IDA7XFxuIDM0MzpcXHRcXHRpbnQgcmVtO1xcbiAzNDQ6XFx0XFxuIDM0NTpcXHRcXHRpZiAoIWJyX29wdF9nZXQocC1cXHUwMDNlYnIsIEJST1BUX01TVF9FTkFCTEVEKSkge1xcbiAzNDY6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIkNhbid0IG1vZGlmeSBNU1Qgc3RhdGUgd2hlbiBNU1QgaXMgZGlzYWJsZWRcXFwiKTtcXG4gMzQ3OlxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIDM0ODpcXHRcXHR9XFxuIDM0OTpcXHRcXG4gMzUwOlxcdFxcdG5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgbXN0X2F0dHIsIHJlbSkge1xcbiAzNTE6XFx0XFx0XFx0c3dpdGNoIChubGFfdHlwZShhdHRyKSkge1xcbiAzNTI6XFx0XFx0XFx0Y2FzZSBJRkxBX0JSSURHRV9NU1RfRU5UUlk6XFxuIDM1MzpcXHRcXHRcXHRcXHRlcnIgPSBicl9tc3RfcHJvY2Vzc19vbmUocCwgYXR0ciwgZXh0YWNrKTtcXG4gMzU0OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAzNTU6XFx0XFx0XFx0ZGVmYXVsdDpcXG4gMzU2OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAzNTc6XFx0XFx0XFx0fVxcbiAzNTg6XFx0XFxuIDM1OTpcXHRcXHRcXHRtc3RzKys7XFxuIDM2MDpcXHRcXHRcXHRpZiAoZXJyKVxcbiAzNjE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDM2MjpcXHRcXHR9XFxuIDM2MzpcXHRcXG4gMzY0OlxcdFxcdGlmICghbXN0cykge1xcbiAzNjU6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIkZvdW5kIG5vIE1TVCBlbnRyaWVzIHRvIHByb2Nlc3NcXFwiKTtcXG4gMzY2OlxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuIDM2NzpcXHRcXHR9XFxuIDM2ODpcXHRcXG4gMzY5OlxcdFxcdHJldHVybiBlcnI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE3OjE3OjI1LjYwNzEyNDI5OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMTA2MDI4OTMwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBBU1NFUlRfUlROTCgpYCBNYWNybyoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGBBU1NFUlRfUlROTCgpYCBtYWNybyBpcyBkb2luZy4gTGV0J3MgZGlnIGludG8gaXRzIGRlZmluaXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0J3MgdXNlZCBhbmQgd2hhdCBzb3J0IG9mIGNvbmRpdGlvbnMgaXQncyBkZXNpZ25lZCB0byBjaGVjay4gSXMgaXQgcmVsYXRlZCB0byBlbnN1cmluZyBhIHBhcnRpY3VsYXIgUlROTCBzZXF1ZW5jZSBvciBzdGF0ZT8gSXMgaXQgdXNlZCBmb3IgZGVidWdnaW5nLCBvciBpcyBpdCBkaXJlY3RseSB0aWVkIHRvIGNyaXRpY2FsIHJ1bnRpbWUgbG9naWM/IEtub3dpbmcgaXRzIGV4YWN0IGltcGxlbWVudGF0aW9uIGlzIHRoZSBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgY29kZWJhc2UuIFdoYXQgZGVwZW5kZW5jaWVzIGRvZXMgaXQgcmVseSBvbj8gQXJlIHRoZXJlIGFueSBzdWJ0bGUgc2lkZSBlZmZlY3RzIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBJIG5lZWQgdG8gYnVpbGQgYSBtZW50YWwgbW9kZWwgb2YgdGhpcyBtYWNybyBhbmQgaG93IGl0IG9wZXJhdGVzLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2OTUsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE3OjE3OjM2LjY2NzQxNzE3OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2MDk4Nzg5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIEFTU0VSVF9SVE5MXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvcnRuZXRsaW5rLmg9NTM9ZXh0ZXJuIHN0cnVjdCByd19zZW1hcGhvcmUgbmV0X3J3c2VtO1xcbmluY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgtNTQtXFxuaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaDo1NTojZGVmaW5lIEFTU0VSVF9SVE5MKCkgXFxcXFxcbmluY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgtNTYtXFx0V0FSTl9PTkNFKCFydG5sX2lzX2xvY2tlZCgpLCBcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oPTEwOT1ib29sIHJ0bmxfbmV0X2lzX2xvY2tlZChzdHJ1Y3QgbmV0ICpuZXQpO1xcbmluY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgtMTEwLVxcbmluY2x1ZGUvbGludXgvcnRuZXRsaW5rLmg6MTExOiNkZWZpbmUgQVNTRVJUX1JUTkxfTkVUKG5ldClcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaC0xMTItXFx0V0FSTl9PTkNFKCFydG5sX25ldF9pc19sb2NrZWQobmV0KSxcXHRcXHRcXHRcXHRcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE3OjE3OjM4LjEyODQxMzUwMloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNzk0MjMyMDY2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJUTkwgTG9jayBBc3NlcnRpb24gaW4gQnJpZGdlIE1TVCBTdGF0ZSBTZXR0aW5nKipcblxuT2theSwgc28gYEFTU0VSVF9SVE5MKClgIGlzIGp1c3QgYSBgV0FSTl9PTkNFYCBtYWNybywgdGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZC4gSXQncyBtZWFudCB0byBmbGFnIGlmIHRoZSBSVE5MIChSb3V0aW5nIFRhYmxlIE5leHQgTGV2ZWwpIGxvY2sgaXNuJ3QgaGVsZCB3aGVuIGl0J3MgY2FsbGVkLiBUaGlzIGFzc2VydGlvbiB3YXMgYWRkZWQgd2l0aGluIHRoZSBgYnJfbXN0X3NldF9zdGF0ZWAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBpZiAobXN0aSlgIGJyYW5jaC4gVGhlIHByaW1hcnkgcXVlc3Rpb24gYmVjb21lczogKnVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcyBpcyBgYnJfbXN0X3NldF9zdGF0ZWAgaW52b2tlZCBhbmQgd2h5IGlzIGhvbGRpbmcgdGhlIFJUTkwgbG9jayBjcml0aWNhbCB0aGVyZT8qXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgY2FsbGVycy4gSSByZW1lbWJlcjpcblxuMS4gIGBicl9tc3RfcHJvY2Vzc19vbmVgLCB0aGVuIHRocm91Z2ggYGJyX21zdF9wcm9jZXNzYCwgdGhlbiBgYnJfYWZzcGVjYCwgYW5kIGZpbmFsbHkgYGJyX3NldGxpbmtgLiAgQ3J1Y2lhbGx5LCBgYnJfc2V0bGlua2AgKmRvZXMqIGhvbGQgdGhlIFJUTkwgbG9jay5cbjIuICBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyB0aGUgKm9ubHkqIGNhbGwgcGF0aC5cbiAgICBBIHF1aWNrIHNjYW4gb2YgdGhlIGBicl9tc3Rfc2V0X3N0YXRlYCBmdW5jdGlvbiBpdHNlbGYgcmV2ZWFscyBhbm90aGVyIGNhbGwgaW4gYGJyX3NldF9zdGF0ZWAuIEhvd2V2ZXIsIHRoaXMgY2FsbCBwYXNzZXMgYG1zdGkgPSAwYCwgc28gdGhlIGFzc2VydGlvbiBpbiB0aGUgYGlmYCBzdGF0ZW1lbnQgd29uJ3QgdHJpZ2dlci5cblxuU2luY2UgYGJyX21zdF9zZXRfc3RhdGVgIGlzIG5vbi1zdGF0aWMgYW5kIGRlY2xhcmVkIGluIGBicl9wcml2YXRlLmhgLCBJIG5lZWQgdG8ga2VlcCBhbiBvcGVuIG1pbmQgZm9yIGFkZGl0aW9uYWwgY2FsbCBzaXRlcyB0aGF0IG1pZ2h0IGV4aXN0IG91dHNpZGUgb2YgdGhlIHVzdWFsIHN1c3BlY3RzLiBJIG11c3QgY29uc2lkZXIgd2hhdCBlbHNlIG1pZ2h0IGNhbGwgdGhpcyBmdW5jdGlvbi5cblxuSSBhbHNvIHJlbWVtYmVyIGEga2V5IGNoYW5nZSByZWxhdGVkIHRvIGxvY2tpbmcuIFByZXZpb3VzbHksIGFuIGByY3VfcmVhZF9sb2NrKClgIHdhcyBoZWxkIGFjcm9zcyB0aGUgY2FsbCB0byBgc3dpdGNoZGV2X3BvcnRfYXR0cl9zZXQoKWAsIGEgYmxvY2tpbmcgbm90aWZpZXIgdGhhdCBjYXVzZWQgYSBidWcgKGEgc2xlZXBpbmcgZnVuY3Rpb24gYmVpbmcgY2FsbGVkIGZyb20gYW4gaW52YWxpZCBjb250ZXh0KS4gVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQuIE5vdywgdGhlIFJDVSBsb2NrIGlzIG9ubHkgaGVsZCAqYWZ0ZXIqIHRoZSBgc3dpdGNoZGV2YCBjYWxsLiBUaGlzIHJlZmFjdG9yaW5nIGlzIGltcG9ydGFudCBjb250ZXh0LiBUaGUgYEFTU0VSVF9SVE5MKClgIGlzIHNwZWNpZmljYWxseSB0aGVyZSB0byBlbnN1cmUgdGhhdCBmb3IgTVNUIHN0YXRlIHNldHRpbmcgKHdoZW4gYG1zdGkgIT0gMGApIHRoZSBSVE5MIGxvY2sgaXMgcHJvcGVybHkgaGVsZC4gVGhpcyBpcyBjcml0aWNhbCBiZWNhdXNlIGlmIHRoaXMgbG9jayBpc24ndCBoZWxkLCB0aGVuIHRoZXJlIGlzIGEgcmlzayBvZiBhIHJhY2UgY29uZGl0aW9uOiB3aGVyZSB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIGJyaWRnZSBjaGFuZ2VzIGR1ZSB0byBjaGFuZ2VzIHRvIGB2Z2AsIG9yIGl0IGJlaW5nIGZyZWVkLCBiZXR3ZWVuIHRoZSBzdGFydCBvZiB0aGUgZnVuY3Rpb24gYW5kIHRoZSBwb2ludCB0aGF0IGBuYnBfdmxhbl9ncm91cF9yY3UocClgIGlzIGNhbGxlZC4gIE9yIGlmIHN3aXRjaGRldiBmYWlscy5cblxuU28sIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIHNjZW5hcmlvczpcbiogICBSYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIGB2Z2AgY2hhbmdlL2ZyZWUgYW5kIGBuYnBfdmxhbl9ncm91cF9yY3UocClgLlxuKiAgIFJUTkwgbG9jayAqbm90KiBiZWluZyBoZWxkIHdoZW4gYG1zdGkgIT0gMGAuXG4qICAgU3dpdGNoZGV2IGZhaWx1cmVzLlxuXG5OZXh0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIFRoZSBuZWNlc3NhcnkgY29uZmlncyBhcmU6IGBDT05GSUdfQlJJREdFYCwgYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgLCBgQ09ORklHX1ZMQU5fODAyMVFgLCBhbmQgYENPTkZJR19ORVRfU1dJVENIREVWYC4gSSB3aWxsIGNoZWNrIGlmIGVpdGhlciBgQlJJREdFYCBvciBgQlJJREdFX1ZMQU5fRklMVEVSSU5HYCBkaXJlY3RseSBzZWxlY3Qgb3IgZGVwZW5kIG9uIGBORVRfU1dJVENIREVWYCBpbiBgbmV0L2JyaWRnZS9LY29uZmlnYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkxMDksIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTc6MTc6NTYuMDcwNzM2OTg5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzQwMTYwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJTV0lUQ0hERVZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL01ha2VmaWxlPTIzPWJyaWRnZS0kKENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkcpICs9IGJyX3ZsYW4ubyBicl92bGFuX3R1bm5lbC5vIGJyX3ZsYW5fb3B0aW9ucy5vIGJyX21zdC5vXFxubmV0L2JyaWRnZS9NYWtlZmlsZS0yNC1cXG5uZXQvYnJpZGdlL01ha2VmaWxlOjI1OmJyaWRnZS0kKENPTkZJR19ORVRfU1dJVENIREVWKSArPSBicl9zd2l0Y2hkZXYub1xcbm5ldC9icmlkZ2UvTWFrZWZpbGUtMjYtXFxuLS1cXG5uZXQvYnJpZGdlL2JyLmM9MTYyPXN0YXRpYyBpbnQgYnJfc3dpdGNoZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLFxcbi0tXFxubmV0L2JyaWRnZS9ici5jLTE3Ny1cXHRzd2l0Y2ggKGV2ZW50KSB7XFxubmV0L2JyaWRnZS9ici5jOjE3ODpcXHRjYXNlIFNXSVRDSERFVl9GREJfQUREX1RPX0JSSURHRTpcXG5uZXQvYnJpZGdlL2JyLmMtMTc5LVxcdFxcdGZkYl9pbmZvID0gcHRyO1xcbi0tXFxubmV0L2JyaWRnZS9ici5jLTE4OS1cXHRcXHRicmVhaztcXG5uZXQvYnJpZGdlL2JyLmM6MTkwOlxcdGNhc2UgU1dJVENIREVWX0ZEQl9ERUxfVE9fQlJJREdFOlxcbm5ldC9icmlkZ2UvYnIuYy0xOTEtXFx0XFx0ZmRiX2luZm8gPSBwdHI7XFxuLS1cXG5uZXQvYnJpZGdlL2JyLmMtMTk2LVxcdFxcdGJyZWFrO1xcbm5ldC9icmlkZ2UvYnIuYzoxOTc6XFx0Y2FzZSBTV0lUQ0hERVZfRkRCX09GRkxPQURFRDpcXG5uZXQvYnJpZGdlL2JyLmMtMTk4LVxcdFxcdGZkYl9pbmZvID0gcHRyO1xcbi0tXFxubmV0L2JyaWRnZS9ici5jLTIwMS1cXHRcXHRicmVhaztcXG5uZXQvYnJpZGdlL2JyLmM6MjAyOlxcdGNhc2UgU1dJVENIREVWX0ZEQl9GTFVTSF9UT19CUklER0U6XFxubmV0L2JyaWRnZS9ici5jLTIwMy1cXHRcXHRmZGJfaW5mbyA9IHB0cjtcXG4tLVxcbm5ldC9icmlkZ2UvYnIuYz0yMTg9c3RhdGljIGludCBicl9zd2l0Y2hkZXZfYmxvY2tpbmdfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcXG4tLVxcbm5ldC9icmlkZ2UvYnIuYy0yMzItXFx0c3dpdGNoIChldmVudCkge1xcbm5ldC9icmlkZ2UvYnIuYzoyMzM6XFx0Y2FzZSBTV0lUQ0hERVZfQlJQT1JUX09GRkxPQURFRDpcXG5uZXQvYnJpZGdlL2JyLmMtMjM0LVxcdFxcdGJycG9ydF9pbmZvID0gcHRyO1xcbi0tXFxubmV0L2JyaWRnZS9ici5jLTI0MS1cXHRcXHRicmVhaztcXG5uZXQvYnJpZGdlL2JyLmM6MjQyOlxcdGNhc2UgU1dJVENIREVWX0JSUE9SVF9VTk9GRkxPQURFRDpcXG5uZXQvYnJpZGdlL2JyLmMtMjQzLVxcdFxcdGJycG9ydF9pbmZvID0gcHRyO1xcbi0tXFxubmV0L2JyaWRnZS9ici5jLTI0OC1cXHRcXHRicmVhaztcXG5uZXQvYnJpZGdlL2JyLmM6MjQ5OlxcdGNhc2UgU1dJVENIREVWX0JSUE9SVF9SRVBMQVk6XFxubmV0L2JyaWRnZS9ici5jLTI1MC1cXHRcXHRicnBvcnRfaW5mbyA9IHB0cjtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jPTMxPWludCBicl9tcnBfc3dpdGNoZGV2X2FkZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9tcnAgKm1ycClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTM0LVxcdFxcdC5vYmoub3JpZ19kZXYgPSBici1cXHUwMDNlZGV2LFxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jOjM1OlxcdFxcdC5vYmouaWQgPSBTV0lUQ0hERVZfT0JKX0lEX01SUCxcXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYy0zNi1cXHRcXHQucF9wb3J0ID0gcnRubF9kZXJlZmVyZW5jZShtcnAtXFx1MDAzZXBfcG9ydCktXFx1MDAzZWRldixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTQxLVxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jOjQyOlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfTkVUX1NXSVRDSERFVikpXFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtNDMtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYz00OD1pbnQgYnJfbXJwX3N3aXRjaGRldl9kZWwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwICptcnApXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYy01MS1cXHRcXHQub2JqLm9yaWdfZGV2ID0gYnItXFx1MDAzZWRldixcXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYzo1MjpcXHRcXHQub2JqLmlkID0gU1dJVENIREVWX09CSl9JRF9NUlAsXFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtNTMtXFx0XFx0LnBfcG9ydCA9IE5VTEwsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYy01Ny1cXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYzo1ODpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX05FVF9TV0lUQ0hERVYpKVxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTU5LVxcdFxcdHJldHVybiAwO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmM9NjU9YnJfbXJwX3N3aXRjaGRldl9zZXRfcmluZ19yb2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX21ycCAqbXJwLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtNjktXFx0XFx0Lm9iai5vcmlnX2RldiA9IGJyLVxcdTAwM2VkZXYsXFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmM6NzA6XFx0XFx0Lm9iai5pZCA9IFNXSVRDSERFVl9PQkpfSURfUklOR19ST0xFX01SUCxcXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYy03MS1cXHRcXHQucmluZ19yb2xlID0gcm9sZSxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTc3LVxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jOjc4OlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfTkVUX1NXSVRDSERFVikpXFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtNzktXFx0XFx0cmV0dXJuIEJSX01SUF9TVztcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jPTEwMj1icl9tcnBfc3dpdGNoZGV2X3NlbmRfcmluZ190ZXN0KHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX21ycCAqbXJwLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtMTA3LVxcdFxcdC5vYmoub3JpZ19kZXYgPSBici1cXHUwMDNlZGV2LFxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jOjEwODpcXHRcXHQub2JqLmlkID0gU1dJVENIREVWX09CSl9JRF9SSU5HX1RFU1RfTVJQLFxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTEwOS1cXHRcXHQuaW50ZXJ2YWwgPSBpbnRlcnZhbCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTExNS1cXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYzoxMTY6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ORVRfU1dJVENIREVWKSlcXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYy0xMTctXFx0XFx0cmV0dXJuIEJSX01SUF9TVztcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jPTEyMj1pbnQgYnJfbXJwX3N3aXRjaGRldl9zZXRfcmluZ19zdGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYy0xMjctXFx0XFx0Lm9iai5vcmlnX2RldiA9IGJyLVxcdTAwM2VkZXYsXFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmM6MTI4OlxcdFxcdC5vYmouaWQgPSBTV0lUQ0hERVZfT0JKX0lEX1JJTkdfU1RBVEVfTVJQLFxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTEyOS1cXHRcXHQucmluZ19zdGF0ZSA9IHN0YXRlLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtMTMyLVxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jOjEzMzpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX05FVF9TV0lUQ0hERVYpKVxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTEzNC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jPTE0MD1icl9tcnBfc3dpdGNoZGV2X3NldF9pbl9yb2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX21ycCAqbXJwLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtMTQ1LVxcdFxcdC5vYmoub3JpZ19kZXYgPSBici1cXHUwMDNlZGV2LFxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jOjE0NjpcXHRcXHQub2JqLmlkID0gU1dJVENIREVWX09CSl9JRF9JTl9ST0xFX01SUCxcXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYy0xNDctXFx0XFx0LmluX3JvbGUgPSByb2xlLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtMTU1LVxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jOjE1NjpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX05FVF9TV0lUQ0hERVYpKVxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTE1Ny1cXHRcXHRyZXR1cm4gQlJfTVJQX1NXO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmM9MTc5PWludCBicl9tcnBfc3dpdGNoZGV2X3NldF9pbl9zdGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9tcnAgKm1ycCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTE4My1cXHRcXHQub2JqLm9yaWdfZGV2ID0gYnItXFx1MDAzZWRldixcXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYzoxODQ6XFx0XFx0Lm9iai5pZCA9IFNXSVRDSERFVl9PQkpfSURfSU5fU1RBVEVfTVJQLFxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTE4NS1cXHRcXHQuaW5fc3RhdGUgPSBzdGF0ZSxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTE4OC1cXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYzoxODk6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ORVRfU1dJVENIREVWKSlcXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYy0xOTAtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYz0xOTY9YnJfbXJwX3N3aXRjaGRldl9zZW5kX2luX3Rlc3Qoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwICptcnAsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYy0yMDAtXFx0XFx0Lm9iai5vcmlnX2RldiA9IGJyLVxcdTAwM2VkZXYsXFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmM6MjAxOlxcdFxcdC5vYmouaWQgPSBTV0lUQ0hERVZfT0JKX0lEX0lOX1RFU1RfTVJQLFxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTIwMi1cXHRcXHQuaW50ZXJ2YWwgPSBpbnRlcnZhbCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTIwNy1cXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYzoyMDg6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ORVRfU1dJVENIREVWKSlcXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYy0yMDktXFx0XFx0cmV0dXJuIEJSX01SUF9TVztcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jPTIxND1pbnQgYnJfbXJwX3BvcnRfc3dpdGNoZGV2X3NldF9zdGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCB1MzIgc3RhdGUpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYy0yMTctXFx0XFx0Lm9yaWdfZGV2ID0gcC1cXHUwMDNlZGV2LFxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jOjIxODpcXHRcXHQuaWQgPSBTV0lUQ0hERVZfQVRUUl9JRF9QT1JUX1NUUF9TVEFURSxcXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYy0yMTktXFx0XFx0LnUuc3RwX3N0YXRlID0gc3RhdGUsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYy0yMjEtXFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmM6MjIyOlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfTkVUX1NXSVRDSERFVikpXFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtMjIzLVxcdFxcdHJldHVybiAwO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmM9MjI4PWludCBicl9tcnBfcG9ydF9zd2l0Y2hkZXZfc2V0X3JvbGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTIzMi1cXHRcXHQub3JpZ19kZXYgPSBwLVxcdTAwM2VkZXYsXFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmM6MjMzOlxcdFxcdC5pZCA9IFNXSVRDSERFVl9BVFRSX0lEX01SUF9QT1JUX1JPTEUsXFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtMjM0LVxcdFxcdC51Lm1ycF9wb3J0X3JvbGUgPSByb2xlLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtMjM2LVxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jOjIzNzpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX05FVF9TV0lUQ0hERVYpKVxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTIzOC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmM9OTU9aW50IGJyX21zdF9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IG1zdGksIHU4IHN0YXRlLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tc3QuYy05OC1cXHRzdHJ1Y3Qgc3dpdGNoZGV2X2F0dHIgYXR0ciA9IHtcXG5uZXQvYnJpZGdlL2JyX21zdC5jOjk5OlxcdFxcdC5pZCA9IFNXSVRDSERFVl9BVFRSX0lEX1BPUlRfTVNUX1NUQVRFLFxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMTAwLVxcdFxcdC5vcmlnX2RldiA9IHAtXFx1MDAzZWRldixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMTEwLVxcdC8qIE1TVEkgMCAoQ1NUKSBzdGF0ZSBjaGFuZ2VzIGFyZSBub3RpZmllZCB2aWEgdGhlIHJlZ3VsYXJcXG5uZXQvYnJpZGdlL2JyX21zdC5jOjExMTpcXHQgKiBTV0lUQ0hERVZfQVRUUl9JRF9QT1JUX1NUUF9TVEFURS4gQWxsIG90aGVyIE1TVElzIGFyZSBoYW5kbGVkIHZpYVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMTEyLVxcdCAqIG5ldGxpbmsgd2l0aCBSVE5MIGhlbGRcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmM9MTYxPWludCBicl9tc3Rfdmxhbl9zZXRfbXN0aShzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICptdiwgdTE2IG1zdGkpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21zdC5jLTE2My1cXHRzdHJ1Y3Qgc3dpdGNoZGV2X2F0dHIgYXR0ciA9IHtcXG5uZXQvYnJpZGdlL2JyX21zdC5jOjE2NDpcXHRcXHQuaWQgPSBTV0lUQ0hERVZfQVRUUl9JRF9WTEFOX01TVEksXFxubmV0L2JyaWRnZS9icl9tc3QuYy0xNjUtXFx0XFx0Lm9yaWdfZGV2ID0gbXYtXFx1MDAzZWJyLVxcdTAwM2VkZXYsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21zdC5jPTIwNz1pbnQgYnJfbXN0X3NldF9lbmFibGVkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMjEwLVxcdHN0cnVjdCBzd2l0Y2hkZXZfYXR0ciBhdHRyID0ge1xcbm5ldC9icmlkZ2UvYnJfbXN0LmM6MjExOlxcdFxcdC5pZCA9IFNXSVRDSERFVl9BVFRSX0lEX0JSSURHRV9NU1QsXFxubmV0L2JyaWRnZS9icl9tc3QuYy0yMTItXFx0XFx0Lm9yaWdfZGV2ID0gYnItXFx1MDAzZWRldixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MTY4OT1zdGF0aWMgdm9pZCBicl9tY19yb3V0ZXJfc3RhdGVfY2hhbmdlKHN0cnVjdCBuZXRfYnJpZGdlICpwLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNjkzLVxcdFxcdC5vcmlnX2RldiA9IHAtXFx1MDAzZWRldixcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjE2OTQ6XFx0XFx0LmlkID0gU1dJVENIREVWX0FUVFJfSURfQlJJREdFX01ST1VURVIsXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoxNjk1OlxcdFxcdC5mbGFncyA9IFNXSVRDSERFVl9GX0RFRkVSLFxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTY5Ni1cXHRcXHQudS5tcm91dGVyID0gaXNfbWNfcm91dGVyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMDQ2PXN0YXRpYyBpbnQgYnJfbWNfZGlzYWJsZWRfdXBkYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdmFsdWUsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIwNTAtXFx0XFx0Lm9yaWdfZGV2ID0gZGV2LFxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjA1MTpcXHRcXHQuaWQgPSBTV0lUQ0hERVZfQVRUUl9JRF9CUklER0VfTUNfRElTQUJMRUQsXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMDUyOlxcdFxcdC5mbGFncyA9IFNXSVRDSERFVl9GX0RFRkVSLFxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjA1My1cXHRcXHQudS5tY19kaXNhYmxlZCA9ICF2YWx1ZSxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MzM0Mj1zdGF0aWMgdm9pZCBicl9wb3J0X21jX3JvdXRlcl9zdGF0ZV9jaGFuZ2Uoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzM0Ni1cXHRcXHQub3JpZ19kZXYgPSBwLVxcdTAwM2VkZXYsXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzozMzQ3OlxcdFxcdC5pZCA9IFNXSVRDSERFVl9BVFRSX0lEX1BPUlRfTVJPVVRFUixcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjMzNDg6XFx0XFx0LmZsYWdzID0gU1dJVENIREVWX0ZfREVGRVIsXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zMzQ5LVxcdFxcdC51Lm1yb3V0ZXIgPSBpc19tY19yb3V0ZXIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xODM9ZW51bSB7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTg0LVxcdEJSX1ZMRkxBR19QRVJfUE9SVF9TVEFUUyA9IEJJVCgwKSxcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxODU6XFx0QlJfVkxGTEFHX0FEREVEX0JZX1NXSVRDSERFViA9IEJJVCgxKSxcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xODYtXFx0QlJfVkxGTEFHX01DQVNUX0VOQUJMRUQgPSBCSVQoMiksXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xODgtXFx0QlJfVkxGTEFHX05FSUdIX1NVUFBSRVNTX0VOQUJMRUQgPSBCSVQoNCksXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTg5OlxcdEJSX1ZMRkxBR19UQUdHSU5HX0JZX1NXSVRDSERFViA9IEJJVCg1KSxcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTAtXFx0QlJfVkxGTEFHX05FSUdIX0ZPUldBUkRfR1JBVF9FTkFCTEVEID0gQklUKDYpLFxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MzkyPXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQge1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNDQxLSNlbmRpZlxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjQ0MjojaWZkZWYgQ09ORklHX05FVF9TV0lUQ0hERVZcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC00NDMtXFx0LyogSWRlbnRpZmllciB1c2VkIHRvIGdyb3VwIHBvcnRzIHRoYXQgc2hhcmUgdGhlIHNhbWUgc3dpdGNoZGV2XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD01MDI9c3RydWN0IG5ldF9icmlkZ2Uge1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNTc5LVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjU4MDojaWZkZWYgQ09ORklHX05FVF9TV0lUQ0hERVZcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC01ODEtXFx0LyogQ291bnRlciB1c2VkIHRvIG1ha2Ugc3VyZSB0aGF0IGhhcmR3YXJlIGRvbWFpbnMgZ2V0IHVuaXF1ZVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9NTk4PXN0cnVjdCBicl9pbnB1dF9za2JfY2Ige1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNjE2LVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjYxNzojaWZkZWYgQ09ORklHX05FVF9TV0lUQ0hERVZcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC02MTgtXFx0LyogU2V0IGlmIFRYIGRhdGEgcGxhbmUgb2ZmbG9hZGluZyBpcyB1c2VkIHRvd2FyZHMgYXQgbGVhc3Qgb25lXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0yMjAyPXN0YXRpYyBpbmxpbmUgdm9pZCBicl9zeXNmc19kZWxicihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7IHJldHVybjsgfVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMjIwNS0vKiBicl9zd2l0Y2hkZXYuYyAqL1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjIyMDY6I2lmZGVmIENPTkZJR19ORVRfU1dJVENIREVWXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMjIwNy1pbnQgYnJfc3dpdGNoZGV2X3BvcnRfb2ZmbG9hZChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MjM2Mj1zdGF0aWMgaW5saW5lIHZvaWQgYnJfc3dpdGNoZGV2X2luaXQoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMjM2NS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoyMzY2OiNlbmRpZiAvKiBDT05GSUdfTkVUX1NXSVRDSERFViAqL1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTIzNjctXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3N0cC5jPTI5PXZvaWQgYnJfc2V0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHVuc2lnbmVkIGludCBzdGF0ZSlcXG4tLVxcbm5ldC9icmlkZ2UvYnJfc3RwLmMtMzItXFx0XFx0Lm9yaWdfZGV2ID0gcC1cXHUwMDNlZGV2LFxcbm5ldC9icmlkZ2UvYnJfc3RwLmM6MzM6XFx0XFx0LmlkID0gU1dJVENIREVWX0FUVFJfSURfUE9SVF9TVFBfU1RBVEUsXFxubmV0L2JyaWRnZS9icl9zdHAuYzozNDpcXHRcXHQuZmxhZ3MgPSBTV0lUQ0hERVZfRl9ERUZFUixcXG5uZXQvYnJpZGdlL2JyX3N0cC5jLTM1LVxcdFxcdC51LnN0cF9zdGF0ZSA9IHN0YXRlLFxcbi0tXFxubmV0L2JyaWRnZS9icl9zdHAuYz02MTY9aW50IF9fc2V0X2FnZWluZ190aW1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgdClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfc3RwLmMtNjE5LVxcdFxcdC5vcmlnX2RldiA9IGRldixcXG5uZXQvYnJpZGdlL2JyX3N0cC5jOjYyMDpcXHRcXHQuaWQgPSBTV0lUQ0hERVZfQVRUUl9JRF9CUklER0VfQUdFSU5HX1RJTUUsXFxubmV0L2JyaWRnZS9icl9zdHAuYzo2MjE6XFx0XFx0LmZsYWdzID0gU1dJVENIREVWX0ZfU0tJUF9FT1BOT1RTVVBQIHwgU1dJVENIREVWX0ZfREVGRVIsXFxubmV0L2JyaWRnZS9icl9zdHAuYy02MjItXFx0XFx0LnUuYWdlaW5nX3RpbWUgPSBqaWZmaWVzX3RvX2Nsb2NrX3QodCksXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jPTgxPWludCBicl9zd2l0Y2hkZXZfc2V0X3BvcnRfZmxhZyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxcbi0tXFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy05Ny1cXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jOjk4OlxcdGF0dHIuaWQgPSBTV0lUQ0hERVZfQVRUUl9JRF9QT1JUX1BSRV9CUklER0VfRkxBR1M7XFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy05OS1cXHRhdHRyLnUuYnJwb3J0X2ZsYWdzLnZhbCA9IGZsYWdzO1xcbi0tXFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy0xMDEtXFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYzoxMDI6XFx0ZXJyID0gY2FsbF9zd2l0Y2hkZXZfbm90aWZpZXJzKFNXSVRDSERFVl9QT1JUX0FUVFJfU0VULCBwLVxcdTAwM2VkZXYsXFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy0xMDMtXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZpbmZvLmluZm8sIGV4dGFjayk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTExMy1cXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jOjExNDpcXHRhdHRyLmlkID0gU1dJVENIREVWX0FUVFJfSURfUE9SVF9CUklER0VfRkxBR1M7XFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYzoxMTU6XFx0YXR0ci5mbGFncyA9IFNXSVRDSERFVl9GX0RFRkVSO1xcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtMTE2LVxcbi0tXFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYz0xNDU9YnJfc3dpdGNoZGV2X2ZkYl9ub3RpZnkoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy0xNjctXFx0Y2FzZSBSVE1fREVMTkVJR0g6XFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYzoxNjg6XFx0XFx0Y2FsbF9zd2l0Y2hkZXZfbm90aWZpZXJzKFNXSVRDSERFVl9GREJfREVMX1RPX0RFVklDRSxcXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTE2OS1cXHRcXHRcXHRcXHRcXHQgaXRlbS5pbmZvLmRldiwgXFx1MDAyNml0ZW0uaW5mbywgTlVMTCk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTE3MS1cXHRjYXNlIFJUTV9ORVdORUlHSDpcXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jOjE3MjpcXHRcXHRjYWxsX3N3aXRjaGRldl9ub3RpZmllcnMoU1dJVENIREVWX0ZEQl9BRERfVE9fREVWSUNFLFxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtMTczLVxcdFxcdFxcdFxcdFxcdCBpdGVtLmluZm8uZGV2LCBcXHUwMDI2aXRlbS5pbmZvLCBOVUxMKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM9MTc4PWludCBicl9zd2l0Y2hkZXZfcG9ydF92bGFuX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgdmlkLCB1MTYgZmxhZ3MsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTE4Mi1cXHRcXHQub2JqLm9yaWdfZGV2ID0gZGV2LFxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM6MTgzOlxcdFxcdC5vYmouaWQgPSBTV0lUQ0hERVZfT0JKX0lEX1BPUlRfVkxBTixcXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTE4NC1cXHRcXHQuZmxhZ3MgPSBmbGFncyxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM9MTkyPWludCBicl9zd2l0Y2hkZXZfcG9ydF92bGFuX25vX2ZvcmVpZ25fYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiB2aWQsIHUxNiBmbGFncyxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtMTk2LVxcdFxcdC5vYmoub3JpZ19kZXYgPSBkZXYsXFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYzoxOTc6XFx0XFx0Lm9iai5pZCA9IFNXSVRDSERFVl9PQkpfSURfUE9SVF9WTEFOLFxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM6MTk4OlxcdFxcdC5vYmouZmxhZ3MgPSBTV0lUQ0hERVZfRl9OT19GT1JFSUdOLFxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtMTk5LVxcdFxcdC5mbGFncyA9IGZsYWdzLFxcbi0tXFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYz0yMDc9aW50IGJyX3N3aXRjaGRldl9wb3J0X3ZsYW5fZGVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiB2aWQpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTIxMC1cXHRcXHQub2JqLm9yaWdfZGV2ID0gZGV2LFxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM6MjExOlxcdFxcdC5vYmouaWQgPSBTV0lUQ0hERVZfT0JKX0lEX1BPUlRfVkxBTixcXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTIxMi1cXHRcXHQudmlkID0gdmlkLFxcbi0tXFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYz0zMzE9YnJfc3dpdGNoZGV2X2ZkYl9yZXBsYXkoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmJyX2RldiwgY29uc3Qgdm9pZCAqY3R4LFxcbi0tXFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy0zNDctXFx0aWYgKGFkZGluZylcXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jOjM0ODpcXHRcXHRhY3Rpb24gPSBTV0lUQ0hERVZfRkRCX0FERF9UT19ERVZJQ0U7XFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy0zNDktXFx0ZWxzZVxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM6MzUwOlxcdFxcdGFjdGlvbiA9IFNXSVRDSERFVl9GREJfREVMX1RPX0RFVklDRTtcXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTM1MS1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM9MzY1PXN0YXRpYyBpbnQgYnJfc3dpdGNoZGV2X3ZsYW5fYXR0cl9yZXBsYXkoc3RydWN0IG5ldF9kZXZpY2UgKmJyX2RldixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtMzkxLVxcdFxcdGlmICh2LVxcdTAwM2Vtc3RpKSB7XFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYzozOTI6XFx0XFx0XFx0YXR0ci5pZCA9IFNXSVRDSERFVl9BVFRSX0lEX1ZMQU5fTVNUSTtcXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTM5My1cXHRcXHRcXHRhdHRyLnUudmxhbl9tc3RpLnZpZCA9IHYtXFx1MDAzZXZpZDtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtMzk1LVxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM6Mzk2OlxcdFxcdFxcdGVyciA9IG5iLVxcdTAwM2Vub3RpZmllcl9jYWxsKG5iLCBTV0lUQ0hERVZfUE9SVF9BVFRSX1NFVCxcXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTM5Ny1cXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2YXR0cl9pbmZvKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM9NDI4PXN0YXRpYyBpbnQgYnJfc3dpdGNoZGV2X3ZsYW5fcmVwbGF5X2dyb3VwKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTQ0NS1cXHRcXHRcXHQub2JqLm9yaWdfZGV2ID0gZGV2LFxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM6NDQ2OlxcdFxcdFxcdC5vYmouaWQgPSBTV0lUQ0hERVZfT0JKX0lEX1BPUlRfVkxBTixcXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTQ0Ny1cXHRcXHRcXHQuZmxhZ3MgPSBicl92bGFuX2ZsYWdzKHYsIHB2aWQpLFxcbi0tXFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYz00NjM9c3RhdGljIGludCBicl9zd2l0Y2hkZXZfdmxhbl9yZXBsYXkoc3RydWN0IG5ldF9kZXZpY2UgKmJyX2RldixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtNDgxLVxcdGlmIChhZGRpbmcpXFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYzo0ODI6XFx0XFx0YWN0aW9uID0gU1dJVENIREVWX1BPUlRfT0JKX0FERDtcXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTQ4My1cXHRlbHNlXFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYzo0ODQ6XFx0XFx0YWN0aW9uID0gU1dJVENIREVWX1BPUlRfT0JKX0RFTDtcXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTQ4NS1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM9NTY0PXN0YXRpYyB2b2lkIGJyX3N3aXRjaGRldl9ob3N0X21kYl9vbmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtNTcwLVxcdFxcdC5vYmogPSB7XFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYzo1NzE6XFx0XFx0XFx0LmlkID0gU1dJVENIREVWX09CSl9JRF9IT1NUX01EQixcXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jOjU3MjpcXHRcXHRcXHQuZmxhZ3MgPSBTV0lUQ0hERVZfRl9ERUZFUixcXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTU3My1cXHRcXHRcXHQub3JpZ19kZXYgPSBkZXYsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jPTYxOT1zdGF0aWMgaW50IGJyX3N3aXRjaGRldl9tZGJfcXVldWVfb25lKHN0cnVjdCBsaXN0X2hlYWQgKm1kYl9saXN0LFxcbi0tXFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy02MzUtXFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYzo2MzY6XFx0aWYgKGFjdGlvbiA9PSBTV0lUQ0hERVZfUE9SVF9PQkpfQUREIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy02MzctXFx0ICAgIHN3aXRjaGRldl9wb3J0X29ial9hY3RfaXNfZGVmZXJyZWQoZGV2LCBhY3Rpb24sIFxcdTAwMjZtZGIub2JqKSkge1xcbi0tXFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYz02NTc9dm9pZCBicl9zd2l0Y2hkZXZfbWRiX25vdGlmeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy02NjQtXFx0XFx0Lm9iaiA9IHtcXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jOjY2NTpcXHRcXHRcXHQuaWQgPSBTV0lUQ0hERVZfT0JKX0lEX1BPUlRfTURCLFxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM6NjY2OlxcdFxcdFxcdC5mbGFncyA9IFNXSVRDSERFVl9GX0RFRkVSLFxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtNjY3LVxcdFxcdH0sXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jPTY5Nj1icl9zd2l0Y2hkZXZfbWRiX3JlcGxheShzdHJ1Y3QgbmV0X2RldmljZSAqYnJfZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy03MjEtXFx0aWYgKGFkZGluZylcXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jOjcyMjpcXHRcXHRhY3Rpb24gPSBTV0lUQ0hERVZfUE9SVF9PQkpfQUREO1xcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtNzIzLVxcdGVsc2VcXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jOjcyNDpcXHRcXHRhY3Rpb24gPSBTV0lUQ0hERVZfUE9SVF9PQkpfREVMO1xcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtNzI1LVxcbi0tXFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy03NDAtXFx0XFx0XFx0ZXJyID0gYnJfc3dpdGNoZGV2X21kYl9xdWV1ZV9vbmUoXFx1MDAyNm1kYl9saXN0LCBkZXYsIGFjdGlvbixcXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jOjc0MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgU1dJVENIREVWX09CSl9JRF9IT1NUX01EQixcXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTc0Mi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgbXAsIGJyX2Rldik7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTc1NC1cXHRcXHRcXHRlcnIgPSBicl9zd2l0Y2hkZXZfbWRiX3F1ZXVlX29uZShcXHUwMDI2bWRiX2xpc3QsIGRldiwgYWN0aW9uLFxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM6NzU1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCBTV0lUQ0hERVZfT0JKX0lEX1BPUlRfTURCLFxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtNzU2LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBtcCwgZGV2KTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtNzY3LVxcdFxcdGVyciA9IGJyX3N3aXRjaGRldl9tZGJfcmVwbGF5X29uZShuYiwgZGV2LFxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM6NzY4OlxcdFxcdFxcdFxcdFxcdFxcdCAgU1dJVENIREVWX09CSl9QT1JUX01EQihvYmopLFxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtNzY5LVxcdFxcdFxcdFxcdFxcdFxcdCAgYWN0aW9uLCBjdHgsIGV4dGFjayk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTc3OC1cXHRcXHRsaXN0X2RlbChcXHUwMDI2b2JqLVxcdTAwM2VsaXN0KTtcXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jOjc3OTpcXHRcXHRrZnJlZShTV0lUQ0hERVZfT0JKX1BPUlRfTURCKG9iaikpO1xcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtNzgwLVxcdH1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTEwMz1zdGF0aWMgaW50IF9fdmxhbl92aWRfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTExMy1cXHRpZiAoZXJyICE9IC1FT1BOT1RTVVBQKSB7XFxubmV0L2JyaWRnZS9icl92bGFuLmM6MTE0OlxcdFxcdHYtXFx1MDAzZXByaXZfZmxhZ3MgfD0gQlJfVkxGTEFHX0FEREVEX0JZX1NXSVRDSERFViB8IEJSX1ZMRkxBR19UQUdHSU5HX0JZX1NXSVRDSERFVjtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMTUtXFx0XFx0cmV0dXJuIGVycjtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTExOS1cXHRcXHRyZXR1cm4gdmxhbl92aWRfYWRkKGRldiwgYnItXFx1MDAzZXZsYW5fcHJvdG8sIHYtXFx1MDAzZXZpZCk7XFxubmV0L2JyaWRnZS9icl92bGFuLmM6MTIwOlxcdHYtXFx1MDAzZXByaXZfZmxhZ3MgfD0gQlJfVkxGTEFHX0FEREVEX0JZX1NXSVRDSERFVjtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMjEtXFx0cmV0dXJuIGVycjtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTE0OT1zdGF0aWMgaW50IF9fdmxhbl92aWRfZGVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTE1Ny1cXHRlcnIgPSBicl9zd2l0Y2hkZXZfcG9ydF92bGFuX2RlbChkZXYsIHYtXFx1MDAzZXZpZCk7XFxubmV0L2JyaWRnZS9icl92bGFuLmM6MTU4OlxcdGlmICghKHYtXFx1MDAzZXByaXZfZmxhZ3MgXFx1MDAyNiBCUl9WTEZMQUdfQURERURfQllfU1dJVENIREVWKSlcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xNTktXFx0XFx0dmxhbl92aWRfZGVsKGRldiwgYnItXFx1MDAzZXZsYW5fcHJvdG8sIHYtXFx1MDAzZXZpZCk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz04OTQ9aW50IGJyX3ZsYW5fZmlsdGVyX3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtODk4LVxcdFxcdC5vcmlnX2RldiA9IGJyLVxcdTAwM2VkZXYsXFxubmV0L2JyaWRnZS9icl92bGFuLmM6ODk5OlxcdFxcdC5pZCA9IFNXSVRDSERFVl9BVFRSX0lEX0JSSURHRV9WTEFOX0ZJTFRFUklORyxcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo5MDA6XFx0XFx0LmZsYWdzID0gU1dJVENIREVWX0ZfU0tJUF9FT1BOT1RTVVBQLFxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTkwMS1cXHRcXHQudS52bGFuX2ZpbHRlcmluZyA9IHZhbCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTk0NT1pbnQgX19icl92bGFuX3NldF9wcm90byhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIF9fYmUxNiBwcm90byxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTk0OS1cXHRcXHQub3JpZ19kZXYgPSBici1cXHUwMDNlZGV2LFxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjk1MDpcXHRcXHQuaWQgPSBTV0lUQ0hERVZfQVRUUl9JRF9CUklER0VfVkxBTl9QUk9UT0NPTCxcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo5NTE6XFx0XFx0LmZsYWdzID0gU1dJVENIREVWX0ZfU0tJUF9FT1BOT1RTVVBQLFxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTk1Mi1cXHRcXHQudS52bGFuX3Byb3RvY29sID0gbnRvaHMocHJvdG8pLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtOTcwLVxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkodmxhbiwgXFx1MDAyNnZnLVxcdTAwM2V2bGFuX2xpc3QsIHZsaXN0KSB7XFxubmV0L2JyaWRnZS9icl92bGFuLmM6OTcxOlxcdFxcdFxcdGlmICh2bGFuLVxcdTAwM2Vwcml2X2ZsYWdzIFxcdTAwMjYgQlJfVkxGTEFHX0FEREVEX0JZX1NXSVRDSERFVilcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy05NzItXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy05ODctXFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh2bGFuLCBcXHUwMDI2dmctXFx1MDAzZXZsYW5fbGlzdCwgdmxpc3QpIHtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo5ODg6XFx0XFx0XFx0aWYgKHZsYW4tXFx1MDAzZXByaXZfZmxhZ3MgXFx1MDAyNiBCUl9WTEZMQUdfQURERURfQllfU1dJVENIREVWKVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTk4OS1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTEwMDAtXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yZXZlcnNlKHZsYW4sIFxcdTAwMjZ2Zy1cXHUwMDNldmxhbl9saXN0LCB2bGlzdCkge1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjEwMDE6XFx0XFx0aWYgKHZsYW4tXFx1MDAzZXByaXZfZmxhZ3MgXFx1MDAyNiBCUl9WTEZMQUdfQURERURfQllfU1dJVENIREVWKVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTEwMDItXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMDA4LVxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkodmxhbiwgXFx1MDAyNnZnLVxcdTAwM2V2bGFuX2xpc3QsIHZsaXN0KSB7XFxubmV0L2JyaWRnZS9icl92bGFuLmM6MTAwOTpcXHRcXHRcXHRpZiAodmxhbi1cXHUwMDNlcHJpdl9mbGFncyBcXHUwMDI2IEJSX1ZMRkxBR19BRERFRF9CWV9TV0lUQ0hERVYpXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTAxMC1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTEyNTc9aW50IG5icF92bGFuX2luaXQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTI2MC1cXHRcXHQub3JpZ19kZXYgPSBwLVxcdTAwM2Vici1cXHUwMDNlZGV2LFxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjEyNjE6XFx0XFx0LmlkID0gU1dJVENIREVWX0FUVFJfSURfQlJJREdFX1ZMQU5fRklMVEVSSU5HLFxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjEyNjI6XFx0XFx0LmZsYWdzID0gU1dJVENIREVWX0ZfU0tJUF9FT1BOT1RTVVBQLFxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTEyNjMtXFx0XFx0LnUudmxhbl9maWx0ZXJpbmcgPSBicl9vcHRfZ2V0KHAtXFx1MDAzZWJyLCBCUk9QVF9WTEFOX0VOQUJMRUQpLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmM9MTQ3OT1pbnQgYnJfdmxhbl9maWxsX2ZvcndhcmRfcGF0aF9tb2RlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTE0OTgtXFx0XFx0cGF0aC1cXHUwMDNlYnJpZGdlLnZsYW5fbW9kZSA9IERFVl9QQVRIX0JSX1ZMQU5fS0VFUDtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoxNDk5OlxcdGVsc2UgaWYgKHYtXFx1MDAzZXByaXZfZmxhZ3MgXFx1MDAyNiBCUl9WTEZMQUdfVEFHR0lOR19CWV9TV0lUQ0hERVYpXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTUwMC1cXHRcXHRwYXRoLVxcdTAwM2VicmlkZ2Uudmxhbl9tb2RlID0gREVWX1BBVEhfQlJfVkxBTl9VTlRBR19IVztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTc6MTc6NTYuMTE4MTQyNDQxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEzMzYzMjAwMDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCcmlkZ2UgVkxBTiBGaWx0ZXJpbmcgQ29tcGlsYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGlzIGxpbmUgYGJyaWRnZS0kKENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkcpICs9IGJyX3ZsYW4ubyBicl92bGFuX3R1bm5lbC5vIGJyX3ZsYW5fb3B0aW9ucy5vIGJyX21zdC5vYCB0ZWxscyBtZSB0aGF0IHRoZSBgYnJfbXN0LmNgIG9iamVjdCBmaWxlLCBhbW9uZyBvdGhlcnMsIGdldHMgaW5jbHVkZWQgaW4gdGhlIGJyaWRnZSBtb2R1bGUgYnVpbGQgcHJvY2VzcyAqb25seSogd2hlbiBgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR2AgaXMgZGVmaW5lZC4gVGhhdCdzIHRoZSBrZXkgY29uZGl0aW9uLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIGl0J3MgZ29pbmcgdG8gYmUgbmVzdGVkLCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biBgQlJJREdFYCBhbmQgYFZMQU5fODAyMVFgIGZvciB0aGlzIGNvbmZpZ3VyYXRpb24uIEFuZCBsb29raW5nIGF0IHRoZSBjb2RlLCBpdCBsb29rcyBsaWtlIGBORVRfU1dJVENIREVWYCBpcyBhbHNvIHJlbGV2YW50IGhlcmUuIFNwZWNpZmljYWxseSwgSSBzZWUgYSBjYWxsIHRvIGBzd2l0Y2hkZXZfcG9ydF9hdHRyX3NldGAsIGFuZCB0aGUgdXNlIG9mIHN3aXRjaGRldiBibG9ja2luZyBub3RpZmllcnMgd2hpY2ggbWFrZXMgbWUgdGhpbmsgaXQgaGFzIHNvbWUgYmVhcmluZyBvbiB0aGlzIHNldHVwIGlmIGBORVRfU1dJVENIREVWYCBpcyBhbHNvIGVuYWJsZWQuXG5cbkkgbmVlZCB0byBzZWUgaWYgYE5FVF9TV0lUQ0hERVZgIGl0c2VsZiBoYXMgYW55IGRlcGVuZGVuY2llcywgc28gSSBjYW4gZW5zdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBjb25maWd1cmF0aW9uIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NDA2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE3OjE4OjA5LjQ4MTM0NTYzOVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc4NTkyNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9TV0lUQ0hERVZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc3dpdGNoZGV2L0tjb25maWctNS1cXG5uZXQvc3dpdGNoZGV2L0tjb25maWc6Njpjb25maWcgTkVUX1NXSVRDSERFVlxcbm5ldC9zd2l0Y2hkZXYvS2NvbmZpZy03LVxcdGJvb2wgXFxcIlN3aXRjaCAoYW5kIHN3aXRjaC1pc2gpIGRldmljZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNzoxODowOS41NDkyMTI2NThaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDM5NjExMzU3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIGBORVRfU1dJVENIREVWYCoqXG5cbkFscmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGF0IHRoaXMgYE5FVF9TV0lUQ0hERVZgIGNvbmZpZyBvcHRpb24uIFRoZSBkb2N1bWVudGF0aW9uIHNlZW1zIHRvIHN1Z2dlc3QgaXQncyBlaXRoZXIgZW50aXJlbHkgaW5kZXBlbmRlbnQsIG9yIGF0IG1vc3QsIHJlbGllcyBvbiB0aGUgYnJvYWRlciBgTkVUYCBmZWF0dXJlLiBUaGF0J3MgYSBsaXR0bGUgdW51c3VhbCwgZ2l2ZW4gdGhlIGNvbXBsZXggbmF0dXJlIG9mIHN3aXRjaCBkZXZpY2Ugc3VwcG9ydC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBkaXZlIGludG8gdGhlIGBuZXQvc3dpdGNoZGV2L0tjb25maWdgIGZpbGUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBkZWZpbml0aXZlIGFuc3dlciBhYm91dCBpdHMgZGVwZW5kZW5jaWVzIGFuZCBhbnkgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgaXQuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZXNlIHJlbGF0aW9uc2hpcHMgdG8gZW5zdXJlIHByb3BlciBjb25maWd1cmF0aW9uIGFuZCBhdm9pZCBhbnkgdW5leHBlY3RlZCBjb25mbGljdHMgb3IgbWlzc2luZyBmdW5jdGlvbmFsaXR5IHdoZW4gZGVhbGluZyB3aXRoIG5ldHdvcmtpbmcgZGV2aWNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk5MjIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNzoxODoxMy45NDUzMzAzOTdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3N3aXRjaGRldi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIENvbmZpZ3VyYXRpb24gZm9yIFN3aXRjaCBkZXZpY2Ugc3VwcG9ydFxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgTkVUX1NXSVRDSERFVlxcbiAgIDc6XFx0XFx0Ym9vbCBcXFwiU3dpdGNoIChhbmQgc3dpdGNoLWlzaCkgZGV2aWNlIHN1cHBvcnRcXFwiXFxuICAgODpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA5OlxcdFxcdGhlbHBcXG4gIDEwOlxcdFxcdCAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgZ2x1ZSBiZXR3ZWVuIGNvcmUgbmV0d29ya2luZyBjb2RlIGFuZCBkZXZpY2VcXG4gIDExOlxcdFxcdCAgZHJpdmVycyBpbiBvcmRlciB0byBzdXBwb3J0IGhhcmR3YXJlIHN3aXRjaCBjaGlwcyBpbiB2ZXJ5IGdlbmVyaWNcXG4gIDEyOlxcdFxcdCAgbWVhbmluZyBvZiB0aGUgd29yZCBcXFwic3dpdGNoXFxcIi4gVGhpcyBpbmNsdWRlIGRldmljZXMgc3VwcG9ydGluZyBMMi9MMyBidXRcXG4gIDEzOlxcdFxcdCAgYWxzbyB2YXJpb3VzIGZsb3cgb2ZmbG9hZGluZyBjaGlwcywgaW5jbHVkaW5nIHN3aXRjaGVzIGVtYmVkZGVkIGludG9cXG4gIDE0OlxcdFxcdCAgU1ItSU9WIE5JQ3MuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE3OjE4OjEzLjk0NTQyNTE3N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1ODE5MTAyNzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBhbmQgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBkZXBlbmRlbmNpZXMgYXJlIGNsZWFyOiBgTkVUX1NXSVRDSERFVmAgcmVsaWVzIG9uIGBJTkVUYC4gYEJSSURHRWAgY29ycmVzcG9uZHMgdG8gYENPTkZJR19CUklER0VgLCBhbmQgc2ltaWxhcmx5LCBgQlJJREdFX1ZMQU5fRklMVEVSSU5HYCBtYXBzIHRvIGBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYCwgYW5kIGBWTEFOXzgwMjFRYCBtYXBzIHRvIGBDT05GSUdfVkxBTl84MDIxUWAuIEkgbmVlZCB0byBiZSBjYXJlZnVsIHRvIHN0cmlwIHRoZSBgQ09ORklHX2AgcHJlZml4IHdoZW4gc3BlY2lmeWluZyB0aGUgcmVxdWlyZWQgY29uZmlncy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zOiBgQlJJREdFYCwgYEJSSURHRV9WTEFOX0ZJTFRFUklOR2AsIGBWTEFOXzgwMjFRYCwgYW5kIGBORVRfU1dJVENIREVWYCBhcmUgYWxsIGVzc2VudGlhbC4gQ2hlY2suIE5leHQsIEkgbmVlZCB0byBsb29rIGF0IHRoZSBgRm9jdXNTeW1ib2xzYC5cblxuSSBzZWUgYGJyX21zdF9zZXRfc3RhdGVgIC0gdGhhdCdzIHRoZSBmdW5jdGlvbiB0aGUgcGF0Y2ggbW9kaWZpZWQhIEFsc28gYGJyX21zdF9wcm9jZXNzYCwgYW5kIGBicl9tc3Rfc2V0X2VuYWJsZWRgIHdoaWNoIHNlZW1zIHRvIGJlIHRoZSBNU1QgZW5hYmxlIGVudHJ5IHBvaW50LiBBbmQgYGJyX3NldF9zdGF0ZWAsIHdoaWNoIGNhbGxzIGBicl9tc3Rfc2V0X3N0YXRlYC4gVGhlc2UgYXJlICpub3QqIHViaXF1aXRvdXMgZnVuY3Rpb25zLiBUaGV5IGFyZSAqaGlnaGx5KiBzcGVjaWZpYyB0byBFdGhlcm5ldCBCcmlkZ2UgTXVsdGlwbGUgU3Bhbm5pbmcgVHJlZSAoTVNUKSBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIGdvb2Q7IHdlJ3JlIGF2b2lkaW5nIHRob3NlIGNvbW1vbiBob3RzcG90cy5cblxuTm93LCB0aGUgcmVhc29uaW5nOiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGJyX21zdF9zZXRfc3RhdGUoKWAgdG8gbW92ZSBgc3dpdGNoZGV2X3BvcnRfYXR0cl9zZXQoKWAgb3V0IG9mIGFuIGByY3VfcmVhZF9sb2NrKClgIGNyaXRpY2FsIHNlY3Rpb24gYW5kIGludHJvZHVjZXMgYW4gYEFTU0VSVF9SVE5MKClgIGFzc2VydGlvbi4gVGhpcyBjaGFuZ2VzIHRoZSBsb2NraW5nIGFuZCBpbnRyb2R1Y2VzIGEgbmV3IHJ1bnRpbWUgYXNzZXJ0aW9uIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSwgc3BlY2lmaWNhbGx5IEV0aGVybmV0IGJyaWRnZSBNU1Qgc3VwcG9ydC5cblxuTGV0J3MgcmV2aWV3IHRoZSBndWlkZWxpbmVzLCBzdGVwIGJ5IHN0ZXA6XG4qICAgKipSZWFjaGFiaWxpdHk6KiogU3RhbmRhcmQgUUVNVS9zeXprYWxsZXIgY2FuIGVhc2lseSBjb25maWd1cmUgYnJpZGdlIGRldmljZXMgd2l0aCBWTEFOIGZpbHRlcmluZyBhbmQgTVNUIHVzaW5nIG5ldGxpbmsuIFRoaXMgaXMgZ29vZC4gTm8gdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGlzIG5lZWRlZC5cbiogICAqKlJlZmFjdG9yaW5ncyBhbmQgQXNzZXJ0aW9uczoqKiBUaGUgcGF0Y2ggY2xlYXJseSBpbnZvbHZlcyBhbiBSQ1UgY3JpdGljYWwgc2VjdGlvbiBtb3ZlIGFuZCBhIG5ldyBgQVNTRVJUX1JUTkwoKWAgYXNzZXJ0aW9uLCB3aGljaCBpcyBwZXJmZWN0LlxuKiAgICoqRm9jdXNTeW1ib2xzOioqIEknbSB0YXJnZXRpbmcgc3BlY2lmaWMgZmVhdHVyZSBsb2dpYyB3aXRoIHRoZXNlIGZ1bmN0aW9ucywgYW5kIG5vdCBob3QgcGF0aHMuIENoZWNrLlxuKiAgICoqRW5hYmxlQ29uZmlnczoqKiBDb25maXJtZWQ6IGBCUklER0VgLCBgQlJJREdFX1ZMQU5fRklMVEVSSU5HYCwgYFZMQU5fODAyMVFgLCBhbmQgYE5FVF9TV0lUQ0hERVZgLiBTdHJpcHBlZCB0aGUgJ0NPTkZJR18nIHByZWZpeC5cblxuRXZlcnl0aGluZyBhbGlnbnMuIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMzQ2LCJPdXRwdXRUb2tlbnMiOjE3MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE3OjE4OjE5Ljc2NDUzMTM0NloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwODcwOTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUklER0VcIixcbiAgICBcIkJSSURHRV9WTEFOX0ZJTFRFUklOR1wiLFxuICAgIFwiVkxBTl84MDIxUVwiLFxuICAgIFwiTkVUX1NXSVRDSERFVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyX21zdF9zZXRfc3RhdGVcIixcbiAgICBcImJyX21zdF9wcm9jZXNzXCIsXG4gICAgXCJicl9tc3Rfc2V0X2VuYWJsZWRcIixcbiAgICBcImJyX3NldF9zdGF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBpbiBgYnJfbXN0X3NldF9zdGF0ZSgpYCB3aXRoaW4gdGhlIEV0aGVybmV0IGJyaWRnZSBNU1QgaW1wbGVtZW50YXRpb246IGl0IG1vdmVzIGEgcG90ZW50aWFsbHkgc2xlZXBpbmcgc3dpdGNoZGV2IGNhbGwgb3V0c2lkZSBvZiB0aGUgYHJjdV9yZWFkX2xvY2soKWAgY3JpdGljYWwgc2VjdGlvbiBhbmQgYWRkcyBhbiBgQVNTRVJUX1JUTkwoKWAgaW52YXJpYW50IGNoZWNrLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGFjY2Vzc2libGUgdmlhIG5ldGxpbmsgYW5kIGJyaWRnZSBTVFAgY29uZmlndXJhdGlvbiBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlJJREdFXCIsXG4gICAgXCJCUklER0VfVkxBTl9GSUxURVJJTkdcIixcbiAgICBcIlZMQU5fODAyMVFcIixcbiAgICBcIk5FVF9TV0lUQ0hERVZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicl9tc3Rfc2V0X3N0YXRlXCIsXG4gICAgXCJicl9tc3RfcHJvY2Vzc1wiLFxuICAgIFwiYnJfbXN0X3NldF9lbmFibGVkXCIsXG4gICAgXCJicl9zZXRfc3RhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBsb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24gaW4gYGJyX21zdF9zZXRfc3RhdGUoKWAgd2l0aGluIHRoZSBFdGhlcm5ldCBicmlkZ2UgTVNUIGltcGxlbWVudGF0aW9uOiBpdCBtb3ZlcyBhIHBvdGVudGlhbGx5IHNsZWVwaW5nIHN3aXRjaGRldiBjYWxsIG91dHNpZGUgb2YgdGhlIGByY3VfcmVhZF9sb2NrKClgIGNyaXRpY2FsIHNlY3Rpb24gYW5kIGFkZHMgYW4gYEFTU0VSVF9SVE5MKClgIGludmFyaWFudCBjaGVjay4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rIGFuZCBicmlkZ2UgU1RQIGNvbmZpZ3VyYXRpb24gaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNzoxODoxOS44MzU0MDkyNTRaIiwiU2VxIjozMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MDk4MzczOTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTc6MTg6MTkuODM1ODE4MzY0WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTQwOTc5NjA5NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgc2xlZXAtaW4tYXRvbWljIGJ1ZyBpbiBgYnJfbXN0X3NldF9zdGF0ZSgpYCBieSBtb3ZpbmcgYHN3aXRjaGRldl9wb3J0X2F0dHJfc2V0KClgICh3aGljaCBtYXkgc2xlZXApIG91dHNpZGUgb2YgdGhlIGByY3VfcmVhZF9sb2NrKClgIGNyaXRpY2FsIHNlY3Rpb24sIGFkZGluZyBgQVNTRVJUX1JUTkwoKWAsIGFuZCBvbmx5IGFjcXVpcmluZyBgcmN1X3JlYWRfbG9jaygpYCB3aGVuIHJlYWRpbmcgdGhlIFZMQU4gZ3JvdXAgYW5kIGl0ZXJhdGluZyBvdmVyIHRoZSBWTEFOIGxpc3QuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcywgZG9lcyBub3QgYWZmZWN0IGJ1ZmZlciBib3VuZHMgb3IgY29weSBsZW5ndGhzLCBhbmQgZG9lcyBub3QgYWx0ZXIgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gU2xlZXBpbmcgd2hpbGUgaG9sZGluZyBhbiBSQ1UgcmVhZCBsb2NrIGlzIGRldGVjdGVkIGJ5IHN0YW5kYXJkIGRlYnVnIGNvbmZpZ3VyYXRpb25zIChgQ09ORklHX0RFQlVHX0FUT01JQ19TTEVFUGAgLyBgbWlnaHRfc2xlZXAoKWApLCBhbmQgbG9jayBpbnZhcmlhbnRzIGFyZSB2ZXJpZmllZCBieSBgQVNTRVJUX1JUTkwoKWAgLyBgTE9DS0RFUGAuIEJlY2F1c2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODBhNTA4NGQwMDI2YTg2NThmMzUwNmNkOTI1NzYxZWFhM2Y5NjVlZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDE3OjE2OjA2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9tc3QuYyBiL25ldC9icmlkZ2UvYnJfbXN0LmNcbmluZGV4IDQzYTMwMGFlNmJmYWYuLjE2NTRlZmQzMDQ1YjAgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX21zdC5jXG4rKysgYi9uZXQvYnJpZGdlL2JyX21zdC5jXG5AQCAtMTA3LDIxICsxMDcsMjQgQEAgaW50IGJyX21zdF9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IG1zdGksIHU4IHN0YXRlLFxuIFx0c3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdjtcbiBcdGludCBlcnIgPSAwO1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVx0dmcgPSBuYnBfdmxhbl9ncm91cF9yY3UocCk7XG4tXHRpZiAoIXZnKVxuLVx0XHRnb3RvIG91dDtcbi1cbiBcdC8qIE1TVEkgMCAoQ1NUKSBzdGF0ZSBjaGFuZ2VzIGFyZSBub3RpZmllZCB2aWEgdGhlIHJlZ3VsYXJcbi1cdCAqIFNXSVRDSERFVl9BVFRSX0lEX1BPUlRfU1RQX1NUQVRFLlxuK1x0ICogU1dJVENIREVWX0FUVFJfSURfUE9SVF9TVFBfU1RBVEUuIEFsbCBvdGhlciBNU1RJcyBhcmUgaGFuZGxlZCB2aWFcbitcdCAqIG5ldGxpbmsgd2l0aCBSVE5MIGhlbGRcbiBcdCAqL1xuIFx0aWYgKG1zdGkpIHtcbitcdFx0QVNTRVJUX1JUTkwoKTtcbitcbiBcdFx0ZXJyID0gc3dpdGNoZGV2X3BvcnRfYXR0cl9zZXQocC1cdTAwM2VkZXYsIFx1MDAyNmF0dHIsIGV4dGFjayk7XG4gXHRcdGlmIChlcnIgXHUwMDI2XHUwMDI2IGVyciAhPSAtRU9QTk9UU1VQUClcbiBcdFx0XHRnb3RvIG91dDtcbitcdFx0ZXJyID0gMDtcbiBcdH1cbiBcbi1cdGVyciA9IDA7XG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHR2ZyA9IG5icF92bGFuX2dyb3VwX3JjdShwKTtcbitcdGlmICghdmcpXG4rXHRcdGdvdG8gb3V0X3JjdV91bmxvY2s7XG4rXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh2LCBcdTAwMjZ2Zy1cdTAwM2V2bGFuX2xpc3QsIHZsaXN0KSB7XG4gXHRcdGlmICh2LVx1MDAzZWJydmxhbi1cdTAwM2Vtc3RpICE9IG1zdGkpXG4gXHRcdFx0Y29udGludWU7XG5AQCAtMTI5LDggKzEzMiw5IEBAIGludCBicl9tc3Rfc2V0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHUxNiBtc3RpLCB1OCBzdGF0ZSxcbiBcdFx0YnJfbXN0X3ZsYW5fc2V0X3N0YXRlKHZnLCB2LCBzdGF0ZSk7XG4gXHR9XG4gXG4tb3V0OlxuK291dF9yY3VfdW5sb2NrOlxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4rb3V0OlxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNzoxODoxOS44MzU4MTkzMDRaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTc3MjA0NTQzMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW4uXG5cbioqSW5zcGVjdGluZyB0aGUgQ29kZSoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBwYXRjaC4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIHNlZSBpdCdzIHRvdWNoaW5nIGBuZXQvYnJpZGdlL2JyX21zdC5jYC4gVGhhdCBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQg4oCTIE1TVFAsIGJyaWRnaW5nLCBhbmQgc3Bhbm5pbmcgdHJlZSBwcm90b2NvbCwgYWxsIGNvcmUgY29uY2VwdHMuIE5vdywgbGV0IG1lIGxvY2F0ZSB0aGUgYXJlYSBiZWluZyBtb2RpZmllZCBpbiB0aGF0IGZpbGUuIEknbSBnb2luZyB0byBmb2N1cyBvbiBhcm91bmQgbGluZSAxMDcuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgYXJvdW5kIHRoYXQgc3BlY2lmaWMgbGluZSB3aWxsIGJlIGtleSB0byBncmFzcGluZyB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyB0aGVyZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDM4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNzoxODozNy41NTYyNzY1MjdaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JyaWRnZS9icl9tc3QuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA5MDpcXHRcXHRcXHRicl92bGFuX3NldF9wdmlkX3N0YXRlKHZnLCBzdGF0ZSk7XFxuICA5MTpcXHRcXG4gIDkyOlxcdFxcdGJyX3ZsYW5fc2V0X3N0YXRlKHYsIHN0YXRlKTtcXG4gIDkzOlxcdH1cXG4gIDk0OlxcdFxcbiAgOTU6XFx0aW50IGJyX21zdF9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IG1zdGksIHU4IHN0YXRlLFxcbiAgOTY6XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuICA5NzpcXHR7XFxuICA5ODpcXHRcXHRzdHJ1Y3Qgc3dpdGNoZGV2X2F0dHIgYXR0ciA9IHtcXG4gIDk5OlxcdFxcdFxcdC5pZCA9IFNXSVRDSERFVl9BVFRSX0lEX1BPUlRfTVNUX1NUQVRFLFxcbiAxMDA6XFx0XFx0XFx0Lm9yaWdfZGV2ID0gcC1cXHUwMDNlZGV2LFxcbiAxMDE6XFx0XFx0XFx0LnUubXN0X3N0YXRlID0ge1xcbiAxMDI6XFx0XFx0XFx0XFx0Lm1zdGkgPSBtc3RpLFxcbiAxMDM6XFx0XFx0XFx0XFx0LnN0YXRlID0gc3RhdGUsXFxuIDEwNDpcXHRcXHRcXHR9LFxcbiAxMDU6XFx0XFx0fTtcXG4gMTA2OlxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnO1xcbiAxMDc6XFx0XFx0c3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdjtcXG4gMTA4OlxcdFxcdGludCBlcnIgPSAwO1xcbiAxMDk6XFx0XFxuIDExMDpcXHRcXHQvKiBNU1RJIDAgKENTVCkgc3RhdGUgY2hhbmdlcyBhcmUgbm90aWZpZWQgdmlhIHRoZSByZWd1bGFyXFxuIDExMTpcXHRcXHQgKiBTV0lUQ0hERVZfQVRUUl9JRF9QT1JUX1NUUF9TVEFURS4gQWxsIG90aGVyIE1TVElzIGFyZSBoYW5kbGVkIHZpYVxcbiAxMTI6XFx0XFx0ICogbmV0bGluayB3aXRoIFJUTkwgaGVsZFxcbiAxMTM6XFx0XFx0ICovXFxuIDExNDpcXHRcXHRpZiAobXN0aSkge1xcbiAxMTU6XFx0XFx0XFx0QVNTRVJUX1JUTkwoKTtcXG4gMTE2OlxcdFxcbiAxMTc6XFx0XFx0XFx0ZXJyID0gc3dpdGNoZGV2X3BvcnRfYXR0cl9zZXQocC1cXHUwMDNlZGV2LCBcXHUwMDI2YXR0ciwgZXh0YWNrKTtcXG4gMTE4OlxcdFxcdFxcdGlmIChlcnIgXFx1MDAyNlxcdTAwMjYgZXJyICE9IC1FT1BOT1RTVVBQKVxcbiAxMTk6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDEyMDpcXHRcXHRcXHRlcnIgPSAwO1xcbiAxMjE6XFx0XFx0fVxcbiAxMjI6XFx0XFxuIDEyMzpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIDEyNDpcXHRcXHR2ZyA9IG5icF92bGFuX2dyb3VwX3JjdShwKTtcXG4gMTI1OlxcdFxcdGlmICghdmcpXFxuIDEyNjpcXHRcXHRcXHRnb3RvIG91dF9yY3VfdW5sb2NrO1xcbiAxMjc6XFx0XFxuIDEyODpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh2LCBcXHUwMDI2dmctXFx1MDAzZXZsYW5fbGlzdCwgdmxpc3QpIHtcXG4gMTI5OlxcdFxcdFxcdGlmICh2LVxcdTAwM2VicnZsYW4tXFx1MDAzZW1zdGkgIT0gbXN0aSlcXG4gMTMwOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAxMzE6XFx0XFxuIDEzMjpcXHRcXHRcXHRicl9tc3Rfdmxhbl9zZXRfc3RhdGUodmcsIHYsIHN0YXRlKTtcXG4gMTMzOlxcdFxcdH1cXG4gMTM0OlxcdFxcbiAxMzU6XFx0b3V0X3JjdV91bmxvY2s6XFxuIDEzNjpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gMTM3OlxcdG91dDpcXG4gMTM4OlxcdFxcdHJldHVybiBlcnI7XFxuIDEzOTpcXHR9XFxuIDE0MDpcXHRcXG4gMTQxOlxcdHN0YXRpYyB2b2lkIGJyX21zdF92bGFuX3N5bmNfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqcHYsIHUxNiBtc3RpKVxcbiAxNDI6XFx0e1xcbiAxNDM6XFx0XFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcgPSBuYnBfdmxhbl9ncm91cChwdi1cXHUwMDNlcG9ydCk7XFxuIDE0NDpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2O1xcbiAxNDU6XFx0XFxuIDE0NjpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHYsIFxcdTAwMjZ2Zy1cXHUwMDNldmxhbl9saXN0LCB2bGlzdCkge1xcbiAxNDc6XFx0XFx0XFx0LyogSWYgdGhpcyBwb3J0IGFscmVhZHkgaGFzIGEgZGVmaW5lZCBzdGF0ZSBpbiB0aGlzXFxuIDE0ODpcXHRcXHRcXHQgKiBNU1RJICh0aHJvdWdoIHNvbWUgb3RoZXIgVkxBTiBtZW1iZXJzaGlwKSwgaW5oZXJpdFxcbiAxNDk6XFx0XFx0XFx0ICogaXQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE3OjE4OjM3LjU1NjM1MDA3N1oiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMjA3MTU2MDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBicl9tc3QuY2AgSXNzdWUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBHaXQgaGlzdG9yeS4gTGV0IG1lIGZpcmUgdXAgYGdpdCBsb2dgIGFuZCBzZWUgd2hhdCB0aGUgY29tbWl0IGhpc3Rvcnkgb2YgYGJyX21zdC5jYCByZXZlYWxzLiBIb3BlZnVsbHksIHdoYXRldmVyIGZpeCBvciBmZWF0dXJlIHRoaXMgaXMgcmVsYXRlZCB0byB3aWxsIGJlIGFwcGFyZW50IGluIHRoZSBjb21taXQgbWVzc2FnZXMuIEknbSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgYnVnIHRoaXMgY29kZSBhZGRyZXNzZXMuIElmIHRoZSBsb2cgaXNuJ3QgaW1tZWRpYXRlbHkgaGVscGZ1bCwgSSBjYW4gc2VhcmNoIGZvciBhIHNwZWNpZmljIGNvbW1pdCBoYXNoIOKAkyBpZiBJIGhhdmUgb25lIOKAkyBvciByZWxldmFudCBrZXl3b3JkcyB0byBwaW5wb2ludCB0aGUgY2hhbmdlcyByZWxhdGVkIHRvIHRoZSBwcm9ibGVtLiBJdCdzIHRpbWUgdG8gYmVjb21lIGEgZGV0ZWN0aXZlIGFuZCB0cmFjayBkb3duIHRoZSByb290IGNhdXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTUxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNzoxODozOS43NjM1MDk0OFoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0ODM1ODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJfbXN0X3NldF9zdGF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfbXN0LmM9ODI9c3RhdGljIHZvaWQgYnJfbXN0X3ZsYW5fc2V0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tc3QuYy05NC1cXG5uZXQvYnJpZGdlL2JyX21zdC5jOjk1OmludCBicl9tc3Rfc2V0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHUxNiBtc3RpLCB1OCBzdGF0ZSxcXG5uZXQvYnJpZGdlL2JyX21zdC5jLTk2LVxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tc3QuYz0zMDg9c3RhdGljIGludCBicl9tc3RfcHJvY2Vzc19vbmUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMzM0LVxcbm5ldC9icmlkZ2UvYnJfbXN0LmM6MzM1OlxcdHJldHVybiBicl9tc3Rfc2V0X3N0YXRlKHAsIG1zdGksIHN0YXRlLCBleHRhY2spO1xcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMzM2LX1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE5NTA9c3RhdGljIGlubGluZSBib29sIGJyX21zdF9pc19lbmFibGVkKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTU3LVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE5NTg6aW50IGJyX21zdF9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IG1zdGksIHU4IHN0YXRlLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NTktXFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTk3MT1zdGF0aWMgaW5saW5lIGJvb2wgYnJfbXN0X2lzX2VuYWJsZWQoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NzUtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTk3NjpzdGF0aWMgaW5saW5lIGludCBicl9tc3Rfc2V0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHUxNiBtc3RpLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NzctXFx0XFx0XFx0XFx0ICAgdTggc3RhdGUsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfc3RwLmM9Mjk9dm9pZCBicl9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdW5zaWduZWQgaW50IHN0YXRlKVxcbi0tXFxubmV0L2JyaWRnZS9icl9zdHAuYy00Ni1cXHRpZiAoYnJfb3B0X2dldChwLVxcdTAwM2ViciwgQlJPUFRfTVNUX0VOQUJMRUQpKSB7XFxubmV0L2JyaWRnZS9icl9zdHAuYzo0NzpcXHRcXHRlcnIgPSBicl9tc3Rfc2V0X3N0YXRlKHAsIDAsIHN0YXRlLCBOVUxMKTtcXG5uZXQvYnJpZGdlL2JyX3N0cC5jLTQ4LVxcdFxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE3OjE4OjM5LjgxMDk5NjY3MloiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNDEyMjc2NDAwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvbW1pdCBmb3IgQ29uY3VycmVuY3kgYW5kIE1lbW9yeSBTYWZldHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHdoYXQgdGhpcyBjb21taXQgaXMgZG9pbmcuIE15IHByaW1hcnkgY29uY2VybiBoZXJlIGlzIHRoYXQgdGhlIG9yaWdpbmFsIGNvZGUgaGFkIGBzd2l0Y2hkZXZfcG9ydF9hdHRyX3NldCgpYCBjYWxsZWQgKmluc2lkZSogYW4gYHJjdV9yZWFkX2xvY2soKWAgc2VjdGlvbi4gVGhhdCdzIGEgaHVnZSByZWQgZmxhZyBiZWNhdXNlIGBzd2l0Y2hkZXZfcG9ydF9hdHRyX3NldGAgY2FuIHBvdGVudGlhbGx5IHNsZWVwLCB3aGljaCBpcyBhIGJpZyBuby1ubyB3aGVuIHlvdSdyZSBpbiBhbiBhdG9taWMgY29udGV4dCBwcm90ZWN0ZWQgYnkgUkNVLiBUaGF0J3MgYSBjbGFzc2ljIFwic2xlZXBpbmcgZnVuY3Rpb24gY2FsbGVkIGZyb20gaW52YWxpZCBjb250ZXh0XCIgYnVnLCBvciBhIHNjaGVkdWxpbmctd2hpbGUtYXRvbWljIGlzc3VlLCBvciBzb21ldGhpbmcgc2ltaWxhci4gVGhleSB3ZXJlIGFsc28gYWRkaW5nIGBBU1NFUlRfUlROTCgpYCB3aGljaCByZWluZm9yY2VzIHRoYXQgY29uY2Vybi5cblxuVGhlIHBhdGNoJ3Mgc29sdXRpb24gaXMgcXVpdGUgc2Vuc2libGUuIEl0IG1vdmVzIHRoZSBvZmZlbmRpbmcgY2FsbCBvdXRzaWRlIG9mIHRoZSBgcmN1X3JlYWRfbG9jaygpYCByZWdpb24gZW50aXJlbHksIGFuZCBpbmNsdWRlcyBhbiBgQVNTRVJUX1JUTkwoKWAgY2FsbC4gSXQgYWxzbyBhZGRzIGEgcXVpY2sgY2hlY2sgZm9yIHRoZSByZXN1bHQgb2YgYHN3aXRjaGRldl9wb3J0X2F0dHJfc2V0KClgIGFuZCByZXR1cm5zIGltbWVkaWF0ZWx5IGlmIGl0IGVycm9ycywgKmJlZm9yZSogZXZlbiBhY3F1aXJpbmcgdGhlIFJDVSBsb2NrLiBGaW5hbGx5LCB0aGUgUkNVIGxvY2sgaXMgbmFycm93ZWQgdG8gb25seSBjb3ZlciB0aGUgaXRlcmF0aW9uIG92ZXIgYHZnLVx1MDAzZXZsYW5fbGlzdGAsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBpdCBzaG91bGQgYmUgcHJvdGVjdGluZy5cblxuTm93LCBsZXQncyB0aGluayBhYm91dCBtZW1vcnkgc2FmZXR5LiBJIHNlZSB0aGF0IHRoZSBgYXR0cmAgc3RydWN0IGlzIGluaXRpYWxpemVkIHdpdGggZGVzaWduYXRlZCBpbml0aWFsaXplcnMsIHNvIHRoZSBjb21waWxlciB3aWxsIHplcm8gb3V0IHRoZSB1bm1lbnRpb25lZCBmaWVsZHMuIFRoaXMgd2FzIGFscmVhZHkgaW4gdGhlIG9yaWdpbmFsIGNvZGUsIGFuZCB0aGUgcGF0Y2ggZG9lc24ndCBjaGFuZ2UgYW55dGhpbmcgYWJvdXQgKmhvdyogYGF0dHJgIGlzIGluaXRpYWxpemVkLCBvbmx5ICp3aGVuKiBpdCdzIHVzZWQuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMgYXJlIGhhcHBlbmluZyBoZXJlLCBhbmQgdGhlcmUgYXJlbid0IGFueSBvYnZpb3VzIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdHMgYmVpbmcgdXNlZC4gVGhpcyBjaGFuZ2UgZG9lc24ndCBpbnRyb2R1Y2UgYW55IGluZm8tbGVha3MgdG8gdXNlciBzcGFjZS4gSXQgYWxzbyBkb2Vzbid0IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBmb3IgY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nLiBTbGVlcGluZyBpbnNpZGUgYW4gYXRvbWljIGNvbnRleHQgaXMgZWFzaWx5IGNhdWdodCBieSBgbWlnaHRfc2xlZXAoKWAgYW5kIHRoZSBzdGFuZGFyZCBrZXJuZWwgZGVidWcgY29uZmlndXJhdGlvbnMuIExvY2tpbmcgYW5kIFJUTkwgYXNzZXJ0aW9ucyBhcmUgY2F1Z2h0IGJ5IFJUTkwsIGxvY2tkZXAsIGFuZCBkZWJ1ZyBhc3NlcnRzLlxuXG5Pa2F5LCBsZXQncyBxdWlja2x5IGNsYXJpZnkgS0FTQU4gdmVyc3VzIEtNU0FOLiBLTVNBTiBpcyBhbGwgYWJvdXQgZGV0ZWN0aW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBwb3RlbnRpYWwgaW5mby1sZWFrcy4gS0FTQU4gZm9jdXNlcyBvbiBhIGJyb2FkZXIgcmFuZ2Ugb2YgbWVtb3J5IGVycm9ycy4gSW4gdGhpcyBjYXNlLCB0aGlzIGlzIGEgYnVnIGZpeCBmb3Igc2xlZXAtaW4tYXRvbWljLCBub3QgYSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuIFRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBvciBhbHRlciBhbnkgb2YgdGhlIHRoaW5ncyB0aGF0IEtNU0FOIHdvdWxkIGNhdGNoLiBUaGlzIGlzbid0IGEgS01TQU4gaXNzdWU7IHRoaXMgaXMgYSBjb25jdXJyZW5jeS9hdG9taWMgY29udGV4dCBpc3N1ZS4gVGhlcmVmb3JlLCBOZWVkc0tNU0FOIHNob3VsZCBiZSBmYWxzZS5cblxuU28sIGFsbCBnb29kLiBUaGUgcGF0Y2ggaXMgY2xlYW4gYW5kIHN0cmFpZ2h0Zm9yd2FyZC4gV2UncmUgZ29vZCB0byBnby5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM5MiwiT3V0cHV0VG9rZW5zIjoyMTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTc6MTk6MTMuOTMzNzYzMzcxWiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHNsZWVwLWluLWF0b21pYyBidWcgaW4gYGJyX21zdF9zZXRfc3RhdGUoKWAgYnkgbW92aW5nIGBzd2l0Y2hkZXZfcG9ydF9hdHRyX3NldCgpYCAod2hpY2ggbWF5IHNsZWVwKSBvdXRzaWRlIG9mIHRoZSBgcmN1X3JlYWRfbG9jaygpYCBjcml0aWNhbCBzZWN0aW9uLCBhZGRpbmcgYEFTU0VSVF9SVE5MKClgLCBhbmQgb25seSBhY3F1aXJpbmcgYHJjdV9yZWFkX2xvY2soKWAgd2hlbiByZWFkaW5nIHRoZSBWTEFOIGdyb3VwIGFuZCBpdGVyYXRpbmcgb3ZlciB0aGUgVkxBTiBsaXN0LlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMsIGRvZXMgbm90IGFmZmVjdCBidWZmZXIgYm91bmRzIG9yIGNvcHkgbGVuZ3RocywgYW5kIGRvZXMgbm90IGFsdGVyIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UuIFNsZWVwaW5nIHdoaWxlIGhvbGRpbmcgYW4gUkNVIHJlYWQgbG9jayBpcyBkZXRlY3RlZCBieSBzdGFuZGFyZCBkZWJ1ZyBjb25maWd1cmF0aW9ucyAoYENPTkZJR19ERUJVR19BVE9NSUNfU0xFRVBgIC8gYG1pZ2h0X3NsZWVwKClgKSwgYW5kIGxvY2sgaW52YXJpYW50cyBhcmUgdmVyaWZpZWQgYnkgYEFTU0VSVF9SVE5MKClgIC8gYExPQ0tERVBgLiBCZWNhdXNlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgc2xlZXAtaW4tYXRvbWljIGJ1ZyBpbiBgYnJfbXN0X3NldF9zdGF0ZSgpYCBieSBtb3ZpbmcgYHN3aXRjaGRldl9wb3J0X2F0dHJfc2V0KClgICh3aGljaCBtYXkgc2xlZXApIG91dHNpZGUgb2YgdGhlIGByY3VfcmVhZF9sb2NrKClgIGNyaXRpY2FsIHNlY3Rpb24sIGFkZGluZyBgQVNTRVJUX1JUTkwoKWAsIGFuZCBvbmx5IGFjcXVpcmluZyBgcmN1X3JlYWRfbG9jaygpYCB3aGVuIHJlYWRpbmcgdGhlIFZMQU4gZ3JvdXAgYW5kIGl0ZXJhdGluZyBvdmVyIHRoZSBWTEFOIGxpc3QuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcywgZG9lcyBub3QgYWZmZWN0IGJ1ZmZlciBib3VuZHMgb3IgY29weSBsZW5ndGhzLCBhbmQgZG9lcyBub3QgYWx0ZXIgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gU2xlZXBpbmcgd2hpbGUgaG9sZGluZyBhbiBSQ1UgcmVhZCBsb2NrIGlzIGRldGVjdGVkIGJ5IHN0YW5kYXJkIGRlYnVnIGNvbmZpZ3VyYXRpb25zIChgQ09ORklHX0RFQlVHX0FUT01JQ19TTEVFUGAgLyBgbWlnaHRfc2xlZXAoKWApLCBhbmQgbG9jayBpbnZhcmlhbnRzIGFyZSB2ZXJpZmllZCBieSBgQVNTRVJUX1JUTkwoKWAgLyBgTE9DS0RFUGAuIEJlY2F1c2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowvd7bt[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-11 16:02:48 +0000 UTC FinishedAt: 2026-09-11 17:19:15 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "78445023439506ebd83b86d40b1e428a3b309d4a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "BRIDGE_VLAN_FILTERING", "VLAN_8021Q", "NET_SWITCHDEV" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "78445023439506ebd83b86d40b1e428a3b309d4a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "BRIDGE_VLAN_FILTERING", "VLAN_8021Q", "NET_SWITCHDEV" ], "series_id": "90b7f8e7-7e7a-4caa-9d43-c9cb9d55529f" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "br_mst_set_state", "br_mst_process", "br_mst_set_enabled", "br_set_state" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "78445023439506ebd83b86d40b1e428a3b309d4a", "base_tree": "net" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE3OjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtCUklER0VfVkxBTl9GSUxURVJJTkcmIzM0OywKICAgICYjMzQ7VkxBTl84MDIxUSYjMzQ7LAogICAgJiMzNDtORVRfU1dJVENIREVWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJfbXN0X3NldF9zdGF0ZSYjMzQ7LAogICAgJiMzNDticl9tc3RfcHJvY2VzcyYjMzQ7LAogICAgJiMzNDticl9tc3Rfc2V0X2VuYWJsZWQmIzM0OywKICAgICYjMzQ7YnJfc2V0X3N0YXRlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBzbGVlcC1pbi1hdG9taWMgYnVnIGluIGBicl9tc3Rfc2V0X3N0YXRlKClgIGJ5IG1vdmluZyBgc3dpdGNoZGV2X3BvcnRfYXR0cl9zZXQoKWAgKHdoaWNoIG1heSBzbGVlcCkgb3V0c2lkZSBvZiB0aGUgYHJjdV9yZWFkX2xvY2soKWAgY3JpdGljYWwgc2VjdGlvbiwgYWRkaW5nIGBBU1NFUlRfUlROTCgpYCwgYW5kIG9ubHkgYWNxdWlyaW5nIGByY3VfcmVhZF9sb2NrKClgIHdoZW4gcmVhZGluZyB0aGUgVkxBTiBncm91cCBhbmQgaXRlcmF0aW5nIG92ZXIgdGhlIFZMQU4gbGlzdC5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcywgZG9lcyBub3QgYWZmZWN0IGJ1ZmZlciBib3VuZHMgb3IgY29weSBsZW5ndGhzLCBhbmQgZG9lcyBub3QgYWx0ZXIgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gU2xlZXBpbmcgd2hpbGUgaG9sZGluZyBhbiBSQ1UgcmVhZCBsb2NrIGlzIGRldGVjdGVkIGJ5IHN0YW5kYXJkIGRlYnVnIGNvbmZpZ3VyYXRpb25zIChgQ09ORklHX0RFQlVHX0FUT01JQ19TTEVFUGAgLyBgbWlnaHRfc2xlZXAoKWApLCBhbmQgbG9jayBpbnZhcmlhbnRzIGFyZSB2ZXJpZmllZCBieSBgQVNTRVJUX1JUTkwoKWAgLyBgTE9DS0RFUGAuIEJlY2F1c2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBpbiBgYnJfbXN0X3NldF9zdGF0ZSgpYCB3aXRoaW4gdGhlIEV0aGVybmV0IGJyaWRnZSBNU1QgaW1wbGVtZW50YXRpb246IGl0IG1vdmVzIGEgcG90ZW50aWFsbHkgc2xlZXBpbmcgc3dpdGNoZGV2IGNhbGwgb3V0c2lkZSBvZiB0aGUgYHJjdV9yZWFkX2xvY2soKWAgY3JpdGljYWwgc2VjdGlvbiBhbmQgYWRkcyBhbiBgQVNTRVJUX1JUTkwoKWAgaW52YXJpYW50IGNoZWNrLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGFjY2Vzc2libGUgdmlhIG5ldGxpbmsgYW5kIGJyaWRnZSBTVFAgY29uZmlndXJhdGlvbiBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTc6MTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4MGE1MDg0ZDAwMjZhODY1OGYzNTA2Y2Q5MjU3NjFlYWEzZjk2NWVkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMTc6MTY6MDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9tc3QuYyBiL25ldC9icmlkZ2UvYnJfbXN0LmNcbmluZGV4IDQzYTMwMGFlNmJmYWYuLjE2NTRlZmQzMDQ1YjAgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX21zdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvYnJpZGdlL2JyX21zdC5jXG5AQCAtMTA3LDIxICYjNDM7MTA3LDI0IEBAIGludCBicl9tc3Rfc2V0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHUxNiBtc3RpLCB1OCBzdGF0ZSxcbiBcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnY7XG4gXHRpbnQgZXJyID0gMDtcbiBcbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cdHZnID0gbmJwX3ZsYW5fZ3JvdXBfcmN1KHApO1xuLVx0aWYgKCF2Zylcbi1cdFx0Z290byBvdXQ7XG4tXG4gXHQvKiBNU1RJIDAgKENTVCkgc3RhdGUgY2hhbmdlcyBhcmUgbm90aWZpZWQgdmlhIHRoZSByZWd1bGFyXG4tXHQgKiBTV0lUQ0hERVZfQVRUUl9JRF9QT1JUX1NUUF9TVEFURS5cbiYjNDM7XHQgKiBTV0lUQ0hERVZfQVRUUl9JRF9QT1JUX1NUUF9TVEFURS4gQWxsIG90aGVyIE1TVElzIGFyZSBoYW5kbGVkIHZpYVxuJiM0MztcdCAqIG5ldGxpbmsgd2l0aCBSVE5MIGhlbGRcbiBcdCAqL1xuIFx0aWYgKG1zdGkpIHtcbiYjNDM7XHRcdEFTU0VSVF9SVE5MKCk7XG4mIzQzO1xuIFx0XHRlcnIgPSBzd2l0Y2hkZXZfcG9ydF9hdHRyX3NldChwLVx1MDAzZWRldiwgXHUwMDI2YXR0ciwgZXh0YWNrKTtcbiBcdFx0aWYgKGVyciBcdTAwMjZcdTAwMjYgZXJyICE9IC1FT1BOT1RTVVBQKVxuIFx0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0ZXJyID0gMDtcbiBcdH1cbiBcbi1cdGVyciA9IDA7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdHZnID0gbmJwX3ZsYW5fZ3JvdXBfcmN1KHApO1xuJiM0MztcdGlmICghdmcpXG4mIzQzO1x0XHRnb3RvIG91dF9yY3VfdW5sb2NrO1xuJiM0MztcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHYsIFx1MDAyNnZnLVx1MDAzZXZsYW5fbGlzdCwgdmxpc3QpIHtcbiBcdFx0aWYgKHYtXHUwMDNlYnJ2bGFuLVx1MDAzZW1zdGkgIT0gbXN0aSlcbiBcdFx0XHRjb250aW51ZTtcbkBAIC0xMjksOCAmIzQzOzEzMiw5IEBAIGludCBicl9tc3Rfc2V0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHUxNiBtc3RpLCB1OCBzdGF0ZSxcbiBcdFx0YnJfbXN0X3ZsYW5fc2V0X3N0YXRlKHZnLCB2LCBzdGF0ZSk7XG4gXHR9XG4gXG4tb3V0OlxuJiM0MztvdXRfcmN1X3VubG9jazpcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztvdXQ6XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNzoxNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUklER0UmIzM0OywKICAgICYjMzQ7QlJJREdFX1ZMQU5fRklMVEVSSU5HJiMzNDssCiAgICAmIzM0O1ZMQU5fODAyMVEmIzM0OywKICAgICYjMzQ7TkVUX1NXSVRDSERFViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JyX21zdF9zZXRfc3RhdGUmIzM0OywKICAgICYjMzQ7YnJfbXN0X3Byb2Nlc3MmIzM0OywKICAgICYjMzQ7YnJfbXN0X3NldF9lbmFibGVkJiMzNDssCiAgICAmIzM0O2JyX3NldF9zdGF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBsb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24gaW4gYGJyX21zdF9zZXRfc3RhdGUoKWAgd2l0aGluIHRoZSBFdGhlcm5ldCBicmlkZ2UgTVNUIGltcGxlbWVudGF0aW9uOiBpdCBtb3ZlcyBhIHBvdGVudGlhbGx5IHNsZWVwaW5nIHN3aXRjaGRldiBjYWxsIG91dHNpZGUgb2YgdGhlIGByY3VfcmVhZF9sb2NrKClgIGNyaXRpY2FsIHNlY3Rpb24gYW5kIGFkZHMgYW4gYEFTU0VSVF9SVE5MKClgIGludmFyaWFudCBjaGVjay4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rIGFuZCBicmlkZ2UgU1RQIGNvbmZpZ3VyYXRpb24gaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODBhNTA4NGQwMDI2YTg2NThmMzUwNmNkOTI1NzYxZWFhM2Y5NjVlZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDE3OjE2OjA2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9tc3QuYyBiL25ldC9icmlkZ2UvYnJfbXN0LmMKaW5kZXggNDNhMzAwYWU2YmZhZi4uMTY1NGVmZDMwNDViMCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9tc3QuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYnJpZGdlL2JyX21zdC5jCkBAIC0xMDcsMjEgJiM0MzsxMDcsMjQgQEAgaW50IGJyX21zdF9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IG1zdGksIHU4IHN0YXRlLAogCXN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnY7CiAJaW50IGVyciA9IDA7CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JdmcgPSBuYnBfdmxhbl9ncm91cF9yY3UocCk7Ci0JaWYgKCF2ZykKLQkJZ290byBvdXQ7Ci0KIAkvKiBNU1RJIDAgKENTVCkgc3RhdGUgY2hhbmdlcyBhcmUgbm90aWZpZWQgdmlhIHRoZSByZWd1bGFyCi0JICogU1dJVENIREVWX0FUVFJfSURfUE9SVF9TVFBfU1RBVEUuCiYjNDM7CSAqIFNXSVRDSERFVl9BVFRSX0lEX1BPUlRfU1RQX1NUQVRFLiBBbGwgb3RoZXIgTVNUSXMgYXJlIGhhbmRsZWQgdmlhCiYjNDM7CSAqIG5ldGxpbmsgd2l0aCBSVE5MIGhlbGQKIAkgKi8KIAlpZiAobXN0aSkgewomIzQzOwkJQVNTRVJUX1JUTkwoKTsKJiM0MzsKIAkJZXJyID0gc3dpdGNoZGV2X3BvcnRfYXR0cl9zZXQocC0mZ3Q7ZGV2LCAmYW1wO2F0dHIsIGV4dGFjayk7CiAJCWlmIChlcnIgJmFtcDsmYW1wOyBlcnIgIT0gLUVPUE5PVFNVUFApCiAJCQlnb3RvIG91dDsKJiM0MzsJCWVyciA9IDA7CiAJfQogCi0JZXJyID0gMDsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwl2ZyA9IG5icF92bGFuX2dyb3VwX3JjdShwKTsKJiM0MzsJaWYgKCF2ZykKJiM0MzsJCWdvdG8gb3V0X3JjdV91bmxvY2s7CiYjNDM7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodiwgJmFtcDt2Zy0mZ3Q7dmxhbl9saXN0LCB2bGlzdCkgewogCQlpZiAodi0mZ3Q7YnJ2bGFuLSZndDttc3RpICE9IG1zdGkpCiAJCQljb250aW51ZTsKQEAgLTEyOSw4ICYjNDM7MTMyLDkgQEAgaW50IGJyX21zdF9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IG1zdGksIHU4IHN0YXRlLAogCQlicl9tc3Rfdmxhbl9zZXRfc3RhdGUodmcsIHYsIHN0YXRlKTsKIAl9CiAKLW91dDoKJiM0MztvdXRfcmN1X3VubG9jazoKIAlyY3VfcmVhZF91bmxvY2soKTsKJiM0MztvdXQ6CiAJcmV0dXJuIGVycjsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjI2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIHN5emthbGxlciBQYXRjaCBmb3IgQU1ENjQgQXJjaGl0ZWN0dXJlKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBzeXprYWxsZXIgcGF0Y2guIFRoZSB1c2VyIHdhbnRzIG1lIHRvIGV2YWx1YXRlIGl0LCBmb2N1c2luZyBvbiB0aGUgYGFtZDY0YCBhcmNoaXRlY3R1cmUuIFRoZSB0YXJnZXQgZmlsZSBpcyBgbmV0L2JyaWRnZS9icl9tc3QuY2AsIHNwZWNpZmljYWxseSB0aGUgYGJyX21zdF9zZXRfc3RhdGVgIGZ1bmN0aW9uLgoKTG9va2luZyBhdCB0aGUgZGlmZiwgdGhlIG1haW4gY2hhbmdlIHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gaG93IE1TVElzIChNdWx0aXBsZSBTcGFubmluZyBUcmVlIEluc3RhbmNlcykgYXJlIGhhbmRsZWQuICBUaGUgY29kZSBub3cgZXhwbGljaXRseSBub3RlcyB0aGF0IGNoYW5nZXMgdG8gTVNUSSAwIGFyZSBoYW5kbGVkIGRpZmZlcmVudGx5IHZpYSBgU1dJVENIREVWX0FUVFJfSURfUE9SVF9TVFBfU1RBVEVgLCB3aGljaCBpcyBleHBlY3RlZCwgd2hpbGUgb3RoZXIgTVNUSXMgcmVxdWlyZSBuZXRsaW5rIGNvbW11bmljYXRpb24gd2l0aCBSVE5MIGhlbGQuIEEgZ29vZCBhZGRpdGlvbiBpcyB0aGUgYEFTU0VSVF9SVE5MKClgIGNhbGwgd2l0aGluIHRoZSBgaWYgKG1zdGkpYCBibG9jay4gVGhpcyBpcyBhIHZlcnkgd2VsY29tZSBzYW5pdHkgY2hlY2suIEl0IGNsZWFybHkgaW5kaWNhdGVzIHRoYXQgdGhlIGNvZGUgZXhwZWN0cyB0aGUgUlROTCBsb2NrIHRvIGJlIGhlbGQgZm9yIG5vbi1DU1QgTVNUSSBzdGF0ZSBjaGFuZ2VzLCB3aGljaCBpcyBjcnVjaWFsIGZvciBzeW5jaHJvbml6YXRpb24uCgpUaGUgcGF0Y2ggYWxzbyBzZWVtcyB0byByZW9yZGVyIGEgbGl0dGxlLiBUaGUgYHJjdV9yZWFkX2xvY2tgIGFuZCBgcmN1X3JlYWRfdW5sb2NrYCBjYWxscyBoYXZlIGJlZW4gbW92ZWQgYXJvdW5kLiBUaGV5IG5vdyBicmFja2V0IHRoZSBWTEFOIGxpc3QgdHJhdmVyc2FsLiBMb29rcyBnb29kIHRvIG1lLCBhcyB0aGlzIGlzIHRoZSBzdGFuZGFyZCBwYXR0ZXJuLiBXZSBlbnN1cmUgdGhhdCB3ZSByZWxlYXNlIHRoZSBSQ1UgbG9jaywgaW4gY2FzZSBvZiBhbiBlcnJvciwgd2hpY2ggaXMgdGhlIGRlc2lyZWQgYmVoYXZpb3IgYW5kIHByZXZlbnRzIHBvdGVudGlhbCBpc3N1ZXMuIFRoZSBgZ290b2AgbGFiZWxzIGhhdmUgYmVlbiB1cGRhdGVkIHRvIHJlZmxlY3QgdGhlIFJDVSBjaGFuZ2VzIHRvby4KCkkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCB0aGUgY29tbWl0IG1lc3NhZ2UgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGVzZSBjaGFuZ2VzIGFuZCBlbnN1cmUgdGhpcyBpcyBhIGNvcnJlY3QgYW5kIHNhZmUgYXBwcm9hY2guIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHRvb2xzIHRvIGRvIHNvLiBPdmVyYWxsLCB0aG91Z2gsIHRoZSBwYXRjaCBzZWVtcyByZWFzb25hYmxlIGFuZCBhZGRyZXNzZXMgYSBzcGVjaWZpYyBudWFuY2UgaW4gTVNUIGhhbmRsaW5nLiBJJiMzOTtsbCBmbGFnIHRoZSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIFJUTkwgbG9jayBhbmQgdGhlIHRpbWluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbXN0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDkwOlx0XHRcdGJyX3ZsYW5fc2V0X3B2aWRfc3RhdGUodmcsIHN0YXRlKTtcbiAgOTE6XHRcbiAgOTI6XHRcdGJyX3ZsYW5fc2V0X3N0YXRlKHYsIHN0YXRlKTtcbiAgOTM6XHR9XG4gIDk0Olx0XG4gIDk1Olx0aW50IGJyX21zdF9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IG1zdGksIHU4IHN0YXRlLFxuICA5NjpcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiAgOTc6XHR7XG4gIDk4Olx0XHRzdHJ1Y3Qgc3dpdGNoZGV2X2F0dHIgYXR0ciA9IHtcbiAgOTk6XHRcdFx0LmlkID0gU1dJVENIREVWX0FUVFJfSURfUE9SVF9NU1RfU1RBVEUsXG4gMTAwOlx0XHRcdC5vcmlnX2RldiA9IHAtXHUwMDNlZGV2LFxuIDEwMTpcdFx0XHQudS5tc3Rfc3RhdGUgPSB7XG4gMTAyOlx0XHRcdFx0Lm1zdGkgPSBtc3RpLFxuIDEwMzpcdFx0XHRcdC5zdGF0ZSA9IHN0YXRlLFxuIDEwNDpcdFx0XHR9LFxuIDEwNTpcdFx0fTtcbiAxMDY6XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnO1xuIDEwNzpcdFx0c3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdjtcbiAxMDg6XHRcdGludCBlcnIgPSAwO1xuIDEwOTpcdFxuIDExMDpcdFx0LyogTVNUSSAwIChDU1QpIHN0YXRlIGNoYW5nZXMgYXJlIG5vdGlmaWVkIHZpYSB0aGUgcmVndWxhclxuIDExMTpcdFx0ICogU1dJVENIREVWX0FUVFJfSURfUE9SVF9TVFBfU1RBVEUuIEFsbCBvdGhlciBNU1RJcyBhcmUgaGFuZGxlZCB2aWFcbiAxMTI6XHRcdCAqIG5ldGxpbmsgd2l0aCBSVE5MIGhlbGRcbiAxMTM6XHRcdCAqL1xuIDExNDpcdFx0aWYgKG1zdGkpIHtcbiAxMTU6XHRcdFx0QVNTRVJUX1JUTkwoKTtcbiAxMTY6XHRcbiAxMTc6XHRcdFx0ZXJyID0gc3dpdGNoZGV2X3BvcnRfYXR0cl9zZXQocC1cdTAwM2VkZXYsIFx1MDAyNmF0dHIsIGV4dGFjayk7XG4gMTE4Olx0XHRcdGlmIChlcnIgXHUwMDI2XHUwMDI2IGVyciAhPSAtRU9QTk9UU1VQUClcbiAxMTk6XHRcdFx0XHRnb3RvIG91dDtcbiAxMjA6XHRcdFx0ZXJyID0gMDtcbiAxMjE6XHRcdH1cbiAxMjI6XHRcbiAxMjM6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiAxMjQ6XHRcdHZnID0gbmJwX3ZsYW5fZ3JvdXBfcmN1KHApO1xuIDEyNTpcdFx0aWYgKCF2ZylcbiAxMjY6XHRcdFx0Z290byBvdXRfcmN1X3VubG9jaztcbiAxMjc6XHRcbiAxMjg6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHYsIFx1MDAyNnZnLVx1MDAzZXZsYW5fbGlzdCwgdmxpc3QpIHtcbiAxMjk6XHRcdFx0aWYgKHYtXHUwMDNlYnJ2bGFuLVx1MDAzZW1zdGkgIT0gbXN0aSlcbiAxMzA6XHRcdFx0XHRjb250aW51ZTtcbiAxMzE6XHRcbiAxMzI6XHRcdFx0YnJfbXN0X3ZsYW5fc2V0X3N0YXRlKHZnLCB2LCBzdGF0ZSk7XG4gMTMzOlx0XHR9XG4gMTM0Olx0XG4gMTM1Olx0b3V0X3JjdV91bmxvY2s6XG4gMTM2Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAxMzc6XHRvdXQ6XG4gMTM4Olx0XHRyZXR1cm4gZXJyO1xuIDEzOTpcdH1cbiAxNDA6XHRcbiAxNDE6XHRzdGF0aWMgdm9pZCBicl9tc3Rfdmxhbl9zeW5jX3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnB2LCB1MTYgbXN0aSlcbiAxNDI6XHR7XG4gMTQzOlx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZyA9IG5icF92bGFuX2dyb3VwKHB2LVx1MDAzZXBvcnQpO1xuIDE0NDpcdFx0c3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdjtcbiAxNDU6XHRcbiAxNDY6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkodiwgXHUwMDI2dmctXHUwMDNldmxhbl9saXN0LCB2bGlzdCkge1xuIDE0NzpcdFx0XHQvKiBJZiB0aGlzIHBvcnQgYWxyZWFkeSBoYXMgYSBkZWZpbmVkIHN0YXRlIGluIHRoaXNcbiAxNDg6XHRcdFx0ICogTVNUSSAodGhyb3VnaCBzb21lIG90aGVyIFZMQU4gbWVtYmVyc2hpcCksIGluaGVyaXRcbiAxNDk6XHRcdFx0ICogaXQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTc6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTEwOAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYGJyX21zdF9zZXRfc3RhdGVgIENhbGxlcnMgYW5kIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgYnJfbXN0X3NldF9zdGF0ZWAgaXMgYmVpbmcgdXNlZC4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGwgc2l0ZXMuIFRoYXTigJlzIHRoZSBtb3N0IGVmZmljaWVudCBzdGFydGluZyBwb2ludC4gSSB3YW50IHRvIHNlZSB3aGljaCBvdGhlciBtb2R1bGVzIG9yIGZ1bmN0aW9ucyBkZXBlbmQgb24gaXQgYW5kIHdoYXQgYXJndW1lbnRzIHRoZXkgYXJlIHBhc3NpbmcuIFRoaXMgd2lsbCBpbW1lZGlhdGVseSBjbHVlIG1lIGludG8gdGhlIHNjZW5hcmlvcyB0aGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGZvci4KCkZyb20gdGhlcmUsIEkmIzM5O2xsIGRyaWxsIGRvd24gb24gdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4gR2l2ZW4gdGhlIGZ1bmN0aW9uJiMzOTtzIG5hbWUgYW5kIGdlbmVyYWwgcHVycG9zZSwgSSBhbnRpY2lwYXRlIGl0JiMzOTtsbCBiZSBoZWF2aWx5IGluZmx1ZW5jZWQgYnkgTVNUIChNdWx0aXBsZSBTcGFubmluZyBUcmVlKSBzZXR1cC4gQnV0IEkgYWxzbyBleHBlY3QgaXQgbWF5IGRlcGVuZCBvbiB0aGUgYnJpZGdlIGNvbmZpZ3VyYXRpb24gYXMgYSB3aG9sZS4gV2hhdCBmbGFncyBhcmUgc2V0LCB3aGljaCBWTEFOcyBhcmUgaW52b2x2ZWQ/IEnigJlsbCBuZWVkIHRvIGFuYWx5emUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIHdoaWNoIGNvbmZpZyBwYXJhbWV0ZXJzIGFyZSBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVuY3Rpb24mIzM5O3Mgb3BlcmF0aW9uYWwgY29udGV4dC4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIHdoYXQgdGhlIGZ1bmN0aW9uIGV4cGVjdHMgYW5kIGhvdyB0aGUgc3RhdGUgaXMgYmVpbmcgbWFuYWdlZCBleHRlcm5hbGx5LCBvciBpZiB0aGUgZnVuY3Rpb24gaXMgY29udHJvbGxpbmcgdGhhdCBzdGF0ZSBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaW4gcGxheS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIHRlbGxzIG1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE3OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyX21zdF9zZXRfc3RhdGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9tc3QuYz04Mj1zdGF0aWMgdm9pZCBicl9tc3Rfdmxhbl9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcsXG4tLVxubmV0L2JyaWRnZS9icl9tc3QuYy05NC1cbm5ldC9icmlkZ2UvYnJfbXN0LmM6OTU6aW50IGJyX21zdF9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IG1zdGksIHU4IHN0YXRlLFxubmV0L2JyaWRnZS9icl9tc3QuYy05Ni1cdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2JyaWRnZS9icl9tc3QuYz0zMDg9c3RhdGljIGludCBicl9tc3RfcHJvY2Vzc19vbmUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcbi0tXG5uZXQvYnJpZGdlL2JyX21zdC5jLTMzNC1cbm5ldC9icmlkZ2UvYnJfbXN0LmM6MzM1Olx0cmV0dXJuIGJyX21zdF9zZXRfc3RhdGUocCwgbXN0aSwgc3RhdGUsIGV4dGFjayk7XG5uZXQvYnJpZGdlL2JyX21zdC5jLTMzNi19XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTk1MD1zdGF0aWMgaW5saW5lIGJvb2wgYnJfbXN0X2lzX2VuYWJsZWQoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcClcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTU3LVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTk1ODppbnQgYnJfbXN0X3NldF9zdGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCB1MTYgbXN0aSwgdTggc3RhdGUsXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTU5LVx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTk3MT1zdGF0aWMgaW5saW5lIGJvb2wgYnJfbXN0X2lzX2VuYWJsZWQoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcClcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTc1LVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTk3NjpzdGF0aWMgaW5saW5lIGludCBicl9tc3Rfc2V0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHUxNiBtc3RpLFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk3Ny1cdFx0XHRcdCAgIHU4IHN0YXRlLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2JyaWRnZS9icl9zdHAuYz0yOT12b2lkIGJyX3NldF9zdGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCB1bnNpZ25lZCBpbnQgc3RhdGUpXG4tLVxubmV0L2JyaWRnZS9icl9zdHAuYy00Ni1cdGlmIChicl9vcHRfZ2V0KHAtXHUwMDNlYnIsIEJST1BUX01TVF9FTkFCTEVEKSkge1xubmV0L2JyaWRnZS9icl9zdHAuYzo0NzpcdFx0ZXJyID0gYnJfbXN0X3NldF9zdGF0ZShwLCAwLCBzdGF0ZSwgTlVMTCk7XG5uZXQvYnJpZGdlL2JyX3N0cC5jLTQ4LVx0XHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE3OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwMzYKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA0MjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTVFAgU3RhdGUgQ2hhbmdlIGluIE5ldHdvcmsgQnJpZGdlIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcmVjZW50IHBhdGNoIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBhIGtleSBjaGFuZ2UuIFByZXZpb3VzbHksIHdlIGhhZCBgc3dpdGNoZGV2X3BvcnRfYXR0cl9zZXQocC0mZ3Q7ZGV2LCAmYW1wO2F0dHIsIGV4dGFjaylgIHJ1bm5pbmcgd2l0aGluIGFuIGByY3VfcmVhZF9sb2NrKClgIGJsb2NrLiBUaGF0JiMzOTtzIGEgcmVkIGZsYWchIGBzd2l0Y2hkZXZfcG9ydF9hdHRyX3NldGAgY2FuIHBvdGVudGlhbGx5IHNsZWVwLCB0cmlnZ2VyIGRyaXZlciBjYWxsYmFja3MsIG9yIGRvIGFsbCBzb3J0cyBvZiB0aGluZ3MgdGhhdCBhcmUgaW5jb21wYXRpYmxlIHdpdGggaG9sZGluZyBhbiBSQ1UgcmVhZCBsb2NrLiBUaGUgb2xkIGNvZGUgd2FzOgoKYGBgYwotCXJjdV9yZWFkX2xvY2soKTsKLQl2ZyA9IG5icF92bGFuX2dyb3VwX3JjdShwKTsKLQlpZiAoIXZnKQotCQlnb3RvIG91dDsKYGBgCgpBbmQgbm93IGxvb2tzIGxpa2UgdGhpczoKCmBgYGMKIAkvKiBNU1RJIDAgKENTVCkgc3RhdGUgY2hhbmdlcyBhcmUgbm90aWZpZWQgdmlhIHRoZSByZWd1bGFyCi0JICogU1dJVENIREVWX0FUVFJfSURfUE9SVF9TVFBfU1RBVEUuCiYjNDM7CSAqIFNXSVRDSERFVl9BVFRSX0lEX1BPUlRfU1RQX1NUQVRFLiBBbGwgb3RoZXIgTVNUSXMgYXJlIGhhbmRsZWQgdmlhCiYjNDM7CSAqIG5ldGxpbmsgd2l0aCBSVE5MIGhlbGQKIAkgKi8KIAlpZiAobXN0aSkgewomIzQzOwkJQVNTRVJUX1JUTkwoKTsKJiM0MzsKIAkJZXJyID0gc3dpdGNoZGV2X3BvcnRfYXR0cl9zZXQocC0mZ3Q7ZGV2LCAmYW1wO2F0dHIsIGV4dGFjayk7CiAJCWlmIChlcnIgJmFtcDsmYW1wOyBlcnIgIT0gLUVPUE5PVFNVUFApCiAJCQlnb3RvIG91dDsKJiM0MzsJCWVyciA9IDA7CiAJfQpgYGAKClRoZSBwYXRjaCBjbGVhcmx5IGFkZHJlc3NlcyB0aGlzIGJ5IG1vdmluZyB0aGUgY2FsbCBvdXRzaWRlIHRoZSBSQ1UgcmVhZCBsb2NrIGFuZCwgY3J1Y2lhbGx5LCBhZGRpbmcgYW4gYEFTU0VSVF9SVE5MKClgIGNoZWNrLiBBaGEhIFRoaXMgaXMgaW50ZXJlc3RpbmcuIFRoaXMgYEFTU0VSVF9SVE5MKClgIGNhbGwgaXMgZXF1aXZhbGVudCB0byBgUlROTF9XQVJOX1VOTE9DS0VEKClgLiAgVGhlIGNvbW1lbnQgaW4gdGhlIHBhdGNoIGlzIGFsc28gc2lnbmlmaWNhbnQuICBJdCByZW1pbmRzIHVzIHRoYXQgKmFueSogbmV3IGFzc2VydGlvbiwgb3IgbW9kaWZpY2F0aW9uIHRvIG9uZSwgdGhhdCYjMzk7cyBpbiBhIHJlYWNoYWJsZSBjb2RlIHBhdGggbmVlZHMgdG8gYmUgdGhvcm91Z2hseSBmdXp6ZWQuIFRoYXQgbWVhbnMgd2UmIzM5O3JlIGVuZm9yY2luZyBhIG5ldyBpbnZhcmlhbnQ6IHdlICptdXN0KiBob2xkIHRoZSBSVE5MIGR1cmluZyB0aGlzIHBvcnRpb24gb2YgdGhlIGNvZGUgd2hlbiBoYW5kbGluZyBNU1RJcyBvdGhlciB0aGFuIE1TVEkgMCwgc28gZnV6emluZyBpcyBnb2luZyB0byBiZSBpbXBvcnRhbnQgdG8gdmVyaWZ5IHRoZSBSVE5MIGlzIGFsd2F5cyBoZWxkIHVuZGVyIGFsbCBjaXJjdW1zdGFuY2VzLiBJIHNob3VsZCBjaGVjayBob3cgYGJyX21zdC5jYCBpcyBjb21waWxlZCBhbmQgd2hhdCBLY29uZmlnIG9wdGlvbnMgYXJlIGludm9sdmVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTc6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJfbXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL01ha2VmaWxlPTIxPWJyaWRnZS0kKENPTkZJR19CUklER0VfSUdNUF9TTk9PUElORykgJiM0Mzs9IGJyX211bHRpY2FzdC5vIGJyX21kYi5vIGJyX211bHRpY2FzdF9laHQub1xubmV0L2JyaWRnZS9NYWtlZmlsZS0yMi1cbm5ldC9icmlkZ2UvTWFrZWZpbGU6MjM6YnJpZGdlLSQoQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklORykgJiM0Mzs9IGJyX3ZsYW4ubyBicl92bGFuX3R1bm5lbC5vIGJyX3ZsYW5fb3B0aW9ucy5vIGJyX21zdC5vXG5uZXQvYnJpZGdlL01ha2VmaWxlLTI0LVxuLS1cbm5ldC9icmlkZ2UvYnIuYz0yOTQ9aW50IGJyX2Jvb2xvcHRfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgZW51bSBicl9ib29sb3B0X2lkIG9wdCwgYm9vbCBvbixcbi0tXG5uZXQvYnJpZGdlL2JyLmMtMzA2LVx0Y2FzZSBCUl9CT09MT1BUX01TVF9FTkFCTEU6XG5uZXQvYnJpZGdlL2JyLmM6MzA3Olx0XHRlcnIgPSBicl9tc3Rfc2V0X2VuYWJsZWQoYnIsIG9uLCBleHRhY2spO1xubmV0L2JyaWRnZS9ici5jLTMwOC1cdFx0YnJlYWs7XG4tLVxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmM9MjE9c3RhdGljIGlubGluZSBpbnQgc2hvdWxkX2RlbGl2ZXIoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcbi0tXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0yNy1cdHJldHVybiAodGVzdF9iaXQoQlJfSEFJUlBJTl9NT0RFX0JJVCwgXHUwMDI2cC1cdTAwM2VmbGFncykgfHwgc2tiLVx1MDAzZWRldiAhPSBwLVx1MDAzZWRldikgXHUwMDI2XHUwMDI2XG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYzoyODpcdFx0KGJyX21zdF9pc19lbmFibGVkKHApIHx8IHAtXHUwMDNlc3RhdGUgPT0gQlJfU1RBVEVfRk9SV0FSRElORykgXHUwMDI2XHUwMDI2XG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0yOS1cdFx0YnJfYWxsb3dlZF9lZ3Jlc3ModmcsIHNrYikgXHUwMDI2XHUwMDI2IG5icF9zd2l0Y2hkZXZfYWxsb3dlZF9lZ3Jlc3MocCwgc2tiKSBcdTAwMjZcdTAwMjZcbi0tXG5uZXQvYnJpZGdlL2JyX2lmLmM9MzgxPXZvaWQgYnJfZGV2X2RlbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuLS1cbm5ldC9icmlkZ2UvYnJfaWYuYy0zODktXG5uZXQvYnJpZGdlL2JyX2lmLmM6MzkwOlx0YnJfbXN0X3VuaW5pdChicik7XG5uZXQvYnJpZGdlL2JyX2lmLmMtMzkxLVx0YnJfcmVjYWxjdWxhdGVfbmVpZ2hfc3VwcHJlc3NfZW5hYmxlZChicik7XG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTc2PWludCBicl9oYW5kbGVfZnJhbWVfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy05Ni1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo5NzpcdGlmIChicl9tc3RfaXNfZW5hYmxlZChwKSkge1xubmV0L2JyaWRnZS9icl9pbnB1dC5jLTk4LVx0XHRzdGF0ZSA9IEJSX1NUQVRFX0ZPUldBUkRJTkc7XG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTM0Nz1zdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBicl9oYW5kbGVfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy00NDAtZm9yd2FyZDpcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo0NDE6XHRpZiAoYnJfbXN0X2lzX2VuYWJsZWQocCkpXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNDQyLVx0XHRnb3RvIGRlZmVyX3N0cF9maWx0ZXJpbmc7XG4tLVxubmV0L2JyaWRnZS9icl9tc3QuYy0xMy1cbm5ldC9icmlkZ2UvYnJfbXN0LmM6MTQ6REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoYnJfbXN0X3VzZWQpO1xubmV0L2JyaWRnZS9icl9tc3QuYy0xNS1cbm5ldC9icmlkZ2UvYnJfbXN0LmM6MTY6Ym9vbCBicl9tc3RfZW5hYmxlZChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2JyaWRnZS9icl9tc3QuYy0xNy17XG4tLVxubmV0L2JyaWRnZS9icl9tc3QuYy0yMi19XG5uZXQvYnJpZGdlL2JyX21zdC5jOjIzOkVYUE9SVF9TWU1CT0xfR1BMKGJyX21zdF9lbmFibGVkKTtcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMjQtXG5uZXQvYnJpZGdlL2JyX21zdC5jOjI1OnZvaWQgYnJfbXN0X3VuaW5pdChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXG5uZXQvYnJpZGdlL2JyX21zdC5jLTI2LXtcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMjctXHRpZiAoYnJfb3B0X2dldChiciwgQlJPUFRfTVNUX0VOQUJMRUQpKVxubmV0L2JyaWRnZS9icl9tc3QuYzoyODpcdFx0c3RhdGljX2JyYW5jaF9kZWMoXHUwMDI2YnJfbXN0X3VzZWQpO1xubmV0L2JyaWRnZS9icl9tc3QuYy0yOS19XG5uZXQvYnJpZGdlL2JyX21zdC5jLTMwLVxubmV0L2JyaWRnZS9icl9tc3QuYzozMTppbnQgYnJfbXN0X2dldF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBtc3RpLCB1bnNpZ25lZCBsb25nICp2aWRzKVxubmV0L2JyaWRnZS9icl9tc3QuYy0zMi17XG4tLVxubmV0L2JyaWRnZS9icl9tc3QuYy01NC19XG5uZXQvYnJpZGdlL2JyX21zdC5jOjU1OkVYUE9SVF9TWU1CT0xfR1BMKGJyX21zdF9nZXRfaW5mbyk7XG5uZXQvYnJpZGdlL2JyX21zdC5jLTU2LVxubmV0L2JyaWRnZS9icl9tc3QuYzo1NzppbnQgYnJfbXN0X2dldF9zdGF0ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgbXN0aSwgdTggKnN0YXRlKVxubmV0L2JyaWRnZS9icl9tc3QuYy01OC17XG4tLVxubmV0L2JyaWRnZS9icl9tc3QuYy03OS19XG5uZXQvYnJpZGdlL2JyX21zdC5jOjgwOkVYUE9SVF9TWU1CT0xfR1BMKGJyX21zdF9nZXRfc3RhdGUpO1xubmV0L2JyaWRnZS9icl9tc3QuYy04MS1cbm5ldC9icmlkZ2UvYnJfbXN0LmM6ODI6c3RhdGljIHZvaWQgYnJfbXN0X3ZsYW5fc2V0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnLFxubmV0L2JyaWRnZS9icl9tc3QuYy04My1cdFx0XHRcdCAgc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdixcbi0tXG5uZXQvYnJpZGdlL2JyX21zdC5jLTk0LVxubmV0L2JyaWRnZS9icl9tc3QuYzo5NTppbnQgYnJfbXN0X3NldF9zdGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCB1MTYgbXN0aSwgdTggc3RhdGUsXG5uZXQvYnJpZGdlL2JyX21zdC5jLTk2LVx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvYnJpZGdlL2JyX21zdC5jLTEzMS1cbm5ldC9icmlkZ2UvYnJfbXN0LmM6MTMyOlx0XHRicl9tc3Rfdmxhbl9zZXRfc3RhdGUodmcsIHYsIHN0YXRlKTtcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMTMzLVx0fVxuLS1cbm5ldC9icmlkZ2UvYnJfbXN0LmMtMTQwLVxubmV0L2JyaWRnZS9icl9tc3QuYzoxNDE6c3RhdGljIHZvaWQgYnJfbXN0X3ZsYW5fc3luY19zdGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICpwdiwgdTE2IG1zdGkpXG5uZXQvYnJpZGdlL2JyX21zdC5jLTE0Mi17XG4tLVxubmV0L2JyaWRnZS9icl9tc3QuYy0xNTEtXHRcdGlmICh2ICE9IHB2IFx1MDAyNlx1MDAyNiB2LVx1MDAzZWJydmxhbi1cdTAwM2Vtc3RpID09IG1zdGkpIHtcbm5ldC9icmlkZ2UvYnJfbXN0LmM6MTUyOlx0XHRcdGJyX21zdF92bGFuX3NldF9zdGF0ZSh2ZywgcHYsIHYtXHUwMDNlc3RhdGUpO1xubmV0L2JyaWRnZS9icl9tc3QuYy0xNTMtXHRcdFx0cmV0dXJuO1xuLS1cbm5ldC9icmlkZ2UvYnJfbXN0LmMtMTU3LVx0LyogT3RoZXJ3aXNlLCBzdGFydCBvdXQgaW4gYSBuZXcgTVNUSSB3aXRoIGFsbCBwb3J0cyBkaXNhYmxlZC4gKi9cbm5ldC9icmlkZ2UvYnJfbXN0LmM6MTU4Olx0cmV0dXJuIGJyX21zdF92bGFuX3NldF9zdGF0ZSh2ZywgcHYsIEJSX1NUQVRFX0RJU0FCTEVEKTtcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMTU5LX1cbm5ldC9icmlkZ2UvYnJfbXN0LmMtMTYwLVxubmV0L2JyaWRnZS9icl9tc3QuYzoxNjE6aW50IGJyX21zdF92bGFuX3NldF9tc3RpKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKm12LCB1MTYgbXN0aSlcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMTYyLXtcbi0tXG5uZXQvYnJpZGdlL2JyX21zdC5jLTE4OS1cdFx0aWYgKHB2KVxubmV0L2JyaWRnZS9icl9tc3QuYzoxOTA6XHRcdFx0YnJfbXN0X3ZsYW5fc3luY19zdGF0ZShwdiwgbXN0aSk7XG5uZXQvYnJpZGdlL2JyX21zdC5jLTE5MS1cdH1cbi0tXG5uZXQvYnJpZGdlL2JyX21zdC5jLTE5NS1cbm5ldC9icmlkZ2UvYnJfbXN0LmM6MTk2OnZvaWQgYnJfbXN0X3ZsYW5faW5pdF9zdGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2KVxubmV0L2JyaWRnZS9icl9tc3QuYy0xOTcte1xuLS1cbm5ldC9icmlkZ2UvYnJfbXN0LmMtMjA2LVxubmV0L2JyaWRnZS9icl9tc3QuYzoyMDc6aW50IGJyX21zdF9zZXRfZW5hYmxlZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXG5uZXQvYnJpZGdlL2JyX21zdC5jLTIwOC1cdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvYnJpZGdlL2JyX21zdC5jLTIzNy1cdGlmIChvbilcbm5ldC9icmlkZ2UvYnJfbXN0LmM6MjM4Olx0XHRzdGF0aWNfYnJhbmNoX2luYyhcdTAwMjZicl9tc3RfdXNlZCk7XG5uZXQvYnJpZGdlL2JyX21zdC5jLTIzOS1cdGVsc2Vcbm5ldC9icmlkZ2UvYnJfbXN0LmM6MjQwOlx0XHRzdGF0aWNfYnJhbmNoX2RlYyhcdTAwMjZicl9tc3RfdXNlZCk7XG5uZXQvYnJpZGdlL2JyX21zdC5jLTI0MS1cbi0tXG5uZXQvYnJpZGdlL2JyX21zdC5jLTI0NS1cbm5ldC9icmlkZ2UvYnJfbXN0LmM6MjQ2OnNpemVfdCBicl9tc3RfaW5mb19zaXplKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnKVxubmV0L2JyaWRnZS9icl9tc3QuYy0yNDcte1xuLS1cbm5ldC9icmlkZ2UvYnJfbXN0LmMtMjcxLVxubmV0L2JyaWRnZS9icl9tc3QuYzoyNzI6aW50IGJyX21zdF9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMjczLVx0XHQgICAgIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXN0LmMtMjk4LVxubmV0L2JyaWRnZS9icl9tc3QuYzoyOTk6c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGJyX21zdF9ubF9wb2xpY3lbSUZMQV9CUklER0VfTVNUX0VOVFJZX01BWCAmIzQzOyAxXSA9IHtcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMzAwLVx0W0lGTEFfQlJJREdFX01TVF9FTlRSWV9NU1RJXSA9IE5MQV9QT0xJQ1lfUkFOR0UoTkxBX1UxNixcbi0tXG5uZXQvYnJpZGdlL2JyX21zdC5jLTMwNy1cbm5ldC9icmlkZ2UvYnJfbXN0LmM6MzA4OnN0YXRpYyBpbnQgYnJfbXN0X3Byb2Nlc3Nfb25lKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG5uZXQvYnJpZGdlL2JyX21zdC5jLTMwOS1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXN0LmMtMzE3LVx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgSUZMQV9CUklER0VfTVNUX0VOVFJZX01BWCwgYXR0cixcbm5ldC9icmlkZ2UvYnJfbXN0LmM6MzE4Olx0XHRcdCAgICAgICBicl9tc3RfbmxfcG9saWN5LCBleHRhY2spO1xubmV0L2JyaWRnZS9icl9tc3QuYy0zMTktXHRpZiAoZXJyKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXN0LmMtMzM0LVxubmV0L2JyaWRnZS9icl9tc3QuYzozMzU6XHRyZXR1cm4gYnJfbXN0X3NldF9zdGF0ZShwLCBtc3RpLCBzdGF0ZSwgZXh0YWNrKTtcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMzM2LX1cbm5ldC9icmlkZ2UvYnJfbXN0LmMtMzM3LVxubmV0L2JyaWRnZS9icl9tc3QuYzozMzg6aW50IGJyX21zdF9wcm9jZXNzKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIGNvbnN0IHN0cnVjdCBubGF0dHIgKm1zdF9hdHRyLFxubmV0L2JyaWRnZS9icl9tc3QuYy0zMzktXHRcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvYnJpZGdlL2JyX21zdC5jLTM1Mi1cdFx0Y2FzZSBJRkxBX0JSSURHRV9NU1RfRU5UUlk6XG5uZXQvYnJpZGdlL2JyX21zdC5jOjM1MzpcdFx0XHRlcnIgPSBicl9tc3RfcHJvY2Vzc19vbmUocCwgYXR0ciwgZXh0YWNrKTtcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMzU0LVx0XHRcdGJyZWFrO1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jPTkzPXN0YXRpYyBzaXplX3QgYnJfZ2V0X2xpbmtfYWZfc2l6ZV9maWx0ZXJlZChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTEyMi1cdGlmIChwIFx1MDAyNlx1MDAyNiB2ZyBcdTAwMjZcdTAwMjYgKGZpbHRlcl9tYXNrIFx1MDAyNiBSVEVYVF9GSUxURVJfTVNUKSlcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjEyMzpcdFx0dmluZm9fc3ogJiM0Mzs9IGJyX21zdF9pbmZvX3NpemUodmcpO1xubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTI0LVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jPTQ1OD1zdGF0aWMgaW50IGJyX2ZpbGxfaWZpbmZvKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtNjA2LVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6NjA3Olx0XHRlcnIgPSBicl9tc3RfZmlsbF9pbmZvKHNrYiwgdmcpO1xubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtNjA4LVx0XHRpZiAoZXJyKVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jPTgwOT1zdGF0aWMgaW50IGJyX2Fmc3BlYyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtODcwLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6ODcxOlx0XHRcdGVyciA9IGJyX21zdF9wcm9jZXNzKHAsIGF0dHIsIGV4dGFjayk7XG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy04NzItXHRcdFx0aWYgKGVycilcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xOTM0PXN0YXRpYyBpbmxpbmUgYm9vbCBicl92bGFuX3N0YXRlX2FsbG93ZWQodTggc3RhdGUsIGJvb2wgbGVhcm5fYWxsb3cpXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk0Ni1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE5NDc6LyogYnJfbXN0LmMgKi9cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NDgtI2lmZGVmIENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE5NDk6REVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKGJyX21zdF91c2VkKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE5NTA6c3RhdGljIGlubGluZSBib29sIGJyX21zdF9pc19lbmFibGVkKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTUxLXtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NTItXHQvKiBjaGVjayB0aGUgcG9ydCYjMzk7cyB2bGFuIGdyb3VwIHRvIGF2b2lkIHJhY2luZyB3aXRoIHBvcnQgZGVsZXRpb24gKi9cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE5NTM6XHRyZXR1cm4gc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZicl9tc3RfdXNlZCkgXHUwMDI2XHUwMDI2XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTU0LVx0ICAgICAgIGJyX29wdF9nZXQocC1cdTAwM2ViciwgQlJPUFRfTVNUX0VOQUJMRUQpIFx1MDAyNlx1MDAyNlxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NTctXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTU4OmludCBicl9tc3Rfc2V0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHUxNiBtc3RpLCB1OCBzdGF0ZSxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NTktXHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE5NjA6aW50IGJyX21zdF92bGFuX3NldF9tc3RpKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHUxNiBtc3RpKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE5NjE6dm9pZCBicl9tc3Rfdmxhbl9pbml0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYpO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTk2MjppbnQgYnJfbXN0X3NldF9lbmFibGVkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NjMtXHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTk2NDpzaXplX3QgYnJfbXN0X2luZm9fc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2Zyk7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTY1OmludCBicl9tc3RfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTY2LVx0XHQgICAgIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE5Njc6aW50IGJyX21zdF9wcm9jZXNzKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIGNvbnN0IHN0cnVjdCBubGF0dHIgKm1zdF9hdHRyLFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk2OC1cdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE5Njk6dm9pZCBicl9tc3RfdW5pbml0KHN0cnVjdCBuZXRfYnJpZGdlICpicik7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTcwLSNlbHNlXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTcxOnN0YXRpYyBpbmxpbmUgYm9vbCBicl9tc3RfaXNfZW5hYmxlZChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk3Mi17XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk3NS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE5NzY6c3RhdGljIGlubGluZSBpbnQgYnJfbXN0X3NldF9zdGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCB1MTYgbXN0aSxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NzctXHRcdFx0XHQgICB1OCBzdGF0ZSwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5ODEtXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTgyOnN0YXRpYyBpbmxpbmUgaW50IGJyX21zdF9zZXRfZW5hYmxlZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTgzLVx0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk4Ny1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE5ODg6c3RhdGljIGlubGluZSBzaXplX3QgYnJfbXN0X2luZm9fc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2Zylcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5ODkte1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5OTItXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTkzOnN0YXRpYyBpbmxpbmUgaW50IGJyX21zdF9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5OTQtXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2Zylcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTk4LVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTk5OTpzdGF0aWMgaW5saW5lIGludCBicl9tc3RfcHJvY2VzcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMjAwMC1cdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmxhdHRyICptc3RfYXR0cixcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0yMDA1LVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MjAwNjpzdGF0aWMgaW5saW5lIHZvaWQgYnJfbXN0X3VuaW5pdChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0yMDA3LXtcbi0tXG5uZXQvYnJpZGdlL2JyX3N0cC5jPTI5PXZvaWQgYnJfc2V0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHVuc2lnbmVkIGludCBzdGF0ZSlcbi0tXG5uZXQvYnJpZGdlL2JyX3N0cC5jLTQ2LVx0aWYgKGJyX29wdF9nZXQocC1cdTAwM2ViciwgQlJPUFRfTVNUX0VOQUJMRUQpKSB7XG5uZXQvYnJpZGdlL2JyX3N0cC5jOjQ3Olx0XHRlcnIgPSBicl9tc3Rfc2V0X3N0YXRlKHAsIDAsIHN0YXRlLCBOVUxMKTtcbm5ldC9icmlkZ2UvYnJfc3RwLmMtNDgtXHRcdGlmIChlcnIpXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9MjM0PXN0YXRpYyB2b2lkIGJyX3ZsYW5faW5pdF9zdGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2KVxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTI0My1cdGlmIChicl9vcHRfZ2V0KGJyLCBCUk9QVF9NU1RfRU5BQkxFRCkpIHtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjI0NDpcdFx0YnJfbXN0X3ZsYW5faW5pdF9zdGF0ZSh2KTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTI0NS1cdFx0cmV0dXJuO1xuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmM9NTUwPXN0YXRpYyBpbnQgYnJfdmxhbl9wcm9jZXNzX2dsb2JhbF9vbmVfb3B0cyhjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYy02NTctXHRcdG1zdGkgPSBubGFfZ2V0X3UxNih0YltCUklER0VfVkxBTkRCX0dPUFRTX01TVEldKTtcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmM6NjU4Olx0XHRlcnIgPSBicl9tc3Rfdmxhbl9zZXRfbXN0aSh2LCBtc3RpKTtcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmMtNjU5LVx0XHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE3OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODA3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBhIGZpcnN0LXBlcnNvbiBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBCcmlkZ2UgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIEtjb25maWcgZmlsZXMgcmVsYXRlZCB0byB0aGUgYnJpZGdpbmcgZnVuY3Rpb25hbGl0eS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGZvY3VzaW5nIG9uICYjMzQ7QlJJREdFJiMzNDsgYW5kICYjMzQ7QlJJREdFX1ZMQU5fRklMVEVSSU5HLiYjMzQ7IFVuZGVyc3RhbmRpbmcgdGhlc2UgY29uZmlndXJhdGlvbnMgaXMgY3J1Y2lhbCBmb3IgZmluZS10dW5pbmcgdGhlIGJyaWRnaW5nIGltcGxlbWVudGF0aW9uLiBJIGtub3cgdGhleSYjMzk7cmUgcHJvYmFibHkgaW50ZXJjb25uZWN0ZWQsIGFuZCBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBvcHRpb25zIGFyZSBwcmVzZW50ZWQgdG8gdGhlIGVuZC11c2VyLiBJIGV4cGVjdCB0byBiZSBhYmxlIHRvIGlkZW50aWZ5IGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRoZW0sIGFuZCB0byBsb29rIGF0IHRoZSBoZWxwIHRleHQgYW5kIGRlZmF1bHQgdmFsdWVzIHRvIHVuZGVyc3RhbmQgdGhlaXIgaW50ZW5kZWQgdXNlIGFuZCBpbXBhY3Qgb24gdGhlIG92ZXJhbGwgY29uZmlndXJhdGlvbi4gVGhpcyBpcyBrZXkgdG8gZW5zdXJpbmcgdGhlIGJyaWRnZSBiZWhhdmVzIGFzIGV4cGVjdGVkLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aG9zZSBvcHRpb25zIGFyZSBzdHJ1Y3R1cmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlJJREdFX1ZMQU5fRklMVEVSSU5HJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL0tjb25maWc9MzY9Y29uZmlnIEJSSURHRV9JR01QX1NOT09QSU5HXG4tLVxubmV0L2JyaWRnZS9LY29uZmlnLTQ5LVxubmV0L2JyaWRnZS9LY29uZmlnOjUwOmNvbmZpZyBCUklER0VfVkxBTl9GSUxURVJJTkdcbm5ldC9icmlkZ2UvS2NvbmZpZy01MS1cdGJvb2wgXCYjMzQ7VkxBTiBmaWx0ZXJpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTc6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxMDkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyB0aGUgQnJpZGdlIENvbmZpZ3VyYXRpb24gRmlsZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgbmV0L2JyaWRnZS9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNTAuIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCYjMzk7cyB3aGVyZSBzb21lIG9mIHRoZSBjb3JlIGJyaWRnZSBmdW5jdGlvbmFsaXR5IG9wdGlvbnMgYXJlIGRlZmluZWQuIEkmIzM5O20gbGlrZWx5IGFmdGVyIHRoZSBib29sZWFuIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWFuYWdlIHRoZSBicmlkZ2UgaXRzZWxmLCBvciBwb3RlbnRpYWxseSB0aGUgcGFyYW1ldGVycyBvZiBhIGJyaWRnZSBwb3J0LiBJIHdhbnQgdG8gYXNzZXNzIHRoZSBjb25maWd1cmFiaWxpdHkgb2YgdGhlIGZlYXR1cmVzIGFuZCB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBhdCBjb21waWxlIHRpbWUuIFBlcmhhcHMgSSYjMzk7bSBsb29raW5nIHRvIHVuZGVyc3RhbmQgaG93IGEgc3BlY2lmaWMgZmVhdHVyZSBpcyBlbmFibGVkIG9yIGRpc2FibGVkLCBvciBtYXliZSBJJiMzOTttIHRyeWluZyB0byBkaWFnbm9zZSBhIGJ1aWxkIGlzc3VlIHJlbGF0ZWQgdG8gYnJpZGdpbmcuIEhvcGVmdWxseSwgdGhlIEtjb25maWcgZW50cmllcyBhcmUgd2VsbC1kb2N1bWVudGVkLCBtYWtpbmcgdGhpcyBhbmFseXNpcyByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZC4gSSYjMzk7bSBwcmVwYXJpbmcgbXlzZWxmIHRvIHBhcnNlIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhlbHAgc3RyaW5ncyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZSBvZiBhbnkgcGFydGljdWxhciBvcHRpb24gSSYjMzk7bSBpbnRlcmVzdGVkIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNDU6XHRcbiAgNDY6XHRcdCAgU2F5IE4gdG8gZXhjbHVkZSB0aGlzIHN1cHBvcnQgYW5kIHJlZHVjZSB0aGUgYmluYXJ5IHNpemUuXG4gIDQ3Olx0XG4gIDQ4Olx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gIDQ5Olx0XG4gIDUwOlx0Y29uZmlnIEJSSURHRV9WTEFOX0ZJTFRFUklOR1xuICA1MTpcdFx0Ym9vbCBcJiMzNDtWTEFOIGZpbHRlcmluZ1wmIzM0O1xuICA1MjpcdFx0ZGVwZW5kcyBvbiBCUklER0VcbiAgNTM6XHRcdGRlcGVuZHMgb24gVkxBTl84MDIxUVxuICA1NDpcdFx0ZGVmYXVsdCBuXG4gIDU1Olx0XHRoZWxwXG4gIDU2Olx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHRoZSBFdGhlcm5ldCBicmlkZ2Ugd2lsbCBiZSBhYmxlIHNlbGVjdGl2ZWx5XG4gIDU3Olx0XHQgIHJlY2VpdmUgYW5kIGZvcndhcmQgdHJhZmZpYyBiYXNlZCBvbiBWTEFOIGluZm9ybWF0aW9uIGluIHRoZSBwYWNrZXRcbiAgNTg6XHRcdCAgYW55IFZMQU4gaW5mb3JtYXRpb24gY29uZmlndXJlZCBvbiB0aGUgYnJpZGdlIHBvcnQgb3IgYnJpZGdlIGRldmljZS5cbiAgNTk6XHRcbiAgNjA6XHRcdCAgU2F5IE4gdG8gZXhjbHVkZSB0aGlzIHN1cHBvcnQgYW5kIHJlZHVjZSB0aGUgYmluYXJ5IHNpemUuXG4gIDYxOlx0XG4gIDYyOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gIDYzOlx0XG4gIDY0Olx0Y29uZmlnIEJSSURHRV9NUlBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTc6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1OTQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOgoKKipEZXBlbmRlbmNpZXMgYW5kIFN3aXRjaGRldiBJbnRlZ3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYEJSSURHRV9WTEFOX0ZJTFRFUklOR2AuIEl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGl0IGhhcyBkZXBlbmRlbmNpZXMgb24gYEJSSURHRWAgYW5kIGBWTEFOXzgwMjFRYCDigJMgdGhhdCYjMzk7cyBleHBlY3RlZC4gTm93LCB3aGF0JiMzOTtzIG5hZ2dpbmcgbWUgaXMgdGhlIHN3aXRjaGRldiBpbnZvbHZlbWVudC4gSSYjMzk7bSBzZWVpbmcgYHN3aXRjaGRldl9wb3J0X2F0dHJfc2V0YCBiZWluZyB1c2VkLCBhbmQgdGhhdCBtYWtlcyBtZSB3b25kZXIgaWYgYE5FVF9TV0lUQ0hERVZgIGlzIGEgKmhhcmQqIHJlcXVpcmVtZW50IGhlcmUuIEkgbmVlZCB0byBjbGFyaWZ5IHRoYXQuIFJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBjb2Rl4oCmIEkmIzM5O2xsIGhlYWQgb3ZlciB0byBgaW5jbHVkZS9uZXQvc3dpdGNoZGV2LmhgIGFuZCBjaGVjayB3aGVyZSBgc3dpdGNoZGV2X3BvcnRfYXR0cl9zZXRgIGlzIGFjdHVhbGx5IGRlZmluZWQuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGRlZmluaXRpdmUgYW5zd2VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzd2l0Y2hkZXZfcG9ydF9hdHRyX3NldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3N3aXRjaGRldi5oPTMwOD12b2lkIHN3aXRjaGRldl9kZWZlcnJlZF9wcm9jZXNzKHZvaWQpO1xuaW5jbHVkZS9uZXQvc3dpdGNoZGV2Lmg6MzA5OmludCBzd2l0Y2hkZXZfcG9ydF9hdHRyX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuaW5jbHVkZS9uZXQvc3dpdGNoZGV2LmgtMzEwLVx0XHRcdCAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoZGV2X2F0dHIgKmF0dHIsXG4tLVxuaW5jbHVkZS9uZXQvc3dpdGNoZGV2Lmg9Mzk2PXN0YXRpYyBpbmxpbmUgdm9pZCBzd2l0Y2hkZXZfZGVmZXJyZWRfcHJvY2Vzcyh2b2lkKVxuLS1cbmluY2x1ZGUvbmV0L3N3aXRjaGRldi5oLTM5OS1cbmluY2x1ZGUvbmV0L3N3aXRjaGRldi5oOjQwMDpzdGF0aWMgaW5saW5lIGludCBzd2l0Y2hkZXZfcG9ydF9hdHRyX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuaW5jbHVkZS9uZXQvc3dpdGNoZGV2LmgtNDAxLVx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfYXR0ciAqYXR0cixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTc6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwNzkKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgTkVUX1NXSVRDSERFVmAgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYE5FVF9TV0lUQ0hERVZgLiBSaWdodCwgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBkZWZpbmVkIGluIGBuZXQvS2NvbmZpZ2AsIHNvIHRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LiBMZXQmIzM5O3MgaGVhZCBvdmVyIHRoZXJlIGFuZCB0YWtlIGEgbG9vayBhdCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggYE5FVF9TV0lUQ0hERVZgLiBOZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcywgdGhlIGRlc2NyaXB0aW9uLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIG9uZS4gVGltZSB0byBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE3OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfU1dJVENIREVWJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zd2l0Y2hkZXYvS2NvbmZpZy01LVxubmV0L3N3aXRjaGRldi9LY29uZmlnOjY6Y29uZmlnIE5FVF9TV0lUQ0hERVZcbm5ldC9zd2l0Y2hkZXYvS2NvbmZpZy03LVx0Ym9vbCBcJiMzNDtTd2l0Y2ggKGFuZCBzd2l0Y2gtaXNoKSBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI5NQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDYwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBTd2l0Y2hkZXYsIEJyaWRnZSwgYW5kIFZMQU4gSW50ZXJhY3Rpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBgc3dpdGNoZGV2X3BvcnRfYXR0cl9zZXRgIGlzIHRoZSBrZXkuIEkgc2VlIGl0JiMzOTtzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgdW5kZXIgYENPTkZJR19ORVRfU1dJVENIREVWYC4gSWYgdGhhdCYjMzk7cyAqbm90KiBlbmFibGVkLCBpdCByZXR1cm5zIGAtRU9QTk9UU1VQUGAsIHdoaWNoIGlzIGFzIGV4cGVjdGVkLiBgTkVUX1NXSVRDSERFVmAgaXMgdHlwaWNhbGx5IHNlbGVjdGVkIHdoZW4gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzd2l0Y2hkZXYgb2ZmbG9hZHMsIHNvIHRoYXQgbWFrZXMgc2Vuc2UuIFdlJiMzOTtyZSBvYnZpb3VzbHkgZGVhbGluZyB3aXRoIGJyaWRnaW5nLiBTbywgYENPTkZJR19CUklER0VgIGFuZCBwcm9iYWJseSBgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR2AsIGFuZCBgQ09ORklHX1ZMQU5fODAyMVFgIGFyZSBhbHNvIGluIHBsYXkgaGVyZS4KCk5vdywgbG9va2luZyBhdCB0aGUgcGF0Y2ggaXRzZWxmLCB0aGUgbWFpbiBjaGFuZ2Ugc2VlbXMgdG8gYmUgd2l0aGluIGBicl9tc3Rfc2V0X3N0YXRlYC4gU3BlY2lmaWNhbGx5LCB3ZSBhcmUgcmVtb3ZpbmcgdGhlIFJDVSByZWFkIGxvY2svdW5sb2NrIGFyb3VuZCB0aGUgYHN3aXRjaGRldl9wb3J0X2F0dHJfc2V0YCBjYWxsIGFuZCB0aGUgdmxhbiBsaXN0IGl0ZXJhdGlvbi4gSXQgbG9va3MgbGlrZSBpdCB3YXMgb25seSBiZWluZyBjYWxsZWQgZm9yIG5vbi16ZXJvIGBtc3RpYCwgYW5kIHRoaXMgY29kZSBpcyBtYW5hZ2luZyBNU1RJcyBhbmQgdGhlaXIgc3RhdGVzLiBUaGUgY29tbWVudCBjbGFyaWZpZXMgdGhhdCBNU1RJIDAgKENTVCkgc3RhdGUgY2hhbmdlcyBhcmUgaGFuZGxlZCB2aWEgYFNXSVRDSERFVl9BVFRSX0lEX1BPUlRfU1RQX1NUQVRFYCwgd2hpbGUgb3RoZXIgTVNUSXMgKG5vbi16ZXJvKSBhcmUgaGFuZGxlZCB2aWEgbmV0bGluayB3aXRoIFJUTkwgaGVsZC4gVGhlIGFkZGVkIGBBU1NFUlRfUlROTCgpYCBtYWtlcyBpdCBleHBsaWNpdCB0aGF0IHdlIGV4cGVjdCB0aGUgUlROTCBsb2NrIHRvIGJlIGhlbGQgaW4gdGhhdCBicmFuY2guIFRoZSBSQ1UgcmVhZCBsb2NrIGlzIG5vdyBkb25lIGFmdGVyIHRoZSBwb3RlbnRpYWxseSBmYWlsaW5nIGNhbGwgdG8gYHN3aXRjaGRldl9wb3J0X2F0dHJfc2V0YC4KClNvLCB0aGUgaXNzdWUgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGBzd2l0Y2hkZXZgIHBhdGgsIHdoaWNoIHVzZXMgbmV0bGluaywgYW5kIHRoZSBWTEFOIHN0YXRlIG1hbmFnZW1lbnQgaW4gdGhlIGJyaWRnZS4gTXkgZ3Vlc3MgaXMgdGhhdCB0aGUgb3JpZ2luYWwgY29kZSBjb3VsZCBsZWFkIHRvIGEgcmFjZSBjb25kaXRpb24gb3Igc29tZSBvdGhlciBjb25jdXJyZW5jeSBpc3N1ZSB3aGVuIHNldHRpbmcgTVNUSSBzdGF0ZXMuCgpJIG5lZWQgdG8gZGlnIGludG8gdGhlIGdpdCBsb2cgb3IgdGhlIHNwZWNpZmljIGNvbW1pdCBtZXNzYWdlIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBjaGFuZ2Ugd2FzIG5lY2Vzc2FyeS4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgZXhhY3QgcHJvYmxlbSBpdCYjMzk7cyBzb2x2aW5nIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2Ygc3dpdGNoZGV2IGFuZCBicmlkZ2luZyBpbiB0aGUga2VybmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NsZWVwaW5nIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIGludmFsaWQgY29udGV4dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDM5MQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDk2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEFuYWx5c2lzIG9mIGEgS2VybmVsIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBleGFtaW5lIHRoaXMgYHN3aXRjaGRldl9wb3J0X2F0dHJfc2V0YCBmdW5jdGlvbi4gVGhlIGtleSBoZXJlIGlzIHRoZSBwb3RlbnRpYWwgZm9yIGJsb2NraW5nIG5vdGlmaWVycywgdXNpbmcgdGhhdCBgcndzZW1gLCB3aGljaCBjYW4gbGVhZCB0byBzbGVlcGluZyBpbiBhIHBvdGVudGlhbGx5IGludmFsaWQgY29udGV4dCwgc3BlY2lmaWNhbGx5IGluc2lkZSBvZiBgcmN1X3JlYWRfbG9jaygpYC4gVGhlIGZpeCBwcm9wb3NlcyBtb3ZpbmcgdGhlIFJDVSBsb2NrLCB3aGljaCBpbW1lZGlhdGVseSByYWlzZXMgYSByZWQgZmxhZyBmb3IgbWUg4oCTIGFueSBjaGFuZ2UgaW4gbG9ja2luZyBvcmRlciBkZW1hbmRzIHNjcnV0aW55LiBUaGUgYWRkaXRpb24gb2YgYEFTU0VSVF9SVE5MKClgIHdoZW4gYG1zdGkgIT0gMGAgaXMgYW5vdGhlciBwb2ludCBvZiBpbnRlcmVzdC4KClRoZSBuZXh0IGNyaXRpY2FsIHN0ZXAgaXMgYXNzZXNzaW5nIHJlYWNoYWJpbGl0eSBpbiB0eXBpY2FsIGZ1enppbmcgZW52aXJvbm1lbnRzLiBUaGFua2Z1bGx5LCBpdCBsb29rcyBsaWtlIHRoaXMgY29kZSAqaXMqIHJlYWNoYWJsZS4gU3l6a2FsbGVyIGFjdGl2ZWx5IG1hbmlwdWxhdGVzIGJyaWRnZSBkZXZpY2VzIGFuZCBjb25maWd1cmF0aW9ucyB2aWEgcnRuZXRsaW5rLCB3aXRoIG9wZXJhdGlvbnMgbGlrZSBzZXR0aW5nIFZMQU5zLCBNU1QsIGFuZCBuZXRsaW5rIGF0dHJpYnV0ZXMsIHV0aWxpemluZyBgUlRNX1NFVExJTktgIGFuZCB2YXJpb3VzIGBJRkxBXypgIGF0dHJpYnV0ZXMuICBGdXJ0aGVybW9yZSwgYGJyX21zdF9zZXRfc3RhdGVgIGFwcGVhcnMgcmVhY2hhYmxlIHRocm91Z2ggYm90aCBuZXRsaW5rICh2aWEgYGJyX2Fmc3BlY2AgLSZndDsgYGJyX21zdF9wcm9jZXNzYCAtJmd0OyBgYnJfbXN0X3Byb2Nlc3Nfb25lYCAtJmd0OyBgYnJfbXN0X3NldF9zdGF0ZWApIGFuZCBhbHNvIHZpYSBgYnJfc3RwLmNgICh0aHJvdWdoIGBicl9zZXRfc3RhdGVgKS4KCk5vdywgY29uc2lkZXJpbmcgdGhlIHBhdGNoJiMzOTtzIGNvcmUgY2hhbmdlIG9mIGFsdGVyaW5nIHRoZSBsb2NraW5nIG9yZGVyIGFuZCBpbnRyb2R1Y2luZyBhbiBhc3NlcnRpb24sIHRoaXMgKmFic29sdXRlbHkqIHNjcmVhbXMgZm9yIGZ1enppbmcuIFBlciBvdXIgZXN0YWJsaXNoZWQgdHJpYWdlIHBoaWxvc29waHksIGFueSBtb2RpZmljYXRpb24gb2YgYXNzZXJ0aW9ucyBpbiByZWFjaGFibGUgY29kZSBwYXRocywgZXNwZWNpYWxseSB0aG9zZSBlbmZvcmNpbmcgbmV3IGludmFyaWFudHMsIHJlcXVpcmVzIHRob3JvdWdoIGZ1enppbmcuIFRoaXMgYXBwbGllcyBlc3BlY2lhbGx5IHNpbmNlIHRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCwgc3luY2hyb25pemF0aW9uLCBhbmQgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uYWxpdGllcyB3aGljaCBhcmUgd2l0aGluIHRoZSBzY29wZSBvZiBjb2RlIHdlIGNvbnNpZGVyIHdvcnRoeSBvZiBmdXp6aW5nLiBUaGVyZWZvcmUsIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGlzIGlzIGEgZGVmaW5pdGUgYFdvcnRoRnV6emluZyA9IHRydWVgIHNpdHVhdGlvbi4KCk5leHQsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgY3J1Y2lhbCBzeW1ib2xzIHRvIHRhcmdldCB3aXRoIHRoZSBmdXp6ZXIuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gZnVuY3Rpb25zIG9mIGludGVyZXN0IGFyZTogYGJyX21zdF9zZXRfc3RhdGVgICh0aGUgbW9kaWZpZWQgZnVuY3Rpb24gaXRzZWxmKSwgYGJyX21zdF9wcm9jZXNzYCAodGhlIG5ldGxpbmsgZW50cnkpLCBgYnJfbXN0X3Byb2Nlc3Nfb25lYCwgYGJyX3NldF9zdGF0ZWAsIGFuZCBgYnJfbXN0X3NldF9lbmFibGVkYC4gQSBxdWljayBjaGVjayByZXZlYWxzIHRoYXQgdGhlc2Ugc3ltYm9scyBhcmUgbm90IGRlY2xhcmVkIGFzIHN0YXRpYyAodGhleSBhcmUgZGVjbGFyZWQgaW4gYG5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oYCkgd2hpY2ggbWVhbnMgdGhhdCBzeXprYWxsZXIsIHdoaWNoIHR5cGljYWxseSBmb2N1c2VzIG9uIG5vbi1zdGF0aWMgb3IgZXhwb3J0ZWQvZ2xvYmFsIHN5bWJvbHMsIGNhbiB0YXJnZXQgdGhlbS4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgYGJyX21zdF9wcm9jZXNzX29uZWAgaXNuJiMzOTt0IGlubGluZWQsIGJ1dCBzaW5jZSBpdCBpcyBjYWxsZWQgd2l0aGluIG5vbi1zdGF0aWMgc3ltYm9scywgSSB0aGluayB3ZSBhcmUgZ29vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTc6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IGJyX21zdF8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbXN0LmM9MjU9dm9pZCBicl9tc3RfdW5pbml0KHN0cnVjdCBuZXRfYnJpZGdlICpicilcbi0tXG5uZXQvYnJpZGdlL2JyX21zdC5jLTMwLVxubmV0L2JyaWRnZS9icl9tc3QuYzozMTppbnQgYnJfbXN0X2dldF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBtc3RpLCB1bnNpZ25lZCBsb25nICp2aWRzKVxubmV0L2JyaWRnZS9icl9tc3QuYy0zMi17XG4tLVxubmV0L2JyaWRnZS9icl9tc3QuYz01NT1FWFBPUlRfU1lNQk9MX0dQTChicl9tc3RfZ2V0X2luZm8pO1xubmV0L2JyaWRnZS9icl9tc3QuYy01Ni1cbm5ldC9icmlkZ2UvYnJfbXN0LmM6NTc6aW50IGJyX21zdF9nZXRfc3RhdGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IG1zdGksIHU4ICpzdGF0ZSlcbm5ldC9icmlkZ2UvYnJfbXN0LmMtNTgte1xuLS1cbm5ldC9icmlkZ2UvYnJfbXN0LmM9ODI9c3RhdGljIHZvaWQgYnJfbXN0X3ZsYW5fc2V0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXN0LmMtOTQtXG5uZXQvYnJpZGdlL2JyX21zdC5jOjk1OmludCBicl9tc3Rfc2V0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHUxNiBtc3RpLCB1OCBzdGF0ZSxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtOTYtXHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXN0LmM9MTQxPXN0YXRpYyB2b2lkIGJyX21zdF92bGFuX3N5bmNfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqcHYsIHUxNiBtc3RpKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXN0LmMtMTYwLVxubmV0L2JyaWRnZS9icl9tc3QuYzoxNjE6aW50IGJyX21zdF92bGFuX3NldF9tc3RpKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKm12LCB1MTYgbXN0aSlcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMTYyLXtcbi0tXG5uZXQvYnJpZGdlL2JyX21zdC5jPTE5Nj12b2lkIGJyX21zdF92bGFuX2luaXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdilcbi0tXG5uZXQvYnJpZGdlL2JyX21zdC5jLTIwNi1cbm5ldC9icmlkZ2UvYnJfbXN0LmM6MjA3OmludCBicl9tc3Rfc2V0X2VuYWJsZWQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxubmV0L2JyaWRnZS9icl9tc3QuYy0yMDgtXHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2JyaWRnZS9icl9tc3QuYz0yNDY9c2l6ZV90IGJyX21zdF9pbmZvX3NpemUoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcpXG4tLVxubmV0L2JyaWRnZS9icl9tc3QuYy0yNzEtXG5uZXQvYnJpZGdlL2JyX21zdC5jOjI3MjppbnQgYnJfbXN0X2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2JyaWRnZS9icl9tc3QuYy0yNzMtXHRcdCAgICAgY29uc3Qgc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcpXG4tLVxubmV0L2JyaWRnZS9icl9tc3QuYz0yOTk9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGJyX21zdF9ubF9wb2xpY3lbSUZMQV9CUklER0VfTVNUX0VOVFJZX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvYnJpZGdlL2JyX21zdC5jLTMwNy1cbm5ldC9icmlkZ2UvYnJfbXN0LmM6MzA4OnN0YXRpYyBpbnQgYnJfbXN0X3Byb2Nlc3Nfb25lKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG5uZXQvYnJpZGdlL2JyX21zdC5jLTMwOS1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXN0LmMtMzM3LVxubmV0L2JyaWRnZS9icl9tc3QuYzozMzg6aW50IGJyX21zdF9wcm9jZXNzKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIGNvbnN0IHN0cnVjdCBubGF0dHIgKm1zdF9hdHRyLFxubmV0L2JyaWRnZS9icl9tc3QuYy0zMzktXHRcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xOTUwPXN0YXRpYyBpbmxpbmUgYm9vbCBicl9tc3RfaXNfZW5hYmxlZChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKVxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NTctXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTU4OmludCBicl9tc3Rfc2V0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHUxNiBtc3RpLCB1OCBzdGF0ZSxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NTktXHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE5NjA6aW50IGJyX21zdF92bGFuX3NldF9tc3RpKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHUxNiBtc3RpKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NjEtdm9pZCBicl9tc3Rfdmxhbl9pbml0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYpO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTk2MjppbnQgYnJfbXN0X3NldF9lbmFibGVkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NjMtXHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTk2ND1zaXplX3QgYnJfbXN0X2luZm9fc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2Zyk7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTY1OmludCBicl9tc3RfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTY2LVx0XHQgICAgIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE5Njc6aW50IGJyX21zdF9wcm9jZXNzKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIGNvbnN0IHN0cnVjdCBubGF0dHIgKm1zdF9hdHRyLFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk2OC1cdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xOTcxPXN0YXRpYyBpbmxpbmUgYm9vbCBicl9tc3RfaXNfZW5hYmxlZChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKVxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NzUtXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTc2OnN0YXRpYyBpbmxpbmUgaW50IGJyX21zdF9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IG1zdGksXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTc3LVx0XHRcdFx0ICAgdTggc3RhdGUsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTgxLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTk4MjpzdGF0aWMgaW5saW5lIGludCBicl9tc3Rfc2V0X2VuYWJsZWQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk4My1cdFx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE5ODg9c3RhdGljIGlubGluZSBzaXplX3QgYnJfbXN0X2luZm9fc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2Zylcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTkyLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTk5MzpzdGF0aWMgaW5saW5lIGludCBicl9tc3RfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTk0LVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcpXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk5OC1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE5OTk6c3RhdGljIGlubGluZSBpbnQgYnJfbXN0X3Byb2Nlc3Moc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTIwMDAtXHRcdFx0XHQgY29uc3Qgc3RydWN0IG5sYXR0ciAqbXN0X2F0dHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE3OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzI0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTVNUIFN0YXRlIENvbmZpZ3VyYXRpb24gUHJvY2VzcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIGBicl9tc3Rfc2V0X3N0YXRlYCBpcyB0aGUgY29yZSBmdW5jdGlvbiB3ZSYjMzk7cmUgaW50ZXJlc3RlZCBpbi4gVGhlIG1vZGlmaWNhdGlvbiBzZWVtcyB0byBjZW50ZXIgdGhlcmUuIFRoZSBjcnVjaWFsIGxpbmsgYXBwZWFycyB0byBiZSBgYnJfbXN0X3Byb2Nlc3NgLCB0aGUgbmV0bGluayBoYW5kbGVyLCB3aGljaCBjYWxscyBgYnJfbXN0X3NldF9zdGF0ZWAgdGhyb3VnaCBgYnJfbXN0X3Byb2Nlc3Nfb25lYC4gVGhpcyBzdWdnZXN0cyBuZXRsaW5rIGlzIGhvdyB0aGUgTVNUIHN0YXRlIGlzIGJlaW5nIHVwZGF0ZWQsIHdoaWNoIGlzIHByZXR0eSBzdGFuZGFyZC4gSW50ZXJlc3RpbmcgdG9vLCBgYnJfc2V0X3N0YXRlYCBpbiBgYnJfc3RwLmNgIGFsc28gY2FsbHMgYGJyX21zdF9zZXRfc3RhdGVgIGJ1dCB3aXRoIHNvbWUgc3BlY2lmaWMgYXJndW1lbnRzOyBwYXJ0aWN1bGFybHkgYDBgIGFuZCBgTlVMTGAuIFRoaXMgbWF5IGJlIGFuIGluaXRpYWxpemF0aW9uIG9yIGRlZmF1bHQgc3RhdGUgc2V0dGVyLgoKTm93LCB0byBnZXQgYSBoYW5kbGUgb24gaG93IE1TVCBlbnRyaWVzIGFyZSBhY3R1YWxseSAqY29uZmlndXJlZCogaW4gdGhlIGZpcnN0IHBsYWNlLCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBgYnJfbXN0X3Byb2Nlc3NgIGFnYWluIGFuZCBhbHNvIGxvb2sgaW50byBgYnJfYWZzcGVjYC4gVGhleSYjMzk7cmUgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciB0aGUgaW5pdGlhbCBzZXR1cCBvZiB0aGVzZSBlbnRyaWVzLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRob3NlIG1vZHVsZXMgYW5kIHNlZSBob3cgdGhpcyBhbGwgZml0cyB0b2dldGhlciB0byBjb250cm9sIHRoZSBNU1Qgc3RhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE3OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9tc3QuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzMwOlx0XHR9XG4gMzMxOlx0XG4gMzMyOlx0XHRtc3RpID0gbmxhX2dldF91MTYodGJbSUZMQV9CUklER0VfTVNUX0VOVFJZX01TVEldKTtcbiAzMzM6XHRcdHN0YXRlID0gbmxhX2dldF91OCh0YltJRkxBX0JSSURHRV9NU1RfRU5UUllfU1RBVEVdKTtcbiAzMzQ6XHRcbiAzMzU6XHRcdHJldHVybiBicl9tc3Rfc2V0X3N0YXRlKHAsIG1zdGksIHN0YXRlLCBleHRhY2spO1xuIDMzNjpcdH1cbiAzMzc6XHRcbiAzMzg6XHRpbnQgYnJfbXN0X3Byb2Nlc3Moc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgY29uc3Qgc3RydWN0IG5sYXR0ciAqbXN0X2F0dHIsXG4gMzM5Olx0XHRcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiAzNDA6XHR7XG4gMzQxOlx0XHRzdHJ1Y3QgbmxhdHRyICphdHRyO1xuIDM0MjpcdFx0aW50IGVyciwgbXN0cyA9IDA7XG4gMzQzOlx0XHRpbnQgcmVtO1xuIDM0NDpcdFxuIDM0NTpcdFx0aWYgKCFicl9vcHRfZ2V0KHAtXHUwMDNlYnIsIEJST1BUX01TVF9FTkFCTEVEKSkge1xuIDM0NjpcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtDYW4mIzM5O3QgbW9kaWZ5IE1TVCBzdGF0ZSB3aGVuIE1TVCBpcyBkaXNhYmxlZFwmIzM0Oyk7XG4gMzQ3Olx0XHRcdHJldHVybiAtRUJVU1k7XG4gMzQ4Olx0XHR9XG4gMzQ5Olx0XG4gMzUwOlx0XHRubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIG1zdF9hdHRyLCByZW0pIHtcbiAzNTE6XHRcdFx0c3dpdGNoIChubGFfdHlwZShhdHRyKSkge1xuIDM1MjpcdFx0XHRjYXNlIElGTEFfQlJJREdFX01TVF9FTlRSWTpcbiAzNTM6XHRcdFx0XHRlcnIgPSBicl9tc3RfcHJvY2Vzc19vbmUocCwgYXR0ciwgZXh0YWNrKTtcbiAzNTQ6XHRcdFx0XHRicmVhaztcbiAzNTU6XHRcdFx0ZGVmYXVsdDpcbiAzNTY6XHRcdFx0XHRjb250aW51ZTtcbiAzNTc6XHRcdFx0fVxuIDM1ODpcdFxuIDM1OTpcdFx0XHRtc3RzJiM0MzsmIzQzOztcbiAzNjA6XHRcdFx0aWYgKGVycilcbiAzNjE6XHRcdFx0XHRicmVhaztcbiAzNjI6XHRcdH1cbiAzNjM6XHRcbiAzNjQ6XHRcdGlmICghbXN0cykge1xuIDM2NTpcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtGb3VuZCBubyBNU1QgZW50cmllcyB0byBwcm9jZXNzXCYjMzQ7KTtcbiAzNjY6XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiAzNjc6XHRcdH1cbiAzNjg6XHRcbiAzNjk6XHRcdHJldHVybiBlcnI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE3OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4Njk1CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBBU1NFUlRfUlROTCgpYCBNYWNybyoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgQVNTRVJUX1JUTkwoKWAgbWFjcm8gaXMgZG9pbmcuIExldCYjMzk7cyBkaWcgaW50byBpdHMgZGVmaW5pdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQmIzM5O3MgdXNlZCBhbmQgd2hhdCBzb3J0IG9mIGNvbmRpdGlvbnMgaXQmIzM5O3MgZGVzaWduZWQgdG8gY2hlY2suIElzIGl0IHJlbGF0ZWQgdG8gZW5zdXJpbmcgYSBwYXJ0aWN1bGFyIFJUTkwgc2VxdWVuY2Ugb3Igc3RhdGU/IElzIGl0IHVzZWQgZm9yIGRlYnVnZ2luZywgb3IgaXMgaXQgZGlyZWN0bHkgdGllZCB0byBjcml0aWNhbCBydW50aW1lIGxvZ2ljPyBLbm93aW5nIGl0cyBleGFjdCBpbXBsZW1lbnRhdGlvbiBpcyB0aGUgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGNvZGViYXNlLiBXaGF0IGRlcGVuZGVuY2llcyBkb2VzIGl0IHJlbHkgb24/IEFyZSB0aGVyZSBhbnkgc3VidGxlIHNpZGUgZWZmZWN0cyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gSSBuZWVkIHRvIGJ1aWxkIGEgbWVudGFsIG1vZGVsIG9mIHRoaXMgbWFjcm8gYW5kIGhvdyBpdCBvcGVyYXRlcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNzoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIEFTU0VSVF9SVE5MJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmg9NTM9ZXh0ZXJuIHN0cnVjdCByd19zZW1hcGhvcmUgbmV0X3J3c2VtO1xuaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaC01NC1cbmluY2x1ZGUvbGludXgvcnRuZXRsaW5rLmg6NTU6I2RlZmluZSBBU1NFUlRfUlROTCgpIFxcXG5pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oLTU2LVx0V0FSTl9PTkNFKCFydG5sX2lzX2xvY2tlZCgpLCBcXFxuLS1cbmluY2x1ZGUvbGludXgvcnRuZXRsaW5rLmg9MTA5PWJvb2wgcnRubF9uZXRfaXNfbG9ja2VkKHN0cnVjdCBuZXQgKm5ldCk7XG5pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oLTExMC1cbmluY2x1ZGUvbGludXgvcnRuZXRsaW5rLmg6MTExOiNkZWZpbmUgQVNTRVJUX1JUTkxfTkVUKG5ldClcdFx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaC0xMTItXHRXQVJOX09OQ0UoIXJ0bmxfbmV0X2lzX2xvY2tlZChuZXQpLFx0XHRcdFx0XFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTc6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxMDkKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA3MzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSVE5MIExvY2sgQXNzZXJ0aW9uIGluIEJyaWRnZSBNU1QgU3RhdGUgU2V0dGluZyoqCgpPa2F5LCBzbyBgQVNTRVJUX1JUTkwoKWAgaXMganVzdCBhIGBXQVJOX09OQ0VgIG1hY3JvLCB0aGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZC4gSXQmIzM5O3MgbWVhbnQgdG8gZmxhZyBpZiB0aGUgUlROTCAoUm91dGluZyBUYWJsZSBOZXh0IExldmVsKSBsb2NrIGlzbiYjMzk7dCBoZWxkIHdoZW4gaXQmIzM5O3MgY2FsbGVkLiBUaGlzIGFzc2VydGlvbiB3YXMgYWRkZWQgd2l0aGluIHRoZSBgYnJfbXN0X3NldF9zdGF0ZWAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBpZiAobXN0aSlgIGJyYW5jaC4gVGhlIHByaW1hcnkgcXVlc3Rpb24gYmVjb21lczogKnVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcyBpcyBgYnJfbXN0X3NldF9zdGF0ZWAgaW52b2tlZCBhbmQgd2h5IGlzIGhvbGRpbmcgdGhlIFJUTkwgbG9jayBjcml0aWNhbCB0aGVyZT8qCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGNhbGxlcnMuIEkgcmVtZW1iZXI6CgoxLiAgYGJyX21zdF9wcm9jZXNzX29uZWAsIHRoZW4gdGhyb3VnaCBgYnJfbXN0X3Byb2Nlc3NgLCB0aGVuIGBicl9hZnNwZWNgLCBhbmQgZmluYWxseSBgYnJfc2V0bGlua2AuICBDcnVjaWFsbHksIGBicl9zZXRsaW5rYCAqZG9lcyogaG9sZCB0aGUgUlROTCBsb2NrLgoyLiAgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgdGhlICpvbmx5KiBjYWxsIHBhdGguCiAgICBBIHF1aWNrIHNjYW4gb2YgdGhlIGBicl9tc3Rfc2V0X3N0YXRlYCBmdW5jdGlvbiBpdHNlbGYgcmV2ZWFscyBhbm90aGVyIGNhbGwgaW4gYGJyX3NldF9zdGF0ZWAuIEhvd2V2ZXIsIHRoaXMgY2FsbCBwYXNzZXMgYG1zdGkgPSAwYCwgc28gdGhlIGFzc2VydGlvbiBpbiB0aGUgYGlmYCBzdGF0ZW1lbnQgd29uJiMzOTt0IHRyaWdnZXIuCgpTaW5jZSBgYnJfbXN0X3NldF9zdGF0ZWAgaXMgbm9uLXN0YXRpYyBhbmQgZGVjbGFyZWQgaW4gYGJyX3ByaXZhdGUuaGAsIEkgbmVlZCB0byBrZWVwIGFuIG9wZW4gbWluZCBmb3IgYWRkaXRpb25hbCBjYWxsIHNpdGVzIHRoYXQgbWlnaHQgZXhpc3Qgb3V0c2lkZSBvZiB0aGUgdXN1YWwgc3VzcGVjdHMuIEkgbXVzdCBjb25zaWRlciB3aGF0IGVsc2UgbWlnaHQgY2FsbCB0aGlzIGZ1bmN0aW9uLgoKSSBhbHNvIHJlbWVtYmVyIGEga2V5IGNoYW5nZSByZWxhdGVkIHRvIGxvY2tpbmcuIFByZXZpb3VzbHksIGFuIGByY3VfcmVhZF9sb2NrKClgIHdhcyBoZWxkIGFjcm9zcyB0aGUgY2FsbCB0byBgc3dpdGNoZGV2X3BvcnRfYXR0cl9zZXQoKWAsIGEgYmxvY2tpbmcgbm90aWZpZXIgdGhhdCBjYXVzZWQgYSBidWcgKGEgc2xlZXBpbmcgZnVuY3Rpb24gYmVpbmcgY2FsbGVkIGZyb20gYW4gaW52YWxpZCBjb250ZXh0KS4gVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQuIE5vdywgdGhlIFJDVSBsb2NrIGlzIG9ubHkgaGVsZCAqYWZ0ZXIqIHRoZSBgc3dpdGNoZGV2YCBjYWxsLiBUaGlzIHJlZmFjdG9yaW5nIGlzIGltcG9ydGFudCBjb250ZXh0LiBUaGUgYEFTU0VSVF9SVE5MKClgIGlzIHNwZWNpZmljYWxseSB0aGVyZSB0byBlbnN1cmUgdGhhdCBmb3IgTVNUIHN0YXRlIHNldHRpbmcgKHdoZW4gYG1zdGkgIT0gMGApIHRoZSBSVE5MIGxvY2sgaXMgcHJvcGVybHkgaGVsZC4gVGhpcyBpcyBjcml0aWNhbCBiZWNhdXNlIGlmIHRoaXMgbG9jayBpc24mIzM5O3QgaGVsZCwgdGhlbiB0aGVyZSBpcyBhIHJpc2sgb2YgYSByYWNlIGNvbmRpdGlvbjogd2hlcmUgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBicmlkZ2UgY2hhbmdlcyBkdWUgdG8gY2hhbmdlcyB0byBgdmdgLCBvciBpdCBiZWluZyBmcmVlZCwgYmV0d2VlbiB0aGUgc3RhcnQgb2YgdGhlIGZ1bmN0aW9uIGFuZCB0aGUgcG9pbnQgdGhhdCBgbmJwX3ZsYW5fZ3JvdXBfcmN1KHApYCBpcyBjYWxsZWQuICBPciBpZiBzd2l0Y2hkZXYgZmFpbHMuCgpTbywgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgc2NlbmFyaW9zOgoqICAgUmFjZSBjb25kaXRpb24gYmV0d2VlbiBgdmdgIGNoYW5nZS9mcmVlIGFuZCBgbmJwX3ZsYW5fZ3JvdXBfcmN1KHApYC4KKiAgIFJUTkwgbG9jayAqbm90KiBiZWluZyBoZWxkIHdoZW4gYG1zdGkgIT0gMGAuCiogICBTd2l0Y2hkZXYgZmFpbHVyZXMuCgpOZXh0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIFRoZSBuZWNlc3NhcnkgY29uZmlncyBhcmU6IGBDT05GSUdfQlJJREdFYCwgYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgLCBgQ09ORklHX1ZMQU5fODAyMVFgLCBhbmQgYENPTkZJR19ORVRfU1dJVENIREVWYC4gSSB3aWxsIGNoZWNrIGlmIGVpdGhlciBgQlJJREdFYCBvciBgQlJJREdFX1ZMQU5fRklMVEVSSU5HYCBkaXJlY3RseSBzZWxlY3Qgb3IgZGVwZW5kIG9uIGBORVRfU1dJVENIREVWYCBpbiBgbmV0L2JyaWRnZS9LY29uZmlnYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTc6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U1dJVENIREVWJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL01ha2VmaWxlPTIzPWJyaWRnZS0kKENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkcpICYjNDM7PSBicl92bGFuLm8gYnJfdmxhbl90dW5uZWwubyBicl92bGFuX29wdGlvbnMubyBicl9tc3Qub1xubmV0L2JyaWRnZS9NYWtlZmlsZS0yNC1cbm5ldC9icmlkZ2UvTWFrZWZpbGU6MjU6YnJpZGdlLSQoQ09ORklHX05FVF9TV0lUQ0hERVYpICYjNDM7PSBicl9zd2l0Y2hkZXYub1xubmV0L2JyaWRnZS9NYWtlZmlsZS0yNi1cbi0tXG5uZXQvYnJpZGdlL2JyLmM9MTYyPXN0YXRpYyBpbnQgYnJfc3dpdGNoZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLFxuLS1cbm5ldC9icmlkZ2UvYnIuYy0xNzctXHRzd2l0Y2ggKGV2ZW50KSB7XG5uZXQvYnJpZGdlL2JyLmM6MTc4Olx0Y2FzZSBTV0lUQ0hERVZfRkRCX0FERF9UT19CUklER0U6XG5uZXQvYnJpZGdlL2JyLmMtMTc5LVx0XHRmZGJfaW5mbyA9IHB0cjtcbi0tXG5uZXQvYnJpZGdlL2JyLmMtMTg5LVx0XHRicmVhaztcbm5ldC9icmlkZ2UvYnIuYzoxOTA6XHRjYXNlIFNXSVRDSERFVl9GREJfREVMX1RPX0JSSURHRTpcbm5ldC9icmlkZ2UvYnIuYy0xOTEtXHRcdGZkYl9pbmZvID0gcHRyO1xuLS1cbm5ldC9icmlkZ2UvYnIuYy0xOTYtXHRcdGJyZWFrO1xubmV0L2JyaWRnZS9ici5jOjE5NzpcdGNhc2UgU1dJVENIREVWX0ZEQl9PRkZMT0FERUQ6XG5uZXQvYnJpZGdlL2JyLmMtMTk4LVx0XHRmZGJfaW5mbyA9IHB0cjtcbi0tXG5uZXQvYnJpZGdlL2JyLmMtMjAxLVx0XHRicmVhaztcbm5ldC9icmlkZ2UvYnIuYzoyMDI6XHRjYXNlIFNXSVRDSERFVl9GREJfRkxVU0hfVE9fQlJJREdFOlxubmV0L2JyaWRnZS9ici5jLTIwMy1cdFx0ZmRiX2luZm8gPSBwdHI7XG4tLVxubmV0L2JyaWRnZS9ici5jPTIxOD1zdGF0aWMgaW50IGJyX3N3aXRjaGRldl9ibG9ja2luZ19ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuLS1cbm5ldC9icmlkZ2UvYnIuYy0yMzItXHRzd2l0Y2ggKGV2ZW50KSB7XG5uZXQvYnJpZGdlL2JyLmM6MjMzOlx0Y2FzZSBTV0lUQ0hERVZfQlJQT1JUX09GRkxPQURFRDpcbm5ldC9icmlkZ2UvYnIuYy0yMzQtXHRcdGJycG9ydF9pbmZvID0gcHRyO1xuLS1cbm5ldC9icmlkZ2UvYnIuYy0yNDEtXHRcdGJyZWFrO1xubmV0L2JyaWRnZS9ici5jOjI0MjpcdGNhc2UgU1dJVENIREVWX0JSUE9SVF9VTk9GRkxPQURFRDpcbm5ldC9icmlkZ2UvYnIuYy0yNDMtXHRcdGJycG9ydF9pbmZvID0gcHRyO1xuLS1cbm5ldC9icmlkZ2UvYnIuYy0yNDgtXHRcdGJyZWFrO1xubmV0L2JyaWRnZS9ici5jOjI0OTpcdGNhc2UgU1dJVENIREVWX0JSUE9SVF9SRVBMQVk6XG5uZXQvYnJpZGdlL2JyLmMtMjUwLVx0XHRicnBvcnRfaW5mbyA9IHB0cjtcbi0tXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYz0zMT1pbnQgYnJfbXJwX3N3aXRjaGRldl9hZGQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwICptcnApXG4tLVxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtMzQtXHRcdC5vYmoub3JpZ19kZXYgPSBici1cdTAwM2VkZXYsXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYzozNTpcdFx0Lm9iai5pZCA9IFNXSVRDSERFVl9PQkpfSURfTVJQLFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtMzYtXHRcdC5wX3BvcnQgPSBydG5sX2RlcmVmZXJlbmNlKG1ycC1cdTAwM2VwX3BvcnQpLVx1MDAzZWRldixcbi0tXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYy00MS1cbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jOjQyOlx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ORVRfU1dJVENIREVWKSlcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTQzLVx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYz00OD1pbnQgYnJfbXJwX3N3aXRjaGRldl9kZWwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwICptcnApXG4tLVxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtNTEtXHRcdC5vYmoub3JpZ19kZXYgPSBici1cdTAwM2VkZXYsXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYzo1MjpcdFx0Lm9iai5pZCA9IFNXSVRDSERFVl9PQkpfSURfTVJQLFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtNTMtXHRcdC5wX3BvcnQgPSBOVUxMLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTU3LVxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmM6NTg6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX05FVF9TV0lUQ0hERVYpKVxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtNTktXHRcdHJldHVybiAwO1xuLS1cbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jPTY1PWJyX21ycF9zd2l0Y2hkZXZfc2V0X3Jpbmdfcm9sZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9tcnAgKm1ycCxcbi0tXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYy02OS1cdFx0Lm9iai5vcmlnX2RldiA9IGJyLVx1MDAzZWRldixcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jOjcwOlx0XHQub2JqLmlkID0gU1dJVENIREVWX09CSl9JRF9SSU5HX1JPTEVfTVJQLFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtNzEtXHRcdC5yaW5nX3JvbGUgPSByb2xlLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTc3LVxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmM6Nzg6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX05FVF9TV0lUQ0hERVYpKVxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtNzktXHRcdHJldHVybiBCUl9NUlBfU1c7XG4tLVxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmM9MTAyPWJyX21ycF9zd2l0Y2hkZXZfc2VuZF9yaW5nX3Rlc3Qoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwICptcnAsXG4tLVxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtMTA3LVx0XHQub2JqLm9yaWdfZGV2ID0gYnItXHUwMDNlZGV2LFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmM6MTA4Olx0XHQub2JqLmlkID0gU1dJVENIREVWX09CSl9JRF9SSU5HX1RFU1RfTVJQLFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtMTA5LVx0XHQuaW50ZXJ2YWwgPSBpbnRlcnZhbCxcbi0tXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYy0xMTUtXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYzoxMTY6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX05FVF9TV0lUQ0hERVYpKVxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtMTE3LVx0XHRyZXR1cm4gQlJfTVJQX1NXO1xuLS1cbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jPTEyMj1pbnQgYnJfbXJwX3N3aXRjaGRldl9zZXRfcmluZ19zdGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtMTI3LVx0XHQub2JqLm9yaWdfZGV2ID0gYnItXHUwMDNlZGV2LFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmM6MTI4Olx0XHQub2JqLmlkID0gU1dJVENIREVWX09CSl9JRF9SSU5HX1NUQVRFX01SUCxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTEyOS1cdFx0LnJpbmdfc3RhdGUgPSBzdGF0ZSxcbi0tXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYy0xMzItXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYzoxMzM6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX05FVF9TV0lUQ0hERVYpKVxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtMTM0LVx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYz0xNDA9YnJfbXJwX3N3aXRjaGRldl9zZXRfaW5fcm9sZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9tcnAgKm1ycCxcbi0tXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYy0xNDUtXHRcdC5vYmoub3JpZ19kZXYgPSBici1cdTAwM2VkZXYsXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYzoxNDY6XHRcdC5vYmouaWQgPSBTV0lUQ0hERVZfT0JKX0lEX0lOX1JPTEVfTVJQLFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtMTQ3LVx0XHQuaW5fcm9sZSA9IHJvbGUsXG4tLVxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtMTU1LVxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmM6MTU2Olx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ORVRfU1dJVENIREVWKSlcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTE1Ny1cdFx0cmV0dXJuIEJSX01SUF9TVztcbi0tXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYz0xNzk9aW50IGJyX21ycF9zd2l0Y2hkZXZfc2V0X2luX3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX21ycCAqbXJwLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTE4My1cdFx0Lm9iai5vcmlnX2RldiA9IGJyLVx1MDAzZWRldixcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jOjE4NDpcdFx0Lm9iai5pZCA9IFNXSVRDSERFVl9PQkpfSURfSU5fU1RBVEVfTVJQLFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtMTg1LVx0XHQuaW5fc3RhdGUgPSBzdGF0ZSxcbi0tXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYy0xODgtXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYzoxODk6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX05FVF9TV0lUQ0hERVYpKVxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtMTkwLVx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYz0xOTY9YnJfbXJwX3N3aXRjaGRldl9zZW5kX2luX3Rlc3Qoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwICptcnAsXG4tLVxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtMjAwLVx0XHQub2JqLm9yaWdfZGV2ID0gYnItXHUwMDNlZGV2LFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmM6MjAxOlx0XHQub2JqLmlkID0gU1dJVENIREVWX09CSl9JRF9JTl9URVNUX01SUCxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTIwMi1cdFx0LmludGVydmFsID0gaW50ZXJ2YWwsXG4tLVxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtMjA3LVxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmM6MjA4Olx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ORVRfU1dJVENIREVWKSlcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTIwOS1cdFx0cmV0dXJuIEJSX01SUF9TVztcbi0tXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYz0yMTQ9aW50IGJyX21ycF9wb3J0X3N3aXRjaGRldl9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTMyIHN0YXRlKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTIxNy1cdFx0Lm9yaWdfZGV2ID0gcC1cdTAwM2VkZXYsXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYzoyMTg6XHRcdC5pZCA9IFNXSVRDSERFVl9BVFRSX0lEX1BPUlRfU1RQX1NUQVRFLFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtMjE5LVx0XHQudS5zdHBfc3RhdGUgPSBzdGF0ZSxcbi0tXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYy0yMjEtXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYzoyMjI6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX05FVF9TV0lUQ0hERVYpKVxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtMjIzLVx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYz0yMjg9aW50IGJyX21ycF9wb3J0X3N3aXRjaGRldl9zZXRfcm9sZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTIzMi1cdFx0Lm9yaWdfZGV2ID0gcC1cdTAwM2VkZXYsXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYzoyMzM6XHRcdC5pZCA9IFNXSVRDSERFVl9BVFRSX0lEX01SUF9QT1JUX1JPTEUsXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYy0yMzQtXHRcdC51Lm1ycF9wb3J0X3JvbGUgPSByb2xlLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTIzNi1cbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jOjIzNzpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfTkVUX1NXSVRDSERFVikpXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYy0yMzgtXHRcdHJldHVybiAwO1xuLS1cbm5ldC9icmlkZ2UvYnJfbXN0LmM9OTU9aW50IGJyX21zdF9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IG1zdGksIHU4IHN0YXRlLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXN0LmMtOTgtXHRzdHJ1Y3Qgc3dpdGNoZGV2X2F0dHIgYXR0ciA9IHtcbm5ldC9icmlkZ2UvYnJfbXN0LmM6OTk6XHRcdC5pZCA9IFNXSVRDSERFVl9BVFRSX0lEX1BPUlRfTVNUX1NUQVRFLFxubmV0L2JyaWRnZS9icl9tc3QuYy0xMDAtXHRcdC5vcmlnX2RldiA9IHAtXHUwMDNlZGV2LFxuLS1cbm5ldC9icmlkZ2UvYnJfbXN0LmMtMTEwLVx0LyogTVNUSSAwIChDU1QpIHN0YXRlIGNoYW5nZXMgYXJlIG5vdGlmaWVkIHZpYSB0aGUgcmVndWxhclxubmV0L2JyaWRnZS9icl9tc3QuYzoxMTE6XHQgKiBTV0lUQ0hERVZfQVRUUl9JRF9QT1JUX1NUUF9TVEFURS4gQWxsIG90aGVyIE1TVElzIGFyZSBoYW5kbGVkIHZpYVxubmV0L2JyaWRnZS9icl9tc3QuYy0xMTItXHQgKiBuZXRsaW5rIHdpdGggUlROTCBoZWxkXG4tLVxubmV0L2JyaWRnZS9icl9tc3QuYz0xNjE9aW50IGJyX21zdF92bGFuX3NldF9tc3RpKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKm12LCB1MTYgbXN0aSlcbi0tXG5uZXQvYnJpZGdlL2JyX21zdC5jLTE2My1cdHN0cnVjdCBzd2l0Y2hkZXZfYXR0ciBhdHRyID0ge1xubmV0L2JyaWRnZS9icl9tc3QuYzoxNjQ6XHRcdC5pZCA9IFNXSVRDSERFVl9BVFRSX0lEX1ZMQU5fTVNUSSxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMTY1LVx0XHQub3JpZ19kZXYgPSBtdi1cdTAwM2Vici1cdTAwM2VkZXYsXG4tLVxubmV0L2JyaWRnZS9icl9tc3QuYz0yMDc9aW50IGJyX21zdF9zZXRfZW5hYmxlZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXG4tLVxubmV0L2JyaWRnZS9icl9tc3QuYy0yMTAtXHRzdHJ1Y3Qgc3dpdGNoZGV2X2F0dHIgYXR0ciA9IHtcbm5ldC9icmlkZ2UvYnJfbXN0LmM6MjExOlx0XHQuaWQgPSBTV0lUQ0hERVZfQVRUUl9JRF9CUklER0VfTVNULFxubmV0L2JyaWRnZS9icl9tc3QuYy0yMTItXHRcdC5vcmlnX2RldiA9IGJyLVx1MDAzZWRldixcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTE2ODk9c3RhdGljIHZvaWQgYnJfbWNfcm91dGVyX3N0YXRlX2NoYW5nZShzdHJ1Y3QgbmV0X2JyaWRnZSAqcCxcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTE2OTMtXHRcdC5vcmlnX2RldiA9IHAtXHUwMDNlZGV2LFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoxNjk0Olx0XHQuaWQgPSBTV0lUQ0hERVZfQVRUUl9JRF9CUklER0VfTVJPVVRFUixcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MTY5NTpcdFx0LmZsYWdzID0gU1dJVENIREVWX0ZfREVGRVIsXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTE2OTYtXHRcdC51Lm1yb3V0ZXIgPSBpc19tY19yb3V0ZXIsXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMDQ2PXN0YXRpYyBpbnQgYnJfbWNfZGlzYWJsZWRfdXBkYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdmFsdWUsXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMDUwLVx0XHQub3JpZ19kZXYgPSBkZXYsXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIwNTE6XHRcdC5pZCA9IFNXSVRDSERFVl9BVFRSX0lEX0JSSURHRV9NQ19ESVNBQkxFRCxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjA1MjpcdFx0LmZsYWdzID0gU1dJVENIREVWX0ZfREVGRVIsXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIwNTMtXHRcdC51Lm1jX2Rpc2FibGVkID0gIXZhbHVlLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MzM0Mj1zdGF0aWMgdm9pZCBicl9wb3J0X21jX3JvdXRlcl9zdGF0ZV9jaGFuZ2Uoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTMzNDYtXHRcdC5vcmlnX2RldiA9IHAtXHUwMDNlZGV2LFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzozMzQ3Olx0XHQuaWQgPSBTV0lUQ0hERVZfQVRUUl9JRF9QT1JUX01ST1VURVIsXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjMzNDg6XHRcdC5mbGFncyA9IFNXSVRDSERFVl9GX0RFRkVSLFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zMzQ5LVx0XHQudS5tcm91dGVyID0gaXNfbWNfcm91dGVyLFxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE4Mz1lbnVtIHtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE4NC1cdEJSX1ZMRkxBR19QRVJfUE9SVF9TVEFUUyA9IEJJVCgwKSxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE4NTpcdEJSX1ZMRkxBR19BRERFRF9CWV9TV0lUQ0hERVYgPSBCSVQoMSksXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xODYtXHRCUl9WTEZMQUdfTUNBU1RfRU5BQkxFRCA9IEJJVCgyKSxcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xODgtXHRCUl9WTEZMQUdfTkVJR0hfU1VQUFJFU1NfRU5BQkxFRCA9IEJJVCg0KSxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE4OTpcdEJSX1ZMRkxBR19UQUdHSU5HX0JZX1NXSVRDSERFViA9IEJJVCg1KSxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5MC1cdEJSX1ZMRkxBR19ORUlHSF9GT1JXQVJEX0dSQVRfRU5BQkxFRCA9IEJJVCg2KSxcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0zOTI9c3RydWN0IG5ldF9icmlkZ2VfcG9ydCB7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNDQxLSNlbmRpZlxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6NDQyOiNpZmRlZiBDT05GSUdfTkVUX1NXSVRDSERFVlxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNDQzLVx0LyogSWRlbnRpZmllciB1c2VkIHRvIGdyb3VwIHBvcnRzIHRoYXQgc2hhcmUgdGhlIHNhbWUgc3dpdGNoZGV2XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9NTAyPXN0cnVjdCBuZXRfYnJpZGdlIHtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC01NzktXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo1ODA6I2lmZGVmIENPTkZJR19ORVRfU1dJVENIREVWXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC01ODEtXHQvKiBDb3VudGVyIHVzZWQgdG8gbWFrZSBzdXJlIHRoYXQgaGFyZHdhcmUgZG9tYWlucyBnZXQgdW5pcXVlXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9NTk4PXN0cnVjdCBicl9pbnB1dF9za2JfY2Ige1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTYxNi1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjYxNzojaWZkZWYgQ09ORklHX05FVF9TV0lUQ0hERVZcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTYxOC1cdC8qIFNldCBpZiBUWCBkYXRhIHBsYW5lIG9mZmxvYWRpbmcgaXMgdXNlZCB0b3dhcmRzIGF0IGxlYXN0IG9uZVxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTIyMDI9c3RhdGljIGlubGluZSB2b2lkIGJyX3N5c2ZzX2RlbGJyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsgcmV0dXJuOyB9XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMjIwNS0vKiBicl9zd2l0Y2hkZXYuYyAqL1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MjIwNjojaWZkZWYgQ09ORklHX05FVF9TV0lUQ0hERVZcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTIyMDctaW50IGJyX3N3aXRjaGRldl9wb3J0X29mZmxvYWQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0yMzYyPXN0YXRpYyBpbmxpbmUgdm9pZCBicl9zd2l0Y2hkZXZfaW5pdChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMjM2NS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjIzNjY6I2VuZGlmIC8qIENPTkZJR19ORVRfU1dJVENIREVWICovXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0yMzY3LVxuLS1cbm5ldC9icmlkZ2UvYnJfc3RwLmM9Mjk9dm9pZCBicl9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdW5zaWduZWQgaW50IHN0YXRlKVxuLS1cbm5ldC9icmlkZ2UvYnJfc3RwLmMtMzItXHRcdC5vcmlnX2RldiA9IHAtXHUwMDNlZGV2LFxubmV0L2JyaWRnZS9icl9zdHAuYzozMzpcdFx0LmlkID0gU1dJVENIREVWX0FUVFJfSURfUE9SVF9TVFBfU1RBVEUsXG5uZXQvYnJpZGdlL2JyX3N0cC5jOjM0Olx0XHQuZmxhZ3MgPSBTV0lUQ0hERVZfRl9ERUZFUixcbm5ldC9icmlkZ2UvYnJfc3RwLmMtMzUtXHRcdC51LnN0cF9zdGF0ZSA9IHN0YXRlLFxuLS1cbm5ldC9icmlkZ2UvYnJfc3RwLmM9NjE2PWludCBfX3NldF9hZ2VpbmdfdGltZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIHQpXG4tLVxubmV0L2JyaWRnZS9icl9zdHAuYy02MTktXHRcdC5vcmlnX2RldiA9IGRldixcbm5ldC9icmlkZ2UvYnJfc3RwLmM6NjIwOlx0XHQuaWQgPSBTV0lUQ0hERVZfQVRUUl9JRF9CUklER0VfQUdFSU5HX1RJTUUsXG5uZXQvYnJpZGdlL2JyX3N0cC5jOjYyMTpcdFx0LmZsYWdzID0gU1dJVENIREVWX0ZfU0tJUF9FT1BOT1RTVVBQIHwgU1dJVENIREVWX0ZfREVGRVIsXG5uZXQvYnJpZGdlL2JyX3N0cC5jLTYyMi1cdFx0LnUuYWdlaW5nX3RpbWUgPSBqaWZmaWVzX3RvX2Nsb2NrX3QodCksXG4tLVxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYz04MT1pbnQgYnJfc3dpdGNoZGV2X3NldF9wb3J0X2ZsYWcoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcbi0tXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTk3LVxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYzo5ODpcdGF0dHIuaWQgPSBTV0lUQ0hERVZfQVRUUl9JRF9QT1JUX1BSRV9CUklER0VfRkxBR1M7XG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTk5LVx0YXR0ci51LmJycG9ydF9mbGFncy52YWwgPSBmbGFncztcbi0tXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTEwMS1cbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM6MTAyOlx0ZXJyID0gY2FsbF9zd2l0Y2hkZXZfbm90aWZpZXJzKFNXSVRDSERFVl9QT1JUX0FUVFJfU0VULCBwLVx1MDAzZWRldixcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtMTAzLVx0XHRcdFx0ICAgICAgIFx1MDAyNmluZm8uaW5mbywgZXh0YWNrKTtcbi0tXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTExMy1cbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM6MTE0Olx0YXR0ci5pZCA9IFNXSVRDSERFVl9BVFRSX0lEX1BPUlRfQlJJREdFX0ZMQUdTO1xubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYzoxMTU6XHRhdHRyLmZsYWdzID0gU1dJVENIREVWX0ZfREVGRVI7XG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTExNi1cbi0tXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jPTE0NT1icl9zd2l0Y2hkZXZfZmRiX25vdGlmeShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy0xNjctXHRjYXNlIFJUTV9ERUxORUlHSDpcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM6MTY4Olx0XHRjYWxsX3N3aXRjaGRldl9ub3RpZmllcnMoU1dJVENIREVWX0ZEQl9ERUxfVE9fREVWSUNFLFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy0xNjktXHRcdFx0XHRcdCBpdGVtLmluZm8uZGV2LCBcdTAwMjZpdGVtLmluZm8sIE5VTEwpO1xuLS1cbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtMTcxLVx0Y2FzZSBSVE1fTkVXTkVJR0g6XG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jOjE3MjpcdFx0Y2FsbF9zd2l0Y2hkZXZfbm90aWZpZXJzKFNXSVRDSERFVl9GREJfQUREX1RPX0RFVklDRSxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtMTczLVx0XHRcdFx0XHQgaXRlbS5pbmZvLmRldiwgXHUwMDI2aXRlbS5pbmZvLCBOVUxMKTtcbi0tXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jPTE3OD1pbnQgYnJfc3dpdGNoZGV2X3BvcnRfdmxhbl9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHZpZCwgdTE2IGZsYWdzLFxuLS1cbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtMTgyLVx0XHQub2JqLm9yaWdfZGV2ID0gZGV2LFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYzoxODM6XHRcdC5vYmouaWQgPSBTV0lUQ0hERVZfT0JKX0lEX1BPUlRfVkxBTixcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtMTg0LVx0XHQuZmxhZ3MgPSBmbGFncyxcbi0tXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jPTE5Mj1pbnQgYnJfc3dpdGNoZGV2X3BvcnRfdmxhbl9ub19mb3JlaWduX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgdmlkLCB1MTYgZmxhZ3MsXG4tLVxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy0xOTYtXHRcdC5vYmoub3JpZ19kZXYgPSBkZXYsXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jOjE5NzpcdFx0Lm9iai5pZCA9IFNXSVRDSERFVl9PQkpfSURfUE9SVF9WTEFOLFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYzoxOTg6XHRcdC5vYmouZmxhZ3MgPSBTV0lUQ0hERVZfRl9OT19GT1JFSUdOLFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy0xOTktXHRcdC5mbGFncyA9IGZsYWdzLFxuLS1cbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM9MjA3PWludCBicl9zd2l0Y2hkZXZfcG9ydF92bGFuX2RlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgdmlkKVxuLS1cbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtMjEwLVx0XHQub2JqLm9yaWdfZGV2ID0gZGV2LFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYzoyMTE6XHRcdC5vYmouaWQgPSBTV0lUQ0hERVZfT0JKX0lEX1BPUlRfVkxBTixcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtMjEyLVx0XHQudmlkID0gdmlkLFxuLS1cbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM9MzMxPWJyX3N3aXRjaGRldl9mZGJfcmVwbGF5KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpicl9kZXYsIGNvbnN0IHZvaWQgKmN0eCxcbi0tXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTM0Ny1cdGlmIChhZGRpbmcpXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jOjM0ODpcdFx0YWN0aW9uID0gU1dJVENIREVWX0ZEQl9BRERfVE9fREVWSUNFO1xubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy0zNDktXHRlbHNlXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jOjM1MDpcdFx0YWN0aW9uID0gU1dJVENIREVWX0ZEQl9ERUxfVE9fREVWSUNFO1xubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy0zNTEtXG4tLVxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYz0zNjU9c3RhdGljIGludCBicl9zd2l0Y2hkZXZfdmxhbl9hdHRyX3JlcGxheShzdHJ1Y3QgbmV0X2RldmljZSAqYnJfZGV2LFxuLS1cbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtMzkxLVx0XHRpZiAodi1cdTAwM2Vtc3RpKSB7XG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jOjM5MjpcdFx0XHRhdHRyLmlkID0gU1dJVENIREVWX0FUVFJfSURfVkxBTl9NU1RJO1xubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy0zOTMtXHRcdFx0YXR0ci51LnZsYW5fbXN0aS52aWQgPSB2LVx1MDAzZXZpZDtcbi0tXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTM5NS1cbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM6Mzk2Olx0XHRcdGVyciA9IG5iLVx1MDAzZW5vdGlmaWVyX2NhbGwobmIsIFNXSVRDSERFVl9QT1JUX0FUVFJfU0VULFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy0zOTctXHRcdFx0XHRcdFx0XHUwMDI2YXR0cl9pbmZvKTtcbi0tXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jPTQyOD1zdGF0aWMgaW50IGJyX3N3aXRjaGRldl92bGFuX3JlcGxheV9ncm91cChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuLS1cbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtNDQ1LVx0XHRcdC5vYmoub3JpZ19kZXYgPSBkZXYsXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jOjQ0NjpcdFx0XHQub2JqLmlkID0gU1dJVENIREVWX09CSl9JRF9QT1JUX1ZMQU4sXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTQ0Ny1cdFx0XHQuZmxhZ3MgPSBicl92bGFuX2ZsYWdzKHYsIHB2aWQpLFxuLS1cbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM9NDYzPXN0YXRpYyBpbnQgYnJfc3dpdGNoZGV2X3ZsYW5fcmVwbGF5KHN0cnVjdCBuZXRfZGV2aWNlICpicl9kZXYsXG4tLVxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy00ODEtXHRpZiAoYWRkaW5nKVxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYzo0ODI6XHRcdGFjdGlvbiA9IFNXSVRDSERFVl9QT1JUX09CSl9BREQ7XG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTQ4My1cdGVsc2Vcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM6NDg0Olx0XHRhY3Rpb24gPSBTV0lUQ0hERVZfUE9SVF9PQkpfREVMO1xubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy00ODUtXG4tLVxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYz01NjQ9c3RhdGljIHZvaWQgYnJfc3dpdGNoZGV2X2hvc3RfbWRiX29uZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtNTcwLVx0XHQub2JqID0ge1xubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYzo1NzE6XHRcdFx0LmlkID0gU1dJVENIREVWX09CSl9JRF9IT1NUX01EQixcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM6NTcyOlx0XHRcdC5mbGFncyA9IFNXSVRDSERFVl9GX0RFRkVSLFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy01NzMtXHRcdFx0Lm9yaWdfZGV2ID0gZGV2LFxuLS1cbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM9NjE5PXN0YXRpYyBpbnQgYnJfc3dpdGNoZGV2X21kYl9xdWV1ZV9vbmUoc3RydWN0IGxpc3RfaGVhZCAqbWRiX2xpc3QsXG4tLVxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy02MzUtXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jOjYzNjpcdGlmIChhY3Rpb24gPT0gU1dJVENIREVWX1BPUlRfT0JKX0FERCBcdTAwMjZcdTAwMjZcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtNjM3LVx0ICAgIHN3aXRjaGRldl9wb3J0X29ial9hY3RfaXNfZGVmZXJyZWQoZGV2LCBhY3Rpb24sIFx1MDAyNm1kYi5vYmopKSB7XG4tLVxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYz02NTc9dm9pZCBicl9zd2l0Y2hkZXZfbWRiX25vdGlmeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtNjY0LVx0XHQub2JqID0ge1xubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYzo2NjU6XHRcdFx0LmlkID0gU1dJVENIREVWX09CSl9JRF9QT1JUX01EQixcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM6NjY2Olx0XHRcdC5mbGFncyA9IFNXSVRDSERFVl9GX0RFRkVSLFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy02NjctXHRcdH0sXG4tLVxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYz02OTY9YnJfc3dpdGNoZGV2X21kYl9yZXBsYXkoc3RydWN0IG5ldF9kZXZpY2UgKmJyX2Rldiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTcyMS1cdGlmIChhZGRpbmcpXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jOjcyMjpcdFx0YWN0aW9uID0gU1dJVENIREVWX1BPUlRfT0JKX0FERDtcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtNzIzLVx0ZWxzZVxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYzo3MjQ6XHRcdGFjdGlvbiA9IFNXSVRDSERFVl9QT1JUX09CSl9ERUw7XG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTcyNS1cbi0tXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTc0MC1cdFx0XHRlcnIgPSBicl9zd2l0Y2hkZXZfbWRiX3F1ZXVlX29uZShcdTAwMjZtZGJfbGlzdCwgZGV2LCBhY3Rpb24sXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jOjc0MTpcdFx0XHRcdFx0XHRcdCBTV0lUQ0hERVZfT0JKX0lEX0hPU1RfTURCLFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy03NDItXHRcdFx0XHRcdFx0XHQgbXAsIGJyX2Rldik7XG4tLVxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy03NTQtXHRcdFx0ZXJyID0gYnJfc3dpdGNoZGV2X21kYl9xdWV1ZV9vbmUoXHUwMDI2bWRiX2xpc3QsIGRldiwgYWN0aW9uLFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYzo3NTU6XHRcdFx0XHRcdFx0XHQgU1dJVENIREVWX09CSl9JRF9QT1JUX01EQixcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtNzU2LVx0XHRcdFx0XHRcdFx0IG1wLCBkZXYpO1xuLS1cbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtNzY3LVx0XHRlcnIgPSBicl9zd2l0Y2hkZXZfbWRiX3JlcGxheV9vbmUobmIsIGRldixcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM6NzY4Olx0XHRcdFx0XHRcdCAgU1dJVENIREVWX09CSl9QT1JUX01EQihvYmopLFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy03NjktXHRcdFx0XHRcdFx0ICBhY3Rpb24sIGN0eCwgZXh0YWNrKTtcbi0tXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTc3OC1cdFx0bGlzdF9kZWwoXHUwMDI2b2JqLVx1MDAzZWxpc3QpO1xubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYzo3Nzk6XHRcdGtmcmVlKFNXSVRDSERFVl9PQkpfUE9SVF9NREIob2JqKSk7XG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTc4MC1cdH1cbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0xMDM9c3RhdGljIGludCBfX3ZsYW5fdmlkX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMTEzLVx0aWYgKGVyciAhPSAtRU9QTk9UU1VQUCkge1xubmV0L2JyaWRnZS9icl92bGFuLmM6MTE0Olx0XHR2LVx1MDAzZXByaXZfZmxhZ3MgfD0gQlJfVkxGTEFHX0FEREVEX0JZX1NXSVRDSERFViB8IEJSX1ZMRkxBR19UQUdHSU5HX0JZX1NXSVRDSERFVjtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTExNS1cdFx0cmV0dXJuIGVycjtcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMTktXHRcdHJldHVybiB2bGFuX3ZpZF9hZGQoZGV2LCBici1cdTAwM2V2bGFuX3Byb3RvLCB2LVx1MDAzZXZpZCk7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoxMjA6XHR2LVx1MDAzZXByaXZfZmxhZ3MgfD0gQlJfVkxGTEFHX0FEREVEX0JZX1NXSVRDSERFVjtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTEyMS1cdHJldHVybiBlcnI7XG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9MTQ5PXN0YXRpYyBpbnQgX192bGFuX3ZpZF9kZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTE1Ny1cdGVyciA9IGJyX3N3aXRjaGRldl9wb3J0X3ZsYW5fZGVsKGRldiwgdi1cdTAwM2V2aWQpO1xubmV0L2JyaWRnZS9icl92bGFuLmM6MTU4Olx0aWYgKCEodi1cdTAwM2Vwcml2X2ZsYWdzIFx1MDAyNiBCUl9WTEZMQUdfQURERURfQllfU1dJVENIREVWKSlcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTE1OS1cdFx0dmxhbl92aWRfZGVsKGRldiwgYnItXHUwMDNldmxhbl9wcm90bywgdi1cdTAwM2V2aWQpO1xuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTg5ND1pbnQgYnJfdmxhbl9maWx0ZXJfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdW5zaWduZWQgbG9uZyB2YWwsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtODk4LVx0XHQub3JpZ19kZXYgPSBici1cdTAwM2VkZXYsXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo4OTk6XHRcdC5pZCA9IFNXSVRDSERFVl9BVFRSX0lEX0JSSURHRV9WTEFOX0ZJTFRFUklORyxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjkwMDpcdFx0LmZsYWdzID0gU1dJVENIREVWX0ZfU0tJUF9FT1BOT1RTVVBQLFxubmV0L2JyaWRnZS9icl92bGFuLmMtOTAxLVx0XHQudS52bGFuX2ZpbHRlcmluZyA9IHZhbCxcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz05NDU9aW50IF9fYnJfdmxhbl9zZXRfcHJvdG8oc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBfX2JlMTYgcHJvdG8sXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtOTQ5LVx0XHQub3JpZ19kZXYgPSBici1cdTAwM2VkZXYsXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo5NTA6XHRcdC5pZCA9IFNXSVRDSERFVl9BVFRSX0lEX0JSSURHRV9WTEFOX1BST1RPQ09MLFxubmV0L2JyaWRnZS9icl92bGFuLmM6OTUxOlx0XHQuZmxhZ3MgPSBTV0lUQ0hERVZfRl9TS0lQX0VPUE5PVFNVUFAsXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy05NTItXHRcdC51LnZsYW5fcHJvdG9jb2wgPSBudG9ocyhwcm90byksXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtOTcwLVx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZsYW4sIFx1MDAyNnZnLVx1MDAzZXZsYW5fbGlzdCwgdmxpc3QpIHtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjk3MTpcdFx0XHRpZiAodmxhbi1cdTAwM2Vwcml2X2ZsYWdzIFx1MDAyNiBCUl9WTEZMQUdfQURERURfQllfU1dJVENIREVWKVxubmV0L2JyaWRnZS9icl92bGFuLmMtOTcyLVx0XHRcdFx0Y29udGludWU7XG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtOTg3LVx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZsYW4sIFx1MDAyNnZnLVx1MDAzZXZsYW5fbGlzdCwgdmxpc3QpIHtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjk4ODpcdFx0XHRpZiAodmxhbi1cdTAwM2Vwcml2X2ZsYWdzIFx1MDAyNiBCUl9WTEZMQUdfQURERURfQllfU1dJVENIREVWKVxubmV0L2JyaWRnZS9icl92bGFuLmMtOTg5LVx0XHRcdFx0Y29udGludWU7XG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMTAwMC1cdGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmV2ZXJzZSh2bGFuLCBcdTAwMjZ2Zy1cdTAwM2V2bGFuX2xpc3QsIHZsaXN0KSB7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoxMDAxOlx0XHRpZiAodmxhbi1cdTAwM2Vwcml2X2ZsYWdzIFx1MDAyNiBCUl9WTEZMQUdfQURERURfQllfU1dJVENIREVWKVxubmV0L2JyaWRnZS9icl92bGFuLmMtMTAwMi1cdFx0XHRjb250aW51ZTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMDA4LVx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZsYW4sIFx1MDAyNnZnLVx1MDAzZXZsYW5fbGlzdCwgdmxpc3QpIHtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjEwMDk6XHRcdFx0aWYgKHZsYW4tXHUwMDNlcHJpdl9mbGFncyBcdTAwMjYgQlJfVkxGTEFHX0FEREVEX0JZX1NXSVRDSERFVilcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTEwMTAtXHRcdFx0XHRjb250aW51ZTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0xMjU3PWludCBuYnBfdmxhbl9pbml0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMjYwLVx0XHQub3JpZ19kZXYgPSBwLVx1MDAzZWJyLVx1MDAzZWRldixcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjEyNjE6XHRcdC5pZCA9IFNXSVRDSERFVl9BVFRSX0lEX0JSSURHRV9WTEFOX0ZJTFRFUklORyxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjEyNjI6XHRcdC5mbGFncyA9IFNXSVRDSERFVl9GX1NLSVBfRU9QTk9UU1VQUCxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTEyNjMtXHRcdC51LnZsYW5fZmlsdGVyaW5nID0gYnJfb3B0X2dldChwLVx1MDAzZWJyLCBCUk9QVF9WTEFOX0VOQUJMRUQpLFxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTE0Nzk9aW50IGJyX3ZsYW5fZmlsbF9mb3J3YXJkX3BhdGhfbW9kZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMTQ5OC1cdFx0cGF0aC1cdTAwM2VicmlkZ2Uudmxhbl9tb2RlID0gREVWX1BBVEhfQlJfVkxBTl9LRUVQO1xubmV0L2JyaWRnZS9icl92bGFuLmM6MTQ5OTpcdGVsc2UgaWYgKHYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjYgQlJfVkxGTEFHX1RBR0dJTkdfQllfU1dJVENIREVWKVxubmV0L2JyaWRnZS9icl92bGFuLmMtMTUwMC1cdFx0cGF0aC1cdTAwM2VicmlkZ2Uudmxhbl9tb2RlID0gREVWX1BBVEhfQlJfVkxBTl9VTlRBR19IVztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTc6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk0MDYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJyaWRnZSBWTEFOIEZpbHRlcmluZyBDb21waWxhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhpcyBsaW5lIGBicmlkZ2UtJChDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HKSAmIzQzOz0gYnJfdmxhbi5vIGJyX3ZsYW5fdHVubmVsLm8gYnJfdmxhbl9vcHRpb25zLm8gYnJfbXN0Lm9gIHRlbGxzIG1lIHRoYXQgdGhlIGBicl9tc3QuY2Agb2JqZWN0IGZpbGUsIGFtb25nIG90aGVycywgZ2V0cyBpbmNsdWRlZCBpbiB0aGUgYnJpZGdlIG1vZHVsZSBidWlsZCBwcm9jZXNzICpvbmx5KiB3aGVuIGBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYCBpcyBkZWZpbmVkLiBUaGF0JiMzOTtzIHRoZSBrZXkgY29uZGl0aW9uLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIG9mIGBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYC4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSBpdCYjMzk7cyBnb2luZyB0byBiZSBuZXN0ZWQsIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIGBCUklER0VgIGFuZCBgVkxBTl84MDIxUWAgZm9yIHRoaXMgY29uZmlndXJhdGlvbi4gQW5kIGxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IGxvb2tzIGxpa2UgYE5FVF9TV0lUQ0hERVZgIGlzIGFsc28gcmVsZXZhbnQgaGVyZS4gU3BlY2lmaWNhbGx5LCBJIHNlZSBhIGNhbGwgdG8gYHN3aXRjaGRldl9wb3J0X2F0dHJfc2V0YCwgYW5kIHRoZSB1c2Ugb2Ygc3dpdGNoZGV2IGJsb2NraW5nIG5vdGlmaWVycyB3aGljaCBtYWtlcyBtZSB0aGluayBpdCBoYXMgc29tZSBiZWFyaW5nIG9uIHRoaXMgc2V0dXAgaWYgYE5FVF9TV0lUQ0hERVZgIGlzIGFsc28gZW5hYmxlZC4KCkkgbmVlZCB0byBzZWUgaWYgYE5FVF9TV0lUQ0hERVZgIGl0c2VsZiBoYXMgYW55IGRlcGVuZGVuY2llcywgc28gSSBjYW4gZW5zdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBjb25maWd1cmF0aW9uIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE3OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfU1dJVENIREVWJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc3dpdGNoZGV2L0tjb25maWctNS1cbm5ldC9zd2l0Y2hkZXYvS2NvbmZpZzo2OmNvbmZpZyBORVRfU1dJVENIREVWXG5uZXQvc3dpdGNoZGV2L0tjb25maWctNy1cdGJvb2wgXCYjMzQ7U3dpdGNoIChhbmQgc3dpdGNoLWlzaCkgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTc6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk5MjIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIGBORVRfU1dJVENIREVWYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBgTkVUX1NXSVRDSERFVmAgY29uZmlnIG9wdGlvbi4gVGhlIGRvY3VtZW50YXRpb24gc2VlbXMgdG8gc3VnZ2VzdCBpdCYjMzk7cyBlaXRoZXIgZW50aXJlbHkgaW5kZXBlbmRlbnQsIG9yIGF0IG1vc3QsIHJlbGllcyBvbiB0aGUgYnJvYWRlciBgTkVUYCBmZWF0dXJlLiBUaGF0JiMzOTtzIGEgbGl0dGxlIHVudXN1YWwsIGdpdmVuIHRoZSBjb21wbGV4IG5hdHVyZSBvZiBzd2l0Y2ggZGV2aWNlIHN1cHBvcnQuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdC4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZGl2ZSBpbnRvIHRoZSBgbmV0L3N3aXRjaGRldi9LY29uZmlnYCBmaWxlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZGVmaW5pdGl2ZSBhbnN3ZXIgYWJvdXQgaXRzIGRlcGVuZGVuY2llcyBhbmQgYW55IHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGl0LiBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlc2UgcmVsYXRpb25zaGlwcyB0byBlbnN1cmUgcHJvcGVyIGNvbmZpZ3VyYXRpb24gYW5kIGF2b2lkIGFueSB1bmV4cGVjdGVkIGNvbmZsaWN0cyBvciBtaXNzaW5nIGZ1bmN0aW9uYWxpdHkgd2hlbiBkZWFsaW5nIHdpdGggbmV0d29ya2luZyBkZXZpY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zd2l0Y2hkZXYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIENvbmZpZ3VyYXRpb24gZm9yIFN3aXRjaCBkZXZpY2Ugc3VwcG9ydFxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgTkVUX1NXSVRDSERFVlxuICAgNzpcdFx0Ym9vbCBcJiMzNDtTd2l0Y2ggKGFuZCBzd2l0Y2gtaXNoKSBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuICAgODpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGdsdWUgYmV0d2VlbiBjb3JlIG5ldHdvcmtpbmcgY29kZSBhbmQgZGV2aWNlXG4gIDExOlx0XHQgIGRyaXZlcnMgaW4gb3JkZXIgdG8gc3VwcG9ydCBoYXJkd2FyZSBzd2l0Y2ggY2hpcHMgaW4gdmVyeSBnZW5lcmljXG4gIDEyOlx0XHQgIG1lYW5pbmcgb2YgdGhlIHdvcmQgXCYjMzQ7c3dpdGNoXCYjMzQ7LiBUaGlzIGluY2x1ZGUgZGV2aWNlcyBzdXBwb3J0aW5nIEwyL0wzIGJ1dFxuICAxMzpcdFx0ICBhbHNvIHZhcmlvdXMgZmxvdyBvZmZsb2FkaW5nIGNoaXBzLCBpbmNsdWRpbmcgc3dpdGNoZXMgZW1iZWRkZWQgaW50b1xuICAxNDpcdFx0ICBTUi1JT1YgTklDcy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTc6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAzNDYKCQkJCQkJCW91dHB1dDogMTczCgkJCQkJCQl0aG91Z2h0czogNTU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBhbmQgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIGRlcGVuZGVuY2llcyBhcmUgY2xlYXI6IGBORVRfU1dJVENIREVWYCByZWxpZXMgb24gYElORVRgLiBgQlJJREdFYCBjb3JyZXNwb25kcyB0byBgQ09ORklHX0JSSURHRWAsIGFuZCBzaW1pbGFybHksIGBCUklER0VfVkxBTl9GSUxURVJJTkdgIG1hcHMgdG8gYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgLCBhbmQgYFZMQU5fODAyMVFgIG1hcHMgdG8gYENPTkZJR19WTEFOXzgwMjFRYC4gSSBuZWVkIHRvIGJlIGNhcmVmdWwgdG8gc3RyaXAgdGhlIGBDT05GSUdfYCBwcmVmaXggd2hlbiBzcGVjaWZ5aW5nIHRoZSByZXF1aXJlZCBjb25maWdzLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zOiBgQlJJREdFYCwgYEJSSURHRV9WTEFOX0ZJTFRFUklOR2AsIGBWTEFOXzgwMjFRYCwgYW5kIGBORVRfU1dJVENIREVWYCBhcmUgYWxsIGVzc2VudGlhbC4gQ2hlY2suIE5leHQsIEkgbmVlZCB0byBsb29rIGF0IHRoZSBgRm9jdXNTeW1ib2xzYC4KCkkgc2VlIGBicl9tc3Rfc2V0X3N0YXRlYCAtIHRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHRoZSBwYXRjaCBtb2RpZmllZCEgQWxzbyBgYnJfbXN0X3Byb2Nlc3NgLCBhbmQgYGJyX21zdF9zZXRfZW5hYmxlZGAgd2hpY2ggc2VlbXMgdG8gYmUgdGhlIE1TVCBlbmFibGUgZW50cnkgcG9pbnQuIEFuZCBgYnJfc2V0X3N0YXRlYCwgd2hpY2ggY2FsbHMgYGJyX21zdF9zZXRfc3RhdGVgLiBUaGVzZSBhcmUgKm5vdCogdWJpcXVpdG91cyBmdW5jdGlvbnMuIFRoZXkgYXJlICpoaWdobHkqIHNwZWNpZmljIHRvIEV0aGVybmV0IEJyaWRnZSBNdWx0aXBsZSBTcGFubmluZyBUcmVlIChNU1QpIGZ1bmN0aW9uYWxpdHkuIFRoaXMgaXMgZ29vZDsgd2UmIzM5O3JlIGF2b2lkaW5nIHRob3NlIGNvbW1vbiBob3RzcG90cy4KCk5vdywgdGhlIHJlYXNvbmluZzogVGhlIHBhdGNoIG1vZGlmaWVzIGBicl9tc3Rfc2V0X3N0YXRlKClgIHRvIG1vdmUgYHN3aXRjaGRldl9wb3J0X2F0dHJfc2V0KClgIG91dCBvZiBhbiBgcmN1X3JlYWRfbG9jaygpYCBjcml0aWNhbCBzZWN0aW9uIGFuZCBpbnRyb2R1Y2VzIGFuIGBBU1NFUlRfUlROTCgpYCBhc3NlcnRpb24uIFRoaXMgY2hhbmdlcyB0aGUgbG9ja2luZyBhbmQgaW50cm9kdWNlcyBhIG5ldyBydW50aW1lIGFzc2VydGlvbiBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUsIHNwZWNpZmljYWxseSBFdGhlcm5ldCBicmlkZ2UgTVNUIHN1cHBvcnQuCgpMZXQmIzM5O3MgcmV2aWV3IHRoZSBndWlkZWxpbmVzLCBzdGVwIGJ5IHN0ZXA6CiogICAqKlJlYWNoYWJpbGl0eToqKiBTdGFuZGFyZCBRRU1VL3N5emthbGxlciBjYW4gZWFzaWx5IGNvbmZpZ3VyZSBicmlkZ2UgZGV2aWNlcyB3aXRoIFZMQU4gZmlsdGVyaW5nIGFuZCBNU1QgdXNpbmcgbmV0bGluay4gVGhpcyBpcyBnb29kLiBObyB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgaXMgbmVlZGVkLgoqICAgKipSZWZhY3RvcmluZ3MgYW5kIEFzc2VydGlvbnM6KiogVGhlIHBhdGNoIGNsZWFybHkgaW52b2x2ZXMgYW4gUkNVIGNyaXRpY2FsIHNlY3Rpb24gbW92ZSBhbmQgYSBuZXcgYEFTU0VSVF9SVE5MKClgIGFzc2VydGlvbiwgd2hpY2ggaXMgcGVyZmVjdC4KKiAgICoqRm9jdXNTeW1ib2xzOioqIEkmIzM5O20gdGFyZ2V0aW5nIHNwZWNpZmljIGZlYXR1cmUgbG9naWMgd2l0aCB0aGVzZSBmdW5jdGlvbnMsIGFuZCBub3QgaG90IHBhdGhzLiBDaGVjay4KKiAgICoqRW5hYmxlQ29uZmlnczoqKiBDb25maXJtZWQ6IGBCUklER0VgLCBgQlJJREdFX1ZMQU5fRklMVEVSSU5HYCwgYFZMQU5fODAyMVFgLCBhbmQgYE5FVF9TV0lUQ0hERVZgLiBTdHJpcHBlZCB0aGUgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4LgoKRXZlcnl0aGluZyBhbGlnbnMuIEkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlJJREdFJiMzNDssCiAgICAmIzM0O0JSSURHRV9WTEFOX0ZJTFRFUklORyYjMzQ7LAogICAgJiMzNDtWTEFOXzgwMjFRJiMzNDssCiAgICAmIzM0O05FVF9TV0lUQ0hERVYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticl9tc3Rfc2V0X3N0YXRlJiMzNDssCiAgICAmIzM0O2JyX21zdF9wcm9jZXNzJiMzNDssCiAgICAmIzM0O2JyX21zdF9zZXRfZW5hYmxlZCYjMzQ7LAogICAgJiMzNDticl9zZXRfc3RhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uIGluIGBicl9tc3Rfc2V0X3N0YXRlKClgIHdpdGhpbiB0aGUgRXRoZXJuZXQgYnJpZGdlIE1TVCBpbXBsZW1lbnRhdGlvbjogaXQgbW92ZXMgYSBwb3RlbnRpYWxseSBzbGVlcGluZyBzd2l0Y2hkZXYgY2FsbCBvdXRzaWRlIG9mIHRoZSBgcmN1X3JlYWRfbG9jaygpYCBjcml0aWNhbCBzZWN0aW9uIGFuZCBhZGRzIGFuIGBBU1NFUlRfUlROTCgpYCBpbnZhcmlhbnQgY2hlY2suIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgYWNjZXNzaWJsZSB2aWEgbmV0bGluayBhbmQgYnJpZGdlIFNUUCBjb25maWd1cmF0aW9uIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlJJREdFJiMzNDssCiAgICAmIzM0O0JSSURHRV9WTEFOX0ZJTFRFUklORyYjMzQ7LAogICAgJiMzNDtWTEFOXzgwMjFRJiMzNDssCiAgICAmIzM0O05FVF9TV0lUQ0hERVYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticl9tc3Rfc2V0X3N0YXRlJiMzNDssCiAgICAmIzM0O2JyX21zdF9wcm9jZXNzJiMzNDssCiAgICAmIzM0O2JyX21zdF9zZXRfZW5hYmxlZCYjMzQ7LAogICAgJiMzNDticl9zZXRfc3RhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uIGluIGBicl9tc3Rfc2V0X3N0YXRlKClgIHdpdGhpbiB0aGUgRXRoZXJuZXQgYnJpZGdlIE1TVCBpbXBsZW1lbnRhdGlvbjogaXQgbW92ZXMgYSBwb3RlbnRpYWxseSBzbGVlcGluZyBzd2l0Y2hkZXYgY2FsbCBvdXRzaWRlIG9mIHRoZSBgcmN1X3JlYWRfbG9jaygpYCBjcml0aWNhbCBzZWN0aW9uIGFuZCBhZGRzIGFuIGBBU1NFUlRfUlROTCgpYCBpbnZhcmlhbnQgY2hlY2suIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgYWNjZXNzaWJsZSB2aWEgbmV0bGluayBhbmQgYnJpZGdlIFNUUCBjb25maWd1cmF0aW9uIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTc6MTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNzoxODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgc2xlZXAtaW4tYXRvbWljIGJ1ZyBpbiBgYnJfbXN0X3NldF9zdGF0ZSgpYCBieSBtb3ZpbmcgYHN3aXRjaGRldl9wb3J0X2F0dHJfc2V0KClgICh3aGljaCBtYXkgc2xlZXApIG91dHNpZGUgb2YgdGhlIGByY3VfcmVhZF9sb2NrKClgIGNyaXRpY2FsIHNlY3Rpb24sIGFkZGluZyBgQVNTRVJUX1JUTkwoKWAsIGFuZCBvbmx5IGFjcXVpcmluZyBgcmN1X3JlYWRfbG9jaygpYCB3aGVuIHJlYWRpbmcgdGhlIFZMQU4gZ3JvdXAgYW5kIGl0ZXJhdGluZyBvdmVyIHRoZSBWTEFOIGxpc3QuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMsIGRvZXMgbm90IGFmZmVjdCBidWZmZXIgYm91bmRzIG9yIGNvcHkgbGVuZ3RocywgYW5kIGRvZXMgbm90IGFsdGVyIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UuIFNsZWVwaW5nIHdoaWxlIGhvbGRpbmcgYW4gUkNVIHJlYWQgbG9jayBpcyBkZXRlY3RlZCBieSBzdGFuZGFyZCBkZWJ1ZyBjb25maWd1cmF0aW9ucyAoYENPTkZJR19ERUJVR19BVE9NSUNfU0xFRVBgIC8gYG1pZ2h0X3NsZWVwKClgKSwgYW5kIGxvY2sgaW52YXJpYW50cyBhcmUgdmVyaWZpZWQgYnkgYEFTU0VSVF9SVE5MKClgIC8gYExPQ0tERVBgLiBCZWNhdXNlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODBhNTA4NGQwMDI2YTg2NThmMzUwNmNkOTI1NzYxZWFhM2Y5NjVlZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDE3OjE2OjA2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9tc3QuYyBiL25ldC9icmlkZ2UvYnJfbXN0LmMKaW5kZXggNDNhMzAwYWU2YmZhZi4uMTY1NGVmZDMwNDViMCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9tc3QuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYnJpZGdlL2JyX21zdC5jCkBAIC0xMDcsMjEgJiM0MzsxMDcsMjQgQEAgaW50IGJyX21zdF9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IG1zdGksIHU4IHN0YXRlLAogCXN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnY7CiAJaW50IGVyciA9IDA7CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JdmcgPSBuYnBfdmxhbl9ncm91cF9yY3UocCk7Ci0JaWYgKCF2ZykKLQkJZ290byBvdXQ7Ci0KIAkvKiBNU1RJIDAgKENTVCkgc3RhdGUgY2hhbmdlcyBhcmUgbm90aWZpZWQgdmlhIHRoZSByZWd1bGFyCi0JICogU1dJVENIREVWX0FUVFJfSURfUE9SVF9TVFBfU1RBVEUuCiYjNDM7CSAqIFNXSVRDSERFVl9BVFRSX0lEX1BPUlRfU1RQX1NUQVRFLiBBbGwgb3RoZXIgTVNUSXMgYXJlIGhhbmRsZWQgdmlhCiYjNDM7CSAqIG5ldGxpbmsgd2l0aCBSVE5MIGhlbGQKIAkgKi8KIAlpZiAobXN0aSkgewomIzQzOwkJQVNTRVJUX1JUTkwoKTsKJiM0MzsKIAkJZXJyID0gc3dpdGNoZGV2X3BvcnRfYXR0cl9zZXQocC0mZ3Q7ZGV2LCAmYW1wO2F0dHIsIGV4dGFjayk7CiAJCWlmIChlcnIgJmFtcDsmYW1wOyBlcnIgIT0gLUVPUE5PVFNVUFApCiAJCQlnb3RvIG91dDsKJiM0MzsJCWVyciA9IDA7CiAJfQogCi0JZXJyID0gMDsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwl2ZyA9IG5icF92bGFuX2dyb3VwX3JjdShwKTsKJiM0MzsJaWYgKCF2ZykKJiM0MzsJCWdvdG8gb3V0X3JjdV91bmxvY2s7CiYjNDM7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodiwgJmFtcDt2Zy0mZ3Q7dmxhbl9saXN0LCB2bGlzdCkgewogCQlpZiAodi0mZ3Q7YnJ2bGFuLSZndDttc3RpICE9IG1zdGkpCiAJCQljb250aW51ZTsKQEAgLTEyOSw4ICYjNDM7MTMyLDkgQEAgaW50IGJyX21zdF9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IG1zdGksIHU4IHN0YXRlLAogCQlicl9tc3Rfdmxhbl9zZXRfc3RhdGUodmcsIHYsIHN0YXRlKTsKIAl9CiAKLW91dDoKJiM0MztvdXRfcmN1X3VubG9jazoKIAlyY3VfcmVhZF91bmxvY2soKTsKJiM0MztvdXQ6CiAJcmV0dXJuIGVycjsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTc6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQzOAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4KCioqSW5zcGVjdGluZyB0aGUgQ29kZSoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgcGF0Y2guIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBzZWUgaXQmIzM5O3MgdG91Y2hpbmcgYG5ldC9icmlkZ2UvYnJfbXN0LmNgLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCDigJMgTVNUUCwgYnJpZGdpbmcsIGFuZCBzcGFubmluZyB0cmVlIHByb3RvY29sLCBhbGwgY29yZSBjb25jZXB0cy4gTm93LCBsZXQgbWUgbG9jYXRlIHRoZSBhcmVhIGJlaW5nIG1vZGlmaWVkIGluIHRoYXQgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiBhcm91bmQgbGluZSAxMDcuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgYXJvdW5kIHRoYXQgc3BlY2lmaWMgbGluZSB3aWxsIGJlIGtleSB0byBncmFzcGluZyB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE3OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9tc3QuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgOTA6XHRcdFx0YnJfdmxhbl9zZXRfcHZpZF9zdGF0ZSh2Zywgc3RhdGUpO1xuICA5MTpcdFxuICA5MjpcdFx0YnJfdmxhbl9zZXRfc3RhdGUodiwgc3RhdGUpO1xuICA5MzpcdH1cbiAgOTQ6XHRcbiAgOTU6XHRpbnQgYnJfbXN0X3NldF9zdGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCB1MTYgbXN0aSwgdTggc3RhdGUsXG4gIDk2Olx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuICA5NzpcdHtcbiAgOTg6XHRcdHN0cnVjdCBzd2l0Y2hkZXZfYXR0ciBhdHRyID0ge1xuICA5OTpcdFx0XHQuaWQgPSBTV0lUQ0hERVZfQVRUUl9JRF9QT1JUX01TVF9TVEFURSxcbiAxMDA6XHRcdFx0Lm9yaWdfZGV2ID0gcC1cdTAwM2VkZXYsXG4gMTAxOlx0XHRcdC51Lm1zdF9zdGF0ZSA9IHtcbiAxMDI6XHRcdFx0XHQubXN0aSA9IG1zdGksXG4gMTAzOlx0XHRcdFx0LnN0YXRlID0gc3RhdGUsXG4gMTA0Olx0XHRcdH0sXG4gMTA1Olx0XHR9O1xuIDEwNjpcdFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmc7XG4gMTA3Olx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2O1xuIDEwODpcdFx0aW50IGVyciA9IDA7XG4gMTA5Olx0XG4gMTEwOlx0XHQvKiBNU1RJIDAgKENTVCkgc3RhdGUgY2hhbmdlcyBhcmUgbm90aWZpZWQgdmlhIHRoZSByZWd1bGFyXG4gMTExOlx0XHQgKiBTV0lUQ0hERVZfQVRUUl9JRF9QT1JUX1NUUF9TVEFURS4gQWxsIG90aGVyIE1TVElzIGFyZSBoYW5kbGVkIHZpYVxuIDExMjpcdFx0ICogbmV0bGluayB3aXRoIFJUTkwgaGVsZFxuIDExMzpcdFx0ICovXG4gMTE0Olx0XHRpZiAobXN0aSkge1xuIDExNTpcdFx0XHRBU1NFUlRfUlROTCgpO1xuIDExNjpcdFxuIDExNzpcdFx0XHRlcnIgPSBzd2l0Y2hkZXZfcG9ydF9hdHRyX3NldChwLVx1MDAzZWRldiwgXHUwMDI2YXR0ciwgZXh0YWNrKTtcbiAxMTg6XHRcdFx0aWYgKGVyciBcdTAwMjZcdTAwMjYgZXJyICE9IC1FT1BOT1RTVVBQKVxuIDExOTpcdFx0XHRcdGdvdG8gb3V0O1xuIDEyMDpcdFx0XHRlcnIgPSAwO1xuIDEyMTpcdFx0fVxuIDEyMjpcdFxuIDEyMzpcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDEyNDpcdFx0dmcgPSBuYnBfdmxhbl9ncm91cF9yY3UocCk7XG4gMTI1Olx0XHRpZiAoIXZnKVxuIDEyNjpcdFx0XHRnb3RvIG91dF9yY3VfdW5sb2NrO1xuIDEyNzpcdFxuIDEyODpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodiwgXHUwMDI2dmctXHUwMDNldmxhbl9saXN0LCB2bGlzdCkge1xuIDEyOTpcdFx0XHRpZiAodi1cdTAwM2VicnZsYW4tXHUwMDNlbXN0aSAhPSBtc3RpKVxuIDEzMDpcdFx0XHRcdGNvbnRpbnVlO1xuIDEzMTpcdFxuIDEzMjpcdFx0XHRicl9tc3Rfdmxhbl9zZXRfc3RhdGUodmcsIHYsIHN0YXRlKTtcbiAxMzM6XHRcdH1cbiAxMzQ6XHRcbiAxMzU6XHRvdXRfcmN1X3VubG9jazpcbiAxMzY6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDEzNzpcdG91dDpcbiAxMzg6XHRcdHJldHVybiBlcnI7XG4gMTM5Olx0fVxuIDE0MDpcdFxuIDE0MTpcdHN0YXRpYyB2b2lkIGJyX21zdF92bGFuX3N5bmNfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqcHYsIHUxNiBtc3RpKVxuIDE0MjpcdHtcbiAxNDM6XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnID0gbmJwX3ZsYW5fZ3JvdXAocHYtXHUwMDNlcG9ydCk7XG4gMTQ0Olx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2O1xuIDE0NTpcdFxuIDE0NjpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh2LCBcdTAwMjZ2Zy1cdTAwM2V2bGFuX2xpc3QsIHZsaXN0KSB7XG4gMTQ3Olx0XHRcdC8qIElmIHRoaXMgcG9ydCBhbHJlYWR5IGhhcyBhIGRlZmluZWQgc3RhdGUgaW4gdGhpc1xuIDE0ODpcdFx0XHQgKiBNU1RJICh0aHJvdWdoIHNvbWUgb3RoZXIgVkxBTiBtZW1iZXJzaGlwKSwgaW5oZXJpdFxuIDE0OTpcdFx0XHQgKiBpdC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTc6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU1MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqSW52ZXN0aWdhdGluZyB0aGUgYGJyX21zdC5jYCBJc3N1ZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBHaXQgaGlzdG9yeS4gTGV0IG1lIGZpcmUgdXAgYGdpdCBsb2dgIGFuZCBzZWUgd2hhdCB0aGUgY29tbWl0IGhpc3Rvcnkgb2YgYGJyX21zdC5jYCByZXZlYWxzLiBIb3BlZnVsbHksIHdoYXRldmVyIGZpeCBvciBmZWF0dXJlIHRoaXMgaXMgcmVsYXRlZCB0byB3aWxsIGJlIGFwcGFyZW50IGluIHRoZSBjb21taXQgbWVzc2FnZXMuIEkmIzM5O20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGJ1ZyB0aGlzIGNvZGUgYWRkcmVzc2VzLiBJZiB0aGUgbG9nIGlzbiYjMzk7dCBpbW1lZGlhdGVseSBoZWxwZnVsLCBJIGNhbiBzZWFyY2ggZm9yIGEgc3BlY2lmaWMgY29tbWl0IGhhc2gg4oCTIGlmIEkgaGF2ZSBvbmUg4oCTIG9yIHJlbGV2YW50IGtleXdvcmRzIHRvIHBpbnBvaW50IHRoZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gdGhlIHByb2JsZW0uIEl0JiMzOTtzIHRpbWUgdG8gYmVjb21lIGEgZGV0ZWN0aXZlIGFuZCB0cmFjayBkb3duIHRoZSByb290IGNhdXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticl9tc3Rfc2V0X3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX21zdC5jPTgyPXN0YXRpYyB2b2lkIGJyX21zdF92bGFuX3NldF9zdGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2Zyxcbi0tXG5uZXQvYnJpZGdlL2JyX21zdC5jLTk0LVxubmV0L2JyaWRnZS9icl9tc3QuYzo5NTppbnQgYnJfbXN0X3NldF9zdGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCB1MTYgbXN0aSwgdTggc3RhdGUsXG5uZXQvYnJpZGdlL2JyX21zdC5jLTk2LVx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvYnJpZGdlL2JyX21zdC5jPTMwOD1zdGF0aWMgaW50IGJyX21zdF9wcm9jZXNzX29uZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXN0LmMtMzM0LVxubmV0L2JyaWRnZS9icl9tc3QuYzozMzU6XHRyZXR1cm4gYnJfbXN0X3NldF9zdGF0ZShwLCBtc3RpLCBzdGF0ZSwgZXh0YWNrKTtcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMzM2LX1cbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xOTUwPXN0YXRpYyBpbmxpbmUgYm9vbCBicl9tc3RfaXNfZW5hYmxlZChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKVxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NTctXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTU4OmludCBicl9tc3Rfc2V0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHUxNiBtc3RpLCB1OCBzdGF0ZSxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NTktXHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xOTcxPXN0YXRpYyBpbmxpbmUgYm9vbCBicl9tc3RfaXNfZW5hYmxlZChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKVxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NzUtXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTc2OnN0YXRpYyBpbmxpbmUgaW50IGJyX21zdF9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IG1zdGksXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTc3LVx0XHRcdFx0ICAgdTggc3RhdGUsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvYnJpZGdlL2JyX3N0cC5jPTI5PXZvaWQgYnJfc2V0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHVuc2lnbmVkIGludCBzdGF0ZSlcbi0tXG5uZXQvYnJpZGdlL2JyX3N0cC5jLTQ2LVx0aWYgKGJyX29wdF9nZXQocC1cdTAwM2ViciwgQlJPUFRfTVNUX0VOQUJMRUQpKSB7XG5uZXQvYnJpZGdlL2JyX3N0cC5jOjQ3Olx0XHRlcnIgPSBicl9tc3Rfc2V0X3N0YXRlKHAsIDAsIHN0YXRlLCBOVUxMKTtcbm5ldC9icmlkZ2UvYnJfc3RwLmMtNDgtXHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE3OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzOTIKCQkJCQkJCW91dHB1dDogMjE2CgkJCQkJCQl0aG91Z2h0czogODAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29tbWl0IGZvciBDb25jdXJyZW5jeSBhbmQgTWVtb3J5IFNhZmV0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB3aGF0IHRoaXMgY29tbWl0IGlzIGRvaW5nLiBNeSBwcmltYXJ5IGNvbmNlcm4gaGVyZSBpcyB0aGF0IHRoZSBvcmlnaW5hbCBjb2RlIGhhZCBgc3dpdGNoZGV2X3BvcnRfYXR0cl9zZXQoKWAgY2FsbGVkICppbnNpZGUqIGFuIGByY3VfcmVhZF9sb2NrKClgIHNlY3Rpb24uIFRoYXQmIzM5O3MgYSBodWdlIHJlZCBmbGFnIGJlY2F1c2UgYHN3aXRjaGRldl9wb3J0X2F0dHJfc2V0YCBjYW4gcG90ZW50aWFsbHkgc2xlZXAsIHdoaWNoIGlzIGEgYmlnIG5vLW5vIHdoZW4geW91JiMzOTtyZSBpbiBhbiBhdG9taWMgY29udGV4dCBwcm90ZWN0ZWQgYnkgUkNVLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyAmIzM0O3NsZWVwaW5nIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIGludmFsaWQgY29udGV4dCYjMzQ7IGJ1Zywgb3IgYSBzY2hlZHVsaW5nLXdoaWxlLWF0b21pYyBpc3N1ZSwgb3Igc29tZXRoaW5nIHNpbWlsYXIuIFRoZXkgd2VyZSBhbHNvIGFkZGluZyBgQVNTRVJUX1JUTkwoKWAgd2hpY2ggcmVpbmZvcmNlcyB0aGF0IGNvbmNlcm4uCgpUaGUgcGF0Y2gmIzM5O3Mgc29sdXRpb24gaXMgcXVpdGUgc2Vuc2libGUuIEl0IG1vdmVzIHRoZSBvZmZlbmRpbmcgY2FsbCBvdXRzaWRlIG9mIHRoZSBgcmN1X3JlYWRfbG9jaygpYCByZWdpb24gZW50aXJlbHksIGFuZCBpbmNsdWRlcyBhbiBgQVNTRVJUX1JUTkwoKWAgY2FsbC4gSXQgYWxzbyBhZGRzIGEgcXVpY2sgY2hlY2sgZm9yIHRoZSByZXN1bHQgb2YgYHN3aXRjaGRldl9wb3J0X2F0dHJfc2V0KClgIGFuZCByZXR1cm5zIGltbWVkaWF0ZWx5IGlmIGl0IGVycm9ycywgKmJlZm9yZSogZXZlbiBhY3F1aXJpbmcgdGhlIFJDVSBsb2NrLiBGaW5hbGx5LCB0aGUgUkNVIGxvY2sgaXMgbmFycm93ZWQgdG8gb25seSBjb3ZlciB0aGUgaXRlcmF0aW9uIG92ZXIgYHZnLSZndDt2bGFuX2xpc3RgLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgaXQgc2hvdWxkIGJlIHByb3RlY3RpbmcuCgpOb3csIGxldCYjMzk7cyB0aGluayBhYm91dCBtZW1vcnkgc2FmZXR5LiBJIHNlZSB0aGF0IHRoZSBgYXR0cmAgc3RydWN0IGlzIGluaXRpYWxpemVkIHdpdGggZGVzaWduYXRlZCBpbml0aWFsaXplcnMsIHNvIHRoZSBjb21waWxlciB3aWxsIHplcm8gb3V0IHRoZSB1bm1lbnRpb25lZCBmaWVsZHMuIFRoaXMgd2FzIGFscmVhZHkgaW4gdGhlIG9yaWdpbmFsIGNvZGUsIGFuZCB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgY2hhbmdlIGFueXRoaW5nIGFib3V0ICpob3cqIGBhdHRyYCBpcyBpbml0aWFsaXplZCwgb25seSAqd2hlbiogaXQmIzM5O3MgdXNlZC4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBhcmUgaGFwcGVuaW5nIGhlcmUsIGFuZCB0aGVyZSBhcmVuJiMzOTt0IGFueSBvYnZpb3VzIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdHMgYmVpbmcgdXNlZC4gVGhpcyBjaGFuZ2UgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UuIEl0IGFsc28gZG9lc24mIzM5O3QgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGZvciBjb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcuIFNsZWVwaW5nIGluc2lkZSBhbiBhdG9taWMgY29udGV4dCBpcyBlYXNpbHkgY2F1Z2h0IGJ5IGBtaWdodF9zbGVlcCgpYCBhbmQgdGhlIHN0YW5kYXJkIGtlcm5lbCBkZWJ1ZyBjb25maWd1cmF0aW9ucy4gTG9ja2luZyBhbmQgUlROTCBhc3NlcnRpb25zIGFyZSBjYXVnaHQgYnkgUlROTCwgbG9ja2RlcCwgYW5kIGRlYnVnIGFzc2VydHMuCgpPa2F5LCBsZXQmIzM5O3MgcXVpY2tseSBjbGFyaWZ5IEtBU0FOIHZlcnN1cyBLTVNBTi4gS01TQU4gaXMgYWxsIGFib3V0IGRldGVjdGluZyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgcG90ZW50aWFsIGluZm8tbGVha3MuIEtBU0FOIGZvY3VzZXMgb24gYSBicm9hZGVyIHJhbmdlIG9mIG1lbW9yeSBlcnJvcnMuIEluIHRoaXMgY2FzZSwgdGhpcyBpcyBhIGJ1ZyBmaXggZm9yIHNsZWVwLWluLWF0b21pYywgbm90IGEgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLiBUaGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIG9yIGFsdGVyIGFueSBvZiB0aGUgdGhpbmdzIHRoYXQgS01TQU4gd291bGQgY2F0Y2guIFRoaXMgaXNuJiMzOTt0IGEgS01TQU4gaXNzdWU7IHRoaXMgaXMgYSBjb25jdXJyZW5jeS9hdG9taWMgY29udGV4dCBpc3N1ZS4gVGhlcmVmb3JlLCBOZWVkc0tNU0FOIHNob3VsZCBiZSBmYWxzZS4KClNvLCBhbGwgZ29vZC4gVGhlIHBhdGNoIGlzIGNsZWFuIGFuZCBzdHJhaWdodGZvcndhcmQuIFdlJiMzOTtyZSBnb29kIHRvIGdvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHNsZWVwLWluLWF0b21pYyBidWcgaW4gYGJyX21zdF9zZXRfc3RhdGUoKWAgYnkgbW92aW5nIGBzd2l0Y2hkZXZfcG9ydF9hdHRyX3NldCgpYCAod2hpY2ggbWF5IHNsZWVwKSBvdXRzaWRlIG9mIHRoZSBgcmN1X3JlYWRfbG9jaygpYCBjcml0aWNhbCBzZWN0aW9uLCBhZGRpbmcgYEFTU0VSVF9SVE5MKClgLCBhbmQgb25seSBhY3F1aXJpbmcgYHJjdV9yZWFkX2xvY2soKWAgd2hlbiByZWFkaW5nIHRoZSBWTEFOIGdyb3VwIGFuZCBpdGVyYXRpbmcgb3ZlciB0aGUgVkxBTiBsaXN0LlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzLCBkb2VzIG5vdCBhZmZlY3QgYnVmZmVyIGJvdW5kcyBvciBjb3B5IGxlbmd0aHMsIGFuZCBkb2VzIG5vdCBhbHRlciBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLiBTbGVlcGluZyB3aGlsZSBob2xkaW5nIGFuIFJDVSByZWFkIGxvY2sgaXMgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgZGVidWcgY29uZmlndXJhdGlvbnMgKGBDT05GSUdfREVCVUdfQVRPTUlDX1NMRUVQYCAvIGBtaWdodF9zbGVlcCgpYCksIGFuZCBsb2NrIGludmFyaWFudHMgYXJlIHZlcmlmaWVkIGJ5IGBBU1NFUlRfUlROTCgpYCAvIGBMT0NLREVQYC4gQmVjYXVzZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgc2xlZXAtaW4tYXRvbWljIGJ1ZyBpbiBgYnJfbXN0X3NldF9zdGF0ZSgpYCBieSBtb3ZpbmcgYHN3aXRjaGRldl9wb3J0X2F0dHJfc2V0KClgICh3aGljaCBtYXkgc2xlZXApIG91dHNpZGUgb2YgdGhlIGByY3VfcmVhZF9sb2NrKClgIGNyaXRpY2FsIHNlY3Rpb24sIGFkZGluZyBgQVNTRVJUX1JUTkwoKWAsIGFuZCBvbmx5IGFjcXVpcmluZyBgcmN1X3JlYWRfbG9jaygpYCB3aGVuIHJlYWRpbmcgdGhlIFZMQU4gZ3JvdXAgYW5kIGl0ZXJhdGluZyBvdmVyIHRoZSBWTEFOIGxpc3QuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMsIGRvZXMgbm90IGFmZmVjdCBidWZmZXIgYm91bmRzIG9yIGNvcHkgbGVuZ3RocywgYW5kIGRvZXMgbm90IGFsdGVyIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UuIFNsZWVwaW5nIHdoaWxlIGhvbGRpbmcgYW4gUkNVIHJlYWQgbG9jayBpcyBkZXRlY3RlZCBieSBzdGFuZGFyZCBkZWJ1ZyBjb25maWd1cmF0aW9ucyAoYENPTkZJR19ERUJVR19BVE9NSUNfU0xFRVBgIC8gYG1pZ2h0X3NsZWVwKClgKSwgYW5kIGxvY2sgaW52YXJpYW50cyBhcmUgdmVyaWZpZWQgYnkgYEFTU0VSVF9SVE5MKClgIC8gYExPQ0tERVBgLiBCZWNhdXNlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNzoxNjowOC41Njc5NjM1MTFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODUzNjU4MjgwNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlJJREdFXCIsXG4gICAgXCJCUklER0VfVkxBTl9GSUxURVJJTkdcIixcbiAgICBcIlZMQU5fODAyMVFcIixcbiAgICBcIk5FVF9TV0lUQ0hERVZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicl9tc3Rfc2V0X3N0YXRlXCIsXG4gICAgXCJicl9tc3RfcHJvY2Vzc1wiLFxuICAgIFwiYnJfbXN0X3NldF9lbmFibGVkXCIsXG4gICAgXCJicl9zZXRfc3RhdGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgc2xlZXAtaW4tYXRvbWljIGJ1ZyBpbiBgYnJfbXN0X3NldF9zdGF0ZSgpYCBieSBtb3ZpbmcgYHN3aXRjaGRldl9wb3J0X2F0dHJfc2V0KClgICh3aGljaCBtYXkgc2xlZXApIG91dHNpZGUgb2YgdGhlIGByY3VfcmVhZF9sb2NrKClgIGNyaXRpY2FsIHNlY3Rpb24sIGFkZGluZyBgQVNTRVJUX1JUTkwoKWAsIGFuZCBvbmx5IGFjcXVpcmluZyBgcmN1X3JlYWRfbG9jaygpYCB3aGVuIHJlYWRpbmcgdGhlIFZMQU4gZ3JvdXAgYW5kIGl0ZXJhdGluZyBvdmVyIHRoZSBWTEFOIGxpc3QuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcywgZG9lcyBub3QgYWZmZWN0IGJ1ZmZlciBib3VuZHMgb3IgY29weSBsZW5ndGhzLCBhbmQgZG9lcyBub3QgYWx0ZXIgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gU2xlZXBpbmcgd2hpbGUgaG9sZGluZyBhbiBSQ1UgcmVhZCBsb2NrIGlzIGRldGVjdGVkIGJ5IHN0YW5kYXJkIGRlYnVnIGNvbmZpZ3VyYXRpb25zIChgQ09ORklHX0RFQlVHX0FUT01JQ19TTEVFUGAgLyBgbWlnaHRfc2xlZXAoKWApLCBhbmQgbG9jayBpbnZhcmlhbnRzIGFyZSB2ZXJpZmllZCBieSBgQVNTRVJUX1JUTkwoKWAgLyBgTE9DS0RFUGAuIEJlY2F1c2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uIGluIGBicl9tc3Rfc2V0X3N0YXRlKClgIHdpdGhpbiB0aGUgRXRoZXJuZXQgYnJpZGdlIE1TVCBpbXBsZW1lbnRhdGlvbjogaXQgbW92ZXMgYSBwb3RlbnRpYWxseSBzbGVlcGluZyBzd2l0Y2hkZXYgY2FsbCBvdXRzaWRlIG9mIHRoZSBgcmN1X3JlYWRfbG9jaygpYCBjcml0aWNhbCBzZWN0aW9uIGFuZCBhZGRzIGFuIGBBU1NFUlRfUlROTCgpYCBpbnZhcmlhbnQgY2hlY2suIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgYWNjZXNzaWJsZSB2aWEgbmV0bGluayBhbmQgYnJpZGdlIFNUUCBjb25maWd1cmF0aW9uIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTc6MTY6MDguNTY3OTY4OTYxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE1ODIyMDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODBhNTA4NGQwMDI2YTg2NThmMzUwNmNkOTI1NzYxZWFhM2Y5NjVlZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCAxMSAxNzoxNjowNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX21zdC5jIGIvbmV0L2JyaWRnZS9icl9tc3QuY1xcbmluZGV4IDQzYTMwMGFlNmJmYWYuLjE2NTRlZmQzMDQ1YjAgMTAwNjQ0XFxuLS0tIGEvbmV0L2JyaWRnZS9icl9tc3QuY1xcbisrKyBiL25ldC9icmlkZ2UvYnJfbXN0LmNcXG5AQCAtMTA3LDIxICsxMDcsMjQgQEAgaW50IGJyX21zdF9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IG1zdGksIHU4IHN0YXRlLFxcbiBcXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2O1xcbiBcXHRpbnQgZXJyID0gMDtcXG4gXFxuLVxcdHJjdV9yZWFkX2xvY2soKTtcXG4tXFx0dmcgPSBuYnBfdmxhbl9ncm91cF9yY3UocCk7XFxuLVxcdGlmICghdmcpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbi1cXG4gXFx0LyogTVNUSSAwIChDU1QpIHN0YXRlIGNoYW5nZXMgYXJlIG5vdGlmaWVkIHZpYSB0aGUgcmVndWxhclxcbi1cXHQgKiBTV0lUQ0hERVZfQVRUUl9JRF9QT1JUX1NUUF9TVEFURS5cXG4rXFx0ICogU1dJVENIREVWX0FUVFJfSURfUE9SVF9TVFBfU1RBVEUuIEFsbCBvdGhlciBNU1RJcyBhcmUgaGFuZGxlZCB2aWFcXG4rXFx0ICogbmV0bGluayB3aXRoIFJUTkwgaGVsZFxcbiBcXHQgKi9cXG4gXFx0aWYgKG1zdGkpIHtcXG4rXFx0XFx0QVNTRVJUX1JUTkwoKTtcXG4rXFxuIFxcdFxcdGVyciA9IHN3aXRjaGRldl9wb3J0X2F0dHJfc2V0KHAtXFx1MDAzZWRldiwgXFx1MDAyNmF0dHIsIGV4dGFjayk7XFxuIFxcdFxcdGlmIChlcnIgXFx1MDAyNlxcdTAwMjYgZXJyICE9IC1FT1BOT1RTVVBQKVxcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0ZXJyID0gMDtcXG4gXFx0fVxcbiBcXG4tXFx0ZXJyID0gMDtcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHR2ZyA9IG5icF92bGFuX2dyb3VwX3JjdShwKTtcXG4rXFx0aWYgKCF2ZylcXG4rXFx0XFx0Z290byBvdXRfcmN1X3VubG9jaztcXG4rXFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHYsIFxcdTAwMjZ2Zy1cXHUwMDNldmxhbl9saXN0LCB2bGlzdCkge1xcbiBcXHRcXHRpZiAodi1cXHUwMDNlYnJ2bGFuLVxcdTAwM2Vtc3RpICE9IG1zdGkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbkBAIC0xMjksOCArMTMyLDkgQEAgaW50IGJyX21zdF9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IG1zdGksIHU4IHN0YXRlLFxcbiBcXHRcXHRicl9tc3Rfdmxhbl9zZXRfc3RhdGUodmcsIHYsIHN0YXRlKTtcXG4gXFx0fVxcbiBcXG4tb3V0OlxcbitvdXRfcmN1X3VubG9jazpcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK291dDpcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTc6MTY6MDkuOTg0NDQxNjExWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMjk4NTA5NjQwMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlJJREdFXCIsXG4gICAgXCJCUklER0VfVkxBTl9GSUxURVJJTkdcIixcbiAgICBcIlZMQU5fODAyMVFcIixcbiAgICBcIk5FVF9TV0lUQ0hERVZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicl9tc3Rfc2V0X3N0YXRlXCIsXG4gICAgXCJicl9tc3RfcHJvY2Vzc1wiLFxuICAgIFwiYnJfbXN0X3NldF9lbmFibGVkXCIsXG4gICAgXCJicl9zZXRfc3RhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBsb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24gaW4gYGJyX21zdF9zZXRfc3RhdGUoKWAgd2l0aGluIHRoZSBFdGhlcm5ldCBicmlkZ2UgTVNUIGltcGxlbWVudGF0aW9uOiBpdCBtb3ZlcyBhIHBvdGVudGlhbGx5IHNsZWVwaW5nIHN3aXRjaGRldiBjYWxsIG91dHNpZGUgb2YgdGhlIGByY3VfcmVhZF9sb2NrKClgIGNyaXRpY2FsIHNlY3Rpb24gYW5kIGFkZHMgYW4gYEFTU0VSVF9SVE5MKClgIGludmFyaWFudCBjaGVjay4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rIGFuZCBicmlkZ2UgU1RQIGNvbmZpZ3VyYXRpb24gaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDgwYTUwODRkMDAyNmE4NjU4ZjM1MDZjZDkyNTc2MWVhYTNmOTY1ZWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAxNzoxNjowNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbXN0LmMgYi9uZXQvYnJpZGdlL2JyX21zdC5jXG5pbmRleCA0M2EzMDBhZTZiZmFmLi4xNjU0ZWZkMzA0NWIwIDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9tc3QuY1xuKysrIGIvbmV0L2JyaWRnZS9icl9tc3QuY1xuQEAgLTEwNywyMSArMTA3LDI0IEBAIGludCBicl9tc3Rfc2V0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHUxNiBtc3RpLCB1OCBzdGF0ZSxcbiBcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnY7XG4gXHRpbnQgZXJyID0gMDtcbiBcbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cdHZnID0gbmJwX3ZsYW5fZ3JvdXBfcmN1KHApO1xuLVx0aWYgKCF2Zylcbi1cdFx0Z290byBvdXQ7XG4tXG4gXHQvKiBNU1RJIDAgKENTVCkgc3RhdGUgY2hhbmdlcyBhcmUgbm90aWZpZWQgdmlhIHRoZSByZWd1bGFyXG4tXHQgKiBTV0lUQ0hERVZfQVRUUl9JRF9QT1JUX1NUUF9TVEFURS5cbitcdCAqIFNXSVRDSERFVl9BVFRSX0lEX1BPUlRfU1RQX1NUQVRFLiBBbGwgb3RoZXIgTVNUSXMgYXJlIGhhbmRsZWQgdmlhXG4rXHQgKiBuZXRsaW5rIHdpdGggUlROTCBoZWxkXG4gXHQgKi9cbiBcdGlmIChtc3RpKSB7XG4rXHRcdEFTU0VSVF9SVE5MKCk7XG4rXG4gXHRcdGVyciA9IHN3aXRjaGRldl9wb3J0X2F0dHJfc2V0KHAtXHUwMDNlZGV2LCBcdTAwMjZhdHRyLCBleHRhY2spO1xuIFx0XHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBlcnIgIT0gLUVPUE5PVFNVUFApXG4gXHRcdFx0Z290byBvdXQ7XG4rXHRcdGVyciA9IDA7XG4gXHR9XG4gXG4tXHRlcnIgPSAwO1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0dmcgPSBuYnBfdmxhbl9ncm91cF9yY3UocCk7XG4rXHRpZiAoIXZnKVxuK1x0XHRnb3RvIG91dF9yY3VfdW5sb2NrO1xuK1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodiwgXHUwMDI2dmctXHUwMDNldmxhbl9saXN0LCB2bGlzdCkge1xuIFx0XHRpZiAodi1cdTAwM2VicnZsYW4tXHUwMDNlbXN0aSAhPSBtc3RpKVxuIFx0XHRcdGNvbnRpbnVlO1xuQEAgLTEyOSw4ICsxMzIsOSBAQCBpbnQgYnJfbXN0X3NldF9zdGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCB1MTYgbXN0aSwgdTggc3RhdGUsXG4gXHRcdGJyX21zdF92bGFuX3NldF9zdGF0ZSh2Zywgdiwgc3RhdGUpO1xuIFx0fVxuIFxuLW91dDpcbitvdXRfcmN1X3VubG9jazpcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuK291dDpcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTc6MTY6MDkuOTg0NDQ0NzMxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTI5MTk3NTMzNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgc3l6a2FsbGVyIFBhdGNoIGZvciBBTUQ2NCBBcmNoaXRlY3R1cmUqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBzeXprYWxsZXIgcGF0Y2guIFRoZSB1c2VyIHdhbnRzIG1lIHRvIGV2YWx1YXRlIGl0LCBmb2N1c2luZyBvbiB0aGUgYGFtZDY0YCBhcmNoaXRlY3R1cmUuIFRoZSB0YXJnZXQgZmlsZSBpcyBgbmV0L2JyaWRnZS9icl9tc3QuY2AsIHNwZWNpZmljYWxseSB0aGUgYGJyX21zdF9zZXRfc3RhdGVgIGZ1bmN0aW9uLlxuXG5Mb29raW5nIGF0IHRoZSBkaWZmLCB0aGUgbWFpbiBjaGFuZ2Ugc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBob3cgTVNUSXMgKE11bHRpcGxlIFNwYW5uaW5nIFRyZWUgSW5zdGFuY2VzKSBhcmUgaGFuZGxlZC4gIFRoZSBjb2RlIG5vdyBleHBsaWNpdGx5IG5vdGVzIHRoYXQgY2hhbmdlcyB0byBNU1RJIDAgYXJlIGhhbmRsZWQgZGlmZmVyZW50bHkgdmlhIGBTV0lUQ0hERVZfQVRUUl9JRF9QT1JUX1NUUF9TVEFURWAsIHdoaWNoIGlzIGV4cGVjdGVkLCB3aGlsZSBvdGhlciBNU1RJcyByZXF1aXJlIG5ldGxpbmsgY29tbXVuaWNhdGlvbiB3aXRoIFJUTkwgaGVsZC4gQSBnb29kIGFkZGl0aW9uIGlzIHRoZSBgQVNTRVJUX1JUTkwoKWAgY2FsbCB3aXRoaW4gdGhlIGBpZiAobXN0aSlgIGJsb2NrLiBUaGlzIGlzIGEgdmVyeSB3ZWxjb21lIHNhbml0eSBjaGVjay4gSXQgY2xlYXJseSBpbmRpY2F0ZXMgdGhhdCB0aGUgY29kZSBleHBlY3RzIHRoZSBSVE5MIGxvY2sgdG8gYmUgaGVsZCBmb3Igbm9uLUNTVCBNU1RJIHN0YXRlIGNoYW5nZXMsIHdoaWNoIGlzIGNydWNpYWwgZm9yIHN5bmNocm9uaXphdGlvbi5cblxuVGhlIHBhdGNoIGFsc28gc2VlbXMgdG8gcmVvcmRlciBhIGxpdHRsZS4gVGhlIGByY3VfcmVhZF9sb2NrYCBhbmQgYHJjdV9yZWFkX3VubG9ja2AgY2FsbHMgaGF2ZSBiZWVuIG1vdmVkIGFyb3VuZC4gVGhleSBub3cgYnJhY2tldCB0aGUgVkxBTiBsaXN0IHRyYXZlcnNhbC4gTG9va3MgZ29vZCB0byBtZSwgYXMgdGhpcyBpcyB0aGUgc3RhbmRhcmQgcGF0dGVybi4gV2UgZW5zdXJlIHRoYXQgd2UgcmVsZWFzZSB0aGUgUkNVIGxvY2ssIGluIGNhc2Ugb2YgYW4gZXJyb3IsIHdoaWNoIGlzIHRoZSBkZXNpcmVkIGJlaGF2aW9yIGFuZCBwcmV2ZW50cyBwb3RlbnRpYWwgaXNzdWVzLiBUaGUgYGdvdG9gIGxhYmVscyBoYXZlIGJlZW4gdXBkYXRlZCB0byByZWZsZWN0IHRoZSBSQ1UgY2hhbmdlcyB0b28uXG5cbkknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHRoZSBjb21taXQgbWVzc2FnZSB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZXNlIGNoYW5nZXMgYW5kIGVuc3VyZSB0aGlzIGlzIGEgY29ycmVjdCBhbmQgc2FmZSBhcHByb2FjaC4gSSdsbCBuZWVkIHRvIHVzZSBteSB0b29scyB0byBkbyBzby4gT3ZlcmFsbCwgdGhvdWdoLCB0aGUgcGF0Y2ggc2VlbXMgcmVhc29uYWJsZSBhbmQgYWRkcmVzc2VzIGEgc3BlY2lmaWMgbnVhbmNlIGluIE1TVCBoYW5kbGluZy4gSSdsbCBmbGFnIHRoZSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIFJUTkwgbG9jayBhbmQgdGhlIHRpbWluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIyNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE3OjE2OjIyLjkwNDIwMDE1NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9icmlkZ2UvYnJfbXN0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgOTA6XFx0XFx0XFx0YnJfdmxhbl9zZXRfcHZpZF9zdGF0ZSh2Zywgc3RhdGUpO1xcbiAgOTE6XFx0XFxuICA5MjpcXHRcXHRicl92bGFuX3NldF9zdGF0ZSh2LCBzdGF0ZSk7XFxuICA5MzpcXHR9XFxuICA5NDpcXHRcXG4gIDk1OlxcdGludCBicl9tc3Rfc2V0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHUxNiBtc3RpLCB1OCBzdGF0ZSxcXG4gIDk2OlxcdFxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiAgOTc6XFx0e1xcbiAgOTg6XFx0XFx0c3RydWN0IHN3aXRjaGRldl9hdHRyIGF0dHIgPSB7XFxuICA5OTpcXHRcXHRcXHQuaWQgPSBTV0lUQ0hERVZfQVRUUl9JRF9QT1JUX01TVF9TVEFURSxcXG4gMTAwOlxcdFxcdFxcdC5vcmlnX2RldiA9IHAtXFx1MDAzZWRldixcXG4gMTAxOlxcdFxcdFxcdC51Lm1zdF9zdGF0ZSA9IHtcXG4gMTAyOlxcdFxcdFxcdFxcdC5tc3RpID0gbXN0aSxcXG4gMTAzOlxcdFxcdFxcdFxcdC5zdGF0ZSA9IHN0YXRlLFxcbiAxMDQ6XFx0XFx0XFx0fSxcXG4gMTA1OlxcdFxcdH07XFxuIDEwNjpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZztcXG4gMTA3OlxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnY7XFxuIDEwODpcXHRcXHRpbnQgZXJyID0gMDtcXG4gMTA5OlxcdFxcbiAxMTA6XFx0XFx0LyogTVNUSSAwIChDU1QpIHN0YXRlIGNoYW5nZXMgYXJlIG5vdGlmaWVkIHZpYSB0aGUgcmVndWxhclxcbiAxMTE6XFx0XFx0ICogU1dJVENIREVWX0FUVFJfSURfUE9SVF9TVFBfU1RBVEUuIEFsbCBvdGhlciBNU1RJcyBhcmUgaGFuZGxlZCB2aWFcXG4gMTEyOlxcdFxcdCAqIG5ldGxpbmsgd2l0aCBSVE5MIGhlbGRcXG4gMTEzOlxcdFxcdCAqL1xcbiAxMTQ6XFx0XFx0aWYgKG1zdGkpIHtcXG4gMTE1OlxcdFxcdFxcdEFTU0VSVF9SVE5MKCk7XFxuIDExNjpcXHRcXG4gMTE3OlxcdFxcdFxcdGVyciA9IHN3aXRjaGRldl9wb3J0X2F0dHJfc2V0KHAtXFx1MDAzZWRldiwgXFx1MDAyNmF0dHIsIGV4dGFjayk7XFxuIDExODpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwMjZcXHUwMDI2IGVyciAhPSAtRU9QTk9UU1VQUClcXG4gMTE5OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiAxMjA6XFx0XFx0XFx0ZXJyID0gMDtcXG4gMTIxOlxcdFxcdH1cXG4gMTIyOlxcdFxcbiAxMjM6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiAxMjQ6XFx0XFx0dmcgPSBuYnBfdmxhbl9ncm91cF9yY3UocCk7XFxuIDEyNTpcXHRcXHRpZiAoIXZnKVxcbiAxMjY6XFx0XFx0XFx0Z290byBvdXRfcmN1X3VubG9jaztcXG4gMTI3OlxcdFxcbiAxMjg6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodiwgXFx1MDAyNnZnLVxcdTAwM2V2bGFuX2xpc3QsIHZsaXN0KSB7XFxuIDEyOTpcXHRcXHRcXHRpZiAodi1cXHUwMDNlYnJ2bGFuLVxcdTAwM2Vtc3RpICE9IG1zdGkpXFxuIDEzMDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gMTMxOlxcdFxcbiAxMzI6XFx0XFx0XFx0YnJfbXN0X3ZsYW5fc2V0X3N0YXRlKHZnLCB2LCBzdGF0ZSk7XFxuIDEzMzpcXHRcXHR9XFxuIDEzNDpcXHRcXG4gMTM1OlxcdG91dF9yY3VfdW5sb2NrOlxcbiAxMzY6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDEzNzpcXHRvdXQ6XFxuIDEzODpcXHRcXHRyZXR1cm4gZXJyO1xcbiAxMzk6XFx0fVxcbiAxNDA6XFx0XFxuIDE0MTpcXHRzdGF0aWMgdm9pZCBicl9tc3Rfdmxhbl9zeW5jX3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnB2LCB1MTYgbXN0aSlcXG4gMTQyOlxcdHtcXG4gMTQzOlxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnID0gbmJwX3ZsYW5fZ3JvdXAocHYtXFx1MDAzZXBvcnQpO1xcbiAxNDQ6XFx0XFx0c3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdjtcXG4gMTQ1OlxcdFxcbiAxNDY6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh2LCBcXHUwMDI2dmctXFx1MDAzZXZsYW5fbGlzdCwgdmxpc3QpIHtcXG4gMTQ3OlxcdFxcdFxcdC8qIElmIHRoaXMgcG9ydCBhbHJlYWR5IGhhcyBhIGRlZmluZWQgc3RhdGUgaW4gdGhpc1xcbiAxNDg6XFx0XFx0XFx0ICogTVNUSSAodGhyb3VnaCBzb21lIG90aGVyIFZMQU4gbWVtYmVyc2hpcCksIGluaGVyaXRcXG4gMTQ5OlxcdFxcdFxcdCAqIGl0LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNzoxNjoyMi45MDQyNzI1MTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNjAwNDc0ODA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBicl9tc3Rfc2V0X3N0YXRlYCBDYWxsZXJzIGFuZCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgYnJfbXN0X3NldF9zdGF0ZWAgaXMgYmVpbmcgdXNlZC4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGwgc2l0ZXMuIFRoYXTigJlzIHRoZSBtb3N0IGVmZmljaWVudCBzdGFydGluZyBwb2ludC4gSSB3YW50IHRvIHNlZSB3aGljaCBvdGhlciBtb2R1bGVzIG9yIGZ1bmN0aW9ucyBkZXBlbmQgb24gaXQgYW5kIHdoYXQgYXJndW1lbnRzIHRoZXkgYXJlIHBhc3NpbmcuIFRoaXMgd2lsbCBpbW1lZGlhdGVseSBjbHVlIG1lIGludG8gdGhlIHNjZW5hcmlvcyB0aGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGZvci5cblxuRnJvbSB0aGVyZSwgSSdsbCBkcmlsbCBkb3duIG9uIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEdpdmVuIHRoZSBmdW5jdGlvbidzIG5hbWUgYW5kIGdlbmVyYWwgcHVycG9zZSwgSSBhbnRpY2lwYXRlIGl0J2xsIGJlIGhlYXZpbHkgaW5mbHVlbmNlZCBieSBNU1QgKE11bHRpcGxlIFNwYW5uaW5nIFRyZWUpIHNldHVwLiBCdXQgSSBhbHNvIGV4cGVjdCBpdCBtYXkgZGVwZW5kIG9uIHRoZSBicmlkZ2UgY29uZmlndXJhdGlvbiBhcyBhIHdob2xlLiBXaGF0IGZsYWdzIGFyZSBzZXQsIHdoaWNoIFZMQU5zIGFyZSBpbnZvbHZlZD8gSeKAmWxsIG5lZWQgdG8gYW5hbHl6ZSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgd2hpY2ggY29uZmlnIHBhcmFtZXRlcnMgYXJlIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdW5jdGlvbidzIG9wZXJhdGlvbmFsIGNvbnRleHQuIEknbSB0aGlua2luZyBJJ2xsIG5lZWQgdG8gZm9jdXMgb24gd2hhdCB0aGUgZnVuY3Rpb24gZXhwZWN0cyBhbmQgaG93IHRoZSBzdGF0ZSBpcyBiZWluZyBtYW5hZ2VkIGV4dGVybmFsbHksIG9yIGlmIHRoZSBmdW5jdGlvbiBpcyBjb250cm9sbGluZyB0aGF0IHN0YXRlIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGluIHBsYXkuIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIHRlbGxzIG1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTA4LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNzoxNjoyNS41MDQ3NDkzMjRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzODg4Nzc1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicl9tc3Rfc2V0X3N0YXRlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfbXN0LmM9ODI9c3RhdGljIHZvaWQgYnJfbXN0X3ZsYW5fc2V0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tc3QuYy05NC1cXG5uZXQvYnJpZGdlL2JyX21zdC5jOjk1OmludCBicl9tc3Rfc2V0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHUxNiBtc3RpLCB1OCBzdGF0ZSxcXG5uZXQvYnJpZGdlL2JyX21zdC5jLTk2LVxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tc3QuYz0zMDg9c3RhdGljIGludCBicl9tc3RfcHJvY2Vzc19vbmUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMzM0LVxcbm5ldC9icmlkZ2UvYnJfbXN0LmM6MzM1OlxcdHJldHVybiBicl9tc3Rfc2V0X3N0YXRlKHAsIG1zdGksIHN0YXRlLCBleHRhY2spO1xcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMzM2LX1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE5NTA9c3RhdGljIGlubGluZSBib29sIGJyX21zdF9pc19lbmFibGVkKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTU3LVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE5NTg6aW50IGJyX21zdF9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IG1zdGksIHU4IHN0YXRlLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NTktXFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTk3MT1zdGF0aWMgaW5saW5lIGJvb2wgYnJfbXN0X2lzX2VuYWJsZWQoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NzUtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTk3NjpzdGF0aWMgaW5saW5lIGludCBicl9tc3Rfc2V0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHUxNiBtc3RpLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NzctXFx0XFx0XFx0XFx0ICAgdTggc3RhdGUsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfc3RwLmM9Mjk9dm9pZCBicl9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdW5zaWduZWQgaW50IHN0YXRlKVxcbi0tXFxubmV0L2JyaWRnZS9icl9zdHAuYy00Ni1cXHRpZiAoYnJfb3B0X2dldChwLVxcdTAwM2ViciwgQlJPUFRfTVNUX0VOQUJMRUQpKSB7XFxubmV0L2JyaWRnZS9icl9zdHAuYzo0NzpcXHRcXHRlcnIgPSBicl9tc3Rfc2V0X3N0YXRlKHAsIDAsIHN0YXRlLCBOVUxMKTtcXG5uZXQvYnJpZGdlL2JyX3N0cC5jLTQ4LVxcdFxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE3OjE2OjI3LjE0MzY3NzM2OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ4ODgyMzkwMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTVFAgU3RhdGUgQ2hhbmdlIGluIE5ldHdvcmsgQnJpZGdlIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHJlY2VudCBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgYSBrZXkgY2hhbmdlLiBQcmV2aW91c2x5LCB3ZSBoYWQgYHN3aXRjaGRldl9wb3J0X2F0dHJfc2V0KHAtXHUwMDNlZGV2LCBcdTAwMjZhdHRyLCBleHRhY2spYCBydW5uaW5nIHdpdGhpbiBhbiBgcmN1X3JlYWRfbG9jaygpYCBibG9jay4gVGhhdCdzIGEgcmVkIGZsYWchIGBzd2l0Y2hkZXZfcG9ydF9hdHRyX3NldGAgY2FuIHBvdGVudGlhbGx5IHNsZWVwLCB0cmlnZ2VyIGRyaXZlciBjYWxsYmFja3MsIG9yIGRvIGFsbCBzb3J0cyBvZiB0aGluZ3MgdGhhdCBhcmUgaW5jb21wYXRpYmxlIHdpdGggaG9sZGluZyBhbiBSQ1UgcmVhZCBsb2NrLiBUaGUgb2xkIGNvZGUgd2FzOlxuXG5gYGBjXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHR2ZyA9IG5icF92bGFuX2dyb3VwX3JjdShwKTtcbi1cdGlmICghdmcpXG4tXHRcdGdvdG8gb3V0O1xuYGBgXG5cbkFuZCBub3cgbG9va3MgbGlrZSB0aGlzOlxuXG5gYGBjXG4gXHQvKiBNU1RJIDAgKENTVCkgc3RhdGUgY2hhbmdlcyBhcmUgbm90aWZpZWQgdmlhIHRoZSByZWd1bGFyXG4tXHQgKiBTV0lUQ0hERVZfQVRUUl9JRF9QT1JUX1NUUF9TVEFURS5cbitcdCAqIFNXSVRDSERFVl9BVFRSX0lEX1BPUlRfU1RQX1NUQVRFLiBBbGwgb3RoZXIgTVNUSXMgYXJlIGhhbmRsZWQgdmlhXG4rXHQgKiBuZXRsaW5rIHdpdGggUlROTCBoZWxkXG4gXHQgKi9cbiBcdGlmIChtc3RpKSB7XG4rXHRcdEFTU0VSVF9SVE5MKCk7XG4rXG4gXHRcdGVyciA9IHN3aXRjaGRldl9wb3J0X2F0dHJfc2V0KHAtXHUwMDNlZGV2LCBcdTAwMjZhdHRyLCBleHRhY2spO1xuIFx0XHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBlcnIgIT0gLUVPUE5PVFNVUFApXG4gXHRcdFx0Z290byBvdXQ7XG4rXHRcdGVyciA9IDA7XG4gXHR9XG5gYGBcblxuVGhlIHBhdGNoIGNsZWFybHkgYWRkcmVzc2VzIHRoaXMgYnkgbW92aW5nIHRoZSBjYWxsIG91dHNpZGUgdGhlIFJDVSByZWFkIGxvY2sgYW5kLCBjcnVjaWFsbHksIGFkZGluZyBhbiBgQVNTRVJUX1JUTkwoKWAgY2hlY2suIEFoYSEgVGhpcyBpcyBpbnRlcmVzdGluZy4gVGhpcyBgQVNTRVJUX1JUTkwoKWAgY2FsbCBpcyBlcXVpdmFsZW50IHRvIGBSVE5MX1dBUk5fVU5MT0NLRUQoKWAuICBUaGUgY29tbWVudCBpbiB0aGUgcGF0Y2ggaXMgYWxzbyBzaWduaWZpY2FudC4gIEl0IHJlbWluZHMgdXMgdGhhdCAqYW55KiBuZXcgYXNzZXJ0aW9uLCBvciBtb2RpZmljYXRpb24gdG8gb25lLCB0aGF0J3MgaW4gYSByZWFjaGFibGUgY29kZSBwYXRoIG5lZWRzIHRvIGJlIHRob3JvdWdobHkgZnV6emVkLiBUaGF0IG1lYW5zIHdlJ3JlIGVuZm9yY2luZyBhIG5ldyBpbnZhcmlhbnQ6IHdlICptdXN0KiBob2xkIHRoZSBSVE5MIGR1cmluZyB0aGlzIHBvcnRpb24gb2YgdGhlIGNvZGUgd2hlbiBoYW5kbGluZyBNU1RJcyBvdGhlciB0aGFuIE1TVEkgMCwgc28gZnV6emluZyBpcyBnb2luZyB0byBiZSBpbXBvcnRhbnQgdG8gdmVyaWZ5IHRoZSBSVE5MIGlzIGFsd2F5cyBoZWxkIHVuZGVyIGFsbCBjaXJjdW1zdGFuY2VzLiBJIHNob3VsZCBjaGVjayBob3cgYGJyX21zdC5jYCBpcyBjb21waWxlZCBhbmQgd2hhdCBLY29uZmlnIG9wdGlvbnMgYXJlIGludm9sdmVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwMzYsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTc6MTY6MzIuMDMxOTIwNjY2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MTgxOTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyX21zdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvTWFrZWZpbGU9MjE9YnJpZGdlLSQoQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HKSArPSBicl9tdWx0aWNhc3QubyBicl9tZGIubyBicl9tdWx0aWNhc3RfZWh0Lm9cXG5uZXQvYnJpZGdlL01ha2VmaWxlLTIyLVxcbm5ldC9icmlkZ2UvTWFrZWZpbGU6MjM6YnJpZGdlLSQoQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklORykgKz0gYnJfdmxhbi5vIGJyX3ZsYW5fdHVubmVsLm8gYnJfdmxhbl9vcHRpb25zLm8gYnJfbXN0Lm9cXG5uZXQvYnJpZGdlL01ha2VmaWxlLTI0LVxcbi0tXFxubmV0L2JyaWRnZS9ici5jPTI5ND1pbnQgYnJfYm9vbG9wdF90b2dnbGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBlbnVtIGJyX2Jvb2xvcHRfaWQgb3B0LCBib29sIG9uLFxcbi0tXFxubmV0L2JyaWRnZS9ici5jLTMwNi1cXHRjYXNlIEJSX0JPT0xPUFRfTVNUX0VOQUJMRTpcXG5uZXQvYnJpZGdlL2JyLmM6MzA3OlxcdFxcdGVyciA9IGJyX21zdF9zZXRfZW5hYmxlZChiciwgb24sIGV4dGFjayk7XFxubmV0L2JyaWRnZS9ici5jLTMwOC1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jPTIxPXN0YXRpYyBpbmxpbmUgaW50IHNob3VsZF9kZWxpdmVyKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0yNy1cXHRyZXR1cm4gKHRlc3RfYml0KEJSX0hBSVJQSU5fTU9ERV9CSVQsIFxcdTAwMjZwLVxcdTAwM2VmbGFncykgfHwgc2tiLVxcdTAwM2VkZXYgIT0gcC1cXHUwMDNlZGV2KSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jOjI4OlxcdFxcdChicl9tc3RfaXNfZW5hYmxlZChwKSB8fCBwLVxcdTAwM2VzdGF0ZSA9PSBCUl9TVEFURV9GT1JXQVJESU5HKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jLTI5LVxcdFxcdGJyX2FsbG93ZWRfZWdyZXNzKHZnLCBza2IpIFxcdTAwMjZcXHUwMDI2IG5icF9zd2l0Y2hkZXZfYWxsb3dlZF9lZ3Jlc3MocCwgc2tiKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubmV0L2JyaWRnZS9icl9pZi5jPTM4MT12b2lkIGJyX2Rldl9kZWxldGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaWYuYy0zODktXFxubmV0L2JyaWRnZS9icl9pZi5jOjM5MDpcXHRicl9tc3RfdW5pbml0KGJyKTtcXG5uZXQvYnJpZGdlL2JyX2lmLmMtMzkxLVxcdGJyX3JlY2FsY3VsYXRlX25laWdoX3N1cHByZXNzX2VuYWJsZWQoYnIpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTc2PWludCBicl9oYW5kbGVfZnJhbWVfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTk2LVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo5NzpcXHRpZiAoYnJfbXN0X2lzX2VuYWJsZWQocCkpIHtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtOTgtXFx0XFx0c3RhdGUgPSBCUl9TVEFURV9GT1JXQVJESU5HO1xcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTM0Nz1zdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBicl9oYW5kbGVfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTQ0MC1mb3J3YXJkOlxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo0NDE6XFx0aWYgKGJyX21zdF9pc19lbmFibGVkKHApKVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy00NDItXFx0XFx0Z290byBkZWZlcl9zdHBfZmlsdGVyaW5nO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tc3QuYy0xMy1cXG5uZXQvYnJpZGdlL2JyX21zdC5jOjE0OkRFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGJyX21zdF91c2VkKTtcXG5uZXQvYnJpZGdlL2JyX21zdC5jLTE1LVxcbm5ldC9icmlkZ2UvYnJfbXN0LmM6MTY6Ym9vbCBicl9tc3RfZW5hYmxlZChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMTcte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tc3QuYy0yMi19XFxubmV0L2JyaWRnZS9icl9tc3QuYzoyMzpFWFBPUlRfU1lNQk9MX0dQTChicl9tc3RfZW5hYmxlZCk7XFxubmV0L2JyaWRnZS9icl9tc3QuYy0yNC1cXG5uZXQvYnJpZGdlL2JyX21zdC5jOjI1OnZvaWQgYnJfbXN0X3VuaW5pdChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXFxubmV0L2JyaWRnZS9icl9tc3QuYy0yNi17XFxubmV0L2JyaWRnZS9icl9tc3QuYy0yNy1cXHRpZiAoYnJfb3B0X2dldChiciwgQlJPUFRfTVNUX0VOQUJMRUQpKVxcbm5ldC9icmlkZ2UvYnJfbXN0LmM6Mjg6XFx0XFx0c3RhdGljX2JyYW5jaF9kZWMoXFx1MDAyNmJyX21zdF91c2VkKTtcXG5uZXQvYnJpZGdlL2JyX21zdC5jLTI5LX1cXG5uZXQvYnJpZGdlL2JyX21zdC5jLTMwLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmM6MzE6aW50IGJyX21zdF9nZXRfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgbXN0aSwgdW5zaWduZWQgbG9uZyAqdmlkcylcXG5uZXQvYnJpZGdlL2JyX21zdC5jLTMyLXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtNTQtfVxcbm5ldC9icmlkZ2UvYnJfbXN0LmM6NTU6RVhQT1JUX1NZTUJPTF9HUEwoYnJfbXN0X2dldF9pbmZvKTtcXG5uZXQvYnJpZGdlL2JyX21zdC5jLTU2LVxcbm5ldC9icmlkZ2UvYnJfbXN0LmM6NTc6aW50IGJyX21zdF9nZXRfc3RhdGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IG1zdGksIHU4ICpzdGF0ZSlcXG5uZXQvYnJpZGdlL2JyX21zdC5jLTU4LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtNzktfVxcbm5ldC9icmlkZ2UvYnJfbXN0LmM6ODA6RVhQT1JUX1NZTUJPTF9HUEwoYnJfbXN0X2dldF9zdGF0ZSk7XFxubmV0L2JyaWRnZS9icl9tc3QuYy04MS1cXG5uZXQvYnJpZGdlL2JyX21zdC5jOjgyOnN0YXRpYyB2b2lkIGJyX21zdF92bGFuX3NldF9zdGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZyxcXG5uZXQvYnJpZGdlL2JyX21zdC5jLTgzLVxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtOTQtXFxubmV0L2JyaWRnZS9icl9tc3QuYzo5NTppbnQgYnJfbXN0X3NldF9zdGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCB1MTYgbXN0aSwgdTggc3RhdGUsXFxubmV0L2JyaWRnZS9icl9tc3QuYy05Ni1cXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMTMxLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmM6MTMyOlxcdFxcdGJyX21zdF92bGFuX3NldF9zdGF0ZSh2Zywgdiwgc3RhdGUpO1xcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMTMzLVxcdH1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMTQwLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmM6MTQxOnN0YXRpYyB2b2lkIGJyX21zdF92bGFuX3N5bmNfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqcHYsIHUxNiBtc3RpKVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMTQyLXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMTUxLVxcdFxcdGlmICh2ICE9IHB2IFxcdTAwMjZcXHUwMDI2IHYtXFx1MDAzZWJydmxhbi1cXHUwMDNlbXN0aSA9PSBtc3RpKSB7XFxubmV0L2JyaWRnZS9icl9tc3QuYzoxNTI6XFx0XFx0XFx0YnJfbXN0X3ZsYW5fc2V0X3N0YXRlKHZnLCBwdiwgdi1cXHUwMDNlc3RhdGUpO1xcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMTUzLVxcdFxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMTU3LVxcdC8qIE90aGVyd2lzZSwgc3RhcnQgb3V0IGluIGEgbmV3IE1TVEkgd2l0aCBhbGwgcG9ydHMgZGlzYWJsZWQuICovXFxubmV0L2JyaWRnZS9icl9tc3QuYzoxNTg6XFx0cmV0dXJuIGJyX21zdF92bGFuX3NldF9zdGF0ZSh2ZywgcHYsIEJSX1NUQVRFX0RJU0FCTEVEKTtcXG5uZXQvYnJpZGdlL2JyX21zdC5jLTE1OS19XFxubmV0L2JyaWRnZS9icl9tc3QuYy0xNjAtXFxubmV0L2JyaWRnZS9icl9tc3QuYzoxNjE6aW50IGJyX21zdF92bGFuX3NldF9tc3RpKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKm12LCB1MTYgbXN0aSlcXG5uZXQvYnJpZGdlL2JyX21zdC5jLTE2Mi17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21zdC5jLTE4OS1cXHRcXHRpZiAocHYpXFxubmV0L2JyaWRnZS9icl9tc3QuYzoxOTA6XFx0XFx0XFx0YnJfbXN0X3ZsYW5fc3luY19zdGF0ZShwdiwgbXN0aSk7XFxubmV0L2JyaWRnZS9icl9tc3QuYy0xOTEtXFx0fVxcbi0tXFxubmV0L2JyaWRnZS9icl9tc3QuYy0xOTUtXFxubmV0L2JyaWRnZS9icl9tc3QuYzoxOTY6dm9pZCBicl9tc3Rfdmxhbl9pbml0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYpXFxubmV0L2JyaWRnZS9icl9tc3QuYy0xOTcte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tc3QuYy0yMDYtXFxubmV0L2JyaWRnZS9icl9tc3QuYzoyMDc6aW50IGJyX21zdF9zZXRfZW5hYmxlZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXFxubmV0L2JyaWRnZS9icl9tc3QuYy0yMDgtXFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMjM3LVxcdGlmIChvbilcXG5uZXQvYnJpZGdlL2JyX21zdC5jOjIzODpcXHRcXHRzdGF0aWNfYnJhbmNoX2luYyhcXHUwMDI2YnJfbXN0X3VzZWQpO1xcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMjM5LVxcdGVsc2VcXG5uZXQvYnJpZGdlL2JyX21zdC5jOjI0MDpcXHRcXHRzdGF0aWNfYnJhbmNoX2RlYyhcXHUwMDI2YnJfbXN0X3VzZWQpO1xcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMjQxLVxcbi0tXFxubmV0L2JyaWRnZS9icl9tc3QuYy0yNDUtXFxubmV0L2JyaWRnZS9icl9tc3QuYzoyNDY6c2l6ZV90IGJyX21zdF9pbmZvX3NpemUoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcpXFxubmV0L2JyaWRnZS9icl9tc3QuYy0yNDcte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tc3QuYy0yNzEtXFxubmV0L2JyaWRnZS9icl9tc3QuYzoyNzI6aW50IGJyX21zdF9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvYnJpZGdlL2JyX21zdC5jLTI3My1cXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tc3QuYy0yOTgtXFxubmV0L2JyaWRnZS9icl9tc3QuYzoyOTk6c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGJyX21zdF9ubF9wb2xpY3lbSUZMQV9CUklER0VfTVNUX0VOVFJZX01BWCArIDFdID0ge1xcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMzAwLVxcdFtJRkxBX0JSSURHRV9NU1RfRU5UUllfTVNUSV0gPSBOTEFfUE9MSUNZX1JBTkdFKE5MQV9VMTYsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21zdC5jLTMwNy1cXG5uZXQvYnJpZGdlL2JyX21zdC5jOjMwODpzdGF0aWMgaW50IGJyX21zdF9wcm9jZXNzX29uZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMzA5LVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21zdC5jLTMxNy1cXHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkKHRiLCBJRkxBX0JSSURHRV9NU1RfRU5UUllfTUFYLCBhdHRyLFxcbm5ldC9icmlkZ2UvYnJfbXN0LmM6MzE4OlxcdFxcdFxcdCAgICAgICBicl9tc3RfbmxfcG9saWN5LCBleHRhY2spO1xcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMzE5LVxcdGlmIChlcnIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21zdC5jLTMzNC1cXG5uZXQvYnJpZGdlL2JyX21zdC5jOjMzNTpcXHRyZXR1cm4gYnJfbXN0X3NldF9zdGF0ZShwLCBtc3RpLCBzdGF0ZSwgZXh0YWNrKTtcXG5uZXQvYnJpZGdlL2JyX21zdC5jLTMzNi19XFxubmV0L2JyaWRnZS9icl9tc3QuYy0zMzctXFxubmV0L2JyaWRnZS9icl9tc3QuYzozMzg6aW50IGJyX21zdF9wcm9jZXNzKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIGNvbnN0IHN0cnVjdCBubGF0dHIgKm1zdF9hdHRyLFxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMzM5LVxcdFxcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMzUyLVxcdFxcdGNhc2UgSUZMQV9CUklER0VfTVNUX0VOVFJZOlxcbm5ldC9icmlkZ2UvYnJfbXN0LmM6MzUzOlxcdFxcdFxcdGVyciA9IGJyX21zdF9wcm9jZXNzX29uZShwLCBhdHRyLCBleHRhY2spO1xcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMzU0LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9OTM9c3RhdGljIHNpemVfdCBicl9nZXRfbGlua19hZl9zaXplX2ZpbHRlcmVkKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xMjItXFx0aWYgKHAgXFx1MDAyNlxcdTAwMjYgdmcgXFx1MDAyNlxcdTAwMjYgKGZpbHRlcl9tYXNrIFxcdTAwMjYgUlRFWFRfRklMVEVSX01TVCkpXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTIzOlxcdFxcdHZpbmZvX3N6ICs9IGJyX21zdF9pbmZvX3NpemUodmcpO1xcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTEyNC1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jPTQ1OD1zdGF0aWMgaW50IGJyX2ZpbGxfaWZpbmZvKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy02MDYtXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6NjA3OlxcdFxcdGVyciA9IGJyX21zdF9maWxsX2luZm8oc2tiLCB2Zyk7XFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtNjA4LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYz04MDk9c3RhdGljIGludCBicl9hZnNwZWMoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtODcwLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjg3MTpcXHRcXHRcXHRlcnIgPSBicl9tc3RfcHJvY2VzcyhwLCBhdHRyLCBleHRhY2spO1xcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTg3Mi1cXHRcXHRcXHRpZiAoZXJyKVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTkzND1zdGF0aWMgaW5saW5lIGJvb2wgYnJfdmxhbl9zdGF0ZV9hbGxvd2VkKHU4IHN0YXRlLCBib29sIGxlYXJuX2FsbG93KVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk0Ni1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTQ3Oi8qIGJyX21zdC5jICovXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk0OC0jaWZkZWYgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE5NDk6REVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKGJyX21zdF91c2VkKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTUwOnN0YXRpYyBpbmxpbmUgYm9vbCBicl9tc3RfaXNfZW5hYmxlZChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NTEte1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NTItXFx0LyogY2hlY2sgdGhlIHBvcnQncyB2bGFuIGdyb3VwIHRvIGF2b2lkIHJhY2luZyB3aXRoIHBvcnQgZGVsZXRpb24gKi9cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTUzOlxcdHJldHVybiBzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZicl9tc3RfdXNlZCkgXFx1MDAyNlxcdTAwMjZcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTU0LVxcdCAgICAgICBicl9vcHRfZ2V0KHAtXFx1MDAzZWJyLCBCUk9QVF9NU1RfRU5BQkxFRCkgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NTctXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTk1ODppbnQgYnJfbXN0X3NldF9zdGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCB1MTYgbXN0aSwgdTggc3RhdGUsXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk1OS1cXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTk2MDppbnQgYnJfbXN0X3ZsYW5fc2V0X21zdGkoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTE2IG1zdGkpO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE5NjE6dm9pZCBicl9tc3Rfdmxhbl9pbml0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYpO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE5NjI6aW50IGJyX21zdF9zZXRfZW5hYmxlZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk2My1cXHRcXHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTY0OnNpemVfdCBicl9tc3RfaW5mb19zaXplKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTY1OmludCBicl9tc3RfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk2Ni1cXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTY3OmludCBicl9tc3RfcHJvY2VzcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBjb25zdCBzdHJ1Y3QgbmxhdHRyICptc3RfYXR0cixcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTY4LVxcdFxcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTk2OTp2b2lkIGJyX21zdF91bmluaXQoc3RydWN0IG5ldF9icmlkZ2UgKmJyKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTcwLSNlbHNlXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTk3MTpzdGF0aWMgaW5saW5lIGJvb2wgYnJfbXN0X2lzX2VuYWJsZWQoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcClcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTcyLXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NzUtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTk3NjpzdGF0aWMgaW5saW5lIGludCBicl9tc3Rfc2V0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHUxNiBtc3RpLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NzctXFx0XFx0XFx0XFx0ICAgdTggc3RhdGUsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5ODEtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTk4MjpzdGF0aWMgaW5saW5lIGludCBicl9tc3Rfc2V0X2VuYWJsZWQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5ODMtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTg3LVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE5ODg6c3RhdGljIGlubGluZSBzaXplX3QgYnJfbXN0X2luZm9fc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZylcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTg5LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5OTItXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTk5MzpzdGF0aWMgaW5saW5lIGludCBicl9tc3RfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk5NC1cXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5OTgtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTk5OTpzdGF0aWMgaW5saW5lIGludCBicl9tc3RfcHJvY2VzcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTIwMDAtXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBubGF0dHIgKm1zdF9hdHRyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMjAwNS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoyMDA2OnN0YXRpYyBpbmxpbmUgdm9pZCBicl9tc3RfdW5pbml0KHN0cnVjdCBuZXRfYnJpZGdlICpicilcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0yMDA3LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfc3RwLmM9Mjk9dm9pZCBicl9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdW5zaWduZWQgaW50IHN0YXRlKVxcbi0tXFxubmV0L2JyaWRnZS9icl9zdHAuYy00Ni1cXHRpZiAoYnJfb3B0X2dldChwLVxcdTAwM2ViciwgQlJPUFRfTVNUX0VOQUJMRUQpKSB7XFxubmV0L2JyaWRnZS9icl9zdHAuYzo0NzpcXHRcXHRlcnIgPSBicl9tc3Rfc2V0X3N0YXRlKHAsIDAsIHN0YXRlLCBOVUxMKTtcXG5uZXQvYnJpZGdlL2JyX3N0cC5jLTQ4LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0yMzQ9c3RhdGljIHZvaWQgYnJfdmxhbl9pbml0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0yNDMtXFx0aWYgKGJyX29wdF9nZXQoYnIsIEJST1BUX01TVF9FTkFCTEVEKSkge1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjI0NDpcXHRcXHRicl9tc3Rfdmxhbl9pbml0X3N0YXRlKHYpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTI0NS1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW5fb3B0aW9ucy5jPTU1MD1zdGF0aWMgaW50IGJyX3ZsYW5fcHJvY2Vzc19nbG9iYWxfb25lX29wdHMoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYy02NTctXFx0XFx0bXN0aSA9IG5sYV9nZXRfdTE2KHRiW0JSSURHRV9WTEFOREJfR09QVFNfTVNUSV0pO1xcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmM6NjU4OlxcdFxcdGVyciA9IGJyX21zdF92bGFuX3NldF9tc3RpKHYsIG1zdGkpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmMtNjU5LVxcdFxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE3OjE2OjMyLjA4MTEyNTE2OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMwNDM1OTQwMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIGEgZmlyc3QtcGVyc29uIGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgQnJpZGdlIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgS2NvbmZpZyBmaWxlcyByZWxhdGVkIHRvIHRoZSBicmlkZ2luZyBmdW5jdGlvbmFsaXR5LiBTcGVjaWZpY2FsbHksIEknbSBmb2N1c2luZyBvbiBcIkJSSURHRVwiIGFuZCBcIkJSSURHRV9WTEFOX0ZJTFRFUklORy5cIiBVbmRlcnN0YW5kaW5nIHRoZXNlIGNvbmZpZ3VyYXRpb25zIGlzIGNydWNpYWwgZm9yIGZpbmUtdHVuaW5nIHRoZSBicmlkZ2luZyBpbXBsZW1lbnRhdGlvbi4gSSBrbm93IHRoZXkncmUgcHJvYmFibHkgaW50ZXJjb25uZWN0ZWQsIGFuZCBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBvcHRpb25zIGFyZSBwcmVzZW50ZWQgdG8gdGhlIGVuZC11c2VyLiBJIGV4cGVjdCB0byBiZSBhYmxlIHRvIGlkZW50aWZ5IGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRoZW0sIGFuZCB0byBsb29rIGF0IHRoZSBoZWxwIHRleHQgYW5kIGRlZmF1bHQgdmFsdWVzIHRvIHVuZGVyc3RhbmQgdGhlaXIgaW50ZW5kZWQgdXNlIGFuZCBpbXBhY3Qgb24gdGhlIG92ZXJhbGwgY29uZmlndXJhdGlvbi4gVGhpcyBpcyBrZXkgdG8gZW5zdXJpbmcgdGhlIGJyaWRnZSBiZWhhdmVzIGFzIGV4cGVjdGVkLiBMZXQncyBzZWUgaG93IHRob3NlIG9wdGlvbnMgYXJlIHN0cnVjdHVyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODA3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTc6MTY6MzUuMTI0NzIyMzY1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTA1NjU5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlJJREdFX1ZMQU5fRklMVEVSSU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9LY29uZmlnPTM2PWNvbmZpZyBCUklER0VfSUdNUF9TTk9PUElOR1xcbi0tXFxubmV0L2JyaWRnZS9LY29uZmlnLTQ5LVxcbm5ldC9icmlkZ2UvS2NvbmZpZzo1MDpjb25maWcgQlJJREdFX1ZMQU5fRklMVEVSSU5HXFxubmV0L2JyaWRnZS9LY29uZmlnLTUxLVxcdGJvb2wgXFxcIlZMQU4gZmlsdGVyaW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNzoxNjozNS4xNjk3ODQzNDhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzQ5OTY2MTkwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgdGhlIEJyaWRnZSBDb25maWd1cmF0aW9uIEZpbGUqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGBuZXQvYnJpZGdlL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA1MC4gSSdtIGd1ZXNzaW5nIHRoYXQncyB3aGVyZSBzb21lIG9mIHRoZSBjb3JlIGJyaWRnZSBmdW5jdGlvbmFsaXR5IG9wdGlvbnMgYXJlIGRlZmluZWQuIEknbSBsaWtlbHkgYWZ0ZXIgdGhlIGJvb2xlYW4gY29uZmlndXJhdGlvbnMgdGhhdCBtYW5hZ2UgdGhlIGJyaWRnZSBpdHNlbGYsIG9yIHBvdGVudGlhbGx5IHRoZSBwYXJhbWV0ZXJzIG9mIGEgYnJpZGdlIHBvcnQuIEkgd2FudCB0byBhc3Nlc3MgdGhlIGNvbmZpZ3VyYWJpbGl0eSBvZiB0aGUgZmVhdHVyZXMgYW5kIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGF0IGNvbXBpbGUgdGltZS4gUGVyaGFwcyBJJ20gbG9va2luZyB0byB1bmRlcnN0YW5kIGhvdyBhIHNwZWNpZmljIGZlYXR1cmUgaXMgZW5hYmxlZCBvciBkaXNhYmxlZCwgb3IgbWF5YmUgSSdtIHRyeWluZyB0byBkaWFnbm9zZSBhIGJ1aWxkIGlzc3VlIHJlbGF0ZWQgdG8gYnJpZGdpbmcuIEhvcGVmdWxseSwgdGhlIEtjb25maWcgZW50cmllcyBhcmUgd2VsbC1kb2N1bWVudGVkLCBtYWtpbmcgdGhpcyBhbmFseXNpcyByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZC4gSSdtIHByZXBhcmluZyBteXNlbGYgdG8gcGFyc2UgdGhlIGRlcGVuZGVuY2llcyBhbmQgaGVscCBzdHJpbmdzIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlIG9mIGFueSBwYXJ0aWN1bGFyIG9wdGlvbiBJJ20gaW50ZXJlc3RlZCBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxMDksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNzoxNjozOC42Njk0NDg5OTJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzcwNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JyaWRnZS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQ1OlxcdFxcbiAgNDY6XFx0XFx0ICBTYXkgTiB0byBleGNsdWRlIHRoaXMgc3VwcG9ydCBhbmQgcmVkdWNlIHRoZSBiaW5hcnkgc2l6ZS5cXG4gIDQ3OlxcdFxcbiAgNDg6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAgNDk6XFx0XFxuICA1MDpcXHRjb25maWcgQlJJREdFX1ZMQU5fRklMVEVSSU5HXFxuICA1MTpcXHRcXHRib29sIFxcXCJWTEFOIGZpbHRlcmluZ1xcXCJcXG4gIDUyOlxcdFxcdGRlcGVuZHMgb24gQlJJREdFXFxuICA1MzpcXHRcXHRkZXBlbmRzIG9uIFZMQU5fODAyMVFcXG4gIDU0OlxcdFxcdGRlZmF1bHQgblxcbiAgNTU6XFx0XFx0aGVscFxcbiAgNTY6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB0aGUgRXRoZXJuZXQgYnJpZGdlIHdpbGwgYmUgYWJsZSBzZWxlY3RpdmVseVxcbiAgNTc6XFx0XFx0ICByZWNlaXZlIGFuZCBmb3J3YXJkIHRyYWZmaWMgYmFzZWQgb24gVkxBTiBpbmZvcm1hdGlvbiBpbiB0aGUgcGFja2V0XFxuICA1ODpcXHRcXHQgIGFueSBWTEFOIGluZm9ybWF0aW9uIGNvbmZpZ3VyZWQgb24gdGhlIGJyaWRnZSBwb3J0IG9yIGJyaWRnZSBkZXZpY2UuXFxuICA1OTpcXHRcXG4gIDYwOlxcdFxcdCAgU2F5IE4gdG8gZXhjbHVkZSB0aGlzIHN1cHBvcnQgYW5kIHJlZHVjZSB0aGUgYmluYXJ5IHNpemUuXFxuICA2MTpcXHRcXG4gIDYyOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gIDYzOlxcdFxcbiAgNjQ6XFx0Y29uZmlnIEJSSURHRV9NUlBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTc6MTY6MzguNjY5NTI4MDEyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIyODI2ODE5ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6XG5cbioqRGVwZW5kZW5jaWVzIGFuZCBTd2l0Y2hkZXYgSW50ZWdyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgQlJJREdFX1ZMQU5fRklMVEVSSU5HYC4gSXQncyBwcmV0dHkgY2xlYXIgdGhhdCBpdCBoYXMgZGVwZW5kZW5jaWVzIG9uIGBCUklER0VgIGFuZCBgVkxBTl84MDIxUWAg4oCTIHRoYXQncyBleHBlY3RlZC4gTm93LCB3aGF0J3MgbmFnZ2luZyBtZSBpcyB0aGUgc3dpdGNoZGV2IGludm9sdmVtZW50LiBJJ20gc2VlaW5nIGBzd2l0Y2hkZXZfcG9ydF9hdHRyX3NldGAgYmVpbmcgdXNlZCwgYW5kIHRoYXQgbWFrZXMgbWUgd29uZGVyIGlmIGBORVRfU1dJVENIREVWYCBpcyBhICpoYXJkKiByZXF1aXJlbWVudCBoZXJlLiBJIG5lZWQgdG8gY2xhcmlmeSB0aGF0LiBSaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgY29kZeKApiBJJ2xsIGhlYWQgb3ZlciB0byBgaW5jbHVkZS9uZXQvc3dpdGNoZGV2LmhgIGFuZCBjaGVjayB3aGVyZSBgc3dpdGNoZGV2X3BvcnRfYXR0cl9zZXRgIGlzIGFjdHVhbGx5IGRlZmluZWQuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGRlZmluaXRpdmUgYW5zd2VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjU5NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTc6MTY6NDAuOTUyMjEzMzEzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjIzNTEyNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3dpdGNoZGV2X3BvcnRfYXR0cl9zZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvc3dpdGNoZGV2Lmg9MzA4PXZvaWQgc3dpdGNoZGV2X2RlZmVycmVkX3Byb2Nlc3Modm9pZCk7XFxuaW5jbHVkZS9uZXQvc3dpdGNoZGV2Lmg6MzA5OmludCBzd2l0Y2hkZXZfcG9ydF9hdHRyX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmluY2x1ZGUvbmV0L3N3aXRjaGRldi5oLTMxMC1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHN3aXRjaGRldl9hdHRyICphdHRyLFxcbi0tXFxuaW5jbHVkZS9uZXQvc3dpdGNoZGV2Lmg9Mzk2PXN0YXRpYyBpbmxpbmUgdm9pZCBzd2l0Y2hkZXZfZGVmZXJyZWRfcHJvY2Vzcyh2b2lkKVxcbi0tXFxuaW5jbHVkZS9uZXQvc3dpdGNoZGV2LmgtMzk5LVxcbmluY2x1ZGUvbmV0L3N3aXRjaGRldi5oOjQwMDpzdGF0aWMgaW5saW5lIGludCBzd2l0Y2hkZXZfcG9ydF9hdHRyX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmluY2x1ZGUvbmV0L3N3aXRjaGRldi5oLTQwMS1cXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfYXR0ciAqYXR0cixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTc6MTY6NDEuMDc0NTcwNDAzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjk2NTI2MzIyODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBORVRfU1dJVENIREVWYCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYE5FVF9TV0lUQ0hERVZgLiBSaWdodCwgaXQgbG9va3MgbGlrZSBpdCdzIGRlZmluZWQgaW4gYG5ldC9LY29uZmlnYCwgc28gdGhhdCdzIHdoZXJlIEkgbmVlZCB0byBzdGFydC4gTGV0J3MgaGVhZCBvdmVyIHRoZXJlIGFuZCB0YWtlIGEgbG9vayBhdCB3aGF0J3MgZ29pbmcgb24gd2l0aCBgTkVUX1NXSVRDSERFVmAuIE5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgZGVzY3JpcHRpb24sIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgb25lLiBUaW1lIHRvIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwNzksIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNzoxNjo1MC43MjcyMDQ3MjFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDQ3MzM1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9TV0lUQ0hERVZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3N3aXRjaGRldi9LY29uZmlnLTUtXFxubmV0L3N3aXRjaGRldi9LY29uZmlnOjY6Y29uZmlnIE5FVF9TV0lUQ0hERVZcXG5uZXQvc3dpdGNoZGV2L0tjb25maWctNy1cXHRib29sIFxcXCJTd2l0Y2ggKGFuZCBzd2l0Y2gtaXNoKSBkZXZpY2Ugc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTc6MTY6NTIuMjcxOTQ0NTUxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ5MzQzOTI1MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogU3dpdGNoZGV2LCBCcmlkZ2UsIGFuZCBWTEFOIEludGVyYWN0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGBzd2l0Y2hkZXZfcG9ydF9hdHRyX3NldGAgaXMgdGhlIGtleS4gSSBzZWUgaXQncyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIHVuZGVyIGBDT05GSUdfTkVUX1NXSVRDSERFVmAuIElmIHRoYXQncyAqbm90KiBlbmFibGVkLCBpdCByZXR1cm5zIGAtRU9QTk9UU1VQUGAsIHdoaWNoIGlzIGFzIGV4cGVjdGVkLiBgTkVUX1NXSVRDSERFVmAgaXMgdHlwaWNhbGx5IHNlbGVjdGVkIHdoZW4gd2UncmUgZGVhbGluZyB3aXRoIHN3aXRjaGRldiBvZmZsb2Fkcywgc28gdGhhdCBtYWtlcyBzZW5zZS4gV2UncmUgb2J2aW91c2x5IGRlYWxpbmcgd2l0aCBicmlkZ2luZy4gU28sIGBDT05GSUdfQlJJREdFYCBhbmQgcHJvYmFibHkgYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgLCBhbmQgYENPTkZJR19WTEFOXzgwMjFRYCBhcmUgYWxzbyBpbiBwbGF5IGhlcmUuXG5cbk5vdywgbG9va2luZyBhdCB0aGUgcGF0Y2ggaXRzZWxmLCB0aGUgbWFpbiBjaGFuZ2Ugc2VlbXMgdG8gYmUgd2l0aGluIGBicl9tc3Rfc2V0X3N0YXRlYC4gU3BlY2lmaWNhbGx5LCB3ZSBhcmUgcmVtb3ZpbmcgdGhlIFJDVSByZWFkIGxvY2svdW5sb2NrIGFyb3VuZCB0aGUgYHN3aXRjaGRldl9wb3J0X2F0dHJfc2V0YCBjYWxsIGFuZCB0aGUgdmxhbiBsaXN0IGl0ZXJhdGlvbi4gSXQgbG9va3MgbGlrZSBpdCB3YXMgb25seSBiZWluZyBjYWxsZWQgZm9yIG5vbi16ZXJvIGBtc3RpYCwgYW5kIHRoaXMgY29kZSBpcyBtYW5hZ2luZyBNU1RJcyBhbmQgdGhlaXIgc3RhdGVzLiBUaGUgY29tbWVudCBjbGFyaWZpZXMgdGhhdCBNU1RJIDAgKENTVCkgc3RhdGUgY2hhbmdlcyBhcmUgaGFuZGxlZCB2aWEgYFNXSVRDSERFVl9BVFRSX0lEX1BPUlRfU1RQX1NUQVRFYCwgd2hpbGUgb3RoZXIgTVNUSXMgKG5vbi16ZXJvKSBhcmUgaGFuZGxlZCB2aWEgbmV0bGluayB3aXRoIFJUTkwgaGVsZC4gVGhlIGFkZGVkIGBBU1NFUlRfUlROTCgpYCBtYWtlcyBpdCBleHBsaWNpdCB0aGF0IHdlIGV4cGVjdCB0aGUgUlROTCBsb2NrIHRvIGJlIGhlbGQgaW4gdGhhdCBicmFuY2guIFRoZSBSQ1UgcmVhZCBsb2NrIGlzIG5vdyBkb25lIGFmdGVyIHRoZSBwb3RlbnRpYWxseSBmYWlsaW5nIGNhbGwgdG8gYHN3aXRjaGRldl9wb3J0X2F0dHJfc2V0YC5cblxuU28sIHRoZSBpc3N1ZSBpcyBsaWtlbHkgcmVsYXRlZCB0byB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgYHN3aXRjaGRldmAgcGF0aCwgd2hpY2ggdXNlcyBuZXRsaW5rLCBhbmQgdGhlIFZMQU4gc3RhdGUgbWFuYWdlbWVudCBpbiB0aGUgYnJpZGdlLiBNeSBndWVzcyBpcyB0aGF0IHRoZSBvcmlnaW5hbCBjb2RlIGNvdWxkIGxlYWQgdG8gYSByYWNlIGNvbmRpdGlvbiBvciBzb21lIG90aGVyIGNvbmN1cnJlbmN5IGlzc3VlIHdoZW4gc2V0dGluZyBNU1RJIHN0YXRlcy5cblxuSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBnaXQgbG9nIG9yIHRoZSBzcGVjaWZpYyBjb21taXQgbWVzc2FnZSB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgY2hhbmdlIHdhcyBuZWNlc3NhcnkuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGV4YWN0IHByb2JsZW0gaXQncyBzb2x2aW5nIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2Ygc3dpdGNoZGV2IGFuZCBicmlkZ2luZyBpbiB0aGUga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI5NSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNzoxNjo1Ny4yMDYzMzk1MjNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTA0MTQxMywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2xlZXBpbmcgZnVuY3Rpb24gY2FsbGVkIGZyb20gaW52YWxpZCBjb250ZXh0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE3OjE2OjU3LjQzMTM4ODU2NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3MzEwMjk5OTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgQW5hbHlzaXMgb2YgYSBLZXJuZWwgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBleGFtaW5lIHRoaXMgYHN3aXRjaGRldl9wb3J0X2F0dHJfc2V0YCBmdW5jdGlvbi4gVGhlIGtleSBoZXJlIGlzIHRoZSBwb3RlbnRpYWwgZm9yIGJsb2NraW5nIG5vdGlmaWVycywgdXNpbmcgdGhhdCBgcndzZW1gLCB3aGljaCBjYW4gbGVhZCB0byBzbGVlcGluZyBpbiBhIHBvdGVudGlhbGx5IGludmFsaWQgY29udGV4dCwgc3BlY2lmaWNhbGx5IGluc2lkZSBvZiBgcmN1X3JlYWRfbG9jaygpYC4gVGhlIGZpeCBwcm9wb3NlcyBtb3ZpbmcgdGhlIFJDVSBsb2NrLCB3aGljaCBpbW1lZGlhdGVseSByYWlzZXMgYSByZWQgZmxhZyBmb3IgbWUg4oCTIGFueSBjaGFuZ2UgaW4gbG9ja2luZyBvcmRlciBkZW1hbmRzIHNjcnV0aW55LiBUaGUgYWRkaXRpb24gb2YgYEFTU0VSVF9SVE5MKClgIHdoZW4gYG1zdGkgIT0gMGAgaXMgYW5vdGhlciBwb2ludCBvZiBpbnRlcmVzdC5cblxuVGhlIG5leHQgY3JpdGljYWwgc3RlcCBpcyBhc3Nlc3NpbmcgcmVhY2hhYmlsaXR5IGluIHR5cGljYWwgZnV6emluZyBlbnZpcm9ubWVudHMuIFRoYW5rZnVsbHksIGl0IGxvb2tzIGxpa2UgdGhpcyBjb2RlICppcyogcmVhY2hhYmxlLiBTeXprYWxsZXIgYWN0aXZlbHkgbWFuaXB1bGF0ZXMgYnJpZGdlIGRldmljZXMgYW5kIGNvbmZpZ3VyYXRpb25zIHZpYSBydG5ldGxpbmssIHdpdGggb3BlcmF0aW9ucyBsaWtlIHNldHRpbmcgVkxBTnMsIE1TVCwgYW5kIG5ldGxpbmsgYXR0cmlidXRlcywgdXRpbGl6aW5nIGBSVE1fU0VUTElOS2AgYW5kIHZhcmlvdXMgYElGTEFfKmAgYXR0cmlidXRlcy4gIEZ1cnRoZXJtb3JlLCBgYnJfbXN0X3NldF9zdGF0ZWAgYXBwZWFycyByZWFjaGFibGUgdGhyb3VnaCBib3RoIG5ldGxpbmsgKHZpYSBgYnJfYWZzcGVjYCAtXHUwMDNlIGBicl9tc3RfcHJvY2Vzc2AgLVx1MDAzZSBgYnJfbXN0X3Byb2Nlc3Nfb25lYCAtXHUwMDNlIGBicl9tc3Rfc2V0X3N0YXRlYCkgYW5kIGFsc28gdmlhIGBicl9zdHAuY2AgKHRocm91Z2ggYGJyX3NldF9zdGF0ZWApLlxuXG5Ob3csIGNvbnNpZGVyaW5nIHRoZSBwYXRjaCdzIGNvcmUgY2hhbmdlIG9mIGFsdGVyaW5nIHRoZSBsb2NraW5nIG9yZGVyIGFuZCBpbnRyb2R1Y2luZyBhbiBhc3NlcnRpb24sIHRoaXMgKmFic29sdXRlbHkqIHNjcmVhbXMgZm9yIGZ1enppbmcuIFBlciBvdXIgZXN0YWJsaXNoZWQgdHJpYWdlIHBoaWxvc29waHksIGFueSBtb2RpZmljYXRpb24gb2YgYXNzZXJ0aW9ucyBpbiByZWFjaGFibGUgY29kZSBwYXRocywgZXNwZWNpYWxseSB0aG9zZSBlbmZvcmNpbmcgbmV3IGludmFyaWFudHMsIHJlcXVpcmVzIHRob3JvdWdoIGZ1enppbmcuIFRoaXMgYXBwbGllcyBlc3BlY2lhbGx5IHNpbmNlIHRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCwgc3luY2hyb25pemF0aW9uLCBhbmQgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uYWxpdGllcyB3aGljaCBhcmUgd2l0aGluIHRoZSBzY29wZSBvZiBjb2RlIHdlIGNvbnNpZGVyIHdvcnRoeSBvZiBmdXp6aW5nLiBUaGVyZWZvcmUsIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGlzIGlzIGEgZGVmaW5pdGUgYFdvcnRoRnV6emluZyA9IHRydWVgIHNpdHVhdGlvbi5cblxuTmV4dCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBjcnVjaWFsIHN5bWJvbHMgdG8gdGFyZ2V0IHdpdGggdGhlIGZ1enplci4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiBmdW5jdGlvbnMgb2YgaW50ZXJlc3QgYXJlOiBgYnJfbXN0X3NldF9zdGF0ZWAgKHRoZSBtb2RpZmllZCBmdW5jdGlvbiBpdHNlbGYpLCBgYnJfbXN0X3Byb2Nlc3NgICh0aGUgbmV0bGluayBlbnRyeSksIGBicl9tc3RfcHJvY2Vzc19vbmVgLCBgYnJfc2V0X3N0YXRlYCwgYW5kIGBicl9tc3Rfc2V0X2VuYWJsZWRgLiBBIHF1aWNrIGNoZWNrIHJldmVhbHMgdGhhdCB0aGVzZSBzeW1ib2xzIGFyZSBub3QgZGVjbGFyZWQgYXMgc3RhdGljICh0aGV5IGFyZSBkZWNsYXJlZCBpbiBgbmV0L2JyaWRnZS9icl9wcml2YXRlLmhgKSB3aGljaCBtZWFucyB0aGF0IHN5emthbGxlciwgd2hpY2ggdHlwaWNhbGx5IGZvY3VzZXMgb24gbm9uLXN0YXRpYyBvciBleHBvcnRlZC9nbG9iYWwgc3ltYm9scywgY2FuIHRhcmdldCB0aGVtLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBicl9tc3RfcHJvY2Vzc19vbmVgIGlzbid0IGlubGluZWQsIGJ1dCBzaW5jZSBpdCBpcyBjYWxsZWQgd2l0aGluIG5vbi1zdGF0aWMgc3ltYm9scywgSSB0aGluayB3ZSBhcmUgZ29vZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzOTEsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTc6MTc6MDQuNzQxNjkxNjY0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjUyMzYyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgYnJfbXN0X1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfbXN0LmM9MjU9dm9pZCBicl9tc3RfdW5pbml0KHN0cnVjdCBuZXRfYnJpZGdlICpicilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMzAtXFxubmV0L2JyaWRnZS9icl9tc3QuYzozMTppbnQgYnJfbXN0X2dldF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBtc3RpLCB1bnNpZ25lZCBsb25nICp2aWRzKVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMzIte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tc3QuYz01NT1FWFBPUlRfU1lNQk9MX0dQTChicl9tc3RfZ2V0X2luZm8pO1xcbm5ldC9icmlkZ2UvYnJfbXN0LmMtNTYtXFxubmV0L2JyaWRnZS9icl9tc3QuYzo1NzppbnQgYnJfbXN0X2dldF9zdGF0ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgbXN0aSwgdTggKnN0YXRlKVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtNTgte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tc3QuYz04Mj1zdGF0aWMgdm9pZCBicl9tc3Rfdmxhbl9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21zdC5jLTk0LVxcbm5ldC9icmlkZ2UvYnJfbXN0LmM6OTU6aW50IGJyX21zdF9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IG1zdGksIHU4IHN0YXRlLFxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtOTYtXFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21zdC5jPTE0MT1zdGF0aWMgdm9pZCBicl9tc3Rfdmxhbl9zeW5jX3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnB2LCB1MTYgbXN0aSlcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMTYwLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmM6MTYxOmludCBicl9tc3Rfdmxhbl9zZXRfbXN0aShzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICptdiwgdTE2IG1zdGkpXFxubmV0L2JyaWRnZS9icl9tc3QuYy0xNjIte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tc3QuYz0xOTY9dm9pZCBicl9tc3Rfdmxhbl9pbml0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21zdC5jLTIwNi1cXG5uZXQvYnJpZGdlL2JyX21zdC5jOjIwNzppbnQgYnJfbXN0X3NldF9lbmFibGVkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcXG5uZXQvYnJpZGdlL2JyX21zdC5jLTIwOC1cXHRcXHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tc3QuYz0yNDY9c2l6ZV90IGJyX21zdF9pbmZvX3NpemUoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21zdC5jLTI3MS1cXG5uZXQvYnJpZGdlL2JyX21zdC5jOjI3MjppbnQgYnJfbXN0X2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMjczLVxcdFxcdCAgICAgY29uc3Qgc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21zdC5jPTI5OT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgYnJfbXN0X25sX3BvbGljeVtJRkxBX0JSSURHRV9NU1RfRU5UUllfTUFYICsgMV0gPSB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21zdC5jLTMwNy1cXG5uZXQvYnJpZGdlL2JyX21zdC5jOjMwODpzdGF0aWMgaW50IGJyX21zdF9wcm9jZXNzX29uZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMzA5LVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21zdC5jLTMzNy1cXG5uZXQvYnJpZGdlL2JyX21zdC5jOjMzODppbnQgYnJfbXN0X3Byb2Nlc3Moc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgY29uc3Qgc3RydWN0IG5sYXR0ciAqbXN0X2F0dHIsXFxubmV0L2JyaWRnZS9icl9tc3QuYy0zMzktXFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTk1MD1zdGF0aWMgaW5saW5lIGJvb2wgYnJfbXN0X2lzX2VuYWJsZWQoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NTctXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTk1ODppbnQgYnJfbXN0X3NldF9zdGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCB1MTYgbXN0aSwgdTggc3RhdGUsXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk1OS1cXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTk2MDppbnQgYnJfbXN0X3ZsYW5fc2V0X21zdGkoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTE2IG1zdGkpO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NjEtdm9pZCBicl9tc3Rfdmxhbl9pbml0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYpO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE5NjI6aW50IGJyX21zdF9zZXRfZW5hYmxlZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk2My1cXHRcXHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xOTY0PXNpemVfdCBicl9tc3RfaW5mb19zaXplKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTY1OmludCBicl9tc3RfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk2Ni1cXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTY3OmludCBicl9tc3RfcHJvY2VzcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBjb25zdCBzdHJ1Y3QgbmxhdHRyICptc3RfYXR0cixcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTY4LVxcdFxcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xOTcxPXN0YXRpYyBpbmxpbmUgYm9vbCBicl9tc3RfaXNfZW5hYmxlZChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk3NS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTc2OnN0YXRpYyBpbmxpbmUgaW50IGJyX21zdF9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IG1zdGksXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk3Ny1cXHRcXHRcXHRcXHQgICB1OCBzdGF0ZSwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk4MS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTgyOnN0YXRpYyBpbmxpbmUgaW50IGJyX21zdF9zZXRfZW5hYmxlZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk4My1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE5ODg9c3RhdGljIGlubGluZSBzaXplX3QgYnJfbXN0X2luZm9fc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5OTItXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTk5MzpzdGF0aWMgaW5saW5lIGludCBicl9tc3RfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTk5NC1cXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5OTgtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTk5OTpzdGF0aWMgaW5saW5lIGludCBicl9tc3RfcHJvY2VzcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTIwMDAtXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBubGF0dHIgKm1zdF9hdHRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNzoxNzowNC43ODgyMjE3MDZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjA4MTg4MTAxMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNU1QgU3RhdGUgQ29uZmlndXJhdGlvbiBQcm9jZXNzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIGBicl9tc3Rfc2V0X3N0YXRlYCBpcyB0aGUgY29yZSBmdW5jdGlvbiB3ZSdyZSBpbnRlcmVzdGVkIGluLiBUaGUgbW9kaWZpY2F0aW9uIHNlZW1zIHRvIGNlbnRlciB0aGVyZS4gVGhlIGNydWNpYWwgbGluayBhcHBlYXJzIHRvIGJlIGBicl9tc3RfcHJvY2Vzc2AsIHRoZSBuZXRsaW5rIGhhbmRsZXIsIHdoaWNoIGNhbGxzIGBicl9tc3Rfc2V0X3N0YXRlYCB0aHJvdWdoIGBicl9tc3RfcHJvY2Vzc19vbmVgLiBUaGlzIHN1Z2dlc3RzIG5ldGxpbmsgaXMgaG93IHRoZSBNU1Qgc3RhdGUgaXMgYmVpbmcgdXBkYXRlZCwgd2hpY2ggaXMgcHJldHR5IHN0YW5kYXJkLiBJbnRlcmVzdGluZyB0b28sIGBicl9zZXRfc3RhdGVgIGluIGBicl9zdHAuY2AgYWxzbyBjYWxscyBgYnJfbXN0X3NldF9zdGF0ZWAgYnV0IHdpdGggc29tZSBzcGVjaWZpYyBhcmd1bWVudHM7IHBhcnRpY3VsYXJseSBgMGAgYW5kIGBOVUxMYC4gVGhpcyBtYXkgYmUgYW4gaW5pdGlhbGl6YXRpb24gb3IgZGVmYXVsdCBzdGF0ZSBzZXR0ZXIuXG5cbk5vdywgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBNU1QgZW50cmllcyBhcmUgYWN0dWFsbHkgKmNvbmZpZ3VyZWQqIGluIHRoZSBmaXJzdCBwbGFjZSwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgYGJyX21zdF9wcm9jZXNzYCBhZ2FpbiBhbmQgYWxzbyBsb29rIGludG8gYGJyX2Fmc3BlY2AuIFRoZXkncmUgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciB0aGUgaW5pdGlhbCBzZXR1cCBvZiB0aGVzZSBlbnRyaWVzLiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhvc2UgbW9kdWxlcyBhbmQgc2VlIGhvdyB0aGlzIGFsbCBmaXRzIHRvZ2V0aGVyIHRvIGNvbnRyb2wgdGhlIE1TVCBzdGF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc3MjQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTc6MTc6MjUuNjA3MDM1NDE4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9icmlkZ2UvYnJfbXN0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzMwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzMwOlxcdFxcdH1cXG4gMzMxOlxcdFxcbiAzMzI6XFx0XFx0bXN0aSA9IG5sYV9nZXRfdTE2KHRiW0lGTEFfQlJJREdFX01TVF9FTlRSWV9NU1RJXSk7XFxuIDMzMzpcXHRcXHRzdGF0ZSA9IG5sYV9nZXRfdTgodGJbSUZMQV9CUklER0VfTVNUX0VOVFJZX1NUQVRFXSk7XFxuIDMzNDpcXHRcXG4gMzM1OlxcdFxcdHJldHVybiBicl9tc3Rfc2V0X3N0YXRlKHAsIG1zdGksIHN0YXRlLCBleHRhY2spO1xcbiAzMzY6XFx0fVxcbiAzMzc6XFx0XFxuIDMzODpcXHRpbnQgYnJfbXN0X3Byb2Nlc3Moc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgY29uc3Qgc3RydWN0IG5sYXR0ciAqbXN0X2F0dHIsXFxuIDMzOTpcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDM0MDpcXHR7XFxuIDM0MTpcXHRcXHRzdHJ1Y3QgbmxhdHRyICphdHRyO1xcbiAzNDI6XFx0XFx0aW50IGVyciwgbXN0cyA9IDA7XFxuIDM0MzpcXHRcXHRpbnQgcmVtO1xcbiAzNDQ6XFx0XFxuIDM0NTpcXHRcXHRpZiAoIWJyX29wdF9nZXQocC1cXHUwMDNlYnIsIEJST1BUX01TVF9FTkFCTEVEKSkge1xcbiAzNDY6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIkNhbid0IG1vZGlmeSBNU1Qgc3RhdGUgd2hlbiBNU1QgaXMgZGlzYWJsZWRcXFwiKTtcXG4gMzQ3OlxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIDM0ODpcXHRcXHR9XFxuIDM0OTpcXHRcXG4gMzUwOlxcdFxcdG5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgbXN0X2F0dHIsIHJlbSkge1xcbiAzNTE6XFx0XFx0XFx0c3dpdGNoIChubGFfdHlwZShhdHRyKSkge1xcbiAzNTI6XFx0XFx0XFx0Y2FzZSBJRkxBX0JSSURHRV9NU1RfRU5UUlk6XFxuIDM1MzpcXHRcXHRcXHRcXHRlcnIgPSBicl9tc3RfcHJvY2Vzc19vbmUocCwgYXR0ciwgZXh0YWNrKTtcXG4gMzU0OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAzNTU6XFx0XFx0XFx0ZGVmYXVsdDpcXG4gMzU2OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAzNTc6XFx0XFx0XFx0fVxcbiAzNTg6XFx0XFxuIDM1OTpcXHRcXHRcXHRtc3RzKys7XFxuIDM2MDpcXHRcXHRcXHRpZiAoZXJyKVxcbiAzNjE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDM2MjpcXHRcXHR9XFxuIDM2MzpcXHRcXG4gMzY0OlxcdFxcdGlmICghbXN0cykge1xcbiAzNjU6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIkZvdW5kIG5vIE1TVCBlbnRyaWVzIHRvIHByb2Nlc3NcXFwiKTtcXG4gMzY2OlxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuIDM2NzpcXHRcXHR9XFxuIDM2ODpcXHRcXG4gMzY5OlxcdFxcdHJldHVybiBlcnI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE3OjE3OjI1LjYwNzEyNDI5OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMTA2MDI4OTMwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBBU1NFUlRfUlROTCgpYCBNYWNybyoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGBBU1NFUlRfUlROTCgpYCBtYWNybyBpcyBkb2luZy4gTGV0J3MgZGlnIGludG8gaXRzIGRlZmluaXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0J3MgdXNlZCBhbmQgd2hhdCBzb3J0IG9mIGNvbmRpdGlvbnMgaXQncyBkZXNpZ25lZCB0byBjaGVjay4gSXMgaXQgcmVsYXRlZCB0byBlbnN1cmluZyBhIHBhcnRpY3VsYXIgUlROTCBzZXF1ZW5jZSBvciBzdGF0ZT8gSXMgaXQgdXNlZCBmb3IgZGVidWdnaW5nLCBvciBpcyBpdCBkaXJlY3RseSB0aWVkIHRvIGNyaXRpY2FsIHJ1bnRpbWUgbG9naWM/IEtub3dpbmcgaXRzIGV4YWN0IGltcGxlbWVudGF0aW9uIGlzIHRoZSBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgY29kZWJhc2UuIFdoYXQgZGVwZW5kZW5jaWVzIGRvZXMgaXQgcmVseSBvbj8gQXJlIHRoZXJlIGFueSBzdWJ0bGUgc2lkZSBlZmZlY3RzIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBJIG5lZWQgdG8gYnVpbGQgYSBtZW50YWwgbW9kZWwgb2YgdGhpcyBtYWNybyBhbmQgaG93IGl0IG9wZXJhdGVzLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2OTUsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE3OjE3OjM2LjY2NzQxNzE3OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2MDk4Nzg5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIEFTU0VSVF9SVE5MXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvcnRuZXRsaW5rLmg9NTM9ZXh0ZXJuIHN0cnVjdCByd19zZW1hcGhvcmUgbmV0X3J3c2VtO1xcbmluY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgtNTQtXFxuaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaDo1NTojZGVmaW5lIEFTU0VSVF9SVE5MKCkgXFxcXFxcbmluY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgtNTYtXFx0V0FSTl9PTkNFKCFydG5sX2lzX2xvY2tlZCgpLCBcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oPTEwOT1ib29sIHJ0bmxfbmV0X2lzX2xvY2tlZChzdHJ1Y3QgbmV0ICpuZXQpO1xcbmluY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgtMTEwLVxcbmluY2x1ZGUvbGludXgvcnRuZXRsaW5rLmg6MTExOiNkZWZpbmUgQVNTRVJUX1JUTkxfTkVUKG5ldClcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaC0xMTItXFx0V0FSTl9PTkNFKCFydG5sX25ldF9pc19sb2NrZWQobmV0KSxcXHRcXHRcXHRcXHRcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE3OjE3OjM4LjEyODQxMzUwMloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNzk0MjMyMDY2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJUTkwgTG9jayBBc3NlcnRpb24gaW4gQnJpZGdlIE1TVCBTdGF0ZSBTZXR0aW5nKipcblxuT2theSwgc28gYEFTU0VSVF9SVE5MKClgIGlzIGp1c3QgYSBgV0FSTl9PTkNFYCBtYWNybywgdGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZC4gSXQncyBtZWFudCB0byBmbGFnIGlmIHRoZSBSVE5MIChSb3V0aW5nIFRhYmxlIE5leHQgTGV2ZWwpIGxvY2sgaXNuJ3QgaGVsZCB3aGVuIGl0J3MgY2FsbGVkLiBUaGlzIGFzc2VydGlvbiB3YXMgYWRkZWQgd2l0aGluIHRoZSBgYnJfbXN0X3NldF9zdGF0ZWAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBpZiAobXN0aSlgIGJyYW5jaC4gVGhlIHByaW1hcnkgcXVlc3Rpb24gYmVjb21lczogKnVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcyBpcyBgYnJfbXN0X3NldF9zdGF0ZWAgaW52b2tlZCBhbmQgd2h5IGlzIGhvbGRpbmcgdGhlIFJUTkwgbG9jayBjcml0aWNhbCB0aGVyZT8qXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgY2FsbGVycy4gSSByZW1lbWJlcjpcblxuMS4gIGBicl9tc3RfcHJvY2Vzc19vbmVgLCB0aGVuIHRocm91Z2ggYGJyX21zdF9wcm9jZXNzYCwgdGhlbiBgYnJfYWZzcGVjYCwgYW5kIGZpbmFsbHkgYGJyX3NldGxpbmtgLiAgQ3J1Y2lhbGx5LCBgYnJfc2V0bGlua2AgKmRvZXMqIGhvbGQgdGhlIFJUTkwgbG9jay5cbjIuICBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyB0aGUgKm9ubHkqIGNhbGwgcGF0aC5cbiAgICBBIHF1aWNrIHNjYW4gb2YgdGhlIGBicl9tc3Rfc2V0X3N0YXRlYCBmdW5jdGlvbiBpdHNlbGYgcmV2ZWFscyBhbm90aGVyIGNhbGwgaW4gYGJyX3NldF9zdGF0ZWAuIEhvd2V2ZXIsIHRoaXMgY2FsbCBwYXNzZXMgYG1zdGkgPSAwYCwgc28gdGhlIGFzc2VydGlvbiBpbiB0aGUgYGlmYCBzdGF0ZW1lbnQgd29uJ3QgdHJpZ2dlci5cblxuU2luY2UgYGJyX21zdF9zZXRfc3RhdGVgIGlzIG5vbi1zdGF0aWMgYW5kIGRlY2xhcmVkIGluIGBicl9wcml2YXRlLmhgLCBJIG5lZWQgdG8ga2VlcCBhbiBvcGVuIG1pbmQgZm9yIGFkZGl0aW9uYWwgY2FsbCBzaXRlcyB0aGF0IG1pZ2h0IGV4aXN0IG91dHNpZGUgb2YgdGhlIHVzdWFsIHN1c3BlY3RzLiBJIG11c3QgY29uc2lkZXIgd2hhdCBlbHNlIG1pZ2h0IGNhbGwgdGhpcyBmdW5jdGlvbi5cblxuSSBhbHNvIHJlbWVtYmVyIGEga2V5IGNoYW5nZSByZWxhdGVkIHRvIGxvY2tpbmcuIFByZXZpb3VzbHksIGFuIGByY3VfcmVhZF9sb2NrKClgIHdhcyBoZWxkIGFjcm9zcyB0aGUgY2FsbCB0byBgc3dpdGNoZGV2X3BvcnRfYXR0cl9zZXQoKWAsIGEgYmxvY2tpbmcgbm90aWZpZXIgdGhhdCBjYXVzZWQgYSBidWcgKGEgc2xlZXBpbmcgZnVuY3Rpb24gYmVpbmcgY2FsbGVkIGZyb20gYW4gaW52YWxpZCBjb250ZXh0KS4gVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQuIE5vdywgdGhlIFJDVSBsb2NrIGlzIG9ubHkgaGVsZCAqYWZ0ZXIqIHRoZSBgc3dpdGNoZGV2YCBjYWxsLiBUaGlzIHJlZmFjdG9yaW5nIGlzIGltcG9ydGFudCBjb250ZXh0LiBUaGUgYEFTU0VSVF9SVE5MKClgIGlzIHNwZWNpZmljYWxseSB0aGVyZSB0byBlbnN1cmUgdGhhdCBmb3IgTVNUIHN0YXRlIHNldHRpbmcgKHdoZW4gYG1zdGkgIT0gMGApIHRoZSBSVE5MIGxvY2sgaXMgcHJvcGVybHkgaGVsZC4gVGhpcyBpcyBjcml0aWNhbCBiZWNhdXNlIGlmIHRoaXMgbG9jayBpc24ndCBoZWxkLCB0aGVuIHRoZXJlIGlzIGEgcmlzayBvZiBhIHJhY2UgY29uZGl0aW9uOiB3aGVyZSB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIGJyaWRnZSBjaGFuZ2VzIGR1ZSB0byBjaGFuZ2VzIHRvIGB2Z2AsIG9yIGl0IGJlaW5nIGZyZWVkLCBiZXR3ZWVuIHRoZSBzdGFydCBvZiB0aGUgZnVuY3Rpb24gYW5kIHRoZSBwb2ludCB0aGF0IGBuYnBfdmxhbl9ncm91cF9yY3UocClgIGlzIGNhbGxlZC4gIE9yIGlmIHN3aXRjaGRldiBmYWlscy5cblxuU28sIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIHNjZW5hcmlvczpcbiogICBSYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIGB2Z2AgY2hhbmdlL2ZyZWUgYW5kIGBuYnBfdmxhbl9ncm91cF9yY3UocClgLlxuKiAgIFJUTkwgbG9jayAqbm90KiBiZWluZyBoZWxkIHdoZW4gYG1zdGkgIT0gMGAuXG4qICAgU3dpdGNoZGV2IGZhaWx1cmVzLlxuXG5OZXh0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIFRoZSBuZWNlc3NhcnkgY29uZmlncyBhcmU6IGBDT05GSUdfQlJJREdFYCwgYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgLCBgQ09ORklHX1ZMQU5fODAyMVFgLCBhbmQgYENPTkZJR19ORVRfU1dJVENIREVWYC4gSSB3aWxsIGNoZWNrIGlmIGVpdGhlciBgQlJJREdFYCBvciBgQlJJREdFX1ZMQU5fRklMVEVSSU5HYCBkaXJlY3RseSBzZWxlY3Qgb3IgZGVwZW5kIG9uIGBORVRfU1dJVENIREVWYCBpbiBgbmV0L2JyaWRnZS9LY29uZmlnYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkxMDksIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTc6MTc6NTYuMDcwNzM2OTg5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzQwMTYwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJTV0lUQ0hERVZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL01ha2VmaWxlPTIzPWJyaWRnZS0kKENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkcpICs9IGJyX3ZsYW4ubyBicl92bGFuX3R1bm5lbC5vIGJyX3ZsYW5fb3B0aW9ucy5vIGJyX21zdC5vXFxubmV0L2JyaWRnZS9NYWtlZmlsZS0yNC1cXG5uZXQvYnJpZGdlL01ha2VmaWxlOjI1OmJyaWRnZS0kKENPTkZJR19ORVRfU1dJVENIREVWKSArPSBicl9zd2l0Y2hkZXYub1xcbm5ldC9icmlkZ2UvTWFrZWZpbGUtMjYtXFxuLS1cXG5uZXQvYnJpZGdlL2JyLmM9MTYyPXN0YXRpYyBpbnQgYnJfc3dpdGNoZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLFxcbi0tXFxubmV0L2JyaWRnZS9ici5jLTE3Ny1cXHRzd2l0Y2ggKGV2ZW50KSB7XFxubmV0L2JyaWRnZS9ici5jOjE3ODpcXHRjYXNlIFNXSVRDSERFVl9GREJfQUREX1RPX0JSSURHRTpcXG5uZXQvYnJpZGdlL2JyLmMtMTc5LVxcdFxcdGZkYl9pbmZvID0gcHRyO1xcbi0tXFxubmV0L2JyaWRnZS9ici5jLTE4OS1cXHRcXHRicmVhaztcXG5uZXQvYnJpZGdlL2JyLmM6MTkwOlxcdGNhc2UgU1dJVENIREVWX0ZEQl9ERUxfVE9fQlJJREdFOlxcbm5ldC9icmlkZ2UvYnIuYy0xOTEtXFx0XFx0ZmRiX2luZm8gPSBwdHI7XFxuLS1cXG5uZXQvYnJpZGdlL2JyLmMtMTk2LVxcdFxcdGJyZWFrO1xcbm5ldC9icmlkZ2UvYnIuYzoxOTc6XFx0Y2FzZSBTV0lUQ0hERVZfRkRCX09GRkxPQURFRDpcXG5uZXQvYnJpZGdlL2JyLmMtMTk4LVxcdFxcdGZkYl9pbmZvID0gcHRyO1xcbi0tXFxubmV0L2JyaWRnZS9ici5jLTIwMS1cXHRcXHRicmVhaztcXG5uZXQvYnJpZGdlL2JyLmM6MjAyOlxcdGNhc2UgU1dJVENIREVWX0ZEQl9GTFVTSF9UT19CUklER0U6XFxubmV0L2JyaWRnZS9ici5jLTIwMy1cXHRcXHRmZGJfaW5mbyA9IHB0cjtcXG4tLVxcbm5ldC9icmlkZ2UvYnIuYz0yMTg9c3RhdGljIGludCBicl9zd2l0Y2hkZXZfYmxvY2tpbmdfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcXG4tLVxcbm5ldC9icmlkZ2UvYnIuYy0yMzItXFx0c3dpdGNoIChldmVudCkge1xcbm5ldC9icmlkZ2UvYnIuYzoyMzM6XFx0Y2FzZSBTV0lUQ0hERVZfQlJQT1JUX09GRkxPQURFRDpcXG5uZXQvYnJpZGdlL2JyLmMtMjM0LVxcdFxcdGJycG9ydF9pbmZvID0gcHRyO1xcbi0tXFxubmV0L2JyaWRnZS9ici5jLTI0MS1cXHRcXHRicmVhaztcXG5uZXQvYnJpZGdlL2JyLmM6MjQyOlxcdGNhc2UgU1dJVENIREVWX0JSUE9SVF9VTk9GRkxPQURFRDpcXG5uZXQvYnJpZGdlL2JyLmMtMjQzLVxcdFxcdGJycG9ydF9pbmZvID0gcHRyO1xcbi0tXFxubmV0L2JyaWRnZS9ici5jLTI0OC1cXHRcXHRicmVhaztcXG5uZXQvYnJpZGdlL2JyLmM6MjQ5OlxcdGNhc2UgU1dJVENIREVWX0JSUE9SVF9SRVBMQVk6XFxubmV0L2JyaWRnZS9ici5jLTI1MC1cXHRcXHRicnBvcnRfaW5mbyA9IHB0cjtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jPTMxPWludCBicl9tcnBfc3dpdGNoZGV2X2FkZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9tcnAgKm1ycClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTM0LVxcdFxcdC5vYmoub3JpZ19kZXYgPSBici1cXHUwMDNlZGV2LFxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jOjM1OlxcdFxcdC5vYmouaWQgPSBTV0lUQ0hERVZfT0JKX0lEX01SUCxcXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYy0zNi1cXHRcXHQucF9wb3J0ID0gcnRubF9kZXJlZmVyZW5jZShtcnAtXFx1MDAzZXBfcG9ydCktXFx1MDAzZWRldixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTQxLVxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jOjQyOlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfTkVUX1NXSVRDSERFVikpXFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtNDMtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYz00OD1pbnQgYnJfbXJwX3N3aXRjaGRldl9kZWwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwICptcnApXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYy01MS1cXHRcXHQub2JqLm9yaWdfZGV2ID0gYnItXFx1MDAzZWRldixcXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYzo1MjpcXHRcXHQub2JqLmlkID0gU1dJVENIREVWX09CSl9JRF9NUlAsXFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtNTMtXFx0XFx0LnBfcG9ydCA9IE5VTEwsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYy01Ny1cXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYzo1ODpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX05FVF9TV0lUQ0hERVYpKVxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTU5LVxcdFxcdHJldHVybiAwO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmM9NjU9YnJfbXJwX3N3aXRjaGRldl9zZXRfcmluZ19yb2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX21ycCAqbXJwLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtNjktXFx0XFx0Lm9iai5vcmlnX2RldiA9IGJyLVxcdTAwM2VkZXYsXFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmM6NzA6XFx0XFx0Lm9iai5pZCA9IFNXSVRDSERFVl9PQkpfSURfUklOR19ST0xFX01SUCxcXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYy03MS1cXHRcXHQucmluZ19yb2xlID0gcm9sZSxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTc3LVxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jOjc4OlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfTkVUX1NXSVRDSERFVikpXFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtNzktXFx0XFx0cmV0dXJuIEJSX01SUF9TVztcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jPTEwMj1icl9tcnBfc3dpdGNoZGV2X3NlbmRfcmluZ190ZXN0KHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX21ycCAqbXJwLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtMTA3LVxcdFxcdC5vYmoub3JpZ19kZXYgPSBici1cXHUwMDNlZGV2LFxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jOjEwODpcXHRcXHQub2JqLmlkID0gU1dJVENIREVWX09CSl9JRF9SSU5HX1RFU1RfTVJQLFxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTEwOS1cXHRcXHQuaW50ZXJ2YWwgPSBpbnRlcnZhbCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTExNS1cXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYzoxMTY6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ORVRfU1dJVENIREVWKSlcXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYy0xMTctXFx0XFx0cmV0dXJuIEJSX01SUF9TVztcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jPTEyMj1pbnQgYnJfbXJwX3N3aXRjaGRldl9zZXRfcmluZ19zdGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYy0xMjctXFx0XFx0Lm9iai5vcmlnX2RldiA9IGJyLVxcdTAwM2VkZXYsXFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmM6MTI4OlxcdFxcdC5vYmouaWQgPSBTV0lUQ0hERVZfT0JKX0lEX1JJTkdfU1RBVEVfTVJQLFxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTEyOS1cXHRcXHQucmluZ19zdGF0ZSA9IHN0YXRlLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtMTMyLVxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jOjEzMzpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX05FVF9TV0lUQ0hERVYpKVxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTEzNC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jPTE0MD1icl9tcnBfc3dpdGNoZGV2X3NldF9pbl9yb2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX21ycCAqbXJwLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtMTQ1LVxcdFxcdC5vYmoub3JpZ19kZXYgPSBici1cXHUwMDNlZGV2LFxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jOjE0NjpcXHRcXHQub2JqLmlkID0gU1dJVENIREVWX09CSl9JRF9JTl9ST0xFX01SUCxcXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYy0xNDctXFx0XFx0LmluX3JvbGUgPSByb2xlLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtMTU1LVxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jOjE1NjpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX05FVF9TV0lUQ0hERVYpKVxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTE1Ny1cXHRcXHRyZXR1cm4gQlJfTVJQX1NXO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmM9MTc5PWludCBicl9tcnBfc3dpdGNoZGV2X3NldF9pbl9zdGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9tcnAgKm1ycCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTE4My1cXHRcXHQub2JqLm9yaWdfZGV2ID0gYnItXFx1MDAzZWRldixcXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYzoxODQ6XFx0XFx0Lm9iai5pZCA9IFNXSVRDSERFVl9PQkpfSURfSU5fU1RBVEVfTVJQLFxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTE4NS1cXHRcXHQuaW5fc3RhdGUgPSBzdGF0ZSxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTE4OC1cXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYzoxODk6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ORVRfU1dJVENIREVWKSlcXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYy0xOTAtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYz0xOTY9YnJfbXJwX3N3aXRjaGRldl9zZW5kX2luX3Rlc3Qoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwICptcnAsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYy0yMDAtXFx0XFx0Lm9iai5vcmlnX2RldiA9IGJyLVxcdTAwM2VkZXYsXFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmM6MjAxOlxcdFxcdC5vYmouaWQgPSBTV0lUQ0hERVZfT0JKX0lEX0lOX1RFU1RfTVJQLFxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTIwMi1cXHRcXHQuaW50ZXJ2YWwgPSBpbnRlcnZhbCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTIwNy1cXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYzoyMDg6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ORVRfU1dJVENIREVWKSlcXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYy0yMDktXFx0XFx0cmV0dXJuIEJSX01SUF9TVztcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jPTIxND1pbnQgYnJfbXJwX3BvcnRfc3dpdGNoZGV2X3NldF9zdGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCB1MzIgc3RhdGUpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYy0yMTctXFx0XFx0Lm9yaWdfZGV2ID0gcC1cXHUwMDNlZGV2LFxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jOjIxODpcXHRcXHQuaWQgPSBTV0lUQ0hERVZfQVRUUl9JRF9QT1JUX1NUUF9TVEFURSxcXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYy0yMTktXFx0XFx0LnUuc3RwX3N0YXRlID0gc3RhdGUsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21ycF9zd2l0Y2hkZXYuYy0yMjEtXFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmM6MjIyOlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfTkVUX1NXSVRDSERFVikpXFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtMjIzLVxcdFxcdHJldHVybiAwO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmM9MjI4PWludCBicl9tcnBfcG9ydF9zd2l0Y2hkZXZfc2V0X3JvbGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTIzMi1cXHRcXHQub3JpZ19kZXYgPSBwLVxcdTAwM2VkZXYsXFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmM6MjMzOlxcdFxcdC5pZCA9IFNXSVRDSERFVl9BVFRSX0lEX01SUF9QT1JUX1JPTEUsXFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtMjM0LVxcdFxcdC51Lm1ycF9wb3J0X3JvbGUgPSByb2xlLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tcnBfc3dpdGNoZGV2LmMtMjM2LVxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jOjIzNzpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX05FVF9TV0lUQ0hERVYpKVxcbm5ldC9icmlkZ2UvYnJfbXJwX3N3aXRjaGRldi5jLTIzOC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmM9OTU9aW50IGJyX21zdF9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IG1zdGksIHU4IHN0YXRlLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tc3QuYy05OC1cXHRzdHJ1Y3Qgc3dpdGNoZGV2X2F0dHIgYXR0ciA9IHtcXG5uZXQvYnJpZGdlL2JyX21zdC5jOjk5OlxcdFxcdC5pZCA9IFNXSVRDSERFVl9BVFRSX0lEX1BPUlRfTVNUX1NUQVRFLFxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMTAwLVxcdFxcdC5vcmlnX2RldiA9IHAtXFx1MDAzZWRldixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMTEwLVxcdC8qIE1TVEkgMCAoQ1NUKSBzdGF0ZSBjaGFuZ2VzIGFyZSBub3RpZmllZCB2aWEgdGhlIHJlZ3VsYXJcXG5uZXQvYnJpZGdlL2JyX21zdC5jOjExMTpcXHQgKiBTV0lUQ0hERVZfQVRUUl9JRF9QT1JUX1NUUF9TVEFURS4gQWxsIG90aGVyIE1TVElzIGFyZSBoYW5kbGVkIHZpYVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMTEyLVxcdCAqIG5ldGxpbmsgd2l0aCBSVE5MIGhlbGRcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmM9MTYxPWludCBicl9tc3Rfdmxhbl9zZXRfbXN0aShzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICptdiwgdTE2IG1zdGkpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21zdC5jLTE2My1cXHRzdHJ1Y3Qgc3dpdGNoZGV2X2F0dHIgYXR0ciA9IHtcXG5uZXQvYnJpZGdlL2JyX21zdC5jOjE2NDpcXHRcXHQuaWQgPSBTV0lUQ0hERVZfQVRUUl9JRF9WTEFOX01TVEksXFxubmV0L2JyaWRnZS9icl9tc3QuYy0xNjUtXFx0XFx0Lm9yaWdfZGV2ID0gbXYtXFx1MDAzZWJyLVxcdTAwM2VkZXYsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21zdC5jPTIwNz1pbnQgYnJfbXN0X3NldF9lbmFibGVkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMjEwLVxcdHN0cnVjdCBzd2l0Y2hkZXZfYXR0ciBhdHRyID0ge1xcbm5ldC9icmlkZ2UvYnJfbXN0LmM6MjExOlxcdFxcdC5pZCA9IFNXSVRDSERFVl9BVFRSX0lEX0JSSURHRV9NU1QsXFxubmV0L2JyaWRnZS9icl9tc3QuYy0yMTItXFx0XFx0Lm9yaWdfZGV2ID0gYnItXFx1MDAzZWRldixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MTY4OT1zdGF0aWMgdm9pZCBicl9tY19yb3V0ZXJfc3RhdGVfY2hhbmdlKHN0cnVjdCBuZXRfYnJpZGdlICpwLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNjkzLVxcdFxcdC5vcmlnX2RldiA9IHAtXFx1MDAzZWRldixcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjE2OTQ6XFx0XFx0LmlkID0gU1dJVENIREVWX0FUVFJfSURfQlJJREdFX01ST1VURVIsXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoxNjk1OlxcdFxcdC5mbGFncyA9IFNXSVRDSERFVl9GX0RFRkVSLFxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTY5Ni1cXHRcXHQudS5tcm91dGVyID0gaXNfbWNfcm91dGVyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMDQ2PXN0YXRpYyBpbnQgYnJfbWNfZGlzYWJsZWRfdXBkYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdmFsdWUsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIwNTAtXFx0XFx0Lm9yaWdfZGV2ID0gZGV2LFxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjA1MTpcXHRcXHQuaWQgPSBTV0lUQ0hERVZfQVRUUl9JRF9CUklER0VfTUNfRElTQUJMRUQsXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMDUyOlxcdFxcdC5mbGFncyA9IFNXSVRDSERFVl9GX0RFRkVSLFxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjA1My1cXHRcXHQudS5tY19kaXNhYmxlZCA9ICF2YWx1ZSxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MzM0Mj1zdGF0aWMgdm9pZCBicl9wb3J0X21jX3JvdXRlcl9zdGF0ZV9jaGFuZ2Uoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzM0Ni1cXHRcXHQub3JpZ19kZXYgPSBwLVxcdTAwM2VkZXYsXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzozMzQ3OlxcdFxcdC5pZCA9IFNXSVRDSERFVl9BVFRSX0lEX1BPUlRfTVJPVVRFUixcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjMzNDg6XFx0XFx0LmZsYWdzID0gU1dJVENIREVWX0ZfREVGRVIsXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zMzQ5LVxcdFxcdC51Lm1yb3V0ZXIgPSBpc19tY19yb3V0ZXIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xODM9ZW51bSB7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTg0LVxcdEJSX1ZMRkxBR19QRVJfUE9SVF9TVEFUUyA9IEJJVCgwKSxcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxODU6XFx0QlJfVkxGTEFHX0FEREVEX0JZX1NXSVRDSERFViA9IEJJVCgxKSxcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xODYtXFx0QlJfVkxGTEFHX01DQVNUX0VOQUJMRUQgPSBCSVQoMiksXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xODgtXFx0QlJfVkxGTEFHX05FSUdIX1NVUFBSRVNTX0VOQUJMRUQgPSBCSVQoNCksXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTg5OlxcdEJSX1ZMRkxBR19UQUdHSU5HX0JZX1NXSVRDSERFViA9IEJJVCg1KSxcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTAtXFx0QlJfVkxGTEFHX05FSUdIX0ZPUldBUkRfR1JBVF9FTkFCTEVEID0gQklUKDYpLFxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MzkyPXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQge1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNDQxLSNlbmRpZlxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjQ0MjojaWZkZWYgQ09ORklHX05FVF9TV0lUQ0hERVZcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC00NDMtXFx0LyogSWRlbnRpZmllciB1c2VkIHRvIGdyb3VwIHBvcnRzIHRoYXQgc2hhcmUgdGhlIHNhbWUgc3dpdGNoZGV2XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD01MDI9c3RydWN0IG5ldF9icmlkZ2Uge1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNTc5LVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjU4MDojaWZkZWYgQ09ORklHX05FVF9TV0lUQ0hERVZcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC01ODEtXFx0LyogQ291bnRlciB1c2VkIHRvIG1ha2Ugc3VyZSB0aGF0IGhhcmR3YXJlIGRvbWFpbnMgZ2V0IHVuaXF1ZVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9NTk4PXN0cnVjdCBicl9pbnB1dF9za2JfY2Ige1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNjE2LVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjYxNzojaWZkZWYgQ09ORklHX05FVF9TV0lUQ0hERVZcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC02MTgtXFx0LyogU2V0IGlmIFRYIGRhdGEgcGxhbmUgb2ZmbG9hZGluZyBpcyB1c2VkIHRvd2FyZHMgYXQgbGVhc3Qgb25lXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0yMjAyPXN0YXRpYyBpbmxpbmUgdm9pZCBicl9zeXNmc19kZWxicihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7IHJldHVybjsgfVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMjIwNS0vKiBicl9zd2l0Y2hkZXYuYyAqL1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjIyMDY6I2lmZGVmIENPTkZJR19ORVRfU1dJVENIREVWXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMjIwNy1pbnQgYnJfc3dpdGNoZGV2X3BvcnRfb2ZmbG9hZChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MjM2Mj1zdGF0aWMgaW5saW5lIHZvaWQgYnJfc3dpdGNoZGV2X2luaXQoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMjM2NS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoyMzY2OiNlbmRpZiAvKiBDT05GSUdfTkVUX1NXSVRDSERFViAqL1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTIzNjctXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3N0cC5jPTI5PXZvaWQgYnJfc2V0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHVuc2lnbmVkIGludCBzdGF0ZSlcXG4tLVxcbm5ldC9icmlkZ2UvYnJfc3RwLmMtMzItXFx0XFx0Lm9yaWdfZGV2ID0gcC1cXHUwMDNlZGV2LFxcbm5ldC9icmlkZ2UvYnJfc3RwLmM6MzM6XFx0XFx0LmlkID0gU1dJVENIREVWX0FUVFJfSURfUE9SVF9TVFBfU1RBVEUsXFxubmV0L2JyaWRnZS9icl9zdHAuYzozNDpcXHRcXHQuZmxhZ3MgPSBTV0lUQ0hERVZfRl9ERUZFUixcXG5uZXQvYnJpZGdlL2JyX3N0cC5jLTM1LVxcdFxcdC51LnN0cF9zdGF0ZSA9IHN0YXRlLFxcbi0tXFxubmV0L2JyaWRnZS9icl9zdHAuYz02MTY9aW50IF9fc2V0X2FnZWluZ190aW1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgdClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfc3RwLmMtNjE5LVxcdFxcdC5vcmlnX2RldiA9IGRldixcXG5uZXQvYnJpZGdlL2JyX3N0cC5jOjYyMDpcXHRcXHQuaWQgPSBTV0lUQ0hERVZfQVRUUl9JRF9CUklER0VfQUdFSU5HX1RJTUUsXFxubmV0L2JyaWRnZS9icl9zdHAuYzo2MjE6XFx0XFx0LmZsYWdzID0gU1dJVENIREVWX0ZfU0tJUF9FT1BOT1RTVVBQIHwgU1dJVENIREVWX0ZfREVGRVIsXFxubmV0L2JyaWRnZS9icl9zdHAuYy02MjItXFx0XFx0LnUuYWdlaW5nX3RpbWUgPSBqaWZmaWVzX3RvX2Nsb2NrX3QodCksXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jPTgxPWludCBicl9zd2l0Y2hkZXZfc2V0X3BvcnRfZmxhZyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxcbi0tXFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy05Ny1cXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jOjk4OlxcdGF0dHIuaWQgPSBTV0lUQ0hERVZfQVRUUl9JRF9QT1JUX1BSRV9CUklER0VfRkxBR1M7XFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy05OS1cXHRhdHRyLnUuYnJwb3J0X2ZsYWdzLnZhbCA9IGZsYWdzO1xcbi0tXFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy0xMDEtXFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYzoxMDI6XFx0ZXJyID0gY2FsbF9zd2l0Y2hkZXZfbm90aWZpZXJzKFNXSVRDSERFVl9QT1JUX0FUVFJfU0VULCBwLVxcdTAwM2VkZXYsXFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy0xMDMtXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZpbmZvLmluZm8sIGV4dGFjayk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTExMy1cXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jOjExNDpcXHRhdHRyLmlkID0gU1dJVENIREVWX0FUVFJfSURfUE9SVF9CUklER0VfRkxBR1M7XFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYzoxMTU6XFx0YXR0ci5mbGFncyA9IFNXSVRDSERFVl9GX0RFRkVSO1xcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtMTE2LVxcbi0tXFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYz0xNDU9YnJfc3dpdGNoZGV2X2ZkYl9ub3RpZnkoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy0xNjctXFx0Y2FzZSBSVE1fREVMTkVJR0g6XFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYzoxNjg6XFx0XFx0Y2FsbF9zd2l0Y2hkZXZfbm90aWZpZXJzKFNXSVRDSERFVl9GREJfREVMX1RPX0RFVklDRSxcXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTE2OS1cXHRcXHRcXHRcXHRcXHQgaXRlbS5pbmZvLmRldiwgXFx1MDAyNml0ZW0uaW5mbywgTlVMTCk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTE3MS1cXHRjYXNlIFJUTV9ORVdORUlHSDpcXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jOjE3MjpcXHRcXHRjYWxsX3N3aXRjaGRldl9ub3RpZmllcnMoU1dJVENIREVWX0ZEQl9BRERfVE9fREVWSUNFLFxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtMTczLVxcdFxcdFxcdFxcdFxcdCBpdGVtLmluZm8uZGV2LCBcXHUwMDI2aXRlbS5pbmZvLCBOVUxMKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM9MTc4PWludCBicl9zd2l0Y2hkZXZfcG9ydF92bGFuX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgdmlkLCB1MTYgZmxhZ3MsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTE4Mi1cXHRcXHQub2JqLm9yaWdfZGV2ID0gZGV2LFxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM6MTgzOlxcdFxcdC5vYmouaWQgPSBTV0lUQ0hERVZfT0JKX0lEX1BPUlRfVkxBTixcXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTE4NC1cXHRcXHQuZmxhZ3MgPSBmbGFncyxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM9MTkyPWludCBicl9zd2l0Y2hkZXZfcG9ydF92bGFuX25vX2ZvcmVpZ25fYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiB2aWQsIHUxNiBmbGFncyxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtMTk2LVxcdFxcdC5vYmoub3JpZ19kZXYgPSBkZXYsXFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYzoxOTc6XFx0XFx0Lm9iai5pZCA9IFNXSVRDSERFVl9PQkpfSURfUE9SVF9WTEFOLFxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM6MTk4OlxcdFxcdC5vYmouZmxhZ3MgPSBTV0lUQ0hERVZfRl9OT19GT1JFSUdOLFxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtMTk5LVxcdFxcdC5mbGFncyA9IGZsYWdzLFxcbi0tXFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYz0yMDc9aW50IGJyX3N3aXRjaGRldl9wb3J0X3ZsYW5fZGVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiB2aWQpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTIxMC1cXHRcXHQub2JqLm9yaWdfZGV2ID0gZGV2LFxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM6MjExOlxcdFxcdC5vYmouaWQgPSBTV0lUQ0hERVZfT0JKX0lEX1BPUlRfVkxBTixcXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTIxMi1cXHRcXHQudmlkID0gdmlkLFxcbi0tXFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYz0zMzE9YnJfc3dpdGNoZGV2X2ZkYl9yZXBsYXkoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmJyX2RldiwgY29uc3Qgdm9pZCAqY3R4LFxcbi0tXFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy0zNDctXFx0aWYgKGFkZGluZylcXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jOjM0ODpcXHRcXHRhY3Rpb24gPSBTV0lUQ0hERVZfRkRCX0FERF9UT19ERVZJQ0U7XFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy0zNDktXFx0ZWxzZVxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM6MzUwOlxcdFxcdGFjdGlvbiA9IFNXSVRDSERFVl9GREJfREVMX1RPX0RFVklDRTtcXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTM1MS1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM9MzY1PXN0YXRpYyBpbnQgYnJfc3dpdGNoZGV2X3ZsYW5fYXR0cl9yZXBsYXkoc3RydWN0IG5ldF9kZXZpY2UgKmJyX2RldixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtMzkxLVxcdFxcdGlmICh2LVxcdTAwM2Vtc3RpKSB7XFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYzozOTI6XFx0XFx0XFx0YXR0ci5pZCA9IFNXSVRDSERFVl9BVFRSX0lEX1ZMQU5fTVNUSTtcXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTM5My1cXHRcXHRcXHRhdHRyLnUudmxhbl9tc3RpLnZpZCA9IHYtXFx1MDAzZXZpZDtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtMzk1LVxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM6Mzk2OlxcdFxcdFxcdGVyciA9IG5iLVxcdTAwM2Vub3RpZmllcl9jYWxsKG5iLCBTV0lUQ0hERVZfUE9SVF9BVFRSX1NFVCxcXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTM5Ny1cXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2YXR0cl9pbmZvKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM9NDI4PXN0YXRpYyBpbnQgYnJfc3dpdGNoZGV2X3ZsYW5fcmVwbGF5X2dyb3VwKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTQ0NS1cXHRcXHRcXHQub2JqLm9yaWdfZGV2ID0gZGV2LFxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM6NDQ2OlxcdFxcdFxcdC5vYmouaWQgPSBTV0lUQ0hERVZfT0JKX0lEX1BPUlRfVkxBTixcXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTQ0Ny1cXHRcXHRcXHQuZmxhZ3MgPSBicl92bGFuX2ZsYWdzKHYsIHB2aWQpLFxcbi0tXFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYz00NjM9c3RhdGljIGludCBicl9zd2l0Y2hkZXZfdmxhbl9yZXBsYXkoc3RydWN0IG5ldF9kZXZpY2UgKmJyX2RldixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtNDgxLVxcdGlmIChhZGRpbmcpXFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYzo0ODI6XFx0XFx0YWN0aW9uID0gU1dJVENIREVWX1BPUlRfT0JKX0FERDtcXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTQ4My1cXHRlbHNlXFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYzo0ODQ6XFx0XFx0YWN0aW9uID0gU1dJVENIREVWX1BPUlRfT0JKX0RFTDtcXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTQ4NS1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM9NTY0PXN0YXRpYyB2b2lkIGJyX3N3aXRjaGRldl9ob3N0X21kYl9vbmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtNTcwLVxcdFxcdC5vYmogPSB7XFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYzo1NzE6XFx0XFx0XFx0LmlkID0gU1dJVENIREVWX09CSl9JRF9IT1NUX01EQixcXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jOjU3MjpcXHRcXHRcXHQuZmxhZ3MgPSBTV0lUQ0hERVZfRl9ERUZFUixcXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTU3My1cXHRcXHRcXHQub3JpZ19kZXYgPSBkZXYsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jPTYxOT1zdGF0aWMgaW50IGJyX3N3aXRjaGRldl9tZGJfcXVldWVfb25lKHN0cnVjdCBsaXN0X2hlYWQgKm1kYl9saXN0LFxcbi0tXFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy02MzUtXFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYzo2MzY6XFx0aWYgKGFjdGlvbiA9PSBTV0lUQ0hERVZfUE9SVF9PQkpfQUREIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy02MzctXFx0ICAgIHN3aXRjaGRldl9wb3J0X29ial9hY3RfaXNfZGVmZXJyZWQoZGV2LCBhY3Rpb24sIFxcdTAwMjZtZGIub2JqKSkge1xcbi0tXFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYz02NTc9dm9pZCBicl9zd2l0Y2hkZXZfbWRiX25vdGlmeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy02NjQtXFx0XFx0Lm9iaiA9IHtcXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jOjY2NTpcXHRcXHRcXHQuaWQgPSBTV0lUQ0hERVZfT0JKX0lEX1BPUlRfTURCLFxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM6NjY2OlxcdFxcdFxcdC5mbGFncyA9IFNXSVRDSERFVl9GX0RFRkVSLFxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtNjY3LVxcdFxcdH0sXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jPTY5Nj1icl9zd2l0Y2hkZXZfbWRiX3JlcGxheShzdHJ1Y3QgbmV0X2RldmljZSAqYnJfZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy03MjEtXFx0aWYgKGFkZGluZylcXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jOjcyMjpcXHRcXHRhY3Rpb24gPSBTV0lUQ0hERVZfUE9SVF9PQkpfQUREO1xcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtNzIzLVxcdGVsc2VcXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jOjcyNDpcXHRcXHRhY3Rpb24gPSBTV0lUQ0hERVZfUE9SVF9PQkpfREVMO1xcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtNzI1LVxcbi0tXFxubmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYy03NDAtXFx0XFx0XFx0ZXJyID0gYnJfc3dpdGNoZGV2X21kYl9xdWV1ZV9vbmUoXFx1MDAyNm1kYl9saXN0LCBkZXYsIGFjdGlvbixcXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jOjc0MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgU1dJVENIREVWX09CSl9JRF9IT1NUX01EQixcXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTc0Mi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgbXAsIGJyX2Rldik7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTc1NC1cXHRcXHRcXHRlcnIgPSBicl9zd2l0Y2hkZXZfbWRiX3F1ZXVlX29uZShcXHUwMDI2bWRiX2xpc3QsIGRldiwgYWN0aW9uLFxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM6NzU1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCBTV0lUQ0hERVZfT0JKX0lEX1BPUlRfTURCLFxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtNzU2LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBtcCwgZGV2KTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtNzY3LVxcdFxcdGVyciA9IGJyX3N3aXRjaGRldl9tZGJfcmVwbGF5X29uZShuYiwgZGV2LFxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmM6NzY4OlxcdFxcdFxcdFxcdFxcdFxcdCAgU1dJVENIREVWX09CSl9QT1JUX01EQihvYmopLFxcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtNzY5LVxcdFxcdFxcdFxcdFxcdFxcdCAgYWN0aW9uLCBjdHgsIGV4dGFjayk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jLTc3OC1cXHRcXHRsaXN0X2RlbChcXHUwMDI2b2JqLVxcdTAwM2VsaXN0KTtcXG5uZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jOjc3OTpcXHRcXHRrZnJlZShTV0lUQ0hERVZfT0JKX1BPUlRfTURCKG9iaikpO1xcbm5ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMtNzgwLVxcdH1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTEwMz1zdGF0aWMgaW50IF9fdmxhbl92aWRfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTExMy1cXHRpZiAoZXJyICE9IC1FT1BOT1RTVVBQKSB7XFxubmV0L2JyaWRnZS9icl92bGFuLmM6MTE0OlxcdFxcdHYtXFx1MDAzZXByaXZfZmxhZ3MgfD0gQlJfVkxGTEFHX0FEREVEX0JZX1NXSVRDSERFViB8IEJSX1ZMRkxBR19UQUdHSU5HX0JZX1NXSVRDSERFVjtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMTUtXFx0XFx0cmV0dXJuIGVycjtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTExOS1cXHRcXHRyZXR1cm4gdmxhbl92aWRfYWRkKGRldiwgYnItXFx1MDAzZXZsYW5fcHJvdG8sIHYtXFx1MDAzZXZpZCk7XFxubmV0L2JyaWRnZS9icl92bGFuLmM6MTIwOlxcdHYtXFx1MDAzZXByaXZfZmxhZ3MgfD0gQlJfVkxGTEFHX0FEREVEX0JZX1NXSVRDSERFVjtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMjEtXFx0cmV0dXJuIGVycjtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTE0OT1zdGF0aWMgaW50IF9fdmxhbl92aWRfZGVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTE1Ny1cXHRlcnIgPSBicl9zd2l0Y2hkZXZfcG9ydF92bGFuX2RlbChkZXYsIHYtXFx1MDAzZXZpZCk7XFxubmV0L2JyaWRnZS9icl92bGFuLmM6MTU4OlxcdGlmICghKHYtXFx1MDAzZXByaXZfZmxhZ3MgXFx1MDAyNiBCUl9WTEZMQUdfQURERURfQllfU1dJVENIREVWKSlcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xNTktXFx0XFx0dmxhbl92aWRfZGVsKGRldiwgYnItXFx1MDAzZXZsYW5fcHJvdG8sIHYtXFx1MDAzZXZpZCk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz04OTQ9aW50IGJyX3ZsYW5fZmlsdGVyX3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtODk4LVxcdFxcdC5vcmlnX2RldiA9IGJyLVxcdTAwM2VkZXYsXFxubmV0L2JyaWRnZS9icl92bGFuLmM6ODk5OlxcdFxcdC5pZCA9IFNXSVRDSERFVl9BVFRSX0lEX0JSSURHRV9WTEFOX0ZJTFRFUklORyxcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo5MDA6XFx0XFx0LmZsYWdzID0gU1dJVENIREVWX0ZfU0tJUF9FT1BOT1RTVVBQLFxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTkwMS1cXHRcXHQudS52bGFuX2ZpbHRlcmluZyA9IHZhbCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTk0NT1pbnQgX19icl92bGFuX3NldF9wcm90byhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIF9fYmUxNiBwcm90byxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTk0OS1cXHRcXHQub3JpZ19kZXYgPSBici1cXHUwMDNlZGV2LFxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjk1MDpcXHRcXHQuaWQgPSBTV0lUQ0hERVZfQVRUUl9JRF9CUklER0VfVkxBTl9QUk9UT0NPTCxcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo5NTE6XFx0XFx0LmZsYWdzID0gU1dJVENIREVWX0ZfU0tJUF9FT1BOT1RTVVBQLFxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTk1Mi1cXHRcXHQudS52bGFuX3Byb3RvY29sID0gbnRvaHMocHJvdG8pLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtOTcwLVxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkodmxhbiwgXFx1MDAyNnZnLVxcdTAwM2V2bGFuX2xpc3QsIHZsaXN0KSB7XFxubmV0L2JyaWRnZS9icl92bGFuLmM6OTcxOlxcdFxcdFxcdGlmICh2bGFuLVxcdTAwM2Vwcml2X2ZsYWdzIFxcdTAwMjYgQlJfVkxGTEFHX0FEREVEX0JZX1NXSVRDSERFVilcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy05NzItXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy05ODctXFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh2bGFuLCBcXHUwMDI2dmctXFx1MDAzZXZsYW5fbGlzdCwgdmxpc3QpIHtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo5ODg6XFx0XFx0XFx0aWYgKHZsYW4tXFx1MDAzZXByaXZfZmxhZ3MgXFx1MDAyNiBCUl9WTEZMQUdfQURERURfQllfU1dJVENIREVWKVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTk4OS1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTEwMDAtXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yZXZlcnNlKHZsYW4sIFxcdTAwMjZ2Zy1cXHUwMDNldmxhbl9saXN0LCB2bGlzdCkge1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjEwMDE6XFx0XFx0aWYgKHZsYW4tXFx1MDAzZXByaXZfZmxhZ3MgXFx1MDAyNiBCUl9WTEZMQUdfQURERURfQllfU1dJVENIREVWKVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTEwMDItXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMDA4LVxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkodmxhbiwgXFx1MDAyNnZnLVxcdTAwM2V2bGFuX2xpc3QsIHZsaXN0KSB7XFxubmV0L2JyaWRnZS9icl92bGFuLmM6MTAwOTpcXHRcXHRcXHRpZiAodmxhbi1cXHUwMDNlcHJpdl9mbGFncyBcXHUwMDI2IEJSX1ZMRkxBR19BRERFRF9CWV9TV0lUQ0hERVYpXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTAxMC1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTEyNTc9aW50IG5icF92bGFuX2luaXQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTI2MC1cXHRcXHQub3JpZ19kZXYgPSBwLVxcdTAwM2Vici1cXHUwMDNlZGV2LFxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjEyNjE6XFx0XFx0LmlkID0gU1dJVENIREVWX0FUVFJfSURfQlJJREdFX1ZMQU5fRklMVEVSSU5HLFxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjEyNjI6XFx0XFx0LmZsYWdzID0gU1dJVENIREVWX0ZfU0tJUF9FT1BOT1RTVVBQLFxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTEyNjMtXFx0XFx0LnUudmxhbl9maWx0ZXJpbmcgPSBicl9vcHRfZ2V0KHAtXFx1MDAzZWJyLCBCUk9QVF9WTEFOX0VOQUJMRUQpLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmM9MTQ3OT1pbnQgYnJfdmxhbl9maWxsX2ZvcndhcmRfcGF0aF9tb2RlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTE0OTgtXFx0XFx0cGF0aC1cXHUwMDNlYnJpZGdlLnZsYW5fbW9kZSA9IERFVl9QQVRIX0JSX1ZMQU5fS0VFUDtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoxNDk5OlxcdGVsc2UgaWYgKHYtXFx1MDAzZXByaXZfZmxhZ3MgXFx1MDAyNiBCUl9WTEZMQUdfVEFHR0lOR19CWV9TV0lUQ0hERVYpXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTUwMC1cXHRcXHRwYXRoLVxcdTAwM2VicmlkZ2Uudmxhbl9tb2RlID0gREVWX1BBVEhfQlJfVkxBTl9VTlRBR19IVztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTc6MTc6NTYuMTE4MTQyNDQxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEzMzYzMjAwMDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCcmlkZ2UgVkxBTiBGaWx0ZXJpbmcgQ29tcGlsYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGlzIGxpbmUgYGJyaWRnZS0kKENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkcpICs9IGJyX3ZsYW4ubyBicl92bGFuX3R1bm5lbC5vIGJyX3ZsYW5fb3B0aW9ucy5vIGJyX21zdC5vYCB0ZWxscyBtZSB0aGF0IHRoZSBgYnJfbXN0LmNgIG9iamVjdCBmaWxlLCBhbW9uZyBvdGhlcnMsIGdldHMgaW5jbHVkZWQgaW4gdGhlIGJyaWRnZSBtb2R1bGUgYnVpbGQgcHJvY2VzcyAqb25seSogd2hlbiBgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR2AgaXMgZGVmaW5lZC4gVGhhdCdzIHRoZSBrZXkgY29uZGl0aW9uLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIGl0J3MgZ29pbmcgdG8gYmUgbmVzdGVkLCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biBgQlJJREdFYCBhbmQgYFZMQU5fODAyMVFgIGZvciB0aGlzIGNvbmZpZ3VyYXRpb24uIEFuZCBsb29raW5nIGF0IHRoZSBjb2RlLCBpdCBsb29rcyBsaWtlIGBORVRfU1dJVENIREVWYCBpcyBhbHNvIHJlbGV2YW50IGhlcmUuIFNwZWNpZmljYWxseSwgSSBzZWUgYSBjYWxsIHRvIGBzd2l0Y2hkZXZfcG9ydF9hdHRyX3NldGAsIGFuZCB0aGUgdXNlIG9mIHN3aXRjaGRldiBibG9ja2luZyBub3RpZmllcnMgd2hpY2ggbWFrZXMgbWUgdGhpbmsgaXQgaGFzIHNvbWUgYmVhcmluZyBvbiB0aGlzIHNldHVwIGlmIGBORVRfU1dJVENIREVWYCBpcyBhbHNvIGVuYWJsZWQuXG5cbkkgbmVlZCB0byBzZWUgaWYgYE5FVF9TV0lUQ0hERVZgIGl0c2VsZiBoYXMgYW55IGRlcGVuZGVuY2llcywgc28gSSBjYW4gZW5zdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBjb25maWd1cmF0aW9uIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NDA2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE3OjE4OjA5LjQ4MTM0NTYzOVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc4NTkyNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9TV0lUQ0hERVZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc3dpdGNoZGV2L0tjb25maWctNS1cXG5uZXQvc3dpdGNoZGV2L0tjb25maWc6Njpjb25maWcgTkVUX1NXSVRDSERFVlxcbm5ldC9zd2l0Y2hkZXYvS2NvbmZpZy03LVxcdGJvb2wgXFxcIlN3aXRjaCAoYW5kIHN3aXRjaC1pc2gpIGRldmljZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNzoxODowOS41NDkyMTI2NThaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDM5NjExMzU3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIGBORVRfU1dJVENIREVWYCoqXG5cbkFscmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGF0IHRoaXMgYE5FVF9TV0lUQ0hERVZgIGNvbmZpZyBvcHRpb24uIFRoZSBkb2N1bWVudGF0aW9uIHNlZW1zIHRvIHN1Z2dlc3QgaXQncyBlaXRoZXIgZW50aXJlbHkgaW5kZXBlbmRlbnQsIG9yIGF0IG1vc3QsIHJlbGllcyBvbiB0aGUgYnJvYWRlciBgTkVUYCBmZWF0dXJlLiBUaGF0J3MgYSBsaXR0bGUgdW51c3VhbCwgZ2l2ZW4gdGhlIGNvbXBsZXggbmF0dXJlIG9mIHN3aXRjaCBkZXZpY2Ugc3VwcG9ydC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBkaXZlIGludG8gdGhlIGBuZXQvc3dpdGNoZGV2L0tjb25maWdgIGZpbGUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBkZWZpbml0aXZlIGFuc3dlciBhYm91dCBpdHMgZGVwZW5kZW5jaWVzIGFuZCBhbnkgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgaXQuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZXNlIHJlbGF0aW9uc2hpcHMgdG8gZW5zdXJlIHByb3BlciBjb25maWd1cmF0aW9uIGFuZCBhdm9pZCBhbnkgdW5leHBlY3RlZCBjb25mbGljdHMgb3IgbWlzc2luZyBmdW5jdGlvbmFsaXR5IHdoZW4gZGVhbGluZyB3aXRoIG5ldHdvcmtpbmcgZGV2aWNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk5MjIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNzoxODoxMy45NDUzMzAzOTdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3N3aXRjaGRldi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIENvbmZpZ3VyYXRpb24gZm9yIFN3aXRjaCBkZXZpY2Ugc3VwcG9ydFxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgTkVUX1NXSVRDSERFVlxcbiAgIDc6XFx0XFx0Ym9vbCBcXFwiU3dpdGNoIChhbmQgc3dpdGNoLWlzaCkgZGV2aWNlIHN1cHBvcnRcXFwiXFxuICAgODpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA5OlxcdFxcdGhlbHBcXG4gIDEwOlxcdFxcdCAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgZ2x1ZSBiZXR3ZWVuIGNvcmUgbmV0d29ya2luZyBjb2RlIGFuZCBkZXZpY2VcXG4gIDExOlxcdFxcdCAgZHJpdmVycyBpbiBvcmRlciB0byBzdXBwb3J0IGhhcmR3YXJlIHN3aXRjaCBjaGlwcyBpbiB2ZXJ5IGdlbmVyaWNcXG4gIDEyOlxcdFxcdCAgbWVhbmluZyBvZiB0aGUgd29yZCBcXFwic3dpdGNoXFxcIi4gVGhpcyBpbmNsdWRlIGRldmljZXMgc3VwcG9ydGluZyBMMi9MMyBidXRcXG4gIDEzOlxcdFxcdCAgYWxzbyB2YXJpb3VzIGZsb3cgb2ZmbG9hZGluZyBjaGlwcywgaW5jbHVkaW5nIHN3aXRjaGVzIGVtYmVkZGVkIGludG9cXG4gIDE0OlxcdFxcdCAgU1ItSU9WIE5JQ3MuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE3OjE4OjEzLjk0NTQyNTE3N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1ODE5MTAyNzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBhbmQgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBkZXBlbmRlbmNpZXMgYXJlIGNsZWFyOiBgTkVUX1NXSVRDSERFVmAgcmVsaWVzIG9uIGBJTkVUYC4gYEJSSURHRWAgY29ycmVzcG9uZHMgdG8gYENPTkZJR19CUklER0VgLCBhbmQgc2ltaWxhcmx5LCBgQlJJREdFX1ZMQU5fRklMVEVSSU5HYCBtYXBzIHRvIGBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYCwgYW5kIGBWTEFOXzgwMjFRYCBtYXBzIHRvIGBDT05GSUdfVkxBTl84MDIxUWAuIEkgbmVlZCB0byBiZSBjYXJlZnVsIHRvIHN0cmlwIHRoZSBgQ09ORklHX2AgcHJlZml4IHdoZW4gc3BlY2lmeWluZyB0aGUgcmVxdWlyZWQgY29uZmlncy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zOiBgQlJJREdFYCwgYEJSSURHRV9WTEFOX0ZJTFRFUklOR2AsIGBWTEFOXzgwMjFRYCwgYW5kIGBORVRfU1dJVENIREVWYCBhcmUgYWxsIGVzc2VudGlhbC4gQ2hlY2suIE5leHQsIEkgbmVlZCB0byBsb29rIGF0IHRoZSBgRm9jdXNTeW1ib2xzYC5cblxuSSBzZWUgYGJyX21zdF9zZXRfc3RhdGVgIC0gdGhhdCdzIHRoZSBmdW5jdGlvbiB0aGUgcGF0Y2ggbW9kaWZpZWQhIEFsc28gYGJyX21zdF9wcm9jZXNzYCwgYW5kIGBicl9tc3Rfc2V0X2VuYWJsZWRgIHdoaWNoIHNlZW1zIHRvIGJlIHRoZSBNU1QgZW5hYmxlIGVudHJ5IHBvaW50LiBBbmQgYGJyX3NldF9zdGF0ZWAsIHdoaWNoIGNhbGxzIGBicl9tc3Rfc2V0X3N0YXRlYC4gVGhlc2UgYXJlICpub3QqIHViaXF1aXRvdXMgZnVuY3Rpb25zLiBUaGV5IGFyZSAqaGlnaGx5KiBzcGVjaWZpYyB0byBFdGhlcm5ldCBCcmlkZ2UgTXVsdGlwbGUgU3Bhbm5pbmcgVHJlZSAoTVNUKSBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIGdvb2Q7IHdlJ3JlIGF2b2lkaW5nIHRob3NlIGNvbW1vbiBob3RzcG90cy5cblxuTm93LCB0aGUgcmVhc29uaW5nOiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGJyX21zdF9zZXRfc3RhdGUoKWAgdG8gbW92ZSBgc3dpdGNoZGV2X3BvcnRfYXR0cl9zZXQoKWAgb3V0IG9mIGFuIGByY3VfcmVhZF9sb2NrKClgIGNyaXRpY2FsIHNlY3Rpb24gYW5kIGludHJvZHVjZXMgYW4gYEFTU0VSVF9SVE5MKClgIGFzc2VydGlvbi4gVGhpcyBjaGFuZ2VzIHRoZSBsb2NraW5nIGFuZCBpbnRyb2R1Y2VzIGEgbmV3IHJ1bnRpbWUgYXNzZXJ0aW9uIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSwgc3BlY2lmaWNhbGx5IEV0aGVybmV0IGJyaWRnZSBNU1Qgc3VwcG9ydC5cblxuTGV0J3MgcmV2aWV3IHRoZSBndWlkZWxpbmVzLCBzdGVwIGJ5IHN0ZXA6XG4qICAgKipSZWFjaGFiaWxpdHk6KiogU3RhbmRhcmQgUUVNVS9zeXprYWxsZXIgY2FuIGVhc2lseSBjb25maWd1cmUgYnJpZGdlIGRldmljZXMgd2l0aCBWTEFOIGZpbHRlcmluZyBhbmQgTVNUIHVzaW5nIG5ldGxpbmsuIFRoaXMgaXMgZ29vZC4gTm8gdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGlzIG5lZWRlZC5cbiogICAqKlJlZmFjdG9yaW5ncyBhbmQgQXNzZXJ0aW9uczoqKiBUaGUgcGF0Y2ggY2xlYXJseSBpbnZvbHZlcyBhbiBSQ1UgY3JpdGljYWwgc2VjdGlvbiBtb3ZlIGFuZCBhIG5ldyBgQVNTRVJUX1JUTkwoKWAgYXNzZXJ0aW9uLCB3aGljaCBpcyBwZXJmZWN0LlxuKiAgICoqRm9jdXNTeW1ib2xzOioqIEknbSB0YXJnZXRpbmcgc3BlY2lmaWMgZmVhdHVyZSBsb2dpYyB3aXRoIHRoZXNlIGZ1bmN0aW9ucywgYW5kIG5vdCBob3QgcGF0aHMuIENoZWNrLlxuKiAgICoqRW5hYmxlQ29uZmlnczoqKiBDb25maXJtZWQ6IGBCUklER0VgLCBgQlJJREdFX1ZMQU5fRklMVEVSSU5HYCwgYFZMQU5fODAyMVFgLCBhbmQgYE5FVF9TV0lUQ0hERVZgLiBTdHJpcHBlZCB0aGUgJ0NPTkZJR18nIHByZWZpeC5cblxuRXZlcnl0aGluZyBhbGlnbnMuIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMzQ2LCJPdXRwdXRUb2tlbnMiOjE3MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE3OjE4OjE5Ljc2NDUzMTM0NloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwODcwOTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUklER0VcIixcbiAgICBcIkJSSURHRV9WTEFOX0ZJTFRFUklOR1wiLFxuICAgIFwiVkxBTl84MDIxUVwiLFxuICAgIFwiTkVUX1NXSVRDSERFVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyX21zdF9zZXRfc3RhdGVcIixcbiAgICBcImJyX21zdF9wcm9jZXNzXCIsXG4gICAgXCJicl9tc3Rfc2V0X2VuYWJsZWRcIixcbiAgICBcImJyX3NldF9zdGF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBpbiBgYnJfbXN0X3NldF9zdGF0ZSgpYCB3aXRoaW4gdGhlIEV0aGVybmV0IGJyaWRnZSBNU1QgaW1wbGVtZW50YXRpb246IGl0IG1vdmVzIGEgcG90ZW50aWFsbHkgc2xlZXBpbmcgc3dpdGNoZGV2IGNhbGwgb3V0c2lkZSBvZiB0aGUgYHJjdV9yZWFkX2xvY2soKWAgY3JpdGljYWwgc2VjdGlvbiBhbmQgYWRkcyBhbiBgQVNTRVJUX1JUTkwoKWAgaW52YXJpYW50IGNoZWNrLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGFjY2Vzc2libGUgdmlhIG5ldGxpbmsgYW5kIGJyaWRnZSBTVFAgY29uZmlndXJhdGlvbiBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlJJREdFXCIsXG4gICAgXCJCUklER0VfVkxBTl9GSUxURVJJTkdcIixcbiAgICBcIlZMQU5fODAyMVFcIixcbiAgICBcIk5FVF9TV0lUQ0hERVZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicl9tc3Rfc2V0X3N0YXRlXCIsXG4gICAgXCJicl9tc3RfcHJvY2Vzc1wiLFxuICAgIFwiYnJfbXN0X3NldF9lbmFibGVkXCIsXG4gICAgXCJicl9zZXRfc3RhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBsb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24gaW4gYGJyX21zdF9zZXRfc3RhdGUoKWAgd2l0aGluIHRoZSBFdGhlcm5ldCBicmlkZ2UgTVNUIGltcGxlbWVudGF0aW9uOiBpdCBtb3ZlcyBhIHBvdGVudGlhbGx5IHNsZWVwaW5nIHN3aXRjaGRldiBjYWxsIG91dHNpZGUgb2YgdGhlIGByY3VfcmVhZF9sb2NrKClgIGNyaXRpY2FsIHNlY3Rpb24gYW5kIGFkZHMgYW4gYEFTU0VSVF9SVE5MKClgIGludmFyaWFudCBjaGVjay4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rIGFuZCBicmlkZ2UgU1RQIGNvbmZpZ3VyYXRpb24gaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNzoxODoxOS44MzU0MDkyNTRaIiwiU2VxIjozMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MDk4MzczOTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTc6MTg6MTkuODM1ODE4MzY0WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTQwOTc5NjA5NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgc2xlZXAtaW4tYXRvbWljIGJ1ZyBpbiBgYnJfbXN0X3NldF9zdGF0ZSgpYCBieSBtb3ZpbmcgYHN3aXRjaGRldl9wb3J0X2F0dHJfc2V0KClgICh3aGljaCBtYXkgc2xlZXApIG91dHNpZGUgb2YgdGhlIGByY3VfcmVhZF9sb2NrKClgIGNyaXRpY2FsIHNlY3Rpb24sIGFkZGluZyBgQVNTRVJUX1JUTkwoKWAsIGFuZCBvbmx5IGFjcXVpcmluZyBgcmN1X3JlYWRfbG9jaygpYCB3aGVuIHJlYWRpbmcgdGhlIFZMQU4gZ3JvdXAgYW5kIGl0ZXJhdGluZyBvdmVyIHRoZSBWTEFOIGxpc3QuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcywgZG9lcyBub3QgYWZmZWN0IGJ1ZmZlciBib3VuZHMgb3IgY29weSBsZW5ndGhzLCBhbmQgZG9lcyBub3QgYWx0ZXIgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gU2xlZXBpbmcgd2hpbGUgaG9sZGluZyBhbiBSQ1UgcmVhZCBsb2NrIGlzIGRldGVjdGVkIGJ5IHN0YW5kYXJkIGRlYnVnIGNvbmZpZ3VyYXRpb25zIChgQ09ORklHX0RFQlVHX0FUT01JQ19TTEVFUGAgLyBgbWlnaHRfc2xlZXAoKWApLCBhbmQgbG9jayBpbnZhcmlhbnRzIGFyZSB2ZXJpZmllZCBieSBgQVNTRVJUX1JUTkwoKWAgLyBgTE9DS0RFUGAuIEJlY2F1c2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODBhNTA4NGQwMDI2YTg2NThmMzUwNmNkOTI1NzYxZWFhM2Y5NjVlZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDE3OjE2OjA2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9tc3QuYyBiL25ldC9icmlkZ2UvYnJfbXN0LmNcbmluZGV4IDQzYTMwMGFlNmJmYWYuLjE2NTRlZmQzMDQ1YjAgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX21zdC5jXG4rKysgYi9uZXQvYnJpZGdlL2JyX21zdC5jXG5AQCAtMTA3LDIxICsxMDcsMjQgQEAgaW50IGJyX21zdF9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IG1zdGksIHU4IHN0YXRlLFxuIFx0c3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdjtcbiBcdGludCBlcnIgPSAwO1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVx0dmcgPSBuYnBfdmxhbl9ncm91cF9yY3UocCk7XG4tXHRpZiAoIXZnKVxuLVx0XHRnb3RvIG91dDtcbi1cbiBcdC8qIE1TVEkgMCAoQ1NUKSBzdGF0ZSBjaGFuZ2VzIGFyZSBub3RpZmllZCB2aWEgdGhlIHJlZ3VsYXJcbi1cdCAqIFNXSVRDSERFVl9BVFRSX0lEX1BPUlRfU1RQX1NUQVRFLlxuK1x0ICogU1dJVENIREVWX0FUVFJfSURfUE9SVF9TVFBfU1RBVEUuIEFsbCBvdGhlciBNU1RJcyBhcmUgaGFuZGxlZCB2aWFcbitcdCAqIG5ldGxpbmsgd2l0aCBSVE5MIGhlbGRcbiBcdCAqL1xuIFx0aWYgKG1zdGkpIHtcbitcdFx0QVNTRVJUX1JUTkwoKTtcbitcbiBcdFx0ZXJyID0gc3dpdGNoZGV2X3BvcnRfYXR0cl9zZXQocC1cdTAwM2VkZXYsIFx1MDAyNmF0dHIsIGV4dGFjayk7XG4gXHRcdGlmIChlcnIgXHUwMDI2XHUwMDI2IGVyciAhPSAtRU9QTk9UU1VQUClcbiBcdFx0XHRnb3RvIG91dDtcbitcdFx0ZXJyID0gMDtcbiBcdH1cbiBcbi1cdGVyciA9IDA7XG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHR2ZyA9IG5icF92bGFuX2dyb3VwX3JjdShwKTtcbitcdGlmICghdmcpXG4rXHRcdGdvdG8gb3V0X3JjdV91bmxvY2s7XG4rXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh2LCBcdTAwMjZ2Zy1cdTAwM2V2bGFuX2xpc3QsIHZsaXN0KSB7XG4gXHRcdGlmICh2LVx1MDAzZWJydmxhbi1cdTAwM2Vtc3RpICE9IG1zdGkpXG4gXHRcdFx0Y29udGludWU7XG5AQCAtMTI5LDggKzEzMiw5IEBAIGludCBicl9tc3Rfc2V0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHUxNiBtc3RpLCB1OCBzdGF0ZSxcbiBcdFx0YnJfbXN0X3ZsYW5fc2V0X3N0YXRlKHZnLCB2LCBzdGF0ZSk7XG4gXHR9XG4gXG4tb3V0OlxuK291dF9yY3VfdW5sb2NrOlxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4rb3V0OlxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNzoxODoxOS44MzU4MTkzMDRaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTc3MjA0NTQzMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW4uXG5cbioqSW5zcGVjdGluZyB0aGUgQ29kZSoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBwYXRjaC4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIHNlZSBpdCdzIHRvdWNoaW5nIGBuZXQvYnJpZGdlL2JyX21zdC5jYC4gVGhhdCBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQg4oCTIE1TVFAsIGJyaWRnaW5nLCBhbmQgc3Bhbm5pbmcgdHJlZSBwcm90b2NvbCwgYWxsIGNvcmUgY29uY2VwdHMuIE5vdywgbGV0IG1lIGxvY2F0ZSB0aGUgYXJlYSBiZWluZyBtb2RpZmllZCBpbiB0aGF0IGZpbGUuIEknbSBnb2luZyB0byBmb2N1cyBvbiBhcm91bmQgbGluZSAxMDcuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgYXJvdW5kIHRoYXQgc3BlY2lmaWMgbGluZSB3aWxsIGJlIGtleSB0byBncmFzcGluZyB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyB0aGVyZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDM4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNzoxODozNy41NTYyNzY1MjdaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JyaWRnZS9icl9tc3QuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA5MDpcXHRcXHRcXHRicl92bGFuX3NldF9wdmlkX3N0YXRlKHZnLCBzdGF0ZSk7XFxuICA5MTpcXHRcXG4gIDkyOlxcdFxcdGJyX3ZsYW5fc2V0X3N0YXRlKHYsIHN0YXRlKTtcXG4gIDkzOlxcdH1cXG4gIDk0OlxcdFxcbiAgOTU6XFx0aW50IGJyX21zdF9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IG1zdGksIHU4IHN0YXRlLFxcbiAgOTY6XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuICA5NzpcXHR7XFxuICA5ODpcXHRcXHRzdHJ1Y3Qgc3dpdGNoZGV2X2F0dHIgYXR0ciA9IHtcXG4gIDk5OlxcdFxcdFxcdC5pZCA9IFNXSVRDSERFVl9BVFRSX0lEX1BPUlRfTVNUX1NUQVRFLFxcbiAxMDA6XFx0XFx0XFx0Lm9yaWdfZGV2ID0gcC1cXHUwMDNlZGV2LFxcbiAxMDE6XFx0XFx0XFx0LnUubXN0X3N0YXRlID0ge1xcbiAxMDI6XFx0XFx0XFx0XFx0Lm1zdGkgPSBtc3RpLFxcbiAxMDM6XFx0XFx0XFx0XFx0LnN0YXRlID0gc3RhdGUsXFxuIDEwNDpcXHRcXHRcXHR9LFxcbiAxMDU6XFx0XFx0fTtcXG4gMTA2OlxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnO1xcbiAxMDc6XFx0XFx0c3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdjtcXG4gMTA4OlxcdFxcdGludCBlcnIgPSAwO1xcbiAxMDk6XFx0XFxuIDExMDpcXHRcXHQvKiBNU1RJIDAgKENTVCkgc3RhdGUgY2hhbmdlcyBhcmUgbm90aWZpZWQgdmlhIHRoZSByZWd1bGFyXFxuIDExMTpcXHRcXHQgKiBTV0lUQ0hERVZfQVRUUl9JRF9QT1JUX1NUUF9TVEFURS4gQWxsIG90aGVyIE1TVElzIGFyZSBoYW5kbGVkIHZpYVxcbiAxMTI6XFx0XFx0ICogbmV0bGluayB3aXRoIFJUTkwgaGVsZFxcbiAxMTM6XFx0XFx0ICovXFxuIDExNDpcXHRcXHRpZiAobXN0aSkge1xcbiAxMTU6XFx0XFx0XFx0QVNTRVJUX1JUTkwoKTtcXG4gMTE2OlxcdFxcbiAxMTc6XFx0XFx0XFx0ZXJyID0gc3dpdGNoZGV2X3BvcnRfYXR0cl9zZXQocC1cXHUwMDNlZGV2LCBcXHUwMDI2YXR0ciwgZXh0YWNrKTtcXG4gMTE4OlxcdFxcdFxcdGlmIChlcnIgXFx1MDAyNlxcdTAwMjYgZXJyICE9IC1FT1BOT1RTVVBQKVxcbiAxMTk6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDEyMDpcXHRcXHRcXHRlcnIgPSAwO1xcbiAxMjE6XFx0XFx0fVxcbiAxMjI6XFx0XFxuIDEyMzpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIDEyNDpcXHRcXHR2ZyA9IG5icF92bGFuX2dyb3VwX3JjdShwKTtcXG4gMTI1OlxcdFxcdGlmICghdmcpXFxuIDEyNjpcXHRcXHRcXHRnb3RvIG91dF9yY3VfdW5sb2NrO1xcbiAxMjc6XFx0XFxuIDEyODpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh2LCBcXHUwMDI2dmctXFx1MDAzZXZsYW5fbGlzdCwgdmxpc3QpIHtcXG4gMTI5OlxcdFxcdFxcdGlmICh2LVxcdTAwM2VicnZsYW4tXFx1MDAzZW1zdGkgIT0gbXN0aSlcXG4gMTMwOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAxMzE6XFx0XFxuIDEzMjpcXHRcXHRcXHRicl9tc3Rfdmxhbl9zZXRfc3RhdGUodmcsIHYsIHN0YXRlKTtcXG4gMTMzOlxcdFxcdH1cXG4gMTM0OlxcdFxcbiAxMzU6XFx0b3V0X3JjdV91bmxvY2s6XFxuIDEzNjpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gMTM3OlxcdG91dDpcXG4gMTM4OlxcdFxcdHJldHVybiBlcnI7XFxuIDEzOTpcXHR9XFxuIDE0MDpcXHRcXG4gMTQxOlxcdHN0YXRpYyB2b2lkIGJyX21zdF92bGFuX3N5bmNfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqcHYsIHUxNiBtc3RpKVxcbiAxNDI6XFx0e1xcbiAxNDM6XFx0XFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcgPSBuYnBfdmxhbl9ncm91cChwdi1cXHUwMDNlcG9ydCk7XFxuIDE0NDpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2O1xcbiAxNDU6XFx0XFxuIDE0NjpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHYsIFxcdTAwMjZ2Zy1cXHUwMDNldmxhbl9saXN0LCB2bGlzdCkge1xcbiAxNDc6XFx0XFx0XFx0LyogSWYgdGhpcyBwb3J0IGFscmVhZHkgaGFzIGEgZGVmaW5lZCBzdGF0ZSBpbiB0aGlzXFxuIDE0ODpcXHRcXHRcXHQgKiBNU1RJICh0aHJvdWdoIHNvbWUgb3RoZXIgVkxBTiBtZW1iZXJzaGlwKSwgaW5oZXJpdFxcbiAxNDk6XFx0XFx0XFx0ICogaXQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE3OjE4OjM3LjU1NjM1MDA3N1oiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMjA3MTU2MDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBicl9tc3QuY2AgSXNzdWUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBHaXQgaGlzdG9yeS4gTGV0IG1lIGZpcmUgdXAgYGdpdCBsb2dgIGFuZCBzZWUgd2hhdCB0aGUgY29tbWl0IGhpc3Rvcnkgb2YgYGJyX21zdC5jYCByZXZlYWxzLiBIb3BlZnVsbHksIHdoYXRldmVyIGZpeCBvciBmZWF0dXJlIHRoaXMgaXMgcmVsYXRlZCB0byB3aWxsIGJlIGFwcGFyZW50IGluIHRoZSBjb21taXQgbWVzc2FnZXMuIEknbSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgYnVnIHRoaXMgY29kZSBhZGRyZXNzZXMuIElmIHRoZSBsb2cgaXNuJ3QgaW1tZWRpYXRlbHkgaGVscGZ1bCwgSSBjYW4gc2VhcmNoIGZvciBhIHNwZWNpZmljIGNvbW1pdCBoYXNoIOKAkyBpZiBJIGhhdmUgb25lIOKAkyBvciByZWxldmFudCBrZXl3b3JkcyB0byBwaW5wb2ludCB0aGUgY2hhbmdlcyByZWxhdGVkIHRvIHRoZSBwcm9ibGVtLiBJdCdzIHRpbWUgdG8gYmVjb21lIGEgZGV0ZWN0aXZlIGFuZCB0cmFjayBkb3duIHRoZSByb290IGNhdXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTUxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNzoxODozOS43NjM1MDk0OFoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0ODM1ODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJfbXN0X3NldF9zdGF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfbXN0LmM9ODI9c3RhdGljIHZvaWQgYnJfbXN0X3ZsYW5fc2V0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tc3QuYy05NC1cXG5uZXQvYnJpZGdlL2JyX21zdC5jOjk1OmludCBicl9tc3Rfc2V0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHUxNiBtc3RpLCB1OCBzdGF0ZSxcXG5uZXQvYnJpZGdlL2JyX21zdC5jLTk2LVxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tc3QuYz0zMDg9c3RhdGljIGludCBicl9tc3RfcHJvY2Vzc19vbmUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMzM0LVxcbm5ldC9icmlkZ2UvYnJfbXN0LmM6MzM1OlxcdHJldHVybiBicl9tc3Rfc2V0X3N0YXRlKHAsIG1zdGksIHN0YXRlLCBleHRhY2spO1xcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMzM2LX1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE5NTA9c3RhdGljIGlubGluZSBib29sIGJyX21zdF9pc19lbmFibGVkKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTU3LVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE5NTg6aW50IGJyX21zdF9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTE2IG1zdGksIHU4IHN0YXRlLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NTktXFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTk3MT1zdGF0aWMgaW5saW5lIGJvb2wgYnJfbXN0X2lzX2VuYWJsZWQoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NzUtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTk3NjpzdGF0aWMgaW5saW5lIGludCBicl9tc3Rfc2V0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHUxNiBtc3RpLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NzctXFx0XFx0XFx0XFx0ICAgdTggc3RhdGUsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfc3RwLmM9Mjk9dm9pZCBicl9zZXRfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdW5zaWduZWQgaW50IHN0YXRlKVxcbi0tXFxubmV0L2JyaWRnZS9icl9zdHAuYy00Ni1cXHRpZiAoYnJfb3B0X2dldChwLVxcdTAwM2ViciwgQlJPUFRfTVNUX0VOQUJMRUQpKSB7XFxubmV0L2JyaWRnZS9icl9zdHAuYzo0NzpcXHRcXHRlcnIgPSBicl9tc3Rfc2V0X3N0YXRlKHAsIDAsIHN0YXRlLCBOVUxMKTtcXG5uZXQvYnJpZGdlL2JyX3N0cC5jLTQ4LVxcdFxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE3OjE4OjM5LjgxMDk5NjY3MloiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNDEyMjc2NDAwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvbW1pdCBmb3IgQ29uY3VycmVuY3kgYW5kIE1lbW9yeSBTYWZldHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHdoYXQgdGhpcyBjb21taXQgaXMgZG9pbmcuIE15IHByaW1hcnkgY29uY2VybiBoZXJlIGlzIHRoYXQgdGhlIG9yaWdpbmFsIGNvZGUgaGFkIGBzd2l0Y2hkZXZfcG9ydF9hdHRyX3NldCgpYCBjYWxsZWQgKmluc2lkZSogYW4gYHJjdV9yZWFkX2xvY2soKWAgc2VjdGlvbi4gVGhhdCdzIGEgaHVnZSByZWQgZmxhZyBiZWNhdXNlIGBzd2l0Y2hkZXZfcG9ydF9hdHRyX3NldGAgY2FuIHBvdGVudGlhbGx5IHNsZWVwLCB3aGljaCBpcyBhIGJpZyBuby1ubyB3aGVuIHlvdSdyZSBpbiBhbiBhdG9taWMgY29udGV4dCBwcm90ZWN0ZWQgYnkgUkNVLiBUaGF0J3MgYSBjbGFzc2ljIFwic2xlZXBpbmcgZnVuY3Rpb24gY2FsbGVkIGZyb20gaW52YWxpZCBjb250ZXh0XCIgYnVnLCBvciBhIHNjaGVkdWxpbmctd2hpbGUtYXRvbWljIGlzc3VlLCBvciBzb21ldGhpbmcgc2ltaWxhci4gVGhleSB3ZXJlIGFsc28gYWRkaW5nIGBBU1NFUlRfUlROTCgpYCB3aGljaCByZWluZm9yY2VzIHRoYXQgY29uY2Vybi5cblxuVGhlIHBhdGNoJ3Mgc29sdXRpb24gaXMgcXVpdGUgc2Vuc2libGUuIEl0IG1vdmVzIHRoZSBvZmZlbmRpbmcgY2FsbCBvdXRzaWRlIG9mIHRoZSBgcmN1X3JlYWRfbG9jaygpYCByZWdpb24gZW50aXJlbHksIGFuZCBpbmNsdWRlcyBhbiBgQVNTRVJUX1JUTkwoKWAgY2FsbC4gSXQgYWxzbyBhZGRzIGEgcXVpY2sgY2hlY2sgZm9yIHRoZSByZXN1bHQgb2YgYHN3aXRjaGRldl9wb3J0X2F0dHJfc2V0KClgIGFuZCByZXR1cm5zIGltbWVkaWF0ZWx5IGlmIGl0IGVycm9ycywgKmJlZm9yZSogZXZlbiBhY3F1aXJpbmcgdGhlIFJDVSBsb2NrLiBGaW5hbGx5LCB0aGUgUkNVIGxvY2sgaXMgbmFycm93ZWQgdG8gb25seSBjb3ZlciB0aGUgaXRlcmF0aW9uIG92ZXIgYHZnLVx1MDAzZXZsYW5fbGlzdGAsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBpdCBzaG91bGQgYmUgcHJvdGVjdGluZy5cblxuTm93LCBsZXQncyB0aGluayBhYm91dCBtZW1vcnkgc2FmZXR5LiBJIHNlZSB0aGF0IHRoZSBgYXR0cmAgc3RydWN0IGlzIGluaXRpYWxpemVkIHdpdGggZGVzaWduYXRlZCBpbml0aWFsaXplcnMsIHNvIHRoZSBjb21waWxlciB3aWxsIHplcm8gb3V0IHRoZSB1bm1lbnRpb25lZCBmaWVsZHMuIFRoaXMgd2FzIGFscmVhZHkgaW4gdGhlIG9yaWdpbmFsIGNvZGUsIGFuZCB0aGUgcGF0Y2ggZG9lc24ndCBjaGFuZ2UgYW55dGhpbmcgYWJvdXQgKmhvdyogYGF0dHJgIGlzIGluaXRpYWxpemVkLCBvbmx5ICp3aGVuKiBpdCdzIHVzZWQuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMgYXJlIGhhcHBlbmluZyBoZXJlLCBhbmQgdGhlcmUgYXJlbid0IGFueSBvYnZpb3VzIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdHMgYmVpbmcgdXNlZC4gVGhpcyBjaGFuZ2UgZG9lc24ndCBpbnRyb2R1Y2UgYW55IGluZm8tbGVha3MgdG8gdXNlciBzcGFjZS4gSXQgYWxzbyBkb2Vzbid0IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBmb3IgY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nLiBTbGVlcGluZyBpbnNpZGUgYW4gYXRvbWljIGNvbnRleHQgaXMgZWFzaWx5IGNhdWdodCBieSBgbWlnaHRfc2xlZXAoKWAgYW5kIHRoZSBzdGFuZGFyZCBrZXJuZWwgZGVidWcgY29uZmlndXJhdGlvbnMuIExvY2tpbmcgYW5kIFJUTkwgYXNzZXJ0aW9ucyBhcmUgY2F1Z2h0IGJ5IFJUTkwsIGxvY2tkZXAsIGFuZCBkZWJ1ZyBhc3NlcnRzLlxuXG5Pa2F5LCBsZXQncyBxdWlja2x5IGNsYXJpZnkgS0FTQU4gdmVyc3VzIEtNU0FOLiBLTVNBTiBpcyBhbGwgYWJvdXQgZGV0ZWN0aW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBwb3RlbnRpYWwgaW5mby1sZWFrcy4gS0FTQU4gZm9jdXNlcyBvbiBhIGJyb2FkZXIgcmFuZ2Ugb2YgbWVtb3J5IGVycm9ycy4gSW4gdGhpcyBjYXNlLCB0aGlzIGlzIGEgYnVnIGZpeCBmb3Igc2xlZXAtaW4tYXRvbWljLCBub3QgYSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuIFRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBvciBhbHRlciBhbnkgb2YgdGhlIHRoaW5ncyB0aGF0IEtNU0FOIHdvdWxkIGNhdGNoLiBUaGlzIGlzbid0IGEgS01TQU4gaXNzdWU7IHRoaXMgaXMgYSBjb25jdXJyZW5jeS9hdG9taWMgY29udGV4dCBpc3N1ZS4gVGhlcmVmb3JlLCBOZWVkc0tNU0FOIHNob3VsZCBiZSBmYWxzZS5cblxuU28sIGFsbCBnb29kLiBUaGUgcGF0Y2ggaXMgY2xlYW4gYW5kIHN0cmFpZ2h0Zm9yd2FyZC4gV2UncmUgZ29vZCB0byBnby5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM5MiwiT3V0cHV0VG9rZW5zIjoyMTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTc6MTk6MTMuOTMzNzYzMzcxWiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHNsZWVwLWluLWF0b21pYyBidWcgaW4gYGJyX21zdF9zZXRfc3RhdGUoKWAgYnkgbW92aW5nIGBzd2l0Y2hkZXZfcG9ydF9hdHRyX3NldCgpYCAod2hpY2ggbWF5IHNsZWVwKSBvdXRzaWRlIG9mIHRoZSBgcmN1X3JlYWRfbG9jaygpYCBjcml0aWNhbCBzZWN0aW9uLCBhZGRpbmcgYEFTU0VSVF9SVE5MKClgLCBhbmQgb25seSBhY3F1aXJpbmcgYHJjdV9yZWFkX2xvY2soKWAgd2hlbiByZWFkaW5nIHRoZSBWTEFOIGdyb3VwIGFuZCBpdGVyYXRpbmcgb3ZlciB0aGUgVkxBTiBsaXN0LlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMsIGRvZXMgbm90IGFmZmVjdCBidWZmZXIgYm91bmRzIG9yIGNvcHkgbGVuZ3RocywgYW5kIGRvZXMgbm90IGFsdGVyIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UuIFNsZWVwaW5nIHdoaWxlIGhvbGRpbmcgYW4gUkNVIHJlYWQgbG9jayBpcyBkZXRlY3RlZCBieSBzdGFuZGFyZCBkZWJ1ZyBjb25maWd1cmF0aW9ucyAoYENPTkZJR19ERUJVR19BVE9NSUNfU0xFRVBgIC8gYG1pZ2h0X3NsZWVwKClgKSwgYW5kIGxvY2sgaW52YXJpYW50cyBhcmUgdmVyaWZpZWQgYnkgYEFTU0VSVF9SVE5MKClgIC8gYExPQ0tERVBgLiBCZWNhdXNlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgc2xlZXAtaW4tYXRvbWljIGJ1ZyBpbiBgYnJfbXN0X3NldF9zdGF0ZSgpYCBieSBtb3ZpbmcgYHN3aXRjaGRldl9wb3J0X2F0dHJfc2V0KClgICh3aGljaCBtYXkgc2xlZXApIG91dHNpZGUgb2YgdGhlIGByY3VfcmVhZF9sb2NrKClgIGNyaXRpY2FsIHNlY3Rpb24sIGFkZGluZyBgQVNTRVJUX1JUTkwoKWAsIGFuZCBvbmx5IGFjcXVpcmluZyBgcmN1X3JlYWRfbG9jaygpYCB3aGVuIHJlYWRpbmcgdGhlIFZMQU4gZ3JvdXAgYW5kIGl0ZXJhdGluZyBvdmVyIHRoZSBWTEFOIGxpc3QuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcywgZG9lcyBub3QgYWZmZWN0IGJ1ZmZlciBib3VuZHMgb3IgY29weSBsZW5ndGhzLCBhbmQgZG9lcyBub3QgYWx0ZXIgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gU2xlZXBpbmcgd2hpbGUgaG9sZGluZyBhbiBSQ1UgcmVhZCBsb2NrIGlzIGRldGVjdGVkIGJ5IHN0YW5kYXJkIGRlYnVnIGNvbmZpZ3VyYXRpb25zIChgQ09ORklHX0RFQlVHX0FUT01JQ19TTEVFUGAgLyBgbWlnaHRfc2xlZXAoKWApLCBhbmQgbG9jayBpbnZhcmlhbnRzIGFyZSB2ZXJpZmllZCBieSBgQVNTRVJUX1JUTkwoKWAgLyBgTE9DS0RFUGAuIEJlY2F1c2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowvd7bt[1] Phase: Succeeded StartedAt: 2026-09-11 17:19:24 +0000 UTC FinishedAt: 2026-09-11 17:19:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvd7bt[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-11 17:19:24 +0000 UTC FinishedAt: 2026-09-11 17:19:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvd7bt[2] Phase: Succeeded StartedAt: 2026-09-11 17:19:24 +0000 UTC FinishedAt: 2026-09-11 21:05:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvd7bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_mst_set_state","br_mst_process","br_mst_set_enabled","br_set_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"90b7f8e7-7e7a-4caa-9d43-c9cb9d55529f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-11 17:19:24 +0000 UTC FinishedAt: 2026-09-11 21:05:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_mst_set_state","br_mst_process","br_mst_set_enabled","br_set_state"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"90b7f8e7-7e7a-4caa-9d43-c9cb9d55529f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowvd7bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_mst_set_state","br_mst_process","br_mst_set_enabled","br_set_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"90b7f8e7-7e7a-4caa-9d43-c9cb9d55529f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-11 17:19:24 +0000 UTC FinishedAt: 2026-09-11 17:19:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvd7bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_mst_set_state","br_mst_process","br_mst_set_enabled","br_set_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"90b7f8e7-7e7a-4caa-9d43-c9cb9d55529f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-11 17:19:24 +0000 UTC FinishedAt: 2026-09-11 17:19:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowvd7bt/series-workflowvd7bt-convert-artifact-300032936/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvd7bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_mst_set_state","br_mst_process","br_mst_set_enabled","br_set_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"90b7f8e7-7e7a-4caa-9d43-c9cb9d55529f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-11 17:19:35 +0000 UTC FinishedAt: 2026-09-11 17:38:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvd7bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_mst_set_state","br_mst_process","br_mst_set_enabled","br_set_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"90b7f8e7-7e7a-4caa-9d43-c9cb9d55529f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-11 17:19:35 +0000 UTC FinishedAt: 2026-09-11 17:38:13 +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:*bf1460c7-1523-4283-b112-aa962b5a4d27,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-workflowvd7bt/series-workflowvd7bt-convert-artifact-300032936/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": "c3a1a3c4-a99e-4a79-b5f9-0f3f5ab7c216", "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-workflowvd7bt/series-workflowvd7bt-build-action-2126682654/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvd7bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_mst_set_state","br_mst_process","br_mst_set_enabled","br_set_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"90b7f8e7-7e7a-4caa-9d43-c9cb9d55529f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-11 17:19:35 +0000 UTC FinishedAt: 2026-09-11 17:38:03 +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:*bf1460c7-1523-4283-b112-aa962b5a4d27,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-workflowvd7bt/series-workflowvd7bt-convert-artifact-300032936/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": "c3a1a3c4-a99e-4a79-b5f9-0f3f5ab7c216", "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-workflowvd7bt/series-workflowvd7bt-build-action-2126682654/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvd7bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_mst_set_state","br_mst_process","br_mst_set_enabled","br_set_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"90b7f8e7-7e7a-4caa-9d43-c9cb9d55529f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-11 17:38:13 +0000 UTC FinishedAt: 2026-09-11 17:38:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvd7bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_mst_set_state","br_mst_process","br_mst_set_enabled","br_set_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"90b7f8e7-7e7a-4caa-9d43-c9cb9d55529f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-11 17:38:13 +0000 UTC FinishedAt: 2026-09-11 17:38:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvd7bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_mst_set_state","br_mst_process","br_mst_set_enabled","br_set_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"90b7f8e7-7e7a-4caa-9d43-c9cb9d55529f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-11 17:38:13 +0000 UTC FinishedAt: 2026-09-11 17:38:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvd7bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_mst_set_state","br_mst_process","br_mst_set_enabled","br_set_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"90b7f8e7-7e7a-4caa-9d43-c9cb9d55529f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-11 17:38:13 +0000 UTC FinishedAt: 2026-09-11 17:38:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"90b7f8e7-7e7a-4caa-9d43-c9cb9d55529f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowvd7bt/series-workflowvd7bt-convert-artifact-2642728591/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvd7bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_mst_set_state","br_mst_process","br_mst_set_enabled","br_set_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"90b7f8e7-7e7a-4caa-9d43-c9cb9d55529f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-11 17:38:23 +0000 UTC FinishedAt: 2026-09-11 17:40:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvd7bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_mst_set_state","br_mst_process","br_mst_set_enabled","br_set_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"90b7f8e7-7e7a-4caa-9d43-c9cb9d55529f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-11 17:38:23 +0000 UTC FinishedAt: 2026-09-11 17:40:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c3a1a3c4-a99e-4a79-b5f9-0f3f5ab7c216,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-workflowvd7bt/series-workflowvd7bt-build-action-2126682654/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-workflowvd7bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_mst_set_state","br_mst_process","br_mst_set_enabled","br_set_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"90b7f8e7-7e7a-4caa-9d43-c9cb9d55529f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-11 17:40:17 +0000 UTC FinishedAt: 2026-09-11 17:40:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvd7bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_mst_set_state","br_mst_process","br_mst_set_enabled","br_set_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"90b7f8e7-7e7a-4caa-9d43-c9cb9d55529f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-11 17:40:17 +0000 UTC FinishedAt: 2026-09-11 17:40:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvd7bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_mst_set_state","br_mst_process","br_mst_set_enabled","br_set_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"90b7f8e7-7e7a-4caa-9d43-c9cb9d55529f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-11 17:40:17 +0000 UTC FinishedAt: 2026-09-11 18:00:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvd7bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_mst_set_state","br_mst_process","br_mst_set_enabled","br_set_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"90b7f8e7-7e7a-4caa-9d43-c9cb9d55529f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-11 17:40:17 +0000 UTC FinishedAt: 2026-09-11 18:00:55 +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:*bf1460c7-1523-4283-b112-aa962b5a4d27,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-workflowvd7bt/series-workflowvd7bt-convert-artifact-2642728591/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": "95c4339e-d43b-4bb7-abce-5368cf75c50f", "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-workflowvd7bt/series-workflowvd7bt-build-action-830322595/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvd7bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_mst_set_state","br_mst_process","br_mst_set_enabled","br_set_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"90b7f8e7-7e7a-4caa-9d43-c9cb9d55529f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-11 17:40:17 +0000 UTC FinishedAt: 2026-09-11 18:00:16 +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:*bf1460c7-1523-4283-b112-aa962b5a4d27,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-workflowvd7bt/series-workflowvd7bt-convert-artifact-2642728591/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": "95c4339e-d43b-4bb7-abce-5368cf75c50f", "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-workflowvd7bt/series-workflowvd7bt-build-action-830322595/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvd7bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_mst_set_state","br_mst_process","br_mst_set_enabled","br_set_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"90b7f8e7-7e7a-4caa-9d43-c9cb9d55529f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-11 18:00:55 +0000 UTC FinishedAt: 2026-09-11 18:00:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvd7bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_mst_set_state","br_mst_process","br_mst_set_enabled","br_set_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"90b7f8e7-7e7a-4caa-9d43-c9cb9d55529f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-11 18:00:55 +0000 UTC FinishedAt: 2026-09-11 18:00:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvd7bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_mst_set_state","br_mst_process","br_mst_set_enabled","br_set_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"90b7f8e7-7e7a-4caa-9d43-c9cb9d55529f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-11 18:00:55 +0000 UTC FinishedAt: 2026-09-11 18:02:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvd7bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_mst_set_state","br_mst_process","br_mst_set_enabled","br_set_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"90b7f8e7-7e7a-4caa-9d43-c9cb9d55529f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-11 18:00:55 +0000 UTC FinishedAt: 2026-09-11 18:02:35 +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:*95c4339e-d43b-4bb7-abce-5368cf75c50f,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-workflowvd7bt/series-workflowvd7bt-build-action-830322595/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-workflowvd7bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_mst_set_state","br_mst_process","br_mst_set_enabled","br_set_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"90b7f8e7-7e7a-4caa-9d43-c9cb9d55529f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-11 18:02:45 +0000 UTC FinishedAt: 2026-09-11 21:05:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvd7bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_mst_set_state","br_mst_process","br_mst_set_enabled","br_set_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"90b7f8e7-7e7a-4caa-9d43-c9cb9d55529f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-11 18:02:45 +0000 UTC FinishedAt: 2026-09-11 21:05:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_mst_set_state","br_mst_process","br_mst_set_enabled","br_set_state"],"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:*c3a1a3c4-a99e-4a79-b5f9-0f3f5ab7c216,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*95c4339e-d43b-4bb7-abce-5368cf75c50f,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-workflowvd7bt/series-workflowvd7bt-build-action-2126682654/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-workflowvd7bt/series-workflowvd7bt-build-action-830322595/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowvd7bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_mst_set_state","br_mst_process","br_mst_set_enabled","br_set_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"90b7f8e7-7e7a-4caa-9d43-c9cb9d55529f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-11 18:02:45 +0000 UTC FinishedAt: 2026-09-11 18:02:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvd7bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_mst_set_state","br_mst_process","br_mst_set_enabled","br_set_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"90b7f8e7-7e7a-4caa-9d43-c9cb9d55529f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-11 18:02:45 +0000 UTC FinishedAt: 2026-09-11 18:02:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_mst_set_state","br_mst_process","br_mst_set_enabled","br_set_state"],"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-workflowvd7bt/series-workflowvd7bt-convert-artifact-30132040/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvd7bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_mst_set_state","br_mst_process","br_mst_set_enabled","br_set_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"90b7f8e7-7e7a-4caa-9d43-c9cb9d55529f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-11 18:02:45 +0000 UTC FinishedAt: 2026-09-11 18:02:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvd7bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_mst_set_state","br_mst_process","br_mst_set_enabled","br_set_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"90b7f8e7-7e7a-4caa-9d43-c9cb9d55529f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-11 18:02:45 +0000 UTC FinishedAt: 2026-09-11 18:02:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvd7bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_mst_set_state","br_mst_process","br_mst_set_enabled","br_set_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"90b7f8e7-7e7a-4caa-9d43-c9cb9d55529f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-11 18:02:45 +0000 UTC FinishedAt: 2026-09-11 18:02:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvd7bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_mst_set_state","br_mst_process","br_mst_set_enabled","br_set_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"90b7f8e7-7e7a-4caa-9d43-c9cb9d55529f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-11 18:02:55 +0000 UTC FinishedAt: 2026-09-11 21:05:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvd7bt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_mst_set_state","br_mst_process","br_mst_set_enabled","br_set_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q","NET_SWITCHDEV"],"series_id":"90b7f8e7-7e7a-4caa-9d43-c9cb9d55529f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-11 18:02:55 +0000 UTC FinishedAt: 2026-09-11 21:05:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c3a1a3c4-a99e-4a79-b5f9-0f3f5ab7c216,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*95c4339e-d43b-4bb7-abce-5368cf75c50f,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-workflowvd7bt/series-workflowvd7bt-build-action-2126682654/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-workflowvd7bt/series-workflowvd7bt-build-action-830322595/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-workflowvd7bt/series-workflowvd7bt-convert-artifact-30132040/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,}